From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Yinghai Lu <yinghai@kernel.org>
Cc: michael@ellerman.id.au, Ingo Molnar <mingo@elte.hu>,
Thomas Gleixner <tglx@linutronix.de>,
"H. Peter Anvin" <hpa@zytor.com>,
Andrew Morton <akpm@linux-foundation.org>,
David Miller <davem@davemloft.net>,
Linus Torvalds <torvalds@linux-foundation.org>,
Johannes Weiner <hannes@cmpxchg.org>,
linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org
Subject: Re: [PATCH 07/31] lmb: Add reserve_lmb/free_lmb
Date: Wed, 31 Mar 2010 08:30:35 +1100 [thread overview]
Message-ID: <1269984635.7101.59.camel@pasglop> (raw)
In-Reply-To: <4BB19656.9040803@kernel.org>
On Mon, 2010-03-29 at 23:12 -0700, Yinghai Lu wrote:
>
> 1. you want to reserve rangeA
> 2. before that will check if region array is big enough,
> 3. if region is not big enough, will call lmb_alloc to get new range.
> lmb_alloc could return rangB that is overlapped with rangeA
> 4. current lmb_alloc only honor limit, and doesn't honor low limit.
I see. This is a direct consequence of you wanting to use find/reserve
instead of alloc tho :-)
This is also easily fixed. Instead of doing the resize "on demand" like
I originally proposed, do it at the end of reserve/alloc. If the number
of free entries is down to 1 or 0, then alloc a new chunk.
Of course, all of that requires that reservations done from FW to take
memory out because it must not be accessed need to be all done before
the first grow of the array, and so the static array must be sized
accordingly. We may want to catch these things too. We don't want to
warn on multiple overlapping lmb_reserve() tho on powerpc...
> another usage is: for temporary buffer, like range array for
> subtraction. we don't need to do free later.
Sorry, doesn't parse.
> > Ie. It should all be one single find/allocation function.
> >
> > In fact, you want to split lmb_find from lmb_reserve, then just make
> > lmb_alloc use the above, I don't want 2 implementations of the same
> > thing (maybe call it __lmb_find to expose the fact that it's a low
> level
> > function to avoid for normal use).
>
> that is some difference between them, and lmb_alloc doesn't honor low
> limit.
If you want a low and a high limit, then add the low limit to
lmb_alloc_base(), it's easy to fix all callers, there aren't many, and
make not one but two defaults for lmb_alloc(), one for the low limit and
one for the high limit. Problem solved.
> we can provide
> lmb_find_area
> lmb_reserve_area
> lmb_free_area
>
> and use lmb_find_area + lmb_reserve_area to get one lmb_alloc()
I still don't understand why you insist on using find + reserve instead
of alloc in x86 land. Can you give me a proper explanation as to why
that is needed since it seems to be causing problems, and so far and I
don't see what it solves.
> x86 sometime is using find_lmb_area to find big area, and use those
> area and later reserve actually used area.
That's very wrong. If you use something, alloc/reserve it. You can
always free it later.
> you could use lmb_alloc, and later lmb_free not used. that is equal to
> lmb_find + lmb_reserve + lmb_free ...
Sure, then just do alloc + later free.
Cheers,
Ben.
next prev parent reply other threads:[~2010-03-30 21:32 UTC|newest]
Thread overview: 104+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-03-29 2:42 [PATCH -v9 00/31] use lmb with x86 Yinghai Lu
2010-03-29 2:42 ` Yinghai Lu
2010-03-29 2:42 ` [PATCH 01/31] x86: Make smp_locks end with page alignment Yinghai Lu
2010-03-29 2:42 ` Yinghai Lu
2010-03-29 2:42 ` [PATCH 02/31] x86: Make sure free_init_pages() free pages in boundary Yinghai Lu
2010-03-29 2:42 ` Yinghai Lu
2010-03-29 16:57 ` Ingo Molnar
2010-03-29 16:59 ` Yinghai Lu
2010-03-29 2:42 ` [PATCH 03/31] x86: Do not free zero sized per cpu areas Yinghai Lu
2010-03-29 2:42 ` Yinghai Lu
2010-03-29 2:42 ` [PATCH 04/31] lmb: Move lmb.c to mm/ Yinghai Lu
2010-03-29 2:42 ` Yinghai Lu
2010-03-29 2:42 ` [PATCH 05/31] lmb: Seperate region array from lmb_region struct Yinghai Lu
2010-03-29 2:42 ` Yinghai Lu
2010-03-29 2:42 ` [PATCH 06/31] lmb: Add find_lmb_area() Yinghai Lu
2010-03-29 2:42 ` Yinghai Lu
2010-03-29 2:43 ` [PATCH 07/31] lmb: Add reserve_lmb/free_lmb Yinghai Lu
2010-03-29 2:43 ` Yinghai Lu
2010-03-29 12:22 ` Michael Ellerman
2010-03-29 16:45 ` Yinghai Lu
2010-03-29 22:20 ` Michael Ellerman
2010-03-29 22:37 ` Yinghai Lu
2010-03-29 23:34 ` Benjamin Herrenschmidt
2010-03-29 23:53 ` Yinghai Lu
2010-03-30 4:13 ` Michael Ellerman
2010-03-30 4:21 ` Yinghai Lu
2010-03-30 5:29 ` Benjamin Herrenschmidt
2010-03-30 5:40 ` Yinghai Lu
2010-03-30 5:24 ` Benjamin Herrenschmidt
2010-03-29 23:31 ` Benjamin Herrenschmidt
2010-03-30 0:03 ` Yinghai Lu
2010-03-30 5:26 ` Benjamin Herrenschmidt
2010-03-30 6:12 ` Yinghai Lu
2010-03-30 6:46 ` Michael Ellerman
2010-03-30 6:57 ` Yinghai Lu
2010-03-30 21:30 ` Benjamin Herrenschmidt [this message]
2010-03-30 22:42 ` Yinghai Lu
2010-03-29 21:49 ` Benjamin Herrenschmidt
2010-03-29 2:43 ` [PATCH 08/31] lmb: Add find_lmb_area_size() Yinghai Lu
2010-03-29 2:43 ` Yinghai Lu
2010-03-29 2:43 ` [PATCH 09/31] bootmem, x86: Add weak version of reserve_bootmem_generic Yinghai Lu
2010-03-29 2:43 ` Yinghai Lu
2010-03-29 2:43 ` [PATCH 10/31] lmb: Add lmb_to_bootmem() Yinghai Lu
2010-03-29 2:43 ` Yinghai Lu
2010-03-29 2:43 ` [PATCH 11/31] lmb: Add get_free_all_memory_range() Yinghai Lu
2010-03-29 2:43 ` Yinghai Lu
2010-03-29 2:43 ` [PATCH 12/31] lmb: Add lmb_register_active_regions() and lmb_hole_size() Yinghai Lu
2010-03-29 2:43 ` Yinghai Lu
2010-03-29 2:43 ` [PATCH 13/31] lmb: Prepare to include linux/lmb.h in core file Yinghai Lu
2010-03-29 2:43 ` Yinghai Lu
2010-03-29 2:43 ` [PATCH 14/31] lmb: Add find_memory_core_early() Yinghai Lu
2010-03-29 2:43 ` Yinghai Lu
2010-03-29 2:43 ` [PATCH 15/31] lmb: Add find_lmb_area_node() Yinghai Lu
2010-03-29 2:43 ` Yinghai Lu
2010-03-29 2:43 ` [PATCH 16/31] lmb: Add lmb_free_memory_size() Yinghai Lu
2010-03-29 2:43 ` Yinghai Lu
2010-03-29 2:43 ` [PATCH 17/31] lmb: Add lmb_memory_size() Yinghai Lu
2010-03-29 2:43 ` Yinghai Lu
2010-03-29 2:43 ` [PATCH 18/31] lmb: Add reserve_lmb_overlap_ok() Yinghai Lu
2010-03-29 2:43 ` Yinghai Lu
2010-03-29 2:43 ` [PATCH 19/31] lmb: Use lmb_debug to control debug message print out Yinghai Lu
2010-03-29 2:43 ` Yinghai Lu
2010-03-29 2:43 ` [PATCH 20/31] lmb: Add __NOT_KEEP_LMB to put lmb code to .init Yinghai Lu
2010-03-29 2:43 ` Yinghai Lu
2010-03-29 12:07 ` Michael Ellerman
2010-03-29 16:20 ` Yinghai Lu
2010-03-29 18:34 ` David Miller
2010-03-29 18:39 ` Yinghai Lu
2010-03-29 19:11 ` David Miller
2010-03-29 21:44 ` Benjamin Herrenschmidt
2010-03-29 2:43 ` [PATCH 21/31] x86: Add sanitize_e820_map() Yinghai Lu
2010-03-29 2:43 ` Yinghai Lu
2010-03-29 2:43 ` [PATCH 22/31] x86: Use lmb to replace early_res Yinghai Lu
2010-03-29 2:43 ` Yinghai Lu
2010-03-29 2:43 ` [PATCH 23/31] x86: Replace e820_/_early string with lmb_ Yinghai Lu
2010-03-29 2:43 ` Yinghai Lu
2010-03-29 2:43 ` [PATCH 24/31] x86: Remove not used early_res code Yinghai Lu
2010-03-29 2:43 ` Yinghai Lu
2010-03-29 2:43 ` [PATCH 25/31] x86, lmb: Use lmb_memory_size()/lmb_free_memory_size() to get correct dma_reserve Yinghai Lu
2010-03-29 2:43 ` Yinghai Lu
2010-03-29 2:43 ` [PATCH 26/31] x86: Align e820 ram range to page Yinghai Lu
2010-03-29 2:43 ` Yinghai Lu
2010-03-29 2:43 ` [PATCH 27/31] x86: Use wake_system_ram_range instead of e820_any_mapped in agp path Yinghai Lu
2010-03-29 2:43 ` Yinghai Lu
2010-03-29 2:43 ` [PATCH 28/31] x86: Add get_centaur_ram_top() Yinghai Lu
2010-03-29 2:43 ` Yinghai Lu
2010-03-29 2:43 ` [PATCH 29/31] x86: Make e820_any_mapped to __init Yinghai Lu
2010-03-29 2:43 ` Yinghai Lu
2010-03-29 2:43 ` [PATCH 30/31] x86: Use walk_system_ream_range()instead of e820.map directly Yinghai Lu
2010-03-29 2:43 ` Yinghai Lu
2010-03-29 2:43 ` [PATCH 31/31] x86: make e820 to be __initdata Yinghai Lu
2010-03-29 2:43 ` Yinghai Lu
2010-03-29 12:22 ` [PATCH -v9 00/31] use lmb with x86 Michael Ellerman
2010-03-29 12:22 ` Michael Ellerman
2010-03-29 16:52 ` Yinghai Lu
2010-03-29 20:39 ` Yinghai Lu
2010-03-29 22:10 ` Michael Ellerman
2010-03-29 22:17 ` Yinghai Lu
2010-03-29 22:32 ` Michael Ellerman
2010-03-29 22:32 ` Michael Ellerman
2010-03-29 22:41 ` Yinghai Lu
2010-03-29 23:33 ` Benjamin Herrenschmidt
2010-03-29 23:29 ` Benjamin Herrenschmidt
2010-03-29 23:47 ` Yinghai Lu
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=1269984635.7101.59.camel@pasglop \
--to=benh@kernel.crashing.org \
--cc=akpm@linux-foundation.org \
--cc=davem@davemloft.net \
--cc=hannes@cmpxchg.org \
--cc=hpa@zytor.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=michael@ellerman.id.au \
--cc=mingo@elte.hu \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--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: 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;
as well as URLs for NNTP newsgroup(s).