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 BF39DCF6491 for ; Sat, 28 Sep 2024 23:24:39 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4564B8D0001; Sat, 28 Sep 2024 19:24:39 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 405C06B00FD; Sat, 28 Sep 2024 19:24:39 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 280058D0001; Sat, 28 Sep 2024 19:24:39 -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 07BFE6B00F9 for ; Sat, 28 Sep 2024 19:24:39 -0400 (EDT) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 2E4A8C166A for ; Sat, 28 Sep 2024 23:24:38 +0000 (UTC) X-FDA: 82615728636.12.7A0154D Received: from GBR01-CWX-obe.outbound.protection.outlook.com (mail-cwxgbr01on2105.outbound.protection.outlook.com [40.107.121.105]) by imf17.hostedemail.com (Postfix) with ESMTP id 498AB40005 for ; Sat, 28 Sep 2024 23:24:35 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=pass header.d=garyguo.net header.s=selector1 header.b=POI9yUIF; arc=pass ("microsoft.com:s=arcselector10001:i=1"); dmarc=none; spf=pass (imf17.hostedemail.com: domain of gary@garyguo.net designates 40.107.121.105 as permitted sender) smtp.mailfrom=gary@garyguo.net ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1727565774; a=rsa-sha256; cv=pass; b=5zuij37TAAnJUgx5mdu6VMAMpKRogpxcrdk0inG2X9P3K6ttA1dtyakWxLGd+QPxuDUabp 10kH0v5qFxw9lx376juoIUMhMGdKqA87QJSSgEdmY2ysI6kaW5ehFNGLHN75eqxS/1Egzm AMnPplc/cj5O3IFBcnyug+kWWMf/mtY= ARC-Authentication-Results: i=2; imf17.hostedemail.com; dkim=pass header.d=garyguo.net header.s=selector1 header.b=POI9yUIF; arc=pass ("microsoft.com:s=arcselector10001:i=1"); dmarc=none; spf=pass (imf17.hostedemail.com: domain of gary@garyguo.net designates 40.107.121.105 as permitted sender) smtp.mailfrom=gary@garyguo.net ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1727565774; 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=jUuzGJLesdiBPn9foSicXb4wYFYAaUPt9G1ltiaOUGs=; b=GZWZ+uS7Kq556wcTe0Jg/KlIlUSH4zSplgcKWpmR7kTuU+Vx898G9Y/2wl+ks4ORQPCnlb /C5Dnx/+ZcJcqR9WGxl6OF3HF4MtGbmXQbPcD4pHY3W3Yurp8DBQK+2whsRdA7o+4KNbHT SzxrfjtBmTUm3fjqEfMjS6Ho7oNoPms= ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ApdvhahusSPMMYzG8Ax7T3Ox+1r7tcqDeejw1BePVvzI2Afy8luRZRd+ICvEh0wmBc3jpal+jPZfS0tSR8yfjKaQI7cmZMfERhOK5VpstAKXnLiy9U2jDFwOcgEBep5Ylxo6lgOBjXe3MiJAUbkic65oiv9EDKNewJ/2+RVZl/wZV4SmKYuX4V704v0YyhZkMxkdwwZGldVvFw/vJUOVF8CPom/7keAsEWCX3GEpDC+Y60HKrVmIYTuujO+Pd9VZzfJjc7KPgF/O4vIjjEwaG98frnzmL0j+fVzUjuIJ6FjIyS4GdydGcjOAFxbhILBQgLBB3nYbhdF//YLMX7/IGQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=jUuzGJLesdiBPn9foSicXb4wYFYAaUPt9G1ltiaOUGs=; b=s6adtUR87W/8vkEyQJx0MS23DHP5Fi+qe9m+j2utamCfc1nC4JvTBuUv93cz2LSGvK/QW6M7eL18ajrHH2qfS1vERtiAgy4Yi7GPzBGgxvLG/HIwsXusoIuWNzL/0nkMt2va8KJ4/rvqP2dyem7E2AjqMFbFsU3CBuiUTnu0mdCwZ2nE6vGx1euzrBjk0P8i9X97RHLoYQbINYNrHjR/0ekf7J8VmlX/Qwb+mqALhIpWOR7e3K/EofCbBUlgw6w24Ma/1UTYCVM/iLUXd147BBpg0JmxK9UqY1BRhbhYf7kEaePPHPLBxQpaG4yFBlCkvtRTKJNEgWSgRsPQz0h09A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=garyguo.net; dmarc=pass action=none header.from=garyguo.net; dkim=pass header.d=garyguo.net; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=garyguo.net; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=jUuzGJLesdiBPn9foSicXb4wYFYAaUPt9G1ltiaOUGs=; b=POI9yUIFOXQEyy4AgcPQ0KxnEWLFmN3UyluvwiM6tX+3DHmQnn2ZyVw5FuKfobJfhKBCgf0eG8c4AgewmrXM9Sq+bDpAQsT122iXo1k/hXX1ybT0Grj2xgLOFqSeJgulA7cmgREMZrcV6S8j7Zvwzglhx1xYEaa/Gsk4BmKdzo4= Received: from LO2P265MB5183.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:253::10) by CWLP265MB6419.GBRP265.PROD.OUTLOOK.COM (2603:10a6:400:1e1::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8005.25; Sat, 28 Sep 2024 23:24:31 +0000 Received: from LO2P265MB5183.GBRP265.PROD.OUTLOOK.COM ([fe80::1818:a2bf:38a7:a1e7]) by LO2P265MB5183.GBRP265.PROD.OUTLOOK.COM ([fe80::1818:a2bf:38a7:a1e7%3]) with mapi id 15.20.8005.024; Sat, 28 Sep 2024 23:24:31 +0000 Date: Sun, 29 Sep 2024 00:24:28 +0100 From: Gary Guo To: Mathieu Desnoyers Cc: Linus Torvalds , linux-kernel@vger.kernel.org, Greg Kroah-Hartman , Sebastian Andrzej Siewior , "Paul E. McKenney" , Will Deacon , Peter Zijlstra , Boqun Feng , Alan Stern , John Stultz , Neeraj Upadhyay , Frederic Weisbecker , Joel Fernandes , Josh Triplett , Uladzislau Rezki , Steven Rostedt , Lai Jiangshan , Zqiang , Ingo Molnar , Waiman Long , Mark Rutland , Thomas Gleixner , Vlastimil Babka , maged.michael@gmail.com, Mateusz Guzik , Jonas Oberhauser , rcu@vger.kernel.org, linux-mm@kvack.org, lkmm@lists.linux.dev, github@npopov.com, llvm@lists.linux.dev Subject: Re: [PATCH 1/2] compiler.h: Introduce ptr_eq() to preserve address dependency Message-ID: <20240929002428.38f37f54.gary@garyguo.net> In-Reply-To: <20240928135128.991110-2-mathieu.desnoyers@efficios.com> References: <20240928135128.991110-1-mathieu.desnoyers@efficios.com> <20240928135128.991110-2-mathieu.desnoyers@efficios.com> X-Mailer: Claws Mail 4.2.0 (GTK 3.24.43; x86_64-pc-linux-gnu) Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-ClientProxiedBy: LO4P123CA0268.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:194::21) To LO2P265MB5183.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:253::10) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: LO2P265MB5183:EE_|CWLP265MB6419:EE_ X-MS-Office365-Filtering-Correlation-Id: 23f998eb-757a-40a2-1c64-08dce014b48e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|7416014|10070799003; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?0w1HdP2WHdhh0UBiks6ZgODRE11drrOvDDpnAyW+YAlf/2kwnb3CCM5RixFU?= =?us-ascii?Q?U3xx4WDAeN2qnHCNpPZ/6OK1QntJAZRUVlEzXXK6f/qm6LwOHnFcofw3iFG8?= =?us-ascii?Q?JAzSHt4vw4dA1gFjhCBufMszcA7qHQ3vAUYkzO4N329/amSkeJUwTWYpc9dZ?= =?us-ascii?Q?M06QAwoYY8jS8hQ3CSkyixoi7C0hODW0OSWA9Skc0JGGC9PXteqZzWXyHB/T?= =?us-ascii?Q?9ZAQVC1CINbjtjpZ4Wd+bPDjfhT33X6M8KFeryl33ZIuSqnVFvkRXCXBgWMK?= =?us-ascii?Q?f/OWLZqVlwYabjyAGv4sp9bkAGuoL5t4Y7ZLZvq7fcSqzM28vjsAvbZBS2PF?= =?us-ascii?Q?uiRLrvqTnMiiewGYfMZonWSwcWGBLRF5ZNfC+pLWoYVrsg8Hj/5hCTsfFItH?= =?us-ascii?Q?Vk2nqcav81st8etMBe0s1I3WNSd3rBSjiegOq49RxH6LdY54DM2UQii3FQdy?= =?us-ascii?Q?/dn2ermsf5haGFV2ohmm+9YAezfAbYJ8Xvx4VWBeh1EcWVeGfBQmuMQHACnE?= =?us-ascii?Q?UQ2XFJ3F3LvpGtcZ4eUYmPfsb+yYEwu66brI1vI55LXagZ6my7AkiT7AFmbF?= =?us-ascii?Q?NW/EJtoUK8LfGT0nh+ikPU08mo5dWk6HzW5u4xROQ0pLBMo43iHARHyrhCHp?= =?us-ascii?Q?z79dkS2iWLpPVAPlxMPzoC8XuHkLXdLWCyQlvE1PG5kfDbCb4ZuQwyrTNM6C?= =?us-ascii?Q?Ke0oqv/9eUyGxqdzb/UkjtpTUSrjQeTBewyPdL9/0eaeKqkASbjCt99mdxZd?= =?us-ascii?Q?pM13So0B7BuhSUrAceyltElJOPwWl45MSyC3cVw/bIj7t8FhBbyk8imRvqUZ?= =?us-ascii?Q?bNoF8O40RZWxMx2JKqcLam+FBZJTE75Mh4apF2GKO6norITLmFmRb5vXDIJG?= =?us-ascii?Q?zOJp/Soa+4e+s9XvZ4/D2Se/O+QyD/s3Ehax4I2T3+oUqdZ/qMSJXC/lDAQM?= =?us-ascii?Q?/zmG41ZCqEVQ6MN5e+bETFDvyYI2heQogKcdIyEIZb8ISX3sPa3ZHGXykN5H?= =?us-ascii?Q?XhGxdCm/E6rsyIgdwoYKdA3WSg6o5zaQhRAlRVFfqnX3Mnys3s+UvlVRqiQ2?= =?us-ascii?Q?sIIGYv7CJD5+KwCJ+Q2gdY7yiNA8Nvk+dsu+H63MGaDsN+cBH7yC4/C87yiV?= =?us-ascii?Q?PoOa5uTnrG5/8Bx2MYoRrAm2MAc4ALHMVG/ghQx+ZDHkoiiu7K+hWHSLV5Pk?= =?us-ascii?Q?xHAkCmk/yHrXOvhPu+EOALru4hOVbsKF8N01wW2UCymo3hHYFnleQiSVm+8?= =?us-ascii?Q?=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LO2P265MB5183.GBRP265.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(7416014)(10070799003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?wk925sfDUQm+7z/TfGCLxfH7+qwTeGNsyQ1CcDpPTwejd9LzZp0Ks9VZ1qX9?= =?us-ascii?Q?fTmCP72kVNOCwpw2nkVIZUYxhgXWnF91B7Km9MhqP1kA69aMTgyXl8V+s1mO?= =?us-ascii?Q?PM3N9wkOtzABI0qfwd3sfChSv2LznuOa47F0KqX10xL8jQbxFh/G/3LgAN0x?= =?us-ascii?Q?LctWpZq9GzR0KNnpeqX5hmLvzMgdkiNt20p36NgchHjBaS9Ic1v6T9jqOXvn?= =?us-ascii?Q?KxKNvZOCkebdiUzNwVmntvOQsDDLfdiDUW1C8VfIK/E2814kMno12o/TTfQC?= =?us-ascii?Q?rlWePUtdXAbDPa4/9LMxfwTUYqejYiBTOPxGo9OaHOk2ZYNzHmKpbF2IDk0v?= =?us-ascii?Q?CidABz5KHDb16TBWUem9mPfa9AEY0WsEX42Bz4XhWn2OjzmYKnf7mK8Y7Se3?= =?us-ascii?Q?G4td/COI4x3zRpL4kmTmgG/v95Yh/KSduhIU30H4n2PYE3rLfbiYytpyp0Is?= =?us-ascii?Q?sMHoz8DbrQ2+nOK3bzctjmuLqr3+Qih089JD8z5Yh+ICv01YHLwqmbsnYVDD?= =?us-ascii?Q?vrvlYlaZs/3P6KehZkv1R4jHSyLnvxdi/g7vx6/K20RNPckis6rOQ0PXpJ9E?= =?us-ascii?Q?DL7u1JwG+hwj9/iUi9byuBe6+IbKtrOJq6l/VDU1BB10mx2RSVE2/atSZYsk?= =?us-ascii?Q?KowGwmlD4FL30Me3gdKrOWvNHCLd6Ffv7vXYpm27u6MpN54rMC/bKNHp4Xif?= =?us-ascii?Q?zTpk2BzvVXxCs0rLdjSp9cCleFml8NrFlnr7mPCPjhVsvagx0MYVQWo8q337?= =?us-ascii?Q?Tg7tTmc9zSDSwjPBkPgP7Ix3wo0CHziDn/l/Z8c/UqEhKunQlC6F1BDA9XUb?= =?us-ascii?Q?TbpXuJBjDBnqQi4ZAlNvndUvLFBp2pymO45zdF2J19XrwCdB6WoEUS+xpB0+?= =?us-ascii?Q?T2fuoxdxvmt71/31vR8I31uILyxxZFc1bo5s0Wrjiw3iToRS9trIU3NFiCpq?= =?us-ascii?Q?KAwL2PRFE9IAmUYytQYcJT0As19URkXD7ka2Mrn0/8ZZ5rDk1f70+cx8vcsj?= =?us-ascii?Q?rZIkW/YnNa4WKbI7WBAUIvVcdvPvNtrzpkhH+yQNotjd2jQYeSa8cr2hOksx?= =?us-ascii?Q?/2srG0otN/JkPZLdShe+5+S3tpS8xpc2abkrbT+6dEDoHL6U2ujBpMik891s?= =?us-ascii?Q?IGnt1We4WInEBvL7Jg/O72cLq7rySeJbI7W2+gca8jIg2hPJLSJunNKkOMW5?= =?us-ascii?Q?6th+uOr6HAkMXanw5opffToDZTtT6v7zWp/4MCNLVXNWHmiZJ2yLJuNYSaX+?= =?us-ascii?Q?UaBojnmGLZ5Cx1IevOqK0vULsTqbcxC/Xf5qVlp1LjtcS/f4ifPTMkHhi+FA?= =?us-ascii?Q?3PTfKcD/N8SX2jqGaSwJhOQGEKOmfLIGwSMh2h+GvK6m1j15qmzIXk8aOS7K?= =?us-ascii?Q?H3r+n2rKrRvvfqvU8Gt1GwUoiaN2g04iWSaYGOnk3FMO20ilslBjjRrU2egv?= =?us-ascii?Q?nWQFUz6Oxdi3Xdl6+u3GK/DdBq9TVdxlRXZZJD3xZJxXDEaj7cmQFtx4etLQ?= =?us-ascii?Q?TgHaRZ0qvIB76H6bmEmneroVUYgZGh0mfZmKRFwy0qrc1+cRwKrwALECVaN3?= =?us-ascii?Q?+CveW+3A6CKvG6qD8Q51qZHW7XkzY9fQChc8hsrfJuJEMLb6C0SHDOPaB/k1?= =?us-ascii?Q?AA=3D=3D?= X-OriginatorOrg: garyguo.net X-MS-Exchange-CrossTenant-Network-Message-Id: 23f998eb-757a-40a2-1c64-08dce014b48e X-MS-Exchange-CrossTenant-AuthSource: LO2P265MB5183.GBRP265.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Sep 2024 23:24:31.4554 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bbc898ad-b10f-4e10-8552-d9377b823d45 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: mVhERhbxAcyCuSXu+gskZgrlkQfFbAPe+817L18ATV6TAE9mPYYOs/lJCzfLNmqAOOycn19e1Vm9qDL+9DsxXQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CWLP265MB6419 X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 498AB40005 X-Stat-Signature: y1ic8gp9jdj4xeyg1y841ewkmb7isii1 X-Rspam-User: X-HE-Tag: 1727565875-346471 X-HE-Meta: U2FsdGVkX19OxGOqXO7BL35pqwQ5cyfeLwHtWR+nFplciGl6dITRZIEt0UJyNaQm1jIWbNWv5TDAeSqd1EnX8lFh2Kf4Pi2h0iXDSe3sygU7PLQAeS3soCrcWAOww52fWFQmpdduMlIo/y4SpmUpJcFolu/7VdazBrK84PIvbIkDBLGRwKL6M7mq3Ukd2h7MAE86UI5TOEJjlLwBkkN21cq4Zvpe6vi1pH9mdxD1eJYSv/4KaNkTHlw5BIfkivF+vqYvIqZIXzjS/fKAOAHUvv1GjjPwkLsfL+Qca5KGMIJqXrZeqLLC7gB5+S/8sDAbTZX2li9ULhuCO8FAzm9acwNjw0kmIgxRS5HLi0P4PtSEhO9WAfl9xp7Grt8TPr5Txu5SiV4nIcLkgpGKEITDgAl9hoLO+zjKxxQ9NexjY4QnkVcX94JZmQG6SEOGNYnOimad34+ApBUr2ZWES05ycA91IiY/kTKYLAtBbeqyrNbrW8kC7QYVrBGLTES5ZNbR+7yTUrJu4jdNAmdkXfJHC5zJFmHboo8D9hcMLgR+jl4M/FxFUxMsbdzIvYYCjnoRzBrzdsDsdz3fUYfHusc1NBb2hSjtYcL81jkVc1Tl+EtzE23FBzXNdPvweDTTKURhdr4NMdKFLifzw13G1RJuhz+oNakA6z1y3kyNW5Fa2XuAL8SzNylwYSb+zrQcyc/fag7+E5Z5GIjX6M++OpwhjAz7qBYYLsJWZWW7zrXATq3gX8OThkf8G7khPWnzFSUXwIWVU9M1BajhTQjjimk84tF0nAkCE2NgpTNv3CuOX6b9UHu425i0ZUN/sukcxIrNkgW0CPU/Idfgxt8swkPEPwvyfj1qTknIs6MLchHORAAYtocCLHZfW4IeZJGst6BCwK1BgLDj7Kzrk6Bja7klpP8PnbharovslYhNnPxcNMYTdahiZ6b54sGN+4Byl9pqnqlIXdVWgWjcOeRGHJX 2qYkgNy9 cu+EyitnbpTT751m5d6X173i/1W3cC6SCojF2oHwVcDfzmklNmO4nH268nkXR0DVlx4GR/cfzGZeZiIb5lPG3kO/6ize9SLKnwYHe0sDlUIO9tRW2v0ffiF1ELR7aZ6M7jUktwZEwFEJ6f+fDWZc4znS8+AyITgxrtB8SKn1+EOf/h4LxzT5bLaqGJoZdqy2LRGAZPcleosGh3MrIUPanjyj8AomAEo2Kx7Qf6RsfRyIddBlN7VaVSagAidi54KdVOpmE6SxgGts/yNPuGqdGrkpKKIUctuezVlaAoiKUvWeZ1gHCVTp0U8Zd4F0EPXDjXza18DZg5tflAVutdPy3Rh5L1D2ANdOiclAfptEuroNNvdGQNjDk4d5ra9h7J5lDtEq2B4g67rlF/fNVcqyKHMym5pzYe1HNlWphOsiT+vscxYTA+RIXRUWJtCY2DpaEWGx+mDN9qUhBVSA71SpxpsOMpCt+9I+5JSoT3B2Ds5gkgqyyLkkaGJuy8tmV/t2c/tBGU9qkJP5DRon3YYrCRGZZJ9v+U31iKq/z7M+ayhjpDYteL69+RFk5LEYUgKhaSrZ8TIgr0IwOZWP+lz6eyG0kS1WAd0kfNj8lem6+nYLIQ+jko5zvoOFhtmIINl9qaRzd+SAGC6T9YKaWzxJ/yHkjznxKFnopJMd/NB6LIAQuE+Dy+/3cdrkeb9+aEaGQmudBqsu2wp0R65JCEZG5Kjj2M7PbkIHOu/brl5/BFh0yq2mPes7w5WMiYMVtDCAvn6LREE1i9xTt1ee0JwakPZJlAmmXDr/ix4ITQYi07b9+8vCQuYgXSr2KAaNzR8NL10qclHr0LfoGJOa1wZpLC08gJIpwo3eL2VCNjoj+1ypnwSjhFbcLRxkeIw90eCOr22if6Aathu4JD7ykUxtk4XsEsbOvm3dM9dx8zX8o3sMEBtszoEUczK3+Rk1xPa7cNVI9rcScx1BLvJ2M5mr0uPamUCyj ta8ej2xg N8oUa03tUkdpWQidTKh5f2cQEybM9bZjItq5htYVL/RJHmq2jTUU0Eb3EDuYYTjBzyi0g5z0cnZnpcnbV1+XrXvx+1oSbsuLNz0oe8hRhsya1k4IlJNNmd/u4poBV03NmXvW56jZgdHvhFtS/MAJT1uDAG0ZY3xRxlzrJlMw7HwgBiz74XkevZN+PVsILcILwUGh6myhtVxQrvpT/yyX5g== 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: Cc: Nikita Popov Cc: llvm@lists.linux.dev On Sat, 28 Sep 2024 09:51:27 -0400 Mathieu Desnoyers wrote: > Compiler CSE and SSA GVN optimizations can cause the address dependency > of addresses returned by rcu_dereference to be lost when comparing those > pointers with either constants or previously loaded pointers. > > Introduce ptr_eq() to compare two addresses while preserving the address > dependencies for later use of the address. It should be used when > comparing an address returned by rcu_dereference(). > > This is needed to prevent the compiler CSE and SSA GVN optimizations > from replacing the registers holding @a or @b based on their > equality, which does not preserve address dependencies and allows the > following misordering speculations: > > - If @b is a constant, the compiler can issue the loads which depend > on @a before loading @a. > - If @b is a register populated by a prior load, weakly-ordered > CPUs can speculate loads which depend on @a before loading @a. > > The same logic applies with @a and @b swapped. > > The compiler barrier() is ineffective at fixing this issue. > It does not prevent the compiler CSE from losing the address dependency: > > int fct_2_volatile_barriers(void) > { > int *a, *b; > > do { > a = READ_ONCE(p); > asm volatile ("" : : : "memory"); > b = READ_ONCE(p); > } while (a != b); > asm volatile ("" : : : "memory"); <----- barrier() > return *b; > } > > With gcc 14.2 (arm64): > > fct_2_volatile_barriers: > adrp x0, .LANCHOR0 > add x0, x0, :lo12:.LANCHOR0 > .L2: > ldr x1, [x0] <------ x1 populated by first load. > ldr x2, [x0] > cmp x1, x2 > bne .L2 > ldr w0, [x1] <------ x1 is used for access which should depend on b. > ret > > On weakly-ordered architectures, this lets CPU speculation use the > result from the first load to speculate "ldr w0, [x1]" before > "ldr x2, [x0]". > Based on the RCU documentation, the control dependency does not prevent > the CPU from speculating loads. I recall seeing Nikita Popov (nikic) doing work related to this to LLVM so it respects pointer provenances much better and doesn't randomly replace pointers with others if they compare equal. So I tried to reproduce this example on clang, which seems to generate the correct code, loading from *b instead of *a. The generated code with "ptr_eq" however produces one extra move instruction which is not necessary. I digged into the LLVM source code to see if this behaviour is that we can rely on, and found that the GVN in use is very careful with replacing pointers [1]. Essentially: * null can be replaced * constant addresses can be replaced <-- bad for this use case * pointers originate from the same value (getUnderlyingObject). So it appears to me that if we can ensure that neither a or b come from a constant address then the OPTIMIZER_HIDE_VAR might be unnecessary for clang? This should be testable with __builtin_constant_p. Not necessary worth additional complexity handling clang specially, but I think this is GCC/clang difference is worth pointing out. I cc'ed nikic and clang-built-linux mailing list, please correct me if I'm wrong. [1]: https://github.com/llvm/llvm-project/blob/6558e5615ae9e6af6168b0a363808854fd66663f/llvm/lib/Analysis/Loads.cpp#L777-L788 Best, Gary > > Suggested-by: Linus Torvalds > Suggested-by: Boqun Feng > Signed-off-by: Mathieu Desnoyers > Reviewed-by: Boqun Feng > Acked-by: "Paul E. McKenney" > Cc: Greg Kroah-Hartman > Cc: Sebastian Andrzej Siewior > Cc: "Paul E. McKenney" > Cc: Will Deacon > Cc: Peter Zijlstra > Cc: Boqun Feng > Cc: Alan Stern > Cc: John Stultz > Cc: Neeraj Upadhyay > Cc: Linus Torvalds > Cc: Boqun Feng > Cc: Frederic Weisbecker > Cc: Joel Fernandes > Cc: Josh Triplett > Cc: Uladzislau Rezki > Cc: Steven Rostedt > Cc: Lai Jiangshan > Cc: Zqiang > Cc: Ingo Molnar > Cc: Waiman Long > Cc: Mark Rutland > Cc: Thomas Gleixner > Cc: Vlastimil Babka > Cc: maged.michael@gmail.com > Cc: Mateusz Guzik > Cc: Gary Guo > Cc: Jonas Oberhauser > Cc: rcu@vger.kernel.org > Cc: linux-mm@kvack.org > Cc: lkmm@lists.linux.dev > --- > include/linux/compiler.h | 62 ++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 62 insertions(+) > > diff --git a/include/linux/compiler.h b/include/linux/compiler.h > index 2df665fa2964..f26705c267e8 100644 > --- a/include/linux/compiler.h > +++ b/include/linux/compiler.h > @@ -186,6 +186,68 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val, > __asm__ ("" : "=r" (var) : "0" (var)) > #endif > > +/* > + * Compare two addresses while preserving the address dependencies for > + * later use of the address. It should be used when comparing an address > + * returned by rcu_dereference(). > + * > + * This is needed to prevent the compiler CSE and SSA GVN optimizations > + * from replacing the registers holding @a or @b based on their > + * equality, which does not preserve address dependencies and allows the > + * following misordering speculations: > + * > + * - If @b is a constant, the compiler can issue the loads which depend > + * on @a before loading @a. > + * - If @b is a register populated by a prior load, weakly-ordered > + * CPUs can speculate loads which depend on @a before loading @a. > + * > + * The same logic applies with @a and @b swapped. > + * > + * Return value: true if pointers are equal, false otherwise. > + * > + * The compiler barrier() is ineffective at fixing this issue. It does > + * not prevent the compiler CSE from losing the address dependency: > + * > + * int fct_2_volatile_barriers(void) > + * { > + * int *a, *b; > + * > + * do { > + * a = READ_ONCE(p); > + * asm volatile ("" : : : "memory"); > + * b = READ_ONCE(p); > + * } while (a != b); > + * asm volatile ("" : : : "memory"); <-- barrier() > + * return *b; > + * } > + * > + * With gcc 14.2 (arm64): > + * > + * fct_2_volatile_barriers: > + * adrp x0, .LANCHOR0 > + * add x0, x0, :lo12:.LANCHOR0 > + * .L2: > + * ldr x1, [x0] <-- x1 populated by first load. > + * ldr x2, [x0] > + * cmp x1, x2 > + * bne .L2 > + * ldr w0, [x1] <-- x1 is used for access which should depend on b. > + * ret > + * > + * On weakly-ordered architectures, this lets CPU speculation use the > + * result from the first load to speculate "ldr w0, [x1]" before > + * "ldr x2, [x0]". > + * Based on the RCU documentation, the control dependency does not > + * prevent the CPU from speculating loads. > + */ > +static __always_inline > +int ptr_eq(const volatile void *a, const volatile void *b) > +{ > + OPTIMIZER_HIDE_VAR(a); > + OPTIMIZER_HIDE_VAR(b); > + return a == b; > +} > + > #define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__) > > /**