mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "Hoeun Ryu" <hoeun.ryu@lge.com>
To: "'Peter Zijlstra'" <peterz@infradead.org>,
	"'Hoeun Ryu'" <hoeun.ryu@lge.com.com>
Cc: <mingo@kernel.org>, <aaron.lu@intel.com>, <adobriyan@gmail.com>,
	<frederic@kernel.org>, <ying.huang@intel.com>,
	<linux-kernel@vger.kernel.org>
Subject: RE: smp_call_function() friends and irq/bottom_half context
Date: Fri, 11 May 2018 15:24:46 +0900	[thread overview]
Message-ID: <013801d3e8f0$c1f21820$45d64860$@lge.com> (raw)
In-Reply-To: <20180510101653.GB12217@hirez.programming.kicks-ass.net>


> -----Original Message-----
> From: Peter Zijlstra [mailto:peterz@infradead.org]
> Sent: Thursday, May 10, 2018 7:17 PM
> To: ��ȣ�� <hoeun.ryu@lge.com>
> Cc: mingo@kernel.org; aaron.lu@intel.com; adobriyan@gmail.com;
> frederic@kernel.org; ying.huang@intel.com; linux-kernel@vger.kernel.org
> Subject: Re: smp_call_function() friends and irq/bottom_half context
> 
> On Thu, May 10, 2018 at 01:58:29PM +0900, ��ȣ�� wrote:
> > Hi, all.
> >
> > I'm reading kernel/smp.c code and I found comments on smp_call_function()
> > and smp_call_function_[single/many]
> > saying that these functions are cannot be called in interrupt disabled
> > context or irq/bottom half handlers.
> >
> > I understand that there is a potential deadlock issue when caller CPU of
> > the functions is waiting for the completion of the callback of other
> CPUs.
> > But I was wondering if this is the case even when the caller CPU doesn't
> > wait for the completion (wait == 0).
> 
> IIRC yes, because csd_lock(). You can however use
> smp_call_function_single_async() with your own csd. Be very careful
> though, it is very easy to construct deadlocks.

Thank you for the explanation and the suggestion.

Would you please explain more on csd lock and irq disabled or irq/bh context ?
How can deadlocks happen when calling smp_call_function(wait=0) with irq disabled ?
How can deadlocks happen when calling smp_call_function(wait=0) from irq or bottom half context ?

I think it as 2d array like call_single_data[caller cpu][target cpu].flags.
csd_lock(csd[caller][target]) spins on the flag only when LOCKED is already set
which means that the caller CPU already called smp_call_function(wait=0)
and at the second calling of the function, the caller CPU spins on
csd_lock(csd[caller][target]) but the target CPU is still processing its callback list
(maybe processing other csd[other cpu][target]) and it does not yet process
csd[caller][target]. But the callback list will be finally flushed and LOCKED flags
is cleared of csd[caller][target] eventually ?

      reply	other threads:[~2018-05-11  6:24 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-10  4:58 류호은
2018-05-10 10:16 ` Peter Zijlstra
2018-05-11  6:24   ` Hoeun Ryu [this message]

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='013801d3e8f0$c1f21820$45d64860$@lge.com' \
    --to=hoeun.ryu@lge.com \
    --cc=aaron.lu@intel.com \
    --cc=adobriyan@gmail.com \
    --cc=frederic@kernel.org \
    --cc=hoeun.ryu@lge.com.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=peterz@infradead.org \
    --cc=ying.huang@intel.com \
    /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

Powered by JetHome