aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2010-03-11 08:08:32 +0000
committerKeir Fraser <keir.fraser@citrix.com>2010-03-11 08:08:32 +0000
commitbe8c32d7eab83b0e0b48c5111777dd007b28764d (patch)
tree34db3d7102675a6e1b0e2ffff8bc6a5df6f030f7
parentef7b68811b6fef6e48f8f6be02b0d8b9234ed91f (diff)
downloadxen-be8c32d7eab83b0e0b48c5111777dd007b28764d.tar.gz
xen-be8c32d7eab83b0e0b48c5111777dd007b28764d.tar.bz2
xen-be8c32d7eab83b0e0b48c5111777dd007b28764d.zip
VTd: Ignore HPET/IOAPIC decls in DRHD scopes
Signed-off-by: Alex Williamson <alex.williamson@hp.com>
-rw-r--r--xen/drivers/passthrough/vtd/dmar.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/xen/drivers/passthrough/vtd/dmar.c b/xen/drivers/passthrough/vtd/dmar.c
index 1b083f7af8..859ebff37d 100644
--- a/xen/drivers/passthrough/vtd/dmar.c
+++ b/xen/drivers/passthrough/vtd/dmar.c
@@ -407,9 +407,15 @@ acpi_parse_one_drhd(struct acpi_dmar_entry_header *header)
{
u8 b, d, f;
int i, invalid_cnt = 0;
+ void *p;
- for ( i = 0; i < dmaru->scope.devices_cnt; i++ )
+ for ( i = 0, p = dev_scope_start; i < dmaru->scope.devices_cnt;
+ i++, p += ((struct acpi_dev_scope *)p)->length )
{
+ if ( ((struct acpi_dev_scope *)p)->dev_type == ACPI_DEV_IOAPIC ||
+ ((struct acpi_dev_scope *)p)->dev_type == ACPI_DEV_MSI_HPET )
+ continue;
+
b = PCI_BUS(dmaru->scope.devices[i]);
d = PCI_SLOT(dmaru->scope.devices[i]);
f = PCI_FUNC(dmaru->scope.devices[i]);