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:
Tiejun Chen authored and Ian Jackson committed 2015-07-23 13:45:26 +01:00
1 parent bcde2f78cc
commit 5005714929
3 files changed
+2 -17

No files matched your search

-1
View File
@@ -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_ */
+2 -9
View File
@@ -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 )
-7
View File
@@ -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)
{
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.