# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1217324501 -3600
# Node ID 507045f254e91bd19251c7b327be8f0540561c0d
# Parent 7f65527eacd63c8ecca819ca0712801d56658d6b
vtd: Fix some dmar bugs
In acpi_parse_one_drhd(), remove return directly when only one
INCLUDE_ALL check fails, so that avoid memory leak. In addition,
remove "dmaru->scope.devices_cnt == 0 && !dmaru->include_all" check,
due to PCI-PCI bridges are not counted.
This patch fixes bug #1307.
Signed-off-by: Weidong Han <weidong.han@xxxxxxxxx>
---
xen/drivers/passthrough/vtd/dmar.c | 15 ++++++++-------
1 files changed, 8 insertions(+), 7 deletions(-)
diff -r 7f65527eacd6 -r 507045f254e9 xen/drivers/passthrough/vtd/dmar.c
--- a/xen/drivers/passthrough/vtd/dmar.c Tue Jul 29 10:05:32 2008 +0100
+++ b/xen/drivers/passthrough/vtd/dmar.c Tue Jul 29 10:41:41 2008 +0100
@@ -238,15 +238,15 @@ static int __init acpi_parse_dev_scope(v
bus = pci_conf_read8(bus, path->dev, path->fn, PCI_SECONDARY_BUS);
path++;
}
-
+
switch ( acpi_scope->dev_type )
{
case ACPI_DEV_P2PBRIDGE:
{
sec_bus = pci_conf_read8(
- bus, path->dev, path->fn, PCI_SECONDARY_BUS);
+ bus, path->dev, path->fn, PCI_SECONDARY_BUS);
sub_bus = pci_conf_read8(
- bus, path->dev, path->fn, PCI_SUBORDINATE_BUS);
+ bus, path->dev, path->fn, PCI_SUBORDINATE_BUS);
dprintk(XENLOG_INFO VTDPREFIX,
"found bridge: bdf = %x:%x.%x sec = %x sub = %x\n",
bus, path->dev, path->fn, sec_bus, sub_bus);
@@ -328,13 +328,13 @@ acpi_parse_one_drhd(struct acpi_dmar_ent
if ( include_all )
{
dprintk(XENLOG_WARNING VTDPREFIX,
- "Onlyu onw INCLUDE_ALL device scope is allowed\n");
- return -EINVAL;
+ "Only one INCLUDE_ALL device scope is allowed\n");
+ ret = -EINVAL;
}
include_all = 1;
}
- if ( ret || (dmaru->scope.devices_cnt == 0 && !dmaru->include_all) )
+ if ( ret )
xfree(dmaru);
else
acpi_register_drhd_unit(dmaru);
@@ -396,7 +396,8 @@ acpi_parse_one_atsr(struct acpi_dmar_ent
ret = acpi_parse_dev_scope(dev_scope_start, dev_scope_end,
atsru, ATSR_TYPE);
}
- else {
+ else
+ {
dprintk(XENLOG_INFO VTDPREFIX, "found ALL_PORTS\n");
/* Only allow one ALL_PORTS */
if ( all_ports )
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|