diff options
author | Andrey Konovalov <andrey.konovalov@linaro.org> | 2015-06-01 15:59:07 +0300 |
---|---|---|
committer | Andrey Konovalov <andrey.konovalov@linaro.org> | 2015-06-01 15:59:07 +0300 |
commit | 9fd096364296791b3d1fc8827f2694d8eec54e21 (patch) | |
tree | 0dd6f7aa953fe0dfc502541fdbe8c79a7258ecef /mm/vmscan.c | |
parent | fb12e0df3039896778718ec0224f5f8c0ac604f9 (diff) | |
parent | fc0481efeede37c1ccdb2f16bfdc3fe4d9f4c815 (diff) |
Merge branch 'tracking-linaro-android-llct' into merge-linux-linaro-core-tracking
Diffstat (limited to 'mm/vmscan.c')
-rw-r--r-- | mm/vmscan.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/mm/vmscan.c b/mm/vmscan.c index 5e8eadd71bac..431848960884 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -45,7 +45,9 @@ #include <linux/sysctl.h> #include <linux/oom.h> #include <linux/prefetch.h> +#include <linux/debugfs.h> #include <linux/printk.h> +#include <linux/debugfs.h> #include <asm/tlbflush.h> #include <asm/div64.h> @@ -189,6 +191,39 @@ static unsigned long get_lru_size(struct lruvec *lruvec, enum lru_list lru) return zone_page_state(lruvec_zone(lruvec), NR_LRU_BASE + lru); } +struct dentry *debug_file; + +static int debug_shrinker_show(struct seq_file *s, void *unused) +{ + struct shrinker *shrinker; + struct shrink_control sc; + + sc.gfp_mask = -1; + sc.nr_to_scan = 0; + + down_read(&shrinker_rwsem); + list_for_each_entry(shrinker, &shrinker_list, list) { + int num_objs; + + num_objs = shrinker->count_objects(shrinker, &sc); + seq_printf(s, "%pf %d\n", shrinker->scan_objects, num_objs); + } + up_read(&shrinker_rwsem); + return 0; +} + +static int debug_shrinker_open(struct inode *inode, struct file *file) +{ + return single_open(file, debug_shrinker_show, inode->i_private); +} + +static const struct file_operations debug_shrinker_fops = { + .open = debug_shrinker_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release, +}; + /* * Add a shrinker callback to be called from the vm. */ @@ -218,6 +253,15 @@ int register_shrinker(struct shrinker *shrinker) } EXPORT_SYMBOL(register_shrinker); +static int __init add_shrinker_debug(void) +{ + debugfs_create_file("shrinker", 0644, NULL, NULL, + &debug_shrinker_fops); + return 0; +} + +late_initcall(add_shrinker_debug); + /* * Remove one */ |