[PATCH v6 0/2] fs/resctrl: Add "*" shorthand to set io_alloc CBM for all domains

Aaron Tomlin posted 2 patches 1 week, 1 day ago
Documentation/filesystems/resctrl.rst |  8 ++++++++
fs/resctrl/ctrlmondata.c              | 22 ++++++++++++++++++----
2 files changed, 26 insertions(+), 4 deletions(-)
[PATCH v6 0/2] fs/resctrl: Add "*" shorthand to set io_alloc CBM for all domains
Posted by Aaron Tomlin 1 week, 1 day ago
Hi Babu, Tony, Reinette,

This series addresses two limitations in the fs/resctrl io_alloc interface:
inconsistent error reporting and the lack of a mechanism for bulk
configuration.

The last_cmd_status file is intended to report details about the most
recent resctrl filesystem operation, specifically to aid in diagnosing
failures. However, when parsing io_alloc_cbm, if a user provides a domain ID
that does not exist in the resource, the operation fails with -EINVAL without
updating last_cmd_status. This results in inconsistent behaviour where
the system call returns an error, but last_cmd_status misleadingly reports
"ok", leaving the user unaware that the failure was caused by an invalid
domain ID. Patch 1 addresses this by writing an error message to
last_cmd_status when the target domain ID cannot be found.

Configuring the io_alloc_cbm interface requires an explicit
domain ID for each cache domain. On systems with high core counts and
numerous cache clusters, this requirement becomes cumbersome for automation
and management tasks that aim to apply a uniform policy. Patch 2
introduces a wildcard domain ID selector "*" for the io_alloc_cbm
interface. This enables users to set the same Capacity Bitmask (CBM)
across all cache domains in a single operation.

Please let me know your thoughts.


Changes since v5 [1]:
 - Corrected the subject line in Patch 1 to accurately reference
   "io_alloc_cbm" instead of "io_alloc" (Reinette Chatre)

 - Refined both commit messages for strict accuracy and conciseness,
   including correcting the description of last_cmd_status behaviour
   and removing redundant examples (Reinette Chatre)

 - Reordered commit tags in Patch 1 to place the Fixes: tag at the top
   in accordance with maintainer guidelines (Reinette Chatre)

 - Updated the wildcard documentation to include a caveat regarding
   systems that do not require consecutive bits (Reinette Chatre)

 - Initialised parsing variables (dom_id, update_all) at declaration
   to eliminate uninitialised state flows (Reinette Chatre)

 - Added robust validation to immediately reject any configurations
   trailing a global wildcard (e.g., "*=f;1=f") (Reinette Chatre)

Changes since v4 [2]:
 - Split the submission into a two-patch series to separate the fix from
   the new feature (Reinette Chatre)

 - Refactored resctrl_io_alloc_parse_line() to prioritise the dom check
   before string comparison, preventing potential NULL pointer dereference
   (Reinette Chatre)

 - Restructured commit messages to strictly follow the "Context, Problem,
   Solution" format (Reinette Chatre)

 - Updated the documentation to include the result of the modification
   (Babu Moger)

 - Updated the commit description to avoid implying that '0' is a universal
   minimum CBM (Reinette Chatre)

Changes since v3 [3]:
 - Updated the wildcard documentation text to be clearer and less
   prescriptive (Reinette Chatre)

 - Reverted the while loop refactoring in resctrl_io_alloc_parse_line() to
   restore the standard parsing pattern and prevent invalid domain ID
   regressions (Reinette Chatre)

 - Added explicit validation to ensure the wildcard selector is followed by
   a value assignment (Reinette Chatre)

 - Restored memcpy() usage for configuration copying to minimise unrelated
   diff noise

Changes since v2 [4]:
 - Dropped return -EINVAL for a missing seq_show implementation
   (Reinette Chatre)
 - Dropped helpers to check io_alloc support and enabled state
   (Reinette Chatre)
 - Removed additional complexity (Babu Moger)
 - Introduced the "*" wildcard for io_alloc_cbm to allow updating all
   cache domains (Reinette Chatre)
 - Replaced goto-based line parsing with a while loop to support
   multi-domain and wildcard iterations
 - Replaced memcpy() with direct structure assignment

Changes since v1 [5]:
 - Updated each helper for consistency (Babu Moger)
 - Refactored the loop logic in function resctrl_io_alloc_parse_line()
   to improve readability
 - Added inline keyword to each helper
 - Added inline keyword to function parse_domain_cbm()

[1]: https://lore.kernel.org/lkml/20260210210717.3866344-1-atomlin@atomlin.com/
[2]: https://lore.kernel.org/lkml/20260125171752.3374930-1-atomlin@atomlin.com/
[3]: https://lore.kernel.org/lkml/20251231023549.2390630-1-atomlin@atomlin.com/
[4]: https://lore.kernel.org/lkml/20251215230257.1798865-1-atomlin@atomlin.com/
[5]: https://lore.kernel.org/lkml/20251126171653.1004321-1-atomlin@atomlin.com/

Aaron Tomlin (2):
  fs/resctrl: Report invalid domain ID when parsing io_alloc_cbm
  fs/resctrl: Add "*" shorthand to set io_alloc CBM for all domains

 Documentation/filesystems/resctrl.rst |  8 ++++++++
 fs/resctrl/ctrlmondata.c              | 22 ++++++++++++++++++----
 2 files changed, 26 insertions(+), 4 deletions(-)

-- 
2.51.0
Re: [PATCH v6 0/2] fs/resctrl: Add "*" shorthand to set io_alloc CBM for all domains
Posted by Moger, Babu 6 days, 13 hours ago
Looks good to me.

On 3/24/2026 7:11 PM, Aaron Tomlin wrote:
> Hi Babu, Tony, Reinette,
> 
> This series addresses two limitations in the fs/resctrl io_alloc interface:
> inconsistent error reporting and the lack of a mechanism for bulk
> configuration.
> 
> The last_cmd_status file is intended to report details about the most
> recent resctrl filesystem operation, specifically to aid in diagnosing
> failures. However, when parsing io_alloc_cbm, if a user provides a domain ID
> that does not exist in the resource, the operation fails with -EINVAL without
> updating last_cmd_status. This results in inconsistent behaviour where
> the system call returns an error, but last_cmd_status misleadingly reports
> "ok", leaving the user unaware that the failure was caused by an invalid
> domain ID. Patch 1 addresses this by writing an error message to
> last_cmd_status when the target domain ID cannot be found.
> 
> Configuring the io_alloc_cbm interface requires an explicit
> domain ID for each cache domain. On systems with high core counts and
> numerous cache clusters, this requirement becomes cumbersome for automation
> and management tasks that aim to apply a uniform policy. Patch 2
> introduces a wildcard domain ID selector "*" for the io_alloc_cbm
> interface. This enables users to set the same Capacity Bitmask (CBM)
> across all cache domains in a single operation.
> 
> Please let me know your thoughts.

Tested-by: Babu Moger <babu.moger@amd.com>
Reviewed-by: Babu Moger <babu.moger@amd.com>