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>
This commit is contained in:
Родитель
9617760287
Коммит
e1759c215b
|
@ -65,23 +65,22 @@ static void split_page_count(int level)
|
||||||
direct_pages_count[level - 1] += PTRS_PER_PTE;
|
direct_pages_count[level - 1] += PTRS_PER_PTE;
|
||||||
}
|
}
|
||||||
|
|
||||||
int arch_report_meminfo(char *page)
|
void arch_report_meminfo(struct seq_file *m)
|
||||||
{
|
{
|
||||||
int n = sprintf(page, "DirectMap4k: %8lu kB\n",
|
seq_printf(m, "DirectMap4k: %8lu kB\n",
|
||||||
direct_pages_count[PG_LEVEL_4K] << 2);
|
direct_pages_count[PG_LEVEL_4K] << 2);
|
||||||
#if defined(CONFIG_X86_64) || defined(CONFIG_X86_PAE)
|
#if defined(CONFIG_X86_64) || defined(CONFIG_X86_PAE)
|
||||||
n += sprintf(page + n, "DirectMap2M: %8lu kB\n",
|
seq_printf(m, "DirectMap2M: %8lu kB\n",
|
||||||
direct_pages_count[PG_LEVEL_2M] << 11);
|
direct_pages_count[PG_LEVEL_2M] << 11);
|
||||||
#else
|
#else
|
||||||
n += sprintf(page + n, "DirectMap4M: %8lu kB\n",
|
seq_printf(m, "DirectMap4M: %8lu kB\n",
|
||||||
direct_pages_count[PG_LEVEL_2M] << 12);
|
direct_pages_count[PG_LEVEL_2M] << 12);
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_X86_64
|
#ifdef CONFIG_X86_64
|
||||||
if (direct_gbpages)
|
if (direct_gbpages)
|
||||||
n += sprintf(page + n, "DirectMap1G: %8lu kB\n",
|
seq_printf(m, "DirectMap1G: %8lu kB\n",
|
||||||
direct_pages_count[PG_LEVEL_1G] << 20);
|
direct_pages_count[PG_LEVEL_1G] << 20);
|
||||||
#endif
|
#endif
|
||||||
return n;
|
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
static inline void split_page_count(int level) { }
|
static inline void split_page_count(int level) { }
|
||||||
|
|
|
@ -10,6 +10,7 @@ proc-$(CONFIG_MMU) := mmu.o task_mmu.o
|
||||||
proc-y += inode.o root.o base.o generic.o array.o \
|
proc-y += inode.o root.o base.o generic.o array.o \
|
||||||
proc_tty.o proc_misc.o
|
proc_tty.o proc_misc.o
|
||||||
proc-y += loadavg.o
|
proc-y += loadavg.o
|
||||||
|
proc-y += meminfo.o
|
||||||
proc-y += uptime.o
|
proc-y += uptime.o
|
||||||
proc-$(CONFIG_PROC_SYSCTL) += proc_sysctl.o
|
proc-$(CONFIG_PROC_SYSCTL) += proc_sysctl.o
|
||||||
proc-$(CONFIG_NET) += proc_net.o
|
proc-$(CONFIG_NET) += proc_net.o
|
||||||
|
|
|
@ -0,0 +1,168 @@
|
||||||
|
#include <linux/fs.h>
|
||||||
|
#include <linux/hugetlb.h>
|
||||||
|
#include <linux/init.h>
|
||||||
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/mm.h>
|
||||||
|
#include <linux/mman.h>
|
||||||
|
#include <linux/mmzone.h>
|
||||||
|
#include <linux/proc_fs.h>
|
||||||
|
#include <linux/quicklist.h>
|
||||||
|
#include <linux/seq_file.h>
|
||||||
|
#include <linux/swap.h>
|
||||||
|
#include <linux/vmstat.h>
|
||||||
|
#include <asm/atomic.h>
|
||||||
|
#include <asm/page.h>
|
||||||
|
#include <asm/pgtable.h>
|
||||||
|
#include "internal.h"
|
||||||
|
|
||||||
|
void __attribute__((weak)) arch_report_meminfo(struct seq_file *m)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static int meminfo_proc_show(struct seq_file *m, void *v)
|
||||||
|
{
|
||||||
|
struct sysinfo i;
|
||||||
|
unsigned long committed;
|
||||||
|
unsigned long allowed;
|
||||||
|
struct vmalloc_info vmi;
|
||||||
|
long cached;
|
||||||
|
unsigned long pages[NR_LRU_LISTS];
|
||||||
|
int lru;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* display in kilobytes.
|
||||||
|
*/
|
||||||
|
#define K(x) ((x) << (PAGE_SHIFT - 10))
|
||||||
|
si_meminfo(&i);
|
||||||
|
si_swapinfo(&i);
|
||||||
|
committed = atomic_long_read(&vm_committed_space);
|
||||||
|
allowed = ((totalram_pages - hugetlb_total_pages())
|
||||||
|
* sysctl_overcommit_ratio / 100) + total_swap_pages;
|
||||||
|
|
||||||
|
cached = global_page_state(NR_FILE_PAGES) -
|
||||||
|
total_swapcache_pages - i.bufferram;
|
||||||
|
if (cached < 0)
|
||||||
|
cached = 0;
|
||||||
|
|
||||||
|
get_vmalloc_info(&vmi);
|
||||||
|
|
||||||
|
for (lru = LRU_BASE; lru < NR_LRU_LISTS; lru++)
|
||||||
|
pages[lru] = global_page_state(NR_LRU_BASE + lru);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Tagged format, for easy grepping and expansion.
|
||||||
|
*/
|
||||||
|
seq_printf(m,
|
||||||
|
"MemTotal: %8lu kB\n"
|
||||||
|
"MemFree: %8lu kB\n"
|
||||||
|
"Buffers: %8lu kB\n"
|
||||||
|
"Cached: %8lu kB\n"
|
||||||
|
"SwapCached: %8lu kB\n"
|
||||||
|
"Active: %8lu kB\n"
|
||||||
|
"Inactive: %8lu kB\n"
|
||||||
|
"Active(anon): %8lu kB\n"
|
||||||
|
"Inactive(anon): %8lu kB\n"
|
||||||
|
"Active(file): %8lu kB\n"
|
||||||
|
"Inactive(file): %8lu kB\n"
|
||||||
|
#ifdef CONFIG_UNEVICTABLE_LRU
|
||||||
|
"Unevictable: %8lu kB\n"
|
||||||
|
"Mlocked: %8lu kB\n"
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_HIGHMEM
|
||||||
|
"HighTotal: %8lu kB\n"
|
||||||
|
"HighFree: %8lu kB\n"
|
||||||
|
"LowTotal: %8lu kB\n"
|
||||||
|
"LowFree: %8lu kB\n"
|
||||||
|
#endif
|
||||||
|
"SwapTotal: %8lu kB\n"
|
||||||
|
"SwapFree: %8lu kB\n"
|
||||||
|
"Dirty: %8lu kB\n"
|
||||||
|
"Writeback: %8lu kB\n"
|
||||||
|
"AnonPages: %8lu kB\n"
|
||||||
|
"Mapped: %8lu kB\n"
|
||||||
|
"Slab: %8lu kB\n"
|
||||||
|
"SReclaimable: %8lu kB\n"
|
||||||
|
"SUnreclaim: %8lu kB\n"
|
||||||
|
"PageTables: %8lu kB\n"
|
||||||
|
#ifdef CONFIG_QUICKLIST
|
||||||
|
"Quicklists: %8lu kB\n"
|
||||||
|
#endif
|
||||||
|
"NFS_Unstable: %8lu kB\n"
|
||||||
|
"Bounce: %8lu kB\n"
|
||||||
|
"WritebackTmp: %8lu kB\n"
|
||||||
|
"CommitLimit: %8lu kB\n"
|
||||||
|
"Committed_AS: %8lu kB\n"
|
||||||
|
"VmallocTotal: %8lu kB\n"
|
||||||
|
"VmallocUsed: %8lu kB\n"
|
||||||
|
"VmallocChunk: %8lu kB\n",
|
||||||
|
K(i.totalram),
|
||||||
|
K(i.freeram),
|
||||||
|
K(i.bufferram),
|
||||||
|
K(cached),
|
||||||
|
K(total_swapcache_pages),
|
||||||
|
K(pages[LRU_ACTIVE_ANON] + pages[LRU_ACTIVE_FILE]),
|
||||||
|
K(pages[LRU_INACTIVE_ANON] + pages[LRU_INACTIVE_FILE]),
|
||||||
|
K(pages[LRU_ACTIVE_ANON]),
|
||||||
|
K(pages[LRU_INACTIVE_ANON]),
|
||||||
|
K(pages[LRU_ACTIVE_FILE]),
|
||||||
|
K(pages[LRU_INACTIVE_FILE]),
|
||||||
|
#ifdef CONFIG_UNEVICTABLE_LRU
|
||||||
|
K(pages[LRU_UNEVICTABLE]),
|
||||||
|
K(global_page_state(NR_MLOCK)),
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_HIGHMEM
|
||||||
|
K(i.totalhigh),
|
||||||
|
K(i.freehigh),
|
||||||
|
K(i.totalram-i.totalhigh),
|
||||||
|
K(i.freeram-i.freehigh),
|
||||||
|
#endif
|
||||||
|
K(i.totalswap),
|
||||||
|
K(i.freeswap),
|
||||||
|
K(global_page_state(NR_FILE_DIRTY)),
|
||||||
|
K(global_page_state(NR_WRITEBACK)),
|
||||||
|
K(global_page_state(NR_ANON_PAGES)),
|
||||||
|
K(global_page_state(NR_FILE_MAPPED)),
|
||||||
|
K(global_page_state(NR_SLAB_RECLAIMABLE) +
|
||||||
|
global_page_state(NR_SLAB_UNRECLAIMABLE)),
|
||||||
|
K(global_page_state(NR_SLAB_RECLAIMABLE)),
|
||||||
|
K(global_page_state(NR_SLAB_UNRECLAIMABLE)),
|
||||||
|
K(global_page_state(NR_PAGETABLE)),
|
||||||
|
#ifdef CONFIG_QUICKLIST
|
||||||
|
K(quicklist_total_size()),
|
||||||
|
#endif
|
||||||
|
K(global_page_state(NR_UNSTABLE_NFS)),
|
||||||
|
K(global_page_state(NR_BOUNCE)),
|
||||||
|
K(global_page_state(NR_WRITEBACK_TEMP)),
|
||||||
|
K(allowed),
|
||||||
|
K(committed),
|
||||||
|
(unsigned long)VMALLOC_TOTAL >> 10,
|
||||||
|
vmi.used >> 10,
|
||||||
|
vmi.largest_chunk >> 10
|
||||||
|
);
|
||||||
|
|
||||||
|
hugetlb_report_meminfo(m);
|
||||||
|
|
||||||
|
arch_report_meminfo(m);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
#undef K
|
||||||
|
}
|
||||||
|
|
||||||
|
static int meminfo_proc_open(struct inode *inode, struct file *file)
|
||||||
|
{
|
||||||
|
return single_open(file, meminfo_proc_show, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct file_operations meminfo_proc_fops = {
|
||||||
|
.open = meminfo_proc_open,
|
||||||
|
.read = seq_read,
|
||||||
|
.llseek = seq_lseek,
|
||||||
|
.release = single_release,
|
||||||
|
};
|
||||||
|
|
||||||
|
static int __init proc_meminfo_init(void)
|
||||||
|
{
|
||||||
|
proc_create("meminfo", 0, NULL, &meminfo_proc_fops);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
module_init(proc_meminfo_init);
|
|
@ -78,142 +78,6 @@ static int proc_calc_metrics(char *page, char **start, off_t off,
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
int __attribute__((weak)) arch_report_meminfo(char *page)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int meminfo_read_proc(char *page, char **start, off_t off,
|
|
||||||
int count, int *eof, void *data)
|
|
||||||
{
|
|
||||||
struct sysinfo i;
|
|
||||||
int len;
|
|
||||||
unsigned long committed;
|
|
||||||
unsigned long allowed;
|
|
||||||
struct vmalloc_info vmi;
|
|
||||||
long cached;
|
|
||||||
unsigned long pages[NR_LRU_LISTS];
|
|
||||||
int lru;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* display in kilobytes.
|
|
||||||
*/
|
|
||||||
#define K(x) ((x) << (PAGE_SHIFT - 10))
|
|
||||||
si_meminfo(&i);
|
|
||||||
si_swapinfo(&i);
|
|
||||||
committed = atomic_long_read(&vm_committed_space);
|
|
||||||
allowed = ((totalram_pages - hugetlb_total_pages())
|
|
||||||
* sysctl_overcommit_ratio / 100) + total_swap_pages;
|
|
||||||
|
|
||||||
cached = global_page_state(NR_FILE_PAGES) -
|
|
||||||
total_swapcache_pages - i.bufferram;
|
|
||||||
if (cached < 0)
|
|
||||||
cached = 0;
|
|
||||||
|
|
||||||
get_vmalloc_info(&vmi);
|
|
||||||
|
|
||||||
for (lru = LRU_BASE; lru < NR_LRU_LISTS; lru++)
|
|
||||||
pages[lru] = global_page_state(NR_LRU_BASE + lru);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Tagged format, for easy grepping and expansion.
|
|
||||||
*/
|
|
||||||
len = sprintf(page,
|
|
||||||
"MemTotal: %8lu kB\n"
|
|
||||||
"MemFree: %8lu kB\n"
|
|
||||||
"Buffers: %8lu kB\n"
|
|
||||||
"Cached: %8lu kB\n"
|
|
||||||
"SwapCached: %8lu kB\n"
|
|
||||||
"Active: %8lu kB\n"
|
|
||||||
"Inactive: %8lu kB\n"
|
|
||||||
"Active(anon): %8lu kB\n"
|
|
||||||
"Inactive(anon): %8lu kB\n"
|
|
||||||
"Active(file): %8lu kB\n"
|
|
||||||
"Inactive(file): %8lu kB\n"
|
|
||||||
#ifdef CONFIG_UNEVICTABLE_LRU
|
|
||||||
"Unevictable: %8lu kB\n"
|
|
||||||
"Mlocked: %8lu kB\n"
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_HIGHMEM
|
|
||||||
"HighTotal: %8lu kB\n"
|
|
||||||
"HighFree: %8lu kB\n"
|
|
||||||
"LowTotal: %8lu kB\n"
|
|
||||||
"LowFree: %8lu kB\n"
|
|
||||||
#endif
|
|
||||||
"SwapTotal: %8lu kB\n"
|
|
||||||
"SwapFree: %8lu kB\n"
|
|
||||||
"Dirty: %8lu kB\n"
|
|
||||||
"Writeback: %8lu kB\n"
|
|
||||||
"AnonPages: %8lu kB\n"
|
|
||||||
"Mapped: %8lu kB\n"
|
|
||||||
"Slab: %8lu kB\n"
|
|
||||||
"SReclaimable: %8lu kB\n"
|
|
||||||
"SUnreclaim: %8lu kB\n"
|
|
||||||
"PageTables: %8lu kB\n"
|
|
||||||
#ifdef CONFIG_QUICKLIST
|
|
||||||
"Quicklists: %8lu kB\n"
|
|
||||||
#endif
|
|
||||||
"NFS_Unstable: %8lu kB\n"
|
|
||||||
"Bounce: %8lu kB\n"
|
|
||||||
"WritebackTmp: %8lu kB\n"
|
|
||||||
"CommitLimit: %8lu kB\n"
|
|
||||||
"Committed_AS: %8lu kB\n"
|
|
||||||
"VmallocTotal: %8lu kB\n"
|
|
||||||
"VmallocUsed: %8lu kB\n"
|
|
||||||
"VmallocChunk: %8lu kB\n",
|
|
||||||
K(i.totalram),
|
|
||||||
K(i.freeram),
|
|
||||||
K(i.bufferram),
|
|
||||||
K(cached),
|
|
||||||
K(total_swapcache_pages),
|
|
||||||
K(pages[LRU_ACTIVE_ANON] + pages[LRU_ACTIVE_FILE]),
|
|
||||||
K(pages[LRU_INACTIVE_ANON] + pages[LRU_INACTIVE_FILE]),
|
|
||||||
K(pages[LRU_ACTIVE_ANON]),
|
|
||||||
K(pages[LRU_INACTIVE_ANON]),
|
|
||||||
K(pages[LRU_ACTIVE_FILE]),
|
|
||||||
K(pages[LRU_INACTIVE_FILE]),
|
|
||||||
#ifdef CONFIG_UNEVICTABLE_LRU
|
|
||||||
K(pages[LRU_UNEVICTABLE]),
|
|
||||||
K(global_page_state(NR_MLOCK)),
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_HIGHMEM
|
|
||||||
K(i.totalhigh),
|
|
||||||
K(i.freehigh),
|
|
||||||
K(i.totalram-i.totalhigh),
|
|
||||||
K(i.freeram-i.freehigh),
|
|
||||||
#endif
|
|
||||||
K(i.totalswap),
|
|
||||||
K(i.freeswap),
|
|
||||||
K(global_page_state(NR_FILE_DIRTY)),
|
|
||||||
K(global_page_state(NR_WRITEBACK)),
|
|
||||||
K(global_page_state(NR_ANON_PAGES)),
|
|
||||||
K(global_page_state(NR_FILE_MAPPED)),
|
|
||||||
K(global_page_state(NR_SLAB_RECLAIMABLE) +
|
|
||||||
global_page_state(NR_SLAB_UNRECLAIMABLE)),
|
|
||||||
K(global_page_state(NR_SLAB_RECLAIMABLE)),
|
|
||||||
K(global_page_state(NR_SLAB_UNRECLAIMABLE)),
|
|
||||||
K(global_page_state(NR_PAGETABLE)),
|
|
||||||
#ifdef CONFIG_QUICKLIST
|
|
||||||
K(quicklist_total_size()),
|
|
||||||
#endif
|
|
||||||
K(global_page_state(NR_UNSTABLE_NFS)),
|
|
||||||
K(global_page_state(NR_BOUNCE)),
|
|
||||||
K(global_page_state(NR_WRITEBACK_TEMP)),
|
|
||||||
K(allowed),
|
|
||||||
K(committed),
|
|
||||||
(unsigned long)VMALLOC_TOTAL >> 10,
|
|
||||||
vmi.used >> 10,
|
|
||||||
vmi.largest_chunk >> 10
|
|
||||||
);
|
|
||||||
|
|
||||||
len += hugetlb_report_meminfo(page + len);
|
|
||||||
|
|
||||||
len += arch_report_meminfo(page + len);
|
|
||||||
|
|
||||||
return proc_calc_metrics(page, start, off, count, eof, len);
|
|
||||||
#undef K
|
|
||||||
}
|
|
||||||
|
|
||||||
static int fragmentation_open(struct inode *inode, struct file *file)
|
static int fragmentation_open(struct inode *inode, struct file *file)
|
||||||
{
|
{
|
||||||
(void)inode;
|
(void)inode;
|
||||||
|
@ -816,7 +680,6 @@ void __init proc_misc_init(void)
|
||||||
char *name;
|
char *name;
|
||||||
int (*read_proc)(char*,char**,off_t,int,int*,void*);
|
int (*read_proc)(char*,char**,off_t,int,int*,void*);
|
||||||
} *p, simple_ones[] = {
|
} *p, simple_ones[] = {
|
||||||
{"meminfo", meminfo_read_proc},
|
|
||||||
{"version", version_read_proc},
|
{"version", version_read_proc},
|
||||||
#ifdef CONFIG_PROC_HARDWARE
|
#ifdef CONFIG_PROC_HARDWARE
|
||||||
{"hardware", hardware_read_proc},
|
{"hardware", hardware_read_proc},
|
||||||
|
|
|
@ -348,7 +348,8 @@ static inline void native_pagetable_setup_start(pgd_t *base) {}
|
||||||
static inline void native_pagetable_setup_done(pgd_t *base) {}
|
static inline void native_pagetable_setup_done(pgd_t *base) {}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern int arch_report_meminfo(char *page);
|
struct seq_file;
|
||||||
|
extern void arch_report_meminfo(struct seq_file *m);
|
||||||
|
|
||||||
#ifdef CONFIG_PARAVIRT
|
#ifdef CONFIG_PARAVIRT
|
||||||
#include <asm/paravirt.h>
|
#include <asm/paravirt.h>
|
||||||
|
|
|
@ -27,7 +27,7 @@ void unmap_hugepage_range(struct vm_area_struct *,
|
||||||
void __unmap_hugepage_range(struct vm_area_struct *,
|
void __unmap_hugepage_range(struct vm_area_struct *,
|
||||||
unsigned long, unsigned long, struct page *);
|
unsigned long, unsigned long, struct page *);
|
||||||
int hugetlb_prefault(struct address_space *, struct vm_area_struct *);
|
int hugetlb_prefault(struct address_space *, struct vm_area_struct *);
|
||||||
int hugetlb_report_meminfo(char *);
|
void hugetlb_report_meminfo(struct seq_file *);
|
||||||
int hugetlb_report_node_meminfo(int, char *);
|
int hugetlb_report_node_meminfo(int, char *);
|
||||||
unsigned long hugetlb_total_pages(void);
|
unsigned long hugetlb_total_pages(void);
|
||||||
int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
|
int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
|
||||||
|
@ -79,7 +79,9 @@ static inline unsigned long hugetlb_total_pages(void)
|
||||||
#define copy_hugetlb_page_range(src, dst, vma) ({ BUG(); 0; })
|
#define copy_hugetlb_page_range(src, dst, vma) ({ BUG(); 0; })
|
||||||
#define hugetlb_prefault(mapping, vma) ({ BUG(); 0; })
|
#define hugetlb_prefault(mapping, vma) ({ BUG(); 0; })
|
||||||
#define unmap_hugepage_range(vma, start, end, page) BUG()
|
#define unmap_hugepage_range(vma, start, end, page) BUG()
|
||||||
#define hugetlb_report_meminfo(buf) 0
|
static inline void hugetlb_report_meminfo(struct seq_file *m)
|
||||||
|
{
|
||||||
|
}
|
||||||
#define hugetlb_report_node_meminfo(n, buf) 0
|
#define hugetlb_report_node_meminfo(n, buf) 0
|
||||||
#define follow_huge_pmd(mm, addr, pmd, write) NULL
|
#define follow_huge_pmd(mm, addr, pmd, write) NULL
|
||||||
#define follow_huge_pud(mm, addr, pud, write) NULL
|
#define follow_huge_pud(mm, addr, pud, write) NULL
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
|
#include <linux/seq_file.h>
|
||||||
#include <linux/sysctl.h>
|
#include <linux/sysctl.h>
|
||||||
#include <linux/highmem.h>
|
#include <linux/highmem.h>
|
||||||
#include <linux/mmu_notifier.h>
|
#include <linux/mmu_notifier.h>
|
||||||
|
@ -1455,10 +1456,10 @@ int hugetlb_overcommit_handler(struct ctl_table *table, int write,
|
||||||
|
|
||||||
#endif /* CONFIG_SYSCTL */
|
#endif /* CONFIG_SYSCTL */
|
||||||
|
|
||||||
int hugetlb_report_meminfo(char *buf)
|
void hugetlb_report_meminfo(struct seq_file *m)
|
||||||
{
|
{
|
||||||
struct hstate *h = &default_hstate;
|
struct hstate *h = &default_hstate;
|
||||||
return sprintf(buf,
|
seq_printf(m,
|
||||||
"HugePages_Total: %5lu\n"
|
"HugePages_Total: %5lu\n"
|
||||||
"HugePages_Free: %5lu\n"
|
"HugePages_Free: %5lu\n"
|
||||||
"HugePages_Rsvd: %5lu\n"
|
"HugePages_Rsvd: %5lu\n"
|
||||||
|
|
Загрузка…
Ссылка в новой задаче