aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAtsushi Kumagai <kumagai-atsushi@mxc.nes.nec.co.jp>2013-04-29 18:07:40 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2013-04-29 18:54:34 -0400
commit13ba3fcbbe31068b1ee7c39a0b58ecbed03c4d72 (patch)
tree07991835bdf224ec3d4fcc1ce630d4b8c08b1c41
parent4341fa454796b8a37efd5db98112524e85e7114e (diff)
kexec, vmalloc: export additional vmalloc layer information
Now, vmap_area_list is exported as VMCOREINFO for makedumpfile to get the start address of vmalloc region (vmalloc_start). The address which contains vmalloc_start value is represented as below: vmap_area_list.next - OFFSET(vmap_area.list) + OFFSET(vmap_area.va_start) However, both OFFSET(vmap_area.va_start) and OFFSET(vmap_area.list) aren't exported as VMCOREINFO. So this patch exports them externally with small cleanup. [akpm@linux-foundation.org: vmalloc.h should include list.h for list_head] Signed-off-by: Atsushi Kumagai <kumagai-atsushi@mxc.nes.nec.co.jp> Cc: Joonsoo Kim <js1304@gmail.com> Cc: 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>
-rw-r--r--include/linux/vmalloc.h13
-rw-r--r--kernel/kexec.c3
-rw-r--r--mm/vmalloc.c11
3 files changed, 15 insertions, 12 deletions
diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h
index 8a25f9081ed0..7d5773a99f20 100644
--- a/include/linux/vmalloc.h
+++ b/include/linux/vmalloc.h
@@ -3,7 +3,9 @@
3 3
4#include <linux/spinlock.h> 4#include <linux/spinlock.h>
5#include <linux/init.h> 5#include <linux/init.h>
6#include <linux/list.h>
6#include <asm/page.h> /* pgprot_t */ 7#include <asm/page.h> /* pgprot_t */
8#include <linux/rbtree.h>
7 9
8struct vm_area_struct; /* vma defining user mapping in mm_types.h */ 10struct vm_area_struct; /* vma defining user mapping in mm_types.h */
9 11
@@ -35,6 +37,17 @@ struct vm_struct {
35 const void *caller; 37 const void *caller;
36}; 38};
37 39
40struct vmap_area {
41 unsigned long va_start;
42 unsigned long va_end;
43 unsigned long flags;
44 struct rb_node rb_node; /* address sorted rbtree */
45 struct list_head list; /* address sorted list */
46 struct list_head purge_list; /* "lazy purge" list */
47 struct vm_struct *vm;
48 struct rcu_head rcu_head;
49};
50
38/* 51/*
39 * Highlevel APIs for driver use 52 * Highlevel APIs for driver use
40 */ 53 */
diff --git a/kernel/kexec.c b/kernel/kexec.c
index 0b1f7e780d46..b574920cbd4b 100644
--- a/kernel/kexec.c
+++ b/kernel/kexec.c
@@ -1615,7 +1615,8 @@ static int __init crash_save_vmcoreinfo_init(void)
1615 VMCOREINFO_OFFSET(free_area, free_list); 1615 VMCOREINFO_OFFSET(free_area, free_list);
1616 VMCOREINFO_OFFSET(list_head, next); 1616 VMCOREINFO_OFFSET(list_head, next);
1617 VMCOREINFO_OFFSET(list_head, prev); 1617 VMCOREINFO_OFFSET(list_head, prev);
1618 VMCOREINFO_OFFSET(vm_struct, addr); 1618 VMCOREINFO_OFFSET(vmap_area, va_start);
1619 VMCOREINFO_OFFSET(vmap_area, list);
1619 VMCOREINFO_LENGTH(zone.free_area, MAX_ORDER); 1620 VMCOREINFO_LENGTH(zone.free_area, MAX_ORDER);
1620 log_buf_kexec_setup(); 1621 log_buf_kexec_setup();
1621 VMCOREINFO_LENGTH(free_area.free_list, MIGRATE_TYPES); 1622 VMCOREINFO_LENGTH(free_area.free_list, MIGRATE_TYPES);
diff --git a/mm/vmalloc.c b/mm/vmalloc.c
index 151da8ac53fa..72043d6c88c0 100644
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c
@@ -249,17 +249,6 @@ EXPORT_SYMBOL(vmalloc_to_pfn);
249#define VM_LAZY_FREEING 0x02 249#define VM_LAZY_FREEING 0x02
250#define VM_VM_AREA 0x04 250#define VM_VM_AREA 0x04
251 251
252struct vmap_area {
253 unsigned long va_start;
254 unsigned long va_end;
255 unsigned long flags;
256 struct rb_node rb_node; /* address sorted rbtree */
257 struct list_head list; /* address sorted list */
258 struct list_head purge_list; /* "lazy purge" list */
259 struct vm_struct *vm;
260 struct rcu_head rcu_head;
261};
262
263static DEFINE_SPINLOCK(vmap_area_lock); 252static DEFINE_SPINLOCK(vmap_area_lock);
264/* Export for kexec only */ 253/* Export for kexec only */
265LIST_HEAD(vmap_area_list); 254LIST_HEAD(vmap_area_list);