LCOV - code coverage report
Current view: top level - fs/proc - meminfo.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 31 38 81.6 %
Date: 2014-02-18 Functions: 3 4 75.0 %
Branches: 3 4 75.0 %

           Branch data     Line data    Source code
       1                 :            : #include <linux/fs.h>
       2                 :            : #include <linux/init.h>
       3                 :            : #include <linux/kernel.h>
       4                 :            : #include <linux/mm.h>
       5                 :            : #include <linux/hugetlb.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 <linux/atomic.h>
      14                 :            : #include <linux/vmalloc.h>
      15                 :            : #include <asm/page.h>
      16                 :            : #include <asm/pgtable.h>
      17                 :            : #include "internal.h"
      18                 :            : 
      19                 :          0 : void __attribute__((weak)) arch_report_meminfo(struct seq_file *m)
      20                 :            : {
      21                 :      10045 : }
      22                 :            : 
      23                 :          0 : static int meminfo_proc_show(struct seq_file *m, void *v)
      24                 :            : {
      25                 :            :         struct sysinfo i;
      26                 :            :         unsigned long committed;
      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                 :      10045 :         si_meminfo(&i);
      37                 :      10045 :         si_swapinfo(&i);
      38                 :      20090 :         committed = percpu_counter_read_positive(&vm_committed_as);
      39                 :            : 
      40                 :      20090 :         cached = global_page_state(NR_FILE_PAGES) -
      41                 :      10045 :                         total_swapcache_pages() - i.bufferram;
      42         [ -  + ]:      10045 :         if (cached < 0)
      43                 :            :                 cached = 0;
      44                 :            : 
      45                 :      10045 :         get_vmalloc_info(&vmi);
      46                 :            : 
      47         [ +  + ]:      60270 :         for (lru = LRU_BASE; lru < NR_LRU_LISTS; lru++)
      48                 :     100450 :                 pages[lru] = global_page_state(NR_LRU_BASE + lru);
      49                 :            : 
      50                 :            :         /*
      51                 :            :          * Tagged format, for easy grepping and expansion.
      52                 :            :          */
      53                 :      10045 :         seq_printf(m,
      54                 :            :                 "MemTotal:       %8lu kB\n"
      55                 :            :                 "MemFree:        %8lu kB\n"
      56                 :            :                 "Buffers:        %8lu kB\n"
      57                 :            :                 "Cached:         %8lu kB\n"
      58                 :            :                 "SwapCached:     %8lu kB\n"
      59                 :            :                 "Active:         %8lu kB\n"
      60                 :            :                 "Inactive:       %8lu kB\n"
      61                 :            :                 "Active(anon):   %8lu kB\n"
      62                 :            :                 "Inactive(anon): %8lu kB\n"
      63                 :            :                 "Active(file):   %8lu kB\n"
      64                 :            :                 "Inactive(file): %8lu kB\n"
      65                 :            :                 "Unevictable:    %8lu kB\n"
      66                 :            :                 "Mlocked:        %8lu kB\n"
      67                 :            : #ifdef CONFIG_HIGHMEM
      68                 :            :                 "HighTotal:      %8lu kB\n"
      69                 :            :                 "HighFree:       %8lu kB\n"
      70                 :            :                 "LowTotal:       %8lu kB\n"
      71                 :            :                 "LowFree:        %8lu kB\n"
      72                 :            : #endif
      73                 :            : #ifndef CONFIG_MMU
      74                 :            :                 "MmapCopy:       %8lu kB\n"
      75                 :            : #endif
      76                 :            :                 "SwapTotal:      %8lu kB\n"
      77                 :            :                 "SwapFree:       %8lu kB\n"
      78                 :            :                 "Dirty:          %8lu kB\n"
      79                 :            :                 "Writeback:      %8lu kB\n"
      80                 :            :                 "AnonPages:      %8lu kB\n"
      81                 :            :                 "Mapped:         %8lu kB\n"
      82                 :            :                 "Shmem:          %8lu kB\n"
      83                 :            :                 "Slab:           %8lu kB\n"
      84                 :            :                 "SReclaimable:   %8lu kB\n"
      85                 :            :                 "SUnreclaim:     %8lu kB\n"
      86                 :            :                 "KernelStack:    %8lu kB\n"
      87                 :            :                 "PageTables:     %8lu kB\n"
      88                 :            : #ifdef CONFIG_QUICKLIST
      89                 :            :                 "Quicklists:     %8lu kB\n"
      90                 :            : #endif
      91                 :            :                 "NFS_Unstable:   %8lu kB\n"
      92                 :            :                 "Bounce:         %8lu kB\n"
      93                 :            :                 "WritebackTmp:   %8lu kB\n"
      94                 :            :                 "CommitLimit:    %8lu kB\n"
      95                 :            :                 "Committed_AS:   %8lu kB\n"
      96                 :            :                 "VmallocTotal:   %8lu kB\n"
      97                 :            :                 "VmallocUsed:    %8lu kB\n"
      98                 :            :                 "VmallocChunk:   %8lu kB\n"
      99                 :            : #ifdef CONFIG_MEMORY_FAILURE
     100                 :            :                 "HardwareCorrupted: %5lu kB\n"
     101                 :            : #endif
     102                 :            : #ifdef CONFIG_TRANSPARENT_HUGEPAGE
     103                 :            :                 "AnonHugePages:  %8lu kB\n"
     104                 :            : #endif
     105                 :            :                 ,
     106                 :      10045 :                 K(i.totalram),
     107                 :      10045 :                 K(i.freeram),
     108                 :      10045 :                 K(i.bufferram),
     109                 :            :                 K(cached),
     110                 :      10045 :                 K(total_swapcache_pages()),
     111                 :      10045 :                 K(pages[LRU_ACTIVE_ANON]   + pages[LRU_ACTIVE_FILE]),
     112                 :      10045 :                 K(pages[LRU_INACTIVE_ANON] + pages[LRU_INACTIVE_FILE]),
     113                 :            :                 K(pages[LRU_ACTIVE_ANON]),
     114                 :            :                 K(pages[LRU_INACTIVE_ANON]),
     115                 :            :                 K(pages[LRU_ACTIVE_FILE]),
     116                 :            :                 K(pages[LRU_INACTIVE_FILE]),
     117                 :      10045 :                 K(pages[LRU_UNEVICTABLE]),
     118                 :            :                 K(global_page_state(NR_MLOCK)),
     119                 :            : #ifdef CONFIG_HIGHMEM
     120                 :      10045 :                 K(i.totalhigh),
     121                 :      10045 :                 K(i.freehigh),
     122                 :      10045 :                 K(i.totalram-i.totalhigh),
     123                 :      10045 :                 K(i.freeram-i.freehigh),
     124                 :            : #endif
     125                 :            : #ifndef CONFIG_MMU
     126                 :            :                 K((unsigned long) atomic_long_read(&mmap_pages_allocated)),
     127                 :            : #endif
     128                 :      10045 :                 K(i.totalswap),
     129                 :      10045 :                 K(i.freeswap),
     130                 :            :                 K(global_page_state(NR_FILE_DIRTY)),
     131                 :            :                 K(global_page_state(NR_WRITEBACK)),
     132                 :            :                 K(global_page_state(NR_ANON_PAGES)),
     133                 :            :                 K(global_page_state(NR_FILE_MAPPED)),
     134                 :            :                 K(global_page_state(NR_SHMEM)),
     135                 :      10045 :                 K(global_page_state(NR_SLAB_RECLAIMABLE) +
     136                 :            :                                 global_page_state(NR_SLAB_UNRECLAIMABLE)),
     137                 :            :                 K(global_page_state(NR_SLAB_RECLAIMABLE)),
     138                 :            :                 K(global_page_state(NR_SLAB_UNRECLAIMABLE)),
     139                 :          0 :                 global_page_state(NR_KERNEL_STACK) * THREAD_SIZE / 1024,
     140                 :            :                 K(global_page_state(NR_PAGETABLE)),
     141                 :            : #ifdef CONFIG_QUICKLIST
     142                 :            :                 K(quicklist_total_size()),
     143                 :            : #endif
     144                 :            :                 K(global_page_state(NR_UNSTABLE_NFS)),
     145                 :            :                 K(global_page_state(NR_BOUNCE)),
     146                 :            :                 K(global_page_state(NR_WRITEBACK_TEMP)),
     147                 :          0 :                 K(vm_commit_limit()),
     148                 :            :                 K(committed),
     149                 :      10045 :                 (unsigned long)VMALLOC_TOTAL >> 10,
     150                 :      10045 :                 vmi.used >> 10,
     151                 :      10045 :                 vmi.largest_chunk >> 10
     152                 :            : #ifdef CONFIG_MEMORY_FAILURE
     153                 :            :                 ,atomic_long_read(&num_poisoned_pages) << (PAGE_SHIFT - 10)
     154                 :            : #endif
     155                 :            : #ifdef CONFIG_TRANSPARENT_HUGEPAGE
     156                 :            :                 ,K(global_page_state(NR_ANON_TRANSPARENT_HUGEPAGES) *
     157                 :            :                    HPAGE_PMD_NR)
     158                 :            : #endif
     159                 :            :                 );
     160                 :            : 
     161                 :            :         hugetlb_report_meminfo(m);
     162                 :            : 
     163                 :      10045 :         arch_report_meminfo(m);
     164                 :            : 
     165                 :      10045 :         return 0;
     166                 :            : #undef K
     167                 :            : }
     168                 :            : 
     169                 :          0 : static int meminfo_proc_open(struct inode *inode, struct file *file)
     170                 :            : {
     171                 :      10045 :         return single_open(file, meminfo_proc_show, NULL);
     172                 :            : }
     173                 :            : 
     174                 :            : static const struct file_operations meminfo_proc_fops = {
     175                 :            :         .open           = meminfo_proc_open,
     176                 :            :         .read           = seq_read,
     177                 :            :         .llseek         = seq_lseek,
     178                 :            :         .release        = single_release,
     179                 :            : };
     180                 :            : 
     181                 :          0 : static int __init proc_meminfo_init(void)
     182                 :            : {
     183                 :            :         proc_create("meminfo", 0, NULL, &meminfo_proc_fops);
     184                 :          0 :         return 0;
     185                 :            : }
     186                 :            : module_init(proc_meminfo_init);

Generated by: LCOV version 1.9