|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] VT-d: improve RMRR validity checking
Alex Williamson wrote: good suggestion to check the device type. I cooked a new patch. It skips checking IOAPIC and HPET. pls have a try.On Thu, 2010-03-11 at 10:11 +0800, Weidong Han wrote:Alex, you are right. IOAPICs can be included in any DRHDs. Pls try following patch, if no problem, I will submit it.Thanks Weidong. This of course works, but I still get this output: (XEN) IOAPIC[0]: apic_id 8, version 32, address 0xfec00000, GSI 0-23 (XEN) IOAPIC[1]: apic_id 0, version 32, address 0xfec08000, GSI 24-47 (XEN) IOAPIC[2]: apic_id 10, version 32, address 0xfec10000, GSI 48-71 (XEN) Enabling APIC mode: Phys. Using 3 I/O APICs (XEN) [VT-D]dmar.c:421: Non-existent device (84:13.0) is reported in this DRHD's scope! (XEN) [VT-D]dmar.c:442: There are devices under device scope are not PCI discoverable! if xen fails at VT-d enabling, pls try option iommu=workaround_bios_bug. So now we've effectively relegated this code to printing things that look like errors for both actual bad DMAR tables and 100% spec compliant tables. At a minimum, I think these dprintks need to be reduce to info or debug level since they're effectively just spewing out noise. Can't we put a tag for the device type in the list of scope devices and skip checking discoverable PCI devices for IOAPICs? Do we need to do the same for HPETs? Thanks,
diff -r cadf1bae9ee2 xen/drivers/passthrough/vtd/dmar.c
--- a/xen/drivers/passthrough/vtd/dmar.c Thu Feb 25 18:26:45 2010 +0800
+++ b/xen/drivers/passthrough/vtd/dmar.c Thu Mar 11 19:39:45 2010 +0800
@@ -407,9 +407,15 @@ acpi_parse_one_drhd(struct acpi_dmar_ent
{
u8 b, d, f;
int i, invalid_cnt = 0;
+ struct acpi_dev_scope *acpi_scope = dev_scope_start;
for ( i = 0; i < dmaru->scope.devices_cnt; i++ )
{
+ acpi_scope += (i == 0) ? 0 : acpi_scope->length;
+ if ( acpi_scope->dev_type == ACPI_DEV_IOAPIC ||
+ acpi_scope->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]);
Alex _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |