Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp111982imm; Thu, 30 Aug 2018 17:30:49 -0700 (PDT) X-Google-Smtp-Source: ANB0VdZq6W9ryxhHx1arPE6L4lGLoAZqOeEoSBzjdMGdrL3/I9JC0BJN3RJOCJZYxIFXrJ0I6Doa X-Received: by 2002:a65:5581:: with SMTP id j1-v6mr11722494pgs.203.1535675448987; Thu, 30 Aug 2018 17:30:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1535675448; cv=none; d=google.com; s=arc-20160816; b=gZrQZ1RevJtfyZtZtyjQZXJQ8M9sZ+9FTOuCrgu81e5/HEO6fM08SsvWpeeaiqlYol nTojGqpJBO36X/41D4B6c556AUjyfkxqHK493wicTXHovcKCrtw2H1nstryc9JC4Pe2R 8+UdS4N4gLIxopsetNFi/YyBV8eQCvfQJhMA3ns9NWydvWXMHtC9kgilR14RBTd/LTvZ B3SdAJHJIA42eOqDLacFozUjRA1lIi9Ta143f2nZd8+dAI9+nY4A5G/NcQ6UDJtNJavb ZgqgrzPu80TEgJ4EjWUTZxAYpU90KM5BUmoDEyoX+GIQsdqJyYMCOa8mmaszji6jU3I4 y/tQ== 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=LDfazmIAp3FkfOqtFH0RQHSUn6+3LmatWinAhWRGAWU=; b=m0sYjnVqmqFwKDI1USaL9iK0Q6DbPq6MB2pJw740zZ6vj4zHQ8mv//PAhPSabPEnPx VA6N6+Mba+2TZTkccz2wS98X46HgSgvPb6ILYOc00v4yFRhlAxhMrldHB3vMc8gkRBmo VCL98wb1mrdWf/QkMsX1LqA9bh/2FjN1AupAK/1THUqs11h8x9oz3nyWDljw3zPl+bE4 wl5DNdfQhfruOztyDUEJSqaXQVFY5Fca+CMyDLSYO8EbZ5xmTxvZ2cwCCn4TjIWlH2Ho x2mIF2+3JTOIustb+MRaaj9YwnUjx3iQ2rj1W5hN5Ws3Yx+S0m8cP8iOI0aimbNJ0Fun YBaA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@synopsys.com header.s=mail header.b=OwGLqYC5; 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 p21-v6si7728615plq.338.2018.08.30.17.30.33; Thu, 30 Aug 2018 17:30:48 -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=OwGLqYC5; 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 S1727117AbeHaEeO (ORCPT + 99 others); Fri, 31 Aug 2018 00:34:14 -0400 Received: from smtprelay.synopsys.com ([198.182.47.9]:51812 "EHLO smtprelay.synopsys.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725761AbeHaEeO (ORCPT ); Fri, 31 Aug 2018 00:34:14 -0400 Received: from mailhost.synopsys.com (mailhost2.synopsys.com [10.13.184.66]) by smtprelay.synopsys.com (Postfix) with ESMTP id AB80B24E0551; Thu, 30 Aug 2018 17:29:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=synopsys.com; s=mail; t=1535675369; bh=fXnYiqI42LOGye18rcxjZqniCwIgik+6X74NVaaTfQ0=; h=From:To:CC:Subject:Date:References:From; b=OwGLqYC5EhnzR4MeQVEY+NiA0VR1Mnu8VkQ6PiWRB/IAbSOp9cphGIkdd8ajZJUoA nN/yeNRtjoXKDr/iiIoGrhjsfQasjILwWpEDRYD2hnsFF3R5JBlagb74bHc+VaOYdm o6woFJwVOsjXiJ8oj7ak0HUK5lbNSmW0239pEECrJLe+rXsPXYeVB2N7FKlqu9klri OdxmfTA9QSZZ7V/pnu2A8cShvftGkBwt4e5z3ucRvwAnrlY4QrHzh1HnY1MHFKnUFs 8kgeStpGRrfhLjYwTsmRVRojhajDlFWqYel9oJT88XL1SziI40Ukf/lD79/pso0nvC kByaC2StuVLCQ== Received: from US01WEHTC2.internal.synopsys.com (us01wehtc2.internal.synopsys.com [10.12.239.237]) by mailhost.synopsys.com (Postfix) with ESMTP id 674FD39B2; Thu, 30 Aug 2018 17:29:28 -0700 (PDT) Received: from us01wembx1.internal.synopsys.com ([169.254.1.253]) by US01WEHTC2.internal.synopsys.com ([10.12.239.237]) with mapi id 14.03.0361.001; Thu, 30 Aug 2018 17:29:28 -0700 From: Vineet Gupta To: Peter Zijlstra CC: Eugeniy Paltsev , "linux-kernel@vger.kernel.org" , "will.deacon@arm.com" , "mingo@kernel.org" , "tglx@linutronix.de" , "linux-snps-arc@lists.infradead.org" , Alexey Brodkin , "yamada.masahiro@socionext.com" , "linux-arm-kernel@lists.infradead.org" , "linux-arch@vger.kernel.org" Subject: __clear_bit_lock to use atomic clear_bit (was Re: Patch "asm-generic/bitops/lock.h) Thread-Topic: __clear_bit_lock to use atomic clear_bit (was Re: Patch "asm-generic/bitops/lock.h) Thread-Index: AQHUQMGso+PkNISfNEiGPCaoPY7i3g== Date: Fri, 31 Aug 2018 00:29:27 +0000 Message-ID: References: <1535567633.4465.23.camel@synopsys.com> <20180830094411.GX24124@hirez.programming.kicks-ass.net> 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/30/2018 02:44 AM, Peter Zijlstra wrote:=0A= >> Back in 2016, Peter had fixed this file due to a problem I reported on A= RC. See=0A= >> commit f75d48644c56a ("bitops: Do not default to __clear_bit() for=0A= >> __clear_bit_unlock()")=0A= >> That made __clear_bit_unlock() use the atomic clear_bit() vs. non-atomic= =0A= >> __clear_bit(), effectively making clear_bit_unlock() and __clear_bit_unl= ock() same.=0A= >>=0A= >> This patch undoes that which could explain the issues you see. @Peter, @= Will ?=0A= > Right, so the thinking is that on platforms that suffer that issue,=0A= > atomic_set*() should DTRT. And if you look at your spinlock based atomic= =0A= > implementation, you'll note that atomic_set() does indeed do the right=0A= > thing.=0A= >=0A= > arch/arc/include/asm/atomic.h:108=0A= =0A= For !LLSC atomics, ARC has always had atomic_set() DTRT even in the git rev= ision=0A= of 2016. The problem was not in atomics, but the asymmetric way slub bit lo= ck etc=0A= worked (haven't checked if this changed), i.e.=0A= =0A= slab_lock() -> bit_spin_lock() -> test_and_set_bit() # atomic=0A= slab_unlock() -> __bit_spin_unlock() -> __clear_bit() # non-atomic= =0A= =0A= And with v4.19-rc1, we have essentially reverted f75d48644c56a due to 84c65= 91103db=0A= ("locking/atomics, asm-generic/bitops/lock.h: Rewrite using atomic_fetch_*(= )")=0A= =0A= So what we have with 4.19-rc1 is=0A= =0A= static inline void __clear_bit_unlock(unsigned int nr, volatile unsigned= long *p)=0A= {=0A= unsigned long old;=0A= p +=3D ((nr) / 32);=0A= old =3D // some typecheck magic on *p=0A= old &=3D ~(1UL << ((nr) % 32));=0A= atomic_long_set_release((atomic_long_t *)p, old);=0A= }=0A= =0A= So @p is being r-m-w non atomically. The lock variant uses atomic op...=0A= =0A= int test_and_set_bit_lock(unsigned int nr, volatile unsigned long *p)=0A= { =0A= ...=0A= old =3D atomic_long_fetch_or_acquire(mask, (atomic_long_t *)p);=0A= ....=0A= }=0A= =0A= Now I don't know why we don't see the issue with LLSC atomics, perhaps race= window=0A= reduces due to less verbose code itself etc..=0A= =0A= Am I missing something still ?=0A= =0A= -Vineet=0A=