Messages in this thread Patch in this message | | | Subject | Re: [PATCH] don't pass mem_map into init functions | From | Dave Hansen <> | Date | Wed, 28 Jul 2004 15:19:47 -0700 |
| |
On Wed, 2004-07-28 at 15:01, Jesse Barnes wrote: > On Wednesday, July 28, 2004 1:55 pm, Dave Hansen wrote: > > Compile tested on SMP x86 and NUMAQ. I plan to give it a run on ppc64 > > in a bit. I'd appreciate if one of the ia64 guys could make sure it's > > OK for them as well. > > Which tree is this against? It doesn't apply to the bk tree or > linux-2.6.8-rc2-mm1.
Put this one before it, and it should apply cleanly. I posted this one earlier today, and didn't realize that the new one was dependent.
-- Dave Only in A-zoneinit_cleanup/arch/i386/kernel: .semaphore.o.cmd Only in A-zoneinit_cleanup/arch/i386/kernel: semaphore.o Only in ../linux-2.6.8-rc2-mm1/arch/i386/mm: .init.o.d Only in ../linux-2.6.8-rc2-mm1/arch/i386/mm: .init.o.tmp diff -ur ../linux-2.6.8-rc2-mm1/include/linux/compile.h A-zoneinit_cleanup/include/linux/compile.h --- ../linux-2.6.8-rc2-mm1/include/linux/compile.h 2004-07-28 13:15:16.000000000 -0700 +++ A-zoneinit_cleanup/include/linux/compile.h 2004-07-28 13:14:34.000000000 -0700 @@ -1,7 +1,7 @@ /* This file is auto generated, version 0 */ #define UTS_MACHINE "i386" -#define UTS_VERSION "#0 SMP Wed Jul 28 13:15:16 PDT 2004" -#define LINUX_COMPILE_TIME "13:15:16" +#define UTS_VERSION "#0 SMP Wed Jul 28 13:14:33 PDT 2004" +#define LINUX_COMPILE_TIME "13:14:33" #define LINUX_COMPILE_BY "root" #define LINUX_COMPILE_HOST "elm3b82" #define LINUX_COMPILE_DOMAIN "eng.beaverton.ibm.com" Only in ../linux-2.6.8-rc2-mm1/init: .do_mounts.o.cmd Only in ../linux-2.6.8-rc2-mm1/init: .initramfs.o.d Only in ../linux-2.6.8-rc2-mm1/init: .version.o.cmd Only in ../linux-2.6.8-rc2-mm1/init: do_mounts.o Only in ../linux-2.6.8-rc2-mm1/init: version.o diff -ur ../linux-2.6.8-rc2-mm1/mm/page_alloc.c A-zoneinit_cleanup/mm/page_alloc.c --- ../linux-2.6.8-rc2-mm1/mm/page_alloc.c 2004-07-28 11:31:08.000000000 -0700 +++ A-zoneinit_cleanup/mm/page_alloc.c 2004-07-28 11:32:38.000000000 -0700 @@ -1415,6 +1415,52 @@ } } +/* + * Page buddy system uses "index >> (i+1)", where "index" is + * at most "size-1". + * + * The extra "+3" is to round down to byte size (8 bits per byte + * assumption). Thus we get "(size-1) >> (i+4)" as the last byte + * we can access. + * + * The "+1" is because we want to round the byte allocation up + * rather than down. So we should have had a "+7" before we shifted + * down by three. Also, we have to add one as we actually _use_ the + * last bit (it's [0,n] inclusive, not [0,n[). + * + * So we actually had +7+1 before we shift down by 3. But + * (n+8) >> 3 == (n >> 3) + 1 (modulo overflows, which we do not have). + * + * Finally, we LONG_ALIGN because all bitmap operations are on longs. + */ +unsigned long pages_to_bitmap_size(unsigned long order, unsigned long nr_pages) +{ + unsigned long bitmap_size; + + bitmap_size = (nr_pages-1) >> (order+4); + bitmap_size = LONG_ALIGN(bitmap_size+1); + + return bitmap_size; +} + +void zone_init_free_lists(struct pglist_data *pgdat, struct zone *zone, unsigned long size) +{ + int order; + for (order = 0; ; order++) { + unsigned long bitmap_size; + + INIT_LIST_HEAD(&zone->free_area[order].free_list); + if (order == MAX_ORDER-1) { + zone->free_area[order].map = NULL; + break; + } + + bitmap_size = pages_to_bitmap_size(order, size); + zone->free_area[order].map = + (unsigned long *) alloc_bootmem_node(pgdat, bitmap_size); + } +} + #ifndef __HAVE_ARCH_MEMMAP_INIT #define memmap_init(start, size, nid, zone, start_pfn) \ memmap_init_zone((start), (size), (nid), (zone), (start_pfn)) @@ -1531,43 +1577,7 @@ zone_start_pfn += size; lmem_map += size; - for (i = 0; ; i++) { - unsigned long bitmap_size; - - INIT_LIST_HEAD(&zone->free_area[i].free_list); - if (i == MAX_ORDER-1) { - zone->free_area[i].map = NULL; - break; - } - - /* - * Page buddy system uses "index >> (i+1)", - * where "index" is at most "size-1". - * - * The extra "+3" is to round down to byte - * size (8 bits per byte assumption). Thus - * we get "(size-1) >> (i+4)" as the last byte - * we can access. - * - * The "+1" is because we want to round the - * byte allocation up rather than down. So - * we should have had a "+7" before we shifted - * down by three. Also, we have to add one as - * we actually _use_ the last bit (it's [0,n] - * inclusive, not [0,n[). - * - * So we actually had +7+1 before we shift - * down by 3. But (n+8) >> 3 == (n >> 3) + 1 - * (modulo overflows, which we do not have). - * - * Finally, we LONG_ALIGN because all bitmap - * operations are on longs. - */ - bitmap_size = (size-1) >> (i+4); - bitmap_size = LONG_ALIGN(bitmap_size+1); - zone->free_area[i].map = - (unsigned long *) alloc_bootmem_node(pgdat, bitmap_size); - } + zone_init_free_lists(pgdat, zone, zone->spanned_pages); } } Binary files ../linux-2.6.8-rc2-mm1/usr/built-in.o and A-zoneinit_cleanup/usr/built-in.o differ Binary files ../linux-2.6.8-rc2-mm1/usr/initramfs_data.cpio and A-zoneinit_cleanup/usr/initramfs_data.cpio differ Binary files ../linux-2.6.8-rc2-mm1/usr/initramfs_data.cpio.gz and A-zoneinit_cleanup/usr/initramfs_data.cpio.gz differ Binary files ../linux-2.6.8-rc2-mm1/usr/initramfs_data.o and A-zoneinit_cleanup/usr/initramfs_data.o differ | |