[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2 0/2] Make the pcidevs_lock a recursive one
This patch set makes the pcidevs_lock a recursive one. It is a prereq patch set for Patch:'VT-d Device-TLB flush issue', as the pcidevs_lock may be recursively held for hiding the ATS device, when VT-d Device-TLB flush timed out. In detail: 1. Fix a bug found in AMD IOMMU initialization. When iommu_setup() is called in __start_xen(), interrupts have already been enabled, and nothing disables (without reenabling) them again in the path that leads to calling set_iommu_interrupt_handler(). There's therefore no risk of them being disabled and needing remaining so, and hence no need for saving and restoring the flags. This means that, even if interrupt would need to be disabled when taking pcidevs_lock, spin_lock_irq() and spin_unlock_irq() could be used. Inside set_iommu_interrupt_handler(), pcidevs_lock serializes calls to pci_get_pdev(), which does not require interrupts to be disabled during its execution. In fact, pcidevs_lock is always (except for this case) taken without disabling interrupts, and disabling them in this case would make the BUG_ON() in check_lock() trigger, if it wasn't for the fact that spinlock debugging checks are still disabled, during initialization, when iommu_setup() (which then end up calling set_iommu_interrupt_handler()) is called. In order to fix this, we can use just plain spin_lock() and spin_unlock(), instead of spin_lock_irqsave() and spin_unlock_irqrestore(). 2. Make the pcidevs_lock a recursive one. CC: Keir Fraser <keir@xxxxxxx> CC: Jan Beulich <jbeulich@xxxxxxxx> CC: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> CC: Suravee Suthikulpanit <suravee.suthikulpanit@xxxxxxx> CC: Feng Wu <feng.wu@xxxxxxxxx> CC: Kevin Tian <kevin.tian@xxxxxxxxx> CC: Dario Faggioli <dario.faggioli@xxxxxxxxxx> --Changes in v2: * Enhance patch1/2 changelog. * Rebase against 1bd52e1fd66c4. Quan Xu (2): IOMMU/spinlock: Fix a bug found in AMD IOMMU initialization. IOMMU/spinlock: Make the pcidevs_lock a recursive one xen/arch/x86/domctl.c | 8 +-- xen/arch/x86/hvm/vmsi.c | 4 +- xen/arch/x86/irq.c | 8 +-- xen/arch/x86/msi.c | 16 ++--- xen/arch/x86/pci.c | 4 +- xen/arch/x86/physdev.c | 16 ++--- xen/common/sysctl.c | 4 +- xen/drivers/passthrough/amd/iommu_init.c | 9 ++- xen/drivers/passthrough/amd/iommu_map.c | 2 +- xen/drivers/passthrough/amd/pci_amd_iommu.c | 4 +- xen/drivers/passthrough/pci.c | 96 +++++++++++++++++------------ xen/drivers/passthrough/vtd/intremap.c | 2 +- xen/drivers/passthrough/vtd/iommu.c | 14 ++--- xen/drivers/video/vga.c | 4 +- xen/include/xen/pci.h | 5 +- 15 files changed, 109 insertions(+), 87 deletions(-) -- 1.9.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |