Skip to content

Commit

Permalink
mm: Add notifier framework for showing memory
Browse files Browse the repository at this point in the history
There are many drivers in the kernel which can hold on
to lots of memory. It can be useful to dump out all those
drivers at key points in the kernel. Introduct a notifier
framework for dumping this information. When the notifiers
are called, drivers can dump out the state of any memory
they may be using.

Change-Id: Ifb2946964bf5d072552dd56d8d6dfdd794af6d84
Signed-off-by: Laura Abbott <[email protected]>
  • Loading branch information
labbott authored and invisiblek committed Nov 4, 2015
1 parent 21b9c18 commit 821701a
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 1 deletion.
20 changes: 20 additions & 0 deletions include/linux/show_mem_notifier.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/*
* Copyright (c) 2014, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
* only version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/

#include <linux/notifier.h>

int show_mem_notifier_register(struct notifier_block *nb);

int show_mem_notifier_unregister(struct notifier_block *nb);

void show_mem_call_notifiers(void);
2 changes: 1 addition & 1 deletion mm/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ obj-y := filemap.o mempool.o oom_kill.o fadvise.o \
prio_tree.o util.o mmzone.o vmstat.o backing-dev.o \
page_isolation.o mm_init.o mmu_context.o percpu.o \
compaction.o $(mmu-y) \
vmpressure.o
showmem.o vmpressure.o

obj-y += init-mm.o

Expand Down
55 changes: 55 additions & 0 deletions mm/showmem.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/*
* Copyright (c) 2014, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
* only version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/

#include <linux/kernel.h>
#include <linux/notifier.h>
#include <linux/debugfs.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/module.h>

BLOCKING_NOTIFIER_HEAD(show_mem_notifier);

int show_mem_notifier_register(struct notifier_block *nb)
{
return blocking_notifier_chain_register(&show_mem_notifier, nb);
}

int show_mem_notifier_unregister(struct notifier_block *nb)
{
return blocking_notifier_chain_unregister(&show_mem_notifier, nb);
}

void show_mem_call_notifiers(void)
{
blocking_notifier_call_chain(&show_mem_notifier, 0, NULL);
}

static int show_mem_notifier_get(void *dat, u64 *val)
{
show_mem_call_notifiers();
*val = 0;
return 0;
}

DEFINE_SIMPLE_ATTRIBUTE(show_mem_notifier_debug_ops, show_mem_notifier_get,
NULL, "%llu\n");

int show_mem_notifier_debugfs_register(void)
{
debugfs_create_file("show_mem_notifier", 0664, NULL, NULL,
&show_mem_notifier_debug_ops);

return 0;
}
late_initcall(show_mem_notifier_debugfs_register);

0 comments on commit 821701a

Please sign in to comment.