mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
xen/vtd: enable USB device assignment
USB RMRR may conflict with guest BIOS region. In such case, identity mapping setup is simply skipped in previous implementation. Now we can handle this scenario cleanly with new policy mechanism so previous hack code can be removed now. CC: Yang Zhang <yang.z.zhang@intel.com> CC: Kevin Tian <kevin.tian@intel.com> Signed-off-by: Tiejun Chen <tiejun.chen@intel.com> Acked-by: Kevin Tian <kevin.tian@intel.com>
This commit is contained in:
1 parent
bcde2f78cc
commit
5005714929
3 files changed
+2
-17
No files matched your search
@@ -129,7 +129,6 @@ do { \
|
||||
|
||||
int vtd_hw_check(void);
|
||||
void disable_pmr(struct iommu *iommu);
|
||||
int is_usb_device(u16 seg, u8 bus, u8 devfn);
|
||||
int is_igd_drhd(struct acpi_drhd_unit *drhd);
|
||||
|
||||
#endif /* _DMAR_H_ */
|
||||
@@ -2242,11 +2242,9 @@ static int reassign_device_ownership(
|
||||
/*
|
||||
* If the device belongs to the hardware domain, and it has RMRR, don't
|
||||
* remove it from the hardware domain, because BIOS may use RMRR at
|
||||
* booting time. Also account for the special casing of USB below (in
|
||||
* intel_iommu_assign_device()).
|
||||
* booting time.
|
||||
*/
|
||||
if ( !is_hardware_domain(source) &&
|
||||
!is_usb_device(pdev->seg, pdev->bus, pdev->devfn) )
|
||||
if ( !is_hardware_domain(source) )
|
||||
{
|
||||
const struct acpi_rmrr_unit *rmrr;
|
||||
u16 bdf;
|
||||
@@ -2299,13 +2297,8 @@ static int intel_iommu_assign_device(
|
||||
if ( ret )
|
||||
return ret;
|
||||
|
||||
/* FIXME: Because USB RMRR conflicts with guest bios region,
|
||||
* ignore USB RMRR temporarily.
|
||||
*/
|
||||
seg = pdev->seg;
|
||||
bus = pdev->bus;
|
||||
if ( is_usb_device(seg, bus, pdev->devfn) )
|
||||
return 0;
|
||||
|
||||
/* Setup rmrr identity mapping */
|
||||
for_each_rmrr_device( rmrr, bdf, i )
|
||||
|
||||
@@ -29,13 +29,6 @@
|
||||
#include "extern.h"
|
||||
#include <asm/io_apic.h>
|
||||
|
||||
int is_usb_device(u16 seg, u8 bus, u8 devfn)
|
||||
{
|
||||
u16 class = pci_conf_read16(seg, bus, PCI_SLOT(devfn), PCI_FUNC(devfn),
|
||||
PCI_CLASS_DEVICE);
|
||||
return (class == 0xc03);
|
||||
}
|
||||
|
||||
/* Disable vt-d protected memory registers. */
|
||||
void disable_pmr(struct iommu *iommu)
|
||||
{
|
||||
|
||||