Merge branch 'linux-linaro-lsk' into linux-linaro-lsk-android
[firefly-linux-kernel-4.4.55.git] / fs / proc / task_mmu.c
1 #include <linux/mm.h>
2 #include <linux/hugetlb.h>
3 #include <linux/huge_mm.h>
4 #include <linux/mount.h>
5 #include <linux/seq_file.h>
6 #include <linux/highmem.h>
7 #include <linux/ptrace.h>
8 #include <linux/slab.h>
9 #include <linux/pagemap.h>
10 #include <linux/mempolicy.h>
11 #include <linux/rmap.h>
12 #include <linux/swap.h>
13 #include <linux/swapops.h>
14
15 #include <asm/elf.h>
16 #include <asm/uaccess.h>
17 #include <asm/tlbflush.h>
18 #include "internal.h"
19
20 void task_mem(struct seq_file *m, struct mm_struct *mm)
21 {
22         unsigned long data, text, lib, swap;
23         unsigned long hiwater_vm, total_vm, hiwater_rss, total_rss;
24
25         /*
26          * Note: to minimize their overhead, mm maintains hiwater_vm and
27          * hiwater_rss only when about to *lower* total_vm or rss.  Any
28          * collector of these hiwater stats must therefore get total_vm
29          * and rss too, which will usually be the higher.  Barriers? not
30          * worth the effort, such snapshots can always be inconsistent.
31          */
32         hiwater_vm = total_vm = mm->total_vm;
33         if (hiwater_vm < mm->hiwater_vm)
34                 hiwater_vm = mm->hiwater_vm;
35         hiwater_rss = total_rss = get_mm_rss(mm);
36         if (hiwater_rss < mm->hiwater_rss)
37                 hiwater_rss = mm->hiwater_rss;
38
39         data = mm->total_vm - mm->shared_vm - mm->stack_vm;
40         text = (PAGE_ALIGN(mm->end_code) - (mm->start_code & PAGE_MASK)) >> 10;
41         lib = (mm->exec_vm << (PAGE_SHIFT-10)) - text;
42         swap = get_mm_counter(mm, MM_SWAPENTS);
43         seq_printf(m,
44                 "VmPeak:\t%8lu kB\n"
45                 "VmSize:\t%8lu kB\n"
46                 "VmLck:\t%8lu kB\n"
47                 "VmPin:\t%8lu kB\n"
48                 "VmHWM:\t%8lu kB\n"
49                 "VmRSS:\t%8lu kB\n"
50                 "VmData:\t%8lu kB\n"
51                 "VmStk:\t%8lu kB\n"
52                 "VmExe:\t%8lu kB\n"
53                 "VmLib:\t%8lu kB\n"
54                 "VmPTE:\t%8lu kB\n"
55                 "VmSwap:\t%8lu kB\n",
56                 hiwater_vm << (PAGE_SHIFT-10),
57                 total_vm << (PAGE_SHIFT-10),
58                 mm->locked_vm << (PAGE_SHIFT-10),
59                 mm->pinned_vm << (PAGE_SHIFT-10),
60                 hiwater_rss << (PAGE_SHIFT-10),
61                 total_rss << (PAGE_SHIFT-10),
62                 data << (PAGE_SHIFT-10),
63                 mm->stack_vm << (PAGE_SHIFT-10), text, lib,
64                 (PTRS_PER_PTE*sizeof(pte_t)*mm->nr_ptes) >> 10,
65                 swap << (PAGE_SHIFT-10));
66 }
67
68 unsigned long task_vsize(struct mm_struct *mm)
69 {
70         return PAGE_SIZE * mm->total_vm;
71 }
72
73 unsigned long task_statm(struct mm_struct *mm,
74                          unsigned long *shared, unsigned long *text,
75                          unsigned long *data, unsigned long *resident)
76 {
77         *shared = get_mm_counter(mm, MM_FILEPAGES);
78         *text = (PAGE_ALIGN(mm->end_code) - (mm->start_code & PAGE_MASK))
79                                                                 >> PAGE_SHIFT;
80         *data = mm->total_vm - mm->shared_vm;
81         *resident = *shared + get_mm_counter(mm, MM_ANONPAGES);
82         return mm->total_vm;
83 }
84
85 static void pad_len_spaces(struct seq_file *m, int len)
86 {
87         len = 25 + sizeof(void*) * 6 - len;
88         if (len < 1)
89                 len = 1;
90         seq_printf(m, "%*c", len, ' ');
91 }
92
93 #ifdef CONFIG_NUMA
94 /*
95  * These functions are for numa_maps but called in generic **maps seq_file
96  * ->start(), ->stop() ops.
97  *
98  * numa_maps scans all vmas under mmap_sem and checks their mempolicy.
99  * Each mempolicy object is controlled by reference counting. The problem here
100  * is how to avoid accessing dead mempolicy object.
101  *
102  * Because we're holding mmap_sem while reading seq_file, it's safe to access
103  * each vma's mempolicy, no vma objects will never drop refs to mempolicy.
104  *
105  * A task's mempolicy (task->mempolicy) has different behavior. task->mempolicy
106  * is set and replaced under mmap_sem but unrefed and cleared under task_lock().
107  * So, without task_lock(), we cannot trust get_vma_policy() because we cannot
108  * gurantee the task never exits under us. But taking task_lock() around
109  * get_vma_plicy() causes lock order problem.
110  *
111  * To access task->mempolicy without lock, we hold a reference count of an
112  * object pointed by task->mempolicy and remember it. This will guarantee
113  * that task->mempolicy points to an alive object or NULL in numa_maps accesses.
114  */
115 static void hold_task_mempolicy(struct proc_maps_private *priv)
116 {
117         struct task_struct *task = priv->task;
118
119         task_lock(task);
120         priv->task_mempolicy = task->mempolicy;
121         mpol_get(priv->task_mempolicy);
122         task_unlock(task);
123 }
124 static void release_task_mempolicy(struct proc_maps_private *priv)
125 {
126         mpol_put(priv->task_mempolicy);
127 }
128 #else
129 static void hold_task_mempolicy(struct proc_maps_private *priv)
130 {
131 }
132 static void release_task_mempolicy(struct proc_maps_private *priv)
133 {
134 }
135 #endif
136
137 static void seq_print_vma_name(struct seq_file *m, struct vm_area_struct *vma)
138 {
139         const char __user *name = vma_get_anon_name(vma);
140         struct mm_struct *mm = vma->vm_mm;
141
142         unsigned long page_start_vaddr;
143         unsigned long page_offset;
144         unsigned long num_pages;
145         unsigned long max_len = NAME_MAX;
146         int i;
147
148         page_start_vaddr = (unsigned long)name & PAGE_MASK;
149         page_offset = (unsigned long)name - page_start_vaddr;
150         num_pages = DIV_ROUND_UP(page_offset + max_len, PAGE_SIZE);
151
152         seq_puts(m, "[anon:");
153
154         for (i = 0; i < num_pages; i++) {
155                 int len;
156                 int write_len;
157                 const char *kaddr;
158                 long pages_pinned;
159                 struct page *page;
160
161                 pages_pinned = get_user_pages(current, mm, page_start_vaddr,
162                                 1, 0, 0, &page, NULL);
163                 if (pages_pinned < 1) {
164                         seq_puts(m, "<fault>]");
165                         return;
166                 }
167
168                 kaddr = (const char *)kmap(page);
169                 len = min(max_len, PAGE_SIZE - page_offset);
170                 write_len = strnlen(kaddr + page_offset, len);
171                 seq_write(m, kaddr + page_offset, write_len);
172                 kunmap(page);
173                 put_page(page);
174
175                 /* if strnlen hit a null terminator then we're done */
176                 if (write_len != len)
177                         break;
178
179                 max_len -= len;
180                 page_offset = 0;
181                 page_start_vaddr += PAGE_SIZE;
182         }
183
184         seq_putc(m, ']');
185 }
186
187 static void vma_stop(struct proc_maps_private *priv, struct vm_area_struct *vma)
188 {
189         if (vma && vma != priv->tail_vma) {
190                 struct mm_struct *mm = vma->vm_mm;
191                 release_task_mempolicy(priv);
192                 up_read(&mm->mmap_sem);
193                 mmput(mm);
194         }
195 }
196
197 static void *m_start(struct seq_file *m, loff_t *pos)
198 {
199         struct proc_maps_private *priv = m->private;
200         unsigned long last_addr = m->version;
201         struct mm_struct *mm;
202         struct vm_area_struct *vma, *tail_vma = NULL;
203         loff_t l = *pos;
204
205         /* Clear the per syscall fields in priv */
206         priv->task = NULL;
207         priv->tail_vma = NULL;
208
209         /*
210          * We remember last_addr rather than next_addr to hit with
211          * mmap_cache most of the time. We have zero last_addr at
212          * the beginning and also after lseek. We will have -1 last_addr
213          * after the end of the vmas.
214          */
215
216         if (last_addr == -1UL)
217                 return NULL;
218
219         priv->task = get_pid_task(priv->pid, PIDTYPE_PID);
220         if (!priv->task)
221                 return ERR_PTR(-ESRCH);
222
223         mm = mm_access(priv->task, PTRACE_MODE_READ);
224         if (!mm || IS_ERR(mm))
225                 return mm;
226         down_read(&mm->mmap_sem);
227
228         tail_vma = get_gate_vma(priv->task->mm);
229         priv->tail_vma = tail_vma;
230         hold_task_mempolicy(priv);
231         /* Start with last addr hint */
232         vma = find_vma(mm, last_addr);
233         if (last_addr && vma) {
234                 vma = vma->vm_next;
235                 goto out;
236         }
237
238         /*
239          * Check the vma index is within the range and do
240          * sequential scan until m_index.
241          */
242         vma = NULL;
243         if ((unsigned long)l < mm->map_count) {
244                 vma = mm->mmap;
245                 while (l-- && vma)
246                         vma = vma->vm_next;
247                 goto out;
248         }
249
250         if (l != mm->map_count)
251                 tail_vma = NULL; /* After gate vma */
252
253 out:
254         if (vma)
255                 return vma;
256
257         release_task_mempolicy(priv);
258         /* End of vmas has been reached */
259         m->version = (tail_vma != NULL)? 0: -1UL;
260         up_read(&mm->mmap_sem);
261         mmput(mm);
262         return tail_vma;
263 }
264
265 static void *m_next(struct seq_file *m, void *v, loff_t *pos)
266 {
267         struct proc_maps_private *priv = m->private;
268         struct vm_area_struct *vma = v;
269         struct vm_area_struct *tail_vma = priv->tail_vma;
270
271         (*pos)++;
272         if (vma && (vma != tail_vma) && vma->vm_next)
273                 return vma->vm_next;
274         vma_stop(priv, vma);
275         return (vma != tail_vma)? tail_vma: NULL;
276 }
277
278 static void m_stop(struct seq_file *m, void *v)
279 {
280         struct proc_maps_private *priv = m->private;
281         struct vm_area_struct *vma = v;
282
283         if (!IS_ERR(vma))
284                 vma_stop(priv, vma);
285         if (priv->task)
286                 put_task_struct(priv->task);
287 }
288
289 static int do_maps_open(struct inode *inode, struct file *file,
290                         const struct seq_operations *ops)
291 {
292         struct proc_maps_private *priv;
293         int ret = -ENOMEM;
294         priv = kzalloc(sizeof(*priv), GFP_KERNEL);
295         if (priv) {
296                 priv->pid = proc_pid(inode);
297                 ret = seq_open(file, ops);
298                 if (!ret) {
299                         struct seq_file *m = file->private_data;
300                         m->private = priv;
301                 } else {
302                         kfree(priv);
303                 }
304         }
305         return ret;
306 }
307
308 static void
309 show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid)
310 {
311         struct mm_struct *mm = vma->vm_mm;
312         struct file *file = vma->vm_file;
313         struct proc_maps_private *priv = m->private;
314         struct task_struct *task = priv->task;
315         vm_flags_t flags = vma->vm_flags;
316         unsigned long ino = 0;
317         unsigned long long pgoff = 0;
318         unsigned long start, end;
319         dev_t dev = 0;
320         int len;
321         const char *name = NULL;
322
323         if (file) {
324                 struct inode *inode = file_inode(vma->vm_file);
325                 dev = inode->i_sb->s_dev;
326                 ino = inode->i_ino;
327                 pgoff = ((loff_t)vma->vm_pgoff) << PAGE_SHIFT;
328         }
329
330         /* We don't show the stack guard page in /proc/maps */
331         start = vma->vm_start;
332         if (stack_guard_page_start(vma, start))
333                 start += PAGE_SIZE;
334         end = vma->vm_end;
335         if (stack_guard_page_end(vma, end))
336                 end -= PAGE_SIZE;
337
338         seq_printf(m, "%08lx-%08lx %c%c%c%c %08llx %02x:%02x %lu %n",
339                         start,
340                         end,
341                         flags & VM_READ ? 'r' : '-',
342                         flags & VM_WRITE ? 'w' : '-',
343                         flags & VM_EXEC ? 'x' : '-',
344                         flags & VM_MAYSHARE ? 's' : 'p',
345                         pgoff,
346                         MAJOR(dev), MINOR(dev), ino, &len);
347
348         /*
349          * Print the dentry name for named mappings, and a
350          * special [heap] marker for the heap:
351          */
352         if (file) {
353                 pad_len_spaces(m, len);
354                 seq_path(m, &file->f_path, "\n");
355                 goto done;
356         }
357
358         name = arch_vma_name(vma);
359         if (!name) {
360                 pid_t tid;
361
362                 if (!mm) {
363                         name = "[vdso]";
364                         goto done;
365                 }
366
367                 if (vma->vm_start <= mm->brk &&
368                     vma->vm_end >= mm->start_brk) {
369                         name = "[heap]";
370                         goto done;
371                 }
372
373                 tid = vm_is_stack(task, vma, is_pid);
374
375                 if (tid != 0) {
376                         /*
377                          * Thread stack in /proc/PID/task/TID/maps or
378                          * the main process stack.
379                          */
380                         if (!is_pid || (vma->vm_start <= mm->start_stack &&
381                             vma->vm_end >= mm->start_stack)) {
382                                 name = "[stack]";
383                         } else {
384                                 /* Thread stack in /proc/PID/maps */
385                                 pad_len_spaces(m, len);
386                                 seq_printf(m, "[stack:%d]", tid);
387                         }
388                         goto done;
389                 }
390
391                 if (vma_get_anon_name(vma)) {
392                         pad_len_spaces(m, len);
393                         seq_print_vma_name(m, vma);
394                 }
395         }
396
397 done:
398         if (name) {
399                 pad_len_spaces(m, len);
400                 seq_puts(m, name);
401         }
402         seq_putc(m, '\n');
403 }
404
405 static int show_map(struct seq_file *m, void *v, int is_pid)
406 {
407         struct vm_area_struct *vma = v;
408         struct proc_maps_private *priv = m->private;
409         struct task_struct *task = priv->task;
410
411         show_map_vma(m, vma, is_pid);
412
413         if (m->count < m->size)  /* vma is copied successfully */
414                 m->version = (vma != get_gate_vma(task->mm))
415                         ? vma->vm_start : 0;
416         return 0;
417 }
418
419 static int show_pid_map(struct seq_file *m, void *v)
420 {
421         return show_map(m, v, 1);
422 }
423
424 static int show_tid_map(struct seq_file *m, void *v)
425 {
426         return show_map(m, v, 0);
427 }
428
429 static const struct seq_operations proc_pid_maps_op = {
430         .start  = m_start,
431         .next   = m_next,
432         .stop   = m_stop,
433         .show   = show_pid_map
434 };
435
436 static const struct seq_operations proc_tid_maps_op = {
437         .start  = m_start,
438         .next   = m_next,
439         .stop   = m_stop,
440         .show   = show_tid_map
441 };
442
443 static int pid_maps_open(struct inode *inode, struct file *file)
444 {
445         return do_maps_open(inode, file, &proc_pid_maps_op);
446 }
447
448 static int tid_maps_open(struct inode *inode, struct file *file)
449 {
450         return do_maps_open(inode, file, &proc_tid_maps_op);
451 }
452
453 const struct file_operations proc_pid_maps_operations = {
454         .open           = pid_maps_open,
455         .read           = seq_read,
456         .llseek         = seq_lseek,
457         .release        = seq_release_private,
458 };
459
460 const struct file_operations proc_tid_maps_operations = {
461         .open           = tid_maps_open,
462         .read           = seq_read,
463         .llseek         = seq_lseek,
464         .release        = seq_release_private,
465 };
466
467 /*
468  * Proportional Set Size(PSS): my share of RSS.
469  *
470  * PSS of a process is the count of pages it has in memory, where each
471  * page is divided by the number of processes sharing it.  So if a
472  * process has 1000 pages all to itself, and 1000 shared with one other
473  * process, its PSS will be 1500.
474  *
475  * To keep (accumulated) division errors low, we adopt a 64bit
476  * fixed-point pss counter to minimize division errors. So (pss >>
477  * PSS_SHIFT) would be the real byte count.
478  *
479  * A shift of 12 before division means (assuming 4K page size):
480  *      - 1M 3-user-pages add up to 8KB errors;
481  *      - supports mapcount up to 2^24, or 16M;
482  *      - supports PSS up to 2^52 bytes, or 4PB.
483  */
484 #define PSS_SHIFT 12
485
486 #ifdef CONFIG_PROC_PAGE_MONITOR
487 struct mem_size_stats {
488         struct vm_area_struct *vma;
489         unsigned long resident;
490         unsigned long shared_clean;
491         unsigned long shared_dirty;
492         unsigned long private_clean;
493         unsigned long private_dirty;
494         unsigned long referenced;
495         unsigned long anonymous;
496         unsigned long anonymous_thp;
497         unsigned long swap;
498         unsigned long nonlinear;
499         u64 pss;
500 };
501
502
503 static void smaps_pte_entry(pte_t ptent, unsigned long addr,
504                 unsigned long ptent_size, struct mm_walk *walk)
505 {
506         struct mem_size_stats *mss = walk->private;
507         struct vm_area_struct *vma = mss->vma;
508         pgoff_t pgoff = linear_page_index(vma, addr);
509         struct page *page = NULL;
510         int mapcount;
511
512         if (pte_present(ptent)) {
513                 page = vm_normal_page(vma, addr, ptent);
514         } else if (is_swap_pte(ptent)) {
515                 swp_entry_t swpent = pte_to_swp_entry(ptent);
516
517                 if (!non_swap_entry(swpent))
518                         mss->swap += ptent_size;
519                 else if (is_migration_entry(swpent))
520                         page = migration_entry_to_page(swpent);
521         } else if (pte_file(ptent)) {
522                 if (pte_to_pgoff(ptent) != pgoff)
523                         mss->nonlinear += ptent_size;
524         }
525
526         if (!page)
527                 return;
528
529         if (PageAnon(page))
530                 mss->anonymous += ptent_size;
531
532         if (page->index != pgoff)
533                 mss->nonlinear += ptent_size;
534
535         mss->resident += ptent_size;
536         /* Accumulate the size in pages that have been accessed. */
537         if (pte_young(ptent) || PageReferenced(page))
538                 mss->referenced += ptent_size;
539         mapcount = page_mapcount(page);
540         if (mapcount >= 2) {
541                 if (pte_dirty(ptent) || PageDirty(page))
542                         mss->shared_dirty += ptent_size;
543                 else
544                         mss->shared_clean += ptent_size;
545                 mss->pss += (ptent_size << PSS_SHIFT) / mapcount;
546         } else {
547                 if (pte_dirty(ptent) || PageDirty(page))
548                         mss->private_dirty += ptent_size;
549                 else
550                         mss->private_clean += ptent_size;
551                 mss->pss += (ptent_size << PSS_SHIFT);
552         }
553 }
554
555 static int smaps_pte_range(pmd_t *pmd, unsigned long addr, unsigned long end,
556                            struct mm_walk *walk)
557 {
558         struct mem_size_stats *mss = walk->private;
559         struct vm_area_struct *vma = mss->vma;
560         pte_t *pte;
561         spinlock_t *ptl;
562
563         if (pmd_trans_huge_lock(pmd, vma) == 1) {
564                 smaps_pte_entry(*(pte_t *)pmd, addr, HPAGE_PMD_SIZE, walk);
565                 spin_unlock(&walk->mm->page_table_lock);
566                 mss->anonymous_thp += HPAGE_PMD_SIZE;
567                 return 0;
568         }
569
570         if (pmd_trans_unstable(pmd))
571                 return 0;
572         /*
573          * The mmap_sem held all the way back in m_start() is what
574          * keeps khugepaged out of here and from collapsing things
575          * in here.
576          */
577         pte = pte_offset_map_lock(vma->vm_mm, pmd, addr, &ptl);
578         for (; addr != end; pte++, addr += PAGE_SIZE)
579                 smaps_pte_entry(*pte, addr, PAGE_SIZE, walk);
580         pte_unmap_unlock(pte - 1, ptl);
581         cond_resched();
582         return 0;
583 }
584
585 static void show_smap_vma_flags(struct seq_file *m, struct vm_area_struct *vma)
586 {
587         /*
588          * Don't forget to update Documentation/ on changes.
589          */
590         static const char mnemonics[BITS_PER_LONG][2] = {
591                 /*
592                  * In case if we meet a flag we don't know about.
593                  */
594                 [0 ... (BITS_PER_LONG-1)] = "??",
595
596                 [ilog2(VM_READ)]        = "rd",
597                 [ilog2(VM_WRITE)]       = "wr",
598                 [ilog2(VM_EXEC)]        = "ex",
599                 [ilog2(VM_SHARED)]      = "sh",
600                 [ilog2(VM_MAYREAD)]     = "mr",
601                 [ilog2(VM_MAYWRITE)]    = "mw",
602                 [ilog2(VM_MAYEXEC)]     = "me",
603                 [ilog2(VM_MAYSHARE)]    = "ms",
604                 [ilog2(VM_GROWSDOWN)]   = "gd",
605                 [ilog2(VM_PFNMAP)]      = "pf",
606                 [ilog2(VM_DENYWRITE)]   = "dw",
607                 [ilog2(VM_LOCKED)]      = "lo",
608                 [ilog2(VM_IO)]          = "io",
609                 [ilog2(VM_SEQ_READ)]    = "sr",
610                 [ilog2(VM_RAND_READ)]   = "rr",
611                 [ilog2(VM_DONTCOPY)]    = "dc",
612                 [ilog2(VM_DONTEXPAND)]  = "de",
613                 [ilog2(VM_ACCOUNT)]     = "ac",
614                 [ilog2(VM_NORESERVE)]   = "nr",
615                 [ilog2(VM_HUGETLB)]     = "ht",
616                 [ilog2(VM_NONLINEAR)]   = "nl",
617                 [ilog2(VM_ARCH_1)]      = "ar",
618                 [ilog2(VM_DONTDUMP)]    = "dd",
619                 [ilog2(VM_MIXEDMAP)]    = "mm",
620                 [ilog2(VM_HUGEPAGE)]    = "hg",
621                 [ilog2(VM_NOHUGEPAGE)]  = "nh",
622                 [ilog2(VM_MERGEABLE)]   = "mg",
623         };
624         size_t i;
625
626         seq_puts(m, "VmFlags: ");
627         for (i = 0; i < BITS_PER_LONG; i++) {
628                 if (vma->vm_flags & (1UL << i)) {
629                         seq_printf(m, "%c%c ",
630                                    mnemonics[i][0], mnemonics[i][1]);
631                 }
632         }
633         seq_putc(m, '\n');
634 }
635
636 static int show_smap(struct seq_file *m, void *v, int is_pid)
637 {
638         struct proc_maps_private *priv = m->private;
639         struct task_struct *task = priv->task;
640         struct vm_area_struct *vma = v;
641         struct mem_size_stats mss;
642         struct mm_walk smaps_walk = {
643                 .pmd_entry = smaps_pte_range,
644                 .mm = vma->vm_mm,
645                 .private = &mss,
646         };
647
648         memset(&mss, 0, sizeof mss);
649         mss.vma = vma;
650         /* mmap_sem is held in m_start */
651         if (vma->vm_mm && !is_vm_hugetlb_page(vma))
652                 walk_page_range(vma->vm_start, vma->vm_end, &smaps_walk);
653
654         show_map_vma(m, vma, is_pid);
655
656         seq_printf(m,
657                    "Size:           %8lu kB\n"
658                    "Rss:            %8lu kB\n"
659                    "Pss:            %8lu kB\n"
660                    "Shared_Clean:   %8lu kB\n"
661                    "Shared_Dirty:   %8lu kB\n"
662                    "Private_Clean:  %8lu kB\n"
663                    "Private_Dirty:  %8lu kB\n"
664                    "Referenced:     %8lu kB\n"
665                    "Anonymous:      %8lu kB\n"
666                    "AnonHugePages:  %8lu kB\n"
667                    "Swap:           %8lu kB\n"
668                    "KernelPageSize: %8lu kB\n"
669                    "MMUPageSize:    %8lu kB\n"
670                    "Locked:         %8lu kB\n",
671                    (vma->vm_end - vma->vm_start) >> 10,
672                    mss.resident >> 10,
673                    (unsigned long)(mss.pss >> (10 + PSS_SHIFT)),
674                    mss.shared_clean  >> 10,
675                    mss.shared_dirty  >> 10,
676                    mss.private_clean >> 10,
677                    mss.private_dirty >> 10,
678                    mss.referenced >> 10,
679                    mss.anonymous >> 10,
680                    mss.anonymous_thp >> 10,
681                    mss.swap >> 10,
682                    vma_kernel_pagesize(vma) >> 10,
683                    vma_mmu_pagesize(vma) >> 10,
684                    (vma->vm_flags & VM_LOCKED) ?
685                         (unsigned long)(mss.pss >> (10 + PSS_SHIFT)) : 0);
686
687         if (vma->vm_flags & VM_NONLINEAR)
688                 seq_printf(m, "Nonlinear:      %8lu kB\n",
689                                 mss.nonlinear >> 10);
690
691         show_smap_vma_flags(m, vma);
692
693         if (vma_get_anon_name(vma)) {
694                 seq_puts(m, "Name:           ");
695                 seq_print_vma_name(m, vma);
696                 seq_putc(m, '\n');
697         }
698
699         if (m->count < m->size)  /* vma is copied successfully */
700                 m->version = (vma != get_gate_vma(task->mm))
701                         ? vma->vm_start : 0;
702         return 0;
703 }
704
705 static int show_pid_smap(struct seq_file *m, void *v)
706 {
707         return show_smap(m, v, 1);
708 }
709
710 static int show_tid_smap(struct seq_file *m, void *v)
711 {
712         return show_smap(m, v, 0);
713 }
714
715 static const struct seq_operations proc_pid_smaps_op = {
716         .start  = m_start,
717         .next   = m_next,
718         .stop   = m_stop,
719         .show   = show_pid_smap
720 };
721
722 static const struct seq_operations proc_tid_smaps_op = {
723         .start  = m_start,
724         .next   = m_next,
725         .stop   = m_stop,
726         .show   = show_tid_smap
727 };
728
729 static int pid_smaps_open(struct inode *inode, struct file *file)
730 {
731         return do_maps_open(inode, file, &proc_pid_smaps_op);
732 }
733
734 static int tid_smaps_open(struct inode *inode, struct file *file)
735 {
736         return do_maps_open(inode, file, &proc_tid_smaps_op);
737 }
738
739 const struct file_operations proc_pid_smaps_operations = {
740         .open           = pid_smaps_open,
741         .read           = seq_read,
742         .llseek         = seq_lseek,
743         .release        = seq_release_private,
744 };
745
746 const struct file_operations proc_tid_smaps_operations = {
747         .open           = tid_smaps_open,
748         .read           = seq_read,
749         .llseek         = seq_lseek,
750         .release        = seq_release_private,
751 };
752
753 static int clear_refs_pte_range(pmd_t *pmd, unsigned long addr,
754                                 unsigned long end, struct mm_walk *walk)
755 {
756         struct vm_area_struct *vma = walk->private;
757         pte_t *pte, ptent;
758         spinlock_t *ptl;
759         struct page *page;
760
761         split_huge_page_pmd(vma, addr, pmd);
762         if (pmd_trans_unstable(pmd))
763                 return 0;
764
765         pte = pte_offset_map_lock(vma->vm_mm, pmd, addr, &ptl);
766         for (; addr != end; pte++, addr += PAGE_SIZE) {
767                 ptent = *pte;
768                 if (!pte_present(ptent))
769                         continue;
770
771                 page = vm_normal_page(vma, addr, ptent);
772                 if (!page)
773                         continue;
774
775                 /* Clear accessed and referenced bits. */
776                 ptep_test_and_clear_young(vma, addr, pte);
777                 ClearPageReferenced(page);
778         }
779         pte_unmap_unlock(pte - 1, ptl);
780         cond_resched();
781         return 0;
782 }
783
784 #define CLEAR_REFS_ALL 1
785 #define CLEAR_REFS_ANON 2
786 #define CLEAR_REFS_MAPPED 3
787
788 static ssize_t clear_refs_write(struct file *file, const char __user *buf,
789                                 size_t count, loff_t *ppos)
790 {
791         struct task_struct *task;
792         char buffer[PROC_NUMBUF];
793         struct mm_struct *mm;
794         struct vm_area_struct *vma;
795         int type;
796         int rv;
797
798         memset(buffer, 0, sizeof(buffer));
799         if (count > sizeof(buffer) - 1)
800                 count = sizeof(buffer) - 1;
801         if (copy_from_user(buffer, buf, count))
802                 return -EFAULT;
803         rv = kstrtoint(strstrip(buffer), 10, &type);
804         if (rv < 0)
805                 return rv;
806         if (type < CLEAR_REFS_ALL || type > CLEAR_REFS_MAPPED)
807                 return -EINVAL;
808         task = get_proc_task(file_inode(file));
809         if (!task)
810                 return -ESRCH;
811         mm = get_task_mm(task);
812         if (mm) {
813                 struct mm_walk clear_refs_walk = {
814                         .pmd_entry = clear_refs_pte_range,
815                         .mm = mm,
816                 };
817                 down_read(&mm->mmap_sem);
818                 for (vma = mm->mmap; vma; vma = vma->vm_next) {
819                         clear_refs_walk.private = vma;
820                         if (is_vm_hugetlb_page(vma))
821                                 continue;
822                         /*
823                          * Writing 1 to /proc/pid/clear_refs affects all pages.
824                          *
825                          * Writing 2 to /proc/pid/clear_refs only affects
826                          * Anonymous pages.
827                          *
828                          * Writing 3 to /proc/pid/clear_refs only affects file
829                          * mapped pages.
830                          */
831                         if (type == CLEAR_REFS_ANON && vma->vm_file)
832                                 continue;
833                         if (type == CLEAR_REFS_MAPPED && !vma->vm_file)
834                                 continue;
835                         walk_page_range(vma->vm_start, vma->vm_end,
836                                         &clear_refs_walk);
837                 }
838                 flush_tlb_mm(mm);
839                 up_read(&mm->mmap_sem);
840                 mmput(mm);
841         }
842         put_task_struct(task);
843
844         return count;
845 }
846
847 const struct file_operations proc_clear_refs_operations = {
848         .write          = clear_refs_write,
849         .llseek         = noop_llseek,
850 };
851
852 typedef struct {
853         u64 pme;
854 } pagemap_entry_t;
855
856 struct pagemapread {
857         int pos, len;           /* units: PM_ENTRY_BYTES, not bytes */
858         pagemap_entry_t *buffer;
859 };
860
861 #define PAGEMAP_WALK_SIZE       (PMD_SIZE)
862 #define PAGEMAP_WALK_MASK       (PMD_MASK)
863
864 #define PM_ENTRY_BYTES      sizeof(pagemap_entry_t)
865 #define PM_STATUS_BITS      3
866 #define PM_STATUS_OFFSET    (64 - PM_STATUS_BITS)
867 #define PM_STATUS_MASK      (((1LL << PM_STATUS_BITS) - 1) << PM_STATUS_OFFSET)
868 #define PM_STATUS(nr)       (((nr) << PM_STATUS_OFFSET) & PM_STATUS_MASK)
869 #define PM_PSHIFT_BITS      6
870 #define PM_PSHIFT_OFFSET    (PM_STATUS_OFFSET - PM_PSHIFT_BITS)
871 #define PM_PSHIFT_MASK      (((1LL << PM_PSHIFT_BITS) - 1) << PM_PSHIFT_OFFSET)
872 #define PM_PSHIFT(x)        (((u64) (x) << PM_PSHIFT_OFFSET) & PM_PSHIFT_MASK)
873 #define PM_PFRAME_MASK      ((1LL << PM_PSHIFT_OFFSET) - 1)
874 #define PM_PFRAME(x)        ((x) & PM_PFRAME_MASK)
875
876 #define PM_PRESENT          PM_STATUS(4LL)
877 #define PM_SWAP             PM_STATUS(2LL)
878 #define PM_FILE             PM_STATUS(1LL)
879 #define PM_NOT_PRESENT      PM_PSHIFT(PAGE_SHIFT)
880 #define PM_END_OF_BUFFER    1
881
882 static inline pagemap_entry_t make_pme(u64 val)
883 {
884         return (pagemap_entry_t) { .pme = val };
885 }
886
887 static int add_to_pagemap(unsigned long addr, pagemap_entry_t *pme,
888                           struct pagemapread *pm)
889 {
890         pm->buffer[pm->pos++] = *pme;
891         if (pm->pos >= pm->len)
892                 return PM_END_OF_BUFFER;
893         return 0;
894 }
895
896 static int pagemap_pte_hole(unsigned long start, unsigned long end,
897                                 struct mm_walk *walk)
898 {
899         struct pagemapread *pm = walk->private;
900         unsigned long addr;
901         int err = 0;
902         pagemap_entry_t pme = make_pme(PM_NOT_PRESENT);
903
904         for (addr = start; addr < end; addr += PAGE_SIZE) {
905                 err = add_to_pagemap(addr, &pme, pm);
906                 if (err)
907                         break;
908         }
909         return err;
910 }
911
912 static void pte_to_pagemap_entry(pagemap_entry_t *pme,
913                 struct vm_area_struct *vma, unsigned long addr, pte_t pte)
914 {
915         u64 frame, flags;
916         struct page *page = NULL;
917
918         if (pte_present(pte)) {
919                 frame = pte_pfn(pte);
920                 flags = PM_PRESENT;
921                 page = vm_normal_page(vma, addr, pte);
922         } else if (is_swap_pte(pte)) {
923                 swp_entry_t entry = pte_to_swp_entry(pte);
924
925                 frame = swp_type(entry) |
926                         (swp_offset(entry) << MAX_SWAPFILES_SHIFT);
927                 flags = PM_SWAP;
928                 if (is_migration_entry(entry))
929                         page = migration_entry_to_page(entry);
930         } else {
931                 *pme = make_pme(PM_NOT_PRESENT);
932                 return;
933         }
934
935         if (page && !PageAnon(page))
936                 flags |= PM_FILE;
937
938         *pme = make_pme(PM_PFRAME(frame) | PM_PSHIFT(PAGE_SHIFT) | flags);
939 }
940
941 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
942 static void thp_pmd_to_pagemap_entry(pagemap_entry_t *pme,
943                                         pmd_t pmd, int offset)
944 {
945         /*
946          * Currently pmd for thp is always present because thp can not be
947          * swapped-out, migrated, or HWPOISONed (split in such cases instead.)
948          * This if-check is just to prepare for future implementation.
949          */
950         if (pmd_present(pmd))
951                 *pme = make_pme(PM_PFRAME(pmd_pfn(pmd) + offset)
952                                 | PM_PSHIFT(PAGE_SHIFT) | PM_PRESENT);
953         else
954                 *pme = make_pme(PM_NOT_PRESENT);
955 }
956 #else
957 static inline void thp_pmd_to_pagemap_entry(pagemap_entry_t *pme,
958                                                 pmd_t pmd, int offset)
959 {
960 }
961 #endif
962
963 static int pagemap_pte_range(pmd_t *pmd, unsigned long addr, unsigned long end,
964                              struct mm_walk *walk)
965 {
966         struct vm_area_struct *vma;
967         struct pagemapread *pm = walk->private;
968         pte_t *pte;
969         int err = 0;
970         pagemap_entry_t pme = make_pme(PM_NOT_PRESENT);
971
972         /* find the first VMA at or above 'addr' */
973         vma = find_vma(walk->mm, addr);
974         if (vma && pmd_trans_huge_lock(pmd, vma) == 1) {
975                 for (; addr != end; addr += PAGE_SIZE) {
976                         unsigned long offset;
977
978                         offset = (addr & ~PAGEMAP_WALK_MASK) >>
979                                         PAGE_SHIFT;
980                         thp_pmd_to_pagemap_entry(&pme, *pmd, offset);
981                         err = add_to_pagemap(addr, &pme, pm);
982                         if (err)
983                                 break;
984                 }
985                 spin_unlock(&walk->mm->page_table_lock);
986                 return err;
987         }
988
989         if (pmd_trans_unstable(pmd))
990                 return 0;
991         for (; addr != end; addr += PAGE_SIZE) {
992
993                 /* check to see if we've left 'vma' behind
994                  * and need a new, higher one */
995                 if (vma && (addr >= vma->vm_end)) {
996                         vma = find_vma(walk->mm, addr);
997                         pme = make_pme(PM_NOT_PRESENT);
998                 }
999
1000                 /* check that 'vma' actually covers this address,
1001                  * and that it isn't a huge page vma */
1002                 if (vma && (vma->vm_start <= addr) &&
1003                     !is_vm_hugetlb_page(vma)) {
1004                         pte = pte_offset_map(pmd, addr);
1005                         pte_to_pagemap_entry(&pme, vma, addr, *pte);
1006                         /* unmap before userspace copy */
1007                         pte_unmap(pte);
1008                 }
1009                 err = add_to_pagemap(addr, &pme, pm);
1010                 if (err)
1011                         return err;
1012         }
1013
1014         cond_resched();
1015
1016         return err;
1017 }
1018
1019 #ifdef CONFIG_HUGETLB_PAGE
1020 static void huge_pte_to_pagemap_entry(pagemap_entry_t *pme,
1021                                         pte_t pte, int offset)
1022 {
1023         if (pte_present(pte))
1024                 *pme = make_pme(PM_PFRAME(pte_pfn(pte) + offset)
1025                                 | PM_PSHIFT(PAGE_SHIFT) | PM_PRESENT);
1026         else
1027                 *pme = make_pme(PM_NOT_PRESENT);
1028 }
1029
1030 /* This function walks within one hugetlb entry in the single call */
1031 static int pagemap_hugetlb_range(pte_t *pte, unsigned long hmask,
1032                                  unsigned long addr, unsigned long end,
1033                                  struct mm_walk *walk)
1034 {
1035         struct pagemapread *pm = walk->private;
1036         int err = 0;
1037         pagemap_entry_t pme;
1038
1039         for (; addr != end; addr += PAGE_SIZE) {
1040                 int offset = (addr & ~hmask) >> PAGE_SHIFT;
1041                 huge_pte_to_pagemap_entry(&pme, *pte, offset);
1042                 err = add_to_pagemap(addr, &pme, pm);
1043                 if (err)
1044                         return err;
1045         }
1046
1047         cond_resched();
1048
1049         return err;
1050 }
1051 #endif /* HUGETLB_PAGE */
1052
1053 /*
1054  * /proc/pid/pagemap - an array mapping virtual pages to pfns
1055  *
1056  * For each page in the address space, this file contains one 64-bit entry
1057  * consisting of the following:
1058  *
1059  * Bits 0-54  page frame number (PFN) if present
1060  * Bits 0-4   swap type if swapped
1061  * Bits 5-54  swap offset if swapped
1062  * Bits 55-60 page shift (page size = 1<<page shift)
1063  * Bit  61    page is file-page or shared-anon
1064  * Bit  62    page swapped
1065  * Bit  63    page present
1066  *
1067  * If the page is not present but in swap, then the PFN contains an
1068  * encoding of the swap file number and the page's offset into the
1069  * swap. Unmapped pages return a null PFN. This allows determining
1070  * precisely which pages are mapped (or in swap) and comparing mapped
1071  * pages between processes.
1072  *
1073  * Efficient users of this interface will use /proc/pid/maps to
1074  * determine which areas of memory are actually mapped and llseek to
1075  * skip over unmapped regions.
1076  */
1077 static ssize_t pagemap_read(struct file *file, char __user *buf,
1078                             size_t count, loff_t *ppos)
1079 {
1080         struct task_struct *task = get_proc_task(file_inode(file));
1081         struct mm_struct *mm;
1082         struct pagemapread pm;
1083         int ret = -ESRCH;
1084         struct mm_walk pagemap_walk = {};
1085         unsigned long src;
1086         unsigned long svpfn;
1087         unsigned long start_vaddr;
1088         unsigned long end_vaddr;
1089         int copied = 0;
1090
1091         if (!task)
1092                 goto out;
1093
1094         ret = -EINVAL;
1095         /* file position must be aligned */
1096         if ((*ppos % PM_ENTRY_BYTES) || (count % PM_ENTRY_BYTES))
1097                 goto out_task;
1098
1099         ret = 0;
1100         if (!count)
1101                 goto out_task;
1102
1103         pm.len = (PAGEMAP_WALK_SIZE >> PAGE_SHIFT);
1104         pm.buffer = kmalloc(pm.len * PM_ENTRY_BYTES, GFP_TEMPORARY);
1105         ret = -ENOMEM;
1106         if (!pm.buffer)
1107                 goto out_task;
1108
1109         mm = mm_access(task, PTRACE_MODE_READ);
1110         ret = PTR_ERR(mm);
1111         if (!mm || IS_ERR(mm))
1112                 goto out_free;
1113
1114         pagemap_walk.pmd_entry = pagemap_pte_range;
1115         pagemap_walk.pte_hole = pagemap_pte_hole;
1116 #ifdef CONFIG_HUGETLB_PAGE
1117         pagemap_walk.hugetlb_entry = pagemap_hugetlb_range;
1118 #endif
1119         pagemap_walk.mm = mm;
1120         pagemap_walk.private = &pm;
1121
1122         src = *ppos;
1123         svpfn = src / PM_ENTRY_BYTES;
1124         start_vaddr = svpfn << PAGE_SHIFT;
1125         end_vaddr = TASK_SIZE_OF(task);
1126
1127         /* watch out for wraparound */
1128         if (svpfn > TASK_SIZE_OF(task) >> PAGE_SHIFT)
1129                 start_vaddr = end_vaddr;
1130
1131         /*
1132          * The odds are that this will stop walking way
1133          * before end_vaddr, because the length of the
1134          * user buffer is tracked in "pm", and the walk
1135          * will stop when we hit the end of the buffer.
1136          */
1137         ret = 0;
1138         while (count && (start_vaddr < end_vaddr)) {
1139                 int len;
1140                 unsigned long end;
1141
1142                 pm.pos = 0;
1143                 end = (start_vaddr + PAGEMAP_WALK_SIZE) & PAGEMAP_WALK_MASK;
1144                 /* overflow ? */
1145                 if (end < start_vaddr || end > end_vaddr)
1146                         end = end_vaddr;
1147                 down_read(&mm->mmap_sem);
1148                 ret = walk_page_range(start_vaddr, end, &pagemap_walk);
1149                 up_read(&mm->mmap_sem);
1150                 start_vaddr = end;
1151
1152                 len = min(count, PM_ENTRY_BYTES * pm.pos);
1153                 if (copy_to_user(buf, pm.buffer, len)) {
1154                         ret = -EFAULT;
1155                         goto out_mm;
1156                 }
1157                 copied += len;
1158                 buf += len;
1159                 count -= len;
1160         }
1161         *ppos += copied;
1162         if (!ret || ret == PM_END_OF_BUFFER)
1163                 ret = copied;
1164
1165 out_mm:
1166         mmput(mm);
1167 out_free:
1168         kfree(pm.buffer);
1169 out_task:
1170         put_task_struct(task);
1171 out:
1172         return ret;
1173 }
1174
1175 const struct file_operations proc_pagemap_operations = {
1176         .llseek         = mem_lseek, /* borrow this */
1177         .read           = pagemap_read,
1178 };
1179 #endif /* CONFIG_PROC_PAGE_MONITOR */
1180
1181 #ifdef CONFIG_NUMA
1182
1183 struct numa_maps {
1184         struct vm_area_struct *vma;
1185         unsigned long pages;
1186         unsigned long anon;
1187         unsigned long active;
1188         unsigned long writeback;
1189         unsigned long mapcount_max;
1190         unsigned long dirty;
1191         unsigned long swapcache;
1192         unsigned long node[MAX_NUMNODES];
1193 };
1194
1195 struct numa_maps_private {
1196         struct proc_maps_private proc_maps;
1197         struct numa_maps md;
1198 };
1199
1200 static void gather_stats(struct page *page, struct numa_maps *md, int pte_dirty,
1201                         unsigned long nr_pages)
1202 {
1203         int count = page_mapcount(page);
1204
1205         md->pages += nr_pages;
1206         if (pte_dirty || PageDirty(page))
1207                 md->dirty += nr_pages;
1208
1209         if (PageSwapCache(page))
1210                 md->swapcache += nr_pages;
1211
1212         if (PageActive(page) || PageUnevictable(page))
1213                 md->active += nr_pages;
1214
1215         if (PageWriteback(page))
1216                 md->writeback += nr_pages;
1217
1218         if (PageAnon(page))
1219                 md->anon += nr_pages;
1220
1221         if (count > md->mapcount_max)
1222                 md->mapcount_max = count;
1223
1224         md->node[page_to_nid(page)] += nr_pages;
1225 }
1226
1227 static struct page *can_gather_numa_stats(pte_t pte, struct vm_area_struct *vma,
1228                 unsigned long addr)
1229 {
1230         struct page *page;
1231         int nid;
1232
1233         if (!pte_present(pte))
1234                 return NULL;
1235
1236         page = vm_normal_page(vma, addr, pte);
1237         if (!page)
1238                 return NULL;
1239
1240         if (PageReserved(page))
1241                 return NULL;
1242
1243         nid = page_to_nid(page);
1244         if (!node_isset(nid, node_states[N_MEMORY]))
1245                 return NULL;
1246
1247         return page;
1248 }
1249
1250 static int gather_pte_stats(pmd_t *pmd, unsigned long addr,
1251                 unsigned long end, struct mm_walk *walk)
1252 {
1253         struct numa_maps *md;
1254         spinlock_t *ptl;
1255         pte_t *orig_pte;
1256         pte_t *pte;
1257
1258         md = walk->private;
1259
1260         if (pmd_trans_huge_lock(pmd, md->vma) == 1) {
1261                 pte_t huge_pte = *(pte_t *)pmd;
1262                 struct page *page;
1263
1264                 page = can_gather_numa_stats(huge_pte, md->vma, addr);
1265                 if (page)
1266                         gather_stats(page, md, pte_dirty(huge_pte),
1267                                      HPAGE_PMD_SIZE/PAGE_SIZE);
1268                 spin_unlock(&walk->mm->page_table_lock);
1269                 return 0;
1270         }
1271
1272         if (pmd_trans_unstable(pmd))
1273                 return 0;
1274         orig_pte = pte = pte_offset_map_lock(walk->mm, pmd, addr, &ptl);
1275         do {
1276                 struct page *page = can_gather_numa_stats(*pte, md->vma, addr);
1277                 if (!page)
1278                         continue;
1279                 gather_stats(page, md, pte_dirty(*pte), 1);
1280
1281         } while (pte++, addr += PAGE_SIZE, addr != end);
1282         pte_unmap_unlock(orig_pte, ptl);
1283         return 0;
1284 }
1285 #ifdef CONFIG_HUGETLB_PAGE
1286 static int gather_hugetbl_stats(pte_t *pte, unsigned long hmask,
1287                 unsigned long addr, unsigned long end, struct mm_walk *walk)
1288 {
1289         struct numa_maps *md;
1290         struct page *page;
1291
1292         if (pte_none(*pte))
1293                 return 0;
1294
1295         page = pte_page(*pte);
1296         if (!page)
1297                 return 0;
1298
1299         md = walk->private;
1300         gather_stats(page, md, pte_dirty(*pte), 1);
1301         return 0;
1302 }
1303
1304 #else
1305 static int gather_hugetbl_stats(pte_t *pte, unsigned long hmask,
1306                 unsigned long addr, unsigned long end, struct mm_walk *walk)
1307 {
1308         return 0;
1309 }
1310 #endif
1311
1312 /*
1313  * Display pages allocated per node and memory policy via /proc.
1314  */
1315 static int show_numa_map(struct seq_file *m, void *v, int is_pid)
1316 {
1317         struct numa_maps_private *numa_priv = m->private;
1318         struct proc_maps_private *proc_priv = &numa_priv->proc_maps;
1319         struct vm_area_struct *vma = v;
1320         struct numa_maps *md = &numa_priv->md;
1321         struct file *file = vma->vm_file;
1322         struct task_struct *task = proc_priv->task;
1323         struct mm_struct *mm = vma->vm_mm;
1324         struct mm_walk walk = {};
1325         struct mempolicy *pol;
1326         int n;
1327         char buffer[50];
1328
1329         if (!mm)
1330                 return 0;
1331
1332         /* Ensure we start with an empty set of numa_maps statistics. */
1333         memset(md, 0, sizeof(*md));
1334
1335         md->vma = vma;
1336
1337         walk.hugetlb_entry = gather_hugetbl_stats;
1338         walk.pmd_entry = gather_pte_stats;
1339         walk.private = md;
1340         walk.mm = mm;
1341
1342         pol = get_vma_policy(task, vma, vma->vm_start);
1343         mpol_to_str(buffer, sizeof(buffer), pol);
1344         mpol_cond_put(pol);
1345
1346         seq_printf(m, "%08lx %s", vma->vm_start, buffer);
1347
1348         if (file) {
1349                 seq_printf(m, " file=");
1350                 seq_path(m, &file->f_path, "\n\t= ");
1351         } else if (vma->vm_start <= mm->brk && vma->vm_end >= mm->start_brk) {
1352                 seq_printf(m, " heap");
1353         } else {
1354                 pid_t tid = vm_is_stack(task, vma, is_pid);
1355                 if (tid != 0) {
1356                         /*
1357                          * Thread stack in /proc/PID/task/TID/maps or
1358                          * the main process stack.
1359                          */
1360                         if (!is_pid || (vma->vm_start <= mm->start_stack &&
1361                             vma->vm_end >= mm->start_stack))
1362                                 seq_printf(m, " stack");
1363                         else
1364                                 seq_printf(m, " stack:%d", tid);
1365                 }
1366         }
1367
1368         if (is_vm_hugetlb_page(vma))
1369                 seq_printf(m, " huge");
1370
1371         walk_page_range(vma->vm_start, vma->vm_end, &walk);
1372
1373         if (!md->pages)
1374                 goto out;
1375
1376         if (md->anon)
1377                 seq_printf(m, " anon=%lu", md->anon);
1378
1379         if (md->dirty)
1380                 seq_printf(m, " dirty=%lu", md->dirty);
1381
1382         if (md->pages != md->anon && md->pages != md->dirty)
1383                 seq_printf(m, " mapped=%lu", md->pages);
1384
1385         if (md->mapcount_max > 1)
1386                 seq_printf(m, " mapmax=%lu", md->mapcount_max);
1387
1388         if (md->swapcache)
1389                 seq_printf(m, " swapcache=%lu", md->swapcache);
1390
1391         if (md->active < md->pages && !is_vm_hugetlb_page(vma))
1392                 seq_printf(m, " active=%lu", md->active);
1393
1394         if (md->writeback)
1395                 seq_printf(m, " writeback=%lu", md->writeback);
1396
1397         for_each_node_state(n, N_MEMORY)
1398                 if (md->node[n])
1399                         seq_printf(m, " N%d=%lu", n, md->node[n]);
1400 out:
1401         seq_putc(m, '\n');
1402
1403         if (m->count < m->size)
1404                 m->version = (vma != proc_priv->tail_vma) ? vma->vm_start : 0;
1405         return 0;
1406 }
1407
1408 static int show_pid_numa_map(struct seq_file *m, void *v)
1409 {
1410         return show_numa_map(m, v, 1);
1411 }
1412
1413 static int show_tid_numa_map(struct seq_file *m, void *v)
1414 {
1415         return show_numa_map(m, v, 0);
1416 }
1417
1418 static const struct seq_operations proc_pid_numa_maps_op = {
1419         .start  = m_start,
1420         .next   = m_next,
1421         .stop   = m_stop,
1422         .show   = show_pid_numa_map,
1423 };
1424
1425 static const struct seq_operations proc_tid_numa_maps_op = {
1426         .start  = m_start,
1427         .next   = m_next,
1428         .stop   = m_stop,
1429         .show   = show_tid_numa_map,
1430 };
1431
1432 static int numa_maps_open(struct inode *inode, struct file *file,
1433                           const struct seq_operations *ops)
1434 {
1435         struct numa_maps_private *priv;
1436         int ret = -ENOMEM;
1437         priv = kzalloc(sizeof(*priv), GFP_KERNEL);
1438         if (priv) {
1439                 priv->proc_maps.pid = proc_pid(inode);
1440                 ret = seq_open(file, ops);
1441                 if (!ret) {
1442                         struct seq_file *m = file->private_data;
1443                         m->private = priv;
1444                 } else {
1445                         kfree(priv);
1446                 }
1447         }
1448         return ret;
1449 }
1450
1451 static int pid_numa_maps_open(struct inode *inode, struct file *file)
1452 {
1453         return numa_maps_open(inode, file, &proc_pid_numa_maps_op);
1454 }
1455
1456 static int tid_numa_maps_open(struct inode *inode, struct file *file)
1457 {
1458         return numa_maps_open(inode, file, &proc_tid_numa_maps_op);
1459 }
1460
1461 const struct file_operations proc_pid_numa_maps_operations = {
1462         .open           = pid_numa_maps_open,
1463         .read           = seq_read,
1464         .llseek         = seq_lseek,
1465         .release        = seq_release_private,
1466 };
1467
1468 const struct file_operations proc_tid_numa_maps_operations = {
1469         .open           = tid_numa_maps_open,
1470         .read           = seq_read,
1471         .llseek         = seq_lseek,
1472         .release        = seq_release_private,
1473 };
1474 #endif /* CONFIG_NUMA */