lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Fri, 19 Aug 2016 12:12:59 +0200
From:   Michal Hocko <mhocko@...nel.org>
To:     Andrew Morton <akpm@...ux-foundation.org>
Cc:     Joe Perches <joe@...ches.com>, Jann Horn <jann@...jh.net>,
        <linux-mm@...ck.org>, LKML <linux-kernel@...r.kernel.org>,
        Michal Hocko <mhocko@...e.com>
Subject: [PATCH 1/2] proc, meminfo: abstract show_val_kb

From: Michal Hocko <mhocko@...e.com>

show_val_kb is currently tight meminfo usage but we would like to reuse
it for other proc files. Let's pull it out to proc internal header,
rename to show_name_pages_kb to be explicit that it operates on page
units and change show_val_kb to only print the value.

Signed-off-by: Michal Hocko <mhocko@...e.com>
---
 fs/proc/internal.h | 10 ++++++
 fs/proc/meminfo.c  | 93 ++++++++++++++++++++++++++----------------------------
 2 files changed, 55 insertions(+), 48 deletions(-)

diff --git a/fs/proc/internal.h b/fs/proc/internal.h
index 7931c558c192..10492701f4c1 100644
--- a/fs/proc/internal.h
+++ b/fs/proc/internal.h
@@ -304,3 +304,13 @@ extern unsigned long task_statm(struct mm_struct *,
 				unsigned long *, unsigned long *,
 				unsigned long *, unsigned long *);
 extern void task_mem(struct seq_file *, struct mm_struct *);
+
+/* prints given value (in kB) padded properly to 8 spaces */
+extern void show_val_kb(struct seq_file *m, unsigned long num);
+
+#define show_name_pages_kb(seq, name, pages)	\
+({						\
+ 	BUILD_BUG_ON(!__builtin_constant_p(name));\
+ 	seq_write(seq, name, sizeof(name));	\
+ 	show_val_kb(seq, (pages) << (PAGE_SHIFT - 10));\
+ })
diff --git a/fs/proc/meminfo.c b/fs/proc/meminfo.c
index 8a428498d6b2..65e0bc6213e2 100644
--- a/fs/proc/meminfo.c
+++ b/fs/proc/meminfo.c
@@ -23,16 +23,13 @@ void __attribute__((weak)) arch_report_meminfo(struct seq_file *m)
 {
 }
 
-static void show_val_kb(struct seq_file *m, const char *s, unsigned long num)
+void show_val_kb(struct seq_file *m, unsigned long num)
 {
 	char v[32];
 	static const char blanks[7] = {' ', ' ', ' ', ' ',' ', ' ', ' '};
 	int len;
 
-	len = num_to_str(v, sizeof(v), num << (PAGE_SHIFT - 10));
-
-	seq_write(m, s, 16);
-
+	len = num_to_str(v, sizeof(v), num);
 	if (len > 0) {
 		if (len < 8)
 			seq_write(m, blanks, 8 - len);
@@ -65,74 +62,74 @@ static int meminfo_proc_show(struct seq_file *m, void *v)
 
 	available = si_mem_available();
 
-	show_val_kb(m, "MemTotal:       ", i.totalram);
-	show_val_kb(m, "MemFree:        ", i.freeram);
-	show_val_kb(m, "MemAvailable:   ", available);
-	show_val_kb(m, "Buffers:        ", i.bufferram);
-	show_val_kb(m, "Cached:         ", cached);
-	show_val_kb(m, "SwapCached:     ", total_swapcache_pages());
-	show_val_kb(m, "Active:         ", pages[LRU_ACTIVE_ANON] +
+	show_name_pages_kb(m, "MemTotal:       ", i.totalram);
+	show_name_pages_kb(m, "MemFree:        ", i.freeram);
+	show_name_pages_kb(m, "MemAvailable:   ", available);
+	show_name_pages_kb(m, "Buffers:        ", i.bufferram);
+	show_name_pages_kb(m, "Cached:         ", cached);
+	show_name_pages_kb(m, "SwapCached:     ", total_swapcache_pages());
+	show_name_pages_kb(m, "Active:         ", pages[LRU_ACTIVE_ANON] +
 					   pages[LRU_ACTIVE_FILE]);
-	show_val_kb(m, "Inactive:       ", pages[LRU_INACTIVE_ANON] +
+	show_name_pages_kb(m, "Inactive:       ", pages[LRU_INACTIVE_ANON] +
 					   pages[LRU_INACTIVE_FILE]);
-	show_val_kb(m, "Active(anon):   ", pages[LRU_ACTIVE_ANON]);
-	show_val_kb(m, "Inactive(anon): ", pages[LRU_INACTIVE_ANON]);
-	show_val_kb(m, "Active(file):   ", pages[LRU_ACTIVE_FILE]);
-	show_val_kb(m, "Inactive(file): ", pages[LRU_INACTIVE_FILE]);
-	show_val_kb(m, "Unevictable:    ", pages[LRU_UNEVICTABLE]);
-	show_val_kb(m, "Mlocked:        ", global_page_state(NR_MLOCK));
+	show_name_pages_kb(m, "Active(anon):   ", pages[LRU_ACTIVE_ANON]);
+	show_name_pages_kb(m, "Inactive(anon): ", pages[LRU_INACTIVE_ANON]);
+	show_name_pages_kb(m, "Active(file):   ", pages[LRU_ACTIVE_FILE]);
+	show_name_pages_kb(m, "Inactive(file): ", pages[LRU_INACTIVE_FILE]);
+	show_name_pages_kb(m, "Unevictable:    ", pages[LRU_UNEVICTABLE]);
+	show_name_pages_kb(m, "Mlocked:        ", global_page_state(NR_MLOCK));
 
 #ifdef CONFIG_HIGHMEM
-	show_val_kb(m, "HighTotal:      ", i.totalhigh);
-	show_val_kb(m, "HighFree:       ", i.freehigh);
-	show_val_kb(m, "LowTotal:       ", i.totalram - i.totalhigh);
-	show_val_kb(m, "LowFree:        ", i.freeram - i.freehigh);
+	show_name_pages_kb(m, "HighTotal:      ", i.totalhigh);
+	show_name_pages_kb(m, "HighFree:       ", i.freehigh);
+	show_name_pages_kb(m, "LowTotal:       ", i.totalram - i.totalhigh);
+	show_name_pages_kb(m, "LowFree:        ", i.freeram - i.freehigh);
 #endif
 
 #ifndef CONFIG_MMU
-	show_val_kb(m, "MmapCopy:       ",
+	show_name_pages_kb(m, "MmapCopy:       ",
 		    (unsigned long)atomic_long_read(&mmap_pages_allocated));
 #endif
 
-	show_val_kb(m, "SwapTotal:      ", i.totalswap);
-	show_val_kb(m, "SwapFree:       ", i.freeswap);
-	show_val_kb(m, "Dirty:          ",
+	show_name_pages_kb(m, "SwapTotal:      ", i.totalswap);
+	show_name_pages_kb(m, "SwapFree:       ", i.freeswap);
+	show_name_pages_kb(m, "Dirty:          ",
 		    global_node_page_state(NR_FILE_DIRTY));
-	show_val_kb(m, "Writeback:      ",
+	show_name_pages_kb(m, "Writeback:      ",
 		    global_node_page_state(NR_WRITEBACK));
-	show_val_kb(m, "AnonPages:      ",
+	show_name_pages_kb(m, "AnonPages:      ",
 		    global_node_page_state(NR_ANON_MAPPED));
-	show_val_kb(m, "Mapped:         ",
+	show_name_pages_kb(m, "Mapped:         ",
 		    global_node_page_state(NR_FILE_MAPPED));
-	show_val_kb(m, "Shmem:          ", i.sharedram);
-	show_val_kb(m, "Slab:           ",
+	show_name_pages_kb(m, "Shmem:          ", i.sharedram);
+	show_name_pages_kb(m, "Slab:           ",
 		    global_page_state(NR_SLAB_RECLAIMABLE) +
 		    global_page_state(NR_SLAB_UNRECLAIMABLE));
 
-	show_val_kb(m, "SReclaimable:   ",
+	show_name_pages_kb(m, "SReclaimable:   ",
 		    global_page_state(NR_SLAB_RECLAIMABLE));
-	show_val_kb(m, "SUnreclaim:     ",
+	show_name_pages_kb(m, "SUnreclaim:     ",
 		    global_page_state(NR_SLAB_UNRECLAIMABLE));
 	seq_printf(m, "KernelStack:    %8lu kB\n",
 		   global_page_state(NR_KERNEL_STACK_KB));
-	show_val_kb(m, "PageTables:     ",
+	show_name_pages_kb(m, "PageTables:     ",
 		    global_page_state(NR_PAGETABLE));
 #ifdef CONFIG_QUICKLIST
-	show_val_kb(m, "Quicklists:     ", quicklist_total_size());
+	show_name_pages_kb(m, "Quicklists:     ", quicklist_total_size());
 #endif
 
-	show_val_kb(m, "NFS_Unstable:   ",
+	show_name_pages_kb(m, "NFS_Unstable:   ",
 		    global_node_page_state(NR_UNSTABLE_NFS));
-	show_val_kb(m, "Bounce:         ",
+	show_name_pages_kb(m, "Bounce:         ",
 		    global_page_state(NR_BOUNCE));
-	show_val_kb(m, "WritebackTmp:   ",
+	show_name_pages_kb(m, "WritebackTmp:   ",
 		    global_node_page_state(NR_WRITEBACK_TEMP));
-	show_val_kb(m, "CommitLimit:    ", vm_commit_limit());
-	show_val_kb(m, "Committed_AS:   ", committed);
+	show_name_pages_kb(m, "CommitLimit:    ", vm_commit_limit());
+	show_name_pages_kb(m, "Committed_AS:   ", committed);
 	seq_printf(m, "VmallocTotal:   %8lu kB\n",
 		   (unsigned long)VMALLOC_TOTAL >> 10);
-	show_val_kb(m, "VmallocUsed:    ", 0ul);
-	show_val_kb(m, "VmallocChunk:   ", 0ul);
+	show_name_pages_kb(m, "VmallocUsed:    ", 0ul);
+	show_name_pages_kb(m, "VmallocChunk:   ", 0ul);
 
 #ifdef CONFIG_MEMORY_FAILURE
 	seq_printf(m, "HardwareCorrupted: %5lu kB\n",
@@ -140,17 +137,17 @@ static int meminfo_proc_show(struct seq_file *m, void *v)
 #endif
 
 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
-	show_val_kb(m, "AnonHugePages:  ",
+	show_name_pages_kb(m, "AnonHugePages:  ",
 		    global_node_page_state(NR_ANON_THPS) * HPAGE_PMD_NR);
-	show_val_kb(m, "ShmemHugePages: ",
+	show_name_pages_kb(m, "ShmemHugePages: ",
 		    global_node_page_state(NR_SHMEM_THPS) * HPAGE_PMD_NR);
-	show_val_kb(m, "ShmemPmdMapped: ",
+	show_name_pages_kb(m, "ShmemPmdMapped: ",
 		    global_node_page_state(NR_SHMEM_PMDMAPPED) * HPAGE_PMD_NR);
 #endif
 
 #ifdef CONFIG_CMA
-	show_val_kb(m, "CmaTotal:       ", totalcma_pages);
-	show_val_kb(m, "CmaFree:        ",
+	show_name_pages_kb(m, "CmaTotal:       ", totalcma_pages);
+	show_name_pages_kb(m, "CmaFree:        ",
 		    global_page_state(NR_FREE_CMA_PAGES));
 #endif
 
-- 
2.8.1

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ