From aa6761ca1f2a216248562a08451733fec927e9b7 Mon Sep 17 00:00:00 2001 From: Andy Whitcroft Date: Tue, 16 Oct 2007 01:24:11 -0700 Subject: [PATCH] --- yaml --- r: 69581 b: refs/heads/master c: 540557b9439ec19668553830c90222f9fb0c2e95 h: refs/heads/master i: 69579: fe154468cdcd049955988d862a59f79128f97d7d v: v3 --- [refs] | 2 +- trunk/drivers/base/memory.c | 6 +++--- trunk/include/linux/mmzone.h | 16 ++++++++++++++-- trunk/mm/sparse.c | 9 +++++---- 4 files changed, 23 insertions(+), 10 deletions(-) diff --git a/[refs] b/[refs] index bfe18ec5360b..eace1c54872f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: cd881a6b22902b356cacf8fd2e4e895871068eec +refs/heads/master: 540557b9439ec19668553830c90222f9fb0c2e95 diff --git a/trunk/drivers/base/memory.c b/trunk/drivers/base/memory.c index 7a1390cd6aad..c41d0728efe2 100644 --- a/trunk/drivers/base/memory.c +++ b/trunk/drivers/base/memory.c @@ -238,7 +238,7 @@ store_mem_state(struct sys_device *dev, const char *buf, size_t count) mem = container_of(dev, struct memory_block, sysdev); phys_section_nr = mem->phys_index; - if (!valid_section_nr(phys_section_nr)) + if (!present_section_nr(phys_section_nr)) goto out; if (!strncmp(buf, "online", min((int)count, 6))) @@ -418,7 +418,7 @@ int register_new_memory(struct mem_section *section) int unregister_memory_section(struct mem_section *section) { - if (!valid_section(section)) + if (!present_section(section)) return -EINVAL; return remove_memory_block(0, section, 0); @@ -443,7 +443,7 @@ int __init memory_dev_init(void) * during boot and have been initialized */ for (i = 0; i < NR_MEM_SECTIONS; i++) { - if (!valid_section_nr(i)) + if (!present_section_nr(i)) continue; err = add_memory_block(0, __nr_to_section(i), MEM_ONLINE, 0); if (!ret) diff --git a/trunk/include/linux/mmzone.h b/trunk/include/linux/mmzone.h index 4e5627379b09..f21e5951038b 100644 --- a/trunk/include/linux/mmzone.h +++ b/trunk/include/linux/mmzone.h @@ -771,12 +771,17 @@ static inline struct page *__section_mem_map_addr(struct mem_section *section) return (struct page *)map; } -static inline int valid_section(struct mem_section *section) +static inline int present_section(struct mem_section *section) { return (section && (section->section_mem_map & SECTION_MARKED_PRESENT)); } -static inline int section_has_mem_map(struct mem_section *section) +static inline int present_section_nr(unsigned long nr) +{ + return present_section(__nr_to_section(nr)); +} + +static inline int valid_section(struct mem_section *section) { return (section && (section->section_mem_map & SECTION_HAS_MEM_MAP)); } @@ -798,6 +803,13 @@ static inline int pfn_valid(unsigned long pfn) return valid_section(__nr_to_section(pfn_to_section_nr(pfn))); } +static inline int pfn_present(unsigned long pfn) +{ + if (pfn_to_section_nr(pfn) >= NR_MEM_SECTIONS) + return 0; + return present_section(__nr_to_section(pfn_to_section_nr(pfn))); +} + /* * These are _only_ used during initialisation, therefore they * can use __initdata ... They could have names to indicate diff --git a/trunk/mm/sparse.c b/trunk/mm/sparse.c index e8f36e4796d0..54f3940406cb 100644 --- a/trunk/mm/sparse.c +++ b/trunk/mm/sparse.c @@ -176,7 +176,7 @@ unsigned long __init node_memmap_size_bytes(int nid, unsigned long start_pfn, if (nid != early_pfn_to_nid(pfn)) continue; - if (pfn_valid(pfn)) + if (pfn_present(pfn)) nr_pages += PAGES_PER_SECTION; } @@ -206,11 +206,12 @@ struct page *sparse_decode_mem_map(unsigned long coded_mem_map, unsigned long pn static int __meminit sparse_init_one_section(struct mem_section *ms, unsigned long pnum, struct page *mem_map) { - if (!valid_section(ms)) + if (!present_section(ms)) return -EINVAL; ms->section_mem_map &= ~SECTION_MAP_MASK; - ms->section_mem_map |= sparse_encode_mem_map(mem_map, pnum); + ms->section_mem_map |= sparse_encode_mem_map(mem_map, pnum) | + SECTION_HAS_MEM_MAP; return 1; } @@ -256,7 +257,7 @@ void __init sparse_init(void) struct page *map; for (pnum = 0; pnum < NR_MEM_SECTIONS; pnum++) { - if (!valid_section_nr(pnum)) + if (!present_section_nr(pnum)) continue; map = sparse_early_mem_map_alloc(pnum);