From: Peter Zijlstra <peterz@infradead.org>
To: Vineet Gupta <Vineet.Gupta1@synopsys.com>
Cc: "linux-arch@vger.kernel.org" <linux-arch@vger.kernel.org>,
Gilad Ben-Yossef <gilad@benyossef.com>,
Noam Camus <noamc@ezchip.com>,
David Daney <david.daney@cavium.com>,
James Hogan <james.hogan@imgtec.com>,
thomas Gleixner <tglx@linutronix.de>,
lkml <linux-kernel@vger.kernel.org>,
Richard Kuo <rkuo@codeaurora.org>
Subject: Re: Preventing IPI sending races in arch code
Date: Mon, 25 Nov 2013 12:00:06 +0100 [thread overview]
Message-ID: <20131125110006.GU3866@twins.programming.kicks-ass.net> (raw)
In-Reply-To: <52932BE2.5010201@synopsys.com>
On Mon, Nov 25, 2013 at 04:22:18PM +0530, Vineet Gupta wrote:
> Hi,
>
> I've been looking into cleaning up bitrot in ARC SMP support. Unlike some other
> arches/platforms, we don't have per-msg-type IRQ, so the actual msg (say cross
> function call) corresponding to IPI needs to be encoded in a per-cpu word (1 bit
> per msg type) before kicking the IPI.
>
> The current code (indicative below) is completely bonkers as it calls set_bit w/o
> any protection whatsoever, clearly racy in case of multiple senders, where
> receiver could end up NOT seeing one of the writes.
>
> ipi_send_msg(cpu, msg-type)
> {
> struct ipi_data *ipi_data = &per_cpu(ipi_data, cpu);
>
> local_irq_save();
> set_bit(msg-type, &ipi_data->bits)
> plat_smp_ops.ipi_send(cpumask)
> local_irq_restore();
> }
>
> Adding a spinlock here would serialize the sending part, but I still see issue in
> receiver. Upon receipt of First IPI, the msg holding word will be atomically
> exchanged with 0, so 2nd IPI will not see any msg in the word. Augmenting with an
> atomic counter would only help detect the issue - but I don't see how it will help
> elide the issue.
>
> Does that mean w/o proper hardware assist (i.e. IRQ providing the msg id
> indication), the race, however small, remains ?
You can use cmpxchg to set the bit, and in case the previous value
wasn't 0 not send a second IPI.
next prev parent reply other threads:[~2013-11-25 11:00 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-25 10:52 Preventing IPI sending races in arch code Vineet Gupta
2013-11-25 11:00 ` Peter Zijlstra [this message]
2013-11-25 11:30 ` Vineet Gupta
2013-11-25 12:27 ` Peter Zijlstra
2013-11-25 13:35 ` Vineet Gupta
2013-11-25 13:57 ` Peter Zijlstra
2013-11-25 13:57 ` Peter Zijlstra
2013-11-25 19:51 ` Benjamin Herrenschmidt
2013-11-26 4:47 ` Vineet Gupta
2013-11-26 5:11 ` Benjamin Herrenschmidt
2013-11-26 6:35 ` Vineet Gupta
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=20131125110006.GU3866@twins.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=Vineet.Gupta1@synopsys.com \
--cc=david.daney@cavium.com \
--cc=gilad@benyossef.com \
--cc=james.hogan@imgtec.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=noamc@ezchip.com \
--cc=rkuo@codeaurora.org \
--cc=tglx@linutronix.de \
/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