Message ID | 20231121142347.241356-2-wuqiang.matt@bytedance.com |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:2b07:b0:403:3b70:6f57 with SMTP id io7csp658278vqb; Tue, 21 Nov 2023 06:25:29 -0800 (PST) X-Google-Smtp-Source: AGHT+IGYVgHehOPNKBgPSToJBQdflvXkLAIYr25mfk49OXrgCs4NsyT0A9tFoSjxAvqIOHV952SA X-Received: by 2002:a05:6a21:33a0:b0:188:973c:ef7a with SMTP id yy32-20020a056a2133a000b00188973cef7amr15087649pzb.34.1700576728790; Tue, 21 Nov 2023 06:25:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700576728; cv=none; d=google.com; s=arc-20160816; b=qrPIBmUiUAV+2uJISG7cUcmhDx8MpZlhqJrtobQ+4wmHqxnQAI4AulCC//W9QS1r/1 MNPrBka1pBbP3udLCoY91Bnxy9B+ZLk9P25pOIKFkH9dJlr0VfiTte6FpAURcxHEMx98 SQLAtpTb1xDCGmlsPx7Tkp1JiQjhqSasMMtpJ9xwcMsit90qIzG3GXpuH9v5dmXwoiJP uk+5Pif6z5JLXGxw1VbKKEvuIe0CQN6y9bnxX7UVJd+uTTrHUh5Y1EtW/0AnUfyw7SuC 6a684vV163e6TQ5Y1Zw9Ai0d3kB1wMpBLfUl08Re7p7IbZw9NubziReVVhhuKtPbqvjE QQLQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=BQYwJQjKhySUG7SsmpVBnxUpf+Jrz1ajgA6palaWrFM=; fh=/PQTB+v0uxo1ThukQGs6Nkma0iUCHGc/8bBIfUJgAMA=; b=RS2yTR5CEjaUCtYmzIyxhMJ+oA8T6ugSJ7LJigZuBeMIrAnFCFkKGVdaeUahwTG3TW d6BoHDC5SPWm4ZQakeKU8yWQgzXrH8VKVlr5OPPXTU6bkPd4rhFYXlXWmXDUZN5Lvx0n nhmqIvG6rGE4UsaWxuwxQ6aOIiZci5zJUgPs5YT3GWqBVpQF8KkoiT0xIH7akN1ycbfY wlAax9U/KIXE1X6y3jHGrwd6PKnbqWq+HAVk7fHUsp52VFSO3DbfmeNKshmKqqpcQHAS GfMCRPEO0xuL7dgYEqT4MoviVSQ2bsfy4TfJOCCIB40tv7Ee1yy6zjCyDvDSVoes+fp6 I28g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bytedance.com header.s=google header.b=REfrDuQx; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=bytedance.com Received: from snail.vger.email (snail.vger.email. [2620:137:e000::3:7]) by mx.google.com with ESMTPS id fc11-20020a056a002e0b00b006be04b8c3basi10623602pfb.178.2023.11.21.06.25.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Nov 2023 06:25:28 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) client-ip=2620:137:e000::3:7; Authentication-Results: mx.google.com; dkim=pass header.i=@bytedance.com header.s=google header.b=REfrDuQx; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=bytedance.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id D898E804755A; Tue, 21 Nov 2023 06:25:23 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234288AbjKUOZT (ORCPT <rfc822;ouuuleilei@gmail.com> + 99 others); Tue, 21 Nov 2023 09:25:19 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58100 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234281AbjKUOZR (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Tue, 21 Nov 2023 09:25:17 -0500 Received: from mail-pf1-x431.google.com (mail-pf1-x431.google.com [IPv6:2607:f8b0:4864:20::431]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 16081D51 for <linux-kernel@vger.kernel.org>; Tue, 21 Nov 2023 06:24:46 -0800 (PST) Received: by mail-pf1-x431.google.com with SMTP id d2e1a72fcca58-6b1d1099a84so5310854b3a.1 for <linux-kernel@vger.kernel.org>; Tue, 21 Nov 2023 06:24:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1700576685; x=1701181485; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=BQYwJQjKhySUG7SsmpVBnxUpf+Jrz1ajgA6palaWrFM=; b=REfrDuQxXQ+HzwB7FgCwmor5rAI71g2RCGGb46LBPw4XtSe8F78WA6gTNWd8Qh/0yh 5dIM3+q89dTSMA5EKwHdA9LTELAIXr1bmNuKewoK7vNWoV7oPtTj90ZMVt4QJ0cg8BKs UrBha3hyPjeD+a6f3/p3n8HWV4lzc/c+Qk7LeJ97JMdC3nd0grAmX7cRgrWX6erZ+J7k pgyWoVdF0S47lNBGdTU5tnr5vhIUhj9JXAyS+W5CCmFeZIZEvQT+yecS7QVbo4PwLwtY qRoh7keGmiHRfLl1N55RnRoVTJiv31N2Rn/piXit5TvGZZIPAGpmY8Elq3Q2xJaMr2kR 3WSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700576685; x=1701181485; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=BQYwJQjKhySUG7SsmpVBnxUpf+Jrz1ajgA6palaWrFM=; b=h5xwh8fkwLuqS7uuQvdbM5HfqV1R7DDFy5xlWVsfsaHvIH2RiRk4yzK3o3pKkcL6PD z2rEMfTRrue/nPxNRcUvtA+z1zLrSlYHGFBRvHdv1fpdf9YHyPV2GQlEBBAgSOsEm85C h4QkdkfUojpVI8NlxHONLv9SiAu/gsBeoBZYnK4n3RtKUxy128Kd/NwJAWjWmb0ozTzH tqGaNApD4z4Zl7XpMLO1mBlnH+2iSzZ0K0AOK5vN32oYMQ7pPQNQ9INisY5W/txtFf8f dPbYixFVvXO0bCm9gS3Bydppz4wHXhnDxKIB4eAFYjPd3aKxAAXDJcPywtb0P6zFf3j5 ytFw== X-Gm-Message-State: AOJu0Yy0gfL7kNhu5cqKiwKkm75PsfnauNEf/LnUM45Xp8de6AX3CpYZ vtJvCqJozzw3Ae9ts4BgOZS2Sw== X-Received: by 2002:a05:6a00:80a:b0:6cb:a18b:2182 with SMTP id m10-20020a056a00080a00b006cba18b2182mr8114491pfk.1.1700576685502; Tue, 21 Nov 2023 06:24:45 -0800 (PST) Received: from devz1.bytedance.net ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id d13-20020a056a00244d00b0068842ebfd10sm7923193pfj.160.2023.11.21.06.24.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Nov 2023 06:24:45 -0800 (PST) From: "wuqiang.matt" <wuqiang.matt@bytedance.com> To: ubizjak@gmail.com, mark.rutland@arm.com, vgupta@kernel.org, bcain@quicinc.com, jonas@southpole.se, stefan.kristiansson@saunalahti.fi, shorne@gmail.com, chris@zankel.net, jcmvbkbc@gmail.com, geert@linux-m68k.org, andi.shyti@linux.intel.com, mingo@kernel.org, palmer@rivosinc.com, andrzej.hajda@intel.com, arnd@arndb.de, peterz@infradead.org, mhiramat@kernel.org Cc: linux-arch@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-kernel@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-trace-kernel@vger.kernel.org, mattwu@163.com, linux@roeck-us.net, "wuqiang.matt" <wuqiang.matt@bytedance.com> Subject: [PATCH v3 1/5] arch,locking/atomic: arc: arch_cmpxchg should check data size Date: Tue, 21 Nov 2023 22:23:43 +0800 Message-Id: <20231121142347.241356-2-wuqiang.matt@bytedance.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231121142347.241356-1-wuqiang.matt@bytedance.com> References: <20231121142347.241356-1-wuqiang.matt@bytedance.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Tue, 21 Nov 2023 06:25:24 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1783183944129142214 X-GMAIL-MSGID: 1783183944129142214 |
Series |
arch,locking/atomic: add arch_cmpxchg[64]_local
|
|
Commit Message
wuqiang.matt
Nov. 21, 2023, 2:23 p.m. UTC
arch_cmpxchg() should check data size rather than pointer size in case CONFIG_ARC_HAS_LLSC is defined. So rename __cmpxchg to __cmpxchg_32 to emphasize it's explicit support of 32bit data size with BUILD_BUG_ON() added to avoid any possible misuses with unsupported data types. In case CONFIG_ARC_HAS_LLSC is undefined, arch_cmpxchg() uses spinlock to accomplish SMP-safety, so the BUILD_BUG_ON checking is uncecessary. v2 -> v3: - Patches regrouped and has the improvement for xtensa included - Comments refined to address why these changes are needed v1 -> v2: - Try using native cmpxchg variants if avaialble, as Arnd advised Signed-off-by: wuqiang.matt <wuqiang.matt@bytedance.com> Reviewed-by: Masami Hiramatsu (Google) <mhiramat@kernel.org> --- arch/arc/include/asm/cmpxchg.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
Comments
Hi Wuqiang, On Tue, Nov 21, 2023 at 10:23:43PM +0800, wuqiang.matt wrote: > arch_cmpxchg() should check data size rather than pointer size in case > CONFIG_ARC_HAS_LLSC is defined. So rename __cmpxchg to __cmpxchg_32 to > emphasize it's explicit support of 32bit data size with BUILD_BUG_ON() > added to avoid any possible misuses with unsupported data types. > > In case CONFIG_ARC_HAS_LLSC is undefined, arch_cmpxchg() uses spinlock > to accomplish SMP-safety, so the BUILD_BUG_ON checking is uncecessary. > > v2 -> v3: > - Patches regrouped and has the improvement for xtensa included > - Comments refined to address why these changes are needed > > v1 -> v2: > - Try using native cmpxchg variants if avaialble, as Arnd advised > > Signed-off-by: wuqiang.matt <wuqiang.matt@bytedance.com> > Reviewed-by: Masami Hiramatsu (Google) <mhiramat@kernel.org> > --- > arch/arc/include/asm/cmpxchg.h | 12 ++++++------ > 1 file changed, 6 insertions(+), 6 deletions(-) > > diff --git a/arch/arc/include/asm/cmpxchg.h b/arch/arc/include/asm/cmpxchg.h > index e138fde067de..bf46514f6f12 100644 > --- a/arch/arc/include/asm/cmpxchg.h > +++ b/arch/arc/include/asm/cmpxchg.h > @@ -18,14 +18,16 @@ > * if (*ptr == @old) > * *ptr = @new > */ > -#define __cmpxchg(ptr, old, new) \ > +#define __cmpxchg_32(ptr, old, new) \ > ({ \ > __typeof__(*(ptr)) _prev; \ > \ > + BUILD_BUG_ON(sizeof(*(ptr)) != 4); \ > + \ > __asm__ __volatile__( \ > - "1: llock %0, [%1] \n" \ > + "1: llock %0, [%1] \n" \ > " brne %0, %2, 2f \n" \ > - " scond %3, [%1] \n" \ > + " scond %3, [%1] \n" \ > " bnz 1b \n" \ > "2: \n" \ > : "=&r"(_prev) /* Early clobber prevent reg reuse */ \ > @@ -47,7 +49,7 @@ > \ > switch(sizeof((_p_))) { \ > case 4: \ > - _prev_ = __cmpxchg(_p_, _o_, _n_); \ > + _prev_ = __cmpxchg_32(_p_, _o_, _n_); \ > break; \ > default: \ > BUILD_BUG(); \ > @@ -65,8 +67,6 @@ > __typeof__(*(ptr)) _prev_; \ > unsigned long __flags; \ > \ > - BUILD_BUG_ON(sizeof(_p_) != 4); \ > - \ I think I made some comments here that have not been addressed or replied. Thanks, Andi > /* \ > * spin lock/unlock provide the needed smp_mb() before/after \ > */ \ > -- > 2.40.1
Hello Andi, On 2023/11/23 06:17, Andi Shyti wrote: > Hi Wuqiang, > > On Tue, Nov 21, 2023 at 10:23:43PM +0800, wuqiang.matt wrote: >> arch_cmpxchg() should check data size rather than pointer size in case >> CONFIG_ARC_HAS_LLSC is defined. So rename __cmpxchg to __cmpxchg_32 to >> emphasize it's explicit support of 32bit data size with BUILD_BUG_ON() >> added to avoid any possible misuses with unsupported data types. >> >> In case CONFIG_ARC_HAS_LLSC is undefined, arch_cmpxchg() uses spinlock >> to accomplish SMP-safety, so the BUILD_BUG_ON checking is uncecessary. >> >> v2 -> v3: >> - Patches regrouped and has the improvement for xtensa included >> - Comments refined to address why these changes are needed >> >> v1 -> v2: >> - Try using native cmpxchg variants if avaialble, as Arnd advised BTW, the changelog should be in the cover letter. I'll correct it in next version, so don't bother resending to make more noises. >> Signed-off-by: wuqiang.matt <wuqiang.matt@bytedance.com> >> Reviewed-by: Masami Hiramatsu (Google) <mhiramat@kernel.org> >> --- >> arch/arc/include/asm/cmpxchg.h | 12 ++++++------ >> 1 file changed, 6 insertions(+), 6 deletions(-) >> >> diff --git a/arch/arc/include/asm/cmpxchg.h b/arch/arc/include/asm/cmpxchg.h >> index e138fde067de..bf46514f6f12 100644 >> --- a/arch/arc/include/asm/cmpxchg.h >> +++ b/arch/arc/include/asm/cmpxchg.h >> @@ -18,14 +18,16 @@ >> * if (*ptr == @old) >> * *ptr = @new >> */ >> -#define __cmpxchg(ptr, old, new) \ >> +#define __cmpxchg_32(ptr, old, new) \ >> ({ \ >> __typeof__(*(ptr)) _prev; \ >> \ >> + BUILD_BUG_ON(sizeof(*(ptr)) != 4); \ >> + \ >> __asm__ __volatile__( \ >> - "1: llock %0, [%1] \n" \ >> + "1: llock %0, [%1] \n" \ >> " brne %0, %2, 2f \n" \ >> - " scond %3, [%1] \n" \ >> + " scond %3, [%1] \n" \ >> " bnz 1b \n" \ >> "2: \n" \ >> : "=&r"(_prev) /* Early clobber prevent reg reuse */ \ >> @@ -47,7 +49,7 @@ >> \ >> switch(sizeof((_p_))) { \ >> case 4: \ >> - _prev_ = __cmpxchg(_p_, _o_, _n_); \ >> + _prev_ = __cmpxchg_32(_p_, _o_, _n_); \ >> break; \ >> default: \ >> BUILD_BUG(); \ >> @@ -65,8 +67,6 @@ >> __typeof__(*(ptr)) _prev_; \ >> unsigned long __flags; \ >> \ >> - BUILD_BUG_ON(sizeof(_p_) != 4); \ >> - \ > > I think I made some comments here that have not been addressed or > replied. Sorry that I haven't seen your message. Could you resend ? I rechecked my mailbox and the mailing lists, but no luck. > Thanks, > Andi Regards, Wuqiang > >> /* \ >> * spin lock/unlock provide the needed smp_mb() before/after \ >> */ \ >> -- >> 2.40.1
diff --git a/arch/arc/include/asm/cmpxchg.h b/arch/arc/include/asm/cmpxchg.h index e138fde067de..bf46514f6f12 100644 --- a/arch/arc/include/asm/cmpxchg.h +++ b/arch/arc/include/asm/cmpxchg.h @@ -18,14 +18,16 @@ * if (*ptr == @old) * *ptr = @new */ -#define __cmpxchg(ptr, old, new) \ +#define __cmpxchg_32(ptr, old, new) \ ({ \ __typeof__(*(ptr)) _prev; \ \ + BUILD_BUG_ON(sizeof(*(ptr)) != 4); \ + \ __asm__ __volatile__( \ - "1: llock %0, [%1] \n" \ + "1: llock %0, [%1] \n" \ " brne %0, %2, 2f \n" \ - " scond %3, [%1] \n" \ + " scond %3, [%1] \n" \ " bnz 1b \n" \ "2: \n" \ : "=&r"(_prev) /* Early clobber prevent reg reuse */ \ @@ -47,7 +49,7 @@ \ switch(sizeof((_p_))) { \ case 4: \ - _prev_ = __cmpxchg(_p_, _o_, _n_); \ + _prev_ = __cmpxchg_32(_p_, _o_, _n_); \ break; \ default: \ BUILD_BUG(); \ @@ -65,8 +67,6 @@ __typeof__(*(ptr)) _prev_; \ unsigned long __flags; \ \ - BUILD_BUG_ON(sizeof(_p_) != 4); \ - \ /* \ * spin lock/unlock provide the needed smp_mb() before/after \ */ \