All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paul Mundt <lethal@linux-sh.org>
To: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Sam Ravnborg <sam@ravnborg.org>,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org
Subject: Re: mm: memory/cpu hotplug section mismatch.
Date: Mon, 11 Jun 2007 14:09:55 +0900	[thread overview]
Message-ID: <20070611050955.GA23215@linux-sh.org> (raw)
In-Reply-To: <20070611140145.05726c0f.kamezawa.hiroyu@jp.fujitsu.com>

On Mon, Jun 11, 2007 at 02:01:45PM +0900, KAMEZAWA Hiroyuki wrote:
> On Mon, 11 Jun 2007 13:35:43 +0900
> Paul Mundt <lethal@linux-sh.org> wrote:
> 
> > When building with memory hotplug enabled and cpu hotplug disabled, we
> > end up with the following section mismatch:
> > 
> > WARNING: mm/built-in.o(.text+0x4e58): Section mismatch: reference to
> > .init.text: (between 'free_area_init_node' and '__build_all_zonelists')
> > 
> > This happens as a result of:
> > 
> > 	-> free_area_init_node()
> > 	  -> free_area_init_core()
> > 	    -> zone_pcp_init() <-- all __meminit up to this point
> > 	      -> zone_batchsize() <-- marked as __cpuinit
> > 
> > This happens because CONFIG_HOTPLUG_CPU=n sets __cpuinit to __init, but
> > CONFIG_MEMORY_HOTPLUG=y unsets __meminit.
> > 
> > Changing zone_batchsize() to __init_refok fixes this.
> > 
> 
> It seems this zone_batchsize() is called by cpu-hotplug and memory-hotplug.
> So, __init_refok doesn't look good, here.
> 
> maybe we can use __devinit here. (Because HOTPLUG_CPU and MEMORY_HOTPLUG are
> depend on CONFIG_HOTPLUG.)
> 
Yes, that's probably a more reasonable way to go. The __devinit name is a
bit misleading, though..

--

diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index bd8e335..05ace44 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -1968,7 +1968,7 @@ void zone_init_free_lists(struct pglist_data *pgdat, struct zone *zone,
 	memmap_init_zone((size), (nid), (zone), (start_pfn), MEMMAP_EARLY)
 #endif
 
-static int __cpuinit zone_batchsize(struct zone *zone)
+static int __devinit zone_batchsize(struct zone *zone)
 {
 	int batch;
 

WARNING: multiple messages have this Message-ID (diff)
From: Paul Mundt <lethal@linux-sh.org>
To: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Sam Ravnborg <sam@ravnborg.org>,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org
Subject: Re: mm: memory/cpu hotplug section mismatch.
Date: Mon, 11 Jun 2007 14:09:55 +0900	[thread overview]
Message-ID: <20070611050955.GA23215@linux-sh.org> (raw)
In-Reply-To: <20070611140145.05726c0f.kamezawa.hiroyu@jp.fujitsu.com>

On Mon, Jun 11, 2007 at 02:01:45PM +0900, KAMEZAWA Hiroyuki wrote:
> On Mon, 11 Jun 2007 13:35:43 +0900
> Paul Mundt <lethal@linux-sh.org> wrote:
> 
> > When building with memory hotplug enabled and cpu hotplug disabled, we
> > end up with the following section mismatch:
> > 
> > WARNING: mm/built-in.o(.text+0x4e58): Section mismatch: reference to
> > .init.text: (between 'free_area_init_node' and '__build_all_zonelists')
> > 
> > This happens as a result of:
> > 
> > 	-> free_area_init_node()
> > 	  -> free_area_init_core()
> > 	    -> zone_pcp_init() <-- all __meminit up to this point
> > 	      -> zone_batchsize() <-- marked as __cpuinit
> > 
> > This happens because CONFIG_HOTPLUG_CPU=n sets __cpuinit to __init, but
> > CONFIG_MEMORY_HOTPLUG=y unsets __meminit.
> > 
> > Changing zone_batchsize() to __init_refok fixes this.
> > 
> 
> It seems this zone_batchsize() is called by cpu-hotplug and memory-hotplug.
> So, __init_refok doesn't look good, here.
> 
> maybe we can use __devinit here. (Because HOTPLUG_CPU and MEMORY_HOTPLUG are
> depend on CONFIG_HOTPLUG.)
> 
Yes, that's probably a more reasonable way to go. The __devinit name is a
bit misleading, though..

--

diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index bd8e335..05ace44 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -1968,7 +1968,7 @@ void zone_init_free_lists(struct pglist_data *pgdat, struct zone *zone,
 	memmap_init_zone((size), (nid), (zone), (start_pfn), MEMMAP_EARLY)
 #endif
 
-static int __cpuinit zone_batchsize(struct zone *zone)
+static int __devinit zone_batchsize(struct zone *zone)
 {
 	int batch;
 

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  reply	other threads:[~2007-06-11  5:11 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-06-11  4:35 mm: memory/cpu hotplug section mismatch Paul Mundt
2007-06-11  4:35 ` Paul Mundt
2007-06-11  5:01 ` KAMEZAWA Hiroyuki
2007-06-11  5:01   ` KAMEZAWA Hiroyuki
2007-06-11  5:09   ` Paul Mundt [this message]
2007-06-11  5:09     ` Paul Mundt
2007-06-11 15:27     ` Randy Dunlap
2007-06-11 15:27       ` Randy Dunlap
2007-06-11 15:44       ` Paul Mundt
2007-06-11 15:44         ` Paul Mundt
2007-06-11 18:40         ` Sam Ravnborg
2007-06-11 18:40           ` Sam Ravnborg
2007-06-12  1:50           ` Yasunori Goto
2007-06-12  1:50             ` Yasunori Goto
2007-06-12  3:19             ` Paul Mundt
2007-06-12  3:19               ` Paul Mundt

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=20070611050955.GA23215@linux-sh.org \
    --to=lethal@linux-sh.org \
    --cc=kamezawa.hiroyu@jp.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=sam@ravnborg.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.