Messages in this thread Patch in this message | | | Date | Sun, 22 Aug 2004 14:44:46 +1000 | From | Nick Piggin <> | Subject | [PATCH 1/2] fix PID hash sizing |
| |
I see PID hash sizing problems on an Opteron. I thought this got fixed a while ago? Hm.
Export nr_kernel_pages, nr_all_pages. Use nr_kernel_pages when sizing the PID hash. This fixes a sizing problem I'm seeing with the x86-64 kernel on an Opteron.
---
linux-2.6-npiggin/include/linux/bootmem.h | 3 +++ linux-2.6-npiggin/kernel/pid.c | 2 +- linux-2.6-npiggin/mm/page_alloc.c | 4 ++-- 3 files changed, 6 insertions(+), 3 deletions(-)
diff -puN kernel/pid.c~pid-hash-alloc kernel/pid.c --- linux-2.6/kernel/pid.c~pid-hash-alloc 2004-08-22 14:28:46.000000000 +1000 +++ linux-2.6-npiggin/kernel/pid.c 2004-08-22 14:34:13.000000000 +1000 @@ -276,7 +276,7 @@ int kgdb_pid_init_done; /* so we don't c void __init pidhash_init(void) { int i, j, pidhash_size; - unsigned long megabytes = max_pfn >> (20 - PAGE_SHIFT); + unsigned long megabytes = nr_kernel_pages >> (20 - PAGE_SHIFT); pidhash_shift = max(4, fls(megabytes * 4)); pidhash_shift = min(12, pidhash_shift); diff -puN include/linux/bootmem.h~pid-hash-alloc include/linux/bootmem.h --- linux-2.6/include/linux/bootmem.h~pid-hash-alloc 2004-08-22 14:28:46.000000000 +1000 +++ linux-2.6-npiggin/include/linux/bootmem.h 2004-08-22 14:28:46.000000000 +1000 @@ -67,6 +67,9 @@ extern void * __init __alloc_bootmem_nod __alloc_bootmem_node((pgdat), (x), PAGE_SIZE, 0) #endif /* !CONFIG_HAVE_ARCH_BOOTMEM_NODE */ +extern unsigned long __initdata nr_kernel_pages; +extern unsigned long __initdata nr_all_pages; + extern void *__init alloc_large_system_hash(const char *tablename, unsigned long bucketsize, unsigned long numentries, diff -puN mm/page_alloc.c~pid-hash-alloc mm/page_alloc.c --- linux-2.6/mm/page_alloc.c~pid-hash-alloc 2004-08-22 14:29:02.000000000 +1000 +++ linux-2.6-npiggin/mm/page_alloc.c 2004-08-22 13:41:11.000000000 +1000 @@ -55,8 +55,8 @@ EXPORT_SYMBOL(zone_table); static char *zone_names[MAX_NR_ZONES] = { "DMA", "Normal", "HighMem" }; int min_free_kbytes = 1024; -static unsigned long __initdata nr_kernel_pages; -static unsigned long __initdata nr_all_pages; +unsigned long __initdata nr_kernel_pages; +unsigned long __initdata nr_all_pages; /* * Temporary debugging check for pages not lying within a given zone. _
| |