# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1255955481 -3600
# Node ID ea34183c5c11a5c0525da7871be79309d3fdda64
# Parent a8b16874a5f0ecd952cf8ef00b62c126cce66be6
vtd: A few cleanups to avoid dereferencing NULL drhd pointers.
In most cases I simply remove the reference since it is never actually
used.
Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx>
---
xen/drivers/passthrough/vtd/iommu.c | 42 +++++++++++-------------------------
1 files changed, 13 insertions(+), 29 deletions(-)
diff -r a8b16874a5f0 -r ea34183c5c11 xen/drivers/passthrough/vtd/iommu.c
--- a/xen/drivers/passthrough/vtd/iommu.c Mon Oct 19 13:03:03 2009 +0100
+++ b/xen/drivers/passthrough/vtd/iommu.c Mon Oct 19 13:31:21 2009 +0100
@@ -1006,11 +1006,8 @@ static int intel_iommu_domain_init(struc
static int intel_iommu_domain_init(struct domain *d)
{
struct hvm_iommu *hd = domain_hvm_iommu(d);
- struct iommu *iommu = NULL;
+ struct iommu *iommu;
struct acpi_drhd_unit *drhd;
-
- drhd = list_entry(acpi_drhd_units.next, typeof(*drhd), list);
- iommu = drhd->iommu;
hd->agaw = width_to_agaw(DEFAULT_DOMAIN_ADDRESS_WIDTH);
@@ -1110,10 +1107,6 @@ static int domain_context_mapping_one(
spin_unlock(&hd->mapping_lock);
}
- /*
- * domain_id 0 is not valid on Intel's IOMMU, force domain_id to
- * be 1 based as required by intel's iommu hw.
- */
context_set_domain_id(context, domain);
context_set_address_width(*context, agaw);
context_set_fault_enable(*context);
@@ -1403,9 +1396,6 @@ static int intel_iommu_map_page(
int pte_present;
int flush_dev_iotlb;
- drhd = list_entry(acpi_drhd_units.next, typeof(*drhd), list);
- iommu = drhd->iommu;
-
/* do nothing if dom0 and iommu supports pass thru */
if ( iommu_passthrough && (d->domain_id == 0) )
return 0;
@@ -1455,13 +1445,7 @@ static int intel_iommu_map_page(
static int intel_iommu_unmap_page(struct domain *d, unsigned long gfn)
{
- struct acpi_drhd_unit *drhd;
- struct iommu *iommu;
-
- drhd = list_entry(acpi_drhd_units.next, typeof(*drhd), list);
- iommu = drhd->iommu;
-
- /* do nothing if dom0 and iommu supports pass thru */
+ /* Do nothing if dom0 and iommu supports pass thru. */
if ( iommu_passthrough && (d->domain_id == 0) )
return 0;
@@ -1776,18 +1760,18 @@ int intel_vtd_setup(void)
P(iommu_intremap, "Interrupt Remapping");
#undef P
- /* Allocate IO page directory page for the domain. */
drhd = list_entry(acpi_drhd_units.next, typeof(*drhd), list);
- iommu = drhd->iommu;
-
- /* Allocate domain id bitmap, and set bit 0 as reserved */
- domid_bitmap_size = cap_ndoms(iommu->cap);
- domid_bitmap = xmalloc_array(unsigned long,
- BITS_TO_LONGS(domid_bitmap_size));
- if ( domid_bitmap == NULL )
- goto error;
- memset(domid_bitmap, 0, domid_bitmap_size / 8);
- set_bit(0, domid_bitmap);
+ if ( drhd != NULL )
+ {
+ /* Allocate domain id bitmap, and set bit 0 as reserved. */
+ domid_bitmap_size = cap_ndoms(drhd->iommu->cap);
+ domid_bitmap = xmalloc_array(unsigned long,
+ BITS_TO_LONGS(domid_bitmap_size));
+ if ( domid_bitmap == NULL )
+ goto error;
+ memset(domid_bitmap, 0, domid_bitmap_size / 8);
+ __set_bit(0, domid_bitmap);
+ }
scan_pci_devices();
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|