diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2010-03-11 08:08:32 +0000 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2010-03-11 08:08:32 +0000 |
commit | be8c32d7eab83b0e0b48c5111777dd007b28764d (patch) | |
tree | 34db3d7102675a6e1b0e2ffff8bc6a5df6f030f7 | |
parent | ef7b68811b6fef6e48f8f6be02b0d8b9234ed91f (diff) | |
download | xen-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.c | 8 |
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]); |