kcore: add kclist types
authorKAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Tue, 22 Sep 2009 23:45:43 +0000 (16:45 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 23 Sep 2009 14:39:41 +0000 (07:39 -0700)
Presently, kclist_add() only eats start address and size as its arguments.
Considering to make kclist dynamically reconfigulable, it's necessary to
know which kclists are for System RAM and which are not.

This patch add kclist types as
  KCORE_RAM
  KCORE_VMALLOC
  KCORE_TEXT
  KCORE_OTHER

This "type" is used in a patch following this for detecting KCORE_RAM.

Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: WANG Cong <xiyou.wangcong@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
arch/ia64/mm/init.c
arch/mips/mm/init.c
arch/powerpc/mm/init_32.c
arch/powerpc/mm/init_64.c
arch/sh/mm/init.c
arch/x86/mm/init_32.c
arch/x86/mm/init_64.c
fs/proc/kcore.c
include/linux/proc_fs.h

index 1d28624..f6a3c21 100644 (file)
@@ -639,9 +639,10 @@ mem_init (void)
 
        high_memory = __va(max_low_pfn * PAGE_SIZE);
 
-       kclist_add(&kcore_mem, __va(0), max_low_pfn * PAGE_SIZE);
-       kclist_add(&kcore_vmem, (void *)VMALLOC_START, VMALLOC_END-VMALLOC_START);
-       kclist_add(&kcore_kernel, _stext, _end - _stext);
+       kclist_add(&kcore_mem, __va(0), max_low_pfn * PAGE_SIZE, KCORE_RAM);
+       kclist_add(&kcore_vmem, (void *)VMALLOC_START,
+                       VMALLOC_END-VMALLOC_START, KCORE_VMALLOC);
+       kclist_add(&kcore_kernel, _stext, _end - _stext, KCORE_TEXT);
 
        for_each_online_pgdat(pgdat)
                if (pgdat->bdata->node_bootmem_map)
index 1f4ee47..f866198 100644 (file)
@@ -409,11 +409,12 @@ void __init mem_init(void)
        if ((unsigned long) &_text > (unsigned long) CKSEG0)
                /* The -4 is a hack so that user tools don't have to handle
                   the overflow.  */
-               kclist_add(&kcore_kseg0, (void *) CKSEG0, 0x80000000 - 4);
+               kclist_add(&kcore_kseg0, (void *) CKSEG0,
+                               0x80000000 - 4, KCORE_TEXT);
 #endif
-       kclist_add(&kcore_mem, __va(0), max_low_pfn << PAGE_SHIFT);
+       kclist_add(&kcore_mem, __va(0), max_low_pfn << PAGE_SHIFT, KCORE_RAM);
        kclist_add(&kcore_vmalloc, (void *)VMALLOC_START,
-                  VMALLOC_END-VMALLOC_START);
+                  VMALLOC_END-VMALLOC_START, KCORE_VMALLOC);
 
        printk(KERN_INFO "Memory: %luk/%luk available (%ldk kernel code, "
               "%ldk reserved, %ldk data, %ldk init, %ldk highmem)\n",
index 3ef5084..e91add9 100644 (file)
@@ -268,11 +268,11 @@ static int __init setup_kcore(void)
                                                size);
                }
 
-               kclist_add(kcore_mem, __va(base), size);
+               kclist_add(kcore_mem, __va(base), size, KCORE_RAM);
        }
 
        kclist_add(&kcore_vmem, (void *)VMALLOC_START,
-               VMALLOC_END-VMALLOC_START);
+               VMALLOC_END-VMALLOC_START, KCORE_VMALLOC);
 
        return 0;
 }
index 3158232..9ee5631 100644 (file)
@@ -128,10 +128,11 @@ static int __init setup_kcore(void)
                if (!kcore_mem)
                        panic("%s: kmalloc failed\n", __func__);
 
-               kclist_add(kcore_mem, __va(base), size);
+               kclist_add(kcore_mem, __va(base), size, KCORE_RAM);
        }
 
-       kclist_add(&kcore_vmem, (void *)VMALLOC_START, VMALLOC_END-VMALLOC_START);
+       kclist_add(&kcore_vmem, (void *)VMALLOC_START,
+               VMALLOC_END-VMALLOC_START, KCORE_VMALLOC);
 
        return 0;
 }
index fabb7c6..ef56c9f 100644 (file)
@@ -226,9 +226,9 @@ void __init mem_init(void)
        datasize =  (unsigned long) &_edata - (unsigned long) &_etext;
        initsize =  (unsigned long) &__init_end - (unsigned long) &__init_begin;
 
-       kclist_add(&kcore_mem, __va(0), max_low_pfn << PAGE_SHIFT);
+       kclist_add(&kcore_mem, __va(0), max_low_pfn << PAGE_SHIFT, KCORE_RAM);
        kclist_add(&kcore_vmalloc, (void *)VMALLOC_START,
-                  VMALLOC_END - VMALLOC_START);
+                  VMALLOC_END - VMALLOC_START, KCORE_VMALLOC);
 
        printk(KERN_INFO "Memory: %luk/%luk available (%dk kernel code, "
               "%dk data, %dk init)\n",
index b49b4f6..2cbc401 100644 (file)
@@ -886,9 +886,9 @@ void __init mem_init(void)
        datasize =  (unsigned long) &_edata - (unsigned long) &_etext;
        initsize =  (unsigned long) &__init_end - (unsigned long) &__init_begin;
 
-       kclist_add(&kcore_mem, __va(0), max_low_pfn << PAGE_SHIFT);
+       kclist_add(&kcore_mem, __va(0), max_low_pfn << PAGE_SHIFT, KCORE_RAM);
        kclist_add(&kcore_vmalloc, (void *)VMALLOC_START,
-                  VMALLOC_END-VMALLOC_START);
+                  VMALLOC_END-VMALLOC_START, KCORE_VMALLOC);
 
        printk(KERN_INFO "Memory: %luk/%luk available (%dk kernel code, "
                        "%dk reserved, %dk data, %dk init, %ldk highmem)\n",
index 810bd31..c05810b 100644 (file)
@@ -677,13 +677,14 @@ void __init mem_init(void)
        initsize =  (unsigned long) &__init_end - (unsigned long) &__init_begin;
 
        /* Register memory areas for /proc/kcore */
-       kclist_add(&kcore_mem, __va(0), max_low_pfn << PAGE_SHIFT);
+       kclist_add(&kcore_mem, __va(0), max_low_pfn << PAGE_SHIFT, KCORE_RAM);
        kclist_add(&kcore_vmalloc, (void *)VMALLOC_START,
-                  VMALLOC_END-VMALLOC_START);
-       kclist_add(&kcore_kernel, &_stext, _end - _stext);
-       kclist_add(&kcore_modules, (void *)MODULES_VADDR, MODULES_LEN);
+                  VMALLOC_END-VMALLOC_START, KCORE_VMALLOC);
+       kclist_add(&kcore_kernel, &_stext, _end - _stext, KCORE_TEXT);
+       kclist_add(&kcore_modules, (void *)MODULES_VADDR, MODULES_LEN,
+                       KCORE_OTHER);
        kclist_add(&kcore_vsyscall, (void *)VSYSCALL_START,
-                                VSYSCALL_END - VSYSCALL_START);
+                        VSYSCALL_END - VSYSCALL_START, KCORE_OTHER);
 
        printk(KERN_INFO "Memory: %luk/%luk available (%ldk kernel code, "
                         "%ldk absent, %ldk reserved, %ldk data, %ldk init)\n",
index f9327e5..659c163 100644 (file)
@@ -62,10 +62,11 @@ static LIST_HEAD(kclist_head);
 static DEFINE_RWLOCK(kclist_lock);
 
 void
-kclist_add(struct kcore_list *new, void *addr, size_t size)
+kclist_add(struct kcore_list *new, void *addr, size_t size, int type)
 {
        new->addr = (unsigned long)addr;
        new->size = size;
+       new->type = type;
 
        write_lock(&kclist_lock);
        list_add_tail(&new->list, &kclist_head);
index 0aff2a6..bd7b840 100644 (file)
@@ -78,10 +78,18 @@ struct proc_dir_entry {
        struct list_head pde_openers;   /* who did ->open, but not ->release */
 };
 
+enum kcore_type {
+       KCORE_TEXT,
+       KCORE_VMALLOC,
+       KCORE_RAM,
+       KCORE_OTHER,
+};
+
 struct kcore_list {
        struct list_head list;
        unsigned long addr;
        size_t size;
+       int type;
 };
 
 struct vmcore {
@@ -233,11 +241,12 @@ static inline void dup_mm_exe_file(struct mm_struct *oldmm,
 #endif /* CONFIG_PROC_FS */
 
 #if !defined(CONFIG_PROC_KCORE)
-static inline void kclist_add(struct kcore_list *new, void *addr, size_t size)
+static inline void
+kclist_add(struct kcore_list *new, void *addr, size_t size, int type)
 {
 }
 #else
-extern void kclist_add(struct kcore_list *, void *, size_t);
+extern void kclist_add(struct kcore_list *, void *, size_t, int type);
 #endif
 
 union proc_op {