diff options
author | Joonsoo Kim <js1304@gmail.com> | 2013-04-29 18:07:28 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-04-29 18:54:33 -0400 |
commit | db3808c1bac64740b9d830fda92801ae65f1c851 (patch) | |
tree | 5f209495fa8865cf7283ae928f566142bb9a9c00 /mm | |
parent | ef93247325028a35e089f3012c270379a89d052c (diff) |
mm, vmalloc: move get_vmalloc_info() to vmalloc.c
Now get_vmalloc_info() is in fs/proc/mmu.c. There is no reason that this
code must be here and it's implementation needs vmlist_lock and it iterate
a vmlist which may be internal data structure for vmalloc.
It is preferable that vmlist_lock and vmlist is only used in vmalloc.c
for maintainability. So move the code to vmalloc.c
Signed-off-by: Joonsoo Kim <js1304@gmail.com>
Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Atsushi Kumagai <kumagai-atsushi@mxc.nes.nec.co.jp>
Cc: Chris Metcalf <cmetcalf@tilera.com>
Cc: Dave Anderson <anderson@redhat.com>
Cc: Eric Biederman <ebiederm@xmission.com>
Cc: Guan Xuetao <gxt@mprc.pku.edu.cn>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Vivek Goyal <vgoyal@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm')
-rw-r--r-- | mm/vmalloc.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/mm/vmalloc.c b/mm/vmalloc.c index 0f751f2068c3..1d9878b7cf52 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c | |||
@@ -2645,5 +2645,49 @@ static int __init proc_vmalloc_init(void) | |||
2645 | return 0; | 2645 | return 0; |
2646 | } | 2646 | } |
2647 | module_init(proc_vmalloc_init); | 2647 | module_init(proc_vmalloc_init); |
2648 | |||
2649 | void get_vmalloc_info(struct vmalloc_info *vmi) | ||
2650 | { | ||
2651 | struct vm_struct *vma; | ||
2652 | unsigned long free_area_size; | ||
2653 | unsigned long prev_end; | ||
2654 | |||
2655 | vmi->used = 0; | ||
2656 | |||
2657 | if (!vmlist) { | ||
2658 | vmi->largest_chunk = VMALLOC_TOTAL; | ||
2659 | } else { | ||
2660 | vmi->largest_chunk = 0; | ||
2661 | |||
2662 | prev_end = VMALLOC_START; | ||
2663 | |||
2664 | read_lock(&vmlist_lock); | ||
2665 | |||
2666 | for (vma = vmlist; vma; vma = vma->next) { | ||
2667 | unsigned long addr = (unsigned long) vma->addr; | ||
2668 | |||
2669 | /* | ||
2670 | * Some archs keep another range for modules in vmlist | ||
2671 | */ | ||
2672 | if (addr < VMALLOC_START) | ||
2673 | continue; | ||
2674 | if (addr >= VMALLOC_END) | ||
2675 | break; | ||
2676 | |||
2677 | vmi->used += vma->size; | ||
2678 | |||
2679 | free_area_size = addr - prev_end; | ||
2680 | if (vmi->largest_chunk < free_area_size) | ||
2681 | vmi->largest_chunk = free_area_size; | ||
2682 | |||
2683 | prev_end = vma->size + addr; | ||
2684 | } | ||
2685 | |||
2686 | if (VMALLOC_END - prev_end > vmi->largest_chunk) | ||
2687 | vmi->largest_chunk = VMALLOC_END - prev_end; | ||
2688 | |||
2689 | read_unlock(&vmlist_lock); | ||
2690 | } | ||
2691 | } | ||
2648 | #endif | 2692 | #endif |
2649 | 2693 | ||