# cat /sys/fs/resctrl/info/L3/io_alloc_cbm
0=00ff;1=000f
+ An ID of "*" configures all domains with the provided CBM.
+
+ Example on a system that does not require a minimum number of consecutive bits in the mask::
+
+ # echo "*=0" > /sys/fs/resctrl/info/L3/io_alloc_cbm
+ # cat /sys/fs/resctrl/info/L3/io_alloc_cbm
+ 0=0;1=0
+
When CDP is enabled "io_alloc_cbm" associated with the CDP_DATA and CDP_CODE
resources may reflect the same values. For example, values read from and
written to /sys/fs/resctrl/info/L3DATA/io_alloc_cbm may be reflected by
struct resctrl_schema *s, u32 closid)
{
enum resctrl_conf_type peer_type;
+ unsigned long dom_id = ULONG_MAX;
struct rdt_parse_data data;
struct rdt_ctrl_domain *d;
+ bool update_all = false;
char *dom = NULL, *id;
- unsigned long dom_id;
next:
if (!line || line[0] == '\0')
return 0;
+ if (update_all) {
+ rdt_last_cmd_puts("Configurations after global '*'\n");
+ return -EINVAL;
+ }
+
dom = strsep(&line, ";");
id = strsep(&dom, "=");
- if (!dom || kstrtoul(id, 10, &dom_id)) {
+
+ if (dom && !strcmp(id, "*")) {
+ update_all = true;
+ } else if (!dom || kstrtoul(id, 10, &dom_id)) {
rdt_last_cmd_puts("Missing '=' or non-numeric domain\n");
return -EINVAL;
}
dom = strim(dom);
list_for_each_entry(d, &r->ctrl_domains, hdr.list) {
- if (d->hdr.id == dom_id) {
+ if (update_all || d->hdr.id == dom_id) {
data.buf = dom;
data.mode = RDT_MODE_SHAREABLE;
data.closid = closid;
&d->staged_config[s->conf_type],
sizeof(d->staged_config[0]));
}
- goto next;
+ if (!update_all)
+ goto next;
}
}
+ if (update_all)
+ goto next;
+
rdt_last_cmd_printf("Invalid domain %lu\n", dom_id);
return -EINVAL;
}