# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1234436057 0
# Node ID 32b15413749255e0cd518f25d9202759586dcb27
# Parent 94e12fa57816c26f8b76061f17c33928be202c85
vtd: move the snoop control detection out of acpi_dmar_init()
where the capability value is not initialized thus we may
get random value.
Signed-off-by: Xin, Xiaohui<xiaohui.xin@xxxxxxxxx>
---
xen/drivers/passthrough/vtd/dmar.c | 19 +------------------
xen/drivers/passthrough/vtd/iommu.c | 18 ++++++++++++++++++
2 files changed, 19 insertions(+), 18 deletions(-)
diff -r 94e12fa57816 -r 32b154137492 xen/drivers/passthrough/vtd/dmar.c
--- a/xen/drivers/passthrough/vtd/dmar.c Thu Feb 12 10:53:10 2009 +0000
+++ b/xen/drivers/passthrough/vtd/dmar.c Thu Feb 12 10:54:17 2009 +0000
@@ -519,8 +519,6 @@ int acpi_dmar_init(void)
int acpi_dmar_init(void)
{
int rc;
- struct acpi_drhd_unit *drhd;
- struct iommu *iommu;
rc = -ENODEV;
if ( force_iommu )
@@ -537,22 +535,7 @@ int acpi_dmar_init(void)
if ( list_empty(&acpi_drhd_units) )
goto fail;
- /* Giving that all devices within guest use same io page table,
- * enable snoop control only if all VT-d engines support it.
- */
- if ( iommu_snoop )
- {
- for_each_drhd_unit ( drhd )
- {
- iommu = drhd->iommu;
- if ( !ecap_snp_ctl(iommu->ecap) ) {
- iommu_snoop = 0;
- break;
- }
- }
- }
-
- printk("Intel VT-d has been enabled, snoop_control=%d.\n", iommu_snoop);
+ printk("Intel VT-d has been enabled\n");
return 0;
diff -r 94e12fa57816 -r 32b154137492 xen/drivers/passthrough/vtd/iommu.c
--- a/xen/drivers/passthrough/vtd/iommu.c Thu Feb 12 10:53:10 2009 +0000
+++ b/xen/drivers/passthrough/vtd/iommu.c Thu Feb 12 10:54:17 2009 +0000
@@ -1765,6 +1765,23 @@ int intel_vtd_setup(void)
if ( init_vtd_hw() )
goto error;
+ /* Giving that all devices within guest use same io page table,
+ * enable snoop control only if all VT-d engines support it.
+ */
+
+ if ( iommu_snoop )
+ {
+ for_each_drhd_unit ( drhd )
+ {
+ iommu = drhd->iommu;
+ if ( !ecap_snp_ctl(iommu->ecap) ) {
+ iommu_snoop = 0;
+ break;
+ }
+ }
+ }
+
+ printk("Intel VT-d snoop control %sabled\n", iommu_snoop ? "en" : "dis");
register_keyhandler('V', dump_iommu_info, "dump iommu info");
return 0;
@@ -1773,6 +1790,7 @@ int intel_vtd_setup(void)
for_each_drhd_unit ( drhd )
iommu_free(drhd);
vtd_enabled = 0;
+ iommu_snoop = 0;
return -ENOMEM;
}
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|