aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/base/memory.c
diff options
context:
space:
mode:
authorAndy Whitcroft <apw@shadowen.org>2007-10-16 04:24:11 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-16 12:42:51 -0400
commit540557b9439ec19668553830c90222f9fb0c2e95 (patch)
tree07dfa0e88580d4101dbb11ebc59348233e18b2f0 /drivers/base/memory.c
parentcd881a6b22902b356cacf8fd2e4e895871068eec (diff)
sparsemem: record when a section has a valid mem_map
We have flags to indicate whether a section actually has a valid mem_map associated with it. This is never set and we rely solely on the present bit to indicate a section is valid. By definition a section is not valid if it has no mem_map and there is a window during init where the present bit is set but there is no mem_map, during which pfn_valid() will return true incorrectly. Use the existing SECTION_HAS_MEM_MAP flag to indicate the presence of a valid mem_map. Switch valid_section{,_nr} and pfn_valid() to this bit. Add a new present_section{,_nr} and pfn_present() interfaces for those users who care to know that a section is going to be valid. [akpm@linux-foundation.org: coding-syle fixes] Signed-off-by: Andy Whitcroft <apw@shadowen.org> Acked-by: Mel Gorman <mel@csn.ul.ie> Cc: Christoph Lameter <clameter@sgi.com> Cc: "Luck, Tony" <tony.luck@intel.com> Cc: Andi Kleen <ak@suse.de> Cc: "David S. Miller" <davem@davemloft.net> Cc: Paul Mackerras <paulus@samba.org> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/base/memory.c')
-rw-r--r--drivers/base/memory.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/base/memory.c b/drivers/base/memory.c
index 7a1390cd6aad..c41d0728efe2 100644
--- a/drivers/base/memory.c
+++ b/drivers/base/memory.c
@@ -238,7 +238,7 @@ store_mem_state(struct sys_device *dev, const char *buf, size_t count)
238 mem = container_of(dev, struct memory_block, sysdev); 238 mem = container_of(dev, struct memory_block, sysdev);
239 phys_section_nr = mem->phys_index; 239 phys_section_nr = mem->phys_index;
240 240
241 if (!valid_section_nr(phys_section_nr)) 241 if (!present_section_nr(phys_section_nr))
242 goto out; 242 goto out;
243 243
244 if (!strncmp(buf, "online", min((int)count, 6))) 244 if (!strncmp(buf, "online", min((int)count, 6)))
@@ -418,7 +418,7 @@ int register_new_memory(struct mem_section *section)
418 418
419int unregister_memory_section(struct mem_section *section) 419int unregister_memory_section(struct mem_section *section)
420{ 420{
421 if (!valid_section(section)) 421 if (!present_section(section))
422 return -EINVAL; 422 return -EINVAL;
423 423
424 return remove_memory_block(0, section, 0); 424 return remove_memory_block(0, section, 0);
@@ -443,7 +443,7 @@ int __init memory_dev_init(void)
443 * during boot and have been initialized 443 * during boot and have been initialized
444 */ 444 */
445 for (i = 0; i < NR_MEM_SECTIONS; i++) { 445 for (i = 0; i < NR_MEM_SECTIONS; i++) {
446 if (!valid_section_nr(i)) 446 if (!present_section_nr(i))
447 continue; 447 continue;
448 err = add_memory_block(0, __nr_to_section(i), MEM_ONLINE, 0); 448 err = add_memory_block(0, __nr_to_section(i), MEM_ONLINE, 0);
449 if (!ret) 449 if (!ret)