From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Nick Piggin <npiggin@suse.de>, Jens Axboe <jens.axboe@oracle.com>,
linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org,
jeremy@goop.org, mingo@elte.hu
Subject: Re: [PATCH 1/10] Add generic helpers for arch IPI function calls
Date: Fri, 2 May 2008 07:21:39 -0700 [thread overview]
Message-ID: <20080502142139.GA7599@linux.vnet.ibm.com> (raw)
In-Reply-To: <1209733169.13978.157.camel@twins>
On Fri, May 02, 2008 at 02:59:29PM +0200, Peter Zijlstra wrote:
> On Fri, 2008-05-02 at 05:42 -0700, Paul E. McKenney wrote:
>
> > And here is one scenario that makes me doubt that my imagination is
> > faulty:
> >
> > 1. CPU 0 disables irqs.
> >
> > 2. CPU 1 disables irqs.
> >
> > 3. CPU 0 invokes smp_call_function(). But CPU 1 will never respond
> > because its irqs are disabled.
> >
> > 4. CPU 1 invokes smp_call_function(). But CPU 0 will never respond
> > because its irqs are disabled.
> >
> > Looks like inherent deadlock to me, requiring that smp_call_function()
> > be invoked with irqs enabled.
> >
> > So, what am I missing here?
>
> The wish to do it anyway ;-)
>
> I can imagine some situations where I'd like to try anyway and fall back
> to a slower path when failing.
>
> With the initial design we would simply allocate data, stick it on the
> queue and call the ipi (when needed).
>
> This is perfectly deadlock free when wait=0 and it just returns -ENOMEM
> on allocation failure.
>
> It it doesn't return -ENOMEM I know its been queued and will be
> processed at some point, if it does fail, I can deal with it in another
> way.
>
> I know I'd like to do that and I suspect Nick has a few use cases up his
> sleeve as well.
OK, so one approach would be to check for irqs being disabled,
perhaps as follows, on top of my previous patch:
struct call_single_data *data = NULL;
if (!wait) {
data = kmalloc(sizeof(*data), GFP_ATOMIC);
if (data)
data->flags = CSD_FLAG_ALLOC;
}
if (!data) {
if (unlikely(irqs_disabled())) {
put_cpu();
return -ENOMEM;
}
data = &d;
data->flags = CSD_FLAG_WAIT;
}
data->func = func;
data->info = info;
generic_exec_single(cpu, data);
That would prevent -ENOMEM unless you invoked the function with irqs
disabled. So normal callers would still see the current failure-free
semantics -- you really don't want to be inflicting failure when not
necessary, right?
There could only be one irq-disabled caller at a time, which could be
handled using a trylock, returning -EBUSY if the lock is already held.
Otherwise, you end up with the scenario called out above (which Keith
Ownens pointed out some years ago).
Does this approach make sense?
Thanx, Paul
next prev parent reply other threads:[~2008-05-02 14:21 UTC|newest]
Thread overview: 79+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-04-29 7:26 [PATCH 0/10] Add generic helpers for arch IPI function calls #3 Jens Axboe
2008-04-29 7:26 ` Jens Axboe
[not found] ` <1209453990-7735-1-git-send-email-jens.axboe-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
2008-04-29 7:26 ` [PATCH 1/10] Add generic helpers for arch IPI function calls Jens Axboe
2008-04-29 7:26 ` Jens Axboe
[not found] ` <1209453990-7735-2-git-send-email-jens.axboe-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
2008-04-29 13:59 ` Paul E. McKenney
2008-04-29 13:59 ` Paul E. McKenney
[not found] ` <20080429135936.GC12390-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
2008-04-30 11:29 ` Paul E. McKenney
2008-04-30 11:29 ` Paul E. McKenney
[not found] ` <20080430112934.GA23203-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
2008-04-30 11:34 ` Jens Axboe
2008-04-30 11:34 ` Jens Axboe
[not found] ` <20080430113456.GY12774-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
2008-04-30 12:17 ` Paul E. McKenney
2008-04-30 12:17 ` Paul E. McKenney
[not found] ` <20080430121712.GR11126-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
2008-04-30 12:37 ` Jens Axboe
2008-04-30 12:37 ` Jens Axboe
[not found] ` <20080430123717.GC12774-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
2008-05-01 2:44 ` Paul E. McKenney
2008-05-01 2:44 ` Paul E. McKenney
2008-05-02 2:02 ` Paul E. McKenney
2008-05-02 2:12 ` Nick Piggin
2008-05-02 12:29 ` Paul E. McKenney
2008-05-02 12:42 ` Paul E. McKenney
2008-05-02 12:59 ` Peter Zijlstra
2008-05-02 12:59 ` Peter Zijlstra
2008-05-02 14:21 ` Paul E. McKenney [this message]
2008-05-02 14:21 ` Paul E. McKenney
2008-05-03 2:30 ` Paul E. McKenney
2008-05-03 5:49 ` Nick Piggin
2008-05-03 18:11 ` Paul E. McKenney
2008-05-04 22:04 ` Paul E. McKenney
2008-05-05 4:15 ` Nick Piggin
2008-05-05 4:15 ` Nick Piggin
2008-05-05 17:43 ` Paul E. McKenney
2008-05-07 20:42 ` Jens Axboe
2008-05-08 4:36 ` Paul E. McKenney
2008-05-02 12:50 ` Keith Owens
2008-05-02 13:09 ` Paul E. McKenney
2008-04-30 22:56 ` Jeremy Fitzhardinge
2008-04-30 22:56 ` Jeremy Fitzhardinge
2008-04-29 7:26 ` [PATCH 2/10] x86: convert to generic helpers for " Jens Axboe
2008-04-29 7:26 ` Jens Axboe
[not found] ` <1209453990-7735-3-git-send-email-jens.axboe-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
2008-04-29 20:35 ` Jeremy Fitzhardinge
2008-04-29 20:35 ` Jeremy Fitzhardinge
[not found] ` <481786A5.7010604-TSDbQ3PG+2Y@public.gmane.org>
2008-04-30 11:35 ` Jens Axboe
2008-04-30 11:35 ` Jens Axboe
[not found] ` <20080430113542.GZ12774-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
2008-04-30 12:20 ` Paul E. McKenney
2008-04-30 12:20 ` Paul E. McKenney
[not found] ` <20080430122001.GS11126-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
2008-04-30 12:31 ` Jens Axboe
2008-04-30 12:31 ` Jens Axboe
[not found] ` <20080430123136.GB12774-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
2008-04-30 14:51 ` Jeremy Fitzhardinge
2008-04-30 14:51 ` Jeremy Fitzhardinge
2008-04-30 21:39 ` Jeremy Fitzhardinge
2008-04-30 21:39 ` Jeremy Fitzhardinge
2008-04-29 7:26 ` [PATCH 3/10] powerpc: " Jens Axboe
2008-04-29 7:26 ` Jens Axboe
2008-04-29 7:26 ` [PATCH 4/10] ia64: " Jens Axboe
2008-04-29 7:26 ` Jens Axboe
2008-04-29 7:26 ` [PATCH 5/10] alpha: " Jens Axboe
2008-04-29 7:26 ` Jens Axboe
2008-04-29 7:26 ` [PATCH 6/10] arm: " Jens Axboe
2008-04-29 7:26 ` Jens Axboe
2008-04-29 7:26 ` [PATCH 7/10] m32r: " Jens Axboe
2008-04-29 7:26 ` Jens Axboe
2008-04-29 7:26 ` [PATCH 8/10] mips: " Jens Axboe
2008-04-29 7:26 ` Jens Axboe
2008-04-29 7:26 ` [PATCH 9/10] parisc: " Jens Axboe
2008-04-29 7:26 ` Jens Axboe
2008-04-29 7:26 ` [PATCH 10/10] sh: " Jens Axboe
2008-04-29 7:26 ` Jens Axboe
-- strict thread matches above, loose matches on Subject: below --
2008-05-29 8:58 [PATCH 0/10] Add generic helpers for arch IPI function calls #4 Jens Axboe
2008-05-29 8:58 ` [PATCH 1/10] Add generic helpers for arch IPI function calls Jens Axboe
2008-05-30 11:24 ` Paul E. McKenney
2008-06-06 8:44 ` Jens Axboe
2008-06-10 14:51 ` Catalin Marinas
2008-06-10 15:44 ` James Bottomley
2008-06-10 16:04 ` Catalin Marinas
2008-06-10 15:47 ` Paul E. McKenney
2008-06-10 16:53 ` Catalin Marinas
2008-06-11 3:25 ` Nick Piggin
2008-06-11 10:13 ` Catalin Marinas
2008-06-11 10:13 ` Catalin Marinas
2008-07-06 17:21 ` Jeremy Fitzhardinge
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=20080502142139.GA7599@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=jens.axboe@oracle.com \
--cc=jeremy@goop.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=npiggin@suse.de \
--cc=peterz@infradead.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).