* [PATCH tj-percpu 1/3] percpu: kill compile warning in pcpu_populate_chunk()
@ 2009-03-01 7:13 Tejun Heo
2009-03-01 7:13 ` [PATCH tj-percpu 2/3] alpha: fix typo in recent early vmalloc change Tejun Heo
2009-03-02 9:07 ` [PATCH tj-percpu 1/3] percpu: kill compile warning in pcpu_populate_chunk() Ingo Molnar
0 siblings, 2 replies; 4+ messages in thread
From: Tejun Heo @ 2009-03-01 7:13 UTC (permalink / raw)
To: Ingo Molnar, x86, Johannes Weiner, Linux Kernel, Thomas Gleixner,
Rusty Russell, H. Peter Anvin
Impact: remove compile warning
Mark local variable map_end in pcpu_populate_chunk() with
uninitialized_var(). The variable is always used in tandem with
map_start and guaranteed to be initialized before use but gcc doesn't
understand that.
Signed-off-by: Tejun Heo <tj@kernel.org>
Reported-by: Ingo Molnar <mingo@elte.hu>
---
This the first of three misc fix patches for #tj-percpu. Patches are
also available in the tj-percpu git tree.
git://git.kernel.org/pub/scm/linux/kernel/git/tj/misc.git tj-percpu
Thanks.
mm/percpu.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/mm/percpu.c b/mm/percpu.c
index 5954e7a..3d0f545 100644
--- a/mm/percpu.c
+++ b/mm/percpu.c
@@ -639,7 +639,7 @@ static int pcpu_populate_chunk(struct pcpu_chunk *chunk, int off, int size)
int page_start = PFN_DOWN(off);
int page_end = PFN_UP(off + size);
int map_start = -1;
- int map_end;
+ int uninitialized_var(map_end);
unsigned int cpu;
int i;
--
1.6.0.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH tj-percpu 2/3] alpha: fix typo in recent early vmalloc change
2009-03-01 7:13 [PATCH tj-percpu 1/3] percpu: kill compile warning in pcpu_populate_chunk() Tejun Heo
@ 2009-03-01 7:13 ` Tejun Heo
2009-03-01 7:14 ` [PATCH tj-percpu 3/3] bootmem, x86: further fixes for arch-specific bootmem wrapping Tejun Heo
2009-03-02 9:07 ` [PATCH tj-percpu 1/3] percpu: kill compile warning in pcpu_populate_chunk() Ingo Molnar
1 sibling, 1 reply; 4+ messages in thread
From: Tejun Heo @ 2009-03-01 7:13 UTC (permalink / raw)
To: Ingo Molnar, x86, Johannes Weiner, Linux Kernel, Thomas Gleixner,
Rusty Russell, H. Peter Anvin, Ivan Kokshaysky
Impact: fix build
Add missing 'o' in variable name. Compile tested.
Signed-off-by: Tejun Heo <tj@kernel.org>
Reported-by: Ingo Molnar <mingo@elte.hu>
Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
---
arch/alpha/mm/init.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/arch/alpha/mm/init.c b/arch/alpha/mm/init.c
index 91eddd8..af71d38 100644
--- a/arch/alpha/mm/init.c
+++ b/arch/alpha/mm/init.c
@@ -202,7 +202,7 @@ callback_init(void * kernel_end)
console_remap_vm.size = nr_pages << PAGE_SHIFT;
vm_area_register_early(&console_remap_vm, PAGE_SIZE);
- vaddr = (unsigned long)consle_remap_vm.addr;
+ vaddr = (unsigned long)console_remap_vm.addr;
/* Set up the third level PTEs and update the virtual
addresses of the CRB entries. */
--
1.6.0.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH tj-percpu 3/3] bootmem, x86: further fixes for arch-specific bootmem wrapping
2009-03-01 7:13 ` [PATCH tj-percpu 2/3] alpha: fix typo in recent early vmalloc change Tejun Heo
@ 2009-03-01 7:14 ` Tejun Heo
0 siblings, 0 replies; 4+ messages in thread
From: Tejun Heo @ 2009-03-01 7:14 UTC (permalink / raw)
To: Ingo Molnar, x86, Johannes Weiner, Linux Kernel, Thomas Gleixner,
Rusty Russell, H. Peter Anvin, Ivan Kokshaysky
Impact: fix new breakages introduced by previous fix
Commit c132937556f56ee4b831ef4b23f1846e05fde102 tried to clean up
bootmem arch wrapper but it wasn't quite correct. Before the commit,
the followings were broken.
* Low level interface functions prefixed with __ ignored arch
preference.
* reserve_bootmem(...) can't be mapped into
reserve_bootmem_node(NODE_DATA(0)->bdata, ...) because the node is
not preference here. The region specified MUST fall into the
specified region; otherwise, it will panic.
After the commit,
* If allocation fails for the arch preferred node, it should fallback
to whatever is available. Instead, it simply failed allocation.
There are too many internal details to allow generic wrapping and
still keep things simple for archs. Plus, all that arch wants is a
way to prefer certain node over another.
This patch drops the generic wrapping around alloc_bootmem_core() and
add alloc_bootmem_core() instead. If necessary, arch can define
bootmem_arch_referred_node() macro or function which takes all
allocation information and returns the preferred node. bootmem
generic code will always try the preferred node first and then
fallback to other nodes as usual.
Breakages noted and changes reviewed by Johannes Weiner.
Signed-off-by: Tejun Heo <tj@kernel.org>
Acked-by: Johannes Weiner <hannes@cmpxchg.org>
---
arch/x86/include/asm/mmzone_32.h | 8 +-----
mm/bootmem.c | 45 +++++++++++++++++++++++++------------
2 files changed, 32 insertions(+), 21 deletions(-)
diff --git a/arch/x86/include/asm/mmzone_32.h b/arch/x86/include/asm/mmzone_32.h
index eeacf67..ede6998 100644
--- a/arch/x86/include/asm/mmzone_32.h
+++ b/arch/x86/include/asm/mmzone_32.h
@@ -92,12 +92,8 @@ static inline int pfn_valid(int pfn)
#ifdef CONFIG_NEED_MULTIPLE_NODES
/* always use node 0 for bootmem on this numa platform */
-#define alloc_bootmem_core(__bdata, size, align, goal, limit) \
-({ \
- bootmem_data_t __maybe_unused * __abm_bdata_dummy = (__bdata); \
- __alloc_bootmem_core(NODE_DATA(0)->bdata, \
- (size), (align), (goal), (limit)); \
-})
+#define bootmem_arch_preferred_node(__bdata, size, align, goal, limit) \
+ (NODE_DATA(0)->bdata)
#endif /* CONFIG_NEED_MULTIPLE_NODES */
#endif /* _ASM_X86_MMZONE_32_H */
diff --git a/mm/bootmem.c b/mm/bootmem.c
index d7140c0..daf9271 100644
--- a/mm/bootmem.c
+++ b/mm/bootmem.c
@@ -37,16 +37,6 @@ static struct list_head bdata_list __initdata = LIST_HEAD_INIT(bdata_list);
static int bootmem_debug;
-/*
- * If an arch needs to apply workarounds to bootmem allocation, it can
- * set CONFIG_HAVE_ARCH_BOOTMEM and define a wrapper around
- * __alloc_bootmem_core().
- */
-#ifndef CONFIG_HAVE_ARCH_BOOTMEM
-#define alloc_bootmem_core(bdata, size, align, goal, limit) \
- __alloc_bootmem_core((bdata), (size), (align), (goal), (limit))
-#endif
-
static int __init bootmem_debug_setup(char *buf)
{
bootmem_debug = 1;
@@ -436,9 +426,9 @@ static unsigned long align_off(struct bootmem_data *bdata, unsigned long off,
return ALIGN(base + off, align) - base;
}
-static 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 fallback = 0;
unsigned long min, max, start, sidx, midx, step;
@@ -538,17 +528,34 @@ find_block:
return NULL;
}
+static void * __init alloc_arch_preferred_bootmem(bootmem_data_t *bdata,
+ unsigned long size, unsigned long align,
+ unsigned long goal, unsigned long limit)
+{
+#ifdef CONFIG_HAVE_ARCH_BOOTMEM
+ bootmem_data_t *p_bdata;
+
+ p_bdata = bootmem_arch_preferred_node(bdata, size, align, goal, limit);
+ if (p_bdata)
+ return alloc_bootmem_core(p_bdata, size, align, goal, limit);
+#endif
+ return NULL;
+}
+
static void * __init ___alloc_bootmem_nopanic(unsigned long size,
unsigned long align,
unsigned long goal,
unsigned long limit)
{
bootmem_data_t *bdata;
+ void *region;
restart:
- list_for_each_entry(bdata, &bdata_list, list) {
- void *region;
+ region = alloc_arch_preferred_bootmem(NULL, size, align, goal, limit);
+ if (region)
+ return region;
+ list_for_each_entry(bdata, &bdata_list, list) {
if (goal && bdata->node_low_pfn <= PFN_DOWN(goal))
continue;
if (limit && bdata->node_min_pfn >= PFN_DOWN(limit))
@@ -626,6 +633,10 @@ static void * __init ___alloc_bootmem_node(bootmem_data_t *bdata,
{
void *ptr;
+ ptr = alloc_arch_preferred_bootmem(bdata, size, align, goal, limit);
+ if (ptr)
+ return ptr;
+
ptr = alloc_bootmem_core(bdata, size, align, goal, limit);
if (ptr)
return ptr;
@@ -682,6 +693,10 @@ void * __init __alloc_bootmem_node_nopanic(pg_data_t *pgdat, unsigned long size,
{
void *ptr;
+ ptr = alloc_arch_preferred_bootmem(pgdat->bdata, size, align, goal, 0);
+ if (ptr)
+ return ptr;
+
ptr = alloc_bootmem_core(pgdat->bdata, size, align, goal, 0);
if (ptr)
return ptr;
--
1.6.0.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH tj-percpu 1/3] percpu: kill compile warning in pcpu_populate_chunk()
2009-03-01 7:13 [PATCH tj-percpu 1/3] percpu: kill compile warning in pcpu_populate_chunk() Tejun Heo
2009-03-01 7:13 ` [PATCH tj-percpu 2/3] alpha: fix typo in recent early vmalloc change Tejun Heo
@ 2009-03-02 9:07 ` Ingo Molnar
1 sibling, 0 replies; 4+ messages in thread
From: Ingo Molnar @ 2009-03-02 9:07 UTC (permalink / raw)
To: Tejun Heo
Cc: x86, Johannes Weiner, Linux Kernel, Thomas Gleixner,
Rusty Russell, H. Peter Anvin
* Tejun Heo <tj@kernel.org> wrote:
> Impact: remove compile warning
>
> Mark local variable map_end in pcpu_populate_chunk() with
> uninitialized_var(). The variable is always used in tandem with
> map_start and guaranteed to be initialized before use but gcc doesn't
> understand that.
>
> Signed-off-by: Tejun Heo <tj@kernel.org>
> Reported-by: Ingo Molnar <mingo@elte.hu>
> ---
> This the first of three misc fix patches for #tj-percpu. Patches are
> also available in the tj-percpu git tree.
>
> git://git.kernel.org/pub/scm/linux/kernel/git/tj/misc.git tj-percpu
Pulled, thanks Tejun.
Ingo
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2009-03-02 9:08 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-03-01 7:13 [PATCH tj-percpu 1/3] percpu: kill compile warning in pcpu_populate_chunk() Tejun Heo
2009-03-01 7:13 ` [PATCH tj-percpu 2/3] alpha: fix typo in recent early vmalloc change Tejun Heo
2009-03-01 7:14 ` [PATCH tj-percpu 3/3] bootmem, x86: further fixes for arch-specific bootmem wrapping Tejun Heo
2009-03-02 9:07 ` [PATCH tj-percpu 1/3] percpu: kill compile warning in pcpu_populate_chunk() Ingo Molnar
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox