lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date:	Fri, 18 Jul 2014 07:10:37 +0800
From:	Real Name <enjoymindful@...il.com>
To:	richard@....at
Cc:	uml-devel <user-mode-linux-devel@...ts.sourceforge.net>,
	"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH v2] delete unnecessary bootmem struct page array

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 <enjoymindful@...il.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 <haveblue@...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 <enjoymindful@...il.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 <enjoymindful@...il.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
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists