[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]); Alexdiff -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 17:49:40 2010 +0800 @@ -437,11 +437,9 @@ acpi_parse_one_drhd(struct acpi_dmar_ent else { dprintk(XENLOG_WARNING VTDPREFIX, - " The DRHD is invalid due to there are devices under " - "its scope are not PCI discoverable! Pls try option " - "iommu=force or iommu=workaround_bios_bug if you " - "really want VT-d\n"); - ret = -EINVAL; + " There are devices under device scope are not PCI " + "discoverable! if xen fails at VT-d enabling, pls try " + "option iommu=workaround_bios_bug.\n"); } } else _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |