aboutsummaryrefslogtreecommitdiffstats
path: root/xen/drivers
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2013-09-16 12:24:19 +0200
committerJan Beulich <jbeulich@suse.com>2013-09-16 12:24:19 +0200
commit3722827b3719a193df2b4103f61ef8666a0e7d67 (patch)
treedc1ca73a530eeb6f4347daadd99daa1a5fb69f38 /xen/drivers
parent2fd0975f4d61ba7214297e063afe029077004fd3 (diff)
downloadxen-3722827b3719a193df2b4103f61ef8666a0e7d67.tar.gz
xen-3722827b3719a193df2b4103f61ef8666a0e7d67.tar.bz2
xen-3722827b3719a193df2b4103f61ef8666a0e7d67.zip
AMD-Vi: also match IVRS overrides on device ID
Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
Diffstat (limited to 'xen/drivers')
-rw-r--r--xen/drivers/passthrough/amd/iommu_acpi.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/xen/drivers/passthrough/amd/iommu_acpi.c b/xen/drivers/passthrough/amd/iommu_acpi.c
index 9feab86f20..bd66c65888 100644
--- a/xen/drivers/passthrough/amd/iommu_acpi.c
+++ b/xen/drivers/passthrough/amd/iommu_acpi.c
@@ -714,6 +714,24 @@ static u16 __init parse_ivhd_device_special(
* consistency here --- whether entry's IOAPIC ID is valid and
* whether there are conflicting/duplicated entries.
*/
+ apic = find_first_bit(ioapic_cmdline, ARRAY_SIZE(ioapic_sbdf));
+ while ( apic < ARRAY_SIZE(ioapic_sbdf) )
+ {
+ if ( ioapic_sbdf[apic].bdf == bdf &&
+ ioapic_sbdf[apic].seg == seg )
+ break;
+ apic = find_next_bit(ioapic_cmdline, ARRAY_SIZE(ioapic_sbdf),
+ apic + 1);
+ }
+ if ( apic < ARRAY_SIZE(ioapic_sbdf) )
+ {
+ AMD_IOMMU_DEBUG("IVHD: Command line override present for IO-APIC %#x"
+ "(IVRS: %#x devID %04x:%02x:%02x.%u)\n",
+ apic, special->handle, seg, PCI_BUS(bdf),
+ PCI_SLOT(bdf), PCI_FUNC(bdf));
+ break;
+ }
+
for ( apic = 0; apic < nr_ioapics; apic++ )
{
if ( IO_APIC_ID(apic) != special->handle )