Clean up the bootmem allocator (try #2)
cover Clean up the bootmem allocator (try #2)
Andrew,
Here is a set of patches that clean up the bootmem allocator. These patches don't add/remove any features. They only make the code more readable.
I don't get a lot of feedbacks during my first attempt except from Dave Hansen where I tried to answer them.
It boots fine on my machine.
Thanks,
Franck
PATCH 1/7 bootmem: remove useless __init in header file
__init in headers is pretty useless because the compiler doesn't check it, and they get out of sync relatively frequently. So if you see an __init in a header file, it's quite unreliable and you need to check the definition anyway.
--- include/linux/bootmem.h | 52 ++++++++++++++++++++++++----------------------- 1 files changed, 26 insertions(+), 26 deletions(-)
include/linux/bootmem.h +26 -26
@@ -41,23 +41,23 @@ typedef struct bootmem_data {struct list_head list; } bootmem_data_t; -extern unsigned long __init bootmem_bootmap_pages (unsigned long ); -extern unsigned long __init init_bootmem (unsigned long addr,unsigned long memend); -extern void __init free_bootmem (unsigned long addr,unsigned long size); -extern void *__init __alloc_bootmem (unsigned long size,unsigned long align,unsigned long goal); -extern void *__init __alloc_bootmem_nopanic (unsigned long size,unsigned long align,unsigned long goal); -extern void *__init __alloc_bootmem_low (unsigned long size, +extern unsigned long bootmem_bootmap_pages (unsigned long ); +extern unsigned long init_bootmem (unsigned long addr,unsigned long memend); +extern void free_bootmem (unsigned long addr,unsigned long size); +extern void *__alloc_bootmem (unsigned long size,unsigned long align,unsigned long goal); +extern void *__alloc_bootmem_nopanic (unsigned long size,unsigned long align,unsigned long goal); +extern void *__alloc_bootmem_low (unsigned long size,unsigned long align,unsigned long goal); -extern void *__init __alloc_bootmem_low_node (pg_data_t *pgdat, +extern void *__alloc_bootmem_low_node (pg_data_t *pgdat,unsigned long size,unsigned long align,unsigned long goal); -extern void *__init __alloc_bootmem_core (struct bootmem_data *bdata, +extern void *__alloc_bootmem_core (struct bootmem_data *bdata,unsigned long size,unsigned long align,unsigned long goal,unsigned long limit);#ifndef CONFIG_HAVE_ARCH_BOOTMEM_NODE -extern void __init reserve_bootmem (unsigned long addr,unsigned long size); +extern void reserve_bootmem (unsigned long addr,unsigned long size);#define alloc_bootmem (x) \ __alloc_bootmem((x), SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS))#define alloc_bootmem_low (x) \
@@ -67,12 +67,12 @@ #define alloc_bootmem_pages(x) \#define alloc_bootmem_low_pages (x) \ __alloc_bootmem_low((x), PAGE_SIZE, 0)#endif /* !CONFIG_HAVE_ARCH_BOOTMEM_NODE */ -extern unsigned long __init free_all_bootmem (void ); -extern void *__init __alloc_bootmem_node (pg_data_t *pgdat,unsigned long size,unsigned long align,unsigned long goal); -extern unsigned long __init init_bootmem_node (pg_data_t *pgdat,unsigned long freepfn,unsigned long startpfn,unsigned long endpfn); -extern void __init reserve_bootmem_node (pg_data_t *pgdat,unsigned long physaddr,unsigned long size); -extern void __init free_bootmem_node (pg_data_t *pgdat,unsigned long addr,unsigned long size); -extern unsigned long __init free_all_bootmem_node (pg_data_t *pgdat); +extern unsigned long free_all_bootmem (void ); +extern void *__alloc_bootmem_node (pg_data_t *pgdat,unsigned long size,unsigned long align,unsigned long goal); +extern unsigned long init_bootmem_node (pg_data_t *pgdat,unsigned long freepfn,unsigned long startpfn,unsigned long endpfn); +extern void reserve_bootmem_node (pg_data_t *pgdat,unsigned long physaddr,unsigned long size); +extern void free_bootmem_node (pg_data_t *pgdat,unsigned long addr,unsigned long size); +extern unsigned long free_all_bootmem_node (pg_data_t *pgdat);#ifndef CONFIG_HAVE_ARCH_BOOTMEM_NODE #define alloc_bootmem_node (pgdat, x) \ __alloc_bootmem_node((pgdat), (x), SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS))
@@ -91,17 +91,17 @@ static inline void *alloc_remap(int nid, }#endif -extern unsigned long __initdata nr_kernel_pages; -extern unsigned long __initdata nr_all_pages; +extern unsigned long nr_kernel_pages; +extern unsigned long nr_all_pages; -extern void *__init alloc_large_system_hash (const char *tablename, -unsigned long bucketsize, -unsigned long numentries, -int scale, -int flags, -unsigned int *_hash_shift, -unsigned int *_hash_mask, -unsigned long limit); +extern void *alloc_large_system_hash (const char *tablename, +unsigned long bucketsize, +unsigned long numentries, +int scale, +int flags, +unsigned int *_hash_shift, +unsigned int *_hash_mask, +unsigned long limit);#define HASH_HIGHMEM 0x00000001/* Consider highmem? */ #define HASH_EARLY 0x00000002/* Allocating during early boot? */
@@ -114,7 +114,7 @@ #define HASHDIST_DEFAULT 1#else #define HASHDIST_DEFAULT 0#endif -extern int __initdata hashdist;/* Distribute hashes across NUMA nodes? */ +extern int hashdist;/* Distribute hashes across NUMA nodes? */ #endif /* _LINUX_BOOTMEM_H */
Signature · 1 line
1.4.1.g35c6
PATCH 2/7 bootmem: mark link_bootmem() as part of the __init section
In reply to Franck Bui-Huu--- mm/bootmem.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
mm/bootmem.c +1 -1
@@ -56,7 +56,7 @@ unsigned long __init bootmem_bootmap_pag/* * link bdata in order */ -static void link_bootmem (bootmem_data_t *bdata) +static void __init link_bootmem (bootmem_data_t *bdata) {bootmem_data_t *ent;if (list_empty (&bdata_list)) {
Signature · 1 line
1.4.1.g35c6
PATCH 3/7 bootmem: remove useless parentheses in bootmem header file
In reply to Franck Bui-Huu--- include/linux/bootmem.h | 14 +++++++------- 1 files changed, 7 insertions(+), 7 deletions(-)
include/linux/bootmem.h +7 -7
@@ -59,13 +59,13 @@ extern void * __alloc_bootmem_core(struc#ifndef CONFIG_HAVE_ARCH_BOOTMEM_NODE extern void reserve_bootmem (unsigned long addr,unsigned long size);#define alloc_bootmem (x) \ - __alloc_bootmem((x), SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS)) + __alloc_bootmem(x, SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS))#define alloc_bootmem_low (x) \ - __alloc_bootmem_low((x), SMP_CACHE_BYTES, 0) + __alloc_bootmem_low(x, SMP_CACHE_BYTES, 0)#define alloc_bootmem_pages (x) \ - __alloc_bootmem((x), PAGE_SIZE, __pa(MAX_DMA_ADDRESS)) + __alloc_bootmem(x, PAGE_SIZE, __pa(MAX_DMA_ADDRESS))#define alloc_bootmem_low_pages (x) \ - __alloc_bootmem_low((x), PAGE_SIZE, 0) + __alloc_bootmem_low(x, PAGE_SIZE, 0)#endif /* !CONFIG_HAVE_ARCH_BOOTMEM_NODE */ extern unsigned long free_all_bootmem (void );extern void *__alloc_bootmem_node (pg_data_t *pgdat,unsigned long size,unsigned long align,unsigned long goal);
@@ -75,11 +75,11 @@ extern void free_bootmem_node (pg_data_textern unsigned long free_all_bootmem_node (pg_data_t *pgdat);#ifndef CONFIG_HAVE_ARCH_BOOTMEM_NODE #define alloc_bootmem_node (pgdat, x) \ - __alloc_bootmem_node((pgdat), (x), SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS)) + __alloc_bootmem_node(pgdat, x, SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS))#define alloc_bootmem_pages_node (pgdat, x) \ - __alloc_bootmem_node((pgdat), (x), PAGE_SIZE, __pa(MAX_DMA_ADDRESS)) + __alloc_bootmem_node(pgdat, x, PAGE_SIZE, __pa(MAX_DMA_ADDRESS))#define alloc_bootmem_low_pages_node (pgdat, x) \ - __alloc_bootmem_low_node((pgdat), (x), PAGE_SIZE, 0) + __alloc_bootmem_low_node(pgdat, x, PAGE_SIZE, 0)#endif /* !CONFIG_HAVE_ARCH_BOOTMEM_NODE */ #ifdef CONFIG_HAVE_ARCH_ALLOC_REMAP
Signature · 1 line
1.4.1.g35c6
PATCH 4/7 bootmem: limit to 80 columns width
In reply to Franck Bui-Huu--- include/linux/bootmem.h | 42 +++++++++++++++++++++++++++++------------- mm/bootmem.c | 28 ++++++++++++++++++---------- 2 files changed, 47 insertions(+), 23 deletions(-)
include/linux/bootmem.h +29 -13
@@ -44,18 +44,24 @@ typedef struct bootmem_data {extern unsigned long bootmem_bootmap_pages (unsigned long );extern unsigned long init_bootmem (unsigned long addr,unsigned long memend);extern void free_bootmem (unsigned long addr,unsigned long size); -extern void *__alloc_bootmem (unsigned long size,unsigned long align,unsigned long goal); -extern void *__alloc_bootmem_nopanic (unsigned long size,unsigned long align,unsigned long goal); +extern void *__alloc_bootmem (unsigned long size, +unsigned long align, +unsigned long goal); +extern void *__alloc_bootmem_nopanic (unsigned long size, +unsigned long align, +unsigned long goal);extern void *__alloc_bootmem_low (unsigned long size, -unsigned long align, -unsigned long goal); +unsigned long align, +unsigned long goal);extern void *__alloc_bootmem_low_node (pg_data_t *pgdat, -unsigned long size, -unsigned long align, -unsigned long goal); +unsigned long size, +unsigned long align, +unsigned long goal);extern void *__alloc_bootmem_core (struct bootmem_data *bdata, -unsigned long size,unsigned long align,unsigned long goal, -unsigned long limit); +unsigned long size, +unsigned long align, +unsigned long goal, +unsigned long limit);#ifndef CONFIG_HAVE_ARCH_BOOTMEM_NODE extern void reserve_bootmem (unsigned long addr,unsigned long size);#define alloc_bootmem (x) \
@@ -68,10 +74,20 @@ #define alloc_bootmem_low_pages(x) \ __alloc_bootmem_low(x, PAGE_SIZE, 0)#endif /* !CONFIG_HAVE_ARCH_BOOTMEM_NODE */ extern unsigned long free_all_bootmem (void ); -extern void *__alloc_bootmem_node (pg_data_t *pgdat,unsigned long size,unsigned long align,unsigned long goal); -extern unsigned long init_bootmem_node (pg_data_t *pgdat,unsigned long freepfn,unsigned long startpfn,unsigned long endpfn); -extern void reserve_bootmem_node (pg_data_t *pgdat,unsigned long physaddr,unsigned long size); -extern void free_bootmem_node (pg_data_t *pgdat,unsigned long addr,unsigned long size); +extern void *__alloc_bootmem_node (pg_data_t *pgdat, +unsigned long size, +unsigned long align, +unsigned long goal); +extern unsigned long init_bootmem_node (pg_data_t *pgdat, +unsigned long freepfn, +unsigned long startpfn, +unsigned long endpfn); +extern void reserve_bootmem_node (pg_data_t *pgdat, +unsigned long physaddr, +unsigned long size); +extern void free_bootmem_node (pg_data_t *pgdat, +unsigned long addr, +unsigned long size);extern unsigned long free_all_bootmem_node (pg_data_t *pgdat);#ifndef CONFIG_HAVE_ARCH_BOOTMEM_NODE #define alloc_bootmem_node (pgdat, x) \
mm/bootmem.c +18 -10
@@ -104,7 +104,8 @@ static unsigned long __init init_bootmem* might be used for boot-time allocations - or it might get added * to the free page pool later on. */ -static void __init reserve_bootmem_core (bootmem_data_t *bdata,unsigned long addr,unsigned long size) +static void __init reserve_bootmem_core (bootmem_data_t *bdata,unsigned long addr, +unsigned long size) {unsigned long i;/*
@@ -129,7 +130,8 @@ #endif } } -static void __init free_bootmem_core (bootmem_data_t *bdata,unsigned long addr,unsigned long size) +static void __init free_bootmem_core (bootmem_data_t *bdata,unsigned long addr, +unsigned long size) {unsigned long i;unsigned long start;
@@ -357,17 +359,20 @@ static unsigned long __init free_all_booreturn total; } -unsigned long __init init_bootmem_node (pg_data_t *pgdat,unsigned long freepfn,unsigned long startpfn,unsigned long endpfn) +unsigned long __init init_bootmem_node (pg_data_t *pgdat,unsigned long freepfn, +unsigned long startpfn,unsigned long endpfn) {return (init_bootmem_core (pgdat, freepfn, startpfn, endpfn)); } -void __init reserve_bootmem_node (pg_data_t *pgdat,unsigned long physaddr,unsigned long size) +void __init reserve_bootmem_node (pg_data_t *pgdat,unsigned long physaddr, +unsigned long size) {reserve_bootmem_core (pgdat->bdata, physaddr, size); } -void __init free_bootmem_node (pg_data_t *pgdat,unsigned long physaddr,unsigned long size) +void __init free_bootmem_node (pg_data_t *pgdat,unsigned long physaddr, +unsigned long size) {free_bootmem_core (pgdat->bdata, physaddr, size); }
@@ -401,7 +406,8 @@ unsigned long __init free_all_bootmem (vreturn (free_all_bootmem_core (NODE_DATA (0 ))); } -void *__init __alloc_bootmem_nopanic (unsigned long size,unsigned long align,unsigned long goal) +void *__init __alloc_bootmem_nopanic (unsigned long size,unsigned long align, +unsigned long goal) {bootmem_data_t *bdata;void *ptr;
@@ -412,7 +418,8 @@ void * __init __alloc_bootmem_nopanic(unreturn NULL ; } -void *__init __alloc_bootmem (unsigned long size,unsigned long align,unsigned long goal) +void *__init __alloc_bootmem (unsigned long size,unsigned long align, +unsigned long goal) {void *mem =__alloc_bootmem_nopanic (size,align,goal);if (mem)
@@ -426,8 +433,8 @@ void * __init __alloc_bootmem(unsigned l } -void *__init __alloc_bootmem_node (pg_data_t *pgdat,unsigned long size,unsigned long align, -unsigned long goal) +void *__init __alloc_bootmem_node (pg_data_t *pgdat,unsigned long size, +unsigned long align,unsigned long goal) {void *ptr;
@@ -440,7 +447,8 @@ void * __init __alloc_bootmem_node(pg_da#define LOW32LIMIT 0xffffffff -void *__init __alloc_bootmem_low (unsigned long size,unsigned long align,unsigned long goal) +void *__init __alloc_bootmem_low (unsigned long size,unsigned long align, +unsigned long goal) {bootmem_data_t *bdata;void *ptr;
Signature · 1 line
1.4.1.g35c6
PATCH 5/7 bootmem: remove useless headers inclusions
In reply to Franck Bui-Huu--- include/linux/bootmem.h | 5 +---- mm/bootmem.c | 10 +++------- 2 files changed, 4 insertions(+), 11 deletions(-)
include/linux/bootmem.h +1 -4
@@ -4,11 +4,8 @@#ifndef _LINUX_BOOTMEM_H#define _LINUX_BOOTMEM_H -#include <asm/pgtable.h> -#include <asm/dma.h> -#include <linux/cache.h> -#include <linux/init.h> #include <linux/mmzone.h> +#include <asm/dma.h> /* * simple boot-time physical memory area allocator.
mm/bootmem.c +3 -7
@@ -8,17 +8,13 @@* free memory collector. It's used to deal with reserved * system memory and memory holes as well. */ - -#include <linux/mm.h> -#include <linux/kernel_stat.h> -#include <linux/swap.h> -#include <linux/interrupt.h> #include <linux/init.h> #include <linux/bootmem.h> -#include <linux/mmzone.h> #include <linux/module.h> -#include <asm/dma.h> + +#include <asm/bug.h> #include <asm/io.h> +#include "internal.h" /*
Signature · 1 line
1.4.1.g35c6
PATCH 6/7 bootmem: use pfn/page conversion macros
In reply to Franck Bui-HuuIt also creates get_mapsize() helper in order to make the code more readable when it calculates the boot bitmap size.
--- mm/bootmem.c | 82 ++++++++++++++++++++++++++++++++-------------------------- 1 files changed, 45 insertions(+), 37 deletions(-)
mm/bootmem.c +45 -37
@@ -9,6 +9,7 @@* system memory and memory holes as well. */ #include <linux/init.h> +#include <linux/pfn.h> #include <linux/bootmem.h> #include <linux/module.h>
@@ -70,6 +71,18 @@ static void __init link_bootmem(bootmem_return ; } +/* +* Given an initialised bdata, it returns the size of the boot bitmap +*/ +static unsigned long __init get_mapsize (bootmem_data_t *bdata) +{ +unsigned long mapsize; +unsigned long start =PFN_DOWN (bdata->node_boot_start); +unsigned long end = bdata->node_low_pfn; + + mapsize = ((end - start) +7 ) /8 ; +return ALIGN (mapsize,sizeof (long )); +}/* * Called once to set up the allocator itself.
@@ -78,11 +91,10 @@ static unsigned long __init init_bootmem unsigned long mapstart, unsigned long start, unsigned long end) { bootmem_data_t *bdata = pgdat->bdata; -unsigned long mapsize = ((end - start)+7 )/8 ; +unsigned long mapsize; - mapsize =ALIGN (mapsize,sizeof (long )); - bdata->node_bootmem_map =phys_to_virt (mapstart <<PAGE_SHIFT ); - bdata->node_boot_start = (start <<PAGE_SHIFT ); + bdata->node_bootmem_map =phys_to_virt (PFN_PHYS (mapstart)); + bdata->node_boot_start =PFN_PHYS (start); bdata->node_low_pfn = end;link_bootmem (bdata);
@@ -90,6 +102,7 @@ static unsigned long __init init_bootmem* Initially all pages are reserved - setup_arch() has to * register free RAM areas explicitly. */ + mapsize =get_mapsize (bdata);memset (bdata->node_bootmem_map,0xff , mapsize);return mapsize;
@@ -103,20 +116,19 @@ static unsigned long __init init_bootmemstatic void __init reserve_bootmem_core (bootmem_data_t *bdata,unsigned long addr,unsigned long size) { +unsigned long sidx, eidx;unsigned long i; +/* * round up, partially reserved pages are considered * fully reserved. */ -unsigned long sidx = (addr - bdata->node_boot_start)/PAGE_SIZE ; -unsigned long eidx = (addr + size - bdata->node_boot_start + -PAGE_SIZE -1 )/PAGE_SIZE ; -unsigned long end = (addr + size +PAGE_SIZE -1 )/PAGE_SIZE ; -BUG_ON (!size); -BUG_ON (sidx >= eidx); -BUG_ON ((addr >>PAGE_SHIFT ) >= bdata->node_low_pfn); -BUG_ON (end > bdata->node_low_pfn); +BUG_ON (PFN_DOWN (addr) >= bdata->node_low_pfn); +BUG_ON (PFN_UP (addr + size) > bdata->node_low_pfn); + + sidx =PFN_DOWN (addr - bdata->node_boot_start); + eidx =PFN_UP (addr + size - bdata->node_boot_start);for (i = sidx; i < eidx; i++)if (test_and_set_bit (i, bdata->node_bootmem_map)) {
@@ -129,18 +141,15 @@ #endifstatic void __init free_bootmem_core (bootmem_data_t *bdata,unsigned long addr,unsigned long size) { +unsigned long sidx, eidx;unsigned long i; -unsigned long start; +/* * round down end of usable mem, partially free pages are * considered reserved. */ -unsigned long sidx; -unsigned long eidx = (addr + size - bdata->node_boot_start)/PAGE_SIZE ; -unsigned long end = (addr + size)/PAGE_SIZE ; -BUG_ON (!size); -BUG_ON (end > bdata->node_low_pfn); +BUG_ON (PFN_DOWN (addr + size) > bdata->node_low_pfn);if (addr < bdata->last_success) bdata->last_success = addr;
@@ -148,8 +157,8 @@ static void __init free_bootmem_core(boo/* * Round up the beginning of the address. */ - start = (addr +PAGE_SIZE -1 ) /PAGE_SIZE ; - sidx = start - (bdata->node_boot_start/PAGE_SIZE ); + sidx =PFN_UP (addr) -PFN_DOWN (bdata->node_boot_start); + eidx =PFN_DOWN (addr + size - bdata->node_boot_start);for (i = sidx; i < eidx; i++) {if (unlikely (!test_and_clear_bit (i, bdata->node_bootmem_map)))
@@ -175,7 +184,7 @@ __alloc_bootmem_core(struct bootmem_data unsigned long align, unsigned long goal, unsigned long limit) { unsigned long offset, remaining_size, areasize, preferred; -unsigned long i, start =0 , incr, eidx, end_pfn = bdata->node_low_pfn; +unsigned long i, start =0 , incr, eidx, end_pfn;void *ret;if (!size) {
@@ -187,23 +196,22 @@ __alloc_bootmem_core(struct bootmem_dataif (limit && bdata->node_boot_start >= limit)return NULL ; - limit >>=PAGE_SHIFT ; + end_pfn = bdata->node_low_pfn; + limit =PFN_DOWN (limit);if (limit && end_pfn > limit) end_pfn = limit; - eidx = end_pfn - (bdata->node_boot_start >>PAGE_SHIFT ); + eidx = end_pfn -PFN_DOWN (bdata->node_boot_start); offset =0 ; -if (align && - (bdata->node_boot_start & (align -1UL )) !=0 ) - offset = (align - (bdata->node_boot_start & (align -1UL ))); - offset >>=PAGE_SHIFT ; +if (align && (bdata->node_boot_start & (align -1UL )) !=0 ) + offset = align - (bdata->node_boot_start & (align -1UL )); + offset =PFN_DOWN (offset);/* * We try to allocate bootmem pages above 'goal' * first, then we try to allocate lower pages. */ -if (goal && (goal >= bdata->node_boot_start) && - ((goal >>PAGE_SHIFT ) < end_pfn)) { +if (goal && goal >= bdata->node_boot_start &&PFN_DOWN (goal) < end_pfn) { preferred = goal - bdata->node_boot_start;if (bdata->last_success >= preferred)
@@ -212,9 +220,8 @@ __alloc_bootmem_core(struct bootmem_data }else preferred =0 ; - preferred =ALIGN (preferred, align) >>PAGE_SHIFT ; - preferred += offset; - areasize = (size+PAGE_SIZE -1 )/PAGE_SIZE ; + preferred =PFN_DOWN (ALIGN (preferred, align)) + offset; + areasize = (size +PAGE_SIZE -1 ) /PAGE_SIZE ; incr = align >>PAGE_SHIFT ? :1 ; restart_scan:
@@ -245,7 +252,7 @@ restart_scan:return NULL ; found: - bdata->last_success = start <<PAGE_SHIFT ; + bdata->last_success =PFN_PHYS (start);BUG_ON (start >= eidx);/*
@@ -303,8 +310,8 @@ static unsigned long __init free_all_boo count =0 ;/* first extant page of the node */ - pfn = bdata->node_boot_start >>PAGE_SHIFT ; - idx = bdata->node_low_pfn - (bdata->node_boot_start >>PAGE_SHIFT ); + pfn =PFN_DOWN (bdata->node_boot_start); + idx = bdata->node_low_pfn - pfn; map = bdata->node_bootmem_map;/* Check physaddr is O(LOG2(BITS_PER_LONG)) page aligned */ if (bdata->node_boot_start == 0 ||
@@ -345,9 +352,10 @@ static unsigned long __init free_all_boo*/ page =virt_to_page (bdata->node_bootmem_map); count =0 ; -for (i =0 ; i < ((bdata->node_low_pfn-(bdata->node_boot_start >>PAGE_SHIFT ))/8 +PAGE_SIZE -1 )/PAGE_SIZE ; i++,page++) { - count++; + idx = (get_mapsize (bdata) +PAGE_SIZE -1 ) >>PAGE_SHIFT ; +for (i =0 ; i < idx; i++, page++) {__free_pages_bootmem (page,0 ); + count++; } total += count; bdata->node_bootmem_map =NULL ;
Signature · 1 line
1.4.1.g35c6
PATCH 7/7 bootmem: miscellaneous coding style fixes
In reply to Franck Bui-HuuIt fixes various coding style issues, specially when spaces are useless. For example '*' go next to the function name.
--- include/linux/bootmem.h | 95 ++++++++++++++++++++++++----------------------- mm/bootmem.c | 81 ++++++++++++++++++++++------------------ 2 files changed, 93 insertions(+), 83 deletions(-)
include/linux/bootmem.h +49 -46
@@ -38,29 +38,30 @@ typedef struct bootmem_data {struct list_head list; } bootmem_data_t; -extern unsigned long bootmem_bootmap_pages (unsigned long ); -extern unsigned long init_bootmem (unsigned long addr,unsigned long memend); -extern void free_bootmem (unsigned long addr,unsigned long size); -extern void *__alloc_bootmem (unsigned long size, -unsigned long align, -unsigned long goal); -extern void *__alloc_bootmem_nopanic (unsigned long size, -unsigned long align, -unsigned long goal); -extern void *__alloc_bootmem_low (unsigned long size, +extern unsigned long bootmem_bootmap_pages (unsigned long ); +extern unsigned long init_bootmem (unsigned long addr,unsigned long memend); +extern void free_bootmem (unsigned long addr,unsigned long size); +extern void *__alloc_bootmem (unsigned long size, +unsigned long align, +unsigned long goal); +extern void *__alloc_bootmem_nopanic (unsigned long size, +unsigned long align, +unsigned long goal); +extern void *__alloc_bootmem_low (unsigned long size, +unsigned long align, +unsigned long goal); +extern void *__alloc_bootmem_low_node (pg_data_t *pgdat, +unsigned long size, +unsigned long align, +unsigned long goal); +extern void *__alloc_bootmem_core (struct bootmem_data *bdata, +unsigned long size,unsigned long align, -unsigned long goal); -extern void *__alloc_bootmem_low_node (pg_data_t *pgdat, -unsigned long size, -unsigned long align, -unsigned long goal); -extern void *__alloc_bootmem_core (struct bootmem_data *bdata, -unsigned long size, -unsigned long align, -unsigned long goal, -unsigned long limit); +unsigned long goal, +unsigned long limit); +#ifndef CONFIG_HAVE_ARCH_BOOTMEM_NODE -extern void reserve_bootmem (unsigned long addr,unsigned long size); +extern void reserve_bootmem (unsigned long addr,unsigned long size);#define alloc_bootmem (x) \ __alloc_bootmem(x, SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS))#define alloc_bootmem_low (x) \
@@ -70,22 +71,24 @@ #define alloc_bootmem_pages(x) \#define alloc_bootmem_low_pages (x) \ __alloc_bootmem_low(x, PAGE_SIZE, 0)#endif /* !CONFIG_HAVE_ARCH_BOOTMEM_NODE */ -extern unsigned long free_all_bootmem (void ); -extern void *__alloc_bootmem_node (pg_data_t *pgdat, -unsigned long size, -unsigned long align, -unsigned long goal); -extern unsigned long init_bootmem_node (pg_data_t *pgdat, -unsigned long freepfn, -unsigned long startpfn, -unsigned long endpfn); -extern void reserve_bootmem_node (pg_data_t *pgdat, -unsigned long physaddr, -unsigned long size); -extern void free_bootmem_node (pg_data_t *pgdat, -unsigned long addr, -unsigned long size); -extern unsigned long free_all_bootmem_node (pg_data_t *pgdat); + +extern unsigned long free_all_bootmem (void ); +extern unsigned long free_all_bootmem_node (pg_data_t *pgdat); +extern void *__alloc_bootmem_node (pg_data_t *pgdat, +unsigned long size, +unsigned long align, +unsigned long goal); +extern unsigned long init_bootmem_node (pg_data_t *pgdat, +unsigned long freepfn, +unsigned long startpfn, +unsigned long endpfn); +extern void reserve_bootmem_node (pg_data_t *pgdat, +unsigned long physaddr, +unsigned long size); +extern void free_bootmem_node (pg_data_t *pgdat, +unsigned long addr, +unsigned long size); +#ifndef CONFIG_HAVE_ARCH_BOOTMEM_NODE #define alloc_bootmem_node (pgdat, x) \ __alloc_bootmem_node(pgdat, x, SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS))
@@ -102,19 +105,19 @@ static inline void *alloc_remap(int nid, {return NULL ; } -#endif +#endif /* CONFIG_HAVE_ARCH_ALLOC_REMAP */ extern unsigned long nr_kernel_pages;extern unsigned long nr_all_pages; -extern void *alloc_large_system_hash (const char *tablename, -unsigned long bucketsize, -unsigned long numentries, -int scale, -int flags, -unsigned int *_hash_shift, -unsigned int *_hash_mask, -unsigned long limit); +extern void *alloc_large_system_hash (const char *tablename, +unsigned long bucketsize, +unsigned long numentries, +int scale, +int flags, +unsigned int *_hash_shift, +unsigned int *_hash_mask, +unsigned long limit);#define HASH_HIGHMEM 0x00000001/* Consider highmem? */ #define HASH_EARLY 0x00000002/* Allocating during early boot? */
mm/bootmem.c +44 -37
207 lines not on this page · raw message
Signature · 1 line
1.4.1.g35c6