From: Huang Ying <ying.huang@intel.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Len Brown <lenb@kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Andi Kleen <andi@firstfloor.org>,
"linux-acpi@vger.kernel.org" <linux-acpi@vger.kernel.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@elte.hu>,
Mauro Carvalho Chehab <mchehab@redhat.com>,
Peter Zijlstra <peterz@infradead.org>,
Steven Rostedt <rostedt@goodmis.org>
Subject: Re: [PATCH -v4 1/2] lib, Make gen_pool memory allocator lockless
Date: Wed, 17 Nov 2010 11:03:25 +0800 [thread overview]
Message-ID: <1289963005.8719.1238.camel@yhuang-dev> (raw)
In-Reply-To: <20101116183506.41e77e1a.akpm@linux-foundation.org>
On Wed, 2010-11-17 at 10:35 +0800, Andrew Morton wrote:
> On Wed, 17 Nov 2010 10:18:01 +0800 Huang Ying <ying.huang@intel.com> wrote:
>
> > On Wed, 2010-11-17 at 05:50 +0800, Andrew Morton wrote:
> > > On Tue, 16 Nov 2010 08:53:10 +0800
> > > Huang Ying <ying.huang@intel.com> wrote:
> > >
> > > > This version of the gen_pool memory allocator supports lockless
> > > > operation.
> > > >
> > > > This makes it safe to use in NMI handlers and other special
> > > > unblockable contexts that could otherwise deadlock on locks. This is
> > > > implemented by using atomic operations and retries on any conflicts.
> > > > The disadvantage is that there may be livelocks in extreme cases. For
> > > > better scalability, one gen_pool allocator can be used for each CPU.
> > > >
> > > > The lockless operation only works if there is enough memory available.
> > > > If new memory is added to the pool a lock has to be still taken. So
> > > > any user relying on locklessness has to ensure that sufficient memory
> > > > is preallocated.
> > > >
> > > > The basic atomic operation of this allocator is cmpxchg on long. On
> > > > architectures that don't support cmpxchg natively a fallback is used.
> > > > If the fallback uses locks it may not be safe to use it in NMI
> > > > contexts on these architectures.
> > >
> > > The code assumes that cmpxchg is atomic wrt NMI. That would be news to
> > > me - at present an architecture can legitimately implement cmpxchg()
> > > with, say, spin_lock_irqsave() on a hashed spinlock. I don't know
> > > whether any architectures _do_ do anything like that. If so then
> > > that's a problem. If not, it's an additional requirement on future
> > > architecture ports.
> >
> > cmpxchg has been used in that way by ftrace and perf for a long time. So
> > I agree to make it a requirement on future architecture ports.
>
> All I was really doing was inviting you to check your assumptions for
> the known architecture ports. Seems that I must do it myself.
Sorry. I should have done that by myself.
> dude, take a look at include/asm-generic/cmpxchg-local.h. Not NMI-safe!
>
> arch/arm/include/asm/atomic.h's atomic_cmpxchg() isn't NMi-safe.
>
> arch/arm/include/asm/system.h uses include/asm-generic/cmpxchg-local.h.
>
> as does avr32
>
> and blackfin
>
> Now go take a look at cris.
>
> h8300 atomic_cmpxchg() isn't NMI-safe.
>
> m32r isn't NMI-safe
>
> go look at m68k, see if you can work it out.
>
> microblaze? Dunno.
>
> mn10300 uniprocessor isn't NMI-safe
>
> score isn't NMI-safe
>
> I stopped looking there.
I have talked about the NMI-safety of cmpxchg with Steven Rostedt before
in following thread:
http://lkml.org/lkml/2009/6/10/518
It seems that Steven thinks many architectures without NMI-safe cmpxchg
have no real NMI too.
In the patch description and comments, it is said that on architectures
without NMI-safe cmpxchg, gen_pool can not be used in NMI handler
safely.
Or do you think it is better to use a spin_trylock based fallback if
NMI-safe cmpxchg is not available? Or require cmpxchg implementation
uses spin_trylock instead of spin_lock?
Best Regards,
Huang Ying
next prev parent reply other threads:[~2010-11-17 3:03 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-11-16 0:53 [PATCH -v4 0/2] Lockless memory allocator and list Huang Ying
2010-11-16 0:53 ` [PATCH -v4 1/2] lib, Make gen_pool memory allocator lockless Huang Ying
2010-11-16 21:50 ` Andrew Morton
2010-11-17 2:18 ` Huang Ying
2010-11-17 2:35 ` Andrew Morton
2010-11-17 3:03 ` Huang Ying [this message]
2010-11-17 3:57 ` Andrew Morton
2010-11-17 6:05 ` Huang Ying
2010-11-17 10:49 ` Peter Zijlstra
2010-11-17 11:16 ` huang ying
2010-11-17 11:16 ` huang ying
2010-11-17 11:38 ` Peter Zijlstra
2010-11-17 10:40 ` Peter Zijlstra
2010-11-17 11:47 ` huang ying
2010-11-17 11:53 ` Peter Zijlstra
2010-11-18 1:14 ` Huang Ying
2010-11-18 8:34 ` Peter Zijlstra
2010-11-18 8:43 ` Paul Mundt
2010-11-18 8:57 ` Peter Zijlstra
2010-11-18 9:03 ` Paul Mundt
2010-11-16 0:53 ` [PATCH -v4 2/2] lib, Add lock-less NULL terminated single list Huang Ying
2010-11-16 11:50 ` Peter Zijlstra
2010-11-16 16:33 ` Linus Torvalds
2010-11-16 16:33 ` Linus Torvalds
2010-11-16 11:49 ` [PATCH -v4 0/2] Lockless memory allocator and list Peter Zijlstra
2010-11-16 16:38 ` Linus Torvalds
2010-11-16 18:04 ` Peter Zijlstra
2010-11-17 1:45 ` Huang Ying
2010-11-17 1:03 ` Huang Ying
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=1289963005.8719.1238.camel@yhuang-dev \
--to=ying.huang@intel.com \
--cc=akpm@linux-foundation.org \
--cc=andi@firstfloor.org \
--cc=lenb@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mchehab@redhat.com \
--cc=mingo@elte.hu \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.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.