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 E42BDCDD1BB for ; Fri, 27 Sep 2024 14:46:11 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 65F7E6B00F0; Fri, 27 Sep 2024 10:46:11 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 60E416B00F1; Fri, 27 Sep 2024 10:46:11 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 488836B00F2; Fri, 27 Sep 2024 10:46:11 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 2362C6B00F0 for ; Fri, 27 Sep 2024 10:46:11 -0400 (EDT) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 90E0A120EC1 for ; Fri, 27 Sep 2024 14:46:10 +0000 (UTC) X-FDA: 82610793300.02.CA7A3F6 Received: from smtpout.efficios.com (smtpout.efficios.com [167.114.26.122]) by imf04.hostedemail.com (Postfix) with ESMTP id AF8BD40002 for ; Fri, 27 Sep 2024 14:46:08 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=efficios.com header.s=smtpout1 header.b=HDaUr8Jl; spf=pass (imf04.hostedemail.com: domain of mathieu.desnoyers@efficios.com designates 167.114.26.122 as permitted sender) smtp.mailfrom=mathieu.desnoyers@efficios.com; dmarc=pass (policy=none) header.from=efficios.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1727448306; a=rsa-sha256; cv=none; b=ut1J6+VhmwU4sKRcaXutmFO+eE6q0NPw2J5+DxtilJPNdmv05iLUHu2VvArc7Eun+QZtl1 UZjqfMdPLIgA6dhwWdAfWfBjSkoQwSziqvxkHuvwcAnd7BqPgUr7JXFtsKyzRTkDLlphgS Hs95uBjZOHNekr2R6QLqLu+6QfVAbPQ= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=efficios.com header.s=smtpout1 header.b=HDaUr8Jl; spf=pass (imf04.hostedemail.com: domain of mathieu.desnoyers@efficios.com designates 167.114.26.122 as permitted sender) smtp.mailfrom=mathieu.desnoyers@efficios.com; dmarc=pass (policy=none) header.from=efficios.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1727448306; 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=lj6CQcRKLVxDPC6mTjA0+6gi3spmNJ7t5GHObMx6T4U=; b=YY0BtxkHAoyk2C3MBzJhh37miTmdVYbvfYYjLrTt9msrezWaqHGWCpbpsfOt5Scxxb03OK srtbKHuC7pLWWg2wnc3tdhOMVUXAnnUYtuMjh3hkzRICG1KHRyDZQYUA/SzK6uB5bj9vwx zf8J4YAIfrEdF7wR84yj6aV1BJ5aTbs= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=efficios.com; s=smtpout1; t=1727448367; bh=xD+akKG2WsLXNifs5kWRujVjHdAwiGgMHce05hDMYP4=; h=Date:Subject:From:To:Cc:References:In-Reply-To:From; b=HDaUr8JlcQb+Iam8HThov2FtvO0R0VEH8ApXioSxl/6HkWF9TM74GkVwndOYWxVPA kcYrOkobLfkSlg4IoIDTikp5BFSibZzsVcr/AMdhA4HNrTUyi5Ys4HZKJcOWIM6jk6 vP3Op45mLNp8G+2yywkUtu3CLdXdU6Tubwy00zgg18t/SyWBMChXMQV4Z3KFSirpoq bonlIgsrqOGNXpaYI3L4Zp8dzBV2shg1zt+OldcbN/td/yzMykX3uAN/XE+VKcom/G EDe+il41Q3OW+SoANnOoRHipjtFxT7vkyeesC2dOK/Gj9cxJrgydqSI/eKenV00rrw ZFSaSk5Z1fgMw== Received: from [IPV6:2605:8d80:582:29fa:9e57:c437:e7dd:8f59] (unknown [IPv6:2605:8d80:582:29fa:9e57:c437:e7dd:8f59]) by smtpout.efficios.com (Postfix) with ESMTPSA id 4XFYDs436zz1P2X; Fri, 27 Sep 2024 10:46:05 -0400 (EDT) Message-ID: <08423acb-1f8e-407a-80fe-c424c6ee2861@efficios.com> Date: Fri, 27 Sep 2024 10:43:59 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [RFC PATCH 1/4] hazptr: Add initial implementation of hazard pointers From: Mathieu Desnoyers To: Boqun Feng , Linus Torvalds Cc: Jonas Oberhauser , linux-kernel@vger.kernel.org, rcu@vger.kernel.org, linux-mm@kvack.org, lkmm@lists.linux.dev, "Paul E. McKenney" , Frederic Weisbecker , Neeraj Upadhyay , Joel Fernandes , Josh Triplett , "Uladzislau Rezki (Sony)" , rostedt , Lai Jiangshan , Zqiang , Peter Zijlstra , Ingo Molnar , Will Deacon , Waiman Long , Mark Rutland , Thomas Gleixner , Kent Overstreet , Vlastimil Babka , maged.michael@gmail.com, Neeraj Upadhyay References: <48992c9f-6c61-4716-977c-66e946adb399@efficios.com> <2b2aea37-06fe-40cb-8458-9408406ebda6@efficios.com> <55633835-242c-4d7f-875b-24b16f17939c@huaweicloud.com> <54487a36-f74c-46c3-aed7-fc86eaaa9ca2@huaweicloud.com> <0b262fe5-2fc5-478d-bf66-f208723238d5@efficios.com> <8aceaf4f-5578-4fca-8be7-3448d7b89721@efficios.com> Content-Language: en-US In-Reply-To: <8aceaf4f-5578-4fca-8be7-3448d7b89721@efficios.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Stat-Signature: pxfx37so6h8jdc6a6kxqdmg1kp6ne4py X-Rspamd-Queue-Id: AF8BD40002 X-Rspam-User: X-Rspamd-Server: rspam10 X-HE-Tag: 1727448368-873413 X-HE-Meta: U2FsdGVkX1/l/5AWdhL8rIXW8NJhlVv9YgWbCvXXasCGHpnI5d6nkEoIQqgVh5AHV+uVWdTw3wPDuxZjMiDdb/wZv9TtO/nPnYRMvHE9HnloIO69MJTZXMJdaPN4LWhYQQ2Y6NTvwvDDG9jqwNOqL1jIGTRdP1V4sj3f7kB9Mnaaf2tJD2Ln68TlOLClN82JkZtBjzKt32j+HbHIo598adFg/ypUK2t2YUGArBX+2ntw7s7jYYyIKXSB1AmUJTufEW5S9wxanDuHxLyXkOtFuUFNDA9wATURzRoCFl7D0/TUVDZOBWSgyL+edKnbi1CTr2+aKz4F3WKWapcIiqWKSxlE5icYP2d1UNvbr78qK5MIE0VFJJ/eZbqsqVQkSNN73aCIWCGZDVEI1v0KhFeJtKMa7Jy836VywPG70n4ByCAIN5E57ptqsLSYDDW5Sp3TDVVMlYO+25j5aFM45nmIcA8anb/5rnIzCIk8REqT1ZlUWejI/LPHnclzqQktWPwMWLGpvIltzdPKIkq/1GYIuyDn7VRu6jSciT6xMb8CAeYXlZ7fWouAZvZOR+QgWunt7FePmWfbp9vMVyKsr9GTb6jFbzrUB30Mdlssn9f9FQ7vWA4jpGUjiMzUtjE0ENsyfDAQoU+cpmYGiZ7+o92MHM5ZCUC96jeFtPye8UCg9ZJOGC/+HWY1mpg6Gky1Y9f/nX/9gyuRkpHLO5zqEPqMHbg3GFeUTKwfwtcGbbAr3aNpZ8fKBoUqwoFDdiKWBcBo0JhoE9keWc8nrJScT+fcHwuNtWTxQXUoZvmLSQ1rr5viRTKcokfDQ5hmZEaUMTkyQNZojqDxiVJ+CaZqyCQn/2XYOcG+GzWc1cYx8IhEIAdbFighYukbO0nEm9lWK50OKI6BUyp8CG9cRk+5xyU4n8bzUcQVKCGV3JEtoJy8A4+vmRD8t4Z2Qd5MMZfhF4l8gAcJHqCZwIoZi+ZpoyM EyDylpDo tb5onoicSXLLSDp7rNJ4Vk3ZGiIWOn9s6fHoGQ3253w5OPtZ/LswEIxvDOamtZ2bvxYGojsKXEerq53NWtjHwHmOVnHEYDnO7cwX6/86kfLb2ePloHYe6Yu9+2xNdXZZ9gB+wOsv6hgVsDqlQGj1mGVzm9fN4wbHYMbaCE/Xylz6sDiWxZbaRfhXOTjScY0gkwu5W0s1ruXOyFtfat4UcLerkEtoNFCZkgS2Sxdh1WOZWbD0YHfpFsTYWgBnNtcGNLtdWnFCK0crCOI71bkcpprwf9oJjl/gdZcjakURXmrjEah3hUj8B6KnyeZtoDntGIdW+Mbsro+kuKGVBWajPYM5YlWcNWIepSnRT53GxF8lajDEK88GEwF+gd+p4WgAZsD6heBUOf54E+INxIUk5dm5ux2GuvOWVPtn25t2hxtJX6ZrUNdHhxyYceT+MaPScXF85jXhrS6mM7jQ= 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 2024-09-27 12:59, Mathieu Desnoyers wrote: > On 2024-09-27 06:28, Boqun Feng wrote: [...] >> I replaced ADDRESS_EQ(a, b) with ADDRESS_EQ(b, a), and the compile >> result shows it can prevent the issue: > > I see, yes. It prevents the issue by making the compiler create > a copy of the value "modified" by the asm before doing the equality > comparison. > > This means the compiler cannot derive the value for b from the first > load when b is used after after the equality comparison. > > The only downside of OPTIMIZER_HIDE_VAR() is that it adds an extra > "mov" instruction to move the content across registers. I don't think > it matters performance wise though, so that solution is appealing > because it is arch-agnostic. > > One small improvement over your proposed solution would be to apply > OPTIMIZER_HIDE_VAR() on both inputs. Because this is not a volatile > asm, it is simply optimized away if var1 or var2 is unused following > the equality comparison. It is more convenient to prevent replacement > of both addresses being compared by the other rather than providing > the guarantee only on a single parameter: Actually, your approach is better (only preserving the address dependency on the first parameter), because it allows the second parameter to be a constant. Here is a diff. Please let me know if I need to improve anything wrt comments or implementation: diff --git a/include/linux/compiler.h b/include/linux/compiler.h index 2df665fa2964..52434eccd715 100644 --- a/include/linux/compiler.h +++ b/include/linux/compiler.h @@ -186,6 +186,32 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val, __asm__ ("" : "=r" (var) : "0" (var)) #endif +/* + * Compare an address with an expression while preserving the address + * dependencies for later use of the address. It should be used when + * comparing an address returned by rcu_dereference() with another + * address (either constant or in registers). + * + * This is needed to prevent the compiler SSA GVN optimization pass from + * replacing the register holding @addr by @expr (either a constant or a + * register) based on their equality, which does not preserve address + * dependencies and allows the following misordering speculations: + * + * - If @expr is a constant, the compiler can issue the loads which depend + * on @addr before the load of @addr. + * - If @expr is a register populated by a prior load, weakly-ordered + * CPUs can speculate loads which depend on @addr before the load of the + * address they depend on. + */ +#ifndef ADDRESS_EQ +#define ADDRESS_EQ(addr, expr) \ + ({ \ + bool __res = (addr) == (expr); \ + OPTIMIZER_HIDE_VAR(addr); \ + __res; \ + }) +#endif + #define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__) /** -- Mathieu Desnoyers EfficiOS Inc. https://www.efficios.com