x86: Only call dma32_reserve_bootmem 64bit !CONFIG_NUMA
authorYinghai Lu <yinghai@kernel.org>
Wed, 10 Feb 2010 09:20:19 +0000 (01:20 -0800)
committerH. Peter Anvin <hpa@zytor.com>
Thu, 11 Feb 2010 01:47:18 +0000 (17:47 -0800)
64bit NUMA already make enough space under 4G with new early_node_mem.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
LKML-Reference: <1265793639-15071-16-git-send-email-yinghai@kernel.org>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
arch/x86/include/asm/pci.h
arch/x86/include/asm/pci_64.h
arch/x86/kernel/pci-dma.c
arch/x86/kernel/setup.c

index ada8c201d5133482b0163fe289699ae61a7e88c5..b4a00dd4eed586da6c864187521bf748b2dbd09f 100644 (file)
@@ -124,6 +124,8 @@ extern void pci_iommu_alloc(void);
 #include "pci_64.h"
 #endif
 
+void dma32_reserve_bootmem(void);
+
 /* implement the pci_ DMA API in terms of the generic device dma_ one */
 #include <asm-generic/pci-dma-compat.h>
 
index ae5e40f67daf54ddab4d9f2f6ca7b60b328aacfd..fe15cfb21b9be318afde89fb7cb76a81b4536668 100644 (file)
@@ -22,8 +22,6 @@ extern int (*pci_config_read)(int seg, int bus, int dev, int fn,
 extern int (*pci_config_write)(int seg, int bus, int dev, int fn,
                               int reg, int len, u32 value);
 
-extern void dma32_reserve_bootmem(void);
-
 #endif /* __KERNEL__ */
 
 #endif /* _ASM_X86_PCI_64_H */
index 75e14e21f61a728cb120590a475ff8e0f3e2c37d..1aa966c565f92dcccaebf83c55f5ee9c71ac928d 100644 (file)
@@ -65,7 +65,7 @@ int dma_set_mask(struct device *dev, u64 mask)
 }
 EXPORT_SYMBOL(dma_set_mask);
 
-#ifdef CONFIG_X86_64
+#if defined(CONFIG_X86_64) && !defined(CONFIG_NUMA)
 static __initdata void *dma32_bootmem_ptr;
 static unsigned long dma32_bootmem_size __initdata = (128ULL<<20);
 
@@ -116,14 +116,21 @@ static void __init dma32_free_bootmem(void)
        dma32_bootmem_ptr = NULL;
        dma32_bootmem_size = 0;
 }
+#else
+void __init dma32_reserve_bootmem(void)
+{
+}
+static void __init dma32_free_bootmem(void)
+{
+}
+
 #endif
 
 void __init pci_iommu_alloc(void)
 {
-#ifdef CONFIG_X86_64
        /* free the range so iommu could get some range less than 4G */
        dma32_free_bootmem();
-#endif
+
        if (pci_swiotlb_detect())
                goto out;
 
index 48cadbb1d28b6af9fb3fa20a9b82d3132afabc46..ea4141b48518525699fe0bb0c0561c5e9c1d0354 100644 (file)
@@ -969,14 +969,7 @@ void __init setup_arch(char **cmdline_p)
        initmem_init(0, max_pfn, acpi, k8);
        early_res_to_bootmem(0, max_low_pfn<<PAGE_SHIFT);
 
-#ifdef CONFIG_X86_64
-       /*
-        * dma32_reserve_bootmem() allocates bootmem which may conflict
-        * with the crashkernel command line, so do that after
-        * reserve_crashkernel()
-        */
        dma32_reserve_bootmem();
-#endif
 
        reserve_ibft_region();