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 9B73F1F0E34 for ; Tue, 23 Jun 2026 05:01:07 +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=1782190870; cv=fail; b=ovst/uKg6ZYUe/SlYOE6aftwYep2DcreMgivsf+ch/3pL7x6n7G4F98BJzRKyBeHnKgjWDDYOsTluK5BtHv2y5L0HcGSwhUGSIY7OdkiCRrwBCVrz6pLk50gH2q2SoTEt0ZeJHIhjqKoPU+leB5wmG37kMxtya2c/cixWUeI3us= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782190870; c=relaxed/simple; bh=/ptSlSGsZPYzX6/Rm0UXjXn+dQYTzGubkKWNr4fvEz8=; h=Message-ID:Date:Subject:To:CC:References:From:In-Reply-To: Content-Type:MIME-Version; b=eosdcnzv7e6SlxOF7vjQ/0FpBa7pnXUjaN4Q8Im7ymOk4pdrr+ok2ZMi8+hP6AjX+m8BvYlJrN/GweVRmjzJzo2sspYq/XBOTpT0RILwSpqHtQw5ZNWjAplxlw8qihv/zaTJsnPBuRHKhV9F/wfAEEC1NviPE2tEtLanON4BJ+Y= 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=CISU+9Kh; 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="CISU+9Kh" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1782190868; x=1813726868; h=message-id:date:subject:to:cc:references:from: in-reply-to:content-transfer-encoding:mime-version; bh=/ptSlSGsZPYzX6/Rm0UXjXn+dQYTzGubkKWNr4fvEz8=; b=CISU+9KhBOH58JSMOCzP2FqBM5V3DsVa+MAOD0GOG3LBn77Hw5ZT9tme dHgP2PqHeq5IZnxU+xbQjBBYR5t2Wy2wpjLd+E1XoFWPBd2adA2NQva/J DudYsdanoUdqH1KQ6u6M8dvkmuf+wTrI2oF8zaMW7dbeCgM89/etExBI3 X/EiBn5vdUkC+FyWaLhICapV9KacrStk+4uG8cpLnfAOp5+XGsHNYXVSw cpLISk1Tn6zoIlb4C7uvX9y7FYT3/hIClAMprLJ49B4SG/qPo5B3OIFG9 MRgiC9favZtwy7zRCgzR/aZ9OswO6r3S/91bYecz6jNMMwySPuRL4uYH2 A==; X-CSE-ConnectionGUID: nIhT1rs7Ri6LX8k12FYvvw== X-CSE-MsgGUID: ARjlY2IwSyCi6sWn2DY1qg== X-IronPort-AV: E=McAfee;i="6800,10657,11825"; a="105718698" X-IronPort-AV: E=Sophos;i="6.24,220,1774335600"; d="scan'208";a="105718698" Received: from fmviesa001.fm.intel.com ([10.60.135.141]) by orvoesa101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Jun 2026 22:01:08 -0700 X-CSE-ConnectionGUID: JJwvqMHaRu6WH1zQys4J+Q== X-CSE-MsgGUID: QRa0M0QVSuWFZdL8Ys4qLQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.24,220,1774335600"; d="scan'208";a="273471352" Received: from fmsmsx903.amr.corp.intel.com ([10.18.126.92]) by fmviesa001.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Jun 2026 22:01:07 -0700 Received: from FMSMSX903.amr.corp.intel.com (10.18.126.92) by fmsmsx903.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.37; Mon, 22 Jun 2026 22:01:06 -0700 Received: from fmsedg901.ED.cps.intel.com (10.1.192.143) by FMSMSX903.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.37 via Frontend Transport; Mon, 22 Jun 2026 22:01:06 -0700 Received: from BN8PR05CU002.outbound.protection.outlook.com (52.101.57.54) 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.37; Mon, 22 Jun 2026 22:01:06 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ynSSnxHUOFJmeBKILfSpHqwKXrhpBy2Q24EsvSOeuB8AX30TCIY2CcVuCJeU/dCtlPrxpDqoxlRz8yjJogEd0nbM0MjzJL6dULIRL1QFsdL8QJiqENZbjQ7PthSOEb1tsy6UPkVpQJmUgpNkfHAhFhVvxQWjCh9mJiX5DyHXRq7Ud3hvKiy12qO2+/hb2uRdy69WgpR2aVVp2PECP9/Jynluhg7ICKSNnGzcwvxf7EUNAAmQK4bDcF91gYwsNL87FEFdJ9B7QqVE43/HDqz90VVxVvr4cDgFJT1hhhtL6jzedULJmXMOY0eFclfJw58Kp8DYLq5I8xnFFtMaM52eaQ== 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=z2zBE0cdGTfExFaf5vftJuCVtkXENWwNXP2wx6slAaw=; b=zO20Ay1sdtSims/uTNSrc0JdsrmDqnOa8fRdJlPezKS5HJc7nd40Un8yP0yDY9iS5F9FeVzU9gvfanLLYdSUdmF9qNfoh3EclCIJhfsNw0H0hK/IDHr8ljmYhxsbmQqmEI1kvrdnfiFt1FXBqbdj340k5G0GHvJVfwMLbqrZVxY3178BrULUcbwSpbJkfd5k4jnMS3N3kUSFvQ8od59/wlUlp0P46XVUp5RHfPZ1ubMUO9zK0ki7gNdKLoBYSBUqwIsxfQvb7JvCnTGREZkTjBCYFMrcydYjB9EA8eP351TgnSNT3V0C9rUYLfWpdVSdePg8wFZTvoAHILZI/hnIGw== 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 DM4PR11MB6020.namprd11.prod.outlook.com (2603:10b6:8:61::19) by SA3PR11MB7436.namprd11.prod.outlook.com (2603:10b6:806:307::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.20; Tue, 23 Jun 2026 05:01:03 +0000 Received: from DM4PR11MB6020.namprd11.prod.outlook.com ([fe80::3058:1480:e4ac:5765]) by DM4PR11MB6020.namprd11.prod.outlook.com ([fe80::3058:1480:e4ac:5765%4]) with mapi id 15.21.0139.009; Tue, 23 Jun 2026 05:01:03 +0000 Message-ID: Date: Tue, 23 Jun 2026 13:00:52 +0800 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v4 6/6] x86/resctrl: Add support for L3 occupancy monitoring via RMID MMIO read To: Reinette Chatre CC: , , , , , , , , , , , , , Chen Yu References: <21beef1acbba4bc7bbc6e54dc11868116638d5b5.1781332698.git.yu.c.chen@intel.com> <04f67dbd-43ed-4863-a51f-cf75e9a02e55@intel.com> <166a4a2e-e2de-46ed-a854-d81d4f7a197c@intel.com> Content-Language: en-US From: "Chen, Yu C" In-Reply-To: <166a4a2e-e2de-46ed-a854-d81d4f7a197c@intel.com> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit X-ClientProxiedBy: SI1PR02CA0004.apcprd02.prod.outlook.com (2603:1096:4:1f7::12) To DM4PR11MB6020.namprd11.prod.outlook.com (2603:10b6:8:61::19) 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: DM4PR11MB6020:EE_|SA3PR11MB7436:EE_ X-MS-Office365-Filtering-Correlation-Id: e14757e9-0973-457f-d47e-08ded0e46cf0 X-LD-Processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|376014|7416014|1800799024|366016|3023799007|11063799006|4143699003|6133799003|56012099006|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: cIS6/iF617NZLBv2tr0lmurkXyYaoA75gCxXYwH+VuA1BhnkC5k/tKVQL1+d+eRyjnkYaQAyhml+F2Dmru3ZZtFkIIQIY3F+TfxBfFUCOao6GUTwr+ejRabNcDxQKw7CnoBbjt+eWF6vI5lggPQZt/z2kr8beCsl3qzc4t5udeSdKgopKvuO8nyjiZbnjOi1S2A8M7DoOWRupsm6at0UZzG7V5hdhtQ28Ctm/tKbueDxL2BkJn7QVKyEMGTdqoVhFR7JGdkK+dM4sd8niVH2FSFAI2kl5Mou791FSidwq+idFd9Tq5igiHuOMts526CNwTccz6uvj7E4TxE+V64MGLAxLBy5EN2T6FyU9qRhbOHro04qrZJPZe99X61y4YdDo/IIeyBUID/inZk9gRXog2s1+KPrEdEVo8uzLbfVG6bTNqck3OjivFVtH4y2MkKY8DKGvp2P6+6/8OgigGO3stf2O8AIhn+mrrB33JLgeEOlg7q23eWabH5SXWTAoYzpF91Qp44lIedzE/05tRE/r9lRMJksZEvq6wpgiA9YB40EAJOk6FeNf2E7LNAstQAb19Zynk7Lhise4D38gOjN1n9iC935gCQlUxzDF1VOjnTaJePwAgnc8VBXNE9qtlky/VKWKgI+utRId3Y7ivys+oeK80hqy/EVyiGK4u/tkqE= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR11MB6020.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(376014)(7416014)(1800799024)(366016)(3023799007)(11063799006)(4143699003)(6133799003)(56012099006)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?N3pRbkhzUW5WMjJ2eVNId3AxQWU4Ym8wcFMxZDZ6MEtMSXRHRm9ZQjdMZEhN?= =?utf-8?B?R3FXem1JWUpBSFI2UklYbm5jSnh3Y3BpNEdBa2dISnJkSHd6Y2xldnZ4bzlY?= =?utf-8?B?SzFXN3ZsOUxWeFFYM09VaHVmelUxTGpWL3N4YTllMlg2WnpLVVJ5bFRZc3hn?= =?utf-8?B?N05jT2xPd0lhRWhSRFl6ZmE2djNreWxPS01tM0hpdFRueUZHWWM2d1pvdm1v?= =?utf-8?B?eWFvQ2h4OFhVM1J1bmRzaGNFRU9SSUkzRUNLMjZqVHlWRTdFWkVFUlVsQ0x2?= =?utf-8?B?b1U5Y3NlREdMbXBEdEFITTZSaDI3eHFMMklqdHZyTWxFMTd2MUVTRTJjRy9F?= =?utf-8?B?Z0NhTW9aVFh3TUkxQjhTNzZGV09pUGVjQ05nb3VvRFBvaVEwRjlZWlhhU0hY?= =?utf-8?B?ZXJMYWlSV0UrZWRHR0ZhT2loUnVKSjJDM1pvUTFZMXp2c2w4RXBTNTZJbEM4?= =?utf-8?B?L0lzOG45bkluL0Q2RHBzZUNCQUN1N2J6ZXNCai9TU2tmbnhtWTg4eHBVVTVU?= =?utf-8?B?WG02ME5tOUdRTnRRN1FyUmV6clNuVUNtS2thMDExVUx1WWpRZlFUcFJXOWxE?= =?utf-8?B?UEphSmFPTEE4eXRtYkRTMlNDZEVBZXBxeU5SVHNMM2VtZ1VzaThFb3lreFVX?= =?utf-8?B?WDdmME51Q3VrYnl4TU5vNkg3YldxWVVWbE1VNDBMcnZrK2VPbk1CeVozZGps?= =?utf-8?B?d2tmdW9NZG4zVVAzbEVaRGxqSVlqendnbWNjYldhWDVnQWFySGw5dnlmNXNv?= =?utf-8?B?NzhONU1pWUtkZHJ4bGp4S2lhQ3l6WG5UY3BmRHIvMkdXVnRBNVpUMmdDWmxB?= =?utf-8?B?MTNpRUplTk43OG1YV0NRRkFQL21EandsMkFZbWpRdjNhSTlEd1dxN0VLTU9N?= =?utf-8?B?NDBVNjVLVU00M1RYZ3cxSjZzYkQyVy83Rm1lUFhveEdxY29ITXRNRzBpUkJw?= =?utf-8?B?bmJBcmdBTEszaE4vWkp3aEd2bDBkM1MyWjBXODFRZHVNSXA4SzYxZVRoRUtB?= =?utf-8?B?Qi9JWi9vbm9NYUZyWTNLbmsyY0toQkRMRzVZNTNMbG5BZVFKcTNiQ09QWThw?= =?utf-8?B?bEFnTmtsQjlHdFNZc1RsZlFaUEltYjlucmNtVFlEY1UrLzc2MVFIUGtkUjJE?= =?utf-8?B?M3dQMEQ4YVVsVWw5QWgxWDVoREVEanRNRnI2Y1JMaE5OMUZNb3A1OSszbTBJ?= =?utf-8?B?ZXNQMHpQSTBSbU1mdWZmRnhGck9GaC9UWUhHTkhGVXcvYkZleVVveVc2OWlk?= =?utf-8?B?aUpKQy9wQ0JPOGZFdWNTbTQxTkxoL3ZUS0tMNFBhRXRMUkNUN09VT0hpMng2?= =?utf-8?B?Nnlhbk5jS2dxM0ZMT0lUOG1mNzNiMlJ3UWVPSFZUdGdxRXgvOWFzRmNVTDJa?= =?utf-8?B?aFREbTFWQ3VtQTVHcEdGSktVTXhqb1FKUE5vNWFvYW0rcnNia1Y0cmt0ak1x?= =?utf-8?B?QXo2alVYd3UxaVlLR2lnQ1pRZGZydHdWOVpqdWZWaVlZWUtFVEU2VlpQRDJs?= =?utf-8?B?TkNqeFI2YkJid2U1bC95U1J3MTlaendBaGpEZTYxZEZxK1RyZmFqeFN1TFZ6?= =?utf-8?B?ZUlZa2JyS3FJTXBEam9yanJ6OHZZaWpPSjlIRFZFQ1AwL0d0QmVLM1krVTF2?= =?utf-8?B?dzdPajZ1ZTE2akpRaCtUNE1xV2o3aE5UbXFIeXRSWnUrWkF4WXNROXBDbWFs?= =?utf-8?B?bk1jeklwWXRVUHV0cmJlN0t6cWhDZGJsVnIwOWZiVkJrSGVWcmRvOWlNSjVV?= =?utf-8?B?Q25lQnMrczlVc09oQlI2clliRzBvVUE3a0tTRGd2NlFKcDRyc1h4WWllbnhJ?= =?utf-8?B?ZlBMOTZSK2xhT20xRTRhdG5ZMHZacGlRbm1VOXhDWGd6RmhLdlFBbW9HNDE3?= =?utf-8?B?b1dlbTUrQjBHZEZNTDZZb3FSVVdjSDBwVG5DRkxSVE9sbitrd0FxamdyUytG?= =?utf-8?B?a1dINktjL2sxMEwySlhVc1FCcDJkc2NXRHk2dm1EOWpvNGJpaUFzRzdaaWpv?= =?utf-8?B?ZmdIWUQ4THg5SDdDYVNKd2FnZXhYclVtSHRWck9sZTJSdTZONzVFczVHYyt5?= =?utf-8?B?dUcwMGtZOTB3Qk9tNktjZFJTZGRRWTdYTm5TS05CTDAvWUNIZVcrS2s1UEJy?= =?utf-8?B?T0dicERwbnJlaG1ZenE3cU9nckYxcnprdW4rWnhuK0FZNE1vVklnZGM3QmpD?= =?utf-8?B?MHlEc1E3cFk5WVh4dkxrcjdVRmNpcG1KM0pkQ3FaYkhKc2hHMUFFWCtCTEZ5?= =?utf-8?B?dHplUHBwdDc4VUY0N0hDUWpia05JQ2ZJSUFNMXh3cTMvaWMyYXFKeVgxbDBy?= =?utf-8?B?QmNsb3lES1ZSTmRtL2R0U2w3QmtleDR2YllHNERUdEtkMldpdnJtUT09?= X-Exchange-RoutingPolicyChecked: pBDaSVMb50SI7uNDcCapy6ucNI+wpMF195KsoyCIHuHla/hMOi+QWWY6SZL3Y5yQli/6/cJlyTwOfMtXybnXFJrfFVYWQRJi3p8EEFwF00Livjpj509ie9oc2GJclaqZkUGhq6MXGucjHrnaoNC7Bb3OR1460ra7A1QQCMxa1I1KpHmmO47omgIS9NbIDAhU/nxhc5mWJtq/o+UH3KGyKNu4fXAFDjEBofXEQuWOmttlCPBHQFsIZRgboNMo3mZmg/cNkHQtZKcLEIXDyXHFgw2sYpO5At9v+gW/3Fva4+ENch3LPYS2Tir94H4bRGl0rVQutkcEqD3xQzbi97p+Bg== X-MS-Exchange-CrossTenant-Network-Message-Id: e14757e9-0973-457f-d47e-08ded0e46cf0 X-MS-Exchange-CrossTenant-AuthSource: DM4PR11MB6020.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jun 2026 05:01:03.3118 (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: 4UNaLq39ihtW90SwXgeqJ+w7mN2bAnEXgz2X4wfFEr0WXlv5tPHST5MlwS1hcDOyBSCL/v6xgw143Dak2+CiHQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA3PR11MB7436 X-OriginatorOrg: intel.com Hi Reinette, On 6/23/2026 5:30 AM, Reinette Chatre wrote: > Hi Chenyu, >>>> diff --git a/arch/x86/include/asm/resctrl.h b/arch/x86/include/asm/resctrl.h >>>> index 97c2f6bc7a5f..9b3b03279dd8 100644 >>>> --- a/arch/x86/include/asm/resctrl.h >>>> +++ b/arch/x86/include/asm/resctrl.h >>>> @@ -41,6 +41,8 @@ struct resctrl_pqr_state { >>>>   }; >>>>     bool erdt_enabled(void); >>>> +struct rdt_domain_hdr; >>>> +int erdt_mon_read(struct rdt_domain_hdr *hdr, int ev_id, int rmid, u64 *val); >>>>     DECLARE_PER_CPU(struct resctrl_pqr_state, pqr_state); >>>>   diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resctrl/core.c >>>> index 90730f0851fa..fe812f7190fc 100644 >>>> --- a/arch/x86/kernel/cpu/resctrl/core.c >>>> +++ b/arch/x86/kernel/cpu/resctrl/core.c >>>> @@ -965,7 +965,7 @@ static __init bool get_rdt_mon_resources(void) >>>>       bool ret = false; >>>>         if (rdt_cpu_has(X86_FEATURE_CQM_OCCUP_LLC)) { >>>> -        resctrl_enable_mon_event(QOS_L3_OCCUP_EVENT_ID, false, 0, NULL); >>>> +        resctrl_enable_mon_event(QOS_L3_OCCUP_EVENT_ID, erdt_enabled(), 0, NULL); >>>>           ret = true; >>>>       } >>>>       if (rdt_cpu_has(X86_FEATURE_CQM_MBM_TOTAL)) { >>> >>> As mentioned in patch #1, when erdt_enabled() is true the enumeration still proceeds to >>> enumerate the monitoring properties via CPUID to discover the number of RMIDs that the >>> *MSR* supports and use it as the maximum RMID (and thus the maximum number of registers) >>> that MMIO supports? >>> >> >> OK, will switch to the maximum RMID exposed by ACPI table, if erdt_enabled() is true. > > I believe the issue is larger than just the RMID enumeration. The CPUID and ACPI enumeration > appears to be fully intertwined. Taking a closer look at what above code does: > it checks *CPUID* whether CMT is enabled and then enables the LLC occupancy event to blindly use > MMIO if ERDT is enabled, irrespective of whether the ERDT tables include a cache monitoring table > or not. How is it guaranteed that if ERDT is enabled that there is a cache monitoring table? > Should it not be the existence of the ACPI cache monitoring table and its properties that > determines whether the LLC occupancy counter using MMIO registers should be enabled? > I see. How about replacing erdt_enabled() with fine-grained helper functions such as erdt_has_cmrc(), erdt_has_mmrc(), and erdt_has_marc()? The latter two will be added later for region-aware MBM/MBA. CMRC, MMRC and MARC are not guaranteed to coexist, so splitting them into separate helpers would offer finer control. thanks, Chenyu