Received: by 2002:a4a:311b:0:0:0:0:0 with SMTP id k27-v6csp4490544ooa; Tue, 14 Aug 2018 06:44:11 -0700 (PDT) X-Google-Smtp-Source: AA+uWPwynqYk7Tr73xd/pPNhcgaBF5dH/34O+i/UYh0vHOA4emrgLxaWnYtnTdP7p7y6S1jqtiJ2 X-Received: by 2002:a62:2459:: with SMTP id r86-v6mr23379918pfj.31.1534254251274; Tue, 14 Aug 2018 06:44:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1534254251; cv=none; d=google.com; s=arc-20160816; b=IdiiYF7waqEb1TO7dOTgg35lCaFmjVr9cgkkTAmV/QsWm5t1WN5v1y/v/8YToq0dmI mkil8MGuFKXdAIuMcUzEbdP7NpfZR38Qch27Va1MPF3NHBELmkCYh2rjgekTmInkdKi2 pnwTQ/e/IyOMU2jV47c+R7X7i4nRknnjATDkOXaCxurVDhEG5hQ3tqOZaYUY6U0GwjAv HJnoi3pPrXxbshdbfYPUxp6S1JgjfFUIGdSHlH2/nNeEbXGIwCJ8+L94l65VzIAIMD+n BbBYEOfW3j/tTgGrIPlX550NDxOVKSlh2jBpxijHR3lEquFRscdtl+ieZA7ph7Im5fx9 eUBw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-language:accept-language:references:message-id:date :thread-index:thread-topic:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=CL13alTm5Exh+QzWIOizvaQ93Xy/LD4eT5089JdVx2o=; b=IB7wLLz3KGt4lmkuwv0voGABIQcIIt2qFhJyQVLKSfFTWKjXo6ZFGkBzwDx16zEDvr iAZny1xW19x6KnRH3wzmSTxObK9kGdZ3rP5odvus9j2cfswXSfsS/7yeqPDbNqYT+bYj QQK/tXASKEYeOAY0Q2BJSu6fmARcthb7lmxW4NuQXBWZ9x8SUYwPUE8O7TeuRCX1urf8 jzxsFwxh54tQ1dCuGmi9+rurmT6pC4hAWR4fO5IC1gEgu0MvtlJqa3WaalZtXzYLv91v ERHsYN7lqF9QGxlXukqUhVW5TAh2I/E5dJA/RrtB5TzwFuwZcui+IlGqJusCJ8zx+1PH ZJkA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@synopsys.com header.s=mail header.b=VnwRTPy4; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=synopsys.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u7-v6si22573702pfi.96.2018.08.14.06.43.55; Tue, 14 Aug 2018 06:44:11 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@synopsys.com header.s=mail header.b=VnwRTPy4; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=synopsys.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732889AbeHNQ3i (ORCPT + 99 others); Tue, 14 Aug 2018 12:29:38 -0400 Received: from us01smtprelay-2.synopsys.com ([198.182.60.111]:45039 "EHLO smtprelay.synopsys.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732699AbeHNQ3h (ORCPT ); Tue, 14 Aug 2018 12:29:37 -0400 Received: from mailhost.synopsys.com (mailhost1.synopsys.com [10.12.238.239]) by smtprelay.synopsys.com (Postfix) with ESMTP id 292E810C0D27; Tue, 14 Aug 2018 06:42:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=synopsys.com; s=mail; t=1534254144; bh=ruFBvMSfW2dLZHPf0zYvmApSiBhx7ZIiOeH815YKU9U=; h=From:To:CC:Subject:Date:References:From; b=VnwRTPy4jAVcYUdEcxYDyXeLV7KJ17Z0g4VJs7qjGfhK065xcIo6b3FThjJg2I9Kh mdwQZpF7/uzhHCllCNEK/UTFg5mB1CTEmk4jqhTq7R0P6mxXTBSw614N3xB2hwPmQG tNK9/wZMC3DN1cRyw5JQE1GgEw7eXRTmWjg6n94awYJ4mVs6zkl7vvcRbRxLWTxor4 yQ0uZYAzZt4yo284liiBd6cdrRi5YerYu35WZ0HbfpydcosnTCruN7FR73xR4G/w6K +dzmCPfUiJ/qUsGuABFo6rEMJ0+L7dXqFeoNxeAl0/6P7cwObVkPeBshXbT5Gvn71v e6OcpvyANWiMg== Received: from US01WEHTC3.internal.synopsys.com (us01wehtc3.internal.synopsys.com [10.15.84.232]) by mailhost.synopsys.com (Postfix) with ESMTP id 0D14C536C; Tue, 14 Aug 2018 06:42:24 -0700 (PDT) Received: from us01wembx1.internal.synopsys.com ([169.254.1.253]) by US01WEHTC3.internal.synopsys.com ([::1]) with mapi id 14.03.0361.001; Tue, 14 Aug 2018 06:42:23 -0700 From: Vineet Gupta To: Eugeniy Paltsev , "linux-snps-arc@lists.infradead.org" CC: "linux-kernel@vger.kernel.org" , "Alexey Brodkin" , Peter Zijlstra , "Will Deacon" , Boqun Feng Subject: Re: [PATCH] ARC: atomic64: fix atomic64_add_unless function Thread-Topic: [PATCH] ARC: atomic64: fix atomic64_add_unless function Thread-Index: AQHUMY2jvyJle0DCLEGtK0ktniYvNg== Date: Tue, 14 Aug 2018 13:42:23 +0000 Message-ID: References: <20180811160856.24936-1-Eugeniy.Paltsev@synopsys.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.144.199.104] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 08/11/2018 09:09 AM, Eugeniy Paltsev wrote:=0A= > Current implementation of 'atomic64_add_unless' function=0A= > (and hence 'atomic64_inc_not_zero') return incorrect value=0A= > if lover 32 bits of compared 64-bit number are equal and=0A= > higher 32 bits aren't.=0A= >=0A= > For in following example atomic64_add_unless must return '1'=0A= > but it actually returns '0':=0A= > --------->8---------=0A= > atomic64_t val =3D ATOMIC64_INIT(0x4444000000000000LL);=0A= > int ret =3D atomic64_add_unless(&val, 1LL, 0LL)=0A= > --------->8---------=0A= >=0A= > This happens because we write '0' to returned variable regardless=0A= > of higher 32 bits comparison result.=0A= >=0A= > So fix it.=0A= >=0A= > NOTE:=0A= > this change was tested with atomic64_test.=0A= >=0A= > Signed-off-by: Eugeniy Paltsev =0A= =0A= LGTM. Curious, was this from code review or did u actually run into this ?= =0A= =0A= Thx,=0A= -Vineet=0A= =0A= > ---=0A= > arch/arc/include/asm/atomic.h | 2 +-=0A= > 1 file changed, 1 insertion(+), 1 deletion(-)=0A= >=0A= > diff --git a/arch/arc/include/asm/atomic.h b/arch/arc/include/asm/atomic.= h=0A= > index 11859287c52a..e840cb1763b2 100644=0A= > --- a/arch/arc/include/asm/atomic.h=0A= > +++ b/arch/arc/include/asm/atomic.h=0A= > @@ -578,11 +578,11 @@ static inline int atomic64_add_unless(atomic64_t *v= , long long a, long long u)=0A= > =0A= > __asm__ __volatile__(=0A= > "1: llockd %0, [%2] \n"=0A= > - " mov %1, 1 \n"=0A= > " brne %L0, %L4, 2f # continue to add since v !=3D u \n"=0A= > " breq.d %H0, %H4, 3f # return since v =3D=3D u \n"=0A= > " mov %1, 0 \n"=0A= > "2: \n"=0A= > + " mov %1, 1 \n"=0A= > " add.f %L0, %L0, %L3 \n"=0A= > " adc %H0, %H0, %H3 \n"=0A= > " scondd %0, [%2] \n"=0A= =0A=