Message ID | 1477365874.10026.7.camel@TP420 (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
On Tue, Oct 25, 2016 at 11:24:34AM +0800, Li Zhong wrote: > The core_idle_lock_held loops when the lock bit is held by others. > However, it is possible that after the lock bit is cleared, some one > else sees it first and sets the lock bit. And lwarx loads a value with > lock bit set, and the lock bit may be cleared in the following stwcx. > It is possible the first one is still executing in the critical section. > > This patch rechecks the lock bit after lwarx, and go back to loop if it > is set. You're quite correct, in fact I posted almost exactly the same patch a few days ago... See http://patchwork.ozlabs.org/patch/684963/. Thanks, Paul.
> On 25 Oct 2016, at 12:15, Paul Mackerras <paulus@ozlabs.org> wrote: > > On Tue, Oct 25, 2016 at 11:24:34AM +0800, Li Zhong wrote: >> The core_idle_lock_held loops when the lock bit is held by others. >> However, it is possible that after the lock bit is cleared, some one >> else sees it first and sets the lock bit. And lwarx loads a value with >> lock bit set, and the lock bit may be cleared in the following stwcx. >> It is possible the first one is still executing in the critical section. >> >> This patch rechecks the lock bit after lwarx, and go back to loop if it >> is set. > > You're quite correct, in fact I posted almost exactly the same patch a > few days ago... See http://patchwork.ozlabs.org/patch/684963/. Forget to check the list before sending … One minor difference, maybe we can use bne- for the rechecking :) Thanks, Zhong > > Thanks, > Paul. >
diff --git a/arch/powerpc/kernel/idle_book3s.S b/arch/powerpc/kernel/idle_book3s.S index bd739fe..ce07b3f 100644 --- a/arch/powerpc/kernel/idle_book3s.S +++ b/arch/powerpc/kernel/idle_book3s.S @@ -99,6 +99,8 @@ core_idle_lock_held: bne 3b HMT_MEDIUM lwarx r15,0,r14 + andi. r9,r15,PNV_CORE_IDLE_LOCK_BIT + bne- core_idle_lock_held blr /*
The core_idle_lock_held loops when the lock bit is held by others. However, it is possible that after the lock bit is cleared, some one else sees it first and sets the lock bit. And lwarx loads a value with lock bit set, and the lock bit may be cleared in the following stwcx. It is possible the first one is still executing in the critical section. This patch rechecks the lock bit after lwarx, and go back to loop if it is set. Signed-off-by: Li Zhong <zhong@linux.vnet.ibm.com> --- arch/powerpc/kernel/idle_book3s.S | 2 ++ 1 file changed, 2 insertions(+)