[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-4.0-testing] amd iommu: Fix a xen crash after pci-attach



# HG changeset patch
# User Keir Fraser <keir@xxxxxxx>
# Date 1297328645 0
# Node ID 11db1234d89afc7834b07b6547dbe2b5f2e56725
# Parent  90c7e62a49c90fd14865696526d7749df44fd0cb
amd iommu: Fix a xen crash after pci-attach

pci-detach triggers IO page table deallocation if the last passthru
device has been removed from pdev list, and this will result a BUG on
amd systems for next pci-attach. This patch fixes this issue.

Signed-off-by: Wei Wang <wei.wang2@xxxxxxx>
xen-unstable changeset:   22872:cba9a84d32fb
xen-unstable date:        Sun Feb 06 16:54:01 2011 +0000
---
 xen/drivers/passthrough/amd/pci_amd_iommu.c |    6 ++++++
 1 files changed, 6 insertions(+)

diff -r 90c7e62a49c9 -r 11db1234d89a xen/drivers/passthrough/amd/pci_amd_iommu.c
--- a/xen/drivers/passthrough/amd/pci_amd_iommu.c       Wed Feb 09 09:02:12 
2011 +0000
+++ b/xen/drivers/passthrough/amd/pci_amd_iommu.c       Thu Feb 10 09:04:05 
2011 +0000
@@ -277,6 +277,7 @@ static int reassign_device( struct domai
     struct pci_dev *pdev;
     struct amd_iommu *iommu;
     int bdf;
+    struct hvm_iommu *t = domain_hvm_iommu(target);
 
     ASSERT(spin_is_locked(&pcidevs_lock));
     pdev = pci_get_pdev_by_domain(source, bus, devfn);
@@ -297,6 +298,11 @@ static int reassign_device( struct domai
 
     list_move(&pdev->domain_list, &target->arch.pdev_list);
     pdev->domain = target;
+
+    /* IO page tables might be destroyed after pci-detach the last device
+     * In this case, we have to re-allocate root table for next pci-attach.*/
+    if ( t->root_table == NULL )
+        allocate_domain_resources(t);
 
     amd_iommu_setup_domain_device(target, iommu, bdf);
     AMD_IOMMU_DEBUG("reassign %x:%x.%x domain %d -> domain %d\n",

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.