diff options
author | Alexey Dobriyan <adobriyan@gmail.com> | 2008-10-15 15:50:22 -0400 |
---|---|---|
committer | Alexey Dobriyan <adobriyan@gmail.com> | 2008-10-23 05:52:40 -0400 |
commit | e1759c215bee5abbcb6cb066590ab20905154ed5 (patch) | |
tree | 14a43e259767082706dab112292ff92e13ce42a4 | |
parent | 9617760287eec9091d26e6967bd3e4194de18f97 (diff) |
proc: switch /proc/meminfo to seq_file
and move it to fs/proc/meminfo.c while I'm at it.
Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
-rw-r--r-- | arch/x86/mm/pageattr.c | 11 | ||||
-rw-r--r-- | fs/proc/Makefile | 1 | ||||
-rw-r--r-- | fs/proc/meminfo.c | 168 | ||||
-rw-r--r-- | fs/proc/proc_misc.c | 137 | ||||
-rw-r--r-- | include/asm-x86/pgtable.h | 3 | ||||
-rw-r--r-- | include/linux/hugetlb.h | 6 | ||||
-rw-r--r-- | mm/hugetlb.c | 5 |
7 files changed, 183 insertions, 148 deletions
diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c index 407d8784f669..f1dc1b75d166 100644 --- a/arch/x86/mm/pageattr.c +++ b/arch/x86/mm/pageattr.c | |||
@@ -65,23 +65,22 @@ static void split_page_count(int level) | |||
65 | direct_pages_count[level - 1] += PTRS_PER_PTE; | 65 | direct_pages_count[level - 1] += PTRS_PER_PTE; |
66 | } | 66 | } |
67 | 67 | ||
68 | int arch_report_meminfo(char *page) | 68 | void arch_report_meminfo(struct seq_file *m) |
69 | { | 69 | { |
70 | int n = sprintf(page, "DirectMap4k: %8lu kB\n", | 70 | seq_printf(m, "DirectMap4k: %8lu kB\n", |
71 | direct_pages_count[PG_LEVEL_4K] << 2); | 71 | direct_pages_count[PG_LEVEL_4K] << 2); |
72 | #if defined(CONFIG_X86_64) || defined(CONFIG_X86_PAE) | 72 | #if defined(CONFIG_X86_64) || defined(CONFIG_X86_PAE) |
73 | n += sprintf(page + n, "DirectMap2M: %8lu kB\n", | 73 | seq_printf(m, "DirectMap2M: %8lu kB\n", |
74 | direct_pages_count[PG_LEVEL_2M] << 11); | 74 | direct_pages_count[PG_LEVEL_2M] << 11); |
75 | #else | 75 | #else |
76 | n += sprintf(page + n, "DirectMap4M: %8lu kB\n", | 76 | seq_printf(m, "DirectMap4M: %8lu kB\n", |
77 | direct_pages_count[PG_LEVEL_2M] << 12); | 77 | direct_pages_count[PG_LEVEL_2M] << 12); |
78 | #endif | 78 | #endif |
79 | #ifdef CONFIG_X86_64 | 79 | #ifdef CONFIG_X86_64 |
80 | if (direct_gbpages) | 80 | if (direct_gbpages) |
81 | n += sprintf(page + n, "DirectMap1G: %8lu kB\n", | 81 | seq_printf(m, "DirectMap1G: %8lu kB\n", |
82 | direct_pages_count[PG_LEVEL_1G] << 20); | 82 | direct_pages_count[PG_LEVEL_1G] << 20); |
83 | #endif | 83 | #endif |
84 | return n; | ||
85 | } | 84 | } |
86 | #else | 85 | #else |
87 | static inline void split_page_count(int level) { } | 86 | static inline void split_page_count(int level) { } |
diff --git a/fs/proc/Makefile b/fs/proc/Makefile index 27efa14963b1..70607a03839d 100644 --- a/fs/proc/Makefile +++ b/fs/proc/Makefile | |||
@@ -10,6 +10,7 @@ proc-$(CONFIG_MMU) := mmu.o task_mmu.o | |||
10 | proc-y += inode.o root.o base.o generic.o array.o \ | 10 | proc-y += inode.o root.o base.o generic.o array.o \ |
11 | proc_tty.o proc_misc.o | 11 | proc_tty.o proc_misc.o |
12 | proc-y += loadavg.o | 12 | proc-y += loadavg.o |
13 | proc-y += meminfo.o | ||
13 | proc-y += uptime.o | 14 | proc-y += uptime.o |
14 | proc-$(CONFIG_PROC_SYSCTL) += proc_sysctl.o | 15 | proc-$(CONFIG_PROC_SYSCTL) += proc_sysctl.o |
15 | proc-$(CONFIG_NET) += proc_net.o | 16 | proc-$(CONFIG_NET) += proc_net.o |
diff --git a/fs/proc/meminfo.c b/fs/proc/meminfo.c new file mode 100644 index 000000000000..b1675c4e66da --- /dev/null +++ b/fs/proc/meminfo.c | |||
@@ -0,0 +1,168 @@ | |||
1 | #include <linux/fs.h> | ||
2 | #include <linux/hugetlb.h> | ||
3 | #include <linux/init.h> | ||
4 | #include <linux/kernel.h> | ||
5 | #include <linux/mm.h> | ||
6 | #include <linux/mman.h> | ||
7 | #include <linux/mmzone.h> | ||
8 | #include <linux/proc_fs.h> | ||
9 | #include <linux/quicklist.h> | ||
10 | #include <linux/seq_file.h> | ||
11 | #include <linux/swap.h> | ||
12 | #include <linux/vmstat.h> | ||
13 | #include <asm/atomic.h> | ||
14 | #include <asm/page.h> | ||
15 | #include <asm/pgtable.h> | ||
16 | #include "internal.h" | ||
17 | |||
18 | void __attribute__((weak)) arch_report_meminfo(struct seq_file *m) | ||
19 | { | ||
20 | } | ||
21 | |||
22 | static int meminfo_proc_show(struct seq_file *m, void *v) | ||
23 | { | ||
24 | struct sysinfo i; | ||
25 | unsigned long committed; | ||
26 | unsigned long allowed; | ||
27 | struct vmalloc_info vmi; | ||
28 | long cached; | ||
29 | unsigned long pages[NR_LRU_LISTS]; | ||
30 | int lru; | ||
31 | |||
32 | /* | ||
33 | * display in kilobytes. | ||
34 | */ | ||
35 | #define K(x) ((x) << (PAGE_SHIFT - 10)) | ||
36 | si_meminfo(&i); | ||
37 | si_swapinfo(&i); | ||
38 | committed = atomic_long_read(&vm_committed_space); | ||
39 | allowed = ((totalram_pages - hugetlb_total_pages()) | ||
40 | * sysctl_overcommit_ratio / 100) + total_swap_pages; | ||
41 | |||
42 | cached = global_page_state(NR_FILE_PAGES) - | ||
43 | total_swapcache_pages - i.bufferram; | ||
44 | if (cached < 0) | ||
45 | cached = 0; | ||
46 | |||
47 | get_vmalloc_info(&vmi); | ||
48 | |||
49 | for (lru = LRU_BASE; lru < NR_LRU_LISTS; lru++) | ||
50 | pages[lru] = global_page_state(NR_LRU_BASE + lru); | ||
51 | |||
52 | /* | ||
53 | * Tagged format, for easy grepping and expansion. | ||
54 | */ | ||
55 | seq_printf(m, | ||
56 | "MemTotal: %8lu kB\n" | ||
57 | "MemFree: %8lu kB\n" | ||
58 | "Buffers: %8lu kB\n" | ||
59 | "Cached: %8lu kB\n" | ||
60 | "SwapCached: %8lu kB\n" | ||
61 | "Active: %8lu kB\n" | ||
62 | "Inactive: %8lu kB\n" | ||
63 | "Active(anon): %8lu kB\n" | ||
64 | "Inactive(anon): %8lu kB\n" | ||
65 | "Active(file): %8lu kB\n" | ||
66 | "Inactive(file): %8lu kB\n" | ||
67 | #ifdef CONFIG_UNEVICTABLE_LRU | ||
68 | "Unevictable: %8lu kB\n" | ||
69 | "Mlocked: %8lu kB\n" | ||
70 | #endif | ||
71 | #ifdef CONFIG_HIGHMEM | ||
72 | "HighTotal: %8lu kB\n" | ||
73 | "HighFree: %8lu kB\n" | ||
74 | "LowTotal: %8lu kB\n" | ||
75 | "LowFree: %8lu kB\n" | ||
76 | #endif | ||
77 | "SwapTotal: %8lu kB\n" | ||
78 | "SwapFree: %8lu kB\n" | ||
79 | "Dirty: %8lu kB\n" | ||
80 | "Writeback: %8lu kB\n" | ||
81 | "AnonPages: %8lu kB\n" | ||
82 | "Mapped: %8lu kB\n" | ||
83 | "Slab: %8lu kB\n" | ||
84 | "SReclaimable: %8lu kB\n" | ||
85 | "SUnreclaim: %8lu kB\n" | ||
86 | "PageTables: %8lu kB\n" | ||
87 | #ifdef CONFIG_QUICKLIST | ||
88 | "Quicklists: %8lu kB\n" | ||
89 | #endif | ||
90 | "NFS_Unstable: %8lu kB\n" | ||
91 | "Bounce: %8lu kB\n" | ||
92 | "WritebackTmp: %8lu kB\n" | ||
93 | "CommitLimit: %8lu kB\n" | ||
94 | "Committed_AS: %8lu kB\n" | ||
95 | "VmallocTotal: %8lu kB\n" | ||
96 | "VmallocUsed: %8lu kB\n" | ||
97 | "VmallocChunk: %8lu kB\n", | ||
98 | K(i.totalram), | ||
99 | K(i.freeram), | ||
100 | K(i.bufferram), | ||
101 | K(cached), | ||
102 | K(total_swapcache_pages), | ||
103 | K(pages[LRU_ACTIVE_ANON] + pages[LRU_ACTIVE_FILE]), | ||
104 | K(pages[LRU_INACTIVE_ANON] + pages[LRU_INACTIVE_FILE]), | ||
105 | K(pages[LRU_ACTIVE_ANON]), | ||
106 | K(pages[LRU_INACTIVE_ANON]), | ||
107 | K(pages[LRU_ACTIVE_FILE]), | ||
108 | K(pages[LRU_INACTIVE_FILE]), | ||
109 | #ifdef CONFIG_UNEVICTABLE_LRU | ||
110 | K(pages[LRU_UNEVICTABLE]), | ||
111 | K(global_page_state(NR_MLOCK)), | ||
112 | #endif | ||
113 | #ifdef CONFIG_HIGHMEM | ||
114 | K(i.totalhigh), | ||
115 | K(i.freehigh), | ||
116 | K(i.totalram-i.totalhigh), | ||
117 | K(i.freeram-i.freehigh), | ||
118 | #endif | ||
119 | K(i.totalswap), | ||
120 | K(i.freeswap), | ||
121 | K(global_page_state(NR_FILE_DIRTY)), | ||
122 | K(global_page_state(NR_WRITEBACK)), | ||
123 | K(global_page_state(NR_ANON_PAGES)), | ||
124 | K(global_page_state(NR_FILE_MAPPED)), | ||
125 | K(global_page_state(NR_SLAB_RECLAIMABLE) + | ||
126 | global_page_state(NR_SLAB_UNRECLAIMABLE)), | ||
127 | K(global_page_state(NR_SLAB_RECLAIMABLE)), | ||
128 | K(global_page_state(NR_SLAB_UNRECLAIMABLE)), | ||
129 | K(global_page_state(NR_PAGETABLE)), | ||
130 | #ifdef CONFIG_QUICKLIST | ||
131 | K(quicklist_total_size()), | ||
132 | #endif | ||
133 | K(global_page_state(NR_UNSTABLE_NFS)), | ||
134 | K(global_page_state(NR_BOUNCE)), | ||
135 | K(global_page_state(NR_WRITEBACK_TEMP)), | ||
136 | K(allowed), | ||
137 | K(committed), | ||
138 | (unsigned long)VMALLOC_TOTAL >> 10, | ||
139 | vmi.used >> 10, | ||
140 | vmi.largest_chunk >> 10 | ||
141 | ); | ||
142 | |||
143 | hugetlb_report_meminfo(m); | ||
144 | |||
145 | arch_report_meminfo(m); | ||
146 | |||
147 | return 0; | ||
148 | #undef K | ||
149 | } | ||
150 | |||
151 | static int meminfo_proc_open(struct inode *inode, struct file *file) | ||
152 | { | ||
153 | return single_open(file, meminfo_proc_show, NULL); | ||
154 | } | ||
155 | |||
156 | static const struct file_operations meminfo_proc_fops = { | ||
157 | .open = meminfo_proc_open, | ||
158 | .read = seq_read, | ||
159 | .llseek = seq_lseek, | ||
160 | .release = single_release, | ||
161 | }; | ||
162 | |||
163 | static int __init proc_meminfo_init(void) | ||
164 | { | ||
165 | proc_create("meminfo", 0, NULL, &meminfo_proc_fops); | ||
166 | return 0; | ||
167 | } | ||
168 | module_init(proc_meminfo_init); | ||
diff --git a/fs/proc/proc_misc.c b/fs/proc/proc_misc.c index 484b6011bf0b..1aba51b0a0c4 100644 --- a/fs/proc/proc_misc.c +++ b/fs/proc/proc_misc.c | |||
@@ -78,142 +78,6 @@ static int proc_calc_metrics(char *page, char **start, off_t off, | |||
78 | return len; | 78 | return len; |
79 | } | 79 | } |
80 | 80 | ||
81 | int __attribute__((weak)) arch_report_meminfo(char *page) | ||
82 | { | ||
83 | return 0; | ||
84 | } | ||
85 | |||
86 | static int meminfo_read_proc(char *page, char **start, off_t off, | ||
87 | int count, int *eof, void *data) | ||
88 | { | ||
89 | struct sysinfo i; | ||
90 | int len; | ||
91 | unsigned long committed; | ||
92 | unsigned long allowed; | ||
93 | struct vmalloc_info vmi; | ||
94 | long cached; | ||
95 | unsigned long pages[NR_LRU_LISTS]; | ||
96 | int lru; | ||
97 | |||
98 | /* | ||
99 | * display in kilobytes. | ||
100 | */ | ||
101 | #define K(x) ((x) << (PAGE_SHIFT - 10)) | ||
102 | si_meminfo(&i); | ||
103 | si_swapinfo(&i); | ||
104 | committed = atomic_long_read(&vm_committed_space); | ||
105 | allowed = ((totalram_pages - hugetlb_total_pages()) | ||
106 | * sysctl_overcommit_ratio / 100) + total_swap_pages; | ||
107 | |||
108 | cached = global_page_state(NR_FILE_PAGES) - | ||
109 | total_swapcache_pages - i.bufferram; | ||
110 | if (cached < 0) | ||
111 | cached = 0; | ||
112 | |||
113 | get_vmalloc_info(&vmi); | ||
114 | |||
115 | for (lru = LRU_BASE; lru < NR_LRU_LISTS; lru++) | ||
116 | pages[lru] = global_page_state(NR_LRU_BASE + lru); | ||
117 | |||
118 | /* | ||
119 | * Tagged format, for easy grepping and expansion. | ||
120 | */ | ||
121 | len = sprintf(page, | ||
122 | "MemTotal: %8lu kB\n" | ||
123 | "MemFree: %8lu kB\n" | ||
124 | "Buffers: %8lu kB\n" | ||
125 | "Cached: %8lu kB\n" | ||
126 | "SwapCached: %8lu kB\n" | ||
127 | "Active: %8lu kB\n" | ||
128 | "Inactive: %8lu kB\n" | ||
129 | "Active(anon): %8lu kB\n" | ||
130 | "Inactive(anon): %8lu kB\n" | ||
131 | "Active(file): %8lu kB\n" | ||
132 | "Inactive(file): %8lu kB\n" | ||
133 | #ifdef CONFIG_UNEVICTABLE_LRU | ||
134 | "Unevictable: %8lu kB\n" | ||
135 | "Mlocked: %8lu kB\n" | ||
136 | #endif | ||
137 | #ifdef CONFIG_HIGHMEM | ||
138 | "HighTotal: %8lu kB\n" | ||
139 | "HighFree: %8lu kB\n" | ||
140 | "LowTotal: %8lu kB\n" | ||
141 | "LowFree: %8lu kB\n" | ||
142 | #endif | ||
143 | "SwapTotal: %8lu kB\n" | ||
144 | "SwapFree: %8lu kB\n" | ||
145 | "Dirty: %8lu kB\n" | ||
146 | "Writeback: %8lu kB\n" | ||
147 | "AnonPages: %8lu kB\n" | ||
148 | "Mapped: %8lu kB\n" | ||
149 | "Slab: %8lu kB\n" | ||
150 | "SReclaimable: %8lu kB\n" | ||
151 | "SUnreclaim: %8lu kB\n" | ||
152 | "PageTables: %8lu kB\n" | ||
153 | #ifdef CONFIG_QUICKLIST | ||
154 | "Quicklists: %8lu kB\n" | ||
155 | #endif | ||
156 | "NFS_Unstable: %8lu kB\n" | ||
157 | "Bounce: %8lu kB\n" | ||
158 | "WritebackTmp: %8lu kB\n" | ||
159 | "CommitLimit: %8lu kB\n" | ||
160 | "Committed_AS: %8lu kB\n" | ||
161 | "VmallocTotal: %8lu kB\n" | ||
162 | "VmallocUsed: %8lu kB\n" | ||
163 | "VmallocChunk: %8lu kB\n", | ||
164 | K(i.totalram), | ||
165 | K(i.freeram), | ||
166 | K(i.bufferram), | ||
167 | K(cached), | ||
168 | K(total_swapcache_pages), | ||
169 | K(pages[LRU_ACTIVE_ANON] + pages[LRU_ACTIVE_FILE]), | ||
170 | K(pages[LRU_INACTIVE_ANON] + pages[LRU_INACTIVE_FILE]), | ||
171 | K(pages[LRU_ACTIVE_ANON]), | ||
172 | K(pages[LRU_INACTIVE_ANON]), | ||
173 | K(pages[LRU_ACTIVE_FILE]), | ||
174 | K(pages[LRU_INACTIVE_FILE]), | ||
175 | #ifdef CONFIG_UNEVICTABLE_LRU | ||
176 | K(pages[LRU_UNEVICTABLE]), | ||
177 | K(global_page_state(NR_MLOCK)), | ||
178 | #endif | ||
179 | #ifdef CONFIG_HIGHMEM | ||
180 | K(i.totalhigh), | ||
181 | K(i.freehigh), | ||
182 | K(i.totalram-i.totalhigh), | ||
183 | K(i.freeram-i.freehigh), | ||
184 | #endif | ||
185 | K(i.totalswap), | ||
186 | K(i.freeswap), | ||
187 | K(global_page_state(NR_FILE_DIRTY)), | ||
188 | K(global_page_state(NR_WRITEBACK)), | ||
189 | K(global_page_state(NR_ANON_PAGES)), | ||
190 | K(global_page_state(NR_FILE_MAPPED)), | ||
191 | K(global_page_state(NR_SLAB_RECLAIMABLE) + | ||
192 | global_page_state(NR_SLAB_UNRECLAIMABLE)), | ||
193 | K(global_page_state(NR_SLAB_RECLAIMABLE)), | ||
194 | K(global_page_state(NR_SLAB_UNRECLAIMABLE)), | ||
195 | K(global_page_state(NR_PAGETABLE)), | ||
196 | #ifdef CONFIG_QUICKLIST | ||
197 | K(quicklist_total_size()), | ||
198 | #endif | ||
199 | K(global_page_state(NR_UNSTABLE_NFS)), | ||
200 | K(global_page_state(NR_BOUNCE)), | ||
201 | K(global_page_state(NR_WRITEBACK_TEMP)), | ||
202 | K(allowed), | ||
203 | K(committed), | ||
204 | (unsigned long)VMALLOC_TOTAL >> 10, | ||
205 | vmi.used >> 10, | ||
206 | vmi.largest_chunk >> 10 | ||
207 | ); | ||
208 | |||
209 | len += hugetlb_report_meminfo(page + len); | ||
210 | |||
211 | len += arch_report_meminfo(page + len); | ||
212 | |||
213 | return proc_calc_metrics(page, start, off, count, eof, len); | ||
214 | #undef K | ||
215 | } | ||
216 | |||
217 | static int fragmentation_open(struct inode *inode, struct file *file) | 81 | static int fragmentation_open(struct inode *inode, struct file *file) |
218 | { | 82 | { |
219 | (void)inode; | 83 | (void)inode; |
@@ -816,7 +680,6 @@ void __init proc_misc_init(void) | |||
816 | char *name; | 680 | char *name; |
817 | int (*read_proc)(char*,char**,off_t,int,int*,void*); | 681 | int (*read_proc)(char*,char**,off_t,int,int*,void*); |
818 | } *p, simple_ones[] = { | 682 | } *p, simple_ones[] = { |
819 | {"meminfo", meminfo_read_proc}, | ||
820 | {"version", version_read_proc}, | 683 | {"version", version_read_proc}, |
821 | #ifdef CONFIG_PROC_HARDWARE | 684 | #ifdef CONFIG_PROC_HARDWARE |
822 | {"hardware", hardware_read_proc}, | 685 | {"hardware", hardware_read_proc}, |
diff --git a/include/asm-x86/pgtable.h b/include/asm-x86/pgtable.h index 88a53b1a17f0..a3dda6d615be 100644 --- a/include/asm-x86/pgtable.h +++ b/include/asm-x86/pgtable.h | |||
@@ -348,7 +348,8 @@ static inline void native_pagetable_setup_start(pgd_t *base) {} | |||
348 | static inline void native_pagetable_setup_done(pgd_t *base) {} | 348 | static inline void native_pagetable_setup_done(pgd_t *base) {} |
349 | #endif | 349 | #endif |
350 | 350 | ||
351 | extern int arch_report_meminfo(char *page); | 351 | struct seq_file; |
352 | extern void arch_report_meminfo(struct seq_file *m); | ||
352 | 353 | ||
353 | #ifdef CONFIG_PARAVIRT | 354 | #ifdef CONFIG_PARAVIRT |
354 | #include <asm/paravirt.h> | 355 | #include <asm/paravirt.h> |
diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index 32e0ef0f6e1f..e1c8afc002c0 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h | |||
@@ -27,7 +27,7 @@ void unmap_hugepage_range(struct vm_area_struct *, | |||
27 | void __unmap_hugepage_range(struct vm_area_struct *, | 27 | void __unmap_hugepage_range(struct vm_area_struct *, |
28 | unsigned long, unsigned long, struct page *); | 28 | unsigned long, unsigned long, struct page *); |
29 | int hugetlb_prefault(struct address_space *, struct vm_area_struct *); | 29 | int hugetlb_prefault(struct address_space *, struct vm_area_struct *); |
30 | int hugetlb_report_meminfo(char *); | 30 | void hugetlb_report_meminfo(struct seq_file *); |
31 | int hugetlb_report_node_meminfo(int, char *); | 31 | int hugetlb_report_node_meminfo(int, char *); |
32 | unsigned long hugetlb_total_pages(void); | 32 | unsigned long hugetlb_total_pages(void); |
33 | int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma, | 33 | int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma, |
@@ -79,7 +79,9 @@ static inline unsigned long hugetlb_total_pages(void) | |||
79 | #define copy_hugetlb_page_range(src, dst, vma) ({ BUG(); 0; }) | 79 | #define copy_hugetlb_page_range(src, dst, vma) ({ BUG(); 0; }) |
80 | #define hugetlb_prefault(mapping, vma) ({ BUG(); 0; }) | 80 | #define hugetlb_prefault(mapping, vma) ({ BUG(); 0; }) |
81 | #define unmap_hugepage_range(vma, start, end, page) BUG() | 81 | #define unmap_hugepage_range(vma, start, end, page) BUG() |
82 | #define hugetlb_report_meminfo(buf) 0 | 82 | static inline void hugetlb_report_meminfo(struct seq_file *m) |
83 | { | ||
84 | } | ||
83 | #define hugetlb_report_node_meminfo(n, buf) 0 | 85 | #define hugetlb_report_node_meminfo(n, buf) 0 |
84 | #define follow_huge_pmd(mm, addr, pmd, write) NULL | 86 | #define follow_huge_pmd(mm, addr, pmd, write) NULL |
85 | #define follow_huge_pud(mm, addr, pud, write) NULL | 87 | #define follow_huge_pud(mm, addr, pud, write) NULL |
diff --git a/mm/hugetlb.c b/mm/hugetlb.c index ce8cbb29860b..421aee99b84a 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c | |||
@@ -7,6 +7,7 @@ | |||
7 | #include <linux/init.h> | 7 | #include <linux/init.h> |
8 | #include <linux/module.h> | 8 | #include <linux/module.h> |
9 | #include <linux/mm.h> | 9 | #include <linux/mm.h> |
10 | #include <linux/seq_file.h> | ||
10 | #include <linux/sysctl.h> | 11 | #include <linux/sysctl.h> |
11 | #include <linux/highmem.h> | 12 | #include <linux/highmem.h> |
12 | #include <linux/mmu_notifier.h> | 13 | #include <linux/mmu_notifier.h> |
@@ -1455,10 +1456,10 @@ int hugetlb_overcommit_handler(struct ctl_table *table, int write, | |||
1455 | 1456 | ||
1456 | #endif /* CONFIG_SYSCTL */ | 1457 | #endif /* CONFIG_SYSCTL */ |
1457 | 1458 | ||
1458 | int hugetlb_report_meminfo(char *buf) | 1459 | void hugetlb_report_meminfo(struct seq_file *m) |
1459 | { | 1460 | { |
1460 | struct hstate *h = &default_hstate; | 1461 | struct hstate *h = &default_hstate; |
1461 | return sprintf(buf, | 1462 | seq_printf(m, |
1462 | "HugePages_Total: %5lu\n" | 1463 | "HugePages_Total: %5lu\n" |
1463 | "HugePages_Free: %5lu\n" | 1464 | "HugePages_Free: %5lu\n" |
1464 | "HugePages_Rsvd: %5lu\n" | 1465 | "HugePages_Rsvd: %5lu\n" |