Linux 3.2.81
[pandora-kernel.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 #include <linux/security.h>
15
16 #include <asm/elf.h>
17 #include <asm/uaccess.h>
18 #include <asm/tlbflush.h>
19 #include "internal.h"
20
21 void task_mem(struct seq_file *m, struct mm_struct *mm)
22 {
23         unsigned long data, text, lib, swap;
24         unsigned long hiwater_vm, total_vm, hiwater_rss, total_rss;
25
26         /*
27          * Note: to minimize their overhead, mm maintains hiwater_vm and
28          * hiwater_rss only when about to *lower* total_vm or rss.  Any
29          * collector of these hiwater stats must therefore get total_vm
30          * and rss too, which will usually be the higher.  Barriers? not
31          * worth the effort, such snapshots can always be inconsistent.
32          */
33         hiwater_vm = total_vm = mm->total_vm;
34         if (hiwater_vm < mm->hiwater_vm)
35                 hiwater_vm = mm->hiwater_vm;
36         hiwater_rss = total_rss = get_mm_rss(mm);
37         if (hiwater_rss < mm->hiwater_rss)
38                 hiwater_rss = mm->hiwater_rss;
39
40         data = mm->total_vm - mm->shared_vm - mm->stack_vm;
41         text = (PAGE_ALIGN(mm->end_code) - (mm->start_code & PAGE_MASK)) >> 10;
42         lib = (mm->exec_vm << (PAGE_SHIFT-10)) - text;
43         swap = get_mm_counter(mm, MM_SWAPENTS);
44         seq_printf(m,
45                 "VmPeak:\t%8lu kB\n"
46                 "VmSize:\t%8lu kB\n"
47                 "VmLck:\t%8lu kB\n"
48                 "VmPin:\t%8lu kB\n"
49                 "VmHWM:\t%8lu kB\n"
50                 "VmRSS:\t%8lu kB\n"
51                 "VmData:\t%8lu kB\n"
52                 "VmStk:\t%8lu kB\n"
53                 "VmExe:\t%8lu kB\n"
54                 "VmLib:\t%8lu kB\n"
55                 "VmPTE:\t%8lu kB\n"
56                 "VmSwap:\t%8lu kB\n",
57                 hiwater_vm << (PAGE_SHIFT-10),
58                 (total_vm - mm->reserved_vm) << (PAGE_SHIFT-10),
59                 mm->locked_vm << (PAGE_SHIFT-10),
60                 mm->pinned_vm << (PAGE_SHIFT-10),
61                 hiwater_rss << (PAGE_SHIFT-10),
62                 total_rss << (PAGE_SHIFT-10),
63                 data << (PAGE_SHIFT-10),
64                 mm->stack_vm << (PAGE_SHIFT-10), text, lib,
65                 (PTRS_PER_PTE*sizeof(pte_t)*mm->nr_ptes) >> 10,
66                 swap << (PAGE_SHIFT-10));
67 }
68
69 unsigned long task_vsize(struct mm_struct *mm)
70 {
71         return PAGE_SIZE * mm->total_vm;
72 }
73
74 unsigned long task_statm(struct mm_struct *mm,
75                          unsigned long *shared, unsigned long *text,
76                          unsigned long *data, unsigned long *resident)
77 {
78         *shared = get_mm_counter(mm, MM_FILEPAGES);
79         *text = (PAGE_ALIGN(mm->end_code) - (mm->start_code & PAGE_MASK))
80                                                                 >> PAGE_SHIFT;
81         *data = mm->total_vm - mm->shared_vm;
82         *resident = *shared + get_mm_counter(mm, MM_ANONPAGES);
83         return mm->total_vm;
84 }
85
86 static void pad_len_spaces(struct seq_file *m, int len)
87 {
88         len = 25 + sizeof(void*) * 6 - len;
89         if (len < 1)
90                 len = 1;
91         seq_printf(m, "%*c", len, ' ');
92 }
93
94 static void vma_stop(struct proc_maps_private *priv, struct vm_area_struct *vma)
95 {
96         if (vma && vma != priv->tail_vma) {
97                 struct mm_struct *mm = vma->vm_mm;
98                 up_read(&mm->mmap_sem);
99                 mmput(mm);
100         }
101 }
102
103 static void *m_start(struct seq_file *m, loff_t *pos)
104 {
105         struct proc_maps_private *priv = m->private;
106         unsigned long last_addr = m->version;
107         struct mm_struct *mm;
108         struct vm_area_struct *vma, *tail_vma = NULL;
109         loff_t l = *pos;
110
111         /* Clear the per syscall fields in priv */
112         priv->task = NULL;
113         priv->tail_vma = NULL;
114
115         /*
116          * We remember last_addr rather than next_addr to hit with
117          * mmap_cache most of the time. We have zero last_addr at
118          * the beginning and also after lseek. We will have -1 last_addr
119          * after the end of the vmas.
120          */
121
122         if (last_addr == -1UL)
123                 return NULL;
124
125         priv->task = get_pid_task(priv->pid, PIDTYPE_PID);
126         if (!priv->task)
127                 return ERR_PTR(-ESRCH);
128
129         mm = mm_for_maps(priv->task);
130         if (!mm || IS_ERR(mm))
131                 return mm;
132         down_read(&mm->mmap_sem);
133
134         tail_vma = get_gate_vma(priv->task->mm);
135         priv->tail_vma = tail_vma;
136
137         /* Start with last addr hint */
138         vma = find_vma(mm, last_addr);
139         if (last_addr && vma) {
140                 vma = vma->vm_next;
141                 goto out;
142         }
143
144         /*
145          * Check the vma index is within the range and do
146          * sequential scan until m_index.
147          */
148         vma = NULL;
149         if ((unsigned long)l < mm->map_count) {
150                 vma = mm->mmap;
151                 while (l-- && vma)
152                         vma = vma->vm_next;
153                 goto out;
154         }
155
156         if (l != mm->map_count)
157                 tail_vma = NULL; /* After gate vma */
158
159 out:
160         if (vma)
161                 return vma;
162
163         /* End of vmas has been reached */
164         m->version = (tail_vma != NULL)? 0: -1UL;
165         up_read(&mm->mmap_sem);
166         mmput(mm);
167         return tail_vma;
168 }
169
170 static void *m_next(struct seq_file *m, void *v, loff_t *pos)
171 {
172         struct proc_maps_private *priv = m->private;
173         struct vm_area_struct *vma = v;
174         struct vm_area_struct *tail_vma = priv->tail_vma;
175
176         (*pos)++;
177         if (vma && (vma != tail_vma) && vma->vm_next)
178                 return vma->vm_next;
179         vma_stop(priv, vma);
180         return (vma != tail_vma)? tail_vma: NULL;
181 }
182
183 static void m_stop(struct seq_file *m, void *v)
184 {
185         struct proc_maps_private *priv = m->private;
186         struct vm_area_struct *vma = v;
187
188         if (!IS_ERR(vma))
189                 vma_stop(priv, vma);
190         if (priv->task)
191                 put_task_struct(priv->task);
192 }
193
194 static int do_maps_open(struct inode *inode, struct file *file,
195                         const struct seq_operations *ops)
196 {
197         struct proc_maps_private *priv;
198         int ret = -ENOMEM;
199         priv = kzalloc(sizeof(*priv), GFP_KERNEL);
200         if (priv) {
201                 priv->pid = proc_pid(inode);
202                 ret = seq_open(file, ops);
203                 if (!ret) {
204                         struct seq_file *m = file->private_data;
205                         m->private = priv;
206                 } else {
207                         kfree(priv);
208                 }
209         }
210         return ret;
211 }
212
213 static void show_map_vma(struct seq_file *m, struct vm_area_struct *vma)
214 {
215         struct mm_struct *mm = vma->vm_mm;
216         struct file *file = vma->vm_file;
217         vm_flags_t flags = vma->vm_flags;
218         unsigned long ino = 0;
219         unsigned long long pgoff = 0;
220         unsigned long start, end;
221         dev_t dev = 0;
222         int len;
223
224         if (file) {
225                 struct inode *inode = vma->vm_file->f_path.dentry->d_inode;
226                 dev = inode->i_sb->s_dev;
227                 ino = inode->i_ino;
228                 pgoff = ((loff_t)vma->vm_pgoff) << PAGE_SHIFT;
229         }
230
231         /* We don't show the stack guard page in /proc/maps */
232         start = vma->vm_start;
233         if (stack_guard_page_start(vma, start))
234                 start += PAGE_SIZE;
235         end = vma->vm_end;
236         if (stack_guard_page_end(vma, end))
237                 end -= PAGE_SIZE;
238
239         seq_printf(m, "%08lx-%08lx %c%c%c%c %08llx %02x:%02x %lu %n",
240                         start,
241                         end,
242                         flags & VM_READ ? 'r' : '-',
243                         flags & VM_WRITE ? 'w' : '-',
244                         flags & VM_EXEC ? 'x' : '-',
245                         flags & VM_MAYSHARE ? 's' : 'p',
246                         pgoff,
247                         MAJOR(dev), MINOR(dev), ino, &len);
248
249         /*
250          * Print the dentry name for named mappings, and a
251          * special [heap] marker for the heap:
252          */
253         if (file) {
254                 pad_len_spaces(m, len);
255                 seq_path(m, &file->f_path, "\n");
256         } else {
257                 const char *name = arch_vma_name(vma);
258                 if (!name) {
259                         if (mm) {
260                                 if (vma->vm_start <= mm->brk &&
261                                                 vma->vm_end >= mm->start_brk) {
262                                         name = "[heap]";
263                                 } else if (vma->vm_start <= mm->start_stack &&
264                                            vma->vm_end >= mm->start_stack) {
265                                         name = "[stack]";
266                                 }
267                         } else {
268                                 name = "[vdso]";
269                         }
270                 }
271                 if (name) {
272                         pad_len_spaces(m, len);
273                         seq_puts(m, name);
274                 }
275         }
276         seq_putc(m, '\n');
277 }
278
279 static int show_map(struct seq_file *m, void *v)
280 {
281         struct vm_area_struct *vma = v;
282         struct proc_maps_private *priv = m->private;
283         struct task_struct *task = priv->task;
284
285         show_map_vma(m, vma);
286
287         if (m->count < m->size)  /* vma is copied successfully */
288                 m->version = (vma != get_gate_vma(task->mm))
289                         ? vma->vm_start : 0;
290         return 0;
291 }
292
293 static const struct seq_operations proc_pid_maps_op = {
294         .start  = m_start,
295         .next   = m_next,
296         .stop   = m_stop,
297         .show   = show_map
298 };
299
300 static int maps_open(struct inode *inode, struct file *file)
301 {
302         return do_maps_open(inode, file, &proc_pid_maps_op);
303 }
304
305 const struct file_operations proc_maps_operations = {
306         .open           = maps_open,
307         .read           = seq_read,
308         .llseek         = seq_lseek,
309         .release        = seq_release_private,
310 };
311
312 /*
313  * Proportional Set Size(PSS): my share of RSS.
314  *
315  * PSS of a process is the count of pages it has in memory, where each
316  * page is divided by the number of processes sharing it.  So if a
317  * process has 1000 pages all to itself, and 1000 shared with one other
318  * process, its PSS will be 1500.
319  *
320  * To keep (accumulated) division errors low, we adopt a 64bit
321  * fixed-point pss counter to minimize division errors. So (pss >>
322  * PSS_SHIFT) would be the real byte count.
323  *
324  * A shift of 12 before division means (assuming 4K page size):
325  *      - 1M 3-user-pages add up to 8KB errors;
326  *      - supports mapcount up to 2^24, or 16M;
327  *      - supports PSS up to 2^52 bytes, or 4PB.
328  */
329 #define PSS_SHIFT 12
330
331 #ifdef CONFIG_PROC_PAGE_MONITOR
332 struct mem_size_stats {
333         struct vm_area_struct *vma;
334         unsigned long resident;
335         unsigned long shared_clean;
336         unsigned long shared_dirty;
337         unsigned long private_clean;
338         unsigned long private_dirty;
339         unsigned long referenced;
340         unsigned long anonymous;
341         unsigned long anonymous_thp;
342         unsigned long swap;
343         u64 pss;
344 };
345
346
347 static void smaps_pte_entry(pte_t ptent, unsigned long addr,
348                 unsigned long ptent_size, struct mm_walk *walk)
349 {
350         struct mem_size_stats *mss = walk->private;
351         struct vm_area_struct *vma = mss->vma;
352         struct page *page;
353         int mapcount;
354
355         if (is_swap_pte(ptent)) {
356                 mss->swap += ptent_size;
357                 return;
358         }
359
360         if (!pte_present(ptent))
361                 return;
362
363         page = vm_normal_page(vma, addr, ptent);
364         if (!page)
365                 return;
366
367         if (PageAnon(page))
368                 mss->anonymous += ptent_size;
369
370         mss->resident += ptent_size;
371         /* Accumulate the size in pages that have been accessed. */
372         if (pte_young(ptent) || PageReferenced(page))
373                 mss->referenced += ptent_size;
374         mapcount = page_mapcount(page);
375         if (mapcount >= 2) {
376                 if (pte_dirty(ptent) || PageDirty(page))
377                         mss->shared_dirty += ptent_size;
378                 else
379                         mss->shared_clean += ptent_size;
380                 mss->pss += (ptent_size << PSS_SHIFT) / mapcount;
381         } else {
382                 if (pte_dirty(ptent) || PageDirty(page))
383                         mss->private_dirty += ptent_size;
384                 else
385                         mss->private_clean += ptent_size;
386                 mss->pss += (ptent_size << PSS_SHIFT);
387         }
388 }
389
390 static int smaps_pte_range(pmd_t *pmd, unsigned long addr, unsigned long end,
391                            struct mm_walk *walk)
392 {
393         struct mem_size_stats *mss = walk->private;
394         struct vm_area_struct *vma = mss->vma;
395         pte_t *pte;
396         spinlock_t *ptl;
397
398         spin_lock(&walk->mm->page_table_lock);
399         if (pmd_trans_huge(*pmd)) {
400                 if (pmd_trans_splitting(*pmd)) {
401                         spin_unlock(&walk->mm->page_table_lock);
402                         wait_split_huge_page(vma->anon_vma, pmd);
403                 } else {
404                         smaps_pte_entry(*(pte_t *)pmd, addr,
405                                         HPAGE_PMD_SIZE, walk);
406                         spin_unlock(&walk->mm->page_table_lock);
407                         mss->anonymous_thp += HPAGE_PMD_SIZE;
408                         return 0;
409                 }
410         } else {
411                 spin_unlock(&walk->mm->page_table_lock);
412         }
413
414         if (pmd_trans_unstable(pmd))
415                 return 0;
416         /*
417          * The mmap_sem held all the way back in m_start() is what
418          * keeps khugepaged out of here and from collapsing things
419          * in here.
420          */
421         pte = pte_offset_map_lock(vma->vm_mm, pmd, addr, &ptl);
422         for (; addr != end; pte++, addr += PAGE_SIZE)
423                 smaps_pte_entry(*pte, addr, PAGE_SIZE, walk);
424         pte_unmap_unlock(pte - 1, ptl);
425         cond_resched();
426         return 0;
427 }
428
429 static int show_smap(struct seq_file *m, void *v)
430 {
431         struct proc_maps_private *priv = m->private;
432         struct task_struct *task = priv->task;
433         struct vm_area_struct *vma = v;
434         struct mem_size_stats mss;
435         struct mm_walk smaps_walk = {
436                 .pmd_entry = smaps_pte_range,
437                 .mm = vma->vm_mm,
438                 .private = &mss,
439         };
440
441         memset(&mss, 0, sizeof mss);
442         mss.vma = vma;
443         /* mmap_sem is held in m_start */
444         if (vma->vm_mm && !is_vm_hugetlb_page(vma))
445                 walk_page_range(vma->vm_start, vma->vm_end, &smaps_walk);
446
447         show_map_vma(m, vma);
448
449         seq_printf(m,
450                    "Size:           %8lu kB\n"
451                    "Rss:            %8lu kB\n"
452                    "Pss:            %8lu kB\n"
453                    "Shared_Clean:   %8lu kB\n"
454                    "Shared_Dirty:   %8lu kB\n"
455                    "Private_Clean:  %8lu kB\n"
456                    "Private_Dirty:  %8lu kB\n"
457                    "Referenced:     %8lu kB\n"
458                    "Anonymous:      %8lu kB\n"
459                    "AnonHugePages:  %8lu kB\n"
460                    "Swap:           %8lu kB\n"
461                    "KernelPageSize: %8lu kB\n"
462                    "MMUPageSize:    %8lu kB\n"
463                    "Locked:         %8lu kB\n",
464                    (vma->vm_end - vma->vm_start) >> 10,
465                    mss.resident >> 10,
466                    (unsigned long)(mss.pss >> (10 + PSS_SHIFT)),
467                    mss.shared_clean  >> 10,
468                    mss.shared_dirty  >> 10,
469                    mss.private_clean >> 10,
470                    mss.private_dirty >> 10,
471                    mss.referenced >> 10,
472                    mss.anonymous >> 10,
473                    mss.anonymous_thp >> 10,
474                    mss.swap >> 10,
475                    vma_kernel_pagesize(vma) >> 10,
476                    vma_mmu_pagesize(vma) >> 10,
477                    (vma->vm_flags & VM_LOCKED) ?
478                         (unsigned long)(mss.pss >> (10 + PSS_SHIFT)) : 0);
479
480         if (m->count < m->size)  /* vma is copied successfully */
481                 m->version = (vma != get_gate_vma(task->mm))
482                         ? vma->vm_start : 0;
483         return 0;
484 }
485
486 static const struct seq_operations proc_pid_smaps_op = {
487         .start  = m_start,
488         .next   = m_next,
489         .stop   = m_stop,
490         .show   = show_smap
491 };
492
493 static int smaps_open(struct inode *inode, struct file *file)
494 {
495         return do_maps_open(inode, file, &proc_pid_smaps_op);
496 }
497
498 const struct file_operations proc_smaps_operations = {
499         .open           = smaps_open,
500         .read           = seq_read,
501         .llseek         = seq_lseek,
502         .release        = seq_release_private,
503 };
504
505 static int clear_refs_pte_range(pmd_t *pmd, unsigned long addr,
506                                 unsigned long end, struct mm_walk *walk)
507 {
508         struct vm_area_struct *vma = walk->private;
509         pte_t *pte, ptent;
510         spinlock_t *ptl;
511         struct page *page;
512
513         split_huge_page_pmd(walk->mm, pmd);
514         if (pmd_trans_unstable(pmd))
515                 return 0;
516
517         pte = pte_offset_map_lock(vma->vm_mm, pmd, addr, &ptl);
518         for (; addr != end; pte++, addr += PAGE_SIZE) {
519                 ptent = *pte;
520                 if (!pte_present(ptent))
521                         continue;
522
523                 page = vm_normal_page(vma, addr, ptent);
524                 if (!page)
525                         continue;
526
527                 if (PageReserved(page))
528                         continue;
529
530                 /* Clear accessed and referenced bits. */
531                 ptep_test_and_clear_young(vma, addr, pte);
532                 ClearPageReferenced(page);
533         }
534         pte_unmap_unlock(pte - 1, ptl);
535         cond_resched();
536         return 0;
537 }
538
539 #define CLEAR_REFS_ALL 1
540 #define CLEAR_REFS_ANON 2
541 #define CLEAR_REFS_MAPPED 3
542
543 static ssize_t clear_refs_write(struct file *file, const char __user *buf,
544                                 size_t count, loff_t *ppos)
545 {
546         struct task_struct *task;
547         char buffer[PROC_NUMBUF];
548         struct mm_struct *mm;
549         struct vm_area_struct *vma;
550         int type;
551         int rv;
552
553         memset(buffer, 0, sizeof(buffer));
554         if (count > sizeof(buffer) - 1)
555                 count = sizeof(buffer) - 1;
556         if (copy_from_user(buffer, buf, count))
557                 return -EFAULT;
558         rv = kstrtoint(strstrip(buffer), 10, &type);
559         if (rv < 0)
560                 return rv;
561         if (type < CLEAR_REFS_ALL || type > CLEAR_REFS_MAPPED)
562                 return -EINVAL;
563         task = get_proc_task(file->f_path.dentry->d_inode);
564         if (!task)
565                 return -ESRCH;
566         mm = get_task_mm(task);
567         if (mm) {
568                 struct mm_walk clear_refs_walk = {
569                         .pmd_entry = clear_refs_pte_range,
570                         .mm = mm,
571                 };
572                 down_read(&mm->mmap_sem);
573                 for (vma = mm->mmap; vma; vma = vma->vm_next) {
574                         clear_refs_walk.private = vma;
575                         if (is_vm_hugetlb_page(vma))
576                                 continue;
577                         /*
578                          * Writing 1 to /proc/pid/clear_refs affects all pages.
579                          *
580                          * Writing 2 to /proc/pid/clear_refs only affects
581                          * Anonymous pages.
582                          *
583                          * Writing 3 to /proc/pid/clear_refs only affects file
584                          * mapped pages.
585                          */
586                         if (type == CLEAR_REFS_ANON && vma->vm_file)
587                                 continue;
588                         if (type == CLEAR_REFS_MAPPED && !vma->vm_file)
589                                 continue;
590                         walk_page_range(vma->vm_start, vma->vm_end,
591                                         &clear_refs_walk);
592                 }
593                 flush_tlb_mm(mm);
594                 up_read(&mm->mmap_sem);
595                 mmput(mm);
596         }
597         put_task_struct(task);
598
599         return count;
600 }
601
602 const struct file_operations proc_clear_refs_operations = {
603         .write          = clear_refs_write,
604         .llseek         = noop_llseek,
605 };
606
607 struct pagemapread {
608         int pos, len;           /* units: PM_ENTRY_BYTES, not bytes */
609         u64 *buffer;
610         bool show_pfn;
611 };
612
613 #define PM_ENTRY_BYTES      sizeof(u64)
614 #define PM_STATUS_BITS      3
615 #define PM_STATUS_OFFSET    (64 - PM_STATUS_BITS)
616 #define PM_STATUS_MASK      (((1LL << PM_STATUS_BITS) - 1) << PM_STATUS_OFFSET)
617 #define PM_STATUS(nr)       (((nr) << PM_STATUS_OFFSET) & PM_STATUS_MASK)
618 #define PM_PSHIFT_BITS      6
619 #define PM_PSHIFT_OFFSET    (PM_STATUS_OFFSET - PM_PSHIFT_BITS)
620 #define PM_PSHIFT_MASK      (((1LL << PM_PSHIFT_BITS) - 1) << PM_PSHIFT_OFFSET)
621 #define PM_PSHIFT(x)        (((u64) (x) << PM_PSHIFT_OFFSET) & PM_PSHIFT_MASK)
622 #define PM_PFRAME_MASK      ((1LL << PM_PSHIFT_OFFSET) - 1)
623 #define PM_PFRAME(x)        ((x) & PM_PFRAME_MASK)
624
625 #define PM_PRESENT          PM_STATUS(4LL)
626 #define PM_SWAP             PM_STATUS(2LL)
627 #define PM_NOT_PRESENT      PM_PSHIFT(PAGE_SHIFT)
628 #define PM_END_OF_BUFFER    1
629
630 static int add_to_pagemap(unsigned long addr, u64 pfn,
631                           struct pagemapread *pm)
632 {
633         pm->buffer[pm->pos++] = pfn;
634         if (pm->pos >= pm->len)
635                 return PM_END_OF_BUFFER;
636         return 0;
637 }
638
639 static int pagemap_pte_hole(unsigned long start, unsigned long end,
640                                 struct mm_walk *walk)
641 {
642         struct pagemapread *pm = walk->private;
643         unsigned long addr;
644         int err = 0;
645         for (addr = start; addr < end; addr += PAGE_SIZE) {
646                 err = add_to_pagemap(addr, PM_NOT_PRESENT, pm);
647                 if (err)
648                         break;
649         }
650         return err;
651 }
652
653 static u64 swap_pte_to_pagemap_entry(pte_t pte)
654 {
655         swp_entry_t e = pte_to_swp_entry(pte);
656         return swp_type(e) | (swp_offset(e) << MAX_SWAPFILES_SHIFT);
657 }
658
659 static u64 pte_to_pagemap_entry(struct pagemapread *pm, pte_t pte)
660 {
661         u64 pme = 0;
662         if (is_swap_pte(pte))
663                 pme = PM_PFRAME(swap_pte_to_pagemap_entry(pte))
664                         | PM_PSHIFT(PAGE_SHIFT) | PM_SWAP;
665         else if (pte_present(pte))
666                 pme = (pm->show_pfn ? PM_PFRAME(pte_pfn(pte)) : 0)
667                         | PM_PSHIFT(PAGE_SHIFT) | PM_PRESENT;
668         return pme;
669 }
670
671 static int pagemap_pte_range(pmd_t *pmd, unsigned long addr, unsigned long end,
672                              struct mm_walk *walk)
673 {
674         struct vm_area_struct *vma;
675         struct pagemapread *pm = walk->private;
676         pte_t *pte;
677         int err = 0;
678
679         split_huge_page_pmd(walk->mm, pmd);
680         if (pmd_trans_unstable(pmd))
681                 return 0;
682
683         /* find the first VMA at or above 'addr' */
684         vma = find_vma(walk->mm, addr);
685         for (; addr != end; addr += PAGE_SIZE) {
686                 u64 pfn = PM_NOT_PRESENT;
687
688                 /* check to see if we've left 'vma' behind
689                  * and need a new, higher one */
690                 if (vma && (addr >= vma->vm_end))
691                         vma = find_vma(walk->mm, addr);
692
693                 /* check that 'vma' actually covers this address,
694                  * and that it isn't a huge page vma */
695                 if (vma && (vma->vm_start <= addr) &&
696                     !is_vm_hugetlb_page(vma)) {
697                         pte = pte_offset_map(pmd, addr);
698                         pfn = pte_to_pagemap_entry(pm, *pte);
699                         /* unmap before userspace copy */
700                         pte_unmap(pte);
701                 }
702                 err = add_to_pagemap(addr, pfn, pm);
703                 if (err)
704                         return err;
705         }
706
707         cond_resched();
708
709         return err;
710 }
711
712 #ifdef CONFIG_HUGETLB_PAGE
713 static u64 huge_pte_to_pagemap_entry(struct pagemapread *pm, pte_t pte, int offset)
714 {
715         u64 pme = 0;
716         if (pte_present(pte))
717                 pme = (pm->show_pfn ? PM_PFRAME(pte_pfn(pte) + offset) : 0)
718                         | PM_PSHIFT(PAGE_SHIFT) | PM_PRESENT;
719         return pme;
720 }
721
722 /* This function walks within one hugetlb entry in the single call */
723 static int pagemap_hugetlb_range(pte_t *pte, unsigned long hmask,
724                                  unsigned long addr, unsigned long end,
725                                  struct mm_walk *walk)
726 {
727         struct pagemapread *pm = walk->private;
728         int err = 0;
729         u64 pfn;
730
731         for (; addr != end; addr += PAGE_SIZE) {
732                 int offset = (addr & ~hmask) >> PAGE_SHIFT;
733                 pfn = huge_pte_to_pagemap_entry(pm, *pte, offset);
734                 err = add_to_pagemap(addr, pfn, pm);
735                 if (err)
736                         return err;
737         }
738
739         cond_resched();
740
741         return err;
742 }
743 #endif /* HUGETLB_PAGE */
744
745 /*
746  * /proc/pid/pagemap - an array mapping virtual pages to pfns
747  *
748  * For each page in the address space, this file contains one 64-bit entry
749  * consisting of the following:
750  *
751  * Bits 0-55  page frame number (PFN) if present
752  * Bits 0-4   swap type if swapped
753  * Bits 5-55  swap offset if swapped
754  * Bits 55-60 page shift (page size = 1<<page shift)
755  * Bit  61    reserved for future use
756  * Bit  62    page swapped
757  * Bit  63    page present
758  *
759  * If the page is not present but in swap, then the PFN contains an
760  * encoding of the swap file number and the page's offset into the
761  * swap. Unmapped pages return a null PFN. This allows determining
762  * precisely which pages are mapped (or in swap) and comparing mapped
763  * pages between processes.
764  *
765  * Efficient users of this interface will use /proc/pid/maps to
766  * determine which areas of memory are actually mapped and llseek to
767  * skip over unmapped regions.
768  */
769 #define PAGEMAP_WALK_SIZE       (PMD_SIZE)
770 #define PAGEMAP_WALK_MASK       (PMD_MASK)
771 static ssize_t pagemap_read(struct file *file, char __user *buf,
772                             size_t count, loff_t *ppos)
773 {
774         struct task_struct *task = get_proc_task(file->f_path.dentry->d_inode);
775         struct mm_struct *mm;
776         struct pagemapread pm;
777         int ret = -ESRCH;
778         struct mm_walk pagemap_walk = {};
779         unsigned long src;
780         unsigned long svpfn;
781         unsigned long start_vaddr;
782         unsigned long end_vaddr;
783         int copied = 0;
784
785         if (!task)
786                 goto out;
787
788         ret = -EINVAL;
789         /* file position must be aligned */
790         if ((*ppos % PM_ENTRY_BYTES) || (count % PM_ENTRY_BYTES))
791                 goto out_task;
792
793         ret = 0;
794         if (!count)
795                 goto out_task;
796
797         /* do not disclose physical addresses: attack vector */
798         pm.show_pfn = !security_capable(&init_user_ns, file->f_cred, 
799                                         CAP_SYS_ADMIN);
800
801         pm.len = (PAGEMAP_WALK_SIZE >> PAGE_SHIFT);
802         pm.buffer = kmalloc(pm.len * PM_ENTRY_BYTES, GFP_TEMPORARY);
803         ret = -ENOMEM;
804         if (!pm.buffer)
805                 goto out_task;
806
807         mm = mm_for_maps(task);
808         ret = PTR_ERR(mm);
809         if (!mm || IS_ERR(mm))
810                 goto out_free;
811
812         pagemap_walk.pmd_entry = pagemap_pte_range;
813         pagemap_walk.pte_hole = pagemap_pte_hole;
814 #ifdef CONFIG_HUGETLB_PAGE
815         pagemap_walk.hugetlb_entry = pagemap_hugetlb_range;
816 #endif
817         pagemap_walk.mm = mm;
818         pagemap_walk.private = &pm;
819
820         src = *ppos;
821         svpfn = src / PM_ENTRY_BYTES;
822         start_vaddr = svpfn << PAGE_SHIFT;
823         end_vaddr = TASK_SIZE_OF(task);
824
825         /* watch out for wraparound */
826         if (svpfn > TASK_SIZE_OF(task) >> PAGE_SHIFT)
827                 start_vaddr = end_vaddr;
828
829         /*
830          * The odds are that this will stop walking way
831          * before end_vaddr, because the length of the
832          * user buffer is tracked in "pm", and the walk
833          * will stop when we hit the end of the buffer.
834          */
835         ret = 0;
836         while (count && (start_vaddr < end_vaddr)) {
837                 int len;
838                 unsigned long end;
839
840                 pm.pos = 0;
841                 end = (start_vaddr + PAGEMAP_WALK_SIZE) & PAGEMAP_WALK_MASK;
842                 /* overflow ? */
843                 if (end < start_vaddr || end > end_vaddr)
844                         end = end_vaddr;
845                 down_read(&mm->mmap_sem);
846                 ret = walk_page_range(start_vaddr, end, &pagemap_walk);
847                 up_read(&mm->mmap_sem);
848                 start_vaddr = end;
849
850                 len = min(count, PM_ENTRY_BYTES * pm.pos);
851                 if (copy_to_user(buf, pm.buffer, len)) {
852                         ret = -EFAULT;
853                         goto out_mm;
854                 }
855                 copied += len;
856                 buf += len;
857                 count -= len;
858         }
859         *ppos += copied;
860         if (!ret || ret == PM_END_OF_BUFFER)
861                 ret = copied;
862
863 out_mm:
864         mmput(mm);
865 out_free:
866         kfree(pm.buffer);
867 out_task:
868         put_task_struct(task);
869 out:
870         return ret;
871 }
872
873 const struct file_operations proc_pagemap_operations = {
874         .llseek         = mem_lseek, /* borrow this */
875         .read           = pagemap_read,
876 };
877 #endif /* CONFIG_PROC_PAGE_MONITOR */
878
879 #ifdef CONFIG_NUMA
880
881 struct numa_maps {
882         struct vm_area_struct *vma;
883         unsigned long pages;
884         unsigned long anon;
885         unsigned long active;
886         unsigned long writeback;
887         unsigned long mapcount_max;
888         unsigned long dirty;
889         unsigned long swapcache;
890         unsigned long node[MAX_NUMNODES];
891 };
892
893 struct numa_maps_private {
894         struct proc_maps_private proc_maps;
895         struct numa_maps md;
896 };
897
898 static void gather_stats(struct page *page, struct numa_maps *md, int pte_dirty,
899                         unsigned long nr_pages)
900 {
901         int count = page_mapcount(page);
902
903         md->pages += nr_pages;
904         if (pte_dirty || PageDirty(page))
905                 md->dirty += nr_pages;
906
907         if (PageSwapCache(page))
908                 md->swapcache += nr_pages;
909
910         if (PageActive(page) || PageUnevictable(page))
911                 md->active += nr_pages;
912
913         if (PageWriteback(page))
914                 md->writeback += nr_pages;
915
916         if (PageAnon(page))
917                 md->anon += nr_pages;
918
919         if (count > md->mapcount_max)
920                 md->mapcount_max = count;
921
922         md->node[page_to_nid(page)] += nr_pages;
923 }
924
925 static struct page *can_gather_numa_stats(pte_t pte, struct vm_area_struct *vma,
926                 unsigned long addr)
927 {
928         struct page *page;
929         int nid;
930
931         if (!pte_present(pte))
932                 return NULL;
933
934         page = vm_normal_page(vma, addr, pte);
935         if (!page)
936                 return NULL;
937
938         if (PageReserved(page))
939                 return NULL;
940
941         nid = page_to_nid(page);
942         if (!node_isset(nid, node_states[N_HIGH_MEMORY]))
943                 return NULL;
944
945         return page;
946 }
947
948 static int gather_pte_stats(pmd_t *pmd, unsigned long addr,
949                 unsigned long end, struct mm_walk *walk)
950 {
951         struct numa_maps *md;
952         spinlock_t *ptl;
953         pte_t *orig_pte;
954         pte_t *pte;
955
956         md = walk->private;
957         spin_lock(&walk->mm->page_table_lock);
958         if (pmd_trans_huge(*pmd)) {
959                 if (pmd_trans_splitting(*pmd)) {
960                         spin_unlock(&walk->mm->page_table_lock);
961                         wait_split_huge_page(md->vma->anon_vma, pmd);
962                 } else {
963                         pte_t huge_pte = *(pte_t *)pmd;
964                         struct page *page;
965
966                         page = can_gather_numa_stats(huge_pte, md->vma, addr);
967                         if (page)
968                                 gather_stats(page, md, pte_dirty(huge_pte),
969                                                 HPAGE_PMD_SIZE/PAGE_SIZE);
970                         spin_unlock(&walk->mm->page_table_lock);
971                         return 0;
972                 }
973         } else {
974                 spin_unlock(&walk->mm->page_table_lock);
975         }
976
977         if (pmd_trans_unstable(pmd))
978                 return 0;
979         orig_pte = pte = pte_offset_map_lock(walk->mm, pmd, addr, &ptl);
980         do {
981                 struct page *page = can_gather_numa_stats(*pte, md->vma, addr);
982                 if (!page)
983                         continue;
984                 gather_stats(page, md, pte_dirty(*pte), 1);
985
986         } while (pte++, addr += PAGE_SIZE, addr != end);
987         pte_unmap_unlock(orig_pte, ptl);
988         return 0;
989 }
990 #ifdef CONFIG_HUGETLB_PAGE
991 static int gather_hugetbl_stats(pte_t *pte, unsigned long hmask,
992                 unsigned long addr, unsigned long end, struct mm_walk *walk)
993 {
994         struct numa_maps *md;
995         struct page *page;
996
997         if (pte_none(*pte))
998                 return 0;
999
1000         page = pte_page(*pte);
1001         if (!page)
1002                 return 0;
1003
1004         md = walk->private;
1005         gather_stats(page, md, pte_dirty(*pte), 1);
1006         return 0;
1007 }
1008
1009 #else
1010 static int gather_hugetbl_stats(pte_t *pte, unsigned long hmask,
1011                 unsigned long addr, unsigned long end, struct mm_walk *walk)
1012 {
1013         return 0;
1014 }
1015 #endif
1016
1017 /*
1018  * Display pages allocated per node and memory policy via /proc.
1019  */
1020 static int show_numa_map(struct seq_file *m, void *v)
1021 {
1022         struct numa_maps_private *numa_priv = m->private;
1023         struct proc_maps_private *proc_priv = &numa_priv->proc_maps;
1024         struct vm_area_struct *vma = v;
1025         struct numa_maps *md = &numa_priv->md;
1026         struct file *file = vma->vm_file;
1027         struct mm_struct *mm = vma->vm_mm;
1028         struct mm_walk walk = {};
1029         struct mempolicy *pol;
1030         int n;
1031         char buffer[50];
1032
1033         if (!mm)
1034                 return 0;
1035
1036         /* Ensure we start with an empty set of numa_maps statistics. */
1037         memset(md, 0, sizeof(*md));
1038
1039         md->vma = vma;
1040
1041         walk.hugetlb_entry = gather_hugetbl_stats;
1042         walk.pmd_entry = gather_pte_stats;
1043         walk.private = md;
1044         walk.mm = mm;
1045
1046         pol = get_vma_policy(proc_priv->task, vma, vma->vm_start);
1047         mpol_to_str(buffer, sizeof(buffer), pol, 0);
1048         mpol_cond_put(pol);
1049
1050         seq_printf(m, "%08lx %s", vma->vm_start, buffer);
1051
1052         if (file) {
1053                 seq_printf(m, " file=");
1054                 seq_path(m, &file->f_path, "\n\t= ");
1055         } else if (vma->vm_start <= mm->brk && vma->vm_end >= mm->start_brk) {
1056                 seq_printf(m, " heap");
1057         } else if (vma->vm_start <= mm->start_stack &&
1058                         vma->vm_end >= mm->start_stack) {
1059                 seq_printf(m, " stack");
1060         }
1061
1062         if (is_vm_hugetlb_page(vma))
1063                 seq_printf(m, " huge");
1064
1065         walk_page_range(vma->vm_start, vma->vm_end, &walk);
1066
1067         if (!md->pages)
1068                 goto out;
1069
1070         if (md->anon)
1071                 seq_printf(m, " anon=%lu", md->anon);
1072
1073         if (md->dirty)
1074                 seq_printf(m, " dirty=%lu", md->dirty);
1075
1076         if (md->pages != md->anon && md->pages != md->dirty)
1077                 seq_printf(m, " mapped=%lu", md->pages);
1078
1079         if (md->mapcount_max > 1)
1080                 seq_printf(m, " mapmax=%lu", md->mapcount_max);
1081
1082         if (md->swapcache)
1083                 seq_printf(m, " swapcache=%lu", md->swapcache);
1084
1085         if (md->active < md->pages && !is_vm_hugetlb_page(vma))
1086                 seq_printf(m, " active=%lu", md->active);
1087
1088         if (md->writeback)
1089                 seq_printf(m, " writeback=%lu", md->writeback);
1090
1091         for_each_node_state(n, N_HIGH_MEMORY)
1092                 if (md->node[n])
1093                         seq_printf(m, " N%d=%lu", n, md->node[n]);
1094 out:
1095         seq_putc(m, '\n');
1096
1097         if (m->count < m->size)
1098                 m->version = (vma != proc_priv->tail_vma) ? vma->vm_start : 0;
1099         return 0;
1100 }
1101
1102 static const struct seq_operations proc_pid_numa_maps_op = {
1103         .start  = m_start,
1104         .next   = m_next,
1105         .stop   = m_stop,
1106         .show   = show_numa_map,
1107 };
1108
1109 static int numa_maps_open(struct inode *inode, struct file *file)
1110 {
1111         struct numa_maps_private *priv;
1112         int ret = -ENOMEM;
1113         priv = kzalloc(sizeof(*priv), GFP_KERNEL);
1114         if (priv) {
1115                 priv->proc_maps.pid = proc_pid(inode);
1116                 ret = seq_open(file, &proc_pid_numa_maps_op);
1117                 if (!ret) {
1118                         struct seq_file *m = file->private_data;
1119                         m->private = priv;
1120                 } else {
1121                         kfree(priv);
1122                 }
1123         }
1124         return ret;
1125 }
1126
1127 const struct file_operations proc_numa_maps_operations = {
1128         .open           = numa_maps_open,
1129         .read           = seq_read,
1130         .llseek         = seq_lseek,
1131         .release        = seq_release_private,
1132 };
1133 #endif /* CONFIG_NUMA */