Browse Source

mm: smaps: export mlock information

Currently there is no way to find whether a process has locked its pages
in memory or not.  And which of the memory regions are locked in memory.

Add a new field "Locked" to export this information via the smaps file.

Signed-off-by: Nikanth Karthikesan <knikanth@suse.de>
Acked-by: Balbir Singh <balbir@linux.vnet.ibm.com>
Acked-by: Wu Fengguang <fengguang.wu@intel.com>
Cc: Matt Mackall <mpm@selenic.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Nikanth Karthikesan 15 năm trước cách đây
mục cha
commit
2d90508f63

+ 3 - 0
Documentation/filesystems/proc.txt

@@ -375,6 +375,7 @@ Anonymous:             0 kB
 Swap:                  0 kB
 Swap:                  0 kB
 KernelPageSize:        4 kB
 KernelPageSize:        4 kB
 MMUPageSize:           4 kB
 MMUPageSize:           4 kB
+Locked:              374 kB
 
 
 The first of these lines shows the same information as is displayed for the
 The first of these lines shows the same information as is displayed for the
 mapping in /proc/PID/maps.  The remaining lines show the size of the mapping
 mapping in /proc/PID/maps.  The remaining lines show the size of the mapping
@@ -670,6 +671,8 @@ varies by architecture and compile options.  The following is from a
 
 
 > cat /proc/meminfo
 > cat /proc/meminfo
 
 
+The "Locked" indicates whether the mapping is locked in memory or not.
+
 
 
 MemTotal:     16344972 kB
 MemTotal:     16344972 kB
 MemFree:      13634064 kB
 MemFree:      13634064 kB

+ 5 - 2
fs/proc/task_mmu.c

@@ -418,7 +418,8 @@ static int show_smap(struct seq_file *m, void *v)
 		   "Anonymous:      %8lu kB\n"
 		   "Anonymous:      %8lu kB\n"
 		   "Swap:           %8lu kB\n"
 		   "Swap:           %8lu kB\n"
 		   "KernelPageSize: %8lu kB\n"
 		   "KernelPageSize: %8lu kB\n"
-		   "MMUPageSize:    %8lu kB\n",
+		   "MMUPageSize:    %8lu kB\n"
+		   "Locked:         %8lu kB\n",
 		   (vma->vm_end - vma->vm_start) >> 10,
 		   (vma->vm_end - vma->vm_start) >> 10,
 		   mss.resident >> 10,
 		   mss.resident >> 10,
 		   (unsigned long)(mss.pss >> (10 + PSS_SHIFT)),
 		   (unsigned long)(mss.pss >> (10 + PSS_SHIFT)),
@@ -430,7 +431,9 @@ static int show_smap(struct seq_file *m, void *v)
 		   mss.anonymous >> 10,
 		   mss.anonymous >> 10,
 		   mss.swap >> 10,
 		   mss.swap >> 10,
 		   vma_kernel_pagesize(vma) >> 10,
 		   vma_kernel_pagesize(vma) >> 10,
-		   vma_mmu_pagesize(vma) >> 10);
+		   vma_mmu_pagesize(vma) >> 10,
+		   (vma->vm_flags & VM_LOCKED) ?
+			(unsigned long)(mss.pss >> (10 + PSS_SHIFT)) : 0);
 
 
 	if (m->count < m->size)  /* vma is copied successfully */
 	if (m->count < m->size)  /* vma is copied successfully */
 		m->version = (vma != get_gate_vma(task)) ? vma->vm_start : 0;
 		m->version = (vma != get_gate_vma(task)) ? vma->vm_start : 0;