Messages in this thread Patch in this message | ![/](/images/icornerl.gif) | | Date | Thu, 27 Apr 2006 17:17:32 -0700 | From | Greg KH <> | Subject | [patch 05/24] x86_64: Fix a race in the free_iommu path. |
| |
-stable review patch. If anyone has any objections, please let us know.
------------------
From: Mike Waychison <mikew@google.com>
We do this by removing a micro-optimization that tries to avoid grabbing the iommu_bitmap_lock spinlock and using a bus-locked operation.
This still races with other simultaneous alloc_iommu or free_iommu(size > 1) which both use bus-unlocked operations.
The end result of this race is eventually ending up with an iommu_gart_bitmap that has bits errornously set all over, making large contiguous iommu space allocations fail with 'PCI-DMA: Out of IOMMU space'.
Signed-off-by: Mike Waychison <mikew@google.com> Signed-off-by: Andi Kleen <ak@suse.de> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
--- arch/x86_64/kernel/pci-gart.c | 4 ---- 1 file changed, 4 deletions(-)
--- linux-2.6.16.11.orig/arch/x86_64/kernel/pci-gart.c +++ linux-2.6.16.11/arch/x86_64/kernel/pci-gart.c @@ -114,10 +114,6 @@ static unsigned long alloc_iommu(int siz static void free_iommu(unsigned long offset, int size) { unsigned long flags; - if (size == 1) { - clear_bit(offset, iommu_gart_bitmap); - return; - } spin_lock_irqsave(&iommu_bitmap_lock, flags); __clear_bit_string(iommu_gart_bitmap, offset, size); spin_unlock_irqrestore(&iommu_bitmap_lock, flags); -- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| ![\](/images/icornerr.gif) |