57 lines
1.4 KiB
C
57 lines
1.4 KiB
C
|
#include <linux/fs.h>
|
||
|
#include <linux/proc_fs.h>
|
||
|
#include <linux/seq_file.h>
|
||
|
|
||
|
ATOMIC_NOTIFIER_HEAD(show_mem_extra_notifier);
|
||
|
|
||
|
/**
|
||
|
* Call show_mem notifiers to print out extra memory information
|
||
|
* @s: seq_file into which print log out, if Null print to kernel log buffer
|
||
|
*/
|
||
|
static void __show_mem_extra_call_notifiers(struct seq_file *s)
|
||
|
{
|
||
|
atomic_notifier_call_chain(&show_mem_extra_notifier, 0, s);
|
||
|
if (s == NULL)
|
||
|
printk("\n");
|
||
|
}
|
||
|
|
||
|
int show_mem_extra_notifier_register(struct notifier_block *nb)
|
||
|
{
|
||
|
return atomic_notifier_chain_register(&show_mem_extra_notifier, nb);
|
||
|
}
|
||
|
|
||
|
int show_mem_extra_notifier_unregister(struct notifier_block *nb)
|
||
|
{
|
||
|
return atomic_notifier_chain_unregister(&show_mem_extra_notifier, nb);
|
||
|
}
|
||
|
|
||
|
void show_mem_extra_call_notifiers(void)
|
||
|
{
|
||
|
__show_mem_extra_call_notifiers(NULL);
|
||
|
}
|
||
|
|
||
|
static int meminfo_extra_proc_show(struct seq_file *m, void *v)
|
||
|
{
|
||
|
__show_mem_extra_call_notifiers(m);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static int meminfo_extra_proc_open(struct inode *inode, struct file *file)
|
||
|
{
|
||
|
return single_open(file, meminfo_extra_proc_show, NULL);
|
||
|
}
|
||
|
|
||
|
static const struct file_operations meminfo_extra_proc_fops = {
|
||
|
.open = meminfo_extra_proc_open,
|
||
|
.read = seq_read,
|
||
|
.llseek = seq_lseek,
|
||
|
.release = single_release,
|
||
|
};
|
||
|
|
||
|
static int __init proc_meminfo_extra_init(void)
|
||
|
{
|
||
|
proc_create("meminfo_extra", 0444, NULL, &meminfo_extra_proc_fops);
|
||
|
return 0;
|
||
|
}
|
||
|
fs_initcall(proc_meminfo_extra_init);
|