From nobody Wed Dec 17 04:17:09 2025 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 154A821ABD1; Wed, 7 May 2025 07:23:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=192.198.163.18 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746602606; cv=fail; b=Pop4Ar1nu+oNaAajDbfpUcJBPn9/hkpZALgZ/m5g4ia5H+zO28ZssMkH4pFcCcjBsHF4xenNqCR41CpNzEz4e9jMsSDvzU3I6UAX43XdefM75Dvrwz07vzg6WBdjQX9AOThUtJeyBLsuoglwCTLvIhVJFd5CX76UWL8UWnWy/dc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746602606; c=relaxed/simple; bh=S1/gjY+kaD2gl+nZiKDvKuvze65136CWSi4FUCkKBeg=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=YyWQv0HY0KAgg/aKDjtwf9zr1nD359kfgJh/Pl84zyIQFHR0qt0tlZUSmXOtIgTXuJtXdkwji20CU17D/jymew92P9zLMdr7kHD1MUzW47X2m+HLhHm3nPOFdaP6kaSK/d5Hc+SBkUf513OAdayCyBDXhySrpdIH6X6JbJWI/ZY= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=g7S74Wrv; arc=fail smtp.client-ip=192.198.163.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="g7S74Wrv" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1746602604; x=1778138604; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=S1/gjY+kaD2gl+nZiKDvKuvze65136CWSi4FUCkKBeg=; b=g7S74Wrvf7kUktKn0hqnjaok93rsTUiP5VK+Wvf7YCrK1xXcowCC92UA 6v0Np9z3mCI68guHu+5T/PjFDsaBIsMwwDRnclS2nG7Nj6j8pBPdxESD6 cOMMlR9V5BWNnVjinkqbc7GOn8zoiTzw1dPO/z0yaFZL3FXPrlBuBBj7L Kbcq8BZhMdzkOtXL97m4eECShMR4t4HtGz4xs6PEpt9qo6s/LOs+og29m FVdXQhR4mQGPEsja2XTPFlrYlfIz9QJtoT5ZX48RP033dKSicNRkbtZlQ 3k58i7w7ZllRbkM/s/m0CYtO4EiQO6E2Wa2tlS8MBircbwD38CBCW3emR w==; X-CSE-ConnectionGUID: ff4ms4fUSiuBDwrJbzT3uQ== X-CSE-MsgGUID: +F1q7Aj8TTe8Pul6sdMwxw== X-IronPort-AV: E=McAfee;i="6700,10204,11425"; a="47564218" X-IronPort-AV: E=Sophos;i="6.15,268,1739865600"; d="scan'208";a="47564218" Received: from orviesa005.jf.intel.com ([10.64.159.145]) by fmvoesa112.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 May 2025 00:23:23 -0700 X-CSE-ConnectionGUID: pKjtqs1nSgyH+3YB/TezWQ== X-CSE-MsgGUID: 3Sxf+GUvRHeIBNPgFLjllA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.15,268,1739865600"; d="scan'208";a="140984963" Received: from orsmsx901.amr.corp.intel.com ([10.22.229.23]) by orviesa005.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 May 2025 00:23:23 -0700 Received: from ORSMSX901.amr.corp.intel.com (10.22.229.23) by ORSMSX901.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Wed, 7 May 2025 00:23:22 -0700 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by ORSMSX901.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14 via Frontend Transport; Wed, 7 May 2025 00:23:22 -0700 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.45) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.44; Wed, 7 May 2025 00:22:05 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jiuaWDD/ry2soqPuY7Q3sOl8Gm5VxeEB5RTb130GsDqMNhrUnMZ/uJsML5LJy9+2FNVaBPwI2onjXWaBdmsfbxsaHfrXZhB2IlqNB3TUAdkyh9UfSAxPRWW9R3qGuXHADMXQPkWgxZXQSgWf4xokTtrPwR8fgiEpXPug/I7gJ4Duu6eCgBlwf1Sf3k7mlNhxzIZzFgvSbfoc5ejwxtVH/wx0B8307PB66GbEVA6CWOuSGUutOqZyMaRE0qoYGmxSWWt9HXrBXw7arfBDLVGGa5OAD4VdkTtcEvxVSqXE8+4CoWVyREKl9B3pz/2WvKYB/MhOt6perOFKUZqCmpBaqA== 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=HQxgccs4NaUy0c801mwjJPro2VScZCn20iN8rIPr3rc=; b=VEr/NdEwE5nC0ZQWD+fCnFtUGl3J4lLCMYExIcI6UZCuKV3PqJi31lJjFTa7Zo9Y+IxOeawAKNL7RadHdw1nueqyB4PNBsC30UT8h4udxGaRuuJo5ERrG72T6NxW2nsCzX3fja95rtsjLCISFu8igBLXpCHFIa/54WmrwlQdkFZlL/7zFAupNmXUvI0RHV9riHKEgsB7abZGuXnMGQYIbYrnmnjA1lV1Su66RyEEeb3z+4p5BQGe/P4mbHsYZOxd2/g5UtwiZyvYhuuXrv1oq88yXhVUh9RQVxOwjg0tdjKYy2Xrtu0eR4qpThjFJheOWWrRxRdKaaV3Chcn63cDDw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from PH8PR11MB8107.namprd11.prod.outlook.com (2603:10b6:510:256::6) by SJ0PR11MB8270.namprd11.prod.outlook.com (2603:10b6:a03:479::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8699.21; Wed, 7 May 2025 07:21:49 +0000 Received: from PH8PR11MB8107.namprd11.prod.outlook.com ([fe80::6b05:74cf:a304:ecd8]) by PH8PR11MB8107.namprd11.prod.outlook.com ([fe80::6b05:74cf:a304:ecd8%4]) with mapi id 15.20.8699.022; Wed, 7 May 2025 07:21:49 +0000 From: Dan Williams To: CC: , David Lechner , Peter Zijlstra , Linus Torvalds , Ingo Molnar , "Fabio M. De Francesco" , Davidlohr Bueso , Jonathan Cameron , "Dave Jiang" , Alison Schofield , Vishal Verma , Ira Weiny Subject: [PATCH 1/7] cleanup: Introduce DEFINE_ACQUIRE() a CLASS() for conditional locking Date: Wed, 7 May 2025 00:21:39 -0700 Message-ID: <20250507072145.3614298-2-dan.j.williams@intel.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250507072145.3614298-1-dan.j.williams@intel.com> References: <20250507072145.3614298-1-dan.j.williams@intel.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MW4PR04CA0313.namprd04.prod.outlook.com (2603:10b6:303:82::18) To PH8PR11MB8107.namprd11.prod.outlook.com (2603:10b6:510:256::6) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PH8PR11MB8107:EE_|SJ0PR11MB8270:EE_ X-MS-Office365-Filtering-Correlation-Id: 2b002ce0-ea6b-47f9-df59-08dd8d37d53e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|366016|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?SjRExNOPRJIL3Apa1b0OHDvvtS+EkLBqAd0jnkVFPK9eX+wCViz7pCHZtREM?= =?us-ascii?Q?qIhstAlY2+5i2CMlEwh2+3UlUHYxB23yowgaViQ9gAI717g+OkZZwhW13Ju+?= =?us-ascii?Q?mBrp3M7k/7SVTGoWEoyTjDPzFdrHMpcCNKxy/vatwqBfMOdXNVQD2E3MuVuL?= =?us-ascii?Q?Kx64AB25ip3Y+apsBqupIZSYbQzmfA1mX3Te/9YSco8ZSq+pLkH7GXX6KUCy?= =?us-ascii?Q?Y03Pa3fL/GoLhiCo6XnMBQZ073gNrYiScGIHfO5LbEPuzk/l8jzVUpRF+iGv?= =?us-ascii?Q?TZhF7i5XeYr7quRGZvsR5RiuLPSVVyE3ytlpltneAs9LZ3uc1xf/pW9uOND+?= =?us-ascii?Q?idj0Dh5PpX11oN6ltiwrqtXT/wC+sLC4WB3iAlWNn78mIX3GLiDCCeQH9IZP?= =?us-ascii?Q?zfkn2xFzW4Joldj7u9v+fqDpCGW0ONUcU7CnSmNDdyTgzAYK02UVqXszaOcd?= =?us-ascii?Q?s6cKL6XwEfaeCvX/p9uZ9Kaj9EHXfLH1d5us+dMaYG5TGxf8VmupB0eqxy94?= =?us-ascii?Q?b6Z0+MP7qZsrniCTGC2ieM+iPnzm4O8EnhYcmcJB3V7U03lmagn6StVfBrZM?= =?us-ascii?Q?hUAifN+POqY6EcxaFa4sm+SCuvaKorANpeUCc4Y9XHfiqP3FcqhbMeQtRbZ1?= =?us-ascii?Q?cCo1c7Ow9BtA/vw2tsPDbhoCoZQQxwAd9KS7PSrEdid1jwzuNWvkjL8Xyxda?= =?us-ascii?Q?G4gCCFgQ2iS+556nNY4FphHVgaZxjUlbMHvkr7RR4fxPCU9ADWuhPfI3EUA7?= =?us-ascii?Q?0vDSggM1BhTt5UdtXGAuTT0/7QUEoKuEzYjtgCJ80tktDL3+s4Flq9EN98cf?= =?us-ascii?Q?v7F+ExqwDaofHdDTWW8vXCT2l4D0583oshZ/YadAtWKZwACzCZM++sCflR2P?= =?us-ascii?Q?C6R8SRfxPYcXPoWPpoEz3mk359YNqQHqJwqW4flGsvZ5wbwnnLzbzYiPgx/W?= =?us-ascii?Q?ORUFqhQW3N7uuFsDYukks4tCTSfByEi+tEqVBmZ7AlXoDHlCwNIXoti8/O14?= =?us-ascii?Q?lE7GZYRJAYaWogGqalYqLsEfDVQlQs4q2/6zP6NVxeFhaK7C9na7bIBnGy1W?= =?us-ascii?Q?cmCl74EJRu24MgreopJGdryAcNLykg1luY8RI8578xMFtDEQt9kfpHBPyW88?= =?us-ascii?Q?tsL0fscByvAZZXQs9wnz5Jxxf8IYvh9UeUzKmzE3Rf1RSCKJnoqLb4eUNqiL?= =?us-ascii?Q?45z7JEJZLUdR1dlmqI4BQHsK5HtAYnGnapvq5UjdU/NzqZ97Sx+XuSyVKc7y?= =?us-ascii?Q?MyP9wSbRQd79YJodZH6O+8ATxU7MO2/hRxV6hpdsSQOM1ldm2kWivH0GOA1k?= =?us-ascii?Q?V/L1GRWk5Cafg0Uv66wLGb1gOuhIuK8d8mjLcaOZBxixMms1OVrtgVPmZnsn?= =?us-ascii?Q?B4mQ6O0u5oDocmLPr/H9O5eN4KBvmenkl5r8B38K0rgOjRutyCeBGTDbDwIY?= =?us-ascii?Q?Hf/pyzHpzIg=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH8PR11MB8107.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?jQXHnxWFxkU7iFpgIE0kJNPKdDQKYNnUenll5LrM+B0KijZOllZ29LqkPiUZ?= =?us-ascii?Q?fm7R4SdIz3vLuoBgcVccbkSPMzxNzDu/Y25TkQycMy80Tks/opdv+M08Sg/Q?= =?us-ascii?Q?xsAehqMsAiQ0a2NbzfmRPu8qQc9TyHvj0xRNrMQgg6yFsH32uGIKg7N3QNpu?= =?us-ascii?Q?nzUA3Xe46PZVhDSjhXk8hM3TIu4Y4GCj5H5HSujardYMvR0th+CRRl+T+8oQ?= =?us-ascii?Q?lfsSm4mvme9D2F/D6RHZOkVQ8s7azAQgVg13aEFCuiTNN8OPlw6BOqt7Tz3M?= =?us-ascii?Q?LYuqAv+evmQ+Ae551PBsEyJ/lbgdWtEcbBRO21gmN3j5TALjMHs2kggtqNG1?= =?us-ascii?Q?ntUQOPMG4L/7sNbfQzIizOCf32B2fx6ON/OzYRdLqwys1sw8VBFPGkFyawl1?= =?us-ascii?Q?0abw41VfbaDHxtX9BRS+X7mmr+T2hv6ZByVbwu8ZbZs8jzkh99bPa9wMjU9X?= =?us-ascii?Q?BPbHnTe7zR58To2jU6jEkKf7Abo+d/w5rqYzJmYrPNjRcur1r8CfvTueTQX/?= =?us-ascii?Q?iBmjwKGtmG2V3t8V+j2wrUrzdiE9YJ3DbYVILsuKNlt7iueEMQhqR5NScZUc?= =?us-ascii?Q?+JPG7R8RDgVBnSmdwTNR3yPsqjtqHzbZdV9uweKkGTMXPp1Yi6RKS1lT3z96?= =?us-ascii?Q?HcIDuttO42zGETG7UB5teSbCJanBM4B8/itp7jZNwFscmjqNvlnWyXIpOLcX?= =?us-ascii?Q?bdKY/yllE8j0Or1IoMwmU79F+JWxbTKPBXiMA8Gg45vRA1C+xV17rKwjfcl1?= =?us-ascii?Q?tHuGhkuythyseDgGnA9czoS8mc7I9git/pYkaEdV4tBDuVYIYQdSdOvKB8FF?= =?us-ascii?Q?7H6ZrHegIALMKVYSgKxxhntvK+lyW+2sbgWyawYnKtYBlEvvQ7hZBo6tz5cU?= =?us-ascii?Q?O7i/KvaT+Gpcrcywk01mmkhik0VEmjozt9NR9xHajgS9lwbMx1hZ8h2Vzfyr?= =?us-ascii?Q?0AUGDn+gv0/bZQgYcpCAIb7U6Sjbs+0B+8Hm2JqLnB1bhcrks/8kz6BzbC9S?= =?us-ascii?Q?AyCWrCU6dINJh8loc/xURgfvneqYzwh5UcaERouy3a8u5gQnnV4XHnGdSU6t?= =?us-ascii?Q?jpBK5AoWu+rD1wCOKfyotxdxrm/KSAq3duriztzrv8bDSNbJ99zUGk5NnOzS?= =?us-ascii?Q?DyW+h/smbLOpw6XFvUk08/HBRL2zyUlbkc0KHWqmmj4BGQGISR0QAw6WaqWl?= =?us-ascii?Q?wxxK1Yci08ay84Eum04yvbE9ebd7rKQ563zJYeTqMZKunD6V/8bAa8NIy7t5?= =?us-ascii?Q?LM+UmioihMG4zwB8PD8QTP/a3sQ5UtAK21M6ftdO7R1mX1B50V/MY/qSRelY?= =?us-ascii?Q?tvfgja38pnDPx98aV+ZV9g+m+X0uTfFSBsWlhRB50DaiLOclSlN8xu+7NSeJ?= =?us-ascii?Q?hAzWstKOexmA/TUi2NxotW8jeYSz/348/NkdHPQ704CmqIBBab/4wAI1W2DG?= =?us-ascii?Q?iHfSrz2YDaeGKqHUYCmnaOFlqHoDO4IPHzEOhiT13Uah+sdk1ZEoqScNjuP5?= =?us-ascii?Q?adPBsR8zh2t+wUwcyIeYhXEKggM/dV3dc00C9/fKh01K2tca58EbwR8qFpkt?= =?us-ascii?Q?oRBZzDyl14CUFQ3+wZlieqYFYVxbfG0MlYcZnecZxA2OXBXgQ21akW9paARl?= =?us-ascii?Q?zg=3D=3D?= X-MS-Exchange-CrossTenant-Network-Message-Id: 2b002ce0-ea6b-47f9-df59-08dd8d37d53e X-MS-Exchange-CrossTenant-AuthSource: PH8PR11MB8107.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 May 2025 07:21:49.8267 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Q+e6oqSHDBmB7xAbWxnC9U36jGH8kHoIypNfxGImwlYQ7rhD7AIT9id2kSmzGjaGfuPI47y2i8vjS5xfffYqwp1VEQsXXzn3408hKjdOxeM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR11MB8270 X-OriginatorOrg: intel.com Content-Type: text/plain; charset="utf-8" The scoped_cond_guard() helper has two problems. First, with "convert to cleanup" style patches, it results in messy diffs that re-indent large swaths of code. Second, it swallows return values from interruptible / killable locks, i.e. the return value of those is not always -EINTR. The last attempt at improving this situation, if_not_guard() [1], was reverted with a suggestion: "I really think the basic issue is that 'cond_guard' itself is a pretty broken concept. It simply doesn't work very well in the C syntax." However, the observation is that just exposing the CLASS() to callers solves: the safety concern (compiler enforced "expected expression" checks), conveying the conditional acquisition state of the lock, and avoiding re-indentation caused by scoped_cond_guard(). See the commit below for the analysis of the revert. Commit b4d83c8323b0 ("headers/cleanup.h: Remove the if_not_guard() facility= ") The DEFINE_ACQUIRE() macro wraps a lock type like 'struct mutex' into a 'struct mutex_acquire' type that can only be acquired and automatically released by scope-based helpers. E.g.: [scoped_]guard(mutex_acquire)(...) CLASS(mutex_intr_acquire, ...) CLASS(mutex_try_acquire, ...) Use DEFINE_ACQUIRE to create the new classes above and use mutex_intr_acquire in the CXL subsystem to demonstrate the conversion. Link: https://lore.kernel.org/all/CAHk-=3Dwhn07tnDosPfn+UcAtWHBcLg=3DKqA16S= HVv0GV4t8P1fHw@mail.gmail.com [1] Cc: David Lechner Cc: Peter Zijlstra Cc: Linus Torvalds Cc: Ingo Molnar Cc: "Fabio M. De Francesco" Cc: Davidlohr Bueso Cc: Jonathan Cameron Cc: Dave Jiang Cc: Alison Schofield Cc: Vishal Verma Cc: Ira Weiny Signed-off-by: Dan Williams --- drivers/cxl/core/mbox.c | 9 +++--- drivers/cxl/cxlmem.h | 2 +- include/linux/cleanup.h | 62 +++++++++++++++++++++++++++++++++++++++++ include/linux/mutex.h | 24 ++++++++++++++++ 4 files changed, 91 insertions(+), 6 deletions(-) diff --git a/drivers/cxl/core/mbox.c b/drivers/cxl/core/mbox.c index d72764056ce6..cec9dfb22567 100644 --- a/drivers/cxl/core/mbox.c +++ b/drivers/cxl/core/mbox.c @@ -1394,9 +1394,9 @@ int cxl_mem_get_poison(struct cxl_memdev *cxlmd, u64 = offset, u64 len, int nr_records =3D 0; int rc; =20 - rc =3D mutex_lock_interruptible(&mds->poison.lock); - if (rc) - return rc; + CLASS(mutex_intr_acquire, lock)(&mds->poison.lock); + if (IS_ERR(lock)) + return PTR_ERR(lock); =20 po =3D mds->poison.list_out; pi.offset =3D cpu_to_le64(offset); @@ -1430,7 +1430,6 @@ int cxl_mem_get_poison(struct cxl_memdev *cxlmd, u64 = offset, u64 len, } } while (po->flags & CXL_POISON_FLAG_MORE); =20 - mutex_unlock(&mds->poison.lock); return rc; } EXPORT_SYMBOL_NS_GPL(cxl_mem_get_poison, "CXL"); @@ -1466,7 +1465,7 @@ int cxl_poison_state_init(struct cxl_memdev_state *md= s) return rc; } =20 - mutex_init(&mds->poison.lock); + mutex_acquire_init(&mds->poison.lock); return 0; } EXPORT_SYMBOL_NS_GPL(cxl_poison_state_init, "CXL"); diff --git a/drivers/cxl/cxlmem.h b/drivers/cxl/cxlmem.h index 3ec6b906371b..9b4ab5d1a7c4 100644 --- a/drivers/cxl/cxlmem.h +++ b/drivers/cxl/cxlmem.h @@ -257,7 +257,7 @@ struct cxl_poison_state { u32 max_errors; DECLARE_BITMAP(enabled_cmds, CXL_POISON_ENABLED_MAX); struct cxl_mbox_poison_out *list_out; - struct mutex lock; /* Protect reads of poison list */ + struct mutex_acquire lock; /* Protect reads of poison list */ }; =20 /* diff --git a/include/linux/cleanup.h b/include/linux/cleanup.h index 7e57047e1564..926b95daa4b5 100644 --- a/include/linux/cleanup.h +++ b/include/linux/cleanup.h @@ -424,5 +424,67 @@ __DEFINE_LOCK_GUARD_0(_name, _lock) static inline void * class_##_name##_ext##_lock_ptr(class_##_name##_t *_T= ) \ { return class_##_name##_lock_ptr(_T); } =20 +/* + * DEFINE_ACQUIRE(acquire_class_name, lock_type, unlock, cond_lock): + * Define a CLASS() that instantiates and acquires a conditional lock + * within an existing scope. In contrast to DEFINE_GUARD[_COND](), which + * hides the variable tracking the lock scope, CLASS(@acquire_class_name, + * @lock) instantiates @lock as either an ERR_PTR() or a cookie that drops + * the lock when it goes out of scope. An "_acquire" suffix is appended to + * @lock_type to provide type-safety against mixing explicit and implicit + * (scope-based) cleanup. + * + * Ex. + * + * DEFINE_ACQUIRE(mutex_intr_acquire, mutex, mutex_unlock, + * mutex_lock_interruptible) + * + * int interruptible_operation(...) + * { + * ... + * CLASS(mutex_intr_acquire, lock)(&obj->lock); + * if (IS_ERR(lock)) + * return PTR_ERR(lock); + * ... + * } <=3D obj->lock dropped here. + * + * Attempts to perform: + * + * mutex_unlock(&obj->lock); + * + * ...fail because obj->lock is a 'struct mutex_acquire' not 'struct mutex' + * instance. + * + * Also, attempts to use the CLASS() conditionally require the ambiguous + * scope to be clarified (compiler enforced): + * + * if (...) + * CLASS(mutex_intr_acquire, lock)(&obj->lock); // <-- "error: expected e= xpression" + * if (IS_ERR(lock)) + * return PTR_ERR(lock); + * + * vs: + * + * if (...) { + * CLASS(mutex_intr_acquire, lock)(&obj->lock); + * if (IS_ERR(lock)) + * return PTR_ERR(lock); + * } // <-- lock released here + */ +#define DEFINE_ACQUIRE(_name, _locktype, _unlock, _cond_lock) = \ + DEFINE_CLASS(_name, struct _locktype##_acquire *, \ + if (!IS_ERR_OR_NULL(_T)) _unlock(&_T->_locktype), ({ \ + struct _locktype##_acquire *lock_result; \ + int ret =3D _cond_lock(&to_lock->_locktype); \ + = \ + if (ret) \ + lock_result =3D ERR_PTR(ret); \ + else \ + lock_result =3D \ + (struct _locktype##_acquire \ + *)&to_lock->_locktype; \ + lock_result; \ + }), \ + struct _locktype##_acquire *to_lock) =20 #endif /* _LINUX_CLEANUP_H */ diff --git a/include/linux/mutex.h b/include/linux/mutex.h index 2143d05116be..283111f43b0f 100644 --- a/include/linux/mutex.h +++ b/include/linux/mutex.h @@ -64,6 +64,8 @@ do { \ __mutex_init((mutex), #mutex, &__key); \ } while (0) =20 +#define mutex_acquire_init(lock) mutex_init(&(lock)->mutex) + /** * mutex_init_with_key - initialize a mutex with a given lockdep key * @mutex: the mutex to be initialized @@ -202,6 +204,28 @@ DEFINE_GUARD(mutex, struct mutex *, mutex_lock(_T), mu= tex_unlock(_T)) DEFINE_GUARD_COND(mutex, _try, mutex_trylock(_T)) DEFINE_GUARD_COND(mutex, _intr, mutex_lock_interruptible(_T) =3D=3D 0) =20 +/* mutex type that only implements scope-based unlock */ +struct mutex_acquire { + /* private: */ + struct mutex mutex; +}; +DEFINE_GUARD(mutex_acquire, struct mutex_acquire *, mutex_lock(&_T->mutex), + mutex_unlock(&_T->mutex)) +DEFINE_GUARD_COND(mutex_acquire, _try, mutex_trylock(&_T->mutex)) +DEFINE_GUARD_COND(mutex_acquire, _intr, mutex_lock_interruptible(&_T->mute= x) =3D=3D 0) +DEFINE_ACQUIRE(mutex_intr_acquire, mutex, mutex_unlock, + mutex_lock_interruptible) + +static inline int mutex_try_or_busy(struct mutex *lock) +{ + int ret[] =3D { -EBUSY, 0 }; + + return ret[mutex_trylock(lock)]; +} + +DEFINE_ACQUIRE(mutex_try_acquire, mutex, mutex_unlock, + mutex_try_or_busy) + extern unsigned long mutex_get_owner(struct mutex *lock); =20 #endif /* __LINUX_MUTEX_H */ --=20 2.49.0 From nobody Wed Dec 17 04:17:09 2025 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.15]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B5DDA221263; Wed, 7 May 2025 07:23:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=192.198.163.15 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746602615; cv=fail; b=ggnZ9TOmxkHDHSnRFlS7YlbUEXhF4viGwiWEJW3QvFmqLSjgzBG8CqPkKQon86p9icjeWQrsk+Q9WA+oeBwPHaEsHi5meo9JSqRFhPBOvcQl7l6CPFlKg2BdfhLp8E2mXS2Mw4161JAzoPSyg+A2qSQqYypEJhkny79noUD83Ok= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746602615; c=relaxed/simple; bh=633G7SFOOwrZ6qW2xmvq2A4cO0AKu+cSUzNHkyw/+Ww=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=DmqTjvzVxwcGqVCdTL0Hr4zX4o7byyhyiJkhtK3VshAYaXGvn9PrDM3M9FW9A9MV4bYVXJ2FTtusenpA1mI3rSm1X8d1bne1G1VSOYHKeihGUL/5aGXQSvvD4oJhC7ki8U0M7lhYGgsfEq6MgIHtcukWjWtIudI2NzUBtGisDy4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=hfqwfou5; arc=fail smtp.client-ip=192.198.163.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="hfqwfou5" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1746602614; x=1778138614; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=633G7SFOOwrZ6qW2xmvq2A4cO0AKu+cSUzNHkyw/+Ww=; b=hfqwfou5CUbEy0aY4GnM6jnKVDqUxSn1U1xw7+kkBh3mi9LuxdShzNQ2 TJfb2WueRAGnDr9p71PIVrYHi+0rnIzpSoUj1MPFSky/r9vNgSXiaBhiW 1OusKOi7iQXXf35MQmiB/Rsp/qbLOcHeakwMhX+GVObDXPEYNsq2dSN93 OeWYCw5ZQRrakgp95RKgdfmWYYfW+gRQyZVmTqYQ539rtpLjFDGLY84nr t4SMgpixfuyhY6RNotBBsFaQhBuPMA6eaKdHutsQWObNcBRfPazi7LQlM ahx53QnDa2D5yPapAz0OjWzEKuTqgtiawwYxhZYKL1JGS2QXUtMWhjW3p Q==; X-CSE-ConnectionGUID: BVgxPbzmRTaRPvE3i5v/7A== X-CSE-MsgGUID: YdOEKXheTqSrOFeNHDxD7Q== X-IronPort-AV: E=McAfee;i="6700,10204,11425"; a="48450252" X-IronPort-AV: E=Sophos;i="6.15,268,1739865600"; d="scan'208";a="48450252" Received: from orviesa001.jf.intel.com ([10.64.159.141]) by fmvoesa109.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 May 2025 00:23:29 -0700 X-CSE-ConnectionGUID: DqbfcQ7BTK2S9oeVHbq9/g== X-CSE-MsgGUID: w5XWa2ldTZ27EPfGw3BSLA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.15,268,1739865600"; d="scan'208";a="173062310" Received: from orsmsx902.amr.corp.intel.com ([10.22.229.24]) by orviesa001.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 May 2025 00:23:28 -0700 Received: from ORSMSX901.amr.corp.intel.com (10.22.229.23) by ORSMSX902.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Wed, 7 May 2025 00:23:26 -0700 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by ORSMSX901.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14 via Frontend Transport; Wed, 7 May 2025 00:23:26 -0700 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.45) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.44; Wed, 7 May 2025 00:22:34 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=czuwRqTzARC+/TPzs5wRbk3hLesUsgAG+qLWGDpXx1LjIkJ8M0pyd+EjNtDDymxHawKFDp8grO9WC89IwNXhuNF6dtFYetJ4MseEk3vm668w9WmlvQwWqHm7WX8blDVu+rHZUQ6gC/SiHhTKeLJrpF8SrbcNB7riVwEPjxGCR1x3sBGeyFLTwdZhaJMzOD071DNoC+tXoSTyMixhJ9nkniE6UkKr/M+6R6YINEG0aJV5RYoQgrekQrWRLjtckCkG6oxSAfSVv6K5/pzRDFV9AHca+fhcuJHoEGWNMD1OTZKJwYSLKoNXeI0lsAiEOqPYvWR8Qt7EQzpWgp9KFvmkhg== 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=c7eq6/5k9fzmKgvdtKZICW+IkOt4ha2Ga0KAK1ePRag=; b=Bs884dYmR3NxmkhPnJda61YWrTEXwd3V0ADYf7B8H6xyggdGZRo7X2fTOqAMQEyM12vv5OAEe0U2lSyFKVJspiAS9z/ehFm7tWMMRrhOdjZvZ9pG7NNiCITT3NTek6+Hf2Wbxgs+I6xMPr3h5OZXGnMaGzqu4Q0Yvr0Vg9fe+7YjIWVQbj2EDDiIYq9Tk/GoPkZM004WjxwJ10st1Rb7QNqlYX36OV5aiSx+FRJnvIAxbmwj0B1fCoCkjXGO7eSeaRDjm4lHIryKgsNZhRPaXUENJlP1VrPLvl7SLxTbhTAUzrKpUUcTGg7csTzCedEApoo3p7JzpEWifvL56fLDNQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from PH8PR11MB8107.namprd11.prod.outlook.com (2603:10b6:510:256::6) by SJ0PR11MB8270.namprd11.prod.outlook.com (2603:10b6:a03:479::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8699.21; Wed, 7 May 2025 07:21:50 +0000 Received: from PH8PR11MB8107.namprd11.prod.outlook.com ([fe80::6b05:74cf:a304:ecd8]) by PH8PR11MB8107.namprd11.prod.outlook.com ([fe80::6b05:74cf:a304:ecd8%4]) with mapi id 15.20.8699.022; Wed, 7 May 2025 07:21:50 +0000 From: Dan Williams To: CC: , Davidlohr Bueso , Jonathan Cameron , Dave Jiang , Alison Schofield , "Vishal Verma" , Ira Weiny Subject: [PATCH 2/7] cxl/decoder: Move decoder register programming to a helper Date: Wed, 7 May 2025 00:21:40 -0700 Message-ID: <20250507072145.3614298-3-dan.j.williams@intel.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250507072145.3614298-1-dan.j.williams@intel.com> References: <20250507072145.3614298-1-dan.j.williams@intel.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MW4PR04CA0313.namprd04.prod.outlook.com (2603:10b6:303:82::18) To PH8PR11MB8107.namprd11.prod.outlook.com (2603:10b6:510:256::6) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PH8PR11MB8107:EE_|SJ0PR11MB8270:EE_ X-MS-Office365-Filtering-Correlation-Id: 388712ab-90e1-413d-3c2a-08dd8d37d5c8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|366016|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?RGMIFEWZstoKOcMi5DJAhibNDzYSEpL/hCAosqwvqmONPzrZr1Zc+QpCERyJ?= =?us-ascii?Q?0J+zpOluP0A5yK6NcSEvpXpzBIHK5WmoKfBvHInUHDGGVicbowJmeCE0FfJw?= =?us-ascii?Q?JkkvYjCtbQFVa0Mr7jjUQ98xz0zAMD9DkzxBmb3q2D6plqlnrDO05i8Gxinz?= =?us-ascii?Q?cTkJ6ADh3dtv7Hbfr0FpGfObxGvP/QHMVBpLsyp/opizWzar8JFUvS0lsfON?= =?us-ascii?Q?V0HHX0S5G5A0SfsjXOLiRK9CxCLbvfkj4lxwJS6ccMtSkLN5y1oQUeVxnkbS?= =?us-ascii?Q?Q2mu5EZJK44/keb/0zK8471fJa5yI9ByhlIXRNJ3Vj3AfM6Phw2tnCBmW16P?= =?us-ascii?Q?RWbnjPC7pSTzg/NmQlaRJO1gW72MuRlopW8lDlu+UJuoYc4johjb4hVpSUZF?= =?us-ascii?Q?ebefJ/8WQFUL608/n1naWzCbFJzmdvPiEjeTvaevUs/aLT5m17kvK9z6AZFS?= =?us-ascii?Q?UVfpDQNkXxfQQMz7uLVEQE5sQ1510eSRr9P3/+Zeq1Zeym+b8B08XakxNgHC?= =?us-ascii?Q?jbS8CZmyLFl1uMG3xV4kKjY0m6vmD+UC/b7cfxRDpdPQu7e0ojD/JJYrw8BZ?= =?us-ascii?Q?0UPY/HyDH9wzEG6sjryeDYFLdYCTpFFEK9TN6k0/iy1Fo5DeJlnYPDemKfo2?= =?us-ascii?Q?/SXXO3qZ1x1sH+Bllh5Al1ROOjHSSMOBFFJ4OM+YXN/G/TxGdTVfLzSp633t?= =?us-ascii?Q?Z70npfs7SCgg1FdkzlvFydnbV/5Lj5IiCohmKwEa3iD8HZnCkETnVv0Pqkx5?= =?us-ascii?Q?tr6sJc4RxchDKlDdsjNBK9az6cFADzuoLPYM8gLOsKMjoZ92xb81M3jtMp8y?= =?us-ascii?Q?VKoNdtU3yKjj5sV6OF9SlHlpQ0XJL3Qli7Cl3wguoGtUX/E80mF6p9FWU1uN?= =?us-ascii?Q?Wkhp10alHarJwUH+oxkSVBW2Wd7lbnQ+bJJByugH2wZMN/+nIw3UeWwMFvKq?= =?us-ascii?Q?2aEOITvGIIgWry8Vdwnw1Tz9VOTFFmP0ZwIYvVcgXE8aanElSWJaOvb8q4Vc?= =?us-ascii?Q?bwbpMPNdk0xc54wcX9nFiEch7lisF90E1tcbYSDLvanFf3CFgyudqZe7qYXm?= =?us-ascii?Q?Pn4NE4j7/WnjaM0Bh1C9bomcI6KepT+pYu0f+Uzcj1AK/+D3TB7GhanBfkhg?= =?us-ascii?Q?mrUDOvmzuUedmo6YzSy9EzFFxO1sooxgUqg40B1ow0Rudwh0jRtE1mROdPX0?= =?us-ascii?Q?O8Gfxm4OwJNU7bd6lfiXFSZpz2MJavAWDkRtpAHKjdfUv4K8uqQNvGk62uf8?= =?us-ascii?Q?k3YRnUxLeZiKrDVwGf7CLZU5yoo8lQAKO/JV8z4pv/y6MEanr850VsoJdGl4?= =?us-ascii?Q?pKp7Y7Qn7YW8e7S8AYaGWR6lXKqq6pjyKj3kWakDKJ10j4nltmzqdqnBqzdl?= =?us-ascii?Q?UfrBsDv+aLDPmYAUm868Y6VQ062cSg7NTqshlpBpTy4iylL6WdppkqvX9QRv?= =?us-ascii?Q?92X4YUjJsjc=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH8PR11MB8107.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?OGHiobW1aY604NJFfdSfJsuQkenXZw/hFSo1pOmexA6Ri9+9/w4oiHGedL93?= =?us-ascii?Q?Zrm6Yuro2JUvRZpn+UDl9LrYFMWO6TfG6pe7H7eJviyH4oDDeATaGSuF07MY?= =?us-ascii?Q?Akt5eVaxNgizyiSZNevw4k3W9Qo9xl1R6cKwkF7QPw0VHP15x8Kxn3ywId/0?= =?us-ascii?Q?0FDFgxIqu+MCpoN6u8jgdXDrzRvVuxMVGjH7hBWYcmveZsnZ65u3mGIXMUbX?= =?us-ascii?Q?rhLFsPiebDu7vWQ8DPm7KXLAI2DuWKDCzUnWOunaH/wKVgOLXoxtx6RQR3zp?= =?us-ascii?Q?w0MD5z8SBxxeteaJNEik8mkXdIH7+9fxJEIPGMAh4+cbjNsXQsLCDrxXCfWq?= =?us-ascii?Q?yJe4gC92EVbLw1BXc43Q4jGJBjFzp8vNzbniuaob37o+CBoJYqiHgjrV/mzL?= =?us-ascii?Q?UspTgEzZVYJh/Pi5zuKSos9ZmUNGobmJckB3fX+y/AGAwXmHYCb3whLvBY8X?= =?us-ascii?Q?bzY3VMRUpJGm2jDg8XKihSzoxZHCpQYQEwG7XdrIHh1nrsxlKH0LoCi/kMZC?= =?us-ascii?Q?JdDFpiRmMaYzE+FlzURScSc8++P+SOsvUECfJMkSZUJBGnoZ7sJRPfi+T1or?= =?us-ascii?Q?IgLd45Xg+sftNX9/T3nSY60CQ9MnkqAosNwyP0JVKgVwOJNhTTyHaIq7kerS?= =?us-ascii?Q?91DqdZz3WY9NWEhTZrKlfYOHUHKvaSqQFPY6p+xEimDLhkJXG0tuw0dlC9dT?= =?us-ascii?Q?ccFEM+ALZGrO9+wkoKxtnJrtP8W3KMia+tu3sy9AdPV2h3GKul+RBytV21hB?= =?us-ascii?Q?LjyaArPQi6e+Mlb2shWq+viKR7unI/zwasM/0MWDdYv77nV3P7kEzQuSpLBu?= =?us-ascii?Q?T+ioaRhJqwIuVdh5pw0HYavJMIN5pbOhgGbT6zvQqEFow3wa9ECNtZRgnwxu?= =?us-ascii?Q?jZe8M7sbKw/F2O9/CH/HkLQ3OsxepnbG8HM7O0CpLeUV+yicBWX8y3BpR7DA?= =?us-ascii?Q?5w80ZHWlspu2WMXEk6HTwNkP5MPqHtn30yn5qIXldPHnt0pl6V4A5eOr4LBK?= =?us-ascii?Q?Gh/zXnwXwBjeTZ+Jdv8HpHuIWbFemgU9rZYXIeIrGRXCZo+to+sg0W1+Esa8?= =?us-ascii?Q?BqX9xHWeQWlhwCXz9hMCE0RHSVLXN+Ddhd4Fi7hLioo1g4zpEKeTAhQUNbo7?= =?us-ascii?Q?gyhsTDoux8fjtZfKePfHJ+ZY+KuJvwabhPxzLnmUTHBbywagTHsipP+LDtGk?= =?us-ascii?Q?dJuTDl2PGGa6fqKqWinNWBqVECKzkswO+skuw/kd2l0xj2Qmcg6e06xbcorm?= =?us-ascii?Q?agMTwHjRdMKiBvzby76Fd/Y2R1qIketLXssJzHugCBn49ti5YOgwO9MnU8jo?= =?us-ascii?Q?DiaR5eh0TEnAYHH0Dmu7xbl5KlGV3O0lV+8Vxso74Yx6gQHHXK1Xe9rirOBY?= =?us-ascii?Q?ei7KUSgFPCOkt1RHQNS2Zxeml5m/dld2n8UtODiGmCFQpDsY5UXUJqj1Yauf?= =?us-ascii?Q?Hxmu8wy7AmMWBAwSJ5DsOwwyiDG9yIBQ2YFh1bgl5oZmviTMwLH6KB56ScKB?= =?us-ascii?Q?o9L7fK6mXCqW/jqre+XAzpILox+/ccDGKAHRUTWlXB1tdsOzqzlnLA4XpEy/?= =?us-ascii?Q?802E5osL2zU18HrRwLX1SqQG/ZyYnZmsQQaovMXC8p2rOHstaYp2Smwt4Ebo?= =?us-ascii?Q?wg=3D=3D?= X-MS-Exchange-CrossTenant-Network-Message-Id: 388712ab-90e1-413d-3c2a-08dd8d37d5c8 X-MS-Exchange-CrossTenant-AuthSource: PH8PR11MB8107.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 May 2025 07:21:50.7366 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: c1nUJ7LAD6yuou30ueGVWVGM4IZBv8bnxUnZcMI2TUcfeULqSAbYR4KxN6XjKW82v0qlRwRR4tVbfp11XWhgK/p58Msx6sptc99M9n6cI6Y= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR11MB8270 X-OriginatorOrg: intel.com Content-Type: text/plain; charset="utf-8" In preparation for converting to rw_semaphore_acquire semantics move the contents of an open-coded {down,up}_read(&cxl_dpa_rwsem) section to a helper function. Cc: Davidlohr Bueso Cc: Jonathan Cameron Cc: Dave Jiang Cc: Alison Schofield Cc: Vishal Verma Cc: Ira Weiny Signed-off-by: Dan Williams --- drivers/cxl/core/hdm.c | 77 +++++++++++++++++++++++------------------- 1 file changed, 42 insertions(+), 35 deletions(-) diff --git a/drivers/cxl/core/hdm.c b/drivers/cxl/core/hdm.c index 70cae4ebf8a4..418539e859e3 100644 --- a/drivers/cxl/core/hdm.c +++ b/drivers/cxl/core/hdm.c @@ -763,14 +763,53 @@ static int cxld_await_commit(void __iomem *hdm, int i= d) return -ETIMEDOUT; } =20 +static void setup_hw_decoder(struct cxl_decoder *cxld, void __iomem *hdm) +{ + int id =3D cxld->id; + u64 base, size; + u32 ctrl; + + /* common decoder settings */ + ctrl =3D readl(hdm + CXL_HDM_DECODER0_CTRL_OFFSET(cxld->id)); + cxld_set_interleave(cxld, &ctrl); + cxld_set_type(cxld, &ctrl); + base =3D cxld->hpa_range.start; + size =3D range_len(&cxld->hpa_range); + + writel(upper_32_bits(base), hdm + CXL_HDM_DECODER0_BASE_HIGH_OFFSET(id)); + writel(lower_32_bits(base), hdm + CXL_HDM_DECODER0_BASE_LOW_OFFSET(id)); + writel(upper_32_bits(size), hdm + CXL_HDM_DECODER0_SIZE_HIGH_OFFSET(id)); + writel(lower_32_bits(size), hdm + CXL_HDM_DECODER0_SIZE_LOW_OFFSET(id)); + + if (is_switch_decoder(&cxld->dev)) { + struct cxl_switch_decoder *cxlsd =3D + to_cxl_switch_decoder(&cxld->dev); + void __iomem *tl_hi =3D hdm + CXL_HDM_DECODER0_TL_HIGH(id); + void __iomem *tl_lo =3D hdm + CXL_HDM_DECODER0_TL_LOW(id); + u64 targets; + + cxlsd_set_targets(cxlsd, &targets); + writel(upper_32_bits(targets), tl_hi); + writel(lower_32_bits(targets), tl_lo); + } else { + struct cxl_endpoint_decoder *cxled =3D + to_cxl_endpoint_decoder(&cxld->dev); + void __iomem *sk_hi =3D hdm + CXL_HDM_DECODER0_SKIP_HIGH(id); + void __iomem *sk_lo =3D hdm + CXL_HDM_DECODER0_SKIP_LOW(id); + + writel(upper_32_bits(cxled->skip), sk_hi); + writel(lower_32_bits(cxled->skip), sk_lo); + } + + writel(ctrl, hdm + CXL_HDM_DECODER0_CTRL_OFFSET(id)); +} + static int cxl_decoder_commit(struct cxl_decoder *cxld) { struct cxl_port *port =3D to_cxl_port(cxld->dev.parent); struct cxl_hdm *cxlhdm =3D dev_get_drvdata(&port->dev); void __iomem *hdm =3D cxlhdm->regs.hdm_decoder; int id =3D cxld->id, rc; - u64 base, size; - u32 ctrl; =20 if (cxld->flags & CXL_DECODER_F_ENABLE) return 0; @@ -803,39 +842,7 @@ static int cxl_decoder_commit(struct cxl_decoder *cxld) } =20 down_read(&cxl_dpa_rwsem); - /* common decoder settings */ - ctrl =3D readl(hdm + CXL_HDM_DECODER0_CTRL_OFFSET(cxld->id)); - cxld_set_interleave(cxld, &ctrl); - cxld_set_type(cxld, &ctrl); - base =3D cxld->hpa_range.start; - size =3D range_len(&cxld->hpa_range); - - writel(upper_32_bits(base), hdm + CXL_HDM_DECODER0_BASE_HIGH_OFFSET(id)); - writel(lower_32_bits(base), hdm + CXL_HDM_DECODER0_BASE_LOW_OFFSET(id)); - writel(upper_32_bits(size), hdm + CXL_HDM_DECODER0_SIZE_HIGH_OFFSET(id)); - writel(lower_32_bits(size), hdm + CXL_HDM_DECODER0_SIZE_LOW_OFFSET(id)); - - if (is_switch_decoder(&cxld->dev)) { - struct cxl_switch_decoder *cxlsd =3D - to_cxl_switch_decoder(&cxld->dev); - void __iomem *tl_hi =3D hdm + CXL_HDM_DECODER0_TL_HIGH(id); - void __iomem *tl_lo =3D hdm + CXL_HDM_DECODER0_TL_LOW(id); - u64 targets; - - cxlsd_set_targets(cxlsd, &targets); - writel(upper_32_bits(targets), tl_hi); - writel(lower_32_bits(targets), tl_lo); - } else { - struct cxl_endpoint_decoder *cxled =3D - to_cxl_endpoint_decoder(&cxld->dev); - void __iomem *sk_hi =3D hdm + CXL_HDM_DECODER0_SKIP_HIGH(id); - void __iomem *sk_lo =3D hdm + CXL_HDM_DECODER0_SKIP_LOW(id); - - writel(upper_32_bits(cxled->skip), sk_hi); - writel(lower_32_bits(cxled->skip), sk_lo); - } - - writel(ctrl, hdm + CXL_HDM_DECODER0_CTRL_OFFSET(id)); + setup_hw_decoder(cxld, hdm); up_read(&cxl_dpa_rwsem); =20 port->commit_end++; --=20 2.49.0 From nobody Wed Dec 17 04:17:09 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.11]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 40963220F5F; Wed, 7 May 2025 07:23:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=198.175.65.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746602614; cv=fail; b=fzDQL76hVAxoykRC72XxGuCgP96Jkfk2a+s4wUVyMEl7ajRCCQaOCB9ptr6N5TzXx41UtX/hk6yp9yACsUtb3+nseEBlVE2XJcXJD88H+gpJbA2pb1xfn5/80TBvH7KWhNqC1ppEktlA0mtHwmOIl9OD8wKES4p8RTRjkZPRSLM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746602614; c=relaxed/simple; bh=2wXXUHsGQ6RgiF5wfVmJ76emVVN8Oiw5VEJbc+4ohRM=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=nZeR/PRhKLdaQviPJi1/3ZOexaBImIvddXmynAOAFT5g6AmZblkmBFCWdOt0j3HqBRMLWx76A0uWidvlDzYeU/HoatAQTkLCdQ0ShqbZZZfyNNv+CdzJia3dkVxwKEPt+AOuey385AagXTXXtDAfjjns+pDjBqp63OKw/xZLGyw= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=L9mehkfC; arc=fail smtp.client-ip=198.175.65.11 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="L9mehkfC" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1746602613; x=1778138613; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=2wXXUHsGQ6RgiF5wfVmJ76emVVN8Oiw5VEJbc+4ohRM=; b=L9mehkfCed+gMlO6Yulm75hO02LVQiv4RJUFyLv/i0bkFDhnWU5+IKcn UPDUR04MVChHkHU58Ri0+JVxIM3UxaCn/Gqo+73QRzLqaeBwESIFayrM+ qsIz6qLbTKVc067OFfrGfdnNLUyf175CFCCTtRI54f0McWqMJHEQ4aizM 3T/9bY/TNTPFHy/Tybf0Ozl+fXTr5/yB2UM7dslssoDisRxvcJ6+0Ulm1 EfjtR6VO/wivuNs25ypDyRQdZfCdzbW9dBHmn57WaBM9hC7HnRC976BLy kxM+7hxZnRhw5RDzpg8GBoXFlByHFv/ID7K1l5LH9KQxzd907DKPeM+T+ Q==; X-CSE-ConnectionGUID: DQ8ZEwwER6WuhcW/181dcg== X-CSE-MsgGUID: N+Nm82pFRJ+4Z0BNDbTreA== X-IronPort-AV: E=McAfee;i="6700,10204,11425"; a="58510845" X-IronPort-AV: E=Sophos;i="6.15,268,1739865600"; d="scan'208";a="58510845" Received: from orviesa003.jf.intel.com ([10.64.159.143]) by orvoesa103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 May 2025 00:23:28 -0700 X-CSE-ConnectionGUID: Q7RrXBRyRPW3t5XZ6F7OEA== X-CSE-MsgGUID: Ob2ZEsvVRpGvjdPtxTmkHg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.15,268,1739865600"; d="scan'208";a="140603582" Received: from orsmsx903.amr.corp.intel.com ([10.22.229.25]) by orviesa003.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 May 2025 00:23:27 -0700 Received: from ORSMSX901.amr.corp.intel.com (10.22.229.23) by ORSMSX903.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Wed, 7 May 2025 00:23:27 -0700 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by ORSMSX901.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14 via Frontend Transport; Wed, 7 May 2025 00:23:27 -0700 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.45) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.44; Wed, 7 May 2025 00:22:35 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=hkgart5mB5UxL6EQGrUvRSWXnU7HtMorwQ1KQLvlDddH9pHso65HIE7CJmLTtd1QPgef2cmbWlFOJ7BgNmzjAhLixlppFYPE4EymglQhHyCtDKkf5rFaDgJ67iYUMXz5Rog3i2DArngZf7fw1B1vdoPCswmqr6XWJLTskBui7asZlgjN6nwM0EkB7KW9ukfiUX9QqodZqBYEV5e/trM0cQrFOOcQjgRAmSkwFE9Cjf1qnqGPFFYyknV5tT3g3uQT4rk5iywqcYC0Xm36/8vR0M3IycoQpWDHl7wsLQvqndHdhBcZL5AfQZbkD81fUcBrplvJCPTl0MY0//3V6v5Ceg== 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=YVsRmVuMscAXuUwAnbvzxrgxNiChXh66kjGa3pMK+fw=; b=sZAzcjTWFParrkRUVGZXNpngbU442iZfAEeskqU441qwZ5ba7Wol5UeL4R25gbirGoJ+8coxRc6z5x5xi+sDPOFX43XJKJbYm4cov0LwL34YgAVK7a9a7R4pLzQRLU9u7nhZdjrYBAqJUl3IJWASfT/fxzhbBf3/bDuTtn/PHSEmz9VKXtKcLMJ2iAYRQkyCQMqKjTYCY17vgpDG1VGwJkaS3n0gw2HshqXU2jAoFjDWEGhhu7hsyo+QrXoiaX4qVyF4vIuWipmXEy9Czol9VIfVFOF1+6lp8BnNLSX6JOcwNIDcHoVSICvaxQ6sb+/jw5n9wFSO6gzo7PtMfKDAuA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from PH8PR11MB8107.namprd11.prod.outlook.com (2603:10b6:510:256::6) by SJ0PR11MB8270.namprd11.prod.outlook.com (2603:10b6:a03:479::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8699.21; Wed, 7 May 2025 07:21:51 +0000 Received: from PH8PR11MB8107.namprd11.prod.outlook.com ([fe80::6b05:74cf:a304:ecd8]) by PH8PR11MB8107.namprd11.prod.outlook.com ([fe80::6b05:74cf:a304:ecd8%4]) with mapi id 15.20.8699.022; Wed, 7 May 2025 07:21:51 +0000 From: Dan Williams To: CC: , Davidlohr Bueso , Jonathan Cameron , Dave Jiang , Alison Schofield , "Vishal Verma" , Ira Weiny Subject: [PATCH 3/7] cxl/decoder: Drop pointless locking Date: Wed, 7 May 2025 00:21:41 -0700 Message-ID: <20250507072145.3614298-4-dan.j.williams@intel.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250507072145.3614298-1-dan.j.williams@intel.com> References: <20250507072145.3614298-1-dan.j.williams@intel.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MW4PR04CA0313.namprd04.prod.outlook.com (2603:10b6:303:82::18) To PH8PR11MB8107.namprd11.prod.outlook.com (2603:10b6:510:256::6) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PH8PR11MB8107:EE_|SJ0PR11MB8270:EE_ X-MS-Office365-Filtering-Correlation-Id: aee9baf3-2b62-4f18-dcf3-08dd8d37d658 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|366016|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?APWH3IxmkY046xu1fM7HHtIbLLuEdba09UxuX0Ltk6UrwpZGazjp16XpaaJN?= =?us-ascii?Q?9zF09INyuv3Va8Osv97qeTH21bMx4XxKxuYpYbCd0LFQU0B9NhkM/e6pts4E?= =?us-ascii?Q?NSzIt4K1DCC+R3JaMRe69HWP4LJ7cC/Hyo1Es7k/hvZXI2SzN9eucbEVJ/oS?= =?us-ascii?Q?O9WrWBeg8igW49uWspsIfi2Yj0mB+2NOQ1CKHj6tndCdXunY0bmpOw1O7vwy?= =?us-ascii?Q?OE7p1mjV8yoHveoNEQJxnwH8gxAT49SIdcquu3b1i/KACbZvKApnubC9c/c8?= =?us-ascii?Q?KsrAC0qm0vKNd+uXjJAPE3eVhAH843ld8h3kh8S+gpGLub5vI1VMzy+ejBOH?= =?us-ascii?Q?SkOJsl7ofa6Q+yBkhEzxuz8CNhiaEMPMsWs9MIoBsCQAe+T2NmXLUqxAowYB?= =?us-ascii?Q?xE7XMWUorx6tDr9smEtX+10Wq1uv/OCPeu6WaZrs+kCUH2r8hJ5/vaS8Ge1f?= =?us-ascii?Q?lxAdPHPRsY2oE6mF7bBFpOs9XIQzUZmwqByYbZ4/55OBE79RwCD4eYPbjxq5?= =?us-ascii?Q?f16KUk4MxrmwHiWXu9RtUtUqMF+gymTLr9R+cPv0S6xXgmHhqjr0SkZVF/lO?= =?us-ascii?Q?JxI+0xiFvSmqH4bwGe06vvRIuCiwc+TG+LsaDGMnZWZaSZXWKSfY9K11i56H?= =?us-ascii?Q?3KH3ogvE+xBsVfeMGPTKHHV0vW3K8yGMiAvbvRcT2sEpVvv+PMdPPMSWeUIL?= =?us-ascii?Q?B5YhQxBjgqQHA+qJWNyPIou7e1LtnFB4mkVaY9fus+TYTIahF4SElJD2U/8u?= =?us-ascii?Q?AMcaupzBC2i9bSRzo/Szx6PHG57GYwZuzOEq6Tid2SKJondTmNugfYi6HxjP?= =?us-ascii?Q?mH6zsql9rMdaumsBAAB92ntBOz38m1JWhVs4uaGZFNRVlqkPf+Xxn1zv5gmk?= =?us-ascii?Q?Ea8DsOgCqyNTxbKeOBbgaEdwnDtKWtoQrSRpadZ4G8Yw5qwhQgpkrCmzgMg8?= =?us-ascii?Q?MSXcWzdjfsgEz3ldTGfFSXj1mFfUe9yL4WAiMU5W7qIQvy9O5w7mG8EB3lzP?= =?us-ascii?Q?Fw2lgatfHyxfFBQRBDv6Z9FHCkysgzFdJwrPAVBh3qlI3bz3hDiZZMxKD4iy?= =?us-ascii?Q?uMIPvsRnzFlg/efY3F57ogaVhXJerZk6S0GygTME8fWRQ4oC67m65J0heuh1?= =?us-ascii?Q?Zn6EhzkFcDD7Ui5+TxO6hHHgpx1nvQLmd+2lEwDx+PYuW4RohgQXDrCZFHRW?= =?us-ascii?Q?7xm6Jjk9mi3Vie4tEkhq1QBDe95uxgb2+QcoUMOwFnvEWMdX9ATVXFujb86l?= =?us-ascii?Q?Jufy+OgT/tCg4YbnyeLOoEx+G2BvWXsr9ZwlomFUZ+RHzrExbgRkZICQGBhU?= =?us-ascii?Q?A9J9j/Tqey6GcXh5NzdsyThPqDffGxEeGTJI3HFReCHkOm7sq/N91LKh4tp7?= =?us-ascii?Q?HWwQZaEf+Ock030vLz/v4y8Mw5TRjvtFbf+La1fYKjqZc9I9f3di71a5Uxls?= =?us-ascii?Q?Dy5KDRSntJA=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH8PR11MB8107.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?vHcLG4rOpt8UDq7e439hkYS8j7LQKngl++KZCmlz42+2XhuRssApgIllzLkq?= =?us-ascii?Q?ivximfhshnriYeNmorevwgnTEo504Jawy8JLu1ykUsvZe7FUNurafRpBr2BY?= =?us-ascii?Q?bOUtXNj5hWowSsDjf3OzkE/svjldUPS3zQwgWlITpg5QW3c+gqHo05YvS1Qy?= =?us-ascii?Q?or4BHRiymPl8laZiqNmHaY1pWWgYlpq/Qb3XpjYCcoNp3E+fW1WeUOyBcHHG?= =?us-ascii?Q?iNWbUF2dv6K4qeO7K612j2bgWIN1kJB+LD4XosFPwnCi884lHfYkrup27ytc?= =?us-ascii?Q?ylM+HsfTzUr5JNHoTcGNCmm6zwBQVVL1h5U8MOZ3lW51g9cKw5h17rzab1SN?= =?us-ascii?Q?TLGdScAqvhnT7vvo3vVGDlfzSOHXRwvdqW3MYdC1EaXsAFSV2P8cOMnp5Mt2?= =?us-ascii?Q?cIX1YBQpVevOFfuc5wJFr2AbmavHydGwqlD1FEG6e/HBwLk0cPIUDfCuNHVQ?= =?us-ascii?Q?BpsFJe7jwznyIkBv7VEcmuzG5jmFVTAvWMeMxvozzOWs4TAhiG3pMd0zLS+g?= =?us-ascii?Q?JemQX92OZl6kFudNBQmZkLs+p23LtFgdyIG/hVdO9adDKwyYS3JUH7cQytTb?= =?us-ascii?Q?zIbFau7GyIwCQboTkmuVXbmd+YvWDAIztlf3dIeqOh50YwEGow3rxutivjGX?= =?us-ascii?Q?yEUnPdORN9jH7PnfNW0vD+tWFfNgItTL0xt/UNTynGcGe+FWdNaTo6pZo3lZ?= =?us-ascii?Q?NhoRFj5F8xP6WyhRKwPtJMEyEAzflu7hA9dxLGFfhvZL4bnVD6e+RVR+6mVB?= =?us-ascii?Q?hzvamCyYbQsrgrpF79mXj4M5HUIQCh4ZR0F0wAcFcszti0mox7Y+F2woa8H+?= =?us-ascii?Q?EmW1U5RBqKD3Z6Uzl4/qePqQIhMYQxBNY+hzI/J2omW33D/uKhZOl3rpfRog?= =?us-ascii?Q?KUft5pzplyfQJPoxDX/gIkXuLST7WuJ+lxw2Eo7WYhxKOu2pVx2pXm4xolo3?= =?us-ascii?Q?eXQ13t2TfTq44gVYF8PgHaQg4DCdQ7AX1LeSxCG6xBD5HMdXkpq26GI+and6?= =?us-ascii?Q?0aRaWr62hhuGt3VBwqteDwD+m7SwbrSnI00ent71TavLMXews9iatti8emW+?= =?us-ascii?Q?9ULAJV2Vqe+Dp0XPx0bP22U9RMbeMSN3Ieg0/1kcIPwe4qb+IrFBUfuIRhNd?= =?us-ascii?Q?D2oES692KlH3SCN+jZUjiJCxxafwYCiofXPFHRs2kgML97A/usDvA+4/JiuS?= =?us-ascii?Q?mvSQTfbhgEhj+Iplga9pzR1Yf2e37Rvy5egliSCSf+Pxzuj/PP7dM+6Oi/27?= =?us-ascii?Q?5vEz10ouCY4jzJeeOJPpwLjx1N41JHhWVJXdO01dQgBDH0Z47WB5zRgV9kUR?= =?us-ascii?Q?fODjcpcq+WCoAhVcpr18+3z0EcRpAeKAJfrU99941vk2qe9KUEY/Z6Kb0k7H?= =?us-ascii?Q?FnZmvRzsTwNtsxRXe6e9viQKdLyAw3dZD7ncwT+aNf65WtbENptQRQZ4JFMc?= =?us-ascii?Q?i7yYknhBqQRi9pIy0cyEF2KCe9Fx7gdS0JdzaKwTu2A/dAD8fMwaEElbjR3t?= =?us-ascii?Q?joFPbOO1xUQY+ARBfARV4zuUUv1bKVhefHakbj8y4Xr2QRz4XduR6Ue4tHMb?= =?us-ascii?Q?RUrsmB+XsqhjMY/L34Cx7XPUMwselFFWWyb/UKxGsQy+ofyyKSbZ3Ell27Ti?= =?us-ascii?Q?Gg=3D=3D?= X-MS-Exchange-CrossTenant-Network-Message-Id: aee9baf3-2b62-4f18-dcf3-08dd8d37d658 X-MS-Exchange-CrossTenant-AuthSource: PH8PR11MB8107.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 May 2025 07:21:51.7090 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 5vXpMVgDoACbLDhNfduX7W/rox+Ne+7d/Ouc85ieUfEp2uES/L5hhZyL5Ol1rjPp7hgESiU0X0ISFaPn/PDLRVCaojlXEPFraBBTMf2fes8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR11MB8270 X-OriginatorOrg: intel.com Content-Type: text/plain; charset="utf-8" cxl_dpa_rwsem coordinates changes to dpa allocation settings for a given decoder. cxl_decoder_reset() has no need for a consistent snapshot of the dpa settings since it is merely clearing out whatever was there previously. Otherwise, cxl_region_rwsem protects against 'reset' racing 'setup'. In preparationg for converting to rw_semaphore_acquire semantics, drop this locking. Cc: Davidlohr Bueso Cc: Jonathan Cameron Cc: Dave Jiang Cc: Alison Schofield Cc: Vishal Verma Cc: Ira Weiny Signed-off-by: Dan Williams --- drivers/cxl/core/hdm.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/drivers/cxl/core/hdm.c b/drivers/cxl/core/hdm.c index 418539e859e3..1c195f495a59 100644 --- a/drivers/cxl/core/hdm.c +++ b/drivers/cxl/core/hdm.c @@ -913,7 +913,6 @@ static void cxl_decoder_reset(struct cxl_decoder *cxld) "%s: out of order reset, expected decoder%d.%d\n", dev_name(&cxld->dev), port->id, port->commit_end); =20 - down_read(&cxl_dpa_rwsem); ctrl =3D readl(hdm + CXL_HDM_DECODER0_CTRL_OFFSET(id)); ctrl &=3D ~CXL_HDM_DECODER0_CTRL_COMMIT; writel(ctrl, hdm + CXL_HDM_DECODER0_CTRL_OFFSET(id)); @@ -922,7 +921,6 @@ static void cxl_decoder_reset(struct cxl_decoder *cxld) writel(0, hdm + CXL_HDM_DECODER0_SIZE_LOW_OFFSET(id)); writel(0, hdm + CXL_HDM_DECODER0_BASE_HIGH_OFFSET(id)); writel(0, hdm + CXL_HDM_DECODER0_BASE_LOW_OFFSET(id)); - up_read(&cxl_dpa_rwsem); =20 cxld->flags &=3D ~CXL_DECODER_F_ENABLE; =20 --=20 2.49.0 From nobody Wed Dec 17 04:17:09 2025 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.15]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C50B9220F58; Wed, 7 May 2025 07:23:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=192.198.163.15 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746602613; cv=fail; b=foQPx3R2DiCgISvu1MEB3HHKE25KJwmMpCmx5Q1Tue/8sm/DBbarnnam5R6+2sFrAqI4wyiqquHld4BaymJDQkp1F2h1utLHl+6x1m4myNUriY8vZzhYK4jtxLpulxRZzAff0u/KJLpGhnOKFK4/qgVdefzZIYgzGlE/A4L4LPc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746602613; c=relaxed/simple; bh=o2LKMhI9P3K65t/zCxV5/zl8SG6L/mrCv9b9IdeYFqg=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=N1xFqvcVDbIb+/3K2Uq7tpL62P1lZLZoSjfv+52CI+KZtdRuLUPrENpEWWFImJgMX1YgWNZwTQFdahLH4/957lKFU46BSQ40Q1I/yKRQDP7m8uRW+BIHzahuvnOPNaG7c/v3xrplx0SmPG15eATBSgYgOcCcb29Jb4vuWxQmcsA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=Xzb33Dn1; arc=fail smtp.client-ip=192.198.163.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="Xzb33Dn1" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1746602612; x=1778138612; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=o2LKMhI9P3K65t/zCxV5/zl8SG6L/mrCv9b9IdeYFqg=; b=Xzb33Dn1+6z7NEkbHk2UTlGMZy4Uz9STKev/WqqHT1sT+HyUQtwV1gRt NI1WZrtfmwqtXqBPY4f1ofv3qFH8ixCKWExVjaJZcQvX7aXH5HMYRGUar r97G7lkO2E/to3AYfgRDgRrDMJaoNpt2yhC206k7OiteFnzgN923FZtGQ 4M31Mp0J78W1TgsoWtssU61fwIIkyzx78zf2KHRp1iOl+kmF/wU8CLYwD aedRK2rMwT0iWkVix7BIIT5RkZsN/98B1G6+sivaJeDKADUocP+xOTPvo 2MlLzlqCoVjFAo0nTwPgS7HjkQ8wVggQOYHUcVQBEEUK6fK9VJeZAbXxM Q==; X-CSE-ConnectionGUID: 6CEsYyYjTCyC7++V5JlOSw== X-CSE-MsgGUID: YXu+jki2SLe/qM7MUskdmw== X-IronPort-AV: E=McAfee;i="6700,10204,11425"; a="48450243" X-IronPort-AV: E=Sophos;i="6.15,268,1739865600"; d="scan'208";a="48450243" Received: from orviesa001.jf.intel.com ([10.64.159.141]) by fmvoesa109.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 May 2025 00:23:28 -0700 X-CSE-ConnectionGUID: 7aVrcu0dRPmS+STTDBiXBQ== X-CSE-MsgGUID: zf8rWGuyQnqNdzXEauNUWA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.15,268,1739865600"; d="scan'208";a="173062302" Received: from orsmsx902.amr.corp.intel.com ([10.22.229.24]) by orviesa001.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 May 2025 00:23:26 -0700 Received: from ORSMSX901.amr.corp.intel.com (10.22.229.23) by ORSMSX902.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Wed, 7 May 2025 00:23:26 -0700 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by ORSMSX901.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14 via Frontend Transport; Wed, 7 May 2025 00:23:26 -0700 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.45) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.44; Wed, 7 May 2025 00:22:34 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tZewkaJuHN8Cy+k28nZM3r0fvArJh2LxHbOJx2lflBQZvIZxIqOCWrNCv3+mAHlSB9WXiXHqs2qPKCp0GsQqbl64cC7kKGoSHiWE+RCUwHjFXwY3h9HNAdM2k0SdPtj+CHuipFag0iLcX7kaYy5EsmmnFCt2GVndvGvxOEUlxNgaslEvlX0ZdF2IXRketqPIdLNkh8tllwIRqETovt8P0EUFW2SQSCnHdVowlTvk3etU8hrkSx1H9bf7/cKTu2vfCqJq00ICcZxFhQ8yby7Cg3Jm9aHaxtcgi7GdPjjD0hKvZ5a09p/c8UsspgqGRPEn3DkFrgDyuTS/YcNzYGD73g== 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=8nU5ZWCDfqo+khgB5n6shVGcRqm5omtjkd03su2sTlA=; b=cc6TJOBFSFiOty4aWAv3LSnT9LfgA4S9IaawTLebdbHF0hUM5AUMnHny8cf8RveFUa0V2FT3SKf9gfq1aT89Wg8jvnpkxLPv1e4pPxt8AjzM7e/x8vXumwf9R1XhLXBRVDlg0z2JF9crP+oywrRC2j5e1JXoTgdHh3IOeHQCOsqqx5RXnXOBo5myX9Nh+pgz80y5Lg2B3hPeESmRMFvE/crtZK9Pgo/XYVDv2nbMcDvhtVWJCrNLhkNoj0irBKFc1bShmDX1yaMNyCt6h2sKkPDxNB/jSPraPBXPKQhkD7wfQrzp/VJsEd72v1/vggAfVnPtFXJRKl86l5tc3UGvAg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from PH8PR11MB8107.namprd11.prod.outlook.com (2603:10b6:510:256::6) by SJ0PR11MB8270.namprd11.prod.outlook.com (2603:10b6:a03:479::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8699.21; Wed, 7 May 2025 07:21:52 +0000 Received: from PH8PR11MB8107.namprd11.prod.outlook.com ([fe80::6b05:74cf:a304:ecd8]) by PH8PR11MB8107.namprd11.prod.outlook.com ([fe80::6b05:74cf:a304:ecd8%4]) with mapi id 15.20.8699.022; Wed, 7 May 2025 07:21:52 +0000 From: Dan Williams To: CC: , Davidlohr Bueso , Jonathan Cameron , Dave Jiang , Alison Schofield , "Vishal Verma" , Ira Weiny Subject: [PATCH 4/7] cxl/region: Split commit_store() into __commit() and queue_reset() helpers Date: Wed, 7 May 2025 00:21:42 -0700 Message-ID: <20250507072145.3614298-5-dan.j.williams@intel.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250507072145.3614298-1-dan.j.williams@intel.com> References: <20250507072145.3614298-1-dan.j.williams@intel.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MW4PR04CA0313.namprd04.prod.outlook.com (2603:10b6:303:82::18) To PH8PR11MB8107.namprd11.prod.outlook.com (2603:10b6:510:256::6) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PH8PR11MB8107:EE_|SJ0PR11MB8270:EE_ X-MS-Office365-Filtering-Correlation-Id: 92a575b8-24b2-46a7-ea2e-08dd8d37d6e7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|366016|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?0YuL+kYZm4NffAvENRDszNbMmcJeLRWxNmQoAciKeclEG9SvFjimGZdQ/wpk?= =?us-ascii?Q?OlYgOF5MNW57/+2K93LKuyzGw8tTxwLemPIzB0B/+uihK9xrl+k8OfNF9cln?= =?us-ascii?Q?GCkHm5Zj+U8gqwHZ4k7mJ7NuVEjne+1rD+kWRQ9U66B2GkO8XOGS2yN71683?= =?us-ascii?Q?ZJU2qe5IZlK4HhVOiTI6Id66AjjlyYLg9p3sNV7LVdvqoW00+xRSVWTEFZ8+?= =?us-ascii?Q?f58OYWLjVv+djWmz1LcqhWYh5wT8JuMJXdYPIR1QRnEds2luD6h2J0ftRcUk?= =?us-ascii?Q?yml3+djJCTjsmVwRw7YVUeMazBvEjZTJnnchLFIRttcnyyW1r0vMPN6O+0lF?= =?us-ascii?Q?I1EmMoa2RQTFkLwKnuZrG8rH5qt0cIWneZ4k61Wu+FIAejmognnqmFUX5/v3?= =?us-ascii?Q?DoLzlG7xdFeLwh4lCtPDeda/UHgZMKNLBVHvFIn+WxpicSdEiafU0ed7LnLG?= =?us-ascii?Q?o5HhDqH83kzuyjYPIlV7qjVra2lBUh96dnp0bqfXfcN0samv8zJ+cE0SI4Iv?= =?us-ascii?Q?I19SZKIAKhQFx6qH0fD53m4agF36xOWdRD/JGGV02jFQJLFMLmo4xWPoRGMA?= =?us-ascii?Q?gh0b1piMdfyE8N16/IGm1H81sN4vPcvK2e4WrHsc5AKafRSTlbVAHEelZ1gz?= =?us-ascii?Q?T2dkhyUxVwaPFVYPnsUld6JTIngxe+vsgOxWl2oIRzSBgznfge0im7Jcqcwb?= =?us-ascii?Q?ympuPrRh7xveCpAP2k2Tn98x1ihv8gAJGQFbaqxzv60PTPe8PWnbEolfPY+J?= =?us-ascii?Q?YpVy61HNUO9BPDuILiN70Re45q+tcO7fBm7DxJxo/0SoPUyZIPK/AGrMtJ1d?= =?us-ascii?Q?f08xR2+2x7cMqZyXa+vi7EZybI5aBVYtHRi5UQPZiaza6qehuagiyvFhFi5b?= =?us-ascii?Q?JltIBDCyhYYH0bX0uFBPPoQPXn82PvAS24gcy0aLp41xtvPFef3IajbiUyyr?= =?us-ascii?Q?n9JBNJqXrlOEvnxz77iQreSb4MzNfpAxe12oRKjX3KdKPzxY24iw6XzGugov?= =?us-ascii?Q?zaqjglhA+d4Y7Zj5McNjG11cNgzcWd2JtWgunOZC/joEcp9vIhnlQ9m96CzM?= =?us-ascii?Q?5PJEIAsSA521TzYUZBpeNIUBW28uDVrTwrqrZktKjjpVrw6o9cXN3YsHLXHN?= =?us-ascii?Q?YzIfkOEJkLJRjtLEV5m0a1ttcOht1mZfku9dHaY7VykNaloOlep2tIkYRwk8?= =?us-ascii?Q?PZnoAPXgM6EGLoDFJliG0Qq3WsMSdSfiCSP68zqzTMd1bJcSLaRQOysPGv3t?= =?us-ascii?Q?I6mFKPZelLA7EyB25m4hf2buy7lNIMbALqdtuEAy89AL9WqgMPRCmD2KFSPW?= =?us-ascii?Q?4b6DGQnzTUeKxLTSC9PD94/zE5Q3GAabwpUlmj/aBdoyARmLFS3AJuCfrVMi?= =?us-ascii?Q?2ogAG0xTXBwcOeObeEahM9Nuk74w2xAWObeLjLPmpng9Kf+ts4ElhGu3yhB7?= =?us-ascii?Q?rcKXfKyjlAs=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH8PR11MB8107.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ibIKBcUTq4WKdCxNyBx4lcVzs0OygwtdnvSSfXCd+OcG9V+mzNUpsFGpGr0P?= =?us-ascii?Q?aDRwYHbDxV6/mVxrbPiqbmebSHod266C3LZQ9guBGCNo5iLk1lkAskMk72IB?= =?us-ascii?Q?cafTiEt143MyOToXodSgESITxQgilLmhrSgSfEwVQpsbuLRgpKfn/Nedy7Mf?= =?us-ascii?Q?b762bm8ANghNqFBjVANxbvd6DnTbYCZoWPQ0fLgyt6EGdTU9mAZHBWG0NlYa?= =?us-ascii?Q?hMzlYEs/VELNRdwf0isBY1dLtfJguICiNX+I89mSTJRaVupqS0/oSUEAcxz0?= =?us-ascii?Q?APKKUWJAeEEElyaldAstt42Ujs/nKwZ1w0zOTaVN9FagZWYjA5Sobgsla7vQ?= =?us-ascii?Q?h8/WeriQlfWYhdv0FCyeVDXNFeCYaTXaGCQ+QLHMORcV/lpSMaeNzzRdj2TK?= =?us-ascii?Q?lSMLqvDq4Qg/kFBkv4VSW5sctF9VSr2sF/KsbbhCoTU0Qrw4+r8XQaoEMojw?= =?us-ascii?Q?0w8eufZz1vIBCENjp5RmbsgXHZeQmf79lwqo/9eCZWKU4Iy8T2p3avsUI+x1?= =?us-ascii?Q?otRPLSOzJc0Qj+1Dcz6iGIyG0ykl0M2TMktEP0YtdN7AZFJqLjA26xkHh8Uq?= =?us-ascii?Q?sddptNYVN2VQembOfE2Vpyc2ImLuPfuMzGhYEaU5bs34PcRBl2HK47LD1qyN?= =?us-ascii?Q?iIks6Ps+U4fdlyqbtrN0eywHNiWi+Ca3mFL4hxWPkw4PpT/suljnaAT0+qUm?= =?us-ascii?Q?4Y/slgT6RIYSEZFTQlytF0JOaLqQHaaCzky+QRmdhjTD0lwG0ZIzlUAMGBy1?= =?us-ascii?Q?cOnotNzHPcLZpk7C7Kmgv6azK2orb/Wlh8DiggiSTbnlcxSaa5sdFdVdza0W?= =?us-ascii?Q?PBAWmEP5CmpXNz33bh/0OyJ/bG4RG0XCzHSrCiRKHIdYfy9Pi4Xasgf1DPKw?= =?us-ascii?Q?mJZtktnjxLY9ycAMpuyXr7XFi69o+EXJ7v7olN19j8Bn0Lmh8733FWf2qOzI?= =?us-ascii?Q?nrtd57QbYr7ZQCdvRt4zDU5qsNSYJuwaGIvLDJqeYimVns92tt+1CpfPTLeT?= =?us-ascii?Q?vmFJJd39jHy9MlmMjvJtQAKFP6yrB70J9wWR487bUqF737hmyhF7kPfZOXvr?= =?us-ascii?Q?oDj5jw/KcltFsCaIdVHURcSm7hrv0WfaJSyxXcSlzwrNoDdBgyHI55JTub2i?= =?us-ascii?Q?t7wTZAp5f2/YL6o632XpbUSTaje5SRNWHOIv4/iJv6eDFtewJn6NFv946AkX?= =?us-ascii?Q?wwvU9UyrVGxtp4QjvXWCIDfdWrJLdgK0YXbbrGcn9DASZOuMZMlAHQ9Uc6fJ?= =?us-ascii?Q?oq6xbSSzKd1wYi+kCe7/kSdN5nIMyuOS2LqOUvsIk9sjevltijdJPZQ01j61?= =?us-ascii?Q?4OMSp3vcLKmEhuGgD1wP+psnIbqOgyhXoR9kERMNvVZAIjXhKVbJsgMgdGtB?= =?us-ascii?Q?mSVPVkBHl0boG5lBPS+lk6u+mI56hBW40EYmuWCq7l1eC/6EFLG82t2djZfD?= =?us-ascii?Q?HZdisLHdEsgMl9wSGRqEikcwWYgpiYSBPfzIuG4pJxAuoUNbrEONXObLdRPe?= =?us-ascii?Q?M5Iq0mX41U52mQ81itLEo9bzwBZgvK3Xi31ykXNEoJMrz+Do0owvDNbH3Z85?= =?us-ascii?Q?Hhq7MX5VDgh/OcXvD3z6gQZV1CponWwTZtsNK2mzvFzrj5MUGPuAmeutrrgq?= =?us-ascii?Q?RQ=3D=3D?= X-MS-Exchange-CrossTenant-Network-Message-Id: 92a575b8-24b2-46a7-ea2e-08dd8d37d6e7 X-MS-Exchange-CrossTenant-AuthSource: PH8PR11MB8107.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 May 2025 07:21:52.6041 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: f40Mi+BszTt0Hj1uHVsUDiqdKVCaBeCwqWb14cnaAiTsDRuPMsjvwAOP9rr62IGndeuszFc93svGRMpUMLtO94oQsbWfsdDgyF+JbUK8nVw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR11MB8270 X-OriginatorOrg: intel.com Content-Type: text/plain; charset="utf-8" The complexity of dropping the lock is removed in favor of splitting commit operations to a helper, and leaving all the complexities of "decommit" for commit_store() to coordinate the different locking contexts. The CPU cache-invalidation in the decommit path is solely handled now by cxl_region_decode_reset(). Previously the CPU caches were being needlessly flushed twice in the decommit path where the first flush had no guarantee that the memory would not be immediately re-dirtied. Cc: Davidlohr Bueso Cc: Jonathan Cameron Cc: Dave Jiang Cc: Alison Schofield Cc: Vishal Verma Cc: Ira Weiny Signed-off-by: Dan Williams --- drivers/cxl/core/region.c | 99 +++++++++++++++++++++++++++------------ 1 file changed, 70 insertions(+), 29 deletions(-) diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c index c3f4dc244df7..d52e98e2f7a3 100644 --- a/drivers/cxl/core/region.c +++ b/drivers/cxl/core/region.c @@ -350,30 +350,42 @@ static int cxl_region_decode_commit(struct cxl_region= *cxlr) return rc; } =20 -static ssize_t commit_store(struct device *dev, struct device_attribute *a= ttr, - const char *buf, size_t len) +static int queue_reset(struct cxl_region *cxlr) { - struct cxl_region *cxlr =3D to_cxl_region(dev); struct cxl_region_params *p =3D &cxlr->params; - bool commit; - ssize_t rc; + int rc; =20 - rc =3D kstrtobool(buf, &commit); + rc =3D down_write_killable(&cxl_region_rwsem); if (rc) return rc; =20 + /* Already in the requested state? */ + if (p->state < CXL_CONFIG_COMMIT) + goto out; + + p->state =3D CXL_CONFIG_RESET_PENDING; + +out: + up_write(&cxl_region_rwsem); + + return rc; +} + +static int __commit(struct cxl_region *cxlr) +{ + struct cxl_region_params *p =3D &cxlr->params; + int rc; + rc =3D down_write_killable(&cxl_region_rwsem); if (rc) return rc; =20 /* Already in the requested state? */ - if (commit && p->state >=3D CXL_CONFIG_COMMIT) - goto out; - if (!commit && p->state < CXL_CONFIG_COMMIT) + if (p->state >=3D CXL_CONFIG_COMMIT) goto out; =20 /* Not ready to commit? */ - if (commit && p->state < CXL_CONFIG_ACTIVE) { + if (p->state < CXL_CONFIG_ACTIVE) { rc =3D -ENXIO; goto out; } @@ -386,31 +398,60 @@ static ssize_t commit_store(struct device *dev, struc= t device_attribute *attr, if (rc) goto out; =20 - if (commit) { - rc =3D cxl_region_decode_commit(cxlr); - if (rc =3D=3D 0) - p->state =3D CXL_CONFIG_COMMIT; - } else { - p->state =3D CXL_CONFIG_RESET_PENDING; - up_write(&cxl_region_rwsem); - device_release_driver(&cxlr->dev); - down_write(&cxl_region_rwsem); - - /* - * The lock was dropped, so need to revalidate that the reset is - * still pending. - */ - if (p->state =3D=3D CXL_CONFIG_RESET_PENDING) { - cxl_region_decode_reset(cxlr, p->interleave_ways); - p->state =3D CXL_CONFIG_ACTIVE; - } - } + rc =3D cxl_region_decode_commit(cxlr); + if (rc =3D=3D 0) + p->state =3D CXL_CONFIG_COMMIT; =20 out: up_write(&cxl_region_rwsem); =20 + return rc; +} + +static ssize_t commit_store(struct device *dev, struct device_attribute *a= ttr, + const char *buf, size_t len) +{ + struct cxl_region *cxlr =3D to_cxl_region(dev); + struct cxl_region_params *p =3D &cxlr->params; + bool commit; + ssize_t rc; + + rc =3D kstrtobool(buf, &commit); if (rc) return rc; + + if (commit) { + rc =3D __commit(cxlr); + if (rc) + return rc; + return len; + } + + rc =3D queue_reset(cxlr); + if (rc) + return rc; + + /* + * Unmap the region and depend the reset-pending state to ensure + * it does not go active again until post reset + */ + device_release_driver(&cxlr->dev); + + /* + * With the reset pending take cxl_region_rwsem unconditionally + * to ensure the reset gets handled before returning. + */ + guard(rwsem_write)(&cxl_region_rwsem); + + /* + * Revalidate that the reset is still pending in case another + * thread already handled this reset. + */ + if (p->state =3D=3D CXL_CONFIG_RESET_PENDING) { + cxl_region_decode_reset(cxlr, p->interleave_ways); + p->state =3D CXL_CONFIG_ACTIVE; + } + return len; } =20 --=20 2.49.0 From nobody Wed Dec 17 04:17:09 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.11]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D990221D3DF; Wed, 7 May 2025 07:23:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=198.175.65.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746602614; cv=fail; b=MN8LGjVaGaxtwXLqcZEWeaNvtq7Hs31BqPltj0qjxkSg3DVYZd2omdQGvzXLpysgJhzTjKBXlVx3eSkM/iO7t6EoreLIm/Ei5fIwEDU5V/K82Ft682AtL6l/R5Kjc0BFaw5EEJN3emKB0Bmm6PuElPwNiTYJlRkEu3MI5flnx+M= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746602614; c=relaxed/simple; bh=RaY/4YopvKVewY1MJ7evHlw3H9u+09MEzGeWBWKrXbY=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=ixwaiZpoSLzQnPNedyqJQyWne/3H2GM7rNV7fFqJ+gmI9Iw+3i481ynyXEwNnS07Yw5Bkzd7CpAYFxhw2qq1xLOfvILoU682uut54BbCQ3iJxuohzwsbeepbhNf5A08oNZ90mZOgEvHRt6f10ubJiViWEJZozaC1qwcggHtikfg= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=JbByc1Vt; arc=fail smtp.client-ip=198.175.65.11 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="JbByc1Vt" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1746602613; x=1778138613; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=RaY/4YopvKVewY1MJ7evHlw3H9u+09MEzGeWBWKrXbY=; b=JbByc1Vtdt9aODJ3Cs53tQB27BF4Vz/9BgjrnkW/rxeJXT9PoK36lq7N ExTAjG/xEyR7FOnWuwZlrBd5lzqnJjIkn6gqIvQbXC1LUFhNI9CVr9VJR +x6shl7NpbwjV+XMQoaGbL2D4baXHed49/HROw2ORuOxfQ2f+WE9wQH4e Cz4iEpxDmbU0SWjcjf0nYuplbUXpehnSfdK0AVvw8N01iqiXJpOIpmR3R cAPqAZpUeuXEpYKPDsO/dbqUYgK2o7YOmifIZdlRQuMI+EbDQhLdKjc3Z pPVAINKaXGSvbMYTTethlfo3eNAolM8DQ/x+GihIUQQxR2FHWsX9z8MLH g==; X-CSE-ConnectionGUID: STbDlFsbTzuqe7AAQn6d5g== X-CSE-MsgGUID: /r8hdUG2RdSaG5fB27GAug== X-IronPort-AV: E=McAfee;i="6700,10204,11425"; a="58510849" X-IronPort-AV: E=Sophos;i="6.15,268,1739865600"; d="scan'208";a="58510849" Received: from orviesa003.jf.intel.com ([10.64.159.143]) by orvoesa103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 May 2025 00:23:29 -0700 X-CSE-ConnectionGUID: +QFAPvEoRHmpLoaGUlVxQw== X-CSE-MsgGUID: VFkhxBdpQbSZEaEjMxma+A== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.15,268,1739865600"; d="scan'208";a="140603589" Received: from orsmsx903.amr.corp.intel.com ([10.22.229.25]) by orviesa003.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 May 2025 00:23:28 -0700 Received: from ORSMSX901.amr.corp.intel.com (10.22.229.23) by ORSMSX903.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Wed, 7 May 2025 00:23:27 -0700 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by ORSMSX901.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14 via Frontend Transport; Wed, 7 May 2025 00:23:27 -0700 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.45) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.44; Wed, 7 May 2025 00:22:35 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=EnH59RHtQ1KxqUrG14eWHKZN+Hsxw3o7peBcWu8ND4CF9C1V3ODO0bUDE0FxHjPD0o5H9/04xJKGZ5psOBuCfZzY+oSJcX+9kBc7+Py1WOZxeERhzcLUmRi6IWpk/pS0mfzhxUkxAY/3HONlORkELgv/u0pWDlRDSHpbylfenlvRIN/RKPhpxGe8luVEpDrW3+wfNTB2VhZdnBLaNDZ/H/SAcVJw0YS5BjiGL7U850lHLn9ixO+XCA2D98x9lLqNOid//lcgDSJ+42qGdlgvPkm6wZlYcz0S9E82mCGXEqVmhaz9vRUF3PHUlIApU0UArVPpUN/UlinoyW/LUEGZyA== 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=AAVbswtfvJJ3LD1s2j1n4TNxkKYSvT9wKY8XwxIaNRE=; b=zQDiUW67XqjTM72hRhcqaa1BpCfGiIk//2ynYG/AJM204bKJ5xU9rNwBkP1080UjX1x5nEEWbV6Zcq+W+aAWObmRHwHo1ttz3212eYLtxdVcvXzvCAHmpr72ycH77AedKNY/dH9u0tgGsbb/becDfzlbYM9+Mv7uiWcRxPNub2aTtRkUZJEjxqwLMo7a/JAUytADVbXHWGHQcL6WMpDHA6uI9MUGJh3G4+/JjGR4nHa9+bCoyoD0Ka0DkhwFwazm4nkhqPfPCzJZpXwmMcPQW/PtC1kuhjgAZ09BYPRhAa1JuJYR7RUG062HtgdV5MBWzCNDFnCMqIVdgT5dSCdprw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from PH8PR11MB8107.namprd11.prod.outlook.com (2603:10b6:510:256::6) by SJ0PR11MB8270.namprd11.prod.outlook.com (2603:10b6:a03:479::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8699.21; Wed, 7 May 2025 07:21:53 +0000 Received: from PH8PR11MB8107.namprd11.prod.outlook.com ([fe80::6b05:74cf:a304:ecd8]) by PH8PR11MB8107.namprd11.prod.outlook.com ([fe80::6b05:74cf:a304:ecd8%4]) with mapi id 15.20.8699.022; Wed, 7 May 2025 07:21:53 +0000 From: Dan Williams To: CC: , Davidlohr Bueso , Jonathan Cameron , Dave Jiang , Alison Schofield , "Vishal Verma" , Ira Weiny Subject: [PATCH 5/7] cxl/region: Move ready-to-probe state check to a helper Date: Wed, 7 May 2025 00:21:43 -0700 Message-ID: <20250507072145.3614298-6-dan.j.williams@intel.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250507072145.3614298-1-dan.j.williams@intel.com> References: <20250507072145.3614298-1-dan.j.williams@intel.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MW4PR04CA0313.namprd04.prod.outlook.com (2603:10b6:303:82::18) To PH8PR11MB8107.namprd11.prod.outlook.com (2603:10b6:510:256::6) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PH8PR11MB8107:EE_|SJ0PR11MB8270:EE_ X-MS-Office365-Filtering-Correlation-Id: 80bdfc86-e3bb-4ba9-17dd-08dd8d37d771 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|366016|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?MgbUAbAVH6C1m+hAdw3HO8ejfqVn1f03etDrNnnG9Gj3BmxDLZ+e5eGQRcqU?= =?us-ascii?Q?QFCTS0sjFIPuTge/6EJR6bhM9E1pTg2azrtvZlc8ZC6uBxFTTGYggeT/5+v1?= =?us-ascii?Q?UAurTu+H9McGhGvcWJ8s18o1LfXuSOy3vUW3X7vFItKjsAodslcOLRPAjNqO?= =?us-ascii?Q?/Lm4lAbTj/jyQvRLvvOHeg7dN/f6FhgBvMpzHiqxLDtjY4at1yLkiur+VU99?= =?us-ascii?Q?WUYUncWyq2b9OmfyYXtf16AH4AQDuNAgfI/J7v8wadvxpGw3l7rsExRQBaSv?= =?us-ascii?Q?9y2QiEGmv82eRlFf9xfG5q0NAAmKfdyuoM6/u23BGW+BZrfO9eFOkHTT2rir?= =?us-ascii?Q?MTfyHnvEjY0KXnYK3+zhMoWP0YUiAp7rFbhjI6dKywp2lOZKmZ+DYz8mqiR6?= =?us-ascii?Q?iC3X25bgdTOLKDmVBs3Mun1LHIWUO0wUYC6VTcqdbnEsFHy9jTOBbA0bn5Lt?= =?us-ascii?Q?qAamWQsBKUKLxLtiosA0gZ13ufxpbsZ6XVurCSbLXmMvFioEJHLEdO5tZlfl?= =?us-ascii?Q?gmOE7bNybz9zOpFToDhKrOPP/J/HQv0Svzn8A5PJkFOguHUaE9mZEZfpCAzX?= =?us-ascii?Q?oDt337nw5uoTiIkGMA3bN+E5CDfw/DjTuB3t1puO1v73+Rz09z77Xw5PHVl8?= =?us-ascii?Q?4SkV1zpKUFUwprqPt+KVtBNAirGbJkA58jJUbtuCrHPCjnHXX55sprfjWKOo?= =?us-ascii?Q?Otxv+CiQnhj5r7j+bnaFoS5XRVFs6RRzERATB/d66Tm1DfSolT+rdECUHfuV?= =?us-ascii?Q?gk+/s/zaU7kU442H5LHK7v8bFo2LJ2VuAgiUP5N09oZXAFMFsEo3pOSljNF/?= =?us-ascii?Q?APbv+GnRkLZGMEy5hgieppM22aem2FXJzT0ED85lxAMV4uRJSEvGeEXDBQet?= =?us-ascii?Q?zWBpytqCzi7Fs3queoYK2ORizCiviu4NBEjBzE0mAIUgYwnqpqitknUdwtIt?= =?us-ascii?Q?lQ0l4jYHKHFkwgtsvAyxTeRex2Yd2nWM9msNPPhDP2YuXVW8Keefi9MBRJoG?= =?us-ascii?Q?DS8k6kIdefEexCWYWgBpH7EsjyTKzs4RrWwxJ6qe3MjOYeSBO6Aph0RATRf3?= =?us-ascii?Q?4/PT0rLQNIy6Xk4iLcZ6WNnGd/Yxq7Tz9XcJyrNpsDyecS2320YvJN2Kh1pV?= =?us-ascii?Q?zMvb/Mz8MkEDSStnenILLDiKFRj1vWdmsaoocfID2Mk5DrCHMXt3WVmDmY58?= =?us-ascii?Q?C0ybO3CGXvFMrrWbSqICd4hn0CktM+0pcDqI6/qxm1V7bKcyvMh/cbfU8Hj7?= =?us-ascii?Q?JrJDQMBCp63bIrVQUwsyIcAbWRvNstH+SIR1Qup6mWmknsTrhO23v6VIvu+W?= =?us-ascii?Q?efNP5gUSMwSM5+je4l5fbQnfQyrlSrsSRqJw4t+Er4k04+2B4Ic7qlT8RM7x?= =?us-ascii?Q?P1N/qI7kxlqJNanX3lBT/524rMl8nUt9mIsEMJUutIKc6Gw12to4ahN9aBas?= =?us-ascii?Q?ipWPV3KsHtM=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH8PR11MB8107.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?8h1foyN35hCXTorvTFF1F9DFekEPvHha5TjT+sh50BWZFQkLcrWA2BXP05qV?= =?us-ascii?Q?iW3O2n8F5PYGNlycuIjgWUKO5A8VB1FnczWbBPxYV/bmGDKR8VM15sz/9ewQ?= =?us-ascii?Q?tIRnoBmxJ+RKrYGt3OHiDRcF/LnqjW9UtjGfE9/wrtqRSJzHOxOkvBQvtR+z?= =?us-ascii?Q?dBNHGub/H5D3KukPzLWeAnxHzJLMs5/zr3J2h/cJMWuQtooCd5I8pt7ZP5B3?= =?us-ascii?Q?A8Y/EZawLT+0M4Kk6d1ywNiZXNOob+0x+ceLTi7uFZOMOZm10xE/pKWkid1E?= =?us-ascii?Q?Gf1AI7CL5e+eB3F2osJzpDmJ4+tTFXyyknOQ7rZHVpo5keHAr7MIUYUGGX17?= =?us-ascii?Q?9h7Fh7MuHdgpFJ9h7WJx0mtebowKSHwedhii40yvcjiQSCEknu+JX7fTuJGj?= =?us-ascii?Q?LsumxBWfZCgU5jvFZ0DWCn1nRWTvwSYtN2bF05Q6TBvFOHOS1D544fcvmS23?= =?us-ascii?Q?pDWbyZM6QsdfoNDp8U2SOpox8Z12aSjGGKqQIoGYAYDjZNpgwGLPNcjskNJT?= =?us-ascii?Q?XGcGEyEJBwV86AhkU8DEaXW5p+tl2zvbML83Z72rk8VyDysg7nGzK4NvLVNF?= =?us-ascii?Q?JYWeJMx+rm9GAMaiy7JzgsrEMletmo2TIEk/YEaFVIXMZong9E4MG1RQKOHd?= =?us-ascii?Q?2Lf6tDF+IXcgdedJpNDCoyvghgeFpvgqrAB4rV4VJfa1SQC3fpXlDdqttY3G?= =?us-ascii?Q?svFPwP+jt6GL4v9li0PePcsbQMix6hjpH7zcsOqEKkEVO74A4uR3KsATgfO1?= =?us-ascii?Q?/TYk4zwB+sSAtDdceMEci0fLnlVpI1NyPKauiI4sz2Qb6q7h6Id2r+JSJTL7?= =?us-ascii?Q?hxbddHYOb3PBIYr7fCKGmYGtppfz/5N4PTzz/TnwJA0pTnkN0/LyvDVStAYa?= =?us-ascii?Q?W6u2htKW0ChsC3TX76baTGPdXsE+aSKoV2UwCG879f8ikNOAKRSmP9f3RGqV?= =?us-ascii?Q?4SUisFuCDEbP03t+yiJ1pvu63+WIvkmtH2ACoVQB59HHax+gIrwD0DOb5+t/?= =?us-ascii?Q?YAm1UtyDaoZ5VHoASqiLo9sm5WDsbiiryxd4baMPYtEq7bNLUjeqechIX3qr?= =?us-ascii?Q?z1d/ozxxdxxXdejyHxtacpfV6tYPKGx+jGh2xbouGskFwqhctKI4JcowDq9+?= =?us-ascii?Q?sIUVSlOX80W5h/iSljkJpemD5UOx/tcBUct2Db67flqgw6GAwF2HqTIFdvTN?= =?us-ascii?Q?o+h20pdT4PRnuu9moP0XWI0YhM243dmpBkM5WI6VH3hTf5IjedbocJgVIWNy?= =?us-ascii?Q?wlWF/LLdXznVfzCMGbQHl2U1i87cnnERgklYC8/E/e8j5goXUxTLcui2rM1h?= =?us-ascii?Q?xfL483mho9K3miYUkJ+3I+WL8X0LCGYc0vcOCDs5ULecFOlZozHC0o6KNCXK?= =?us-ascii?Q?L4CGHsmHePpRwo9TDOn0hB9XpWs+1oMX19DjS7+LJKUbvfqeF0AjymNt2PFK?= =?us-ascii?Q?hj2TFJVpc/zL1PM1LEVMa55GmOlyFzenCEtyBO2XoBZBVJTMIwy8ubd7lngO?= =?us-ascii?Q?7VbJgS89mQgitGmuCOAdpAn40ifk0UhWb/CPXIURXTALlO9rbbuHlAMZGJlA?= =?us-ascii?Q?V40pAWfRaZ8VgfF5sJmHp3WDq8G8A7B0X5OkQwfx4ZlvlPcuM5RvBYlRr84v?= =?us-ascii?Q?EA=3D=3D?= X-MS-Exchange-CrossTenant-Network-Message-Id: 80bdfc86-e3bb-4ba9-17dd-08dd8d37d771 X-MS-Exchange-CrossTenant-AuthSource: PH8PR11MB8107.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 May 2025 07:21:53.5388 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: EBo9SEtfha/boj3Bhf/fzNdHNRjQmiV3GQk6IBt1n/9FSiNjKj6p54SRogpMuMDs8NF3h9RqwDHYabhS9EsRY2cMKZKKZgZsEoas8Tq8T6w= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR11MB8270 X-OriginatorOrg: intel.com Content-Type: text/plain; charset="utf-8" Rather than unlocking the region rwsem in the middle of cxl_region_probe() create a helper for determining when the region is ready-to-probe. Cc: Davidlohr Bueso Cc: Jonathan Cameron Cc: Dave Jiang Cc: Alison Schofield Cc: Vishal Verma Cc: Ira Weiny Signed-off-by: Dan Williams --- drivers/cxl/core/region.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c index d52e98e2f7a3..11448824ddd4 100644 --- a/drivers/cxl/core/region.c +++ b/drivers/cxl/core/region.c @@ -3529,9 +3529,8 @@ static void shutdown_notifiers(void *_cxlr) unregister_mt_adistance_algorithm(&cxlr->adist_notifier); } =20 -static int cxl_region_probe(struct device *dev) +static int cxl_region_can_probe(struct cxl_region *cxlr) { - struct cxl_region *cxlr =3D to_cxl_region(dev); struct cxl_region_params *p =3D &cxlr->params; int rc; =20 @@ -3554,15 +3553,28 @@ static int cxl_region_probe(struct device *dev) goto out; } =20 - /* - * From this point on any path that changes the region's state away from - * CXL_CONFIG_COMMIT is also responsible for releasing the driver. - */ out: up_read(&cxl_region_rwsem); =20 if (rc) return rc; + return 0; +} + +static int cxl_region_probe(struct device *dev) +{ + struct cxl_region *cxlr =3D to_cxl_region(dev); + struct cxl_region_params *p =3D &cxlr->params; + int rc; + + rc =3D cxl_region_can_probe(cxlr); + if (rc) + return rc; + + /* + * From this point on any path that changes the region's state away from + * CXL_CONFIG_COMMIT is also responsible for releasing the driver. + */ =20 cxlr->memory_notifier.notifier_call =3D cxl_region_perf_attrs_callback; cxlr->memory_notifier.priority =3D CXL_CALLBACK_PRI; --=20 2.49.0 From nobody Wed Dec 17 04:17:09 2025 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A2BD7221277; Wed, 7 May 2025 07:23:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=192.198.163.18 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746602616; cv=fail; b=PD35a8/cr/TTgxwa5mdugfFrmxteIr/EoFqdd/8w/1Idf8CdaY3wXHpDxQjyLG8QUjCFYoAxqa+GkzlOyVySqZCjV5/Kw6LiT1pfVVooC87Dj+kuuX4oMXs8vuj0o39fNWMe1//MAAPEAG9yXaME5Lho8w6WvHr6uqkLfExkznw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746602616; c=relaxed/simple; bh=/6dlKX676CZIrT29LWTzVfWDIyfAhWgkM/nPEgBApVY=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=ZecqtVZyWG8fd0lA0+CI1qSfa2Ql6rwtFRnIMwYcpBN/ildi4E2uUIOeWz9u+uj2tkFPPovn264ISZIZGoJO6cvARzKAdR0XhrFT6lWrv3T5aIcQ8iLH354x+cPbLwKNmrH1elSuW96GcHbRT3LskJ5QhHzKWljiaP88wr7KKDM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=X4Gicv54; arc=fail smtp.client-ip=192.198.163.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="X4Gicv54" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1746602615; x=1778138615; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=/6dlKX676CZIrT29LWTzVfWDIyfAhWgkM/nPEgBApVY=; b=X4Gicv54rFXnYbwUa36QanHZW+dehkCtO5eeTAUlXiZKepFesg8nY+RO fyeNuk4q9tieibD2l+K8aY1Pc8xcmP5tbY+pd6sekl/I/iP/5qWGX5njD 3+LZZI7A+hJTtzKs3vKTkDfni4ni94P6AcpKO1343xO+3PXUQFUEsSmI0 vqkRopkefe9Vc6OpR4za0/G1+sXp6ONV0LW7oul2vdhoSvXUdd9j7GUnd T0lO/NpkN/OyWPukpB9ws3iuLKSnnrg6YxVoiLFpJN7jrPLKzmP+fHDT5 cLJdEyGwxDAX5sKRJh00Z3xqpkqe4620SdacSLeRtmyhOrHJ1TWKe0AUm g==; X-CSE-ConnectionGUID: glQSb0sxTqG1W5BFivomRA== X-CSE-MsgGUID: Mdc6t8z7TiG/p9OVUblKHA== X-IronPort-AV: E=McAfee;i="6700,10204,11425"; a="47564262" X-IronPort-AV: E=Sophos;i="6.15,268,1739865600"; d="scan'208";a="47564262" Received: from orviesa005.jf.intel.com ([10.64.159.145]) by fmvoesa112.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 May 2025 00:23:28 -0700 X-CSE-ConnectionGUID: KvRAV5ZTQJ6HEWXWUfLvnw== X-CSE-MsgGUID: /MOx9NVdTxSnPrpUrq1zQg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.15,268,1739865600"; d="scan'208";a="140985001" Received: from orsmsx901.amr.corp.intel.com ([10.22.229.23]) by orviesa005.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 May 2025 00:23:28 -0700 Received: from ORSMSX903.amr.corp.intel.com (10.22.229.25) by ORSMSX901.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Wed, 7 May 2025 00:23:27 -0700 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by ORSMSX903.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14 via Frontend Transport; Wed, 7 May 2025 00:23:27 -0700 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.45) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.44; Wed, 7 May 2025 00:22:35 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=eJ7QzydT4ZLteAvDJZ1T7AUriUCdYJQIzDZkc874uuXGgctw3sohia6fBPlF3Tfr0tfzxMQFP7ZScRCqq8mvf6E+hAiCWVf+gJIC71ltcaYy32DRYsn5CPUP0Q6IyUhdDhf6Inl5Awo9lTavNGE6vLrU9w5DCxBadtLctjTSVIDdlEZdCBn0/OBiiLWc+dyvf+iEIQwBIwtVa596bovKY0aLCM/Uk1ViAUIof3UpOuJL2XkiHr+bhTR9X3zz7oJ1brGJYyrpcMivCtnFM15oYD+ZJvw0FAvXq0i5uv+degDoUYkldugLt5XkUeA2/NkJcN98Ei8Hi65xbc6nXMe/gg== 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=7bVI0CFZggPt2q4AOFQx3tYM+rpQJ3Gl5wynAuX0GeM=; b=FarWJKcLNPmYQrs3FdzzUt9YwOUUjS4LdVu502T3cqHmzSd4XcYS8iyq/F+qkhIcPIVQSDf9AE13Df3d7ENfet8H69bhBRegg6gcM5DoL1xJ8hMBUNtWlcfLVDyYMl+m7Ma5dGvXaXYiVhXfAKia99jkr3GwSlQaeQIt/aNoZmaIrgz6YDEQCx9/V9sVCiwlL0xBktK5Iy7XMZ+1TENAHR9hA5T4jDpqJrzPn/1Q4via+SuqUXoqk7Q5QakNqP1LAShRh6HnwMeoN9/a3k7zSBrfjf3K197gCwbStsk+BXgqqX31Cmt6yNrE3eRvoEXKoIhhpzVtZo8Ot4G/R60kfQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from PH8PR11MB8107.namprd11.prod.outlook.com (2603:10b6:510:256::6) by SJ0PR11MB8270.namprd11.prod.outlook.com (2603:10b6:a03:479::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8699.21; Wed, 7 May 2025 07:21:54 +0000 Received: from PH8PR11MB8107.namprd11.prod.outlook.com ([fe80::6b05:74cf:a304:ecd8]) by PH8PR11MB8107.namprd11.prod.outlook.com ([fe80::6b05:74cf:a304:ecd8%4]) with mapi id 15.20.8699.022; Wed, 7 May 2025 07:21:54 +0000 From: Dan Williams To: CC: , Davidlohr Bueso , Jonathan Cameron , Dave Jiang , Alison Schofield , "Vishal Verma" , Ira Weiny Subject: [PATCH 6/7] cxl/region: Introduce CLASS(cxl_decoder_detach...) consolidate multiple paths Date: Wed, 7 May 2025 00:21:44 -0700 Message-ID: <20250507072145.3614298-7-dan.j.williams@intel.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250507072145.3614298-1-dan.j.williams@intel.com> References: <20250507072145.3614298-1-dan.j.williams@intel.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MW4PR04CA0313.namprd04.prod.outlook.com (2603:10b6:303:82::18) To PH8PR11MB8107.namprd11.prod.outlook.com (2603:10b6:510:256::6) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PH8PR11MB8107:EE_|SJ0PR11MB8270:EE_ X-MS-Office365-Filtering-Correlation-Id: 4b7fd0be-6378-48ed-4bbb-08dd8d37d7fe X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|366016|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?w+WAwEDAcwImbEwYx7Nqc6fCtHYG6rzZkl/QGMwbAnUsWwe2F2ZLKYbQArhT?= =?us-ascii?Q?nat0F8MhAf7/89oE2B/4IA3iGwrcehjNudBJUM2CUcNLqkr37y194uP5LW3v?= =?us-ascii?Q?lk0KtXXe4vMcH/ioQ2M9F3M7Dz4ADzyfh3hw/LpigV+arrCXfqIh9xiuP5N2?= =?us-ascii?Q?zeiQlinn1O6j4svCiaBRWLYzbB5+x/65QCZczuGPl8eFloVtwNWIqz6GdMbl?= =?us-ascii?Q?SpogELstjR2FAbKe8bwiNUmzm9Dpa0rCaiIMj05Jx1ot/cJggv3DzSbxUgfz?= =?us-ascii?Q?wdNKMTDTrs7JQ0BKEemtGhJPYnymSYOKy8EVEGltZ0nDVhHS3yn6/Cu1H0sK?= =?us-ascii?Q?Zz6kmwgql6w4ShqessecCqyAzgi+26PhhU4qWphdhUTnQw7TXino9LCo4YYF?= =?us-ascii?Q?5sx7TvjmKPc78dNx1vwh/zovGzNWJtswYaD6HfxVXT2TC3g6xqBZzhDfBKkt?= =?us-ascii?Q?sNziLRnAYC4hfLxGay9tA6F+hhMAh0X/BO4befw32U90EJi9yQKtG0dyHeD1?= =?us-ascii?Q?ONFJa6+d64MMgvC59dmiNqXEOeMqcnsLojfNlWUf2aGn1H+mq/a49GU/rwnu?= =?us-ascii?Q?oI1jAOs8wwcKv3RNE8Ry5zkm14IPU7F0UzhXx7EYY3A+5TaOMwoTsHWfjEHG?= =?us-ascii?Q?B3jjhImlixsNw0ssYpSMyYJNO1ADIqUB5JriMaBSCFJzQPMtffV8fTf3qEaz?= =?us-ascii?Q?QQtp6paQfJ9/kseQ/gQNVuXYUvYGYAI2LpemgSy4Ncjw0pVRIuZrgG1RhyTr?= =?us-ascii?Q?FxtH3a3E5rSQzvl+qY8lVtdxA01tYHQwF107TVWENYDQNM5o4o1QBKVk+KD5?= =?us-ascii?Q?d/MvizpfheINxtloBvyJRXFyOhez5yICoG3jug4ZhH39IGLw31vP/v0JDxeU?= =?us-ascii?Q?bJNtzCP5mubOzZrxbgM1jfv3ogR9QPlC6VvRyHYYNd8y+/EVk8vG/YvhGLCM?= =?us-ascii?Q?kYq8jZLsRllw2hceRYtfBV3NgWrqcWUP/tnrWaX7H/01FP+EXueV0kaFJ/OV?= =?us-ascii?Q?ny4AFcJKrn1bZVhObsoi1fj+5iqtBWswfPKhI2qPjzERmsFSstLuGasPG1QG?= =?us-ascii?Q?yRIRomuQ916uxNhshh5azYb2IzSjZJiHp0VRlcAvvtgUTfElgknpUXlcO/XN?= =?us-ascii?Q?UfMgnGErdlXf//gazvvvuBXYdWBomzlZtjzqTitVRegJ8Aj1G+biKPYES3DP?= =?us-ascii?Q?IkgT8WZQ4VMrL/Xzhmy37HFBdmdbn+4an5kjE9sQEKWyqD33DLaJouEFoc4H?= =?us-ascii?Q?anbwA5sh8KzLyYz5VGtZULtU9HYrFhd7x2gTCndQcCGvZNzTNGbmWnt6Bc+h?= =?us-ascii?Q?WyLcGRUxrsBmjffrWDjBGZjCR7qKv92BwOHJ9V7kLp0CBUvvxhhq3wobYt5X?= =?us-ascii?Q?zgorIw5GTkN07ZmhKuF6vA5qTmo3D+7S2NtuPfzq/khZ6OXEfs5Ee68/fgeN?= =?us-ascii?Q?MQB6zQoLyTY=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH8PR11MB8107.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?b8/Yqp1N/GtjO29HsoQDZv8RcStj6XlO99z1V2QmlMYewgdlQOPxysQmYgLT?= =?us-ascii?Q?wDm45crpDSSXwUiZu4C0I7sbyoxLvnNtnHaZ557tMkid3MFL7wcAxs4t+sLK?= =?us-ascii?Q?72/ydfqnzSrMZ9lJ/XXSde0wMpE6niU8eEnQeNXBJikH/GBFjKCQqIlUwgTb?= =?us-ascii?Q?aFIWhrC2AUOOE4eqX/AGa+0cQIN34SY8hgSq0tf176nRGPgW/7oJUFRaZebN?= =?us-ascii?Q?KYmCFzldCOes+00wmCoz+x9C+Ypth+rKPG05tX+ahDnwe9aqxhfHX7svT4Lq?= =?us-ascii?Q?VDwGgmFd/94xUruY04g1j/yFTFYknOxPGlGTOJU+6o3ujZW5F9C7T/ROukEK?= =?us-ascii?Q?nQaB5PLjMY2u/qMbOfh45p2CbAWjaA1ekG5yBTP7t1e5DJpYoewcOQTs/ksG?= =?us-ascii?Q?SFgMT7TaaCz92GBl6yjeK8zBsZF4qtbj3Uq9OEAdYZzB35awQaDOZXyeQAiC?= =?us-ascii?Q?sdbLkuqmzF+xM0WRK+uJ6iGG6z0LdG7FuacvvaAxlc2HnD8W1db1CyCjroDL?= =?us-ascii?Q?m85nDuyOS4QEiCtmSUqeAzHXmnfBZEWYEMkSeO1oJ4NBziS2+MWekcAumwqo?= =?us-ascii?Q?DFRCGG7dsrpC+f7kAa21wzEbYLmCtbBn5rF1dHH92P8KQM+rRXO127ewq9cQ?= =?us-ascii?Q?t20Cs9K+tzW/gTjTHj+3qgXmil8Ln1E+ApPbP3o7+rLgC665ja1Tqrq7MVOd?= =?us-ascii?Q?8DMjIxALJLIh426hrkOPJEp+tiULM4reLzoVF4CsBr3hMloTBl7YRwSi+5RV?= =?us-ascii?Q?jQH+UQzYtOx6NwqrPlOl7iaAyxec2O8IXlKYMvEW18fisgktP+Xc7WpNrgJY?= =?us-ascii?Q?C2W/bNOlnhtSJADmac8J4hGQ+Z/j1Js3DigoYIe1X9MbMt2QTveTOKSUqFsv?= =?us-ascii?Q?RqVDotlvCuBcR1Cs2nPmzArh17RZ9ljekPqNs3OTBb7Dd7C2yy9BCqlthqrK?= =?us-ascii?Q?3jKdUbgOx6gmYXl2h8dtKfFMAWWz69n5DmAUeOXmOyHcOq8WiwcPcNH+9qkF?= =?us-ascii?Q?/AHoSSPYPhBY9PDiJfhO087OlcBSFZfjbqnOe0fAqMQS55r7OnMVD8b7AW/6?= =?us-ascii?Q?rbYcMcS0oaJbrSyWFX6XvZl/cG5NSMjjPGqe6Uo1By0P6QL+GRXGKzBMb6Ka?= =?us-ascii?Q?Hff6pawuQbPLhlLzNIu+yPupTAJtlGeK3afkPIt9bYM3VgXaIAewhirwzWSz?= =?us-ascii?Q?+E9D96E5oe8fFil8QymFK4QWrgpSy+qavO52xgQXhbh93sZ1lrZkZorH5mpn?= =?us-ascii?Q?JCwHJCk4HM9PgTT+gIrFFaXH6/2SCxa+fVIJyY4QHZI90ggwzJJvfehR5rdI?= =?us-ascii?Q?m74rAK3bpAAbeaIlF4A9rfSSFxAfjxblGYbbICqSMLBZHNW4fKR9dbwlGsfZ?= =?us-ascii?Q?gTgoYujm4c/WEKdAEFVeVsZn/4/mL+3W4EPIhveWkCRld9TvUSeEUqLvKV6Z?= =?us-ascii?Q?pacwMTmR7P7FmkjGbfqlOv4n4wrBfGnTt0aFGrrVRBHWr5KHI8gRsT9W3B4c?= =?us-ascii?Q?76nCjJ5wFMShzo7RruiBTnH8+DmMWj2LofJeaeJvBsfB4HmW3ksdlKg/IcOP?= =?us-ascii?Q?+yNse1hmPtmLLJsX9PDe38YDgkHwMUKvuzN573JYw+MB+iSfq1nIvunvvRIt?= =?us-ascii?Q?PQ=3D=3D?= X-MS-Exchange-CrossTenant-Network-Message-Id: 4b7fd0be-6378-48ed-4bbb-08dd8d37d7fe X-MS-Exchange-CrossTenant-AuthSource: PH8PR11MB8107.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 May 2025 07:21:54.4552 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: /tzbLUI8ExqWf9Hm+OV2dWmHgRAa7oxKVHKQsPGmtso4sAv+pe5EKzSHuSOveg+KjIl2nDAA5ZOGUMlv6ouXeqPHFLV9iGPs+KuL288KbDo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR11MB8270 X-OriginatorOrg: intel.com Content-Type: text/plain; charset="utf-8" Both detach_target() and cxld_unregister() want to tear down a cxl_region when an endpoint decoder is either detached or destroyed. When a region is to be destroyed cxl_decoder_detach() releases cxl_region_rwsem unbinds the cxl_region driver and re-acquires the rwsem. This "reverse" locking pattern is difficult to reason about, not amenable to scope-based cleanup, and the minor differences in the calling convention of cxl_decoder_detach() currently results in the cxl_decoder_kill_region() wrapper. Introduce CLASS(cxl_decoder_detach...) which creates an object that moves the post-detach cleanup work to a destructor, and consolidates minor preamble differences in the constructor. Cc: Davidlohr Bueso Cc: Jonathan Cameron Cc: Dave Jiang Cc: Alison Schofield Cc: Vishal Verma Cc: Ira Weiny Signed-off-by: Dan Williams --- drivers/cxl/core/core.h | 43 ++++++++++++++++++- drivers/cxl/core/port.c | 6 +-- drivers/cxl/core/region.c | 88 ++++++++++++++++++--------------------- 3 files changed, 83 insertions(+), 54 deletions(-) diff --git a/drivers/cxl/core/core.h b/drivers/cxl/core/core.h index 17b692eb3257..44b09552f44e 100644 --- a/drivers/cxl/core/core.h +++ b/drivers/cxl/core/core.h @@ -12,6 +12,11 @@ extern const struct device_type cxl_pmu_type; =20 extern struct attribute_group cxl_base_attribute_group; =20 +enum cxl_detach_mode { + DETACH_ONLY, + DETACH_INVALIDATE, +}; + #ifdef CONFIG_CXL_REGION extern struct device_attribute dev_attr_create_pmem_region; extern struct device_attribute dev_attr_create_ram_region; @@ -20,7 +25,11 @@ extern struct device_attribute dev_attr_region; extern const struct device_type cxl_pmem_region_type; extern const struct device_type cxl_dax_region_type; extern const struct device_type cxl_region_type; -void cxl_decoder_kill_region(struct cxl_endpoint_decoder *cxled); + +struct cxl_region *cxl_decoder_detach(struct cxl_region *cxlr, + struct cxl_endpoint_decoder *cxled, + int pos, enum cxl_detach_mode mode); + #define CXL_REGION_ATTR(x) (&dev_attr_##x.attr) #define CXL_REGION_TYPE(x) (&cxl_region_type) #define SET_CXL_REGION_ATTR(x) (&dev_attr_##x.attr), @@ -48,7 +57,9 @@ static inline int cxl_get_poison_by_endpoint(struct cxl_p= ort *port) { return 0; } -static inline void cxl_decoder_kill_region(struct cxl_endpoint_decoder *cx= led) +static inline struct cxl_region * +cxl_decoder_detach(struct cxl_region *cxlr, struct cxl_endpoint_decoder *c= xled, + int pos, enum cxl_detach_mode mode) { } static inline int cxl_region_init(void) @@ -99,6 +110,34 @@ u16 cxl_rcrb_to_aer(struct device *dev, resource_size_t= rcrb); extern struct rw_semaphore cxl_dpa_rwsem; extern struct rw_semaphore cxl_region_rwsem; =20 +DEFINE_CLASS( + cxl_decoder_detach, struct cxl_region *, + if (!IS_ERR_OR_NULL(_T)) { + device_release_driver(&_T->dev); + put_device(&_T->dev); + }, + ({ + int rc =3D 0; + + /* when the decoder is being destroyed lock unconditionally */ + if (mode =3D=3D DETACH_INVALIDATE) + down_write(&cxl_region_rwsem); + else + rc =3D down_write_killable(&cxl_region_rwsem); + + if (rc) + cxlr =3D ERR_PTR(rc); + else { + cxlr =3D cxl_decoder_detach(cxlr, cxled, pos, mode); + get_device(&cxlr->dev); + } + up_write(&cxl_region_rwsem); + + cxlr; + }), + struct cxl_region *cxlr, struct cxl_endpoint_decoder *cxled, int pos, + enum cxl_detach_mode mode) + int cxl_memdev_init(void); void cxl_memdev_exit(void); void cxl_mbox_init(void); diff --git a/drivers/cxl/core/port.c b/drivers/cxl/core/port.c index 726bd4a7de27..20b65f13bded 100644 --- a/drivers/cxl/core/port.c +++ b/drivers/cxl/core/port.c @@ -2008,11 +2008,9 @@ EXPORT_SYMBOL_NS_GPL(cxl_decoder_add, "CXL"); =20 static void cxld_unregister(void *dev) { - struct cxl_endpoint_decoder *cxled; - if (is_endpoint_decoder(dev)) { - cxled =3D to_cxl_endpoint_decoder(dev); - cxl_decoder_kill_region(cxled); + CLASS(cxl_decoder_detach, cxlr) + (NULL, to_cxl_endpoint_decoder(dev), -1, DETACH_INVALIDATE); } =20 device_unregister(dev); diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c index 11448824ddd4..17e69f6cc772 100644 --- a/drivers/cxl/core/region.c +++ b/drivers/cxl/core/region.c @@ -2122,27 +2122,52 @@ static int cxl_region_attach(struct cxl_region *cxl= r, return 0; } =20 -static int cxl_region_detach(struct cxl_endpoint_decoder *cxled) +/* + * Cleanup a decoder's interest in a region. There are 2 cases to + * handle, removing an unknown @cxled from a known position in a region + * (detach_target()) or removing a known @cxled from an unknown @cxlr + * (cxld_unregister()) + * + * When the detachment finds a region, the caller is responsible for + * releasing the region driver. + */ +struct cxl_region *cxl_decoder_detach(struct cxl_region *cxlr, + struct cxl_endpoint_decoder *cxled, + int pos, enum cxl_detach_mode mode) { - struct cxl_port *iter, *ep_port =3D cxled_to_port(cxled); - struct cxl_region *cxlr =3D cxled->cxld.region; struct cxl_region_params *p; - int rc =3D 0; =20 lockdep_assert_held_write(&cxl_region_rwsem); =20 - if (!cxlr) - return 0; + if (!cxled) { + p =3D &cxlr->params; + + if (pos >=3D p->interleave_ways) { + dev_dbg(&cxlr->dev, "position %d out of range %d\n", + pos, p->interleave_ways); + return ERR_PTR(-ENXIO); + } + + if (!p->targets[pos]) + return NULL; + cxled =3D p->targets[pos]; + } else { + cxlr =3D cxled->cxld.region; + if (!cxlr) + return NULL; + p =3D &cxlr->params; + } =20 - p =3D &cxlr->params; - get_device(&cxlr->dev); + + if (mode =3D=3D DETACH_INVALIDATE) + cxled->part =3D -1; =20 if (p->state > CXL_CONFIG_ACTIVE) { cxl_region_decode_reset(cxlr, p->interleave_ways); p->state =3D CXL_CONFIG_ACTIVE; } =20 - for (iter =3D ep_port; !is_cxl_root(iter); + for (struct cxl_port *iter =3D cxled_to_port(cxled); !is_cxl_root(iter); iter =3D to_cxl_port(iter->dev.parent)) cxl_port_detach_region(iter, cxlr, cxled); =20 @@ -2153,7 +2178,7 @@ static int cxl_region_detach(struct cxl_endpoint_deco= der *cxled) dev_WARN_ONCE(&cxlr->dev, 1, "expected %s:%s at position %d\n", dev_name(&cxlmd->dev), dev_name(&cxled->cxld.dev), cxled->pos); - goto out; + return NULL; } =20 if (p->state =3D=3D CXL_CONFIG_ACTIVE) { @@ -2167,21 +2192,7 @@ static int cxl_region_detach(struct cxl_endpoint_dec= oder *cxled) .end =3D -1, }; =20 - /* notify the region driver that one of its targets has departed */ - up_write(&cxl_region_rwsem); - device_release_driver(&cxlr->dev); - down_write(&cxl_region_rwsem); -out: - put_device(&cxlr->dev); - return rc; -} - -void cxl_decoder_kill_region(struct cxl_endpoint_decoder *cxled) -{ - down_write(&cxl_region_rwsem); - cxled->part =3D -1; - cxl_region_detach(cxled); - up_write(&cxl_region_rwsem); + return cxlr; } =20 static int attach_target(struct cxl_region *cxlr, @@ -2206,29 +2217,10 @@ static int attach_target(struct cxl_region *cxlr, =20 static int detach_target(struct cxl_region *cxlr, int pos) { - struct cxl_region_params *p =3D &cxlr->params; - int rc; - - rc =3D down_write_killable(&cxl_region_rwsem); - if (rc) - return rc; - - if (pos >=3D p->interleave_ways) { - dev_dbg(&cxlr->dev, "position %d out of range %d\n", pos, - p->interleave_ways); - rc =3D -ENXIO; - goto out; - } - - if (!p->targets[pos]) { - rc =3D 0; - goto out; - } - - rc =3D cxl_region_detach(p->targets[pos]); -out: - up_write(&cxl_region_rwsem); - return rc; + CLASS(cxl_decoder_detach, ret)(cxlr, NULL, pos, DETACH_ONLY); + if (IS_ERR(ret)) + return PTR_ERR(ret); + return 0; } =20 static size_t store_targetN(struct cxl_region *cxlr, const char *buf, int = pos, --=20 2.49.0 From nobody Wed Dec 17 04:17:09 2025 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B424C220F42; Wed, 7 May 2025 07:23:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=192.198.163.18 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746602614; cv=fail; b=N6Jg8ZyKtGUq2On0iXHiEpJfGb9C3x1K8yfPCdOgEB2YQMEXAkBGvMqbS5mNzQ4OfC78mrUn/RuDg2ZoFhU/bYT9VHUDgiGk8du9pgoLng2yWgH/PLe50an8aBnWb+IuAwebikimEtpV/qoKPJMXy6kfNIGefUHhquROllgS+Xk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746602614; c=relaxed/simple; bh=ytZHjCzqtxH1i/fodeugmEE/xMOFd7vXEf1twjVsa2c=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=WLBrFMOfpysuMeNlhgbNeQ3jDmkGnmp525nMw+d7jZIFEbaC+SzXJPU1i9xIwiGQkjJVBnfpN5BuUPCSFLRD4YPFe4JvOe++chE+frENhhof6AaSzfRAoZHzVEB072k368f5sv67NIALnQ5304zc2IIZ4BC7uM+ho7zGEtGpPX8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=kyVjGura; arc=fail smtp.client-ip=192.198.163.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="kyVjGura" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1746602611; x=1778138611; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=ytZHjCzqtxH1i/fodeugmEE/xMOFd7vXEf1twjVsa2c=; b=kyVjGuraZCCY9BocgmJtYRMI/Il02mY2/8m+dQse95k34KWW4g0vydu9 eN8i6vaAcXsiDeHUUYIygiOGOJ4RtlCRL670DPfudSK1EfMWlUrbyf1J8 mUE9ZOepqH6q4jvf/pTRj/fn+HXatHCiOAP1fE3+ksdAFpptjE/Lz65qG JpCU4tH+qSti3a8hnccwDOFa879E8hYBQxWIsdVFgpIbIfPagbZ6ShHRs LF3wAyx4QlwYfJrjkOk6fhdSmhwGRMF6j8DE5eMnRbZLM1MXBmNdpEkYu XzucW+Qw1t9Pl/f7ojRpDw95eLntGcvISH0NhKFE+afuVkZJ8vl4QtneE A==; X-CSE-ConnectionGUID: yJTs94d0TFa5+w58xiO4sA== X-CSE-MsgGUID: CmwZ1tbvTT2wodzFRCTfPg== X-IronPort-AV: E=McAfee;i="6700,10204,11425"; a="47564254" X-IronPort-AV: E=Sophos;i="6.15,268,1739865600"; d="scan'208";a="47564254" Received: from orviesa005.jf.intel.com ([10.64.159.145]) by fmvoesa112.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 May 2025 00:23:28 -0700 X-CSE-ConnectionGUID: G1zdc9u+SNy0NClTONGM1Q== X-CSE-MsgGUID: ubOBQUxGQUCejAu+fD+qIg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.15,268,1739865600"; d="scan'208";a="140985000" Received: from orsmsx901.amr.corp.intel.com ([10.22.229.23]) by orviesa005.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 May 2025 00:23:28 -0700 Received: from ORSMSX901.amr.corp.intel.com (10.22.229.23) by ORSMSX901.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Wed, 7 May 2025 00:23:27 -0700 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by ORSMSX901.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14 via Frontend Transport; Wed, 7 May 2025 00:23:27 -0700 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.45) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.44; Wed, 7 May 2025 00:22:36 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=mCASi6wNR1E0XYBGDAiggKePzfmyL7G7pSp76C7k1C0LSToCcqBkFrWcs9OQLALbDr83FAI3y3Q+0NT6UyFZwOCSR30U8KS3kXFuhAhLKUG5hg8IdyhTsw95HvLoRF40XnvKJfglLIrAVq+nVsYxnKdepw7OHbAEN4zB5n3E/U3qYwn5hH3jBVJwAoAL5ELLytVMORKvk3u4ODv237W9jbMxO9RlyC+5KYozCoia7GrhtBrg8+Mll87Za/MhbNWLK0KvdckawOiKjb5BU7ltWBYazB7AtdtdBAr048lKJPiogce/MAOBI2vfMjtiM7/jQHlHfnI8RFsP26bPcx4GRQ== 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=fWdAX/GAwvuCibtDPSsvdl9HLosHKU61cN9RY0+NgHM=; b=i9vtJ1L2j7wXf7pLxJcWAD3vdxTipXJWvRtnj+rF5/ZAS2izXkBrG9znWryjw9r4bOUaw8gvx3mh11vU6JmEwJjxTQo5pLYnsCmadPpLoowttyQKIzh0nSJZtfYwIJN2r1QWq6fqKEVJ9NRzYSBMyxjKT/YXDU+71jPNL6UcfVj50btfNSEQjq5psbuRA9ksT6RXOf1dJ/yA+wKW4gpul8JkCvjwXVMTc4ySphH5RX/1qJTXeq1muBq9ADHp85LIt7UKol7Sl371L3W3E8Qgf+7QX6J9JX8AANrxJcbwRzGSfBRGvZ2bLcu/jyeNtfRPN2rrCQLqc9KuR9qGVK6a8w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from PH8PR11MB8107.namprd11.prod.outlook.com (2603:10b6:510:256::6) by SJ0PR11MB8270.namprd11.prod.outlook.com (2603:10b6:a03:479::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8699.21; Wed, 7 May 2025 07:21:55 +0000 Received: from PH8PR11MB8107.namprd11.prod.outlook.com ([fe80::6b05:74cf:a304:ecd8]) by PH8PR11MB8107.namprd11.prod.outlook.com ([fe80::6b05:74cf:a304:ecd8%4]) with mapi id 15.20.8699.022; Wed, 7 May 2025 07:21:55 +0000 From: Dan Williams To: CC: , David Lechner , Peter Zijlstra , Linus Torvalds , Ingo Molnar , "Fabio M. De Francesco" , Davidlohr Bueso , Jonathan Cameron , "Dave Jiang" , Alison Schofield , Vishal Verma , Ira Weiny Subject: [PATCH 7/7] cleanup: Create an rwsem conditional acquisition class Date: Wed, 7 May 2025 00:21:45 -0700 Message-ID: <20250507072145.3614298-8-dan.j.williams@intel.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250507072145.3614298-1-dan.j.williams@intel.com> References: <20250507072145.3614298-1-dan.j.williams@intel.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MW4PR04CA0313.namprd04.prod.outlook.com (2603:10b6:303:82::18) To PH8PR11MB8107.namprd11.prod.outlook.com (2603:10b6:510:256::6) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PH8PR11MB8107:EE_|SJ0PR11MB8270:EE_ X-MS-Office365-Filtering-Correlation-Id: a88a03eb-0fd5-4213-a410-08dd8d37d8b6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|366016|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?N9t08Whvu02l6TEWHTn8sCg/DdVdu8Ez1paBt/VH5YgmjhvIne+txvdPHIvT?= =?us-ascii?Q?Cl05MJcg27OucsFrIOHZKXS33gfQ2m7MyLWU8M3lmlP6uQiz9x5ywhGi/Imm?= =?us-ascii?Q?FWtX0OKh+ao8GVx4VUg51R8U/SN787kDLGFaImzegHp3de/Bc9+tSp27iDIB?= =?us-ascii?Q?Hbbblkw/v5UnF9B3xzLPaZfs4Vu2LhbpXLlGB042LP7U4UUn7HxREjxmFUy5?= =?us-ascii?Q?Xd3UW3SMrUYt+yjJ0XmpiwN8f9JvXb+POPYgDDR4yZDttr/0lLQhE7WhDN0K?= =?us-ascii?Q?5Cg6/lpPket/HsIUE0RzZ2zVw6GjrkfNFGFFFvYUPICS85my0jfqFTywGQqs?= =?us-ascii?Q?GjsZaNrfEl01fnhW9whbwz0CcC+YVzWjNIHPKNBxboRu0hE5ULu7GWdKpFuo?= =?us-ascii?Q?Dygj7wJM3E2g/J5ZFt5gcqKlIJNKTQfg6uz1eNih9fKeMI6fz4FyDVh5hsRh?= =?us-ascii?Q?WqfOOmruiU5nn+gRrKPfHU+iWArWijkBFb502YH6de/Q8elUP6PhY4f/DE/O?= =?us-ascii?Q?Htx6s0VOjaRWaK3h7Kwr8kR0e/1pPnAiundj+jX/pz3qnrmRH59oe8oNIFBx?= =?us-ascii?Q?QiRFFHKJEfzBGCbpIwmnwvS1Q+ixpIvBcWj8ZqyKMWZn9AxRnx6I81XZk4hG?= =?us-ascii?Q?boNGpnsEcHSPstgd8IYWqrTk5K3wyD/nC6Pk1GhIH85E4p5Yljk9DgQIu5ib?= =?us-ascii?Q?0QOu2NuX1M0RQBS4Yz0sSsIg/xJXzIqBg2rnFTAheIFtDMFovMeiTwj+KJOi?= =?us-ascii?Q?/5Uq3OElMDLF1B8DYggKRuUj4vs8Av5qY1B0lVj7J5INed2iCHQV4BFByMdP?= =?us-ascii?Q?JSoY3lTrQ/UnwmZcOHGhiEJpiEPBMFSG5f4xCwPQPTS96hFAgiPohx8ZoOXa?= =?us-ascii?Q?ebmUaHhuD5b8OH63Q+bhMNvBO+7RAIH8yO9jIc4/WwKK7ZAWn0jIkTZoDuMo?= =?us-ascii?Q?g2DP8/IFeQEYWcZeMRJQLLZRpk0Sx+EmXaIif6aqIbdWOLiei/nbI/cbhqi7?= =?us-ascii?Q?JgkuZlktmKBZBtVDQ0HjCUjGe1YuUSUmbvZf/sDbdsuh0my/3nXhcFib/6xt?= =?us-ascii?Q?hkYy90ZkJE4z2O32phes4hCh2GVd9pMercc1yOEdtKebWN6IqSup5aCSD0L2?= =?us-ascii?Q?ccbx/vyna2EMOAa+pt1ZDSeHxrX1vvi36Q96488BxuXKRdFlLuL8XkJocpMr?= =?us-ascii?Q?sHfwU9iXGXNXBluAEIPTgpCOh17o/jjhxYZ33ySMH9pZ4Pg3tH8C4uP+aokR?= =?us-ascii?Q?iPft0tsPqbLlyiD3DoHldrNxRfx5X65YnAX4k4lI3/orCzCeGAcgBk8IBm11?= =?us-ascii?Q?0sm7MR6W+OdOLTH3nymRTrXyDl9oGRl21ktMxzKSxUTU/sPNtdddFSP/KNok?= =?us-ascii?Q?q1pWjnVMxwBWDCL26bgc6fdl3iip6RtzrCwZ5dVbnjQi642TmbUR9AKcycEw?= =?us-ascii?Q?zggAEttlfEU=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH8PR11MB8107.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?H/z/klBRtPOV3ceENODF0MYGv87HLh7FJ4ExkELe2/XqIq1m+zRiEYGl+jXX?= =?us-ascii?Q?zrDNBXf3XE9LgAsM/53TkfVrMxU4Skk2fsnHtZSfNC2BnZGHZHpcmc3ettd9?= =?us-ascii?Q?NKVoq2yL1D5iuf0975oO8Pkf6x7wASBHEB0Hyyxw8ffKAuHKQ0DI8g9EhX0A?= =?us-ascii?Q?VtkLyjtNkOKAiMsrYsLzNdJcvejxgwoMSCh7nHN/jJlFE7zQvmyw1qNH7oD2?= =?us-ascii?Q?YrObXp58dI5SrSLC4G5c93YakAlL9ydbDqnW5Tbfd5YNkoGaDMR/16CnCn2y?= =?us-ascii?Q?F5LOAI/1TihDWXruWZkUJQE7rY/haFHgEMYaG1gXlfcKiNcSdorVaOqYr9OA?= =?us-ascii?Q?fLAKSu7xAy2/4cTKes5LqlSTBm0SoCbUKBTyd2ZdCfX3W6uEO7/avheKdOj9?= =?us-ascii?Q?S1VA9+MGeGZO6Y973P8DEGJp7254V9HgytzjNCjwkU4hAeVZuROy1j3JbZJe?= =?us-ascii?Q?o1k6Gqc0szi5lWLZSm146e4eBcTmHXXcfrYnuMcNz+jdKNQuYrEIMMW1uz0S?= =?us-ascii?Q?RJJpEW7ycwHPtK/WA4aXjUjlB7PzFNkmhySaffkU5X2qeRGgttG9wwTYLoAY?= =?us-ascii?Q?zNIqRJl9gpcPvidMzc4LY6oqEwnQeSnFLfipWyubcbOAqu4m9TFsB7rWPAA8?= =?us-ascii?Q?mXDTIFKnwnIpF7OFpxxDPEtopD/3s7dEWJN/AecPBI0N1rnKcSWWbY/n8ETW?= =?us-ascii?Q?xYJSVh+98f9/429e8NgIiir+3jQjtDIx+toNyBTsRJ9YB8GUMRjiqTZN+PCH?= =?us-ascii?Q?wnyTY6Mfwv/CFliZH2aNkYsk757K20VKqFCnkIX8VkhmkhbZSJJbSHpT1n5v?= =?us-ascii?Q?/q4tdRhwCIG9CbuVAr8IH1ZJi64mN/+ZgVu0qgalZJLTySeLYJTpXexviCVY?= =?us-ascii?Q?/m/E2B0+LFi6/OMeQ+IsoAeMUwIKGLWtA9BHmwkkxILElSfHurEPTPg0eGMn?= =?us-ascii?Q?lS8y1nxg5gcyqu3rtxUD5bu5oAOJdRvXx36jXUlIh3eb5I2ueOqDcoqjZcoJ?= =?us-ascii?Q?jUaO9Ch9nOrb7I6U3n4ikSu8H6wgmQcEtls9z/aBdyK3BWGdOHuah38CGhpB?= =?us-ascii?Q?W4rsT0C1ulQHeW5UJGX7ORb2C7wMyPlRcvSrM05CiZFATs3+L1FUV8snFn9k?= =?us-ascii?Q?6H7w36nNIN+EzQ+8Y6ZAvKT73JQyHcZNz67tbg7bBV/ghqUMnwvZ8E9D7mon?= =?us-ascii?Q?t6hYaN+CmHhFBQ5DX5JngKhVnorj8SQsAn+1oqToSSNe6gCLOUB68OWu46Ec?= =?us-ascii?Q?0XaadRx5aA9FbXp0hsaI7/jZp0Vgjh73H4UmT8T/whJ6Iag2RLkr/18PCiSj?= =?us-ascii?Q?Y2Qkz0AIRpRM/ge2M5J4Pe/32Vu+GASlY3ZaVvDEKJUbwSYvmbCLDnaNLm4M?= =?us-ascii?Q?dp8EJIZFYYW/hknogpdRGBD2lIE7h7n5v+IAphb+vkbNziEWnTAUcrKRA02U?= =?us-ascii?Q?3g+SgIsANfpcIFDldIGwgUZq7HyMDYNr48b/zlW+YzyuhcP2VM7E8Hzs0Bwt?= =?us-ascii?Q?2iJoZ46KLDWqhDeI4rWiBX0bIyCK/LKM8HugNcBYNk00mA4ugcSA5K1KLLEd?= =?us-ascii?Q?/lzcqvamAgcr2Dnbuq8qFFvl+5bCPpAYzZx/5vFo1iXeDIjn+GTmJruY4zcW?= =?us-ascii?Q?jg=3D=3D?= X-MS-Exchange-CrossTenant-Network-Message-Id: a88a03eb-0fd5-4213-a410-08dd8d37d8b6 X-MS-Exchange-CrossTenant-AuthSource: PH8PR11MB8107.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 May 2025 07:21:55.7100 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: te49GCt6SaNucNaGhts2jC1tQBjtwMqwa/CqOKrD217TavBjv7piEP2Hg21nZXWUJE9ywwWpyUdu3uo18YBQCiaa39GEktHOL09PqLXSPkY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR11MB8270 X-OriginatorOrg: intel.com Content-Type: text/plain; charset="utf-8" Introduce 'struct rw_semaphore_acquire' with the following helpers: [scoped_]guard(rwsem_read_acquire)(...) [scoped_]guard(rwsem_write_acquire)(...) CLASS(rwsem_read_intr_acquire, ...) CLASS(rwsem_write_kill_acquire, ...) CLASS(rwsem_read_try_acquire, ...) CLASS(rwsem_write_try_acquire, ...) ...and convert the CXL 'struct rw_semaphore' instances to 'struct rw_semaphore_acquire'. Recall that the "_acquire" flavor of locking primitives do not support explicit 'lock' and 'unlock' operations, only guard() and CLASS(). This mandates some pre-work before this mechanism can be adopted in a subsystem. Specifically, some explicit unlock patterns in the CXL subsystem (mid-function unlock and "reverse" locking patterns) were refactored into sequences that are amenable to scope-based unlock. The result is easier to read (once CLASS() semantics are understood) smaller code that avoids the re-indentation implied by scoped_cond_guard(). One nit though is that 'struct rw_semaphore_acquire' is not compatible with lockdep APIs. So, for now, open-code the type-conversion back to the raw 'struct rw_semaphore'. Cc: David Lechner Cc: Peter Zijlstra Cc: Linus Torvalds Cc: Ingo Molnar Cc: "Fabio M. De Francesco" Cc: Davidlohr Bueso Cc: Jonathan Cameron Cc: Dave Jiang Cc: Alison Schofield Cc: Vishal Verma Cc: Ira Weiny Signed-off-by: Dan Williams --- drivers/cxl/core/cdat.c | 6 +- drivers/cxl/core/core.h | 34 ++--- drivers/cxl/core/hdm.c | 38 +++-- drivers/cxl/core/mbox.c | 6 +- drivers/cxl/core/memdev.c | 62 ++++----- drivers/cxl/core/port.c | 12 +- drivers/cxl/core/region.c | 286 +++++++++++++++----------------------- include/linux/rwsem.h | 37 +++++ 8 files changed, 219 insertions(+), 262 deletions(-) diff --git a/drivers/cxl/core/cdat.c b/drivers/cxl/core/cdat.c index edb4f41eeacc..dadfcf6fb84c 100644 --- a/drivers/cxl/core/cdat.c +++ b/drivers/cxl/core/cdat.c @@ -336,7 +336,7 @@ static int match_cxlrd_hb(struct device *dev, void *dat= a) cxlrd =3D to_cxl_root_decoder(dev); cxlsd =3D &cxlrd->cxlsd; =20 - guard(rwsem_read)(&cxl_region_rwsem); + guard(rwsem_read_acquire)(&cxl_region_rwsem); for (int i =3D 0; i < cxlsd->nr_targets; i++) { if (host_bridge =3D=3D cxlsd->target[i]->dport_dev) return 1; @@ -987,7 +987,7 @@ void cxl_region_shared_upstream_bandwidth_update(struct= cxl_region *cxlr) bool is_root; int rc; =20 - lockdep_assert_held(&cxl_dpa_rwsem); + lockdep_assert_held(&cxl_dpa_rwsem.rw_semaphore); =20 struct xarray *usp_xa __free(free_perf_xa) =3D kzalloc(sizeof(*usp_xa), GFP_KERNEL); @@ -1057,7 +1057,7 @@ void cxl_region_perf_data_calculate(struct cxl_region= *cxlr, { struct cxl_dpa_perf *perf; =20 - lockdep_assert_held(&cxl_dpa_rwsem); + lockdep_assert_held(&cxl_dpa_rwsem.rw_semaphore); =20 perf =3D cxled_get_dpa_perf(cxled); if (IS_ERR(perf)) diff --git a/drivers/cxl/core/core.h b/drivers/cxl/core/core.h index 44b09552f44e..23afbbd650b7 100644 --- a/drivers/cxl/core/core.h +++ b/drivers/cxl/core/core.h @@ -107,8 +107,8 @@ u16 cxl_rcrb_to_aer(struct device *dev, resource_size_t= rcrb); #define PCI_RCRB_CAP_HDR_NEXT_MASK GENMASK(15, 8) #define PCI_CAP_EXP_SIZEOF 0x3c =20 -extern struct rw_semaphore cxl_dpa_rwsem; -extern struct rw_semaphore cxl_region_rwsem; +extern struct rw_semaphore_acquire cxl_dpa_rwsem; +extern struct rw_semaphore_acquire cxl_region_rwsem; =20 DEFINE_CLASS( cxl_decoder_detach, struct cxl_region *, @@ -117,22 +117,24 @@ DEFINE_CLASS( put_device(&_T->dev); }, ({ - int rc =3D 0; - /* when the decoder is being destroyed lock unconditionally */ - if (mode =3D=3D DETACH_INVALIDATE) - down_write(&cxl_region_rwsem); - else - rc =3D down_write_killable(&cxl_region_rwsem); - - if (rc) - cxlr =3D ERR_PTR(rc); - else { - cxlr =3D cxl_decoder_detach(cxlr, cxled, pos, mode); - get_device(&cxlr->dev); + if (mode =3D=3D DETACH_INVALIDATE) { + scoped_guard(rwsem_write_acquire, &cxl_region_rwsem) { + cxlr =3D cxl_decoder_detach(cxlr, cxled, pos, + mode); + if (!IS_ERR_OR_NULL(cxlr)) + get_device(&cxlr->dev); + } + } else { + CLASS(rwsem_write_kill_acquire, rwsem)(&cxl_region_rwsem); + if (IS_ERR(rwsem)) + cxlr =3D ERR_CAST(rwsem); + else + cxlr =3D cxl_decoder_detach(cxlr, cxled, pos, + mode); + if (!IS_ERR_OR_NULL(cxlr)) + get_device(&cxlr->dev); } - up_write(&cxl_region_rwsem); - cxlr; }), struct cxl_region *cxlr, struct cxl_endpoint_decoder *cxled, int pos, diff --git a/drivers/cxl/core/hdm.c b/drivers/cxl/core/hdm.c index 1c195f495a59..1624f066fde5 100644 --- a/drivers/cxl/core/hdm.c +++ b/drivers/cxl/core/hdm.c @@ -16,7 +16,7 @@ * for enumerating these registers and capabilities. */ =20 -DECLARE_RWSEM(cxl_dpa_rwsem); +DECLARE_RWSEM_ACQUIRE(cxl_dpa_rwsem); =20 static int add_hdm_decoder(struct cxl_port *port, struct cxl_decoder *cxld, int *target_map) @@ -213,7 +213,7 @@ void cxl_dpa_debug(struct seq_file *file, struct cxl_de= v_state *cxlds) { struct resource *p1, *p2; =20 - guard(rwsem_read)(&cxl_dpa_rwsem); + guard(rwsem_read_acquire)(&cxl_dpa_rwsem); for (p1 =3D cxlds->dpa_res.child; p1; p1 =3D p1->sibling) { __cxl_dpa_debug(file, p1, 0); for (p2 =3D p1->child; p2; p2 =3D p2->sibling) @@ -265,7 +265,7 @@ static void __cxl_dpa_release(struct cxl_endpoint_decod= er *cxled) struct resource *res =3D cxled->dpa_res; resource_size_t skip_start; =20 - lockdep_assert_held_write(&cxl_dpa_rwsem); + lockdep_assert_held_write(&cxl_dpa_rwsem.rw_semaphore); =20 /* save @skip_start, before @res is released */ skip_start =3D res->start - cxled->skip; @@ -280,7 +280,7 @@ static void __cxl_dpa_release(struct cxl_endpoint_decod= er *cxled) =20 static void cxl_dpa_release(void *cxled) { - guard(rwsem_write)(&cxl_dpa_rwsem); + guard(rwsem_write_acquire)(&cxl_dpa_rwsem); __cxl_dpa_release(cxled); } =20 @@ -292,7 +292,7 @@ static void devm_cxl_dpa_release(struct cxl_endpoint_de= coder *cxled) { struct cxl_port *port =3D cxled_to_port(cxled); =20 - lockdep_assert_held_write(&cxl_dpa_rwsem); + lockdep_assert_held_write(&cxl_dpa_rwsem.rw_semaphore); devm_remove_action(&port->dev, cxl_dpa_release, cxled); __cxl_dpa_release(cxled); } @@ -360,7 +360,7 @@ static int __cxl_dpa_reserve(struct cxl_endpoint_decode= r *cxled, struct resource *res; int rc; =20 - lockdep_assert_held_write(&cxl_dpa_rwsem); + lockdep_assert_held_write(&cxl_dpa_rwsem.rw_semaphore); =20 if (!len) { dev_warn(dev, "decoder%d.%d: empty reservation attempted\n", @@ -469,7 +469,7 @@ int cxl_dpa_setup(struct cxl_dev_state *cxlds, const st= ruct cxl_dpa_info *info) { struct device *dev =3D cxlds->dev; =20 - guard(rwsem_write)(&cxl_dpa_rwsem); + guard(rwsem_write_acquire)(&cxl_dpa_rwsem); =20 if (cxlds->nr_partitions) return -EBUSY; @@ -515,9 +515,8 @@ int devm_cxl_dpa_reserve(struct cxl_endpoint_decoder *c= xled, struct cxl_port *port =3D cxled_to_port(cxled); int rc; =20 - down_write(&cxl_dpa_rwsem); - rc =3D __cxl_dpa_reserve(cxled, base, len, skipped); - up_write(&cxl_dpa_rwsem); + scoped_guard(rwsem_write_acquire, &cxl_dpa_rwsem) + rc =3D __cxl_dpa_reserve(cxled, base, len, skipped); =20 if (rc) return rc; @@ -528,7 +527,7 @@ EXPORT_SYMBOL_NS_GPL(devm_cxl_dpa_reserve, "CXL"); =20 resource_size_t cxl_dpa_size(struct cxl_endpoint_decoder *cxled) { - guard(rwsem_read)(&cxl_dpa_rwsem); + guard(rwsem_read_acquire)(&cxl_dpa_rwsem); if (cxled->dpa_res) return resource_size(cxled->dpa_res); =20 @@ -539,7 +538,7 @@ resource_size_t cxl_dpa_resource_start(struct cxl_endpo= int_decoder *cxled) { resource_size_t base =3D -1; =20 - lockdep_assert_held(&cxl_dpa_rwsem); + lockdep_assert_held(&cxl_dpa_rwsem.rw_semaphore); if (cxled->dpa_res) base =3D cxled->dpa_res->start; =20 @@ -551,7 +550,7 @@ int cxl_dpa_free(struct cxl_endpoint_decoder *cxled) struct cxl_port *port =3D cxled_to_port(cxled); struct device *dev =3D &cxled->cxld.dev; =20 - guard(rwsem_write)(&cxl_dpa_rwsem); + guard(rwsem_write_acquire)(&cxl_dpa_rwsem); if (!cxled->dpa_res) return 0; if (cxled->cxld.region) { @@ -581,7 +580,7 @@ int cxl_dpa_set_part(struct cxl_endpoint_decoder *cxled, struct device *dev =3D &cxled->cxld.dev; int part; =20 - guard(rwsem_write)(&cxl_dpa_rwsem); + guard(rwsem_write_acquire)(&cxl_dpa_rwsem); if (cxled->cxld.flags & CXL_DECODER_F_ENABLE) return -EBUSY; =20 @@ -613,7 +612,7 @@ static int __cxl_dpa_alloc(struct cxl_endpoint_decoder = *cxled, unsigned long lon struct resource *p, *last; int part; =20 - guard(rwsem_write)(&cxl_dpa_rwsem); + guard(rwsem_write_acquire)(&cxl_dpa_rwsem); if (cxled->cxld.region) { dev_dbg(dev, "decoder attached to %s\n", dev_name(&cxled->cxld.region->dev)); @@ -841,9 +840,8 @@ static int cxl_decoder_commit(struct cxl_decoder *cxld) } } =20 - down_read(&cxl_dpa_rwsem); - setup_hw_decoder(cxld, hdm); - up_read(&cxl_dpa_rwsem); + scoped_guard(rwsem_read_acquire, &cxl_dpa_rwsem) + setup_hw_decoder(cxld, hdm); =20 port->commit_end++; rc =3D cxld_await_commit(hdm, cxld->id); @@ -881,7 +879,7 @@ void cxl_port_commit_reap(struct cxl_decoder *cxld) { struct cxl_port *port =3D to_cxl_port(cxld->dev.parent); =20 - lockdep_assert_held_write(&cxl_region_rwsem); + lockdep_assert_held_write(&cxl_region_rwsem.rw_semaphore); =20 /* * Once the highest committed decoder is disabled, free any other @@ -1029,7 +1027,7 @@ static int init_hdm_decoder(struct cxl_port *port, st= ruct cxl_decoder *cxld, else cxld->target_type =3D CXL_DECODER_DEVMEM; =20 - guard(rwsem_write)(&cxl_region_rwsem); + guard(rwsem_write_acquire)(&cxl_region_rwsem); if (cxld->id !=3D cxl_num_decoders_committed(port)) { dev_warn(&port->dev, "decoder%d.%d: Committed out of order\n", diff --git a/drivers/cxl/core/mbox.c b/drivers/cxl/core/mbox.c index cec9dfb22567..9f17e9072e60 100644 --- a/drivers/cxl/core/mbox.c +++ b/drivers/cxl/core/mbox.c @@ -909,8 +909,8 @@ void cxl_event_trace_record(const struct cxl_memdev *cx= lmd, * translations. Take topology mutation locks and lookup * { HPA, REGION } from { DPA, MEMDEV } in the event record. */ - guard(rwsem_read)(&cxl_region_rwsem); - guard(rwsem_read)(&cxl_dpa_rwsem); + guard(rwsem_read_acquire)(&cxl_region_rwsem); + guard(rwsem_read_acquire)(&cxl_dpa_rwsem); =20 dpa =3D le64_to_cpu(evt->media_hdr.phys_addr) & CXL_DPA_MASK; cxlr =3D cxl_dpa_to_region(cxlmd, dpa); @@ -1258,7 +1258,7 @@ int cxl_mem_sanitize(struct cxl_memdev *cxlmd, u16 cm= d) /* synchronize with cxl_mem_probe() and decoder write operations */ guard(device)(&cxlmd->dev); endpoint =3D cxlmd->endpoint; - guard(rwsem_read)(&cxl_region_rwsem); + guard(rwsem_read_acquire)(&cxl_region_rwsem); /* * Require an endpoint to be safe otherwise the driver can not * be sure that the device is unmapped. diff --git a/drivers/cxl/core/memdev.c b/drivers/cxl/core/memdev.c index a16a5886d40a..8183f8099f89 100644 --- a/drivers/cxl/core/memdev.c +++ b/drivers/cxl/core/memdev.c @@ -231,15 +231,13 @@ int cxl_trigger_poison_list(struct cxl_memdev *cxlmd) if (!port || !is_cxl_endpoint(port)) return -EINVAL; =20 - rc =3D down_read_interruptible(&cxl_region_rwsem); - if (rc) - return rc; + CLASS(rwsem_read_intr_acquire, region_rwsem)(&cxl_region_rwsem); + if (IS_ERR(region_rwsem)) + return PTR_ERR(region_rwsem); =20 - rc =3D down_read_interruptible(&cxl_dpa_rwsem); - if (rc) { - up_read(&cxl_region_rwsem); - return rc; - } + CLASS(rwsem_read_intr_acquire, dpa_rwsem)(&cxl_dpa_rwsem); + if (IS_ERR(dpa_rwsem)) + return PTR_ERR(dpa_rwsem); =20 if (cxl_num_decoders_committed(port) =3D=3D 0) { /* No regions mapped to this memdev */ @@ -248,8 +246,6 @@ int cxl_trigger_poison_list(struct cxl_memdev *cxlmd) /* Regions mapped, collect poison by endpoint */ rc =3D cxl_get_poison_by_endpoint(port); } - up_read(&cxl_dpa_rwsem); - up_read(&cxl_region_rwsem); =20 return rc; } @@ -291,19 +287,17 @@ int cxl_inject_poison(struct cxl_memdev *cxlmd, u64 d= pa) if (!IS_ENABLED(CONFIG_DEBUG_FS)) return 0; =20 - rc =3D down_read_interruptible(&cxl_region_rwsem); - if (rc) - return rc; + CLASS(rwsem_read_intr_acquire, region_rwsem)(&cxl_region_rwsem); + if (IS_ERR(region_rwsem)) + return PTR_ERR(region_rwsem); =20 - rc =3D down_read_interruptible(&cxl_dpa_rwsem); - if (rc) { - up_read(&cxl_region_rwsem); - return rc; - } + CLASS(rwsem_read_intr_acquire, dpa_rwsem)(&cxl_dpa_rwsem); + if (IS_ERR(dpa_rwsem)) + return PTR_ERR(dpa_rwsem); =20 rc =3D cxl_validate_poison_dpa(cxlmd, dpa); if (rc) - goto out; + return rc; =20 inject.address =3D cpu_to_le64(dpa); mbox_cmd =3D (struct cxl_mbox_cmd) { @@ -313,7 +307,7 @@ int cxl_inject_poison(struct cxl_memdev *cxlmd, u64 dpa) }; rc =3D cxl_internal_send_cmd(cxl_mbox, &mbox_cmd); if (rc) - goto out; + return rc; =20 cxlr =3D cxl_dpa_to_region(cxlmd, dpa); if (cxlr) @@ -326,11 +320,8 @@ int cxl_inject_poison(struct cxl_memdev *cxlmd, u64 dp= a) .length =3D cpu_to_le32(1), }; trace_cxl_poison(cxlmd, cxlr, &record, 0, 0, CXL_POISON_TRACE_INJECT); -out: - up_read(&cxl_dpa_rwsem); - up_read(&cxl_region_rwsem); =20 - return rc; + return 0; } EXPORT_SYMBOL_NS_GPL(cxl_inject_poison, "CXL"); =20 @@ -346,19 +337,17 @@ int cxl_clear_poison(struct cxl_memdev *cxlmd, u64 dp= a) if (!IS_ENABLED(CONFIG_DEBUG_FS)) return 0; =20 - rc =3D down_read_interruptible(&cxl_region_rwsem); - if (rc) - return rc; + CLASS(rwsem_read_intr_acquire, region_rwsem)(&cxl_region_rwsem); + if (IS_ERR(region_rwsem)) + return PTR_ERR(region_rwsem); =20 - rc =3D down_read_interruptible(&cxl_dpa_rwsem); - if (rc) { - up_read(&cxl_region_rwsem); - return rc; - } + CLASS(rwsem_read_intr_acquire, dpa_rwsem)(&cxl_dpa_rwsem); + if (IS_ERR(dpa_rwsem)) + return PTR_ERR(dpa_rwsem); =20 rc =3D cxl_validate_poison_dpa(cxlmd, dpa); if (rc) - goto out; + return rc; =20 /* * In CXL 3.0 Spec 8.2.9.8.4.3, the Clear Poison mailbox command @@ -377,7 +366,7 @@ int cxl_clear_poison(struct cxl_memdev *cxlmd, u64 dpa) =20 rc =3D cxl_internal_send_cmd(cxl_mbox, &mbox_cmd); if (rc) - goto out; + return rc; =20 cxlr =3D cxl_dpa_to_region(cxlmd, dpa); if (cxlr) @@ -390,11 +379,8 @@ int cxl_clear_poison(struct cxl_memdev *cxlmd, u64 dpa) .length =3D cpu_to_le32(1), }; trace_cxl_poison(cxlmd, cxlr, &record, 0, 0, CXL_POISON_TRACE_CLEAR); -out: - up_read(&cxl_dpa_rwsem); - up_read(&cxl_region_rwsem); =20 - return rc; + return 0; } EXPORT_SYMBOL_NS_GPL(cxl_clear_poison, "CXL"); =20 diff --git a/drivers/cxl/core/port.c b/drivers/cxl/core/port.c index 20b65f13bded..a157aef2cd06 100644 --- a/drivers/cxl/core/port.c +++ b/drivers/cxl/core/port.c @@ -34,14 +34,14 @@ * All changes to the interleave configuration occur with this lock held * for write. */ -DECLARE_RWSEM(cxl_region_rwsem); +DECLARE_RWSEM_ACQUIRE(cxl_region_rwsem); =20 static DEFINE_IDA(cxl_port_ida); static DEFINE_XARRAY(cxl_root_buses); =20 int cxl_num_decoders_committed(struct cxl_port *port) { - lockdep_assert_held(&cxl_region_rwsem); + lockdep_assert_held(&cxl_region_rwsem.rw_semaphore); =20 return port->commit_end + 1; } @@ -176,7 +176,7 @@ static ssize_t target_list_show(struct device *dev, ssize_t offset; int rc; =20 - guard(rwsem_read)(&cxl_region_rwsem); + guard(rwsem_read_acquire)(&cxl_region_rwsem); rc =3D emit_target_list(cxlsd, buf); if (rc < 0) return rc; @@ -235,7 +235,7 @@ static ssize_t dpa_resource_show(struct device *dev, st= ruct device_attribute *at { struct cxl_endpoint_decoder *cxled =3D to_cxl_endpoint_decoder(dev); =20 - guard(rwsem_read)(&cxl_dpa_rwsem); + guard(rwsem_read_acquire)(&cxl_dpa_rwsem); return sysfs_emit(buf, "%#llx\n", (u64)cxl_dpa_resource_start(cxled)); } static DEVICE_ATTR_RO(dpa_resource); @@ -560,7 +560,7 @@ static ssize_t decoders_committed_show(struct device *d= ev, { struct cxl_port *port =3D to_cxl_port(dev); =20 - guard(rwsem_read)(&cxl_region_rwsem); + guard(rwsem_read_acquire)(&cxl_region_rwsem); return sysfs_emit(buf, "%d\n", cxl_num_decoders_committed(port)); } =20 @@ -1729,7 +1729,7 @@ static int decoder_populate_targets(struct cxl_switch= _decoder *cxlsd, if (xa_empty(&port->dports)) return -EINVAL; =20 - guard(rwsem_write)(&cxl_region_rwsem); + guard(rwsem_write_acquire)(&cxl_region_rwsem); for (i =3D 0; i < cxlsd->cxld.interleave_ways; i++) { struct cxl_dport *dport =3D find_dport(port, target_map[i]); =20 diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c index 17e69f6cc772..65313a3548e4 100644 --- a/drivers/cxl/core/region.c +++ b/drivers/cxl/core/region.c @@ -139,18 +139,13 @@ static ssize_t uuid_show(struct device *dev, struct d= evice_attribute *attr, { struct cxl_region *cxlr =3D to_cxl_region(dev); struct cxl_region_params *p =3D &cxlr->params; - ssize_t rc; =20 - rc =3D down_read_interruptible(&cxl_region_rwsem); - if (rc) - return rc; + CLASS(rwsem_read_intr_acquire, region_rwsem)(&cxl_region_rwsem); + if (IS_ERR(region_rwsem)) + return PTR_ERR(region_rwsem); if (cxlr->mode !=3D CXL_PARTMODE_PMEM) - rc =3D sysfs_emit(buf, "\n"); - else - rc =3D sysfs_emit(buf, "%pUb\n", &p->uuid); - up_read(&cxl_region_rwsem); - - return rc; + return sysfs_emit(buf, "\n"); + return sysfs_emit(buf, "%pUb\n", &p->uuid); } =20 static int is_dup(struct device *match, void *data) @@ -162,7 +157,7 @@ static int is_dup(struct device *match, void *data) if (!is_cxl_region(match)) return 0; =20 - lockdep_assert_held(&cxl_region_rwsem); + lockdep_assert_held(&cxl_region_rwsem.rw_semaphore); cxlr =3D to_cxl_region(match); p =3D &cxlr->params; =20 @@ -192,27 +187,22 @@ static ssize_t uuid_store(struct device *dev, struct = device_attribute *attr, if (uuid_is_null(&temp)) return -EINVAL; =20 - rc =3D down_write_killable(&cxl_region_rwsem); - if (rc) - return rc; + CLASS(rwsem_write_kill_acquire, region_rwsem)(&cxl_region_rwsem); + if (IS_ERR(region_rwsem)) + return PTR_ERR(region_rwsem); =20 if (uuid_equal(&p->uuid, &temp)) - goto out; + return len; =20 - rc =3D -EBUSY; if (p->state >=3D CXL_CONFIG_ACTIVE) - goto out; + return -EBUSY; =20 rc =3D bus_for_each_dev(&cxl_bus_type, NULL, &temp, is_dup); if (rc < 0) - goto out; + return rc; =20 uuid_copy(&p->uuid, &temp); -out: - up_write(&cxl_region_rwsem); =20 - if (rc) - return rc; return len; } static DEVICE_ATTR_RW(uuid); @@ -353,22 +343,18 @@ static int cxl_region_decode_commit(struct cxl_region= *cxlr) static int queue_reset(struct cxl_region *cxlr) { struct cxl_region_params *p =3D &cxlr->params; - int rc; =20 - rc =3D down_write_killable(&cxl_region_rwsem); - if (rc) - return rc; + CLASS(rwsem_write_kill_acquire, rwsem)(&cxl_region_rwsem); + if (IS_ERR(rwsem)) + return PTR_ERR(rwsem); =20 /* Already in the requested state? */ if (p->state < CXL_CONFIG_COMMIT) - goto out; + return 0; =20 p->state =3D CXL_CONFIG_RESET_PENDING; =20 -out: - up_write(&cxl_region_rwsem); - - return rc; + return 0; } =20 static int __commit(struct cxl_region *cxlr) @@ -376,19 +362,17 @@ static int __commit(struct cxl_region *cxlr) struct cxl_region_params *p =3D &cxlr->params; int rc; =20 - rc =3D down_write_killable(&cxl_region_rwsem); - if (rc) - return rc; + CLASS(rwsem_write_kill_acquire, rwsem)(&cxl_region_rwsem); + if (IS_ERR(rwsem)) + return PTR_ERR(rwsem); =20 /* Already in the requested state? */ if (p->state >=3D CXL_CONFIG_COMMIT) - goto out; + return 0; =20 /* Not ready to commit? */ - if (p->state < CXL_CONFIG_ACTIVE) { - rc =3D -ENXIO; - goto out; - } + if (p->state < CXL_CONFIG_ACTIVE) + return -ENXIO; =20 /* * Invalidate caches before region setup to drop any speculative @@ -396,16 +380,15 @@ static int __commit(struct cxl_region *cxlr) */ rc =3D cxl_region_invalidate_memregion(cxlr); if (rc) - goto out; + return rc; =20 rc =3D cxl_region_decode_commit(cxlr); - if (rc =3D=3D 0) - p->state =3D CXL_CONFIG_COMMIT; + if (rc) + return rc; =20 -out: - up_write(&cxl_region_rwsem); + p->state =3D CXL_CONFIG_COMMIT; =20 - return rc; + return 0; } =20 static ssize_t commit_store(struct device *dev, struct device_attribute *a= ttr, @@ -441,7 +424,7 @@ static ssize_t commit_store(struct device *dev, struct = device_attribute *attr, * With the reset pending take cxl_region_rwsem unconditionally * to ensure the reset gets handled before returning. */ - guard(rwsem_write)(&cxl_region_rwsem); + guard(rwsem_write_acquire)(&cxl_region_rwsem); =20 /* * Revalidate that the reset is still pending in case another @@ -460,15 +443,11 @@ static ssize_t commit_show(struct device *dev, struct= device_attribute *attr, { struct cxl_region *cxlr =3D to_cxl_region(dev); struct cxl_region_params *p =3D &cxlr->params; - ssize_t rc; =20 - rc =3D down_read_interruptible(&cxl_region_rwsem); - if (rc) - return rc; - rc =3D sysfs_emit(buf, "%d\n", p->state >=3D CXL_CONFIG_COMMIT); - up_read(&cxl_region_rwsem); - - return rc; + CLASS(rwsem_read_intr_acquire, rwsem)(&cxl_region_rwsem); + if (IS_ERR(rwsem)) + return PTR_ERR(rwsem); + return sysfs_emit(buf, "%d\n", p->state >=3D CXL_CONFIG_COMMIT); } static DEVICE_ATTR_RW(commit); =20 @@ -492,15 +471,11 @@ static ssize_t interleave_ways_show(struct device *de= v, { struct cxl_region *cxlr =3D to_cxl_region(dev); struct cxl_region_params *p =3D &cxlr->params; - ssize_t rc; - - rc =3D down_read_interruptible(&cxl_region_rwsem); - if (rc) - return rc; - rc =3D sysfs_emit(buf, "%d\n", p->interleave_ways); - up_read(&cxl_region_rwsem); =20 - return rc; + CLASS(rwsem_read_intr_acquire, rwsem)(&cxl_region_rwsem); + if (IS_ERR(rwsem)) + return PTR_ERR(rwsem); + return sysfs_emit(buf, "%d\n", p->interleave_ways); } =20 static const struct attribute_group *get_cxl_region_target_group(void); @@ -535,23 +510,21 @@ static ssize_t interleave_ways_store(struct device *d= ev, return -EINVAL; } =20 - rc =3D down_write_killable(&cxl_region_rwsem); - if (rc) - return rc; - if (p->state >=3D CXL_CONFIG_INTERLEAVE_ACTIVE) { - rc =3D -EBUSY; - goto out; - } + CLASS(rwsem_write_kill_acquire, rwsem)(&cxl_region_rwsem); + if (IS_ERR(rwsem)) + return PTR_ERR(rwsem); + + if (p->state >=3D CXL_CONFIG_INTERLEAVE_ACTIVE) + return -EBUSY; =20 save =3D p->interleave_ways; p->interleave_ways =3D val; rc =3D sysfs_update_group(&cxlr->dev.kobj, get_cxl_region_target_group()); - if (rc) + if (rc) { p->interleave_ways =3D save; -out: - up_write(&cxl_region_rwsem); - if (rc) return rc; + } + return len; } static DEVICE_ATTR_RW(interleave_ways); @@ -562,15 +535,11 @@ static ssize_t interleave_granularity_show(struct dev= ice *dev, { struct cxl_region *cxlr =3D to_cxl_region(dev); struct cxl_region_params *p =3D &cxlr->params; - ssize_t rc; =20 - rc =3D down_read_interruptible(&cxl_region_rwsem); - if (rc) - return rc; - rc =3D sysfs_emit(buf, "%d\n", p->interleave_granularity); - up_read(&cxl_region_rwsem); - - return rc; + CLASS(rwsem_read_intr_acquire, rwsem)(&cxl_region_rwsem); + if (IS_ERR(rwsem)) + return PTR_ERR(rwsem); + return sysfs_emit(buf, "%d\n", p->interleave_granularity); } =20 static ssize_t interleave_granularity_store(struct device *dev, @@ -603,19 +572,15 @@ static ssize_t interleave_granularity_store(struct de= vice *dev, if (cxld->interleave_ways > 1 && val !=3D cxld->interleave_granularity) return -EINVAL; =20 - rc =3D down_write_killable(&cxl_region_rwsem); - if (rc) - return rc; - if (p->state >=3D CXL_CONFIG_INTERLEAVE_ACTIVE) { - rc =3D -EBUSY; - goto out; - } + CLASS(rwsem_write_kill_acquire, rwsem)(&cxl_region_rwsem); + if (IS_ERR(rwsem)) + return PTR_ERR(rwsem); + + if (p->state >=3D CXL_CONFIG_INTERLEAVE_ACTIVE) + return -EBUSY; =20 p->interleave_granularity =3D val; -out: - up_write(&cxl_region_rwsem); - if (rc) - return rc; + return len; } static DEVICE_ATTR_RW(interleave_granularity); @@ -626,17 +591,14 @@ static ssize_t resource_show(struct device *dev, stru= ct device_attribute *attr, struct cxl_region *cxlr =3D to_cxl_region(dev); struct cxl_region_params *p =3D &cxlr->params; u64 resource =3D -1ULL; - ssize_t rc; =20 - rc =3D down_read_interruptible(&cxl_region_rwsem); - if (rc) - return rc; + CLASS(rwsem_read_intr_acquire, rwsem)(&cxl_region_rwsem); + if (IS_ERR(rwsem)) + return PTR_ERR(rwsem); + if (p->res) resource =3D p->res->start; - rc =3D sysfs_emit(buf, "%#llx\n", resource); - up_read(&cxl_region_rwsem); - - return rc; + return sysfs_emit(buf, "%#llx\n", resource); } static DEVICE_ATTR_RO(resource); =20 @@ -664,7 +626,7 @@ static int alloc_hpa(struct cxl_region *cxlr, resource_= size_t size) struct resource *res; u64 remainder =3D 0; =20 - lockdep_assert_held_write(&cxl_region_rwsem); + lockdep_assert_held_write(&cxl_region_rwsem.rw_semaphore); =20 /* Nothing to do... */ if (p->res && resource_size(p->res) =3D=3D size) @@ -706,7 +668,7 @@ static void cxl_region_iomem_release(struct cxl_region = *cxlr) struct cxl_region_params *p =3D &cxlr->params; =20 if (device_is_registered(&cxlr->dev)) - lockdep_assert_held_write(&cxl_region_rwsem); + lockdep_assert_held_write(&cxl_region_rwsem.rw_semaphore); if (p->res) { /* * Autodiscovered regions may not have been able to insert their @@ -723,7 +685,7 @@ static int free_hpa(struct cxl_region *cxlr) { struct cxl_region_params *p =3D &cxlr->params; =20 - lockdep_assert_held_write(&cxl_region_rwsem); + lockdep_assert_held_write(&cxl_region_rwsem.rw_semaphore); =20 if (!p->res) return 0; @@ -747,15 +709,14 @@ static ssize_t size_store(struct device *dev, struct = device_attribute *attr, if (rc) return rc; =20 - rc =3D down_write_killable(&cxl_region_rwsem); - if (rc) - return rc; + CLASS(rwsem_write_kill_acquire, rwsem)(&cxl_region_rwsem); + if (IS_ERR(rwsem)) + return PTR_ERR(rwsem); =20 if (val) rc =3D alloc_hpa(cxlr, val); else rc =3D free_hpa(cxlr); - up_write(&cxl_region_rwsem); =20 if (rc) return rc; @@ -769,17 +730,13 @@ static ssize_t size_show(struct device *dev, struct d= evice_attribute *attr, struct cxl_region *cxlr =3D to_cxl_region(dev); struct cxl_region_params *p =3D &cxlr->params; u64 size =3D 0; - ssize_t rc; =20 - rc =3D down_read_interruptible(&cxl_region_rwsem); - if (rc) - return rc; + CLASS(rwsem_read_intr_acquire, rwsem)(&cxl_region_rwsem); + if (IS_ERR(rwsem)) + return PTR_ERR(rwsem); if (p->res) size =3D resource_size(p->res); - rc =3D sysfs_emit(buf, "%#llx\n", size); - up_read(&cxl_region_rwsem); - - return rc; + return sysfs_emit(buf, "%#llx\n", size); } static DEVICE_ATTR_RW(size); =20 @@ -803,28 +760,21 @@ static size_t show_targetN(struct cxl_region *cxlr, c= har *buf, int pos) { struct cxl_region_params *p =3D &cxlr->params; struct cxl_endpoint_decoder *cxled; - int rc; =20 - rc =3D down_read_interruptible(&cxl_region_rwsem); - if (rc) - return rc; + CLASS(rwsem_read_intr_acquire, rwsem)(&cxl_region_rwsem); + if (IS_ERR(rwsem)) + return PTR_ERR(rwsem); =20 if (pos >=3D p->interleave_ways) { dev_dbg(&cxlr->dev, "position %d out of range %d\n", pos, p->interleave_ways); - rc =3D -ENXIO; - goto out; + return -ENXIO; } =20 cxled =3D p->targets[pos]; if (!cxled) - rc =3D sysfs_emit(buf, "\n"); - else - rc =3D sysfs_emit(buf, "%s\n", dev_name(&cxled->cxld.dev)); -out: - up_read(&cxl_region_rwsem); - - return rc; + return sysfs_emit(buf, "\n"); + return sysfs_emit(buf, "%s\n", dev_name(&cxled->cxld.dev)); } =20 static int check_commit_order(struct device *dev, void *data) @@ -1127,7 +1077,7 @@ static int cxl_port_attach_region(struct cxl_port *po= rt, unsigned long index; int rc =3D -EBUSY; =20 - lockdep_assert_held_write(&cxl_region_rwsem); + lockdep_assert_held_write(&cxl_region_rwsem.rw_semaphore); =20 cxl_rr =3D cxl_rr_load(port, cxlr); if (cxl_rr) { @@ -1228,7 +1178,7 @@ static void cxl_port_detach_region(struct cxl_port *p= ort, struct cxl_region_ref *cxl_rr; struct cxl_ep *ep =3D NULL; =20 - lockdep_assert_held_write(&cxl_region_rwsem); + lockdep_assert_held_write(&cxl_region_rwsem.rw_semaphore); =20 cxl_rr =3D cxl_rr_load(port, cxlr); if (!cxl_rr) @@ -2137,7 +2087,7 @@ struct cxl_region *cxl_decoder_detach(struct cxl_regi= on *cxlr, { struct cxl_region_params *p; =20 - lockdep_assert_held_write(&cxl_region_rwsem); + lockdep_assert_held_write(&cxl_region_rwsem.rw_semaphore); =20 if (!cxled) { p =3D &cxlr->params; @@ -2199,20 +2149,17 @@ static int attach_target(struct cxl_region *cxlr, struct cxl_endpoint_decoder *cxled, int pos, unsigned int state) { - int rc =3D 0; - - if (state =3D=3D TASK_INTERRUPTIBLE) - rc =3D down_write_killable(&cxl_region_rwsem); - else - down_write(&cxl_region_rwsem); - if (rc) - return rc; + if (state =3D=3D TASK_INTERRUPTIBLE) { + CLASS(rwsem_write_kill_acquire, rwsem)(&cxl_region_rwsem); + if (IS_ERR(rwsem)) + return PTR_ERR(rwsem); + guard(rwsem_read_acquire)(&cxl_dpa_rwsem); + return cxl_region_attach(cxlr, cxled, pos); + } =20 - down_read(&cxl_dpa_rwsem); - rc =3D cxl_region_attach(cxlr, cxled, pos); - up_read(&cxl_dpa_rwsem); - up_write(&cxl_region_rwsem); - return rc; + guard(rwsem_write_acquire)(&cxl_region_rwsem); + guard(rwsem_read_acquire)(&cxl_dpa_rwsem); + return cxl_region_attach(cxlr, cxled, pos); } =20 static int detach_target(struct cxl_region *cxlr, int pos) @@ -2644,19 +2591,14 @@ static ssize_t region_show(struct device *dev, stru= ct device_attribute *attr, char *buf) { struct cxl_decoder *cxld =3D to_cxl_decoder(dev); - ssize_t rc; =20 - rc =3D down_read_interruptible(&cxl_region_rwsem); - if (rc) - return rc; + CLASS(rwsem_read_intr_acquire, rwsem)(&cxl_region_rwsem); + if (IS_ERR(rwsem)) + return PTR_ERR(rwsem); =20 if (cxld->region) - rc =3D sysfs_emit(buf, "%s\n", dev_name(&cxld->region->dev)); - else - rc =3D sysfs_emit(buf, "\n"); - up_read(&cxl_region_rwsem); - - return rc; + return sysfs_emit(buf, "%s\n", dev_name(&cxld->region->dev)); + return sysfs_emit(buf, "\n"); } DEVICE_ATTR_RO(region); =20 @@ -2995,7 +2937,7 @@ static int cxl_pmem_region_alloc(struct cxl_region *c= xlr) struct device *dev; int i; =20 - guard(rwsem_read)(&cxl_region_rwsem); + guard(rwsem_read_acquire)(&cxl_region_rwsem); if (p->state !=3D CXL_CONFIG_COMMIT) return -ENXIO; =20 @@ -3084,7 +3026,7 @@ static struct cxl_dax_region *cxl_dax_region_alloc(st= ruct cxl_region *cxlr) struct cxl_dax_region *cxlr_dax; struct device *dev; =20 - guard(rwsem_read)(&cxl_region_rwsem); + guard(rwsem_read_acquire)(&cxl_region_rwsem); if (p->state !=3D CXL_CONFIG_COMMIT) return ERR_PTR(-ENXIO); =20 @@ -3255,7 +3197,7 @@ static int match_region_by_range(struct device *dev, = const void *data) cxlr =3D to_cxl_region(dev); p =3D &cxlr->params; =20 - guard(rwsem_read)(&cxl_region_rwsem); + guard(rwsem_read_acquire)(&cxl_region_rwsem); if (p->res && p->res->start =3D=3D r->start && p->res->end =3D=3D r->end) return 1; =20 @@ -3315,7 +3257,7 @@ static int __construct_region(struct cxl_region *cxlr, struct resource *res; int rc; =20 - guard(rwsem_write)(&cxl_region_rwsem); + guard(rwsem_write_acquire)(&cxl_region_rwsem); p =3D &cxlr->params; if (p->state >=3D CXL_CONFIG_INTERLEAVE_ACTIVE) { dev_err(cxlmd->dev.parent, @@ -3453,10 +3395,10 @@ int cxl_add_to_region(struct cxl_port *root, struct= cxl_endpoint_decoder *cxled) =20 attach_target(cxlr, cxled, -1, TASK_UNINTERRUPTIBLE); =20 - down_read(&cxl_region_rwsem); - p =3D &cxlr->params; - attach =3D p->state =3D=3D CXL_CONFIG_COMMIT; - up_read(&cxl_region_rwsem); + scoped_guard(rwsem_read_acquire, &cxl_region_rwsem) { + p =3D &cxlr->params; + attach =3D p->state =3D=3D CXL_CONFIG_COMMIT; + } =20 if (attach) { /* @@ -3484,7 +3426,7 @@ u64 cxl_port_get_spa_cache_alias(struct cxl_port *end= point, u64 spa) if (!endpoint) return ~0ULL; =20 - guard(rwsem_write)(&cxl_region_rwsem); + guard(rwsem_write_acquire)(&cxl_region_rwsem); =20 xa_for_each(&endpoint->regions, index, iter) { struct cxl_region_params *p =3D &iter->region->params; @@ -3524,32 +3466,24 @@ static void shutdown_notifiers(void *_cxlr) static int cxl_region_can_probe(struct cxl_region *cxlr) { struct cxl_region_params *p =3D &cxlr->params; - int rc; =20 - rc =3D down_read_interruptible(&cxl_region_rwsem); - if (rc) { + CLASS(rwsem_read_intr_acquire, rwsem)(&cxl_region_rwsem); + if (IS_ERR(rwsem)) { dev_dbg(&cxlr->dev, "probe interrupted\n"); - return rc; + return PTR_ERR(rwsem); } =20 if (p->state < CXL_CONFIG_COMMIT) { dev_dbg(&cxlr->dev, "config state: %d\n", p->state); - rc =3D -ENXIO; - goto out; + return -ENXIO; } =20 if (test_bit(CXL_REGION_F_NEEDS_RESET, &cxlr->flags)) { dev_err(&cxlr->dev, "failed to activate, re-commit region and retry\n"); - rc =3D -ENXIO; - goto out; + return -ENXIO; } =20 -out: - up_read(&cxl_region_rwsem); - - if (rc) - return rc; return 0; } =20 diff --git a/include/linux/rwsem.h b/include/linux/rwsem.h index c8b543d428b0..4c44a50d47d6 100644 --- a/include/linux/rwsem.h +++ b/include/linux/rwsem.h @@ -242,9 +242,46 @@ DEFINE_GUARD(rwsem_read, struct rw_semaphore *, down_r= ead(_T), up_read(_T)) DEFINE_GUARD_COND(rwsem_read, _try, down_read_trylock(_T)) DEFINE_GUARD_COND(rwsem_read, _intr, down_read_interruptible(_T) =3D=3D 0) =20 +struct rw_semaphore_acquire { + struct rw_semaphore rw_semaphore; +}; + +#define DECLARE_RWSEM_ACQUIRE(name) \ + struct rw_semaphore_acquire name =3D { __RWSEM_INITIALIZER( \ + name.rw_semaphore) } + +DEFINE_GUARD(rwsem_read_acquire, struct rw_semaphore_acquire *, + down_read(&_T->rw_semaphore), up_read(&_T->rw_semaphore)) +DEFINE_GUARD(rwsem_write_acquire, struct rw_semaphore_acquire *, + down_write(&_T->rw_semaphore), up_write(&_T->rw_semaphore)) +DEFINE_ACQUIRE(rwsem_read_intr_acquire, rw_semaphore, up_read, + down_read_interruptible) +DEFINE_ACQUIRE(rwsem_write_kill_acquire, rw_semaphore, up_write, + down_write_killable) + +static inline int down_read_try_or_busy(struct rw_semaphore *rwsem) +{ + int ret[] =3D { -EBUSY, 0 }; + + return ret[down_read_trylock(rwsem)]; +} + +DEFINE_ACQUIRE(rwsem_read_try_acquire, rw_semaphore, up_read, + down_read_try_or_busy) + DEFINE_GUARD(rwsem_write, struct rw_semaphore *, down_write(_T), up_write(= _T)) DEFINE_GUARD_COND(rwsem_write, _try, down_write_trylock(_T)) =20 +static inline int down_write_try_or_busy(struct rw_semaphore *rwsem) +{ + int ret[] =3D { -EBUSY, 0 }; + + return ret[down_write_trylock(rwsem)]; +} + +DEFINE_ACQUIRE(rwsem_write_try_acquire, rw_semaphore, up_write, + down_write_try_or_busy) + /* * downgrade write lock to read lock */ --=20 2.49.0