2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2024-12-21 11:44:01 +08:00
linux-next/arch
Yinghai Lu 752bea4abb x86: reserve dma32 early for gart
a system with 256 GB of RAM, when NUMA is disabled crashes the
following way:

Your BIOS doesn't leave a aperture memory hole
Please enable the IOMMU option in the BIOS setup
This costs you 64 MB of RAM
Cannot allocate aperture memory hole (ffff8101c0000000,65536K)
Kernel panic - not syncing: Not enough memory for aperture
Pid: 0, comm: swapper Not tainted 2.6.25-rc4-x86-latest.git #33

Call Trace:
 [<ffffffff84037c62>] panic+0xb2/0x190
 [<ffffffff840381fc>] ? release_console_sem+0x7c/0x250
 [<ffffffff847b1628>] ? __alloc_bootmem_nopanic+0x48/0x90
 [<ffffffff847b0ac9>] ? free_bootmem+0x29/0x50
 [<ffffffff847ac1f7>] gart_iommu_hole_init+0x5e7/0x680
 [<ffffffff847b255b>] ? alloc_large_system_hash+0x16b/0x310
 [<ffffffff84506a2f>] ? _etext+0x0/0x1
 [<ffffffff847a2e8c>] pci_iommu_alloc+0x1c/0x40
 [<ffffffff847ac795>] mem_init+0x45/0x1a0
 [<ffffffff8479ff35>] start_kernel+0x295/0x380
 [<ffffffff8479f1c2>] _sinittext+0x1c2/0x230

the root cause is : memmap PMD is too big,
[ffffe200e0600000-ffffe200e07fffff] PMD ->ffff81383c000000 on node 0
almost near 4G..., and vmemmap_alloc_block will use up the ram under 4G.

solution will be:
1. make memmap allocation get memory above 4G...
2. reserve some dma32 range early before we try to set up memmap for all.
and release that before pci_iommu_alloc, so gart or swiotlb could get some
range under 4g limit for sure.

the patch is using method 2.
because method1 may need more code to handle SPARSEMEM and SPASEMEM_VMEMMAP

will get
Your BIOS doesn't leave a aperture memory hole
Please enable the IOMMU option in the BIOS setup
This costs you 64 MB of RAM
Mapping aperture over 65536 KB of RAM @ 4000000
Memory: 264245736k/268959744k available (8484k kernel code, 4187464k reserved, 4004k data, 724k init)

Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
2008-04-19 19:19:55 +02:00
..
alpha Generic semaphore implementation 2008-04-17 10:42:34 -04:00
arm Generic semaphore implementation 2008-04-17 10:42:34 -04:00
avr32 Generic semaphore implementation 2008-04-17 10:42:34 -04:00
blackfin Generic semaphore implementation 2008-04-17 10:42:34 -04:00
cris Generic semaphore implementation 2008-04-17 10:42:34 -04:00
frv Generic semaphore implementation 2008-04-17 10:42:34 -04:00
h8300 Generic semaphore implementation 2008-04-17 10:42:34 -04:00
ia64 Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6.26 2008-04-18 18:02:35 -07:00
m32r Generic semaphore implementation 2008-04-17 10:42:34 -04:00
m68k Generic semaphore implementation 2008-04-17 10:42:34 -04:00
m68knommu Generic semaphore implementation 2008-04-17 10:42:34 -04:00
mips Generic semaphore implementation 2008-04-17 10:42:34 -04:00
mn10300 Generic semaphore implementation 2008-04-17 10:42:34 -04:00
parisc Generic semaphore implementation 2008-04-17 10:42:34 -04:00
powerpc Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6.26 2008-04-18 18:02:35 -07:00
ppc Merge git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6 2008-04-18 08:39:24 -07:00
s390 Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6.26 2008-04-18 18:02:35 -07:00
sh Generic semaphore implementation 2008-04-17 10:42:34 -04:00
sparc Generic semaphore implementation 2008-04-17 10:42:34 -04:00
sparc64 Generic semaphore implementation 2008-04-17 10:42:34 -04:00
um Generic semaphore implementation 2008-04-17 10:42:34 -04:00
v850 Generic semaphore implementation 2008-04-17 10:42:34 -04:00
x86 x86: reserve dma32 early for gart 2008-04-19 19:19:55 +02:00
xtensa Generic semaphore implementation 2008-04-17 10:42:34 -04:00
.gitignore arch: Ignore arch/i386 and arch/x86_64 2008-01-19 21:29:39 -08:00
Kconfig Kprobes: indicate kretprobe support in Kconfig 2008-03-04 16:35:11 -08:00