x86: Move swiotlb initialization before dma32_free_bootmem
authorFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Mon, 14 Dec 2009 02:52:14 +0000 (11:52 +0900)
committerIngo Molnar <mingo@elte.hu>
Mon, 14 Dec 2009 07:57:40 +0000 (08:57 +0100)
The commit 75f1cdf1dda92cae037ec848ae63690d91913eac introduced a
bug that we initialize SWIOTLB right after dma32_free_bootmem so
we wrongly steal memory area allocated for GART with broken BIOS
earlier.

This moves swiotlb initialization before dma32_free_bootmem().

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Cc: yinghai@kernel.org
LKML-Reference: <1260759135-6450-2-git-send-email-fujita.tomonori@lab.ntt.co.jp>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/kernel/pci-dma.c

index afcc58b..fcc2f2b 100644 (file)
@@ -120,11 +120,14 @@ static void __init dma32_free_bootmem(void)
 
 void __init pci_iommu_alloc(void)
 {
+       int use_swiotlb;
+
+       use_swiotlb = pci_swiotlb_init();
 #ifdef CONFIG_X86_64
        /* free the range so iommu could get some range less than 4G */
        dma32_free_bootmem();
 #endif
-       if (pci_swiotlb_init())
+       if (use_swiotlb)
                return;
 
        gart_iommu_hole_init();