Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755296AbbHYHdR (ORCPT ); Tue, 25 Aug 2015 03:33:17 -0400 Received: from us01smtprelay-2.synopsys.com ([198.182.47.9]:57692 "EHLO smtprelay.synopsys.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754080AbbHYHdO (ORCPT ); Tue, 25 Aug 2015 03:33:14 -0400 From: Vineet Gupta To: Thomas Gleixner , "Peter Zijlstra (Intel)" CC: lkml , Vineet Gupta , David Hildenbrand , Michel Lespinasse Subject: [PATCH RESEND 5/5] ARC: ensure futex ops are atomic in !LLSC config Date: Tue, 25 Aug 2015 13:02:25 +0530 Message-ID: <1440487945-12772-6-git-send-email-vgupta@synopsys.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1440487945-12772-1-git-send-email-vgupta@synopsys.com> References: <1440487945-12772-1-git-send-email-vgupta@synopsys.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.12.197.191] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1870 Lines: 64 W/o hardware assisted atomic r-m-w the best we can do is to disable preemption. Cc: David Hildenbrand Cc: Peter Zijlstra (Intel) Cc: Thomas Gleixner Cc: Michel Lespinasse Signed-off-by: Vineet Gupta --- arch/arc/include/asm/futex.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/arch/arc/include/asm/futex.h b/arch/arc/include/asm/futex.h index 0ea8bcc7b846..8f449982523b 100644 --- a/arch/arc/include/asm/futex.h +++ b/arch/arc/include/asm/futex.h @@ -87,6 +87,9 @@ static inline int futex_atomic_op_inuser(int encoded_op, u32 __user *uaddr) if (!access_ok(VERIFY_WRITE, uaddr, sizeof(int))) return -EFAULT; +#ifndef CONFIG_ARC_HAS_LLSC + preempt_disable(); /* to guarantee atomic r-m-w of futex op */ +#endif pagefault_disable(); switch (op) { @@ -111,6 +114,9 @@ static inline int futex_atomic_op_inuser(int encoded_op, u32 __user *uaddr) } pagefault_enable(); +#ifndef CONFIG_ARC_HAS_LLSC + preempt_enable(); +#endif if (!ret) { switch (cmp) { @@ -153,6 +159,9 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr, u32 expval, if (!access_ok(VERIFY_WRITE, uaddr, sizeof(u32))) return -EFAULT; +#ifndef CONFIG_ARC_HAS_LLSC + preempt_disable(); /* to guarantee atomic r-m-w of futex op */ +#endif smp_mb(); __asm__ __volatile__( @@ -182,6 +191,9 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr, u32 expval, smp_mb(); +#ifndef CONFIG_ARC_HAS_LLSC + preempt_enable(); +#endif *uval = existval; return ret; } -- 1.9.1 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/