From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932335AbcFCIjH (ORCPT ); Fri, 3 Jun 2016 04:39:07 -0400 Received: from e33.co.us.ibm.com ([32.97.110.151]:40135 "EHLO e33.co.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932303AbcFCIjB (ORCPT ); Fri, 3 Jun 2016 04:39:01 -0400 X-IBM-Helo: d03dlp02.boulder.ibm.com X-IBM-MailFrom: xinhui.pan@linux.vnet.ibm.com X-IBM-RcptTo: arnd@arndb.de;waiman.long@hp.com;peterz@infradead.org;linux-arch@vger.kernel.org;linux-kernel@vger.kernel.org From: Pan Xinhui To: linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org Cc: arnd@arndb.de, peterz@infradead.org, waiman.long@hp.com, Pan Xinhui Subject: [PATCH] locking/qspinlock: Use atomic_sub_return_release in queued_spin_unlock Date: Fri, 3 Jun 2016 16:38:14 +0800 Message-Id: <1464943094-3129-1-git-send-email-xinhui.pan@linux.vnet.ibm.com> X-Mailer: git-send-email 1.9.1 X-TM-AS-GCONF: 00 X-Content-Scanned: Fidelis XPS MAILER x-cbid: 16060308-0009-0000-0000-000038018552 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The existing version uses a heavy barrier while only release semantics is required. So use atomic_sub_return_release instead. Suggested-by: Peter Zijlstra (Intel) Signed-off-by: Pan Xinhui --- include/asm-generic/qspinlock.h | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/include/asm-generic/qspinlock.h b/include/asm-generic/qspinlock.h index 35a52a8..8947cd2 100644 --- a/include/asm-generic/qspinlock.h +++ b/include/asm-generic/qspinlock.h @@ -92,10 +92,9 @@ static __always_inline void queued_spin_lock(struct qspinlock *lock) static __always_inline void queued_spin_unlock(struct qspinlock *lock) { /* - * smp_mb__before_atomic() in order to guarantee release semantics - */ - smp_mb__before_atomic(); - atomic_sub(_Q_LOCKED_VAL, &lock->val); + * unlock() need release semantics + */ + (void)atomic_sub_return_release(_Q_LOCKED_VAL, &lock->val); } #endif -- 1.9.1