public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Andy Whitcroft <apw@shadowen.org>
To: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
	Andrew Morton <akpm@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, clameter@sgi.com
Subject: Re: 2.6.23-rc1-mm1 sparsemem_vmemamp fix.
Date: Thu, 26 Jul 2007 15:39:42 +0100	[thread overview]
Message-ID: <46A8B22E.1060000@shadowen.org> (raw)
In-Reply-To: <20070726215840.efd7b85f.kamezawa.hiroyu@jp.fujitsu.com>

KAMEZAWA Hiroyuki wrote:
> Fix sparsemem_vmemmap init. sorry if known bug.
> 
> This patch fixes page table handling in sparsemem_vmammap.
> 
> Without this, part of vmem_map is not mapped because each section's start addr of
> mem_map is not aligned to PGD/PMD/PUD. 
> (In ia64, secion's mem_map size is 3670016bytes. )
> 
> for example, 
> 
>  addr     pmd_addr_end(addr_end)         addr + PMD_SIZE
>   |XXXXXXXXXX|??????????????????????????????|XXXXXXXXXXXXXXXXXX
> 
>   X ... initialized vmem_map
>   ? ... not intialized
> 
> Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>

I think the code change below is safe enough.  I have not found it easy
to understand your description above but I think that you are saying
that if the section we are initialising is bigger than a PMD size, but
falls offset from the PMD start we will initialise the end of the first
PMD and the end of the second PMD and so on.  The "start" of the second
PMD is missed.

Ahh yes, that I think is what your diagram shows.  Yes this is pretty
clearly wrong for any sort of offset initialisation, and would be worse
lower down in the hierachy.  This seems like a clean way to fix the bug.
 Thanks for finding this.

Acked-by: Andy Whitcroft <apw@shadowen.org>

> 
> 
> 
> ---
>  mm/sparse.c |   24 +++++++++++++-----------
>  1 file changed, 13 insertions(+), 11 deletions(-)
> 
> Index: devel-2.6.23-rc1-mm1/mm/sparse.c
> ===================================================================
> --- devel-2.6.23-rc1-mm1.orig/mm/sparse.c
> +++ devel-2.6.23-rc1-mm1/mm/sparse.c
> @@ -320,7 +320,7 @@ static int __meminit vmemmap_populate_pt
>  {
>  	pte_t *pte;
>  
> -	for (pte = pte_offset_map(pmd, addr); addr < end;
> +	for (pte = pte_offset_kernel(pmd, addr); addr < end;
>  						pte++, addr += PAGE_SIZE)
>  		if (pte_none(*pte)) {
>  			pte_t entry;
> @@ -345,9 +345,10 @@ int __meminit vmemmap_populate_pmd(pud_t
>  {
>  	pmd_t *pmd;
>  	int error = 0;
> +	unsigned long next;
>  
>  	for (pmd = pmd_offset(pud, addr); addr < end && !error;
> -						pmd++, addr += PMD_SIZE) {
> +						pmd++, addr = next) {
>  		if (pmd_none(*pmd)) {
>  			void *p = vmemmap_alloc_block(PAGE_SIZE, node);
>  			if (!p)
> @@ -357,9 +358,8 @@ int __meminit vmemmap_populate_pmd(pud_t
>  		} else
>  			vmemmap_verify((pte_t *)pmd, node,
>  					pmd_addr_end(addr, end), end);
> -
> -		error = vmemmap_populate_pte(pmd, addr,
> -					pmd_addr_end(addr, end), node);
> +		next = pmd_addr_end(addr, end);
> +		error = vmemmap_populate_pte(pmd, addr, next, node);
>  	}
>  	return error;
>  }
> @@ -370,9 +370,10 @@ static int __meminit vmemmap_populate_pu
>  {
>  	pud_t *pud;
>  	int error = 0;
> +	unsigned long next;
>  
>  	for (pud = pud_offset(pgd, addr); addr < end && !error;
> -						pud++, addr += PUD_SIZE) {
> +						pud++, addr = next) {
>  		if (pud_none(*pud)) {
>  			void *p = vmemmap_alloc_block(PAGE_SIZE, node);
>  			if (!p)
> @@ -380,8 +381,8 @@ static int __meminit vmemmap_populate_pu
>  
>  			pud_populate(&init_mm, pud, p);
>  		}
> -		error = vmemmap_populate_pmd(pud, addr,
> -					pud_addr_end(addr, end), node);
> +		next = pud_addr_end(addr, end);
> +		error = vmemmap_populate_pmd(pud, addr, next, node);
>  	}
>  	return error;
>  }
> @@ -392,13 +393,14 @@ int __meminit vmemmap_populate(struct pa
>  	pgd_t *pgd;
>  	unsigned long addr = (unsigned long)start_page;
>  	unsigned long end = (unsigned long)(start_page + nr);
> +	unsigned long next;
>  	int error = 0;
>  
>  	printk(KERN_DEBUG "[%lx-%lx] Virtual memory section"
>  		" (%ld pages) node %d\n", addr, end - 1, nr, node);
>  
>  	for (pgd = pgd_offset_k(addr); addr < end && !error;
> -					pgd++, addr += PGDIR_SIZE) {
> +					pgd++, addr = next) {
>  		if (pgd_none(*pgd)) {
>  			void *p = vmemmap_alloc_block(PAGE_SIZE, node);
>  			if (!p)
> @@ -406,8 +408,8 @@ int __meminit vmemmap_populate(struct pa
>  
>  			pgd_populate(&init_mm, pgd, p);
>  		}
> -		error = vmemmap_populate_pud(pgd, addr,
> -					pgd_addr_end(addr, end), node);
> +		next = pgd_addr_end(addr,end);
> +		error = vmemmap_populate_pud(pgd, addr, next, node);
>  	}
>  	return error;
>  }

-apw


  reply	other threads:[~2007-07-26 14:39 UTC|newest]

Thread overview: 132+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-07-25 11:03 2.6.23-rc1-mm1 Andrew Morton
2007-07-25 12:25 ` 2.6.23-rc1-mm1 Cedric Le Goater
2007-07-25 17:23   ` 2.6.23-rc1-mm1 Len Brown
2007-07-25 18:58     ` 2.6.23-rc1-mm1 Andrew Morton
2007-07-25 19:13       ` 2.6.23-rc1-mm1 Torsten Kaiser
2007-07-25 20:22         ` 2.6.23-rc1-mm1 Torsten Kaiser
2007-07-25 20:36           ` 2.6.23-rc1-mm1 Andrew Morton
2007-07-25 21:52             ` 2.6.23-rc1-mm1 Torsten Kaiser
2007-07-26  7:25               ` 2.6.23-rc1-mm1 Andrew Morton
2007-07-26 17:54                 ` 2.6.23-rc1-mm1 Torsten Kaiser
2007-07-28 14:03                   ` 2.6.23-rc1-mm1 Torsten Kaiser
2007-07-25 23:26       ` 2.6.23-rc1-mm1 Len Brown
2007-07-26  9:41         ` 2.6.23-rc1-mm1 Mel Gorman
2007-07-26 13:53           ` 2.6.23-rc1-mm1 Cedric Le Goater
2007-07-25 12:40 ` 2.6.23-rc1-mm1 Cedric Le Goater
2007-07-25 20:05   ` 2.6.23-rc1-mm1 Andrew Morton
2007-07-25 12:55 ` 2.6.23-rc1-mm1 Cedric Le Goater
2007-07-25 13:48   ` 2.6.23-rc1-mm1: chipsfb_pci_suspend problem Rafael J. Wysocki
2007-07-25 20:22     ` Andrew Morton
2007-07-25 22:45       ` Pavel Machek
2007-07-25 13:36 ` [-mm patch] one e1000 driver should be enough for everyone Adrian Bunk
2007-07-25 13:48   ` Jeff Garzik
2007-07-25 14:46     ` Adrian Bunk
2007-07-25 15:05       ` Jeff Garzik
2007-07-25 15:21         ` Kok, Auke
2007-07-25 15:23           ` Jeff Garzik
2007-07-25 20:50           ` Andrew Morton
2007-07-25 16:32 ` 2.6.23-rc1-mm1 Michal Piotrowski
2007-07-25 21:56   ` 2.6.23-rc1-mm1 Andrew Morton
2007-07-25 16:36 ` 2.6.23-rc1-mm1 -- mostly fails to build Andy Whitcroft
2007-07-25 17:04   ` Sam Ravnborg
2007-07-25 18:06   ` 2.6.23-rc1-mm1: SCSI_SRP_ATTRS compile error Adrian Bunk
2007-07-26 10:49     ` FUJITA Tomonori
2007-07-25 22:41   ` 2.6.23-rc1-mm1 -- mostly fails to build Andy Whitcroft
2007-07-26  5:56     ` Andrew Morton
2007-07-26 17:53       ` Yinghai Lu
2007-07-25 18:15 ` 2.6.23-rc1-mm1: net/ipv4/fib_trie.c compile error Adrian Bunk
2007-07-25 18:22 ` 2.6.23-rc1-mm1: reiser4 <-> lzo " Adrian Bunk
2007-07-25 18:44   ` Edward Shishkin
2007-07-27 12:35   ` Edward Shishkin
2007-07-27 15:11     ` Richard Purdie
2007-07-25 18:48 ` 2.6.23-rc1-mm1 Michal Piotrowski
2007-07-25 18:53   ` 2.6.23-rc1-mm1 Sam Ravnborg
2007-07-25 19:18     ` 2.6.23-rc1-mm1 H. Peter Anvin
2007-07-25 19:21       ` 2.6.23-rc1-mm1 Sam Ravnborg
2007-07-25 20:58       ` 2.6.23-rc1-mm1 Gabriel C
2007-07-25 21:05         ` 2.6.23-rc1-mm1 Gabriel C
2007-07-25 21:11           ` 2.6.23-rc1-mm1 H. Peter Anvin
2007-07-25 21:13             ` 2.6.23-rc1-mm1 Gabriel C
2007-07-25 21:18               ` 2.6.23-rc1-mm1 H. Peter Anvin
2007-07-25 21:26                 ` 2.6.23-rc1-mm1 Gabriel C
2007-07-26  0:07           ` 2.6.23-rc1-mm1 Greg KH
2007-07-26  0:28             ` 2.6.23-rc1-mm1 Andrew Morton
2007-07-26  1:55               ` 2.6.23-rc1-mm1 Dave Young
2007-07-26  2:23                 ` 2.6.23-rc1-mm1 Andrew Morton
2007-07-26 20:18             ` 2.6.23-rc1-mm1 Dave Hansen
2007-07-25 20:42 ` 2.6.23-rc1-mm1 - drivers/char/nozomi.c overflow in implicit constant conversion , warnings Gabriel C
2007-07-26  5:42   ` Greg KH
2007-07-25 21:01 ` 2.6.23-rc1-mm1: m32r is_init() compile error Adrian Bunk
2007-07-25 21:42   ` sukadev
2007-07-25 21:17 ` 2.6.23-rc1-mm1: git-kgdb breaks sh compilation Adrian Bunk
2007-07-26  1:45   ` Paul Mundt
2007-07-25 22:03 ` 2.6.23-rc1-mm1 - seems OK on Dell Latitude D820, except for tpm_tis Valdis.Kletnieks
2007-07-26  3:37   ` Andrew Morton
2007-07-27  4:00     ` Valdis.Kletnieks
2007-07-27 13:28       ` Valdis.Kletnieks
2007-07-27 18:07         ` Andrew Morton
2007-07-27 19:44           ` Valdis.Kletnieks
2007-07-27 22:43         ` Bjorn Helgaas
2007-07-30 18:09           ` Bjorn Helgaas
2007-07-30 23:53           ` Valdis.Kletnieks
2007-07-31 18:48             ` Valdis.Kletnieks
2007-07-31 20:01               ` Bjorn Helgaas
2007-07-31 21:31                 ` Valdis.Kletnieks
2007-07-31 23:05                   ` Bjorn Helgaas
2007-07-26  5:26 ` [-mm patch] DMA engine kconfig improvements Adrian Bunk
2007-08-04  2:15   ` Dan Williams
2007-08-10  0:43     ` Adrian Bunk
2007-08-15 23:36   ` Nelson, Shannon
2007-07-26 12:11 ` [PATCH] sparsemem: ensure we initialise the node mapping for SPARSEMEM_STATIC Andy Whitcroft
2007-07-26 12:58 ` 2.6.23-rc1-mm1 sparsemem_vmemamp fix KAMEZAWA Hiroyuki
2007-07-26 14:39   ` Andy Whitcroft [this message]
2007-07-26 14:44     ` Andy Whitcroft
2007-07-27 13:28 ` [-mm patch] xtensa console.c: remove duplicate #include Frederik Deweerdt
2007-07-28 15:44 ` NETPOLL=y , NETDEVICES=n compile error ( Re: 2.6.23-rc1-mm1 ) Gabriel C
2007-07-28 17:26   ` Andrew Morton
2007-07-28 18:42     ` Gabriel C
2007-07-31  8:32       ` Jarek Poplawski
2007-07-31 10:14         ` Gabriel C
2007-07-31 11:44           ` Jason Wessel
2007-07-31 12:47             ` Jarek Poplawski
2007-07-31 12:17           ` Jarek Poplawski
2007-07-31 15:05             ` Gabriel C
2007-08-01  9:59               ` Jarek Poplawski
2007-08-02  2:02                 ` Matt Mackall
2007-08-02  9:00                   ` Jarek Poplawski
2007-08-02 15:59                     ` Matt Mackall
2007-08-03  7:30                       ` Jarek Poplawski
2007-08-02  9:36                   ` Sam Ravnborg
2007-08-02 10:32                     ` Satyam Sharma
2007-08-02 11:40                       ` Satyam Sharma
2007-08-02 11:40                       ` Jarek Poplawski
2007-08-02 11:56                         ` Satyam Sharma
2007-08-02 12:52                           ` Jarek Poplawski
2007-08-06 11:51                     ` [PATCH] docs: note about select in kconfig-language.txt Jarek Poplawski
2007-07-28 16:36 ` DCA=n , INTEL_IOATDMA=y compile error ( Re: 2.6.23-rc1-mm1 ) Gabriel C
2007-07-28 16:47 ` sound/pci/ac97/ac97_patch.h - declared 'static' but never defined warnings " Gabriel C
2007-07-28 17:07 ` mm/sparse.c compile error " Gabriel C
2007-07-28 17:30   ` Andrew Morton
2007-07-30 12:16     ` Andy Whitcroft
2007-07-28 19:32 ` [PATCH -mm] Fix libata warnings with CONFIG_PM=n Gabriel C
2007-07-29 14:57 ` [-mm patch] make hugetlbfs_read() static Adrian Bunk
2007-07-29 14:57 ` [-mm patch] fs/ecryptfs/: make code static Adrian Bunk
2007-07-29 14:58 ` [-mm patch] make struct sdio_dev_attrs[] static Adrian Bunk
2007-07-29 19:29   ` Pierre Ossman
2007-07-29 14:58 ` [-mm patch] MTD onenand_sim.c: make struct info static Adrian Bunk
2007-07-29 14:58 ` [-mm patch] make scsi_host_link_pm_policy() static Adrian Bunk
2007-07-29 14:58 ` [-mm patch] USB: make dev_attr_authorized_default static Adrian Bunk
2007-07-31 19:13   ` Inaky Perez-Gonzalez
2007-07-29 14:59 ` [-mm patch] kernel/printk.c: make 2 variables static Adrian Bunk
2007-07-29 16:51   ` Randy Dunlap
2007-07-29 14:59 ` [-mm patch] export v4l2_int_device_{,un}register Adrian Bunk
2007-07-29 14:59 ` [-mm patch] kernel/pid.c: remove unused exports Adrian Bunk
2007-07-29 15:00 ` [-mm patch] security/ cleanups Adrian Bunk
2007-07-30 11:47   ` James Morris
2007-07-29 15:49 ` 2.6.23-rc1-mm1 Grant Wilson
2007-07-30  9:58   ` 2.6.23-rc1-mm1 Dave Young
2007-07-30 18:27     ` 2.6.23-rc1-mm1 Andrew Morton
2007-07-30 18:42       ` 2.6.23-rc1-mm1 Christoph Hellwig
2007-07-30 22:18         ` 2.6.23-rc1-mm1 Satyam Sharma
2007-07-31  1:21           ` 2.6.23-rc1-mm1 Dave Young
2007-08-01 15:24 ` 2.6.23-rc1-mm1 - loopback mount of files fails loop-use-unlocked_ioctl.patch Valdis.Kletnieks

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=46A8B22E.1060000@shadowen.org \
    --to=apw@shadowen.org \
    --cc=akpm@linux-foundation.org \
    --cc=clameter@sgi.com \
    --cc=kamezawa.hiroyu@jp.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    /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