Re: [PATCH v7 08/49] x86/resctrl: Generate default_ctrl instead of sharing it

James Morse
2025-03-07T18:08:42Z

Hi Reinette,

On 07/03/2025 04:33, Reinette Chatre wrote:
> On 2/28/25 11:58 AM, James Morse wrote:
>> The struct rdt_resource default_ctrl is used by both the architecture
>> code for resetting the hardware controls, and sometimes by the
>> filesystem code as the default value for the schema, unless the
>> bandwidth software controller is in use.
>>
>> Having the default exposed by the architecture code causes unnecessary
>> duplication for each architecture as the default value must be specified,
>> but can be derived from other schema properties. Now that the
>> maximum bandwidth is explicitly described, resctrl can derive the default
>> value from the schema format and the other resource properties.

>> diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resctrl/core.c
>> index 4504a12efc97..5280a2819760 100644
>> --- a/arch/x86/kernel/cpu/resctrl/core.c
>> +++ b/arch/x86/kernel/cpu/resctrl/core.c
>> @@ -143,7 +143,10 @@ static inline void cache_alloc_hsw_probe(void)
>> {
>> struct rdt_hw_resource *hw_res = &rdt_resources_all[RDT_RESOURCE_L3];
>> struct rdt_resource *r = &hw_res->r_resctrl;
>> - u64 max_cbm = BIT_ULL_MASK(20) - 1, l3_cbm_0;
>> + u64 max_cbm, l3_cbm_0;
>> +
>> + r->cache.cbm_len = 20;
>> + max_cbm = resctrl_get_default_ctrl(r);
>>
>> if (wrmsrl_safe(MSR_IA32_L3_CBM_BASE, max_cbm))
>> return;
>
> It is unclear to me why this architecture code continues to use
> resctrl_get_default_ctrl() while you switched away from it in the other
> architecture code.
> As resctrl_get_default_ctrl() is "intended for callers that don't know
> or care what the format is" [1], here it clearly is required to be a
> bitmask. Using resctrl_get_default_ctrl() here also seems to contradict
> your argument for not using it in cbm_validate(). [1]

Sure, I'll drop this hunk on the same reasoning.

Thanks,

James