Commit b2b755b5 authored by David Rientjes's avatar David Rientjes Committed by Linus Torvalds

lib, arch: add filter argument to show_mem and fix private implementations

Commit ddd588b5 ("oom: suppress nodes that are not allowed from
meminfo on oom kill") moved lib/show_mem.o out of lib/lib.a, which
resulted in build warnings on all architectures that implement their own
versions of show_mem():

	lib/lib.a(show_mem.o): In function `show_mem':
	show_mem.c:(.text+0x1f4): multiple definition of `show_mem'
	arch/sparc/mm/built-in.o:(.text+0xd70): first defined here

The fix is to remove __show_mem() and add its argument to show_mem() in
all implementations to prevent this breakage.

Architectures that implement their own show_mem() actually don't do
anything with the argument yet, but they could be made to filter nodes
that aren't allowed in the current context in the future just like the
generic implementation.
Reported-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
Reported-by: default avatarJames Bottomley <James.Bottomley@hansenpartnership.com>
Suggested-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarDavid Rientjes <rientjes@google.com>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent e285c174
...@@ -78,7 +78,7 @@ __tagtable(ATAG_INITRD2, parse_tag_initrd2); ...@@ -78,7 +78,7 @@ __tagtable(ATAG_INITRD2, parse_tag_initrd2);
*/ */
struct meminfo meminfo; struct meminfo meminfo;
void show_mem(void) void show_mem(unsigned int filter)
{ {
int free = 0, total = 0, reserved = 0; int free = 0, total = 0, reserved = 0;
int shared = 0, cached = 0, slab = 0, i; int shared = 0, cached = 0, slab = 0, i;
......
...@@ -36,7 +36,7 @@ static unsigned long max_gap; ...@@ -36,7 +36,7 @@ static unsigned long max_gap;
* Shows a simple page count of reserved and used pages in the system. * Shows a simple page count of reserved and used pages in the system.
* For discontig machines, it does this on a per-pgdat basis. * For discontig machines, it does this on a per-pgdat basis.
*/ */
void show_mem(void) void show_mem(unsigned int filter)
{ {
int i, total_reserved = 0; int i, total_reserved = 0;
int total_shared = 0, total_cached = 0; int total_shared = 0, total_cached = 0;
......
...@@ -614,7 +614,7 @@ void __cpuinit *per_cpu_init(void) ...@@ -614,7 +614,7 @@ void __cpuinit *per_cpu_init(void)
* Shows a simple page count of reserved and used pages in the system. * Shows a simple page count of reserved and used pages in the system.
* For discontig machines, it does this on a per-pgdat basis. * For discontig machines, it does this on a per-pgdat basis.
*/ */
void show_mem(void) void show_mem(unsigned int filter)
{ {
int i, total_reserved = 0; int i, total_reserved = 0;
int total_shared = 0, total_cached = 0; int total_shared = 0, total_cached = 0;
......
...@@ -544,7 +544,7 @@ void __init mem_init(void) ...@@ -544,7 +544,7 @@ void __init mem_init(void)
unsigned long *empty_zero_page __read_mostly; unsigned long *empty_zero_page __read_mostly;
EXPORT_SYMBOL(empty_zero_page); EXPORT_SYMBOL(empty_zero_page);
void show_mem(void) void show_mem(unsigned int filter)
{ {
int i,free = 0,total = 0,reserved = 0; int i,free = 0,total = 0,reserved = 0;
int shared = 0, cached = 0; int shared = 0, cached = 0;
......
...@@ -821,7 +821,7 @@ cmds(struct pt_regs *excp) ...@@ -821,7 +821,7 @@ cmds(struct pt_regs *excp)
memzcan(); memzcan();
break; break;
case 'i': case 'i':
show_mem(); show_mem(0);
break; break;
default: default:
termch = cmd; termch = cmd;
......
...@@ -75,7 +75,7 @@ void __init kmap_init(void) ...@@ -75,7 +75,7 @@ void __init kmap_init(void)
kmap_prot = __pgprot(SRMMU_ET_PTE | SRMMU_PRIV | SRMMU_CACHE); kmap_prot = __pgprot(SRMMU_ET_PTE | SRMMU_PRIV | SRMMU_CACHE);
} }
void show_mem(void) void show_mem(unsigned int filter)
{ {
printk("Mem-info:\n"); printk("Mem-info:\n");
show_free_areas(); show_free_areas();
......
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
* The normal show_free_areas() is too verbose on Tile, with dozens * The normal show_free_areas() is too verbose on Tile, with dozens
* of processors and often four NUMA zones each with high and lowmem. * of processors and often four NUMA zones each with high and lowmem.
*/ */
void show_mem(void) void show_mem(unsigned int filter)
{ {
struct zone *zone; struct zone *zone;
......
...@@ -55,7 +55,7 @@ early_param("initrd", early_initrd); ...@@ -55,7 +55,7 @@ early_param("initrd", early_initrd);
*/ */
struct meminfo meminfo; struct meminfo meminfo;
void show_mem(void) void show_mem(unsigned int filter)
{ {
int free = 0, total = 0, reserved = 0; int free = 0, total = 0, reserved = 0;
int shared = 0, cached = 0, slab = 0, i; int shared = 0, cached = 0, slab = 0, i;
......
...@@ -306,7 +306,7 @@ static struct sysrq_key_op sysrq_ftrace_dump_op = { ...@@ -306,7 +306,7 @@ static struct sysrq_key_op sysrq_ftrace_dump_op = {
static void sysrq_handle_showmem(int key) static void sysrq_handle_showmem(int key)
{ {
show_mem(); show_mem(0);
} }
static struct sysrq_key_op sysrq_showmem_op = { static struct sysrq_key_op sysrq_showmem_op = {
.handler = sysrq_handle_showmem, .handler = sysrq_handle_showmem,
......
...@@ -600,7 +600,7 @@ static void fn_scroll_back(struct vc_data *vc) ...@@ -600,7 +600,7 @@ static void fn_scroll_back(struct vc_data *vc)
static void fn_show_mem(struct vc_data *vc) static void fn_show_mem(struct vc_data *vc)
{ {
show_mem(); show_mem(0);
} }
static void fn_show_state(struct vc_data *vc) static void fn_show_state(struct vc_data *vc)
......
...@@ -861,7 +861,7 @@ extern void pagefault_out_of_memory(void); ...@@ -861,7 +861,7 @@ extern void pagefault_out_of_memory(void);
#define offset_in_page(p) ((unsigned long)(p) & ~PAGE_MASK) #define offset_in_page(p) ((unsigned long)(p) & ~PAGE_MASK)
/* /*
* Flags passed to __show_mem() and __show_free_areas() to suppress output in * Flags passed to show_mem() and __show_free_areas() to suppress output in
* various contexts. * various contexts.
*/ */
#define SHOW_MEM_FILTER_NODES (0x0001u) /* filter disallowed nodes */ #define SHOW_MEM_FILTER_NODES (0x0001u) /* filter disallowed nodes */
...@@ -1360,8 +1360,7 @@ extern void setup_per_zone_wmarks(void); ...@@ -1360,8 +1360,7 @@ extern void setup_per_zone_wmarks(void);
extern void calculate_zone_inactive_ratio(struct zone *zone); extern void calculate_zone_inactive_ratio(struct zone *zone);
extern void mem_init(void); extern void mem_init(void);
extern void __init mmap_init(void); extern void __init mmap_init(void);
extern void show_mem(void); extern void show_mem(unsigned int flags);
extern void __show_mem(unsigned int flags);
extern void si_meminfo(struct sysinfo * val); extern void si_meminfo(struct sysinfo * val);
extern void si_meminfo_node(struct sysinfo *val, int nid); extern void si_meminfo_node(struct sysinfo *val, int nid);
extern int after_bootmem; extern int after_bootmem;
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
#include <linux/nmi.h> #include <linux/nmi.h>
#include <linux/quicklist.h> #include <linux/quicklist.h>
void __show_mem(unsigned int filter) void show_mem(unsigned int filter)
{ {
pg_data_t *pgdat; pg_data_t *pgdat;
unsigned long total = 0, reserved = 0, shared = 0, unsigned long total = 0, reserved = 0, shared = 0,
...@@ -61,8 +61,3 @@ void __show_mem(unsigned int filter) ...@@ -61,8 +61,3 @@ void __show_mem(unsigned int filter)
quicklist_total_size()); quicklist_total_size());
#endif #endif
} }
void show_mem(void)
{
__show_mem(0);
}
...@@ -406,7 +406,7 @@ static void dump_header(struct task_struct *p, gfp_t gfp_mask, int order, ...@@ -406,7 +406,7 @@ static void dump_header(struct task_struct *p, gfp_t gfp_mask, int order,
task_unlock(current); task_unlock(current);
dump_stack(); dump_stack();
mem_cgroup_print_oom_info(mem, p); mem_cgroup_print_oom_info(mem, p);
__show_mem(SHOW_MEM_FILTER_NODES); show_mem(SHOW_MEM_FILTER_NODES);
if (sysctl_oom_dump_tasks) if (sysctl_oom_dump_tasks)
dump_tasks(mem, nodemask); dump_tasks(mem, nodemask);
} }
......
...@@ -2195,7 +2195,7 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order, ...@@ -2195,7 +2195,7 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order,
current->comm, order, gfp_mask); current->comm, order, gfp_mask);
dump_stack(); dump_stack();
if (!should_suppress_show_mem()) if (!should_suppress_show_mem())
__show_mem(filter); show_mem(filter);
} }
return page; return page;
got_pg: got_pg:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment