[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] AMD IOMMU: Fix a dead lock in device assignment.
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1231859767 0 # Node ID 1c6642adaeb204495c95ab86c8aee41587a22928 # Parent 27e9687c5b3d7499a629b14571df917af32dbd86 AMD IOMMU: Fix a dead lock in device assignment. Do not obtain pcidevs_lock in reassign_device(). Signed-off-by: Wei Wang <wei.wang2@xxxxxxx> --- xen/drivers/passthrough/amd/pci_amd_iommu.c | 16 ++++++---------- 1 files changed, 6 insertions(+), 10 deletions(-) diff -r 27e9687c5b3d -r 1c6642adaeb2 xen/drivers/passthrough/amd/pci_amd_iommu.c --- a/xen/drivers/passthrough/amd/pci_amd_iommu.c Tue Jan 13 08:59:49 2009 +0000 +++ b/xen/drivers/passthrough/amd/pci_amd_iommu.c Tue Jan 13 15:16:07 2009 +0000 @@ -271,26 +271,22 @@ static int reassign_device( struct domai struct amd_iommu *iommu; int bdf; - spin_lock(&pcidevs_lock); + ASSERT(spin_is_locked(&pcidevs_lock)); pdev = pci_get_pdev_by_domain(source, bus, devfn); if ( !pdev ) - { - spin_unlock(&pcidevs_lock); - return -ENODEV; - } + return -ENODEV; bdf = (bus << 8) | devfn; /* supported device? */ iommu = (bdf < ivrs_bdf_entries) ? - find_iommu_for_device(bus, pdev->devfn) : NULL; + find_iommu_for_device(bus, pdev->devfn) : NULL; if ( !iommu ) { - spin_unlock(&pcidevs_lock); amd_iov_error("Fail to find iommu." - " %x:%x.%x cannot be assigned to domain %d\n", - bus, PCI_SLOT(devfn), PCI_FUNC(devfn), target->domain_id); - return -ENODEV; + " %x:%x.%x cannot be assigned to domain %d\n", + bus, PCI_SLOT(devfn), PCI_FUNC(devfn), target->domain_id); + return -ENODEV; } amd_iommu_disable_domain_device(source, iommu, bdf); _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |