Re: [RFC PATCH 1/4] x86/resctrl: Check if monitoring features are enabled

From: Reinette Chatre

Date: Fri Aug 21 2026 - 14:19:41 EST


Hi Tony,

Thank you for doing this.

On 8/19/26 9:13 AM, Tony Luck wrote:
> Both Intel and AMD manuals say that software must first check
> CPUID(0x7,0x0).EBX[12] to see if any monitoring features are enabled
> before checking for specific features enabled in subleaves.
>
> Add the check for X86_FEATURE_CQM.
>
> Fixes: cbc82b172638 ("x86: Add support for Intel Cache QoS Monitoring (CQM) detection")
> Signed-off-by: Tony Luck <tony.luck@xxxxxxxxx>
> ---
> arch/x86/kernel/cpu/resctrl/core.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resctrl/core.c
> index 55214d6fdc49..2677b8a6c15b 100644
> --- a/arch/x86/kernel/cpu/resctrl/core.c
> +++ b/arch/x86/kernel/cpu/resctrl/core.c
> @@ -968,6 +968,9 @@ static __init bool get_rdt_mon_resources(void)
> struct rdt_resource *r = &rdt_resources_all[RDT_RESOURCE_L3].r_resctrl;
> bool ret = false;
>
> + if (!cpu_feature_enabled(X86_FEATURE_CQM))
> + return false;

Is this missing a check of X86_FEATURE_CQM_LLC also?

As I understand resctrl learns from X86_FEATURE_CQM whether the system supports
resource monitoring in general. Contrary to what the feature name suggests, there is
another step needed to determine which resource(s) support monitoring via
CPUID(0xF,0x0).EDX where bit 1 indicates LLC monitoring that needs to be set before
the LLC resource-specific monitoring properties can/should be determined.

Apart from the checks here I see that cpuid_deps[] accurately reflects the relationship
between X86_FEATURE_CQM_LLC and the different LLC monitoring features checked for below.
I do not see cpuid_deps[] capturing the relationship between X86_FEATURE_CQM and
X86_FEATURE_CQM_LLC though. Could adding it complete the handling of relationships between
these leaves?

Similarly I think cpuid_deps[] may be missing X86_FEATURE_ABMC's dependency on
X86_FEATURE_CQM_LLC.

> +
> if (rdt_cpu_has(X86_FEATURE_CQM_OCCUP_LLC)) {
> resctrl_enable_mon_event(QOS_L3_OCCUP_EVENT_ID, false, 0, NULL);
> ret = true;

Reinette