From: Michael Ellerman <mpe@ellerman.id.au>
To: "Shreyas B. Prabhu" <shreyas@linux.vnet.ibm.com>,
Paul Mackerras <paulus@samba.org>
Cc: mahesh@linux.vnet.ibm.com, linuxppc-dev@lists.ozlabs.org,
linux-kernel@vger.kernel.org,
"Shreyas B. Prabhu" <shreyas@linux.vnet.ibm.com>
Subject: Re: powerpc/powernv: Fix race in updating core_idle_state
Date: Mon, 6 Jul 2015 14:03:24 +1000 (AEST) [thread overview]
Message-ID: <20150706040324.E78D2140DC0@ozlabs.org> (raw)
In-Reply-To: <1435732450-7258-1-git-send-email-shreyas@linux.vnet.ibm.com>
On Wed, 2015-01-07 at 06:34:10 UTC, "Shreyas B. Prabhu" wrote:
> core_idle_state is maintained for each core. It uses 0-7 bits to track
> whether a thread in the core has entered fastsleep or winkle. 8th bit is
> used as a lock bit.
> The lock bit is set in these 2 scenarios-
> - The thread is first in subcore to wakeup from sleep/winkle.
> - If its the last thread in the core about to enter sleep/winkle
>
> While the lock bit is set, if any other thread in the core wakes up, it
> loops until the lock bit is cleared before proceeding in the wakeup
> path. This helps prevent race conditions w.r.t fastsleep workaround and
> prevents threads from switching to process context before core/subcore
> resources are restored.
>
> But, in the path to sleep/winkle entry, we currently don't check for
> lock-bit. This exposes us to following race when running with subcore
> on-
>
> First thread in the subcorea Another thread in the same
> waking up core entering sleep/winkle
>
> lwarx r15,0,r14
> ori r15,r15,PNV_CORE_IDLE_LOCK_BIT
> stwcx. r15,0,r14
> [Code to restore subcore state]
>
> lwarx r15,0,r14
> [clear thread bit]
> stwcx. r15,0,r14
>
> andi. r15,r15,PNV_CORE_IDLE_THREAD_BITS
> stw r15,0(r14)
>
> Here, after the thread entering sleep clears its thread bit in
> core_idle_state, the value is overwritten by the thread waking up.
> This patch fixes the above race by looping on the lock bit even while
> entering the idle states.
What are the symptoms of this bug?
I assume they're not good. In which case this should go to stable, shouldn't
it? If so which versions?
And which commit introduced the bug?
cheers
next prev parent reply other threads:[~2015-07-06 4:03 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-01 6:34 [PATCH] powerpc/powernv: Fix race in updating core_idle_state Shreyas B. Prabhu
2015-07-06 4:03 ` Michael Ellerman [this message]
2015-07-06 4:32 ` Shreyas B Prabhu
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=20150706040324.E78D2140DC0@ozlabs.org \
--to=mpe@ellerman.id.au \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mahesh@linux.vnet.ibm.com \
--cc=paulus@samba.org \
--cc=shreyas@linux.vnet.ibm.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;
as well as URLs for NNTP newsgroup(s).