diff options
Diffstat (limited to 'mm/vmstat.c')
-rw-r--r-- | mm/vmstat.c | 69 |
1 files changed, 62 insertions, 7 deletions
diff --git a/mm/vmstat.c b/mm/vmstat.c index 9343227c5c60..c3ccfda23adc 100644 --- a/mm/vmstat.c +++ b/mm/vmstat.c | |||
@@ -8,7 +8,7 @@ | |||
8 | * Copyright (C) 2006 Silicon Graphics, Inc., | 8 | * Copyright (C) 2006 Silicon Graphics, Inc., |
9 | * Christoph Lameter <christoph@lameter.com> | 9 | * Christoph Lameter <christoph@lameter.com> |
10 | */ | 10 | */ |
11 | 11 | #include <linux/fs.h> | |
12 | #include <linux/mm.h> | 12 | #include <linux/mm.h> |
13 | #include <linux/err.h> | 13 | #include <linux/err.h> |
14 | #include <linux/module.h> | 14 | #include <linux/module.h> |
@@ -384,7 +384,7 @@ void zone_statistics(struct zone *preferred_zone, struct zone *z) | |||
384 | #endif | 384 | #endif |
385 | 385 | ||
386 | #ifdef CONFIG_PROC_FS | 386 | #ifdef CONFIG_PROC_FS |
387 | 387 | #include <linux/proc_fs.h> | |
388 | #include <linux/seq_file.h> | 388 | #include <linux/seq_file.h> |
389 | 389 | ||
390 | static char * const migratetype_names[MIGRATE_TYPES] = { | 390 | static char * const migratetype_names[MIGRATE_TYPES] = { |
@@ -581,20 +581,44 @@ static int pagetypeinfo_show(struct seq_file *m, void *arg) | |||
581 | return 0; | 581 | return 0; |
582 | } | 582 | } |
583 | 583 | ||
584 | const struct seq_operations fragmentation_op = { | 584 | static const struct seq_operations fragmentation_op = { |
585 | .start = frag_start, | 585 | .start = frag_start, |
586 | .next = frag_next, | 586 | .next = frag_next, |
587 | .stop = frag_stop, | 587 | .stop = frag_stop, |
588 | .show = frag_show, | 588 | .show = frag_show, |
589 | }; | 589 | }; |
590 | 590 | ||
591 | const struct seq_operations pagetypeinfo_op = { | 591 | static int fragmentation_open(struct inode *inode, struct file *file) |
592 | { | ||
593 | return seq_open(file, &fragmentation_op); | ||
594 | } | ||
595 | |||
596 | static const struct file_operations fragmentation_file_operations = { | ||
597 | .open = fragmentation_open, | ||
598 | .read = seq_read, | ||
599 | .llseek = seq_lseek, | ||
600 | .release = seq_release, | ||
601 | }; | ||
602 | |||
603 | static const struct seq_operations pagetypeinfo_op = { | ||
592 | .start = frag_start, | 604 | .start = frag_start, |
593 | .next = frag_next, | 605 | .next = frag_next, |
594 | .stop = frag_stop, | 606 | .stop = frag_stop, |
595 | .show = pagetypeinfo_show, | 607 | .show = pagetypeinfo_show, |
596 | }; | 608 | }; |
597 | 609 | ||
610 | static int pagetypeinfo_open(struct inode *inode, struct file *file) | ||
611 | { | ||
612 | return seq_open(file, &pagetypeinfo_op); | ||
613 | } | ||
614 | |||
615 | static const struct file_operations pagetypeinfo_file_ops = { | ||
616 | .open = pagetypeinfo_open, | ||
617 | .read = seq_read, | ||
618 | .llseek = seq_lseek, | ||
619 | .release = seq_release, | ||
620 | }; | ||
621 | |||
598 | #ifdef CONFIG_ZONE_DMA | 622 | #ifdef CONFIG_ZONE_DMA |
599 | #define TEXT_FOR_DMA(xx) xx "_dma", | 623 | #define TEXT_FOR_DMA(xx) xx "_dma", |
600 | #else | 624 | #else |
@@ -771,7 +795,7 @@ static int zoneinfo_show(struct seq_file *m, void *arg) | |||
771 | return 0; | 795 | return 0; |
772 | } | 796 | } |
773 | 797 | ||
774 | const struct seq_operations zoneinfo_op = { | 798 | static const struct seq_operations zoneinfo_op = { |
775 | .start = frag_start, /* iterate over all zones. The same as in | 799 | .start = frag_start, /* iterate over all zones. The same as in |
776 | * fragmentation. */ | 800 | * fragmentation. */ |
777 | .next = frag_next, | 801 | .next = frag_next, |
@@ -779,6 +803,18 @@ const struct seq_operations zoneinfo_op = { | |||
779 | .show = zoneinfo_show, | 803 | .show = zoneinfo_show, |
780 | }; | 804 | }; |
781 | 805 | ||
806 | static int zoneinfo_open(struct inode *inode, struct file *file) | ||
807 | { | ||
808 | return seq_open(file, &zoneinfo_op); | ||
809 | } | ||
810 | |||
811 | static const struct file_operations proc_zoneinfo_file_operations = { | ||
812 | .open = zoneinfo_open, | ||
813 | .read = seq_read, | ||
814 | .llseek = seq_lseek, | ||
815 | .release = seq_release, | ||
816 | }; | ||
817 | |||
782 | static void *vmstat_start(struct seq_file *m, loff_t *pos) | 818 | static void *vmstat_start(struct seq_file *m, loff_t *pos) |
783 | { | 819 | { |
784 | unsigned long *v; | 820 | unsigned long *v; |
@@ -834,13 +870,24 @@ static void vmstat_stop(struct seq_file *m, void *arg) | |||
834 | m->private = NULL; | 870 | m->private = NULL; |
835 | } | 871 | } |
836 | 872 | ||
837 | const struct seq_operations vmstat_op = { | 873 | static const struct seq_operations vmstat_op = { |
838 | .start = vmstat_start, | 874 | .start = vmstat_start, |
839 | .next = vmstat_next, | 875 | .next = vmstat_next, |
840 | .stop = vmstat_stop, | 876 | .stop = vmstat_stop, |
841 | .show = vmstat_show, | 877 | .show = vmstat_show, |
842 | }; | 878 | }; |
843 | 879 | ||
880 | static int vmstat_open(struct inode *inode, struct file *file) | ||
881 | { | ||
882 | return seq_open(file, &vmstat_op); | ||
883 | } | ||
884 | |||
885 | static const struct file_operations proc_vmstat_file_operations = { | ||
886 | .open = vmstat_open, | ||
887 | .read = seq_read, | ||
888 | .llseek = seq_lseek, | ||
889 | .release = seq_release, | ||
890 | }; | ||
844 | #endif /* CONFIG_PROC_FS */ | 891 | #endif /* CONFIG_PROC_FS */ |
845 | 892 | ||
846 | #ifdef CONFIG_SMP | 893 | #ifdef CONFIG_SMP |
@@ -898,9 +945,11 @@ static int __cpuinit vmstat_cpuup_callback(struct notifier_block *nfb, | |||
898 | 945 | ||
899 | static struct notifier_block __cpuinitdata vmstat_notifier = | 946 | static struct notifier_block __cpuinitdata vmstat_notifier = |
900 | { &vmstat_cpuup_callback, NULL, 0 }; | 947 | { &vmstat_cpuup_callback, NULL, 0 }; |
948 | #endif | ||
901 | 949 | ||
902 | static int __init setup_vmstat(void) | 950 | static int __init setup_vmstat(void) |
903 | { | 951 | { |
952 | #ifdef CONFIG_SMP | ||
904 | int cpu; | 953 | int cpu; |
905 | 954 | ||
906 | refresh_zone_stat_thresholds(); | 955 | refresh_zone_stat_thresholds(); |
@@ -908,7 +957,13 @@ static int __init setup_vmstat(void) | |||
908 | 957 | ||
909 | for_each_online_cpu(cpu) | 958 | for_each_online_cpu(cpu) |
910 | start_cpu_timer(cpu); | 959 | start_cpu_timer(cpu); |
960 | #endif | ||
961 | #ifdef CONFIG_PROC_FS | ||
962 | proc_create("buddyinfo", S_IRUGO, NULL, &fragmentation_file_operations); | ||
963 | proc_create("pagetypeinfo", S_IRUGO, NULL, &pagetypeinfo_file_ops); | ||
964 | proc_create("vmstat", S_IRUGO, NULL, &proc_vmstat_file_operations); | ||
965 | proc_create("zoneinfo", S_IRUGO, NULL, &proc_zoneinfo_file_operations); | ||
966 | #endif | ||
911 | return 0; | 967 | return 0; |
912 | } | 968 | } |
913 | module_init(setup_vmstat) | 969 | module_init(setup_vmstat) |
914 | #endif | ||