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 ?
prev parent 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