* [patch 1/4] mm: Move bootmem descriptors definition to a single place
2008-04-30 17:05 [patch 0/4] Bootmem cleanups Johannes Weiner
@ 2008-04-30 17:05 ` Johannes Weiner
2008-04-30 17:05 ` [patch 2/4] mm: Fix free_all_bootmem_core alignment check Johannes Weiner
` (3 subsequent siblings)
4 siblings, 0 replies; 8+ messages in thread
From: Johannes Weiner @ 2008-04-30 17:05 UTC (permalink / raw)
To: Ingo Molnar
Cc: linux-kernel, linux-mm, Ralf Baechle, Richard Henderson,
Russell King, Tony Luck, Hirokazu Takata, Geert Uytterhoeven,
Kyle McMartin, Paul Mackerras, Paul Mundt, David S. Miller
[-- Attachment #1: mm-centralize-bootmem-descriptors-definition.patch --]
[-- Type: text/plain, Size: 15361 bytes --]
There are a lot of places that define either a single bootmem
descriptor or an array of them. Use only one central array with
MAX_NUMNODES items instead.
Signed-off-by: Johannes Weiner <hannes@saeurebad.de>
Acked-by: Ralf Baechle <ralf@linux-mips.org>
CC: Ingo Molnar <mingo@elte.hu>
CC: Richard Henderson <rth@twiddle.net>
CC: Russell King <rmk@arm.linux.org.uk>
CC: Tony Luck <tony.luck@intel.com>
CC: Hirokazu Takata <takata@linux-m32r.org>
CC: Geert Uytterhoeven <geert@linux-m68k.org>
CC: Kyle McMartin <kyle@parisc-linux.org>
CC: Paul Mackerras <paulus@samba.org>
CC: Paul Mundt <lethal@linux-sh.org>
CC: David S. Miller <davem@davemloft.net>
---
Resend, forgot sparc64.
arch/alpha/mm/numa.c | 8 ++++----
arch/arm/mm/discontig.c | 34 ++++++++++++++++------------------
arch/ia64/mm/discontig.c | 11 +++++------
arch/m32r/mm/discontig.c | 4 +---
arch/m68k/mm/init.c | 4 +---
arch/mips/sgi-ip27/ip27-memory.c | 3 +--
arch/parisc/mm/init.c | 3 +--
arch/powerpc/mm/numa.c | 3 +--
arch/sh/mm/numa.c | 5 ++---
arch/sparc64/mm/init.c | 3 +--
arch/x86/mm/discontig_32.c | 3 +--
arch/x86/mm/numa_64.c | 6 +-----
include/linux/bootmem.h | 2 ++
mm/bootmem.c | 2 ++
mm/page_alloc.c | 4 +---
15 files changed, 40 insertions(+), 55 deletions(-)
Index: linux-2.6/arch/alpha/mm/numa.c
===================================================================
--- linux-2.6.orig/arch/alpha/mm/numa.c
+++ linux-2.6/arch/alpha/mm/numa.c
@@ -19,7 +19,6 @@
#include <asm/pgalloc.h>
pg_data_t node_data[MAX_NUMNODES];
-bootmem_data_t node_bdata[MAX_NUMNODES];
EXPORT_SYMBOL(node_data);
#undef DEBUG_DISCONTIG
@@ -141,7 +140,7 @@ setup_memory_node(int nid, void *kernel_
printk(" not enough mem to reserve NODE_DATA");
return;
}
- NODE_DATA(nid)->bdata = &node_bdata[nid];
+ NODE_DATA(nid)->bdata = &bootmem_node_data[nid];
printk(" Detected node memory: start %8lu, end %8lu\n",
node_min_pfn, node_max_pfn);
@@ -304,8 +303,9 @@ void __init paging_init(void)
dma_local_pfn = virt_to_phys((char *)MAX_DMA_ADDRESS) >> PAGE_SHIFT;
for_each_online_node(nid) {
- unsigned long start_pfn = node_bdata[nid].node_boot_start >> PAGE_SHIFT;
- unsigned long end_pfn = node_bdata[nid].node_low_pfn;
+ bootmem_data_t *bdata = &bootmem_node_data[nid];
+ unsigned long start_pfn = bdata->node_boot_start >> PAGE_SHIFT;
+ unsigned long end_pfn = bdata->node_low_pfn;
if (dma_local_pfn >= end_pfn - start_pfn)
zones_size[ZONE_DMA] = end_pfn - start_pfn;
Index: linux-2.6/arch/arm/mm/discontig.c
===================================================================
--- linux-2.6.orig/arch/arm/mm/discontig.c
+++ linux-2.6/arch/arm/mm/discontig.c
@@ -21,26 +21,24 @@
* Our node_data structure for discontiguous memory.
*/
-static bootmem_data_t node_bootmem_data[MAX_NUMNODES];
-
pg_data_t discontig_node_data[MAX_NUMNODES] = {
- { .bdata = &node_bootmem_data[0] },
- { .bdata = &node_bootmem_data[1] },
- { .bdata = &node_bootmem_data[2] },
- { .bdata = &node_bootmem_data[3] },
+ { .bdata = &bootmem_node_data[0] },
+ { .bdata = &bootmem_node_data[1] },
+ { .bdata = &bootmem_node_data[2] },
+ { .bdata = &bootmem_node_data[3] },
#if MAX_NUMNODES == 16
- { .bdata = &node_bootmem_data[4] },
- { .bdata = &node_bootmem_data[5] },
- { .bdata = &node_bootmem_data[6] },
- { .bdata = &node_bootmem_data[7] },
- { .bdata = &node_bootmem_data[8] },
- { .bdata = &node_bootmem_data[9] },
- { .bdata = &node_bootmem_data[10] },
- { .bdata = &node_bootmem_data[11] },
- { .bdata = &node_bootmem_data[12] },
- { .bdata = &node_bootmem_data[13] },
- { .bdata = &node_bootmem_data[14] },
- { .bdata = &node_bootmem_data[15] },
+ { .bdata = &bootmem_node_data[4] },
+ { .bdata = &bootmem_node_data[5] },
+ { .bdata = &bootmem_node_data[6] },
+ { .bdata = &bootmem_node_data[7] },
+ { .bdata = &bootmem_node_data[8] },
+ { .bdata = &bootmem_node_data[9] },
+ { .bdata = &bootmem_node_data[10] },
+ { .bdata = &bootmem_node_data[11] },
+ { .bdata = &bootmem_node_data[12] },
+ { .bdata = &bootmem_node_data[13] },
+ { .bdata = &bootmem_node_data[14] },
+ { .bdata = &bootmem_node_data[15] },
#endif
};
Index: linux-2.6/arch/ia64/mm/discontig.c
===================================================================
--- linux-2.6.orig/arch/ia64/mm/discontig.c
+++ linux-2.6/arch/ia64/mm/discontig.c
@@ -36,7 +36,6 @@ struct early_node_data {
struct ia64_node_data *node_data;
unsigned long pernode_addr;
unsigned long pernode_size;
- struct bootmem_data bootmem_data;
unsigned long num_physpages;
#ifdef CONFIG_ZONE_DMA
unsigned long num_dma_physpages;
@@ -76,7 +75,7 @@ static int __init build_node_maps(unsign
int node)
{
unsigned long cstart, epfn, end = start + len;
- struct bootmem_data *bdp = &mem_data[node].bootmem_data;
+ struct bootmem_data *bdp = &bootmem_node_data[node];
epfn = GRANULEROUNDUP(end) >> PAGE_SHIFT;
cstart = GRANULEROUNDDOWN(start);
@@ -167,7 +166,7 @@ static void __init fill_pernode(int node
{
void *cpu_data;
int cpus = early_nr_cpus_node(node);
- struct bootmem_data *bdp = &mem_data[node].bootmem_data;
+ struct bootmem_data *bdp = &bootmem_node_data[node];
mem_data[node].pernode_addr = pernode;
mem_data[node].pernode_size = pernodesize;
@@ -224,7 +223,7 @@ static int __init find_pernode_space(uns
{
unsigned long epfn;
unsigned long pernodesize = 0, pernode, pages, mapsize;
- struct bootmem_data *bdp = &mem_data[node].bootmem_data;
+ struct bootmem_data *bdp = &bootmem_node_data[node];
epfn = (start + len) >> PAGE_SHIFT;
@@ -440,7 +439,7 @@ void __init find_memory(void)
efi_memmap_walk(find_max_min_low_pfn, NULL);
for_each_online_node(node)
- if (mem_data[node].bootmem_data.node_low_pfn) {
+ if (bootmem_node_data[node].node_low_pfn) {
node_clear(node, memory_less_mask);
mem_data[node].min_pfn = ~0UL;
}
@@ -460,7 +459,7 @@ void __init find_memory(void)
else if (node_isset(node, memory_less_mask))
continue;
- bdp = &mem_data[node].bootmem_data;
+ bdp = &bootmem_node_data[node];
pernode = mem_data[node].pernode_addr;
pernodesize = mem_data[node].pernode_size;
map = pernode + pernodesize;
Index: linux-2.6/arch/m32r/mm/discontig.c
===================================================================
--- linux-2.6.orig/arch/m32r/mm/discontig.c
+++ linux-2.6/arch/m32r/mm/discontig.c
@@ -20,7 +20,6 @@ extern char _end[];
struct pglist_data *node_data[MAX_NUMNODES];
EXPORT_SYMBOL(node_data);
-static bootmem_data_t node_bdata[MAX_NUMNODES] __initdata;
pg_data_t m32r_node_data[MAX_NUMNODES];
@@ -81,7 +80,7 @@ unsigned long __init setup_memory(void)
for_each_online_node(nid) {
mp = &mem_prof[nid];
NODE_DATA(nid)=(pg_data_t *)&m32r_node_data[nid];
- NODE_DATA(nid)->bdata = &node_bdata[nid];
+ NODE_DATA(nid)->bdata = &bootmem_node_data[nid];
min_pfn = mp->start_pfn;
max_pfn = mp->start_pfn + mp->pages;
bootmap_size = init_bootmem_node(NODE_DATA(nid), mp->free_pfn,
@@ -163,4 +162,3 @@ unsigned long __init zone_sizes_init(voi
return holes;
}
-
Index: linux-2.6/arch/m68k/mm/init.c
===================================================================
--- linux-2.6.orig/arch/m68k/mm/init.c
+++ linux-2.6/arch/m68k/mm/init.c
@@ -32,8 +32,6 @@
DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
-static bootmem_data_t __initdata bootmem_data[MAX_NUMNODES];
-
pg_data_t pg_data_map[MAX_NUMNODES];
EXPORT_SYMBOL(pg_data_map);
@@ -58,7 +56,7 @@ void __init m68k_setup_node(int node)
pg_data_table[i] = pg_data_map + node;
}
#endif
- pg_data_map[node].bdata = bootmem_data + node;
+ pg_data_map[node].bdata = bootmem_node_data + node;
node_set_online(node);
}
Index: linux-2.6/arch/mips/sgi-ip27/ip27-memory.c
===================================================================
--- linux-2.6.orig/arch/mips/sgi-ip27/ip27-memory.c
+++ linux-2.6/arch/mips/sgi-ip27/ip27-memory.c
@@ -37,7 +37,6 @@
static short __initdata slot_lastfilled_cache[MAX_COMPACT_NODES];
static unsigned short __initdata slot_psize_cache[MAX_COMPACT_NODES][MAX_MEM_SLOTS];
-static struct bootmem_data __initdata plat_node_bdata[MAX_COMPACT_NODES];
struct node_data *__node_data[MAX_COMPACT_NODES];
@@ -453,7 +452,7 @@ static void __init node_mem_init(cnodeid
__node_data[node] = __va(slot_freepfn << PAGE_SHIFT);
pd = NODE_DATA(node);
- pd->bdata = &plat_node_bdata[node];
+ pd->bdata = &bootmem_node_data[node];
cpus_clear(hub_data(node)->h_cpus);
Index: linux-2.6/arch/parisc/mm/init.c
===================================================================
--- linux-2.6.orig/arch/parisc/mm/init.c
+++ linux-2.6/arch/parisc/mm/init.c
@@ -36,7 +36,6 @@ extern int data_start;
#ifdef CONFIG_DISCONTIGMEM
struct node_map_data node_data[MAX_NUMNODES] __read_mostly;
-bootmem_data_t bmem_data[MAX_NUMNODES] __read_mostly;
unsigned char pfnnid_map[PFNNID_MAP_MAX] __read_mostly;
#endif
@@ -262,7 +261,7 @@ static void __init setup_bootmem(void)
#ifdef CONFIG_DISCONTIGMEM
for (i = 0; i < MAX_PHYSMEM_RANGES; i++) {
memset(NODE_DATA(i), 0, sizeof(pg_data_t));
- NODE_DATA(i)->bdata = &bmem_data[i];
+ NODE_DATA(i)->bdata = &bootmem_node_data[i];
}
memset(pfnnid_map, 0xff, sizeof(pfnnid_map));
Index: linux-2.6/arch/powerpc/mm/numa.c
===================================================================
--- linux-2.6.orig/arch/powerpc/mm/numa.c
+++ linux-2.6/arch/powerpc/mm/numa.c
@@ -39,7 +39,6 @@ EXPORT_SYMBOL(numa_cpu_lookup_table);
EXPORT_SYMBOL(numa_cpumask_lookup_table);
EXPORT_SYMBOL(node_data);
-static bootmem_data_t __initdata plat_node_bdata[MAX_NUMNODES];
static int min_common_depth;
static int n_mem_addr_cells, n_mem_size_cells;
@@ -685,7 +684,7 @@ void __init do_init_bootmem(void)
dbg("node %d\n", nid);
dbg("NODE_DATA() = %p\n", NODE_DATA(nid));
- NODE_DATA(nid)->bdata = &plat_node_bdata[nid];
+ NODE_DATA(nid)->bdata = &bootmem_node_data[nid];
NODE_DATA(nid)->node_start_pfn = start_pfn;
NODE_DATA(nid)->node_spanned_pages = end_pfn - start_pfn;
Index: linux-2.6/arch/sh/mm/numa.c
===================================================================
--- linux-2.6.orig/arch/sh/mm/numa.c
+++ linux-2.6/arch/sh/mm/numa.c
@@ -14,7 +14,6 @@
#include <linux/pfn.h>
#include <asm/sections.h>
-static bootmem_data_t plat_node_bdata[MAX_NUMNODES];
struct pglist_data *node_data[MAX_NUMNODES] __read_mostly;
EXPORT_SYMBOL_GPL(node_data);
@@ -35,7 +34,7 @@ void __init setup_memory(void)
NODE_DATA(0) = pfn_to_kaddr(free_pfn);
memset(NODE_DATA(0), 0, sizeof(struct pglist_data));
free_pfn += PFN_UP(sizeof(struct pglist_data));
- NODE_DATA(0)->bdata = &plat_node_bdata[0];
+ NODE_DATA(0)->bdata = &bootmem_node_data[0];
/* Set up node 0 */
setup_bootmem_allocator(free_pfn);
@@ -66,7 +65,7 @@ void __init setup_bootmem_node(int nid,
free_pfn += PFN_UP(sizeof(struct pglist_data));
memset(NODE_DATA(nid), 0, sizeof(struct pglist_data));
- NODE_DATA(nid)->bdata = &plat_node_bdata[nid];
+ NODE_DATA(nid)->bdata = &bootmem_node_data[nid];
NODE_DATA(nid)->node_start_pfn = start_pfn;
NODE_DATA(nid)->node_spanned_pages = end_pfn - start_pfn;
Index: linux-2.6/arch/sparc64/mm/init.c
===================================================================
--- linux-2.6.orig/arch/sparc64/mm/init.c
+++ linux-2.6/arch/sparc64/mm/init.c
@@ -787,7 +787,6 @@ int numa_cpu_lookup_table[NR_CPUS];
cpumask_t numa_cpumask_lookup_table[MAX_NUMNODES];
#ifdef CONFIG_NEED_MULTIPLE_NODES
-static bootmem_data_t plat_node_bdata[MAX_NUMNODES];
struct mdesc_mblock {
u64 base;
@@ -870,7 +869,7 @@ static void __init allocate_node_data(in
NODE_DATA(nid) = __va(paddr);
memset(NODE_DATA(nid), 0, sizeof(struct pglist_data));
- NODE_DATA(nid)->bdata = &plat_node_bdata[nid];
+ NODE_DATA(nid)->bdata = &bootmem_node_data[nid];
#endif
p = NODE_DATA(nid);
Index: linux-2.6/arch/x86/mm/discontig_32.c
===================================================================
--- linux-2.6.orig/arch/x86/mm/discontig_32.c
+++ linux-2.6/arch/x86/mm/discontig_32.c
@@ -41,7 +41,6 @@
struct pglist_data *node_data[MAX_NUMNODES] __read_mostly;
EXPORT_SYMBOL(node_data);
-static bootmem_data_t node0_bdata;
/*
* numa interface - we expect the numa architecture specific code to have
@@ -382,7 +381,7 @@ unsigned long __init setup_memory(void)
propagate_e820_map_node(nid);
memset(NODE_DATA(0), 0, sizeof(struct pglist_data));
- NODE_DATA(0)->bdata = &node0_bdata;
+ NODE_DATA(0)->bdata = &bootmem_node_data[0];
setup_bootmem_allocator();
return max_low_pfn;
}
Index: linux-2.6/arch/x86/mm/numa_64.c
===================================================================
--- linux-2.6.orig/arch/x86/mm/numa_64.c
+++ linux-2.6/arch/x86/mm/numa_64.c
@@ -27,8 +27,6 @@
struct pglist_data *node_data[MAX_NUMNODES] __read_mostly;
EXPORT_SYMBOL(node_data);
-bootmem_data_t plat_node_bdata[MAX_NUMNODES];
-
struct memnode memnode;
#ifdef CONFIG_SMP
@@ -215,7 +213,7 @@ void __init setup_node_bootmem(int nodei
nodedata_phys + pgdat_size - 1);
memset(NODE_DATA(nodeid), 0, sizeof(pg_data_t));
- NODE_DATA(nodeid)->bdata = &plat_node_bdata[nodeid];
+ NODE_DATA(nodeid)->bdata = &bootmem_node_data[nodeid];
NODE_DATA(nodeid)->node_start_pfn = start_pfn;
NODE_DATA(nodeid)->node_spanned_pages = end_pfn - start_pfn;
@@ -671,5 +669,3 @@ void __init init_cpu_to_node(void)
numa_set_node(i, node);
}
}
-
-
Index: linux-2.6/include/linux/bootmem.h
===================================================================
--- linux-2.6.orig/include/linux/bootmem.h
+++ linux-2.6/include/linux/bootmem.h
@@ -38,6 +38,8 @@ typedef struct bootmem_data {
struct list_head list;
} bootmem_data_t;
+extern bootmem_data_t bootmem_node_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);
Index: linux-2.6/mm/bootmem.c
===================================================================
--- linux-2.6.orig/mm/bootmem.c
+++ linux-2.6/mm/bootmem.c
@@ -36,6 +36,8 @@ static LIST_HEAD(bdata_list);
unsigned long saved_max_pfn;
#endif
+bootmem_data_t bootmem_node_data[MAX_NUMNODES] __initdata;
+
/* return the number of _pages_ that will be allocated for the boot bitmap */
unsigned long __init bootmem_bootmap_pages(unsigned long pages)
{
Index: linux-2.6/mm/page_alloc.c
===================================================================
--- linux-2.6.orig/mm/page_alloc.c
+++ linux-2.6/mm/page_alloc.c
@@ -3987,9 +3987,7 @@ void __init set_dma_reserve(unsigned lon
}
#ifndef CONFIG_NEED_MULTIPLE_NODES
-static bootmem_data_t contig_bootmem_data;
-struct pglist_data contig_page_data = { .bdata = &contig_bootmem_data };
-
+struct pglist_data contig_page_data = { .bdata = &bootmem_node_data[0] };
EXPORT_SYMBOL(contig_page_data);
#endif
--
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 8+ messages in thread* [patch 2/4] mm: Fix free_all_bootmem_core alignment check
2008-04-30 17:05 [patch 0/4] Bootmem cleanups Johannes Weiner
2008-04-30 17:05 ` [patch 1/4] mm: Move bootmem descriptors definition to a single place Johannes Weiner
@ 2008-04-30 17:05 ` Johannes Weiner
2008-04-30 17:05 ` [patch 3/4] mm: Normalize internal argument passing of bootmem data Johannes Weiner
` (2 subsequent siblings)
4 siblings, 0 replies; 8+ messages in thread
From: Johannes Weiner @ 2008-04-30 17:05 UTC (permalink / raw)
To: Ingo Molnar; +Cc: linux-kernel, linux-mm
[-- Attachment #1: mm-fix-free_all_bootmem_core-alignment-check.patch --]
[-- Type: text/plain, Size: 2218 bytes --]
The check for node_boot_start is bogus because we start freeing at the
corresponding pfn. So check if the pfn is properly aligned instead in
a more readable way and adjust the documentation.
Also remove an unneeded accounting variable.
Signed-off-by: Johannes Weiner <hannes@saeurebad.de>
CC: Ingo Molnar <mingo@elte.hu>
---
Index: linux-2.6/mm/bootmem.c
===================================================================
--- linux-2.6.orig/mm/bootmem.c
+++ linux-2.6/mm/bootmem.c
@@ -376,7 +376,7 @@ static unsigned long __init free_all_boo
struct page *page;
unsigned long pfn;
bootmem_data_t *bdata = pgdat->bdata;
- unsigned long i, count, total = 0;
+ unsigned long i, count;
unsigned long idx;
unsigned long *map;
int gofast = 0;
@@ -388,10 +388,13 @@ static unsigned long __init free_all_boo
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 ||
- ffs(bdata->node_boot_start) - PAGE_SHIFT > ffs(BITS_PER_LONG))
+ /*
+ * Check if we are aligned to BITS_PER_LONG pages. If so, we might
+ * be able to free page orders of that size at once.
+ */
+ if (!(pfn & (BITS_PER_LONG-1)))
gofast = 1;
+
for (i = 0; i < idx; ) {
unsigned long v = ~map[i / BITS_PER_LONG];
@@ -419,23 +422,19 @@ static unsigned long __init free_all_boo
}
pfn += BITS_PER_LONG;
}
- total += count;
/*
* Now free the allocator bitmap itself, it's not
* needed anymore:
*/
page = virt_to_page(bdata->node_bootmem_map);
- count = 0;
idx = (get_mapsize(bdata) + PAGE_SIZE-1) >> PAGE_SHIFT;
- for (i = 0; i < idx; i++, page++) {
+ for (i = 0; i < idx; i++, page++)
__free_pages_bootmem(page, 0);
- count++;
- }
- total += count;
+ count += i;
bdata->node_bootmem_map = NULL;
- return total;
+ return count;
}
unsigned long __init init_bootmem_node(pg_data_t *pgdat, unsigned long freepfn,
--
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 8+ messages in thread* [patch 3/4] mm: Normalize internal argument passing of bootmem data
2008-04-30 17:05 [patch 0/4] Bootmem cleanups Johannes Weiner
2008-04-30 17:05 ` [patch 1/4] mm: Move bootmem descriptors definition to a single place Johannes Weiner
2008-04-30 17:05 ` [patch 2/4] mm: Fix free_all_bootmem_core alignment check Johannes Weiner
@ 2008-04-30 17:05 ` Johannes Weiner
2008-04-30 17:05 ` [patch 4/4] mm: Unexport __alloc_bootmem_core() Johannes Weiner
2008-04-30 18:43 ` [patch 0/4] Bootmem cleanups Ingo Molnar
4 siblings, 0 replies; 8+ messages in thread
From: Johannes Weiner @ 2008-04-30 17:05 UTC (permalink / raw)
To: Ingo Molnar; +Cc: linux-kernel, linux-mm
[-- Attachment #1: mm-normalize-internal-argument-passing-of-bootmem-data.patch --]
[-- Type: text/plain, Size: 2680 bytes --]
All _core functions only need the bootmem data, not the whole node
descriptor. Adjust the two functions that take the node descriptor
unneededly.
Signed-off-by: Johannes Weiner <hannes@saeurebad.de>
CC: Ingo Molnar <mingo@elte.hu>
---
Index: linux-2.6/mm/bootmem.c
===================================================================
--- linux-2.6.orig/mm/bootmem.c
+++ linux-2.6/mm/bootmem.c
@@ -87,10 +87,9 @@ static unsigned long __init get_mapsize(
/*
* Called once to set up the allocator itself.
*/
-static unsigned long __init init_bootmem_core(pg_data_t *pgdat,
+static unsigned long __init init_bootmem_core(bootmem_data_t *bdata,
unsigned long mapstart, unsigned long start, unsigned long end)
{
- bootmem_data_t *bdata = pgdat->bdata;
unsigned long mapsize;
bdata->node_bootmem_map = phys_to_virt(PFN_PHYS(mapstart));
@@ -371,11 +370,10 @@ found:
return ret;
}
-static unsigned long __init free_all_bootmem_core(pg_data_t *pgdat)
+static unsigned long __init free_all_bootmem_core(bootmem_data_t *bdata)
{
struct page *page;
unsigned long pfn;
- bootmem_data_t *bdata = pgdat->bdata;
unsigned long i, count;
unsigned long idx;
unsigned long *map;
@@ -440,7 +438,7 @@ static unsigned long __init free_all_boo
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);
+ return init_bootmem_core(pgdat->bdata, freepfn, startpfn, endpfn);
}
void __init reserve_bootmem_node(pg_data_t *pgdat, unsigned long physaddr,
@@ -463,14 +461,14 @@ void __init free_bootmem_node(pg_data_t
unsigned long __init free_all_bootmem_node(pg_data_t *pgdat)
{
register_page_bootmem_info_node(pgdat);
- return free_all_bootmem_core(pgdat);
+ return free_all_bootmem_core(pgdat->bdata);
}
unsigned long __init init_bootmem(unsigned long start, unsigned long pages)
{
max_low_pfn = pages;
min_low_pfn = start;
- return init_bootmem_core(NODE_DATA(0), start, 0, pages);
+ return init_bootmem_core(NODE_DATA(0)->bdata, start, 0, pages);
}
#ifndef CONFIG_HAVE_ARCH_BOOTMEM_NODE
@@ -501,7 +499,7 @@ void __init free_bootmem(unsigned long a
unsigned long __init free_all_bootmem(void)
{
- return free_all_bootmem_core(NODE_DATA(0));
+ return free_all_bootmem_core(NODE_DATA(0)->bdata);
}
void * __init __alloc_bootmem_nopanic(unsigned long size, unsigned long align,
--
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 8+ messages in thread* [patch 4/4] mm: Unexport __alloc_bootmem_core()
2008-04-30 17:05 [patch 0/4] Bootmem cleanups Johannes Weiner
` (2 preceding siblings ...)
2008-04-30 17:05 ` [patch 3/4] mm: Normalize internal argument passing of bootmem data Johannes Weiner
@ 2008-04-30 17:05 ` Johannes Weiner
2008-04-30 18:42 ` Ingo Molnar
2008-04-30 18:43 ` [patch 0/4] Bootmem cleanups Ingo Molnar
4 siblings, 1 reply; 8+ messages in thread
From: Johannes Weiner @ 2008-04-30 17:05 UTC (permalink / raw)
To: Ingo Molnar; +Cc: linux-kernel, linux-mm
[-- Attachment #1: mm-unexport__alloc_bootmem_core.patch --]
[-- Type: text/plain, Size: 3713 bytes --]
This function has no external callers, so unexport it. Also fix its
naming inconsistency.
Signed-off-by: Johannes Weiner <hannes@saeurebad.de>
CC: Ingo Molnar <mingo@elte.hu>
---
It could be argued that all bootmem alloc function names begin with
underscores. But I chose to `no _core function names begin with
underscores' :)
Index: linux-2.6/include/linux/bootmem.h
===================================================================
--- linux-2.6.orig/include/linux/bootmem.h
+++ linux-2.6/include/linux/bootmem.h
@@ -56,11 +56,6 @@ extern void *__alloc_bootmem_low_node(pg
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);
/*
* flags for reserve_bootmem (also if CONFIG_HAVE_ARCH_BOOTMEM_NODE,
Index: linux-2.6/mm/bootmem.c
===================================================================
--- linux-2.6.orig/mm/bootmem.c
+++ linux-2.6/mm/bootmem.c
@@ -233,9 +233,9 @@ static void __init free_bootmem_core(boo
*
* NOTE: This function is _not_ reentrant.
*/
-void * __init
-__alloc_bootmem_core(struct bootmem_data *bdata, unsigned long size,
- unsigned long align, unsigned long goal, unsigned long limit)
+static void * __init
+alloc_bootmem_core(struct bootmem_data *bdata, unsigned long size,
+ unsigned long align, unsigned long goal, unsigned long limit)
{
unsigned long areasize, preferred;
unsigned long i, start = 0, incr, eidx, end_pfn;
@@ -244,7 +244,7 @@ __alloc_bootmem_core(struct bootmem_data
void *node_bootmem_map;
if (!size) {
- printk("__alloc_bootmem_core(): zero-sized request\n");
+ printk("alloc_bootmem_core(): zero-sized request\n");
BUG();
}
BUG_ON(align & (align-1));
@@ -509,7 +509,7 @@ void * __init __alloc_bootmem_nopanic(un
void *ptr;
list_for_each_entry(bdata, &bdata_list, list) {
- ptr = __alloc_bootmem_core(bdata, size, align, goal, 0);
+ ptr = alloc_bootmem_core(bdata, size, align, goal, 0);
if (ptr)
return ptr;
}
@@ -537,7 +537,7 @@ void * __init __alloc_bootmem_node(pg_da
{
void *ptr;
- ptr = __alloc_bootmem_core(pgdat->bdata, size, align, goal, 0);
+ ptr = alloc_bootmem_core(pgdat->bdata, size, align, goal, 0);
if (ptr)
return ptr;
@@ -556,8 +556,8 @@ void * __init alloc_bootmem_section(unsi
goal = PFN_PHYS(pfn);
limit = PFN_PHYS(section_nr_to_pfn(section_nr + 1)) - 1;
pgdat = NODE_DATA(early_pfn_to_nid(pfn));
- ptr = __alloc_bootmem_core(pgdat->bdata, size, SMP_CACHE_BYTES, goal,
- limit);
+ ptr = alloc_bootmem_core(pgdat->bdata, size, SMP_CACHE_BYTES, goal,
+ limit);
if (!ptr)
return NULL;
@@ -586,8 +586,8 @@ void * __init __alloc_bootmem_low(unsign
void *ptr;
list_for_each_entry(bdata, &bdata_list, list) {
- ptr = __alloc_bootmem_core(bdata, size, align, goal,
- ARCH_LOW_ADDRESS_LIMIT);
+ ptr = alloc_bootmem_core(bdata, size, align, goal,
+ ARCH_LOW_ADDRESS_LIMIT);
if (ptr)
return ptr;
}
@@ -603,6 +603,6 @@ void * __init __alloc_bootmem_low(unsign
void * __init __alloc_bootmem_low_node(pg_data_t *pgdat, unsigned long size,
unsigned long align, unsigned long goal)
{
- return __alloc_bootmem_core(pgdat->bdata, size, align, goal,
- ARCH_LOW_ADDRESS_LIMIT);
+ return alloc_bootmem_core(pgdat->bdata, size, align, goal,
+ ARCH_LOW_ADDRESS_LIMIT);
}
--
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [patch 4/4] mm: Unexport __alloc_bootmem_core()
2008-04-30 17:05 ` [patch 4/4] mm: Unexport __alloc_bootmem_core() Johannes Weiner
@ 2008-04-30 18:42 ` Ingo Molnar
0 siblings, 0 replies; 8+ messages in thread
From: Ingo Molnar @ 2008-04-30 18:42 UTC (permalink / raw)
To: Johannes Weiner; +Cc: linux-kernel, linux-mm
* Johannes Weiner <hannes@saeurebad.de> wrote:
> This function has no external callers, so unexport it. Also fix its
> naming inconsistency.
>
> Signed-off-by: Johannes Weiner <hannes@saeurebad.de>
> CC: Ingo Molnar <mingo@elte.hu>
> ---
>
> It could be argued that all bootmem alloc function names begin with
> underscores. But I chose to `no _core function names begin with
> underscores' :)
lol :) The double underscores definitely prove it that this code was
originally written by me ;-)
Ingo
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [patch 0/4] Bootmem cleanups
2008-04-30 17:05 [patch 0/4] Bootmem cleanups Johannes Weiner
` (3 preceding siblings ...)
2008-04-30 17:05 ` [patch 4/4] mm: Unexport __alloc_bootmem_core() Johannes Weiner
@ 2008-04-30 18:43 ` Ingo Molnar
2008-05-01 10:22 ` Johannes Weiner
4 siblings, 1 reply; 8+ messages in thread
From: Ingo Molnar @ 2008-04-30 18:43 UTC (permalink / raw)
To: Johannes Weiner; +Cc: linux-kernel, linux-mm, Yinghai Lu, Andrew Morton
* Johannes Weiner <hannes@saeurebad.de> wrote:
> Hi Ingo,
>
> I now dropped the node-crossing patches from my bootmem series and
> here is what is left over.
>
> They apply to Linus' current git
> (0ff5ce7f30b45cc2014cec465c0e96c16877116e).
>
> Please note that all parts affecting !X86_32_BORING_UMA_BOX are
> untested!
>
> arch/alpha/mm/numa.c | 8 ++--
> arch/arm/mm/discontig.c | 34 ++++++++++-----------
> arch/ia64/mm/discontig.c | 11 +++----
> arch/m32r/mm/discontig.c | 4 +--
> arch/m68k/mm/init.c | 4 +--
> arch/mips/sgi-ip27/ip27-memory.c | 3 +-
> arch/parisc/mm/init.c | 3 +-
> arch/powerpc/mm/numa.c | 3 +-
> arch/sh/mm/numa.c | 5 +--
> arch/sparc64/mm/init.c | 3 +-
> arch/x86/mm/discontig_32.c | 3 +-
> arch/x86/mm/numa_64.c | 6 +---
> include/linux/bootmem.h | 7 +---
> mm/bootmem.c | 59 ++++++++++++++++++-------------------
> mm/page_alloc.c | 4 +--
> 15 files changed, 67 insertions(+), 90 deletions(-)
i've read them and the changes all look sane and well-structured - but
the impact is way too cross-arch for this to even touch x86.git i guess.
I suspect this is for -mm?
Acked-by: Ingo Molnar <mingo@elte.hu>
Ingo
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [patch 0/4] Bootmem cleanups
2008-04-30 18:43 ` [patch 0/4] Bootmem cleanups Ingo Molnar
@ 2008-05-01 10:22 ` Johannes Weiner
0 siblings, 0 replies; 8+ messages in thread
From: Johannes Weiner @ 2008-05-01 10:22 UTC (permalink / raw)
To: Ingo Molnar; +Cc: linux-kernel, linux-mm, Yinghai Lu, Andrew Morton
Hi Ingo,
Ingo Molnar <mingo@elte.hu> writes:
> * Johannes Weiner <hannes@saeurebad.de> wrote:
>
>> Hi Ingo,
>>
>> I now dropped the node-crossing patches from my bootmem series and
>> here is what is left over.
>>
>> They apply to Linus' current git
>> (0ff5ce7f30b45cc2014cec465c0e96c16877116e).
>>
>> Please note that all parts affecting !X86_32_BORING_UMA_BOX are
>> untested!
>>
>> arch/alpha/mm/numa.c | 8 ++--
>> arch/arm/mm/discontig.c | 34 ++++++++++-----------
>> arch/ia64/mm/discontig.c | 11 +++----
>> arch/m32r/mm/discontig.c | 4 +--
>> arch/m68k/mm/init.c | 4 +--
>> arch/mips/sgi-ip27/ip27-memory.c | 3 +-
>> arch/parisc/mm/init.c | 3 +-
>> arch/powerpc/mm/numa.c | 3 +-
>> arch/sh/mm/numa.c | 5 +--
>> arch/sparc64/mm/init.c | 3 +-
>> arch/x86/mm/discontig_32.c | 3 +-
>> arch/x86/mm/numa_64.c | 6 +---
>> include/linux/bootmem.h | 7 +---
>> mm/bootmem.c | 59 ++++++++++++++++++-------------------
>> mm/page_alloc.c | 4 +--
>> 15 files changed, 67 insertions(+), 90 deletions(-)
>
> i've read them and the changes all look sane and well-structured - but
> the impact is way too cross-arch for this to even touch x86.git i guess.
> I suspect this is for -mm?
Sorry, misunderstanding. I did not send it to the x86 guy but rather
the bootmem guy ;)
Andrew took them into -mm.
Thanks for your review!
Hannes
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 8+ messages in thread