public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Real Name <enjoymindful@gmail.com>
To: Richard Weinberger <richard@nod.at>
Cc: user-mode-linux-devel@lists.sourceforge.net,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2] delete unnecessary bootmem struct page array
Date: Mon, 16 Jun 2014 11:28:52 +0800	[thread overview]
Message-ID: <20140616032852.GA1763@name> (raw)
In-Reply-To: <539C1964.4050504@nod.at>

On Sat, Jun 14, 2014 at 11:44:04AM +0200, Richard Weinberger wrote:
> Hi!
> 
> Am 03.06.2014 07:30, schrieb Real Name:
> > From: Honggang Li <enjoymindful@gmail.com>
> > 
> > The patch based on linux-next-2014-06-02.
> > 
> > The old init_maps function does two things:
> > 1) allocates and initializes one struct page array for bootmem
> > 2) count the number of total pages
> > 
> > After removed the source code related to the unnecessary array, the name 
> > 'init_maps' is some kind of improper named, as it just count the number of
> > total page numbers. So, I renamed the function as 'mem_total_pages'.
> > 
> > I tested the patch through repeat reboot the uml kernel many times.
> > [real@name linux-next]$ make ARCH=um defconfig
> > [real@name linux-next]$ make ARCH=um linux
> > [real@name linux-next]$ file linux
> > linux: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, not stripped
> > [real@name linux-next]$ ./linux ubda=/home/real/linux-next/Fedora20-AMD64-root_fs mem=256m && sync && echo 1
> > [real@name linux-next]$ ./linux ubda=/home/real/linux-next/Fedora20-AMD64-root_fs mem=256m && sync && echo 2
> > (repeat reboot the uml kernel many times..)
> 
> Can you please include in the changelog the commit sha1 which made the old init_maps() obsolete?
> I had a look at the pre-git linux tree, looks like init_maps() wasn't touched for more than 10 years.

hi, richard

what is the pre-git linux tree? I searched it with google, but failed.

The v2.6.12 kernel is the oldest one available from the linux-next git tree. And it has duplicated
struct page arrays. So, any suggestion how to find the commit you wanted?

linux-2.4.20 + uml-patch-2.4.20-8 works on *old* redhat-9 virtual machine. And it seems has duplicated
struct page array too.

The first struct page array
------------------------
linux-2.4.20/arch/um/kernel/physmem.c
157 int init_maps(unsigned long len)
158 {
159         struct page *p, *map;
160         int i, n;
161 
162         n = len >> PAGE_SHIFT;
163         len = n * sizeof(struct page);
164 
165         if(kmalloc_ok){
166                 map = kmalloc(len, GFP_KERNEL);
167                 if(map == NULL) map = vmalloc(len);
168         }
169         else map = alloc_bootmem_low_pages(len);
170 
171         if(map == NULL)
172                 return(-ENOMEM);
173 
174         for(i = 0; i < n; i++){
175                 p = &map[i];
176                 set_page_count(p, 0);
177                 SetPageReserved(p);
178                 INIT_LIST_HEAD(&p->list);
179         }
180 
181         mem_map = map;
182         max_mapnr = n;
183         return(0);
184 }


The second struct page array
-----------------------
mm/memory.c
73 mem_map_t * mem_map; // global define

mm/page_alloc.c
839 void __init free_area_init(unsigned long *zones_size)
840 {
841         free_area_init_core(0, &contig_page_data, &mem_map, zones_size, 0, 0, 0);
842 }

--------
mm/page_alloc.c
685 void __init free_area_init_core(int nid, pg_data_t *pgdat, struct page **gmap,
686         unsigned long *zones_size, unsigned long zone_start_paddr,
687         unsigned long *zholes_size, struct page *lmem_map)
688 {
........
716         map_size = (totalpages + 1)*sizeof(struct page);
717         if (lmem_map == (struct page *)0) {
718                 lmem_map = (struct page *) alloc_bootmem_node(pgdat, map_size);
719                 lmem_map = (struct page *)(PAGE_OFFSET +
720                         MAP_ALIGN((unsigned long)lmem_map - PAGE_OFFSET));
721         }
722         *gmap = pgdat->node_mem_map = lmem_map;


> 
> Thanks,
> //richard
> 
> > Honggang Li (1):
> >   delete unnecessary bootmem struct page array
> > 
> >  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(-)
> > 

  reply	other threads:[~2014-06-16  3:29 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-03  5:30 [PATCH v2] delete unnecessary bootmem struct page array Real Name
2014-06-03  5:30 ` [PATCH] " Real Name
2014-06-09  5:49 ` [PATCH v2] " Real Name
2014-06-09  8:59   ` [uml-devel] " Toralf Förster
2014-06-14  9:44 ` Richard Weinberger
2014-06-16  3:28   ` Real Name [this message]
2014-06-16  6:50     ` Richard Weinberger
2014-06-16  8:12       ` Real Name
2014-06-16  8:28         ` Real Name
2014-06-16  9:15           ` Geert Uytterhoeven
2014-06-16 10:30             ` Real Name
2014-07-17 23:10               ` Real Name
2014-06-16  6:58     ` [uml-devel] " Geert Uytterhoeven
2014-06-16  7:21       ` Paul Bolle

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140616032852.GA1763@name \
    --to=enjoymindful@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=richard@nod.at \
    --cc=user-mode-linux-devel@lists.sourceforge.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox