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 1d286244a56211c98846a75e232e93bcd4705030..f6a3c21a282641dea38d55aa4caa5dd8c7cdfdfb 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 1f4ee4797a6ef2957c73aedc17c4b54e13102d02..f8661985bff61c3fa416997748594f5b28f5cfc9 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 3ef5084b90ca0357b002a9eaf8f004b10a223db1..e91add90ec54ccf22aa737b8fcdb8730c7ed8e6c 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 31582329cd6778e0f3dc0b058635ab4015c8d6ad..9ee563101b56a50846e89630fdf86e138ff10d11 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 fabb7c6f48d24a512415adff781137b4d7c8c859..ef56c9f9d7bae144a28363caa157b982590a4a22 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 b49b4f67453dbf6c3843cff30e25a0e23661fa51..2cbc4011293276fa4a2169bf3351e6897eab17f3 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 810bd31e7f5f2d56df765bbc4971f7aa9dc5c4d2..c05810b614fea2e4747e16307e8c7ce566342ad2 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 f9327e51ce997024d8c5aa8aafba8db78a8347ae..659c1635db81aa907734c916f104bf22fba2c43d 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 0aff2a62eba933664e4491c3843230e6ec2b6387..bd7b840765a0327e784fd6ead4fa07bcdd13b35b 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 {