From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 61EECC636ED for ; Wed, 28 Aug 2024 17:24:44 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id F00E46B0089; Wed, 28 Aug 2024 13:24:43 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id EB1326B008A; Wed, 28 Aug 2024 13:24:43 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D9FAB6B008C; Wed, 28 Aug 2024 13:24:43 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id BCA546B0089 for ; Wed, 28 Aug 2024 13:24:43 -0400 (EDT) Received: from smtpin13.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 1F4231205C3 for ; Wed, 28 Aug 2024 17:24:43 +0000 (UTC) X-FDA: 82502328846.13.36591AC Received: from gentwo.org (gentwo.org [62.72.0.81]) by imf13.hostedemail.com (Postfix) with ESMTP id 7A4C82001F for ; Wed, 28 Aug 2024 17:24:40 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=pass header.d=gentwo.org header.s=default header.b=c7PC2lWR; dmarc=pass (policy=reject) header.from=gentwo.org; spf=pass (imf13.hostedemail.com: domain of cl@gentwo.org designates 62.72.0.81 as permitted sender) smtp.mailfrom=cl@gentwo.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1724865815; a=rsa-sha256; cv=none; b=D2QZ9u8gdxgI5yx1cGQKbK1O/05zytJgKmUmK3/PQK8RbtQmCfFEXIPVoaAUPWLcMHSN+r gXgTy6M2Y2+t1j6ihMys07JvMejzHQSTyACUAtC1A4Q9OUio04Z6x84h52v3ZuTJaCxrcU XKN6yZvunz5Fuq1fZtqakqZaL3uHYdA= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=pass header.d=gentwo.org header.s=default header.b=c7PC2lWR; dmarc=pass (policy=reject) header.from=gentwo.org; spf=pass (imf13.hostedemail.com: domain of cl@gentwo.org designates 62.72.0.81 as permitted sender) smtp.mailfrom=cl@gentwo.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1724865815; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=thWqlyUz7Bge3BGhgoMxyczTUkIKJvdsVHS1/qqJRks=; b=DgE5pbXtxKC1uHq4wlUUgWRCFEkzsQZWll+vIFsS3qhJRR75Wpg3BhtUI40ERLcfobWypF QtYTxkDjqXzeZuLD/PEeSXjhX1QYySKHLEN1AMv9jQjw/OROaBeCbut/ta1BQabP8o/Fin Co/QZitTknrySDmrRgVrSPstJWYn8TI= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gentwo.org; s=default; t=1724865333; bh=nSvT5YRDGKjvsPRngtDmL2GgKvhYz22L9LD9LQewmAI=; h=Date:From:To:cc:Subject:In-Reply-To:References:From; b=c7PC2lWRLJXBkhAPKDJmiYcEyzVK87P+5QEVOGpaROKk+wM6c2mJNQXH/JzuCm0hR vRn7wtleBZLuZFfNL5A/aJpXbZ2le4E8wtypD6laLXduYkBPpEdFPWkSSdygb121VD FhGeFb+FDR9SMj3j9B2KViReeqZ2NQxONUOX5+Tg= Received: by gentwo.org (Postfix, from userid 1003) id E3CA0404BB; Wed, 28 Aug 2024 10:15:33 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by gentwo.org (Postfix) with ESMTP id E2B08404BA; Wed, 28 Aug 2024 10:15:33 -0700 (PDT) Date: Wed, 28 Aug 2024 10:15:33 -0700 (PDT) From: "Christoph Lameter (Ampere)" To: Thomas Gleixner cc: Christoph Lameter via B4 Relay , Catalin Marinas , Will Deacon , Peter Zijlstra , Ingo Molnar , Waiman Long , Boqun Feng , Linus Torvalds , linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-arch@vger.kernel.org Subject: Re: [PATCH v2] Avoid memory barrier in read_seqcount() through load acquire In-Reply-To: <87ttfbeyqt.ffs@tglx> Message-ID: References: <20240819-seq_optimize-v2-1-9d0da82b022f@gentwo.org> <87ttfbeyqt.ffs@tglx> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII X-Rspamd-Queue-Id: 7A4C82001F X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: n4b1d9m51rzbimgqd8ayf77kw3twaujd X-HE-Tag: 1724865880-496482 X-HE-Meta: U2FsdGVkX19kEG+Ob17lpRHkP8AiOhpFJ5UC+CszOsHNTbNNOJT5cAx+u57o2XwjYJYjt6ONgND5rFAiXU5RU3eQv3UymIO4YvBgCYsYmRMPaQOTsH592nbNE/DZa4cE3Qtu4KVpvk1ExIHmAlqCVclhpshcArxU97yer5EXZntR3Sn6Nk9vbIqRKqBBqcWE2bOS1YrExZDKivo7192YzisZTLtqtPwpjR+n+pYNYaXy/s1Be6IuYEE2Kgj9j4oU3v9KthqUSTHiQOJYvmUFYoSisW9sgRFvt5zxriKJAwXKs93X8CGDGOoJhAIQEDF5VIPxiRDzv+de4fdRsQGPiGyv5es4RPcoo8GMvA7Ki3/EXfp4HqZdPxdTZuiyA0wArzfVfoG5nJAPZUq/TghLeDqtjiF52xNbyvZkp7YzMP6T61BrQ6CUnXtY1OaRIotG3pgcPP7kSDhnJdNZHLe1Ml/YHZqcyWP0FsKACdUBhQezrncTWOE2sQuHr1AkayIdbCQKOTHxe6tzXf7fO4TqrOCEnpqfv5eokNQCkacX4OVo6fTvlRY6O1iCbqQ3JBefCmcy4q117kGAmPXY6p8RnnIV1xpub1ppuyzvSI3VkZuMyvAA1Uj4Ld6q9mK0NrNFkm+x9ZYV2GPjIdwmhAs/CbwCk7vKFNessM84slkvxjfG3oxq2PBjQ4c/V0nfdpC88w4N3bGtRCY38/TggpYHYdy9N+UqvoEoVuORIFJbAxbFep+BHLWt9yrSqrPZdZmMYg/dLJxQql/mK+hes/XnXedsuGKcpmjCyyEwyrjPxNCWGsdUmKCo656NgU0ouq569seuf98mnsACbfg+4AlrX0HAvPGObAOhNULVaYdcKZBzJJOt7Fe5vzu+COhY21J2OguGLkVdMErmo7wYRO0pzX4ccDLLgMl5XV1jQB6CV8V+94Y8fhxts72sJ2MWUd5VCuqS+XscrcVVTsP9DPQ xsSgRRol T+dZExqNpaTW4fDt4KhJGxwxXnkwQcVhrBUmYKEDYHF49Fhf+1LkGN1ZCUVImxkDtufwgusjpLxZkGGXM3LXpVsgWgrEWRSdz+X4IBnUQJra0gbC28PsU8Bjv+A/gNmWYHtz+p2XU+xgnegIrFBB0i8jK/A82VLW67YSdAlc2aHI1tenVtkwtXHgI6e3OkACg8uy7kfOUIdJXYxsmmcgjd98hAYIa6yNw0yQ+JEZacqvKdXUK7YS9w4nbpOplATI6+LemGXomoSUzKiEkIFimFo5FckaLzspdHwWevWcdr+t+Wy91o3GquJTdP+iEfk+de2NYGTUwUmYBfOCkcn2B0RLwCQ== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Fri, 23 Aug 2024, Thomas Gleixner wrote: > This all can be done without the extra copies of the counter > accessors. Uncompiled patch below. Great. Thanks. Tried it too initially but could not make it work right. One thing that we also want is the use of the smp_cond_load_acquire to have the cpu power down while waiting for a cacheline change. The code has several places where loops occur when the last bit is set in the seqcount. We could use smp_cond_load_acquire in load_sequence() but what do we do about the loops at the higher level? Also this does not sync with the lock checking logic. diff --git a/include/linux/seqlock.h b/include/linux/seqlock.h index 68b3af8bd6c6..4442a97ffe9a 100644 --- a/include/linux/seqlock.h +++ b/include/linux/seqlock.h @@ -135,7 +135,7 @@ static inline void seqcount_lockdep_reader_access(const seqcount_t *s) static __always_inline unsigned __seqprop_load_sequence(const seqcount_t *s, bool acquire) { if (acquire && IS_ENABLED(CONFIG_ARCH_HAS_ACQUIRE_RELEASE)) - return smp_load_acquire(&s->sequence); + return smp_cond_load_acquire(&s->sequence, (s->sequence & 1) == 0); else return READ_ONCE(s->sequence); }