Skip to content

Commit f758340

Browse files
henryZeJames Morse
authored andcommitted
arm_mpam: resctrl: Fix MBA CDP alloc_capable handling on unmount
The code to set MBA's alloc_capable to true appears to be trying to restore alloc_capable on unmount. This can never work because resctrl_arch_set_cdp_enabled() is never invoked with RDT_RESOURCE_MBA as the rid parameter. Consequently, mpam_resctrl_controls[RDT_RESOURCE_MBA].cdp_enabled always remains false. The alloc_capable setting in resctrl_arch_set_cdp_enabled() is to re-enable MBA if the caller opts in to separate control values using CDP for this resource. This doesn't happen today. Add a comment to describe this. However a bug remains where MBA allocation is permanently disabled after the mount with CDP option. Remounting without CDP cannot restore the MBA partition capability. Add a check to re-enable MBA when CDP is disabled, which happens on unmount. Fixes: 6789fb9 ("arm_mpam: resctrl: Add CDP emulation") Signed-off-by: Zeng Heng <[email protected]> [ morse: Added comment for existing code, added hunk to fix this bug from Ben H ] Reviewed-by: James Morse <[email protected]> Signed-off-by: James Morse <[email protected]>
1 parent 4ce0a2c commit f758340

1 file changed

Lines changed: 8 additions & 0 deletions

File tree

drivers/resctrl/mpam_resctrl.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,10 +220,18 @@ int resctrl_arch_set_cdp_enabled(enum resctrl_res_level rid, bool enable)
220220
if (cdp_enabled && !mpam_resctrl_controls[RDT_RESOURCE_MBA].cdp_enabled)
221221
mpam_resctrl_controls[RDT_RESOURCE_MBA].resctrl_res.alloc_capable = false;
222222

223+
/*
224+
* If resctrl has attempted to enable CDP on MBA, re-enable MBA as two
225+
* configurations will be provided so there is no aliasing problem.
226+
*/
223227
if (mpam_resctrl_controls[RDT_RESOURCE_MBA].cdp_enabled &&
224228
mpam_resctrl_controls[RDT_RESOURCE_MBA].class)
225229
mpam_resctrl_controls[RDT_RESOURCE_MBA].resctrl_res.alloc_capable = true;
226230

231+
/* On unmount when CDP is disabled, re-enable MBA */
232+
if (!cdp_enabled && mpam_resctrl_controls[RDT_RESOURCE_MBA].class)
233+
mpam_resctrl_controls[RDT_RESOURCE_MBA].resctrl_res.alloc_capable = true;
234+
227235
if (enable) {
228236
if (mpam_partid_max < 1)
229237
return -EINVAL;

0 commit comments

Comments
 (0)