From: Tejun Heo <tj@kernel.org> To: benh@kernel.crashing.org, yinghai@kernel.org, hpa@zytor.com, tony.luck@intel.com, ralf@linux-mips.org, schwidefsky@de.ibm.com, liqin.chen@sunplusct.com, lethal@linux-sh.org, davem@davemloft.net, linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org Cc: mingo@redhat.com, Tejun Heo <tj@kernel.org> Subject: [PATCH 10/23] memblock: Reimplement memblock_enforce_memory_limit() using __memblock_remove() Date: Tue, 26 Jul 2011 17:35:21 +0200 [thread overview] Message-ID: <1311694534-5161-11-git-send-email-tj@kernel.org> (raw) In-Reply-To: <1311694534-5161-1-git-send-email-tj@kernel.org> With recent updates, the basic memblock operations are robust enough that there's no reason for memblock_enfore_memory_limit() to directly manipulate memblock region arrays. Reimplement it using __memblock_remove(). Signed-off-by: Tejun Heo <tj@kernel.org> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Yinghai Lu <yinghai@kernel.org> --- mm/memblock.c | 42 +++++++++++++----------------------------- 1 files changed, 13 insertions(+), 29 deletions(-) diff --git a/mm/memblock.c b/mm/memblock.c index 53d214a..d8582f7 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -798,44 +798,28 @@ phys_addr_t __init_memblock memblock_end_of_DRAM(void) } /* You must call memblock_analyze() after this. */ -void __init memblock_enforce_memory_limit(phys_addr_t memory_limit) +void __init memblock_enforce_memory_limit(phys_addr_t limit) { unsigned long i; - phys_addr_t limit; - struct memblock_region *p; + phys_addr_t max_addr = (phys_addr_t)ULLONG_MAX; - if (!memory_limit) + if (!limit) return; - /* Truncate the memblock regions to satisfy the memory limit. */ - limit = memory_limit; + /* find out max address */ for (i = 0; i < memblock.memory.cnt; i++) { - if (limit > memblock.memory.regions[i].size) { - limit -= memblock.memory.regions[i].size; - continue; - } - - memblock.memory.regions[i].size = limit; - memblock.memory.cnt = i + 1; - break; - } - - memory_limit = memblock_end_of_DRAM(); + struct memblock_region *r = &memblock.memory.regions[i]; - /* And truncate any reserves above the limit also. */ - for (i = 0; i < memblock.reserved.cnt; i++) { - p = &memblock.reserved.regions[i]; - - if (p->base > memory_limit) - p->size = 0; - else if ((p->base + p->size) > memory_limit) - p->size = memory_limit - p->base; - - if (p->size == 0) { - memblock_remove_region(&memblock.reserved, i); - i--; + if (limit <= r->size) { + max_addr = r->base + limit; + break; } + limit -= r->size; } + + /* truncate both memory and reserved regions */ + __memblock_remove(&memblock.memory, max_addr, (phys_addr_t)ULLONG_MAX); + __memblock_remove(&memblock.reserved, max_addr, (phys_addr_t)ULLONG_MAX); } static int __init_memblock memblock_search(struct memblock_type *type, phys_addr_t addr) -- 1.7.6
WARNING: multiple messages have this Message-ID (diff)
From: Tejun Heo <tj@kernel.org> To: benh@kernel.crashing.org, yinghai@kernel.org, hpa@zytor.com, tony.luck@intel.com, ralf@linux-mips.org, schwidefsky@de.ibm.com, liqin.chen@sunplusct.com, lethal@linux-sh.org, davem@dave Cc: mingo@redhat.com, Tejun Heo <tj@kernel.org> Subject: [PATCH 10/23] memblock: Reimplement memblock_enforce_memory_limit() using __memblock_remove() Date: Tue, 26 Jul 2011 17:35:21 +0200 [thread overview] Message-ID: <1311694534-5161-11-git-send-email-tj@kernel.org> (raw) In-Reply-To: <1311694534-5161-1-git-send-email-tj@kernel.org> With recent updates, the basic memblock operations are robust enough that there's no reason for memblock_enfore_memory_limit() to directly manipulate memblock region arrays. Reimplement it using __memblock_remove(). Signed-off-by: Tejun Heo <tj@kernel.org> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Yinghai Lu <yinghai@kernel.org> --- mm/memblock.c | 42 +++++++++++++----------------------------- 1 files changed, 13 insertions(+), 29 deletions(-) diff --git a/mm/memblock.c b/mm/memblock.c index 53d214a..d8582f7 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -798,44 +798,28 @@ phys_addr_t __init_memblock memblock_end_of_DRAM(void) } /* You must call memblock_analyze() after this. */ -void __init memblock_enforce_memory_limit(phys_addr_t memory_limit) +void __init memblock_enforce_memory_limit(phys_addr_t limit) { unsigned long i; - phys_addr_t limit; - struct memblock_region *p; + phys_addr_t max_addr = (phys_addr_t)ULLONG_MAX; - if (!memory_limit) + if (!limit) return; - /* Truncate the memblock regions to satisfy the memory limit. */ - limit = memory_limit; + /* find out max address */ for (i = 0; i < memblock.memory.cnt; i++) { - if (limit > memblock.memory.regions[i].size) { - limit -= memblock.memory.regions[i].size; - continue; - } - - memblock.memory.regions[i].size = limit; - memblock.memory.cnt = i + 1; - break; - } - - memory_limit = memblock_end_of_DRAM(); + struct memblock_region *r = &memblock.memory.regions[i]; - /* And truncate any reserves above the limit also. */ - for (i = 0; i < memblock.reserved.cnt; i++) { - p = &memblock.reserved.regions[i]; - - if (p->base > memory_limit) - p->size = 0; - else if ((p->base + p->size) > memory_limit) - p->size = memory_limit - p->base; - - if (p->size == 0) { - memblock_remove_region(&memblock.reserved, i); - i--; + if (limit <= r->size) { + max_addr = r->base + limit; + break; } + limit -= r->size; } + + /* truncate both memory and reserved regions */ + __memblock_remove(&memblock.memory, max_addr, (phys_addr_t)ULLONG_MAX); + __memblock_remove(&memblock.reserved, max_addr, (phys_addr_t)ULLONG_MAX); } static int __init_memblock memblock_search(struct memblock_type *type, phys_addr_t addr) -- 1.7.6
next prev parent reply other threads:[~2011-07-26 15:37 UTC|newest] Thread overview: 77+ messages / expand[flat|nested] mbox.gz Atom feed top 2011-07-26 15:35 [PATCHSET tip:x86/memblock] memblock: Kill early_node_map[] Tejun Heo 2011-07-26 15:35 ` Tejun Heo 2011-07-26 15:35 ` [PATCH 01/23] memblock: Make memblock_overlaps_region() static Tejun Heo 2011-07-26 15:35 ` Tejun Heo 2011-07-26 15:35 ` [PATCH 02/23] memblock: Make memblock_{add|remove|free|reserve}() return int and update prototypes Tejun Heo 2011-07-26 15:35 ` Tejun Heo 2011-07-26 15:35 ` [PATCH 03/23] memblock: Use memblock_reserve() in memblock internal functions Tejun Heo 2011-07-26 15:35 ` Tejun Heo 2011-07-26 15:35 ` [PATCH 04/23] memblock: Add __memblock_dump_all() Tejun Heo 2011-07-26 15:35 ` Tejun Heo 2011-07-26 15:35 ` [PATCH 05/23] memblock: Kill sentinel entries at the end of static region arrays Tejun Heo 2011-07-26 15:35 ` Tejun Heo 2011-07-26 15:35 ` [PATCH 06/23] memblock: Kill memblock_init() Tejun Heo 2011-07-26 15:35 ` Tejun Heo 2011-07-26 15:35 ` [PATCH 07/23] memblock: Separate out memblock_isolate_range() from memblock_set_node() Tejun Heo 2011-07-26 15:35 ` Tejun Heo 2011-07-26 15:35 ` [PATCH 08/23] memblock: Reimplement __memblock_remove() using memblock_isolate_range() Tejun Heo 2011-07-26 15:35 ` Tejun Heo 2011-07-28 9:43 ` [PATCH UPDATED " Tejun Heo 2011-07-28 9:43 ` Tejun Heo 2011-07-28 9:43 ` Tejun Heo 2011-07-26 15:35 ` [PATCH 09/23] memblock: Make memblock functions handle overflowing range @size Tejun Heo 2011-07-26 15:35 ` Tejun Heo 2011-07-26 15:35 ` Tejun Heo [this message] 2011-07-26 15:35 ` [PATCH 10/23] memblock: Reimplement memblock_enforce_memory_limit() using __memblock_remove() Tejun Heo 2011-07-26 15:35 ` [PATCH 11/23] powerpc: Cleanup memblock usage Tejun Heo 2011-07-26 15:35 ` Tejun Heo 2011-07-26 15:35 ` [PATCH 12/23] memblock: Track total size of regions automatically Tejun Heo 2011-07-26 15:35 ` Tejun Heo 2011-07-26 15:35 ` [PATCH 13/23] memblock: s/memblock_analyze()/memblock_allow_resize()/ and update users Tejun Heo 2011-07-26 15:35 ` Tejun Heo 2011-07-26 15:35 ` [PATCH 14/23] memblock: Implement memblock_add_node() Tejun Heo 2011-07-26 15:35 ` Tejun Heo 2011-07-26 15:35 ` [PATCH 15/23] powerpc: Use HAVE_MEMBLOCK_NODE_MAP Tejun Heo 2011-07-26 15:35 ` Tejun Heo 2011-07-26 15:35 ` [PATCH 16/23] sparc: " Tejun Heo 2011-07-26 15:35 ` Tejun Heo 2011-08-04 9:52 ` Tejun Heo 2011-08-04 9:52 ` Tejun Heo 2011-08-04 9:52 ` Tejun Heo 2011-08-04 10:13 ` David Miller 2011-08-04 10:13 ` David Miller 2011-08-08 12:30 ` [PATCH UPDATED " Tejun Heo 2011-08-08 12:30 ` Tejun Heo 2011-08-08 12:30 ` Tejun Heo 2011-07-26 15:35 ` [PATCH " Tejun Heo 2011-07-26 15:35 ` [PATCH 17/23] SuperH: " Tejun Heo 2011-07-26 15:35 ` Tejun Heo 2011-07-26 15:35 ` Tejun Heo 2011-07-26 15:35 ` [PATCH 18/23] ia64: " Tejun Heo 2011-07-26 15:35 ` Tejun Heo 2011-07-26 15:35 ` Tejun Heo 2011-07-26 15:35 ` [PATCH 19/23] mips: " Tejun Heo 2011-07-26 15:35 ` Tejun Heo 2011-08-03 16:17 ` Ralf Baechle 2011-08-03 16:26 ` Tejun Heo 2011-07-26 15:35 ` [PATCH 20/23] s390: " Tejun Heo 2011-07-26 15:35 ` Tejun Heo 2011-07-26 15:35 ` [PATCH 21/23] score: " Tejun Heo 2011-07-26 15:35 ` Tejun Heo 2011-07-26 15:35 ` [PATCH 22/23] memblock: Kill early_node_map[] Tejun Heo 2011-07-26 15:35 ` Tejun Heo 2011-08-08 12:32 ` [PATCH UPDATED " Tejun Heo 2011-08-08 12:32 ` Tejun Heo 2011-07-26 15:35 ` [PATCH 23/23] memblock: Reimplement memblock allocation using reverse free area iterator Tejun Heo 2011-07-26 15:35 ` Tejun Heo 2011-07-26 21:14 ` [PATCHSET tip:x86/memblock] memblock: Kill early_node_map[] Yinghai Lu 2011-07-26 21:49 ` Tejun Heo 2011-07-26 22:20 ` H. Peter Anvin 2011-07-28 9:41 ` [PATCH 0.5/23] memblock: Fix include breakages caused by 24aa07882b Tejun Heo 2011-07-28 9:41 ` Tejun Heo 2011-07-28 9:41 ` Tejun Heo 2011-08-18 12:00 ` [PATCHSET tip:x86/memblock] memblock: Kill early_node_map[] Tejun Heo 2011-08-18 12:00 ` Tejun Heo 2011-08-18 21:13 ` H. Peter Anvin 2011-08-18 21:13 ` H. Peter Anvin 2011-11-28 19:31 [PATCHSET tip:x86/memblock] memblock: Kill early_node_map[], take 2 Tejun Heo 2011-11-28 19:31 ` [PATCH 10/23] memblock: Reimplement memblock_enforce_memory_limit() using __memblock_remove() Tejun Heo
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=1311694534-5161-11-git-send-email-tj@kernel.org \ --to=tj@kernel.org \ --cc=benh@kernel.crashing.org \ --cc=davem@davemloft.net \ --cc=hpa@zytor.com \ --cc=lethal@linux-sh.org \ --cc=linux-arch@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=liqin.chen@sunplusct.com \ --cc=mingo@redhat.com \ --cc=ralf@linux-mips.org \ --cc=schwidefsky@de.ibm.com \ --cc=tony.luck@intel.com \ --cc=yinghai@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: linkBe 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.