diff options
Diffstat (limited to 'arch/x86/kernel/cpu/resctrl/monitor.c')
| -rw-r--r-- | arch/x86/kernel/cpu/resctrl/monitor.c | 11 | 
1 files changed, 10 insertions, 1 deletions
| diff --git a/arch/x86/kernel/cpu/resctrl/monitor.c b/arch/x86/kernel/cpu/resctrl/monitor.c index 2cd25a0d4637..fe1a2aa53c16 100644 --- a/arch/x86/kernel/cpu/resctrl/monitor.c +++ b/arch/x86/kernel/cpu/resctrl/monitor.c @@ -458,7 +458,16 @@ int __init rdt_get_mon_l3_config(struct rdt_resource *r)  		r->mon.mbm_cfg_mask = ecx & MAX_EVT_CONFIG_BITS;  	} -	if (rdt_cpu_has(X86_FEATURE_ABMC)) { +	/* +	 * resctrl assumes a system that supports assignable counters can +	 * switch to "default" mode. Ensure that there is a "default" mode +	 * to switch to. This enforces a dependency between the independent +	 * X86_FEATURE_ABMC and X86_FEATURE_CQM_MBM_TOTAL/X86_FEATURE_CQM_MBM_LOCAL +	 * hardware features. +	 */ +	if (rdt_cpu_has(X86_FEATURE_ABMC) && +	    (rdt_cpu_has(X86_FEATURE_CQM_MBM_TOTAL) || +	     rdt_cpu_has(X86_FEATURE_CQM_MBM_LOCAL))) {  		r->mon.mbm_cntr_assignable = true;  		cpuid_count(0x80000020, 5, &eax, &ebx, &ecx, &edx);  		r->mon.num_mbm_cntrs = (ebx & GENMASK(15, 0)) + 1; | 
