On Mon, Jun 16, 2014 at 06:30:36PM +0800, Real Name wrote:
> On Mon, Jun 16, 2014 at 11:15:23AM +0200, Geert Uytterhoeven wrote:
> > On Mon, Jun 16, 2014 at 10:28 AM, Real Name <enjoymind...@gmail.com> wrote:
> > >> > >> Can you please include in the changelog the commit sha1 which made 
> > >> > >> the old init_maps() obsolete?
> 
> hi,
> 
> The commit sha1 had been included as required. Please review the attached 
> patch. 
> I only update the changlog of the patch.
>

hi, Rechard
ping?

> thanks
> > >
> > > I think we need find out which commit deleted the line "mem_map = map;" 
> > > in init_maps function.
> > 
> > 
> > v2.6.12-rc1
> > 
> > commit 5678d7fc97ac75f7401ce77897773cc0bb3afee5
> 
> Geert, thank you.
> 
> > Author: Dave Hansen <haveb...@us.ibm.com>
> > Date:   Sun Mar 13 00:22:56 2005 -0800
> > 
> >     [PATCH] no arch-specific mem_map init
> > 

> From 29e5e83f8f3988ea1396d61b4d5764e7904f82c5 Mon Sep 17 00:00:00 2001
> From: Honggang Li <enjoymind...@gmail.com>
> Date: Mon, 16 Jun 2014 18:05:47 +0800
> Subject: [PATCH] UML delete unnecessary bootmem struct page array
> 
> 1) uml kernel bootmem managed through bootmem_data->node_bootmem_map,
> not the struct page array, so the array is unnecessary.
> 
> 2) the bootmem struct page array has been pointed by a *local* pointer,
> struct page *map, in init_maps function. The array can be accessed only
> in init_maps's scope. As a result, uml kernel wastes about 1% of total
> memory.
> 
> 3) commit 5678d7fc97ac75f7401ce77897773cc0bb3afee5 obsoleted
> the init_maps function.
> 
> Signed-off-by: Honggang Li <enjoymind...@gmail.com>
> ---
>  arch/um/include/shared/mem_user.h |  2 +-
>  arch/um/kernel/physmem.c          | 32 ++++++--------------------------
>  arch/um/kernel/um_arch.c          |  7 +------
>  3 files changed, 8 insertions(+), 33 deletions(-)
> 
> diff --git a/arch/um/include/shared/mem_user.h 
> b/arch/um/include/shared/mem_user.h
> index 46384ac..cb84414 100644
> --- a/arch/um/include/shared/mem_user.h
> +++ b/arch/um/include/shared/mem_user.h
> @@ -49,7 +49,7 @@ extern int iomem_size;
>  extern int init_mem_user(void);
>  extern void setup_memory(void *entry);
>  extern unsigned long find_iomem(char *driver, unsigned long *len_out);
> -extern int init_maps(unsigned long physmem, unsigned long iomem,
> +extern void mem_total_pages(unsigned long physmem, unsigned long iomem,
>                    unsigned long highmem);
>  extern unsigned long get_vm(unsigned long len);
>  extern void setup_physmem(unsigned long start, unsigned long usable,
> diff --git a/arch/um/kernel/physmem.c b/arch/um/kernel/physmem.c
> index 30fdd5d..549ecf3 100644
> --- a/arch/um/kernel/physmem.c
> +++ b/arch/um/kernel/physmem.c
> @@ -22,39 +22,19 @@ EXPORT_SYMBOL(high_physmem);
>  
>  extern unsigned long long physmem_size;
>  
> -int __init init_maps(unsigned long physmem, unsigned long iomem,
> +void __init mem_total_pages(unsigned long physmem, unsigned long iomem,
>                    unsigned long highmem)
>  {
> -     struct page *p, *map;
> -     unsigned long phys_len, phys_pages, highmem_len, highmem_pages;
> -     unsigned long iomem_len, iomem_pages, total_len, total_pages;
> -     int i;
> -
> -     phys_pages = physmem >> PAGE_SHIFT;
> -     phys_len = phys_pages * sizeof(struct page);
> -
> -     iomem_pages = iomem >> PAGE_SHIFT;
> -     iomem_len = iomem_pages * sizeof(struct page);
> +     unsigned long phys_pages, highmem_pages;
> +     unsigned long iomem_pages, total_pages;
>  
> +     phys_pages    = physmem >> PAGE_SHIFT;
> +     iomem_pages   = iomem   >> PAGE_SHIFT;
>       highmem_pages = highmem >> PAGE_SHIFT;
> -     highmem_len = highmem_pages * sizeof(struct page);
> -
> -     total_pages = phys_pages + iomem_pages + highmem_pages;
> -     total_len = phys_len + iomem_len + highmem_len;
>  
> -     map = alloc_bootmem_low_pages(total_len);
> -     if (map == NULL)
> -             return -ENOMEM;
> -
> -     for (i = 0; i < total_pages; i++) {
> -             p = &map[i];
> -             memset(p, 0, sizeof(struct page));
> -             SetPageReserved(p);
> -             INIT_LIST_HEAD(&p->lru);
> -     }
> +     total_pages   = phys_pages + iomem_pages + highmem_pages;
>  
>       max_mapnr = total_pages;
> -     return 0;
>  }
>  
>  void map_memory(unsigned long virt, unsigned long phys, unsigned long len,
> diff --git a/arch/um/kernel/um_arch.c b/arch/um/kernel/um_arch.c
> index 6043c76..dbd5bda 100644
> --- a/arch/um/kernel/um_arch.c
> +++ b/arch/um/kernel/um_arch.c
> @@ -338,12 +338,7 @@ int __init linux_main(int argc, char **argv)
>       start_vm = VMALLOC_START;
>  
>       setup_physmem(uml_physmem, uml_reserved, physmem_size, highmem);
> -     if (init_maps(physmem_size, iomem_size, highmem)) {
> -             printf("Failed to allocate mem_map for %Lu bytes of physical "
> -                    "memory and %Lu bytes of highmem\n", physmem_size,
> -                    highmem);
> -             exit(1);
> -     }
> +     mem_total_pages(physmem_size, iomem_size, highmem);
>  
>       virtmem_size = physmem_size;
>       stack = (unsigned long) argv;
> -- 
> 1.8.3.1
> 


------------------------------------------------------------------------------
Want fast and easy access to all the code in your enterprise? Index and
search up to 200,000 lines of code with a free copy of Black Duck
Code Sight - the same software that powers the world's largest code
search on Ohloh, the Black Duck Open Hub! Try it now.
http://p.sf.net/sfu/bds
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

Reply via email to