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 BCBCFE7719C for ; Sat, 11 Jan 2025 22:50:23 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 198F96B008C; Sat, 11 Jan 2025 17:50:23 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 149076B0092; Sat, 11 Jan 2025 17:50:23 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id F03C16B0093; Sat, 11 Jan 2025 17:50:22 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id CD6E46B008C for ; Sat, 11 Jan 2025 17:50:22 -0500 (EST) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 729C8C03FD for ; Sat, 11 Jan 2025 22:50:22 +0000 (UTC) X-FDA: 82996666284.25.D097281 Received: from mail-ej1-f54.google.com (mail-ej1-f54.google.com [209.85.218.54]) by imf14.hostedemail.com (Postfix) with ESMTP id 73507100005 for ; Sat, 11 Jan 2025 22:50:20 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=avoUR4je; spf=pass (imf14.hostedemail.com: domain of david.laight.linux@gmail.com designates 209.85.218.54 as permitted sender) smtp.mailfrom=david.laight.linux@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1736635820; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=i9AHpR9KMQk31tLjxrqdKa0iwHZyqgzyJjqUeEzoJOw=; b=H75ZKXXTN2zmvJlvY5jTeO62WzHaXN9IkczRc0cocIUAidMe29h/BhZ9qRZUWjZLCAHTCK rymUWdnq9j7PDraN/AOnLTSYLX9NhMzwIHnvig7EqM512rJuaoov9TXp7jyTqK4DUb4SdB 1fPNrKEXVwQmp5Lz18ORtNcttD+K2RQ= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1736635820; a=rsa-sha256; cv=none; b=ZVdppKTTzbfaesHVXPff3AP5Gc5jm8wvCE8tjpy/0DmkyHoaEKqTcTzevm0KwsEOlOtL9S j5nHkpBz5NslazNSpPicwkzpgdnOVKhYk+rqfWAcATxrLjVPlWEzPJ0IvrOsWRvuzwPNY+ S+sIx7ZMfHPXQLBXEWKYZRK8MaThTEo= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=avoUR4je; spf=pass (imf14.hostedemail.com: domain of david.laight.linux@gmail.com designates 209.85.218.54 as permitted sender) smtp.mailfrom=david.laight.linux@gmail.com; dmarc=pass (policy=none) header.from=gmail.com Received: by mail-ej1-f54.google.com with SMTP id a640c23a62f3a-aa68b513abcso554217466b.0 for ; Sat, 11 Jan 2025 14:50:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736635819; x=1737240619; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:subject:cc:to:from:date:from:to:cc:subject:date :message-id:reply-to; bh=i9AHpR9KMQk31tLjxrqdKa0iwHZyqgzyJjqUeEzoJOw=; b=avoUR4je2Fxtq6kr2nDCrvCtd8J304IRzrGbXD3smumMcL7NRyrhjl9+pDGvLcwhDT flUdpWGI7ktUQeyKxUe43Sr1Rsahh5FZiXZ/f2NJnw4YqwuGhspvIAEApRifvDjpm/iV S7zcwmb0qd5gUECwxbrr2uiju/FwJ7LsM0z03C1QVWgduklVzCl1MUV8zcAhmKukY0Nq 6/JE1MZWD7cqeoY8GLA4nUvjcqa7sndPDM2khLTAyvUa7KcBs0qDGOuMJulCfP9EjfV5 hH/ubUDMaPeweYNq73pDJKjp5mutPEjxVjnH0Wg+CV2cpkR+i6UA/YuKE//05jFsr80+ m3/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736635819; x=1737240619; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:subject:cc:to:from:date:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=i9AHpR9KMQk31tLjxrqdKa0iwHZyqgzyJjqUeEzoJOw=; b=QZA5ooECfmo49O6ZR/6MjmPl/MD8WlYrgXxDK2NR5vrPWa+xaNh3E5sOi/syZyodri hGeE7N1sqdR2AVeBuqYX+PiwtzjRz6ZsC4bCctAA5Y9wvjB2z364YTnvjawCgdQmSbw4 aImSkA0/OUHlcyYO+E3c2YXq/3rU5aVMKhfanGGdUnXThbZrh+NaXVmdsRz8BWOncos4 oD4JfB86n57eynZa2xu5nnGLxFSXYI0K9dsj6GELlYJXI5ODnYDTzLxoFnxXq82Lb+LM jpdnJe9tRWtc3l36ozDDlsvse6Vp2D4VEXqRuprT4CtM7KhYFT23JcXWOVKd1eWJqYAu GA3w== X-Forwarded-Encrypted: i=1; AJvYcCW2iXekWVdkuQC4pLnUkTJGdNGjITQwgFu32PK0WReOQ0KPG/BSnuaEa2I7t1UXDt6YnnFZV9mD2Q==@kvack.org X-Gm-Message-State: AOJu0YyL3EoZgOlcOA+tmRiGPcD/PX9wfe9GhgTptVGy3pDp+0mHTng/ o1KrItBHzVsN6BJ3/b96lZ+dE0JOKnvwQKn1KujRxoFtYqh0mdTx X-Gm-Gg: ASbGncsruIChV8yCzYJTRPrkImeg4JX8oAdLY77QoBtaMBk33COYvOgC8OJNVlioVaR djjR9DlaKhqJf8T9sccom+MgCPn2Uk1nvPaoGuGiagMPFTJaa5NxSjoUieplWrmDwXIwvBaDkCn ZQ2hBUr3oe0diPP+Hagx9YZvy6HVz6vWFYGmYpeoiCG4ycrFaTNE13j5OWkgA06bqRebw2i41lI vPoq0JIrbwXI3Iy7Dg+fLRKoAaisTNOHOSsKkI8wBQFw1WbiXw3G2uv1JypDgZEhqoWVMjoijDv ZrH6tLBtU3ITC2K0CNs= X-Google-Smtp-Source: AGHT+IFMDE/fo3e4b07YXU3QufQHgZJ90mpUplpkrxnJ5Yo0ABb7vStkVqRX9F6WEWaLw7bZUn+dfQ== X-Received: by 2002:a17:907:720f:b0:aa6:75e1:1864 with SMTP id a640c23a62f3a-ab2ab6a8b3emr1575759066b.4.1736635818690; Sat, 11 Jan 2025 14:50:18 -0800 (PST) Received: from pumpkin (82-69-66-36.dsl.in-addr.zen.co.uk. [82.69.66.36]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ab2c95af24bsm314096066b.134.2025.01.11.14.50.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 11 Jan 2025 14:50:18 -0800 (PST) Date: Sat, 11 Jan 2025 22:50:16 +0000 From: David Laight To: "Paul E. McKenney" Cc: Suren Baghdasaryan , akpm@linux-foundation.org, peterz@infradead.org, willy@infradead.org, liam.howlett@oracle.com, lorenzo.stoakes@oracle.com, mhocko@suse.com, vbabka@suse.cz, hannes@cmpxchg.org, mjguzik@gmail.com, oliver.sang@intel.com, mgorman@techsingularity.net, david@redhat.com, peterx@redhat.com, oleg@redhat.com, dave@stgolabs.net, brauner@kernel.org, dhowells@redhat.com, hdanton@sina.com, hughd@google.com, lokeshgidra@google.com, minchan@google.com, jannh@google.com, shakeel.butt@linux.dev, souravpanda@google.com, pasha.tatashin@soleen.com, klarasmodin@gmail.com, richard.weiyang@gmail.com, corbet@lwn.net, linux-doc@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, kernel-team@android.com, nathan@kernel.org Subject: Re: [PATCH v9 10/17] refcount: introduce __refcount_{add|inc}_not_zero_limited - clang 17.0.1 bug Message-ID: <20250111225016.660c5784@pumpkin> In-Reply-To: <20250111221939.3a36908d@pumpkin> References: <20250111042604.3230628-1-surenb@google.com> <20250111042604.3230628-11-surenb@google.com> <20250111123900.643e4b49@pumpkin> <9086dca2-3d53-4147-abc8-bf2d1cca0b5a@paulmck-laptop> <20250111221939.3a36908d@pumpkin> X-Mailer: Claws Mail 4.1.1 (GTK 3.24.38; arm-unknown-linux-gnueabihf) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: 73507100005 X-Stat-Signature: u6koe981wz5uc5dp87sjcbo11gnu5pa1 X-Rspam-User: X-HE-Tag: 1736635820-489647 X-HE-Meta: U2FsdGVkX1/AisFfsY/oe8cTZvKttKsHd0AhYGLUn85sse8UYHy8TroCdmuT0yrAOo8ccl+J07b+DcLpZxOf0pOtVTh5ZqNouJpVbfR3bUcqpvhZ2AahPsmPqvmY+oaxsOxauGc2V2BWeik9wFngcty5escpZmQ0ythmj3S5VoQSIrcfWYgxcUMQVCP2DziRU3vXnv9XgEcwmFEwzOQualU8XmL7CYJ+Wn5fJPfZEcYGnLiqRbM66jps3iW9nalKX05sTVMax/yyIM/SgatSQhfZ8F3CSqUqf+lltLK99xivQGFFuH8tVpoR8mxdjDPbLRU9LuTOxm6gljHuhvUiZPgV/PuPwn5vRv1DuicPwPPaEwA6Pr+Y3Zf5diymFtWBH19wWC+TGZeJ7W/rsDMiDFehqlHlSJXSIPJ6u6mo0tgutrzOZ69nKXMpKo8P9icnaplhZozrbzP52F9EjJA8h9kPvu27J+7hbpmEDg1yTvqxgh2G18h5MEqpiRXRkK186/b0WBCFdx9avMNH5KvuX2P91n7evqVXkwtsq6RnOIOqH8QpmHGR3Z2T/1mUl4srvKjT5czWkVMZS5c05vcRH4/p8HSZzo6mbZbEq2iJLP9uGYkVbVa3+q5IS6mZ09Zt63fBPxj6gqkTOsTEOGLnN0N/8lnGkWb/s3/EuAnGhsxy2Wjco6bMwVzVInMEsfq2+zczJAIQwkqZlqckjoEPxSnlHpsBH9rShGZ1lG8HEO+LmmZ5OMOl7HqvZ35qXwL79LFVqwg945NRHZlt59PXEfWm+oFMCu/UmbtW9ikk6NQHSecmcNPAkIO2JFS5z18a3lhYyCv0yw3XlG9eQbTj5Zj0X3Vcplj8pj2UChK/1fEhsMB/wym3KAICIGFy9x3CEkKe9WiiiW9D2hFDTZnvHlpa0ArGM7eZyYVlcPfpZUE2mF/KZ6jTztoBsEmx8sKp3AU6xmcsSkzj3sy1x58 eGEXUkab ISKbLGACJkn2mBoYGJ8z5FrhT1HXEMMH2N+eAUQr5gcmxupE7639jWmQ2yRowmmcMXNP6EFqCusznMMR9Dpjo7FXw+RsTQ645moTI8Kw8yan90+QECpktgldzIC46xODlVOwUVVLCpbWWO7bBEGPQDPCcjI95s9ewujXOk9zL0KcfJUq59arkYDTHFu57X/cBldPLxIV3CL+rYxVgnZ/pH7/6yVorYVdZRTrLlYZtCwkmbtnJBNLbqn5M3yR0ZyWlBW9nYKFZ8R9QyUtvEKJavLm9Kw3/1MKb8cmDthEZ1j9EOwtXDKSedV3NSjrAJSvabarNffXhaO141rstCIVBOIV//r/7vtpdP1/fXRUdj/Qky07m75rucKP6/dnoEflTifCfRBQybRQdDVO6CLqqi3+JWIZDgHMrCXPKN1lPxt48U+sRiAb/D9KYITSf814JTOpAu4KbVmq9hoR9xsuKLqJctdYIf414+2FNAiBWzg8wpV6m0Zc3JmHB0Lt6epXsV2ibUEI+Zdw+ySuD4BIU9+yVWM1M1uJMeAmnicxBvAnZT2I0acaMRIHb/rlcRjzi9WUTeWuJH1ha2mdXSOF7PmRClGTsMLKvhso4 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 Sat, 11 Jan 2025 22:19:39 +0000 David Laight wrote: > On Sat, 11 Jan 2025 10:30:40 -0800 > "Paul E. McKenney" wrote: > > > On Sat, Jan 11, 2025 at 12:39:00PM +0000, David Laight wrote: > > > On Fri, 10 Jan 2025 20:25:57 -0800 > > > Suren Baghdasaryan wrote: > > > > > > > Introduce functions to increase refcount but with a top limit above which > > > > they will fail to increase (the limit is inclusive). Setting the limit to > > > > INT_MAX indicates no limit. > > > > > > This function has never worked as expected! > > > I've removed the update and added in the rest of the code. > > > > > > > diff --git a/include/linux/refcount.h b/include/linux/refcount.h > > > > index 35f039ecb272..5072ba99f05e 100644 > > > > --- a/include/linux/refcount.h > > > > +++ b/include/linux/refcount.h > > > > @@ -137,13 +137,23 @@ static inline unsigned int refcount_read(const refcount_t *r) > > > > } > > > > > > > > static inline __must_check __signed_wrap > > > > -bool __refcount_add_not_zero(int i, refcount_t *r, int *oldp) > > > > { > > > > int old = refcount_read(r); > > > > > > > > do { > > > > if (!old) > > > > break; > > > > > > > > } while (!atomic_try_cmpxchg_relaxed(&r->refs, &old, old + i)); > > > > > > > > if (oldp) > > > > *oldp = old; > > > ? > > > > if (unlikely(old < 0 || old + i < 0)) > > > > refcount_warn_saturate(r, REFCOUNT_ADD_NOT_ZERO_OVF); > > > > > > > > return old; > > > > } > > > > > > The saturate test just doesn't work as expected. > > > In C signed integer overflow is undefined (probably so that cpu that saturate/trap > > > signed overflow can be conformant) and gcc uses that to optimise code. > > > > > > So if you compile (https://www.godbolt.org/z/WYWo84Weq): > > > int inc_wraps(int i) > > > { > > > return i < 0 || i + 1 < 0; > > > } > > > the second test is optimised away. > > > I don't think the kernel compiles disable this optimisation. > > > > Last I checked, my kernel compiles specified -fno-strict-overflow. > > What happens if you try that in godbolt? > > That does make gcc generated the wanted object code. > I know that compilation option has come up before, but I couldn't remember the > name or whether it was disabled :-( > > You do get much better object code from return (i | i + 1) < 0; > And that is likely to be much better still if you need a conditional jump. I've just checked some more cases (see https://www.godbolt.org/z/YoM9odTbe). gcc 11 onwards generates the same code code for the two expressions. Rather more worryingly clang 17.0.1 is getting this one wrong: return i < 0 || i + 1 < 0 ? foo(i) : bar(i); It ignores the 'i + 1' test even with -fno-strict-overflow. That is more representative of the actual code. What have I missed now? David