From: Tiejun Chen Date: Wed, 22 Jul 2015 01:39:58 +0000 (+0000) Subject: xen/vtd: enable USB device assignment X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~2706 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=50057149293c81d2a1b2e83fc5dfc4e1b88255ba;p=xen.git 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 CC: Kevin Tian Signed-off-by: Tiejun Chen Acked-by: Kevin Tian --- diff --git a/xen/drivers/passthrough/vtd/dmar.h b/xen/drivers/passthrough/vtd/dmar.h index af1feef2d9..af205f5198 100644 --- a/xen/drivers/passthrough/vtd/dmar.h +++ b/xen/drivers/passthrough/vtd/dmar.h @@ -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_ */ diff --git a/xen/drivers/passthrough/vtd/iommu.c b/xen/drivers/passthrough/vtd/iommu.c index a2f3a66ca0..8a8d763029 100644 --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -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 ) diff --git a/xen/drivers/passthrough/vtd/utils.c b/xen/drivers/passthrough/vtd/utils.c index bd14c02827..b8a077feb7 100644 --- a/xen/drivers/passthrough/vtd/utils.c +++ b/xen/drivers/passthrough/vtd/utils.c @@ -29,13 +29,6 @@ #include "extern.h" #include -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) {