From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.9]) (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 91C921F942 for ; Wed, 19 Aug 2026 23:07:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=198.175.65.9 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787180825; cv=fail; b=szn37B2pQLJ15MW/a9KrVgRniwJPOkQP3PJIosM0pTYf1MLNl+b0PgFaZ/Kg/m/GTVU8UhBNXhelP1KQR/YMaSpyVRWBp5TGXN+drHI43Mi8vGLeDjAfv5ih909SvauxVoORn/L9D/FEWYengnq5YynXxmDmH5+Ji6XG39q/jiU= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787180825; c=relaxed/simple; bh=jRG+r14Bdh1i9JY+YbfbLG5yh/rT5yQTBJ5wLIUm3Uw=; h=Message-ID:Date:Subject:To:CC:References:From:In-Reply-To: Content-Type:MIME-Version; b=bzrW4OoefvYRtUzF9NqMHyah/2ycMjiN31GCSWs661k1kZpYXSg/5q7FnHKxN/KGLvUnA6zleIMnmiLdbL1YUWVsKAHq/O4dc6y5aJn3+8oRLCOpDHgBSxN9vj92FY57yjeHRoVMDs+/lDjyJIY1yfiu7sT/9wwun6qkXF+qVU4= 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=iAXD4D1T; arc=fail smtp.client-ip=198.175.65.9 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="iAXD4D1T" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1787180824; x=1818716824; h=message-id:date:subject:to:cc:references:from: in-reply-to:content-transfer-encoding:mime-version; bh=jRG+r14Bdh1i9JY+YbfbLG5yh/rT5yQTBJ5wLIUm3Uw=; b=iAXD4D1TxidzcJ3EyUO09nIxSam/jexH0KYSb9jpltXJil8DdqI9k0gm C2496pTm5t5wZ8u0CO+JwYqydav+ctSFLyKeWQatQQDqto4VJNcazomw7 37wg3Jz9L9yWdQRgmULKcLaDYPzmqeEd1tfJFCzyu/N502HqnqxapI/rp 2ECHbMt3qSUl58iQTDQfc5V6imJaBdVzBXGh+fedWTfYld8WDjOMaZXQW C6rD60mm5cSCwy6jBrMYDH6v9qwX0/Apj0jMmBDVxARGlBMieAoY8qQoZ Ri/p2YQL9fwUjWdyN47fKYHd1Kl5tKoSVyl18Au6QpkFQlc1FpbzADKQe Q==; X-CSE-ConnectionGUID: z1PiPDGuScmyaZhWR78lOg== X-CSE-MsgGUID: bnFwVM+VRQ+HGQZuTT9P0Q== X-IronPort-AV: E=McAfee;i="6800,10657,11880"; a="110494843" X-IronPort-AV: E=Sophos;i="6.25,232,1779174000"; d="scan'208";a="110494843" Received: from orviesa003.jf.intel.com ([10.64.159.143]) by orvoesa101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Aug 2026 16:07:03 -0700 X-CSE-ConnectionGUID: tbBTZi1tSIiz/KY6q5uf+w== X-CSE-MsgGUID: 1stLukOHRTe9gm0IcfJqHg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.25,232,1779174000"; d="scan'208";a="269221388" Received: from fmsmsx901.amr.corp.intel.com ([10.18.126.90]) by orviesa003.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Aug 2026 16:07:02 -0700 Received: from FMSMSX902.amr.corp.intel.com (10.18.126.91) by fmsmsx901.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.45; Wed, 19 Aug 2026 16:07:01 -0700 Received: from fmsedg901.ED.cps.intel.com (10.1.192.143) by FMSMSX902.amr.corp.intel.com (10.18.126.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.45 via Frontend Transport; Wed, 19 Aug 2026 16:07:01 -0700 Received: from BYAPR05CU005.outbound.protection.outlook.com (52.101.85.16) by edgegateway.intel.com (192.55.55.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.45; Wed, 19 Aug 2026 16:07:01 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FPJp26vLLOL7dElyiFJEM8Nd1ufiVZFdM0yfL6ewjaIkIkR9FxLmwnK/Ms+bJKnK1N1vKm1kPsRgtyc/QSTh1/KrO32erMykuT+Wwz7J2L6lQnNDQf+YXX0y1HnKIW4t55ZGuqaj1dgUlYkTBJKnYZ87NYeH3aHUupjtMQxbcgfBXYDJc0p4NU0pH/hXGnYLv1GHzkZM5GqjFvA+FseQrsbM7gay4Z6eGZTqsi5vLGY0+1rAzhE42uDiQdZMdd8AuMXHK+6d668AlJ/fMfGyNuO7fFY8RYtXvvykLzOYwbAYKTwW6WkVWTm9zaKlM8iORZSpNmQFO+rIe1QQaeHg0g== 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=zzhEdVfS2+XBej5Tsz0Kroxdy7hAoAhQPQc21GYl88E=; b=LaOUL+dXkl92Sgf4tW/LDsh97759J1F0QcFYoE8J5ofezyaQGxvsKdlJIP3F62CHAsMXqDBDw+OLxolOqUTkW0Mv+TS/AzUQXfcr5ySqWHKWnBdt0PUBZZUEzDyj6oWtvLyMevOldOSatWyyjn0HIJOoltJDn+Ngw4vxQ1F6xPVmPtrYjXrk3q+bOwoQUgvPdelRtzAvcLes5GUP7rTBFYR7VtcsiHTBpEmrMTIXnQ+K95apyzmpPNZQRDwma4tnmgV0a+R3j74+0LHdRyjl3Ps6S2mhYCpSFhNpfgeYDZSie7ZOcf6Cy47eyZXQZ7TP+Ww9Ovv4pAhp73mlWnk3OA== 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 SJ2PR11MB8370.namprd11.prod.outlook.com (2603:10b6:a03:540::20) by DS0PR11MB7901.namprd11.prod.outlook.com (2603:10b6:8:f4::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.339.8; Wed, 19 Aug 2026 23:06:58 +0000 Received: from SJ2PR11MB8370.namprd11.prod.outlook.com ([fe80::b6cf:ce77:3cdf:7cc]) by SJ2PR11MB8370.namprd11.prod.outlook.com ([fe80::b6cf:ce77:3cdf:7cc%5]) with mapi id 15.21.0339.007; Wed, 19 Aug 2026 23:06:58 +0000 Message-ID: <01d48e87-eade-438d-9d33-b1110b6bbfcd@intel.com> Date: Wed, 19 Aug 2026 16:06:56 -0700 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v6 5/9] x86/resctrl: Parse ACPI CMRC table To: Chen Yu , CC: , , , , , , , , , References: From: Reinette Chatre Content-Language: en-US In-Reply-To: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit X-ClientProxiedBy: MW4PR04CA0282.namprd04.prod.outlook.com (2603:10b6:303:89::17) To SJ2PR11MB8370.namprd11.prod.outlook.com (2603:10b6:a03:540::20) 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: SJ2PR11MB8370:EE_|DS0PR11MB7901:EE_ X-MS-Office365-Filtering-Correlation-Id: 14150af7-180e-4cef-db06-08defe4691bb X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|366016|23010399003|10067099003|56012099006|5023799004|11063799006|4143699003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: WElm69vWZB0T+vyFtwMdrstPc10vgvGVh/ghtKrT7lNV905z7bzsW5oiyzmAzAwj6IL43zICcSQiDF6YKnfA7d0RMSVtGXsVZ3k/hVri/RqHeKP+g34sLSaFZ80DLXaiTzGo9qP25jbVXRaMt8zryvfG2JtRKWq0Mwc8kH1bL5jw7qp/lkP/2TA6qM74zh5r59IjQ76V3jAFiUx0mS5mDEIh5pOCV2nTk8ZuEMQ7cTYxiMkwOViMPzP4RFkElmQ+36O6OFRmTdAyowlCLlbtRIlWSGam8oov8L7pGhF3LrGIRlRTev104RVSPHMNx7KdHhx6Dh+3JM7HYr+UcsepBn+KPqLfbsyFYpLa9/dwjSqroJqOwxXfoOokO/+gAZUmdLz3YeYaF40bND9GxhBOHbwUY3JCeCwKSk6CvBPVUtYMwyxCDPX+zoo2LhekwZfdJncQtzLpLucRaN6vuyLCFzzcaV/yWoGvnd6QTFFjLIteXf8e24UqfIoIFZdlQzl2XfHsP/AdyZBOMHQlXippYCm6K+JRe6eMcinItWw8dSija0KH+3kMCkg3qhffwrxn0AmMyn/hgnnWDWD9O+rg4XyQOAnVxB3K4xA4QTLE2HLoREqishTFzVe9/dmrZadQzuNFkLav5UAVTXpSfJULLkz9xuDzexrUwtubeHEy63I= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SJ2PR11MB8370.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(366016)(23010399003)(10067099003)(56012099006)(5023799004)(11063799006)(4143699003)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?aXByZWpveDZ4eU9FdnBodUFudmRiM01VMnBadnlJandPeGRUZ0dldjQxWXlv?= =?utf-8?B?SWppUlQvMjE1KzlEUjd1Q1NzU0xHZnQ3VE9NTzFhcEFERk1TVkN4S1kzWUti?= =?utf-8?B?ODUvd2VXTTdIZWozRzZtTEtobmNmSWNKMzVvS0wveWtKNzFhTkdmWGFlTWhP?= =?utf-8?B?S0xSZ0xzK0RvQmUzQWFvTFRtWnBoYkNZRHQ1dHJQWVZCUmVnY2c0dGEvVDFZ?= =?utf-8?B?cnZ1NVloZzZlOEpzYU9XempTaFRxdWhPQ2U0TFRTYWtXU1daZXU1ZEpPMCts?= =?utf-8?B?RFY3TUlGcEZ3WS9mQ1haNUVUUStCV2J5WjBSWm04K2VxYVBTWG1tV2o2b29y?= =?utf-8?B?S2ZmcTA3Um5BeGlRU0R2RnhBb3RRNk9hQzg3a3E2RGdvQ09LL3FSYmJMYkFD?= =?utf-8?B?SU02OFJpeHRocmNTUEtnYXdqa0hSRlVrQTgwbkIwMGU1QnR0Zm11dlIxZmFm?= =?utf-8?B?eXhPU1J3VWRWbFgwWFl3ZEtDdGU3SWo4YnRQdkRZOHdkemVIcUZXNVcvTS9L?= =?utf-8?B?b2hLRStCOHRWWFBDd1hvVDQxQmhOYXFuK3BXVVZXdHVvcnF1alB1WC9tQ2hG?= =?utf-8?B?TFBPbEViKzZ5ZXc5by9MMHF5WGFuWmtwbzVqeVVjaDFic0RzL2pRb0VNM1Jr?= =?utf-8?B?RmpxQjk1dGViNlJlRFJ6VXlHV0ExbFE2ME02YmN3Ukw5ZXduemZNZGRSN0Fk?= =?utf-8?B?bkQvS05BL04wemtBMDhkdkE0R3VKak40MEhsb0hTbkRZVmpUbk1RZjBOMTQ1?= =?utf-8?B?TVRRVExmeC9ZTFh0Wi9wYi9mRDlCUFdEc1pvWi9RZkMvajNkYkdOT05NL21I?= =?utf-8?B?ZnprUEJRWkFqcmdxN2ptcERIeTE5LzRFdFd1OGJJOXlSTFVZQTIrM1lnbDho?= =?utf-8?B?M0JYUVo2MEpOYjlpckkvM1NNWkVyVHNad0p0UEhGSjYvYjI5UVdPSzJRckZn?= =?utf-8?B?QWxZVDBZb1dPUGZUck9UWTFCNGFjb28vSWs5citKdS9JQWc1NktHS3VKTjFa?= =?utf-8?B?RlVrMWp0OEJuc215ekZNMjVZWnFobVYxbG5KVGpETzdoU1htaFhTQWpjaW9J?= =?utf-8?B?WFBXOTM0Q2RGbmJJbExLQkNGcDJmYkx3Njhqazg0ZTJVcExGektES29VajZM?= =?utf-8?B?TnZycEkxaFlIdXllY084Z1lTSGk4dDdnVEVvcG1SbnY3dUJaZzNkYXd2MlBY?= =?utf-8?B?OHovKzJqckhsNGMrUThvUmZxNUwzeGgyS1gvUGdZbDZHY0U5OHRGcnRtZHg4?= =?utf-8?B?c0xtWUJJTnlCQmZGam13S1Z5eFVZcm14S2c0elErSkZFcVRMQklGa2haaFd2?= =?utf-8?B?eDhmUWtraE9teW4wSWxoWDdDZ1RkLzZ5eHZ5ZmtWc2FHdWZ0WHEzMlhXaEpr?= =?utf-8?B?VS9GTEg5QnFMbW5DT0d3QkRsWkhnVlh5akpTVmdUTTltKzBFRlZ1dEFza0d6?= =?utf-8?B?MXkzd0gybmJzc3dlbzBIRXI3eW5Bam1JNGpIcUJEOC9hd1I0bEtTRytnTk1V?= =?utf-8?B?MHk5bmt0azdNdE1EeXFuSjFLTDNtY0tQV2tZTFo0dWpBc3N4WWJrRnoreXdQ?= =?utf-8?B?ckliYXB4MS83WGVHUThuMWUxemkwZXdOVjh3ZHRZZTUvSUJFZ3QyYVZvNkFz?= =?utf-8?B?UWM5SWwxeWt5eTU5UERmTXFBUHg3bFJuYUhLY1Z6djlXOU1ZaDIvREt6NjBO?= =?utf-8?B?cFJyM3h2KzFOM0J3WlQ0SVVGUEVuZUJVMldRQnFYUmxBWkZ3QnVEc0s2TDJ6?= =?utf-8?B?TXpsZzBzSjM3amRWbHB5SFpnYURXNUtibUNlaUhQNnhtckRJMWE5YUZ5d1Zo?= =?utf-8?B?S2g2U1pKblpHTnFRc0laNlZhZWhEbjBJa0JJUTNuc2J2TjRnSXNrRFljeTlr?= =?utf-8?B?M3MxQlBRRnV0eGk4RVpab3ZwMklHN2NUOE1TQlJNN2NvS0dPY2wyN1ZzUitw?= =?utf-8?B?anVaU2JwcW9JWTl6Rk11RXNiSTBFMEtBZ3l4YmlIbTZxZXZ6TmtkZ3Mrbjlm?= =?utf-8?B?ekdCQ1ZFZTJkclJNSk9aMDBOZmQ5RE4walhITHVRYXo2eGVQZEtMSEMxZjEx?= =?utf-8?B?VU1BSGpZYkwvVko1OWM3WTZSM2tPMURHRVRwMUdoVnFhSnNlSWo3aERYYmpS?= =?utf-8?B?cnF0Zk5mSDVadm5UVTZ2em5wNGNFSkl0cm5Ia24xbG5FZk9kZFdwMUZ2TVpU?= =?utf-8?B?UmNWeGZDSDljbUY0LytOYklkaWhDelBoK2t6ZkMrNnh5bk5UMUFXZ2p6VXk4?= =?utf-8?B?dFFoakluZ0R4anRsQ2xRSnhpSzdTVVZuYnkxUm16aTdhVUlKNjcrbUkwSkFy?= =?utf-8?B?ZVFRdzBrZGdKQ0JvZ0tKSXBPQnBJL2dWSDRmQVJ0Rndhc0tPaU16bWJJL2Zv?= =?utf-8?Q?C3tuU00iMJ1kFuyQ=3D?= X-Exchange-RoutingPolicyChecked: day+PgkKJsetqNjhpVHSUo/fFfTQNMYHZrAiRGrLhEIyELsIVGCv7I4x7IXIxdjd74fDZ8xpwYbOGZtfhBid4ALpG4uOILgWKLG2XZUAl3xnnigdm/0i7NuQq7XXXoiIcJy4Xr/UVRB+iYvUo9FjVghSQtEoPE/iqgGlGqcOxFHU793T78Y9p3lXWqM6ZEGhmBsCzQx+kQtw2yDRk9+t3i6OJdUXv0ardWLuCL0M9T2GVYl7ycjaRcNQh8kYhHj7HMcBaLYamtN4OfK5pSpipuy6GbCF1Kf5bWHitHyMw5mEM6slVDDh5qV9BTjU7z9skEXWnqul2IQ6OqgNDE5BCA== X-MS-Exchange-CrossTenant-Network-Message-Id: 14150af7-180e-4cef-db06-08defe4691bb X-MS-Exchange-CrossTenant-AuthSource: SJ2PR11MB8370.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Aug 2026 23:06:58.0663 (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: rTgA1FBGqQkn7yaL2PSzEQYE/jxmHvxXBBTCj9bdAJmOQKLtfAFFSVvIIJf6vjXBGRL4jqTLub5x/7DPnnMZoC35zqZXLLPiswiDBG751+0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR11MB7901 X-OriginatorOrg: intel.com Hi Chenyu, On 7/25/26 2:23 AM, Chen Yu wrote: > The CMRC (Cache Monitoring Registers for CPU Agents Description) sub-table of > ERDT describes the MMIO registers used to read cache monitoring counters (e.g. > LLC occupancy) for an RMD. nit: "an RMD" -> "a monitoring domain" > > Parse each CMRC sub-table, ioremap its register window, and save a copy of the > CMRC table in the corresponding ERDT domain entry so that later monitoring code nit: drop "later" > can read the counters via MMIO. > > Suggested-by: Tony Luck > Signed-off-by: Chen Yu > Tested-by: Hongyu Ning > Reviewed-by: Thomas Gleixner > --- ... > diff --git a/arch/x86/include/asm/resctrl.h b/arch/x86/include/asm/resctrl.h > index 575f8408a9e7..e60c2aea7ebd 100644 > --- a/arch/x86/include/asm/resctrl.h > +++ b/arch/x86/include/asm/resctrl.h > @@ -49,6 +49,8 @@ DECLARE_STATIC_KEY_FALSE(rdt_enable_key); > DECLARE_STATIC_KEY_FALSE(rdt_alloc_enable_key); > DECLARE_STATIC_KEY_FALSE(rdt_mon_enable_key); > > +int erdt_get_scale(void); > + > static inline bool resctrl_arch_alloc_capable(void) > { > return rdt_alloc_capable; > diff --git a/arch/x86/kernel/cpu/resctrl/erdt.c b/arch/x86/kernel/cpu/resctrl/erdt.c > index 6257869d0db2..422618991927 100644 > --- a/arch/x86/kernel/cpu/resctrl/erdt.c > +++ b/arch/x86/kernel/cpu/resctrl/erdt.c > @@ -23,6 +23,7 @@ static LIST_HEAD(domain_info_list); > static bool erdt_enabled; > > #define ERDT_VALID_VERSION 1 > +#define CMRC_SUPPORTED_INDEX_FN 1 > #define RMDD_FLAG_CPU_L3_DOMAIN BIT(0) > > /* Bitmask of valid sub-tables found in the first RMDD, used to ensure all RMDDs match. */ > @@ -33,11 +34,19 @@ static u16 first_rmdd_domain_id; > > static int erdt_max_rmid; > > +/* Scale to bytes for the monitoring counters when ERDT is enabled. */ hmmm ... when looking ahead at patch #9 this does not seem to be how this value is used? Instead, when a monitoring counter is read it is scaled using the per-domain acpi_erdt_cmrc::up_scale? Instead this seems to be the scale used to set/initialize resctrl_rmid_realloc_threshold that is used by the limbo handler? > +static int erdt_scale; Can the scale ever be negative? Could it be unsigned int? Actually, looks like the original MSR based scale obtained via CPUID.(EAX=0FH,ECX=1H) is 32 bits while this new scale value from CMRC is 64 bits. The existing code can thus not accommodate the new values and need to be updated? > + > int erdt_get_max_rmid(void) Can this be negative? > { > return erdt_max_rmid; > } > > +int erdt_get_scale(void) > +{ > + return erdt_scale; > +} > + > static void __iomem *erdt_ioremap(phys_addr_t base, u32 num_pages, const char *desc) > { > void __iomem *addr; > @@ -67,6 +76,7 @@ static void erdt_iounmap_domain(struct erdt_domain_info *domain) > static void cleanup_one_domain(struct erdt_domain_info *d) > { > erdt_iounmap_domain(d); > + kfree(d->cmrc); > kfree(d); > } > > @@ -100,6 +110,43 @@ static __init int cacd_init(struct acpi_subtbl_hdr_16 *subtbl, > return 0; > } > > +static __init int cmrc_init(struct acpi_subtbl_hdr_16 *subtbl, > + struct erdt_domain_info *domain_info) > +{ > + struct acpi_erdt_cmrc *cmrc = (struct acpi_erdt_cmrc *)subtbl; > + > + if (cmrc->header.length < sizeof(*cmrc)) { > + pr_warn(FW_BUG "Truncated CMRC subtable\n"); Please note there is inconsistency wrt "subtable" vs "sub-table" in error messages. > + return -EIO; > + } > + > + if (cmrc->index_fn != CMRC_SUPPORTED_INDEX_FN) { > + pr_info("Unsupported CMRC index function %u\n", cmrc->index_fn); > + return -EIO; > + } > + > + if (!cmrc->clump_size) { > + pr_warn(FW_BUG "CMRC clump_size is zero\n"); > + return -EIO; > + } > + > + domain_info->base[ERDT_MMIO_CMRC_BASE] = > + erdt_ioremap(cmrc->cmt_reg_base, cmrc->cmt_reg_size, "CMRC base"); > + if (!domain_info->base[ERDT_MMIO_CMRC_BASE]) > + return -EIO; > + > + domain_info->cmrc = kmemdup(cmrc, cmrc->header.length, GFP_KERNEL); > + if (!domain_info->cmrc) { > + iounmap(domain_info->base[ERDT_MMIO_CMRC_BASE]); > + domain_info->base[ERDT_MMIO_CMRC_BASE] = NULL; > + return -ENOMEM; > + } > + > + erdt_scale = max_t(int, erdt_scale, cmrc->up_scale); Please add a comment to describe why maximum of all domains' scale value is used. This comment may be best placed at global definition of erdt_scale. > + > + return 0; > +} > + > static inline struct acpi_subtbl_hdr_16 *rmdd_subtbl(struct acpi_erdt_rmdd *rmdd) > { > return (void *)rmdd + sizeof(*rmdd); > @@ -166,6 +213,16 @@ static __init bool parse_rmdd_table(struct acpi_subtbl_hdr_16 *rmdd_hdr) > goto cleanup; > > subtbl_mask |= BIT(ACPI_ERDT_TYPE_CACD); > + break; > + case ACPI_ERDT_TYPE_CMRC: > + /* > + * Only one CMRC is supported per domain as there is no > + * method to distinguish different CMRCs within a domain. > + */ > + if (!(subtbl_mask & BIT(ACPI_ERDT_TYPE_CMRC)) && > + !cmrc_init(subtbl, domain_info)) > + subtbl_mask |= BIT(ACPI_ERDT_TYPE_CMRC); How is cmrc_init() failure handled? > + > break; > default: > break; > diff --git a/arch/x86/kernel/cpu/resctrl/internal.h b/arch/x86/kernel/cpu/resctrl/internal.h > index bd437c3e5bf0..27f28b0fead8 100644 > --- a/arch/x86/kernel/cpu/resctrl/internal.h > +++ b/arch/x86/kernel/cpu/resctrl/internal.h > @@ -24,10 +24,12 @@ > /* > * Index into erdt_domain_info::base[] for each MMIO region. > * @ERDT_MMIO_RMDD_CREG: RMDD control register base address > + * @ERDT_MMIO_CMRC_BASE: CMRC monitoring register base address > */ > enum erdt_mmio_type { > ERDT_MMIO_RMDD_CREG, > - ERDT_MMIO_LAST = ERDT_MMIO_RMDD_CREG > + ERDT_MMIO_CMRC_BASE, > + ERDT_MMIO_LAST = ERDT_MMIO_CMRC_BASE > }; > > #define ERDT_MMIO_NUM_TYPES (ERDT_MMIO_LAST + 1) > @@ -35,6 +37,7 @@ enum erdt_mmio_type { > /** > * struct erdt_domain_info - Per-domain ERDT information > * @base: Array of ioremapped MMIO region base addresses, indexed by ERDT_MMIO_* type > + * @cmrc: Copy of the ACPI CMRC sub-table for this domain > * @cpu_mask: CPUs belonging to this resource management domain > * @max_rmid: Maximum RMID supported by this domain > * @dom_id: L3 cache ID shared by all CPUs in this domain (-1 if unset) > @@ -42,6 +45,7 @@ enum erdt_mmio_type { > */ > struct erdt_domain_info { > void __iomem *base[ERDT_MMIO_NUM_TYPES]; > + struct acpi_erdt_cmrc *cmrc; > struct cpumask cpu_mask; > u32 max_rmid; > int dom_id; Reinette