Lines Matching +full:s +full:- +full:mode

1 // SPDX-License-Identifier: GPL-2.0-only
65 void rdt_last_cmd_puts(const char *s) in rdt_last_cmd_puts() argument
68 seq_buf_puts(&last_cmd_status, s); in rdt_last_cmd_puts()
87 * + We can simply set "current->closid" to assign a task to a resource
91 * - We give up some options in configuring resource groups across multi-socket
93 * - Our choices on how to configure each resource become progressively more
106 struct resctrl_schema *s; in closid_init() local
110 list_for_each_entry(s, &resctrl_schema_all, list) in closid_init()
111 rdt_min_closid = min(rdt_min_closid, s->num_closid); in closid_init()
113 closid_free_map = BIT_MASK(rdt_min_closid) - 1; in closid_init()
125 return -ENOSPC; in closid_alloc()
126 closid--; in closid_alloc()
138 * closid_allocated - test if provided closid is in use
150 * rdtgroup_mode_by_closid - Return mode of resource group with closid
153 * Each resource group is associated with a @closid. Here the mode
156 * Return: mode as &enum rdtgrp_mode of resource group with closid @closid
163 if (rdtgrp->closid == closid) in rdtgroup_mode_by_closid()
164 return rdtgrp->mode; in rdtgroup_mode_by_closid()
173 [RDT_MODE_PSEUDO_LOCKSETUP] = "pseudo-locksetup",
174 [RDT_MODE_PSEUDO_LOCKED] = "pseudo-locked",
178 * rdtgroup_mode_str - Return the string representation of mode
179 * @mode: the resource group mode as &enum rdtgroup_mode
181 * Return: string representation of valid mode, "unknown" otherwise
183 static const char *rdtgroup_mode_str(enum rdtgrp_mode mode) in rdtgroup_mode_str() argument
185 if (mode < RDT_MODE_SHAREABLE || mode >= RDT_NUM_MODES) in rdtgroup_mode_str()
188 return rdt_mode_str[mode]; in rdtgroup_mode_str()
210 kn = __kernfs_create_file(parent_kn, rft->name, rft->mode, in rdtgroup_add_file()
212 0, rft->kf_ops, rft, NULL, NULL); in rdtgroup_add_file()
227 struct kernfs_open_file *of = m->private; in rdtgroup_seqfile_show()
228 struct rftype *rft = of->kn->priv; in rdtgroup_seqfile_show()
230 if (rft->seq_show) in rdtgroup_seqfile_show()
231 return rft->seq_show(of, m, arg); in rdtgroup_seqfile_show()
238 struct rftype *rft = of->kn->priv; in rdtgroup_file_write()
240 if (rft->write) in rdtgroup_file_write()
241 return rft->write(of, buf, nbytes, off); in rdtgroup_file_write()
243 return -EINVAL; in rdtgroup_file_write()
259 struct rftype *rft = of->kn->priv; in is_cpu_list()
261 return rft->flags & RFTYPE_FLAGS_CPUS_LIST; in is_cpu_list()
265 struct seq_file *s, void *v) in rdtgroup_cpus_show() argument
271 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_cpus_show()
274 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED) { in rdtgroup_cpus_show()
275 if (!rdtgrp->plr->d) { in rdtgroup_cpus_show()
278 ret = -ENODEV; in rdtgroup_cpus_show()
280 mask = &rdtgrp->plr->d->cpu_mask; in rdtgroup_cpus_show()
281 seq_printf(s, is_cpu_list(of) ? in rdtgroup_cpus_show()
286 seq_printf(s, is_cpu_list(of) ? "%*pbl\n" : "%*pb\n", in rdtgroup_cpus_show()
287 cpumask_pr_args(&rdtgrp->cpu_mask)); in rdtgroup_cpus_show()
290 ret = -ENOENT; in rdtgroup_cpus_show()
292 rdtgroup_kn_unlock(of->kn); in rdtgroup_cpus_show()
308 this_cpu_write(pqr_state.default_closid, r->closid); in update_cpu_closid_rmid()
309 this_cpu_write(pqr_state.default_rmid, r->mon.rmid); in update_cpu_closid_rmid()
339 struct rdtgroup *prgrp = rdtgrp->mon.parent, *crgrp; in cpus_mon_write()
343 cpumask_andnot(tmpmask, newmask, &prgrp->cpu_mask); in cpus_mon_write()
346 return -EINVAL; in cpus_mon_write()
350 cpumask_andnot(tmpmask, &rdtgrp->cpu_mask, newmask); in cpus_mon_write()
353 cpumask_or(&prgrp->cpu_mask, &prgrp->cpu_mask, tmpmask); in cpus_mon_write()
359 * and update per-cpu rmid in cpus_mon_write()
361 cpumask_andnot(tmpmask, newmask, &rdtgrp->cpu_mask); in cpus_mon_write()
363 head = &prgrp->mon.crdtgrp_list; in cpus_mon_write()
367 cpumask_andnot(&crgrp->cpu_mask, &crgrp->cpu_mask, in cpus_mon_write()
373 /* Done pushing/pulling - update this group with new mask */ in cpus_mon_write()
374 cpumask_copy(&rdtgrp->cpu_mask, newmask); in cpus_mon_write()
383 cpumask_andnot(&r->cpu_mask, &r->cpu_mask, m); in cpumask_rdtgrp_clear()
385 list_for_each_entry(crgrp, &r->mon.crdtgrp_list, mon.crdtgrp_list) in cpumask_rdtgrp_clear()
386 cpumask_and(&crgrp->cpu_mask, &r->cpu_mask, &crgrp->cpu_mask); in cpumask_rdtgrp_clear()
396 cpumask_andnot(tmpmask, &rdtgrp->cpu_mask, newmask); in cpus_ctrl_write()
401 return -EINVAL; in cpus_ctrl_write()
412 * the prev group's child groups that owned them in cpus_ctrl_write()
413 * and update per-cpu closid/rmid. in cpus_ctrl_write()
415 cpumask_andnot(tmpmask, newmask, &rdtgrp->cpu_mask); in cpus_ctrl_write()
420 cpumask_and(tmpmask1, &r->cpu_mask, tmpmask); in cpus_ctrl_write()
427 /* Done pushing/pulling - update this group with new mask */ in cpus_ctrl_write()
428 cpumask_copy(&rdtgrp->cpu_mask, newmask); in cpus_ctrl_write()
434 head = &rdtgrp->mon.crdtgrp_list; in cpus_ctrl_write()
436 cpumask_and(tmpmask, &rdtgrp->cpu_mask, &crgrp->cpu_mask); in cpus_ctrl_write()
438 cpumask_clear(&crgrp->cpu_mask); in cpus_ctrl_write()
452 return -EINVAL; in rdtgroup_cpus_write()
455 return -ENOMEM; in rdtgroup_cpus_write()
458 return -ENOMEM; in rdtgroup_cpus_write()
463 return -ENOMEM; in rdtgroup_cpus_write()
466 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_cpus_write()
468 ret = -ENOENT; in rdtgroup_cpus_write()
472 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED || in rdtgroup_cpus_write()
473 rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) { in rdtgroup_cpus_write()
474 ret = -EINVAL; in rdtgroup_cpus_write()
475 rdt_last_cmd_puts("Pseudo-locking in progress\n"); in rdtgroup_cpus_write()
492 ret = -EINVAL; in rdtgroup_cpus_write()
497 if (rdtgrp->type == RDTCTRL_GROUP) in rdtgroup_cpus_write()
499 else if (rdtgrp->type == RDTMON_GROUP) in rdtgroup_cpus_write()
502 ret = -EINVAL; in rdtgroup_cpus_write()
505 rdtgroup_kn_unlock(of->kn); in rdtgroup_cpus_write()
514 * rdtgroup_remove - the helper to remove resource group safely
527 kernfs_put(rdtgrp->kn); in rdtgroup_remove()
553 if ((rdtgrp->type == RDTCTRL_GROUP && tsk->closid == rdtgrp->closid && in __rdtgroup_move_task()
554 tsk->rmid == rdtgrp->mon.rmid) || in __rdtgroup_move_task()
555 (rdtgrp->type == RDTMON_GROUP && tsk->rmid == rdtgrp->mon.rmid && in __rdtgroup_move_task()
556 tsk->closid == rdtgrp->mon.parent->closid)) in __rdtgroup_move_task()
560 * Set the task's closid/rmid before the PQR_ASSOC MSR can be in __rdtgroup_move_task()
568 if (rdtgrp->type == RDTCTRL_GROUP) { in __rdtgroup_move_task()
569 WRITE_ONCE(tsk->closid, rdtgrp->closid); in __rdtgroup_move_task()
570 WRITE_ONCE(tsk->rmid, rdtgrp->mon.rmid); in __rdtgroup_move_task()
571 } else if (rdtgrp->type == RDTMON_GROUP) { in __rdtgroup_move_task()
572 if (rdtgrp->mon.parent->closid == tsk->closid) { in __rdtgroup_move_task()
573 WRITE_ONCE(tsk->rmid, rdtgrp->mon.rmid); in __rdtgroup_move_task()
576 return -EINVAL; in __rdtgroup_move_task()
581 * Ensure the task's closid and rmid are written before determining if in __rdtgroup_move_task()
587 * By now, the task's closid and rmid are set. If the task is current in __rdtgroup_move_task()
600 (r->type == RDTCTRL_GROUP) && (t->closid == r->closid)); in is_closid_match()
606 (r->type == RDTMON_GROUP) && (t->rmid == r->mon.rmid)); in is_rmid_match()
610 * rdtgroup_tasks_assigned - Test if tasks have been assigned to resource group
645 if (!uid_eq(cred->euid, GLOBAL_ROOT_UID) && in rdtgroup_task_write_permission()
646 !uid_eq(cred->euid, tcred->uid) && in rdtgroup_task_write_permission()
647 !uid_eq(cred->euid, tcred->suid)) { in rdtgroup_task_write_permission()
648 rdt_last_cmd_printf("No permission to move task %d\n", task->pid); in rdtgroup_task_write_permission()
649 ret = -EPERM; in rdtgroup_task_write_permission()
668 return -ESRCH; in rdtgroup_move_task()
693 return -EINVAL; in rdtgroup_tasks_write()
694 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_tasks_write()
696 rdtgroup_kn_unlock(of->kn); in rdtgroup_tasks_write()
697 return -ENOENT; in rdtgroup_tasks_write()
701 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED || in rdtgroup_tasks_write()
702 rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) { in rdtgroup_tasks_write()
703 ret = -EINVAL; in rdtgroup_tasks_write()
704 rdt_last_cmd_puts("Pseudo-locking in progress\n"); in rdtgroup_tasks_write()
711 rdtgroup_kn_unlock(of->kn); in rdtgroup_tasks_write()
716 static void show_rdt_tasks(struct rdtgroup *r, struct seq_file *s) in show_rdt_tasks() argument
723 seq_printf(s, "%d\n", t->pid); in show_rdt_tasks()
729 struct seq_file *s, void *v) in rdtgroup_tasks_show() argument
734 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_tasks_show()
736 show_rdt_tasks(rdtgrp, s); in rdtgroup_tasks_show()
738 ret = -ENOENT; in rdtgroup_tasks_show()
739 rdtgroup_kn_unlock(of->kn); in rdtgroup_tasks_show()
777 int proc_resctrl_show(struct seq_file *s, struct pid_namespace *ns, in proc_resctrl_show() argument
787 seq_puts(s, "res:\nmon:\n"); in proc_resctrl_show()
798 if (rdtg->mode != RDT_MODE_SHAREABLE && in proc_resctrl_show()
799 rdtg->mode != RDT_MODE_EXCLUSIVE) in proc_resctrl_show()
802 if (rdtg->closid != tsk->closid) in proc_resctrl_show()
805 seq_printf(s, "res:%s%s\n", (rdtg == &rdtgroup_default) ? "/" : "", in proc_resctrl_show()
806 rdtg->kn->name); in proc_resctrl_show()
807 seq_puts(s, "mon:"); in proc_resctrl_show()
808 list_for_each_entry(crg, &rdtg->mon.crdtgrp_list, in proc_resctrl_show()
810 if (tsk->rmid != crg->mon.rmid) in proc_resctrl_show()
812 seq_printf(s, "%s", crg->kn->name); in proc_resctrl_show()
815 seq_putc(s, '\n'); in proc_resctrl_show()
822 ret = -ENOENT; in proc_resctrl_show()
838 seq_printf(seq, "%.*s", len, last_cmd_status_buf); in rdt_last_cmd_status_show()
848 struct resctrl_schema *s = of->kn->parent->priv; in rdt_num_closids_show() local
850 seq_printf(seq, "%u\n", s->num_closid); in rdt_num_closids_show()
857 struct resctrl_schema *s = of->kn->parent->priv; in rdt_default_ctrl_show() local
858 struct rdt_resource *r = s->res; in rdt_default_ctrl_show()
860 seq_printf(seq, "%x\n", r->default_ctrl); in rdt_default_ctrl_show()
867 struct resctrl_schema *s = of->kn->parent->priv; in rdt_min_cbm_bits_show() local
868 struct rdt_resource *r = s->res; in rdt_min_cbm_bits_show()
870 seq_printf(seq, "%u\n", r->cache.min_cbm_bits); in rdt_min_cbm_bits_show()
877 struct resctrl_schema *s = of->kn->parent->priv; in rdt_shareable_bits_show() local
878 struct rdt_resource *r = s->res; in rdt_shareable_bits_show()
880 seq_printf(seq, "%x\n", r->cache.shareable_bits); in rdt_shareable_bits_show()
885 * rdt_bit_usage_show - Display current usage of resources
891 * 0 - currently unused
892 * X - currently available for sharing and used by software and hardware
893 * H - currently used by hardware only but available for software use
894 * S - currently used and shareable by software only
895 * E - currently used exclusively by one resource group
896 * P - currently pseudo-locked by one resource group
901 struct resctrl_schema *s = of->kn->parent->priv; in rdt_bit_usage_show() local
908 struct rdt_resource *r = s->res; in rdt_bit_usage_show()
911 enum rdtgrp_mode mode; in rdt_bit_usage_show() local
916 hw_shareable = r->cache.shareable_bits; in rdt_bit_usage_show()
917 list_for_each_entry(dom, &r->domains, list) { in rdt_bit_usage_show()
922 seq_printf(seq, "%d=", dom->id); in rdt_bit_usage_show()
927 s->conf_type); in rdt_bit_usage_show()
928 mode = rdtgroup_mode_by_closid(i); in rdt_bit_usage_show()
929 switch (mode) { in rdt_bit_usage_show()
940 * associated with this CLOSID in this mode in rdt_bit_usage_show()
948 "invalid mode for closid %d\n", i); in rdt_bit_usage_show()
952 for (i = r->cache.cbm_len - 1; i >= 0; i--) { in rdt_bit_usage_show()
953 pseudo_locked = dom->plr ? dom->plr->cbm : 0; in rdt_bit_usage_show()
963 seq_putc(seq, 'S'); in rdt_bit_usage_show()
981 struct resctrl_schema *s = of->kn->parent->priv; in rdt_min_bw_show() local
982 struct rdt_resource *r = s->res; in rdt_min_bw_show()
984 seq_printf(seq, "%u\n", r->membw.min_bw); in rdt_min_bw_show()
991 struct rdt_resource *r = of->kn->parent->priv; in rdt_num_rmids_show()
993 seq_printf(seq, "%d\n", r->num_rmid); in rdt_num_rmids_show()
1001 struct rdt_resource *r = of->kn->parent->priv; in rdt_mon_features_show()
1004 list_for_each_entry(mevt, &r->evt_list, list) in rdt_mon_features_show()
1005 seq_printf(seq, "%s\n", mevt->name); in rdt_mon_features_show()
1013 struct resctrl_schema *s = of->kn->parent->priv; in rdt_bw_gran_show() local
1014 struct rdt_resource *r = s->res; in rdt_bw_gran_show()
1016 seq_printf(seq, "%u\n", r->membw.bw_gran); in rdt_bw_gran_show()
1023 struct resctrl_schema *s = of->kn->parent->priv; in rdt_delay_linear_show() local
1024 struct rdt_resource *r = s->res; in rdt_delay_linear_show()
1026 seq_printf(seq, "%u\n", r->membw.delay_linear); in rdt_delay_linear_show()
1041 struct resctrl_schema *s = of->kn->parent->priv; in rdt_thread_throttle_mode_show() local
1042 struct rdt_resource *r = s->res; in rdt_thread_throttle_mode_show()
1044 if (r->membw.throttle_mode == THREAD_THROTTLE_PER_THREAD) in rdt_thread_throttle_mode_show()
1045 seq_puts(seq, "per-thread\n"); in rdt_thread_throttle_mode_show()
1063 return -EINVAL; in max_threshold_occ_write()
1071 * rdtgroup_mode_show - Display mode of this resource group
1074 struct seq_file *s, void *v) in rdtgroup_mode_show() argument
1078 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_mode_show()
1080 rdtgroup_kn_unlock(of->kn); in rdtgroup_mode_show()
1081 return -ENOENT; in rdtgroup_mode_show()
1084 seq_printf(s, "%s\n", rdtgroup_mode_str(rdtgrp->mode)); in rdtgroup_mode_show()
1086 rdtgroup_kn_unlock(of->kn); in rdtgroup_mode_show()
1104 * __rdtgroup_cbm_overlaps - Does CBM for intended closid overlap with other
1114 * resource groups in exclusive mode will be considered. If @exclusive
1127 enum rdtgrp_mode mode; in __rdtgroup_cbm_overlaps() local
1133 ctrl_b = r->cache.shareable_bits; in __rdtgroup_cbm_overlaps()
1134 if (bitmap_intersects(&cbm, &ctrl_b, r->cache.cbm_len)) in __rdtgroup_cbm_overlaps()
1141 mode = rdtgroup_mode_by_closid(i); in __rdtgroup_cbm_overlaps()
1143 mode != RDT_MODE_PSEUDO_LOCKSETUP) { in __rdtgroup_cbm_overlaps()
1144 if (bitmap_intersects(&cbm, &ctrl_b, r->cache.cbm_len)) { in __rdtgroup_cbm_overlaps()
1146 if (mode == RDT_MODE_EXCLUSIVE) in __rdtgroup_cbm_overlaps()
1159 * rdtgroup_cbm_overlaps - Does CBM overlap with other use of hardware
1160 * @s: Schema for the resource to which domain instance @d belongs.
1169 * which the CBM is intended though - when dealing with CDP resources that
1178 bool rdtgroup_cbm_overlaps(struct resctrl_schema *s, struct rdt_domain *d, in rdtgroup_cbm_overlaps() argument
1181 enum resctrl_conf_type peer_type = resctrl_peer_type(s->conf_type); in rdtgroup_cbm_overlaps()
1182 struct rdt_resource *r = s->res; in rdtgroup_cbm_overlaps()
1184 if (__rdtgroup_cbm_overlaps(r, d, cbm, closid, s->conf_type, in rdtgroup_cbm_overlaps()
1188 if (!resctrl_arch_get_cdp_enabled(r->rid)) in rdtgroup_cbm_overlaps()
1194 * rdtgroup_mode_test_exclusive - Test if this resource group can be exclusive
1207 int closid = rdtgrp->closid; in rdtgroup_mode_test_exclusive()
1208 struct resctrl_schema *s; in rdtgroup_mode_test_exclusive() local
1214 list_for_each_entry(s, &resctrl_schema_all, list) { in rdtgroup_mode_test_exclusive()
1215 r = s->res; in rdtgroup_mode_test_exclusive()
1216 if (r->rid == RDT_RESOURCE_MBA) in rdtgroup_mode_test_exclusive()
1219 list_for_each_entry(d, &r->domains, list) { in rdtgroup_mode_test_exclusive()
1221 s->conf_type); in rdtgroup_mode_test_exclusive()
1222 if (rdtgroup_cbm_overlaps(s, d, ctrl, closid, false)) { in rdtgroup_mode_test_exclusive()
1238 * rdtgroup_mode_write - Modify the resource group's mode
1245 enum rdtgrp_mode mode; in rdtgroup_mode_write() local
1249 if (nbytes == 0 || buf[nbytes - 1] != '\n') in rdtgroup_mode_write()
1250 return -EINVAL; in rdtgroup_mode_write()
1251 buf[nbytes - 1] = '\0'; in rdtgroup_mode_write()
1253 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_mode_write()
1255 rdtgroup_kn_unlock(of->kn); in rdtgroup_mode_write()
1256 return -ENOENT; in rdtgroup_mode_write()
1261 mode = rdtgrp->mode; in rdtgroup_mode_write()
1263 if ((!strcmp(buf, "shareable") && mode == RDT_MODE_SHAREABLE) || in rdtgroup_mode_write()
1264 (!strcmp(buf, "exclusive") && mode == RDT_MODE_EXCLUSIVE) || in rdtgroup_mode_write()
1265 (!strcmp(buf, "pseudo-locksetup") && in rdtgroup_mode_write()
1266 mode == RDT_MODE_PSEUDO_LOCKSETUP) || in rdtgroup_mode_write()
1267 (!strcmp(buf, "pseudo-locked") && mode == RDT_MODE_PSEUDO_LOCKED)) in rdtgroup_mode_write()
1270 if (mode == RDT_MODE_PSEUDO_LOCKED) { in rdtgroup_mode_write()
1271 rdt_last_cmd_puts("Cannot change pseudo-locked group\n"); in rdtgroup_mode_write()
1272 ret = -EINVAL; in rdtgroup_mode_write()
1277 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) { in rdtgroup_mode_write()
1282 rdtgrp->mode = RDT_MODE_SHAREABLE; in rdtgroup_mode_write()
1285 ret = -EINVAL; in rdtgroup_mode_write()
1288 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) { in rdtgroup_mode_write()
1293 rdtgrp->mode = RDT_MODE_EXCLUSIVE; in rdtgroup_mode_write()
1294 } else if (!strcmp(buf, "pseudo-locksetup")) { in rdtgroup_mode_write()
1298 rdtgrp->mode = RDT_MODE_PSEUDO_LOCKSETUP; in rdtgroup_mode_write()
1300 rdt_last_cmd_puts("Unknown or unsupported mode\n"); in rdtgroup_mode_write()
1301 ret = -EINVAL; in rdtgroup_mode_write()
1305 rdtgroup_kn_unlock(of->kn); in rdtgroup_mode_write()
1310 * rdtgroup_cbm_to_size - Translate CBM to size in bytes
1331 num_b = bitmap_weight(&cbm, r->cache.cbm_len); in rdtgroup_cbm_to_size()
1332 ci = get_cpu_cacheinfo(cpumask_any(&d->cpu_mask)); in rdtgroup_cbm_to_size()
1333 for (i = 0; i < ci->num_leaves; i++) { in rdtgroup_cbm_to_size()
1334 if (ci->info_list[i].level == r->cache_level) { in rdtgroup_cbm_to_size()
1335 size = ci->info_list[i].size / r->cache.cbm_len * num_b; in rdtgroup_cbm_to_size()
1344 * rdtgroup_size_show - Display size in bytes of allocated regions
1351 struct seq_file *s, void *v) in rdtgroup_size_show() argument
1364 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_size_show()
1366 rdtgroup_kn_unlock(of->kn); in rdtgroup_size_show()
1367 return -ENOENT; in rdtgroup_size_show()
1370 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED) { in rdtgroup_size_show()
1371 if (!rdtgrp->plr->d) { in rdtgroup_size_show()
1374 ret = -ENODEV; in rdtgroup_size_show()
1376 seq_printf(s, "%*s:", max_name_width, in rdtgroup_size_show()
1377 rdtgrp->plr->s->name); in rdtgroup_size_show()
1378 size = rdtgroup_cbm_to_size(rdtgrp->plr->s->res, in rdtgroup_size_show()
1379 rdtgrp->plr->d, in rdtgroup_size_show()
1380 rdtgrp->plr->cbm); in rdtgroup_size_show()
1381 seq_printf(s, "%d=%u\n", rdtgrp->plr->d->id, size); in rdtgroup_size_show()
1386 closid = rdtgrp->closid; in rdtgroup_size_show()
1389 r = schema->res; in rdtgroup_size_show()
1390 type = schema->conf_type; in rdtgroup_size_show()
1392 seq_printf(s, "%*s:", max_name_width, schema->name); in rdtgroup_size_show()
1393 list_for_each_entry(d, &r->domains, list) { in rdtgroup_size_show()
1395 seq_putc(s, ';'); in rdtgroup_size_show()
1396 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) { in rdtgroup_size_show()
1400 ctrl = d->mbps_val[closid]; in rdtgroup_size_show()
1405 if (r->rid == RDT_RESOURCE_MBA) in rdtgroup_size_show()
1410 seq_printf(s, "%d=%u", d->id, size); in rdtgroup_size_show()
1413 seq_putc(s, '\n'); in rdtgroup_size_show()
1417 rdtgroup_kn_unlock(of->kn); in rdtgroup_size_show()
1426 .mode = 0444,
1433 .mode = 0444,
1440 .mode = 0444,
1447 .mode = 0444,
1454 .mode = 0444,
1461 .mode = 0444,
1468 .mode = 0444,
1475 .mode = 0444,
1482 .mode = 0444,
1489 .mode = 0444,
1496 .mode = 0444,
1508 .mode = 0444,
1514 .mode = 0644,
1522 .mode = 0644,
1530 .mode = 0644,
1539 .mode = 0644,
1547 .mode = 0644,
1554 .name = "mode",
1555 .mode = 0644,
1563 .mode = 0444,
1582 if (rft->fflags && ((fflags & rft->fflags) == rft->fflags)) { in rdtgroup_add_files()
1591 pr_warn("Failed to add %s, err=%d\n", rft->name, ret); in rdtgroup_add_files()
1592 while (--rft >= rfts) { in rdtgroup_add_files()
1593 if ((fflags & rft->fflags) == rft->fflags) in rdtgroup_add_files()
1594 kernfs_remove_by_name(kn, rft->name); in rdtgroup_add_files()
1608 if (!strcmp(rft->name, name)) in rdtgroup_get_rftype_by_name()
1623 rft->fflags = RF_CTRL_INFO | RFTYPE_RES_MB; in thread_throttle_mode_init()
1627 * rdtgroup_kn_mode_restrict - Restrict user access to named resctrl file
1635 * resctrl file has been locked down - that it is not relevant to the
1637 * on to protect from user access because after the file's permissions
1649 kn = kernfs_find_and_get_ns(r->kn, name, NULL); in rdtgroup_kn_mode_restrict()
1651 return -ENOENT; in rdtgroup_kn_mode_restrict()
1671 * rdtgroup_kn_mode_restore - Restore user access to named resctrl file
1693 if (!strcmp(rft->name, name)) in rdtgroup_kn_mode_restore()
1694 iattr.ia_mode = rft->mode & mask; in rdtgroup_kn_mode_restore()
1697 kn = kernfs_find_and_get_ns(r->kn, name, NULL); in rdtgroup_kn_mode_restore()
1699 return -ENOENT; in rdtgroup_kn_mode_restore()
1705 iattr.ia_mode |= parent->mode; in rdtgroup_kn_mode_restore()
1730 kn_info->mode, priv); in rdtgroup_mkdir_info_resdir()
1747 struct resctrl_schema *s; in rdtgroup_create_info_dir() local
1754 kn_info = kernfs_create_dir(parent_kn, "info", parent_kn->mode, NULL); in rdtgroup_create_info_dir()
1763 list_for_each_entry(s, &resctrl_schema_all, list) { in rdtgroup_create_info_dir()
1764 r = s->res; in rdtgroup_create_info_dir()
1765 fflags = r->fflags | RF_CTRL_INFO; in rdtgroup_create_info_dir()
1766 ret = rdtgroup_mkdir_info_resdir(s, s->name, fflags); in rdtgroup_create_info_dir()
1772 fflags = r->fflags | RF_MON_INFO; in rdtgroup_create_info_dir()
1773 sprintf(name, "%s_MON", r->name); in rdtgroup_create_info_dir()
1800 kn = kernfs_create_dir(parent_kn, name, parent_kn->mode, prgrp); in mongroup_create_dir()
1852 return -EINVAL; in set_cache_qos_cfg()
1855 return -ENOMEM; in set_cache_qos_cfg()
1858 list_for_each_entry(d, &r_l->domains, list) { in set_cache_qos_cfg()
1859 if (r_l->cache.arch_has_per_cpu_cfg) in set_cache_qos_cfg()
1861 for_each_cpu(cpu, &d->cpu_mask) in set_cache_qos_cfg()
1865 cpumask_set_cpu(cpumask_any(&d->cpu_mask), cpu_mask); in set_cache_qos_cfg()
1868 /* Update QOS_CFG MSR on this cpu if it's in cpu_mask. */ in set_cache_qos_cfg()
1885 if (!r->cdp_capable) in rdt_domain_reconfigure_cdp()
1888 if (r->rid == RDT_RESOURCE_L2) in rdt_domain_reconfigure_cdp()
1889 l2_qos_cfg_update(&hw_res->cdp_enabled); in rdt_domain_reconfigure_cdp()
1891 if (r->rid == RDT_RESOURCE_L3) in rdt_domain_reconfigure_cdp()
1892 l3_qos_cfg_update(&hw_res->cdp_enabled); in rdt_domain_reconfigure_cdp()
1898 int cpu = cpumask_any(&d->cpu_mask); in mba_sc_domain_allocate()
1901 d->mbps_val = kcalloc_node(num_closid, sizeof(*d->mbps_val), in mba_sc_domain_allocate()
1903 if (!d->mbps_val) in mba_sc_domain_allocate()
1904 return -ENOMEM; in mba_sc_domain_allocate()
1907 d->mbps_val[i] = MBA_MAX_MBPS; in mba_sc_domain_allocate()
1915 kfree(d->mbps_val); in mba_sc_domain_destroy()
1916 d->mbps_val = NULL; in mba_sc_domain_destroy()
1928 r->alloc_capable && is_mba_linear()); in supports_mba_mbps()
1943 return -EINVAL; in set_mba_sc()
1945 r->membw.mba_sc = mba_sc; in set_mba_sc()
1947 list_for_each_entry(d, &r->domains, list) { in set_mba_sc()
1949 d->mbps_val[i] = MBA_MAX_MBPS; in set_mba_sc()
1960 if (!r_l->alloc_capable) in cdp_enable()
1961 return -EINVAL; in cdp_enable()
1974 if (r_hw->cdp_enabled) { in cdp_disable()
1976 r_hw->cdp_enabled = false; in cdp_disable()
1984 if (!hw_res->r_resctrl.cdp_capable) in resctrl_arch_set_cdp_enabled()
1985 return -EINVAL; in resctrl_arch_set_cdp_enabled()
2015 * All the resource directories use "kn->priv" in kernfs_to_rdtgroup()
2020 if (kn == kn_info || kn->parent == kn_info) in kernfs_to_rdtgroup()
2023 return kn->priv; in kernfs_to_rdtgroup()
2025 return kn->parent->priv; in kernfs_to_rdtgroup()
2036 atomic_inc(&rdtgrp->waitcount); in rdtgroup_kn_lock_live()
2042 if (rdtgrp->flags & RDT_DELETED) in rdtgroup_kn_lock_live()
2057 if (atomic_dec_and_test(&rdtgrp->waitcount) && in rdtgroup_kn_unlock()
2058 (rdtgrp->flags & RDT_DELETED)) { in rdtgroup_kn_unlock()
2059 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP || in rdtgroup_kn_unlock()
2060 rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED) in rdtgroup_kn_unlock()
2077 if (ctx->enable_cdpl2) in rdt_enable_ctx()
2080 if (!ret && ctx->enable_cdpl3) in rdt_enable_ctx()
2083 if (!ret && ctx->enable_mba_mbps) in rdt_enable_ctx()
2091 struct resctrl_schema *s; in schemata_list_add() local
2095 s = kzalloc(sizeof(*s), GFP_KERNEL); in schemata_list_add()
2096 if (!s) in schemata_list_add()
2097 return -ENOMEM; in schemata_list_add()
2099 s->res = r; in schemata_list_add()
2100 s->num_closid = resctrl_arch_get_num_closid(r); in schemata_list_add()
2101 if (resctrl_arch_get_cdp_enabled(r->rid)) in schemata_list_add()
2102 s->num_closid /= 2; in schemata_list_add()
2104 s->conf_type = type; in schemata_list_add()
2117 ret = snprintf(s->name, sizeof(s->name), "%s%s", r->name, suffix); in schemata_list_add()
2118 if (ret >= sizeof(s->name)) { in schemata_list_add()
2119 kfree(s); in schemata_list_add()
2120 return -EINVAL; in schemata_list_add()
2123 cl = strlen(s->name); in schemata_list_add()
2130 if (r->cdp_capable && !resctrl_arch_get_cdp_enabled(r->rid)) in schemata_list_add()
2136 INIT_LIST_HEAD(&s->list); in schemata_list_add()
2137 list_add(&s->list, &resctrl_schema_all); in schemata_list_add()
2148 if (resctrl_arch_get_cdp_enabled(r->rid)) { in schemata_list_create()
2167 struct resctrl_schema *s, *tmp; in schemata_list_destroy() local
2169 list_for_each_entry_safe(s, tmp, &resctrl_schema_all, list) { in schemata_list_destroy()
2170 list_del(&s->list); in schemata_list_destroy()
2171 kfree(s); in schemata_list_destroy()
2188 ret = -EBUSY; in rdt_get_tree()
2240 list_for_each_entry(dom, &r->domains, list) in rdt_get_tree()
2259 if (ctx->enable_mba_mbps) in rdt_get_tree()
2296 ctx->enable_cdpl3 = true; in rdt_parse_param()
2299 ctx->enable_cdpl2 = true; in rdt_parse_param()
2303 return -EINVAL; in rdt_parse_param()
2304 ctx->enable_mba_mbps = true; in rdt_parse_param()
2308 return -EINVAL; in rdt_parse_param()
2331 return -ENOMEM; in rdt_init_fs_context()
2333 ctx->kfc.root = rdt_root; in rdt_init_fs_context()
2334 ctx->kfc.magic = RDTGROUP_SUPER_MAGIC; in rdt_init_fs_context()
2335 fc->fs_private = &ctx->kfc; in rdt_init_fs_context()
2336 fc->ops = &rdt_fs_context_ops; in rdt_init_fs_context()
2337 put_user_ns(fc->user_ns); in rdt_init_fs_context()
2338 fc->user_ns = get_user_ns(&init_user_ns); in rdt_init_fs_context()
2339 fc->global = true; in rdt_init_fs_context()
2353 return -ENOMEM; in reset_all_ctrls()
2357 msr_param.high = hw_res->num_closid; in reset_all_ctrls()
2364 list_for_each_entry(d, &r->domains, list) { in reset_all_ctrls()
2366 cpumask_set_cpu(cpumask_any(&d->cpu_mask), cpu_mask); in reset_all_ctrls()
2368 for (i = 0; i < hw_res->num_closid; i++) in reset_all_ctrls()
2369 hw_dom->ctrl_val[i] = r->default_ctrl; in reset_all_ctrls()
2372 /* Update CBM on this cpu if it's in cpu_mask. */ in reset_all_ctrls()
2401 WRITE_ONCE(t->closid, to->closid); in rdt_move_group_tasks()
2402 WRITE_ONCE(t->rmid, to->mon.rmid); in rdt_move_group_tasks()
2423 head = &rdtgrp->mon.crdtgrp_list; in free_all_child_rdtgrp()
2425 free_rmid(sentry->mon.rmid); in free_all_child_rdtgrp()
2426 list_del(&sentry->mon.crdtgrp_list); in free_all_child_rdtgrp()
2428 if (atomic_read(&sentry->waitcount) != 0) in free_all_child_rdtgrp()
2429 sentry->flags = RDT_DELETED; in free_all_child_rdtgrp()
2453 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP || in rmdir_all_sub()
2454 rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED) in rmdir_all_sub()
2463 &rdtgroup_default.cpu_mask, &rdtgrp->cpu_mask); in rmdir_all_sub()
2465 free_rmid(rdtgrp->mon.rmid); in rmdir_all_sub()
2467 kernfs_remove(rdtgrp->kn); in rmdir_all_sub()
2468 list_del(&rdtgrp->rdtgroup_list); in rmdir_all_sub()
2470 if (atomic_read(&rdtgrp->waitcount) != 0) in rmdir_all_sub()
2471 rdtgrp->flags = RDT_DELETED; in rmdir_all_sub()
2498 rdtgroup_default.mode = RDT_MODE_SHAREABLE; in rdt_kill_sb()
2547 sprintf(name, "mon_%s_%02d", r->name, dom_id); in rmdir_mondata_subdir_allrdtgrp()
2548 kernfs_remove_by_name(prgrp->mon.mon_data_kn, name); in rmdir_mondata_subdir_allrdtgrp()
2550 list_for_each_entry(crgrp, &prgrp->mon.crdtgrp_list, mon.crdtgrp_list) in rmdir_mondata_subdir_allrdtgrp()
2551 kernfs_remove_by_name(crgrp->mon.mon_data_kn, name); in rmdir_mondata_subdir_allrdtgrp()
2566 sprintf(name, "mon_%s_%02d", r->name, d->id); in mkdir_mondata_subdir()
2568 kn = kernfs_create_dir(parent_kn, name, parent_kn->mode, prgrp); in mkdir_mondata_subdir()
2576 if (WARN_ON(list_empty(&r->evt_list))) { in mkdir_mondata_subdir()
2577 ret = -EPERM; in mkdir_mondata_subdir()
2581 priv.u.rid = r->rid; in mkdir_mondata_subdir()
2582 priv.u.domid = d->id; in mkdir_mondata_subdir()
2583 list_for_each_entry(mevt, &r->evt_list, list) { in mkdir_mondata_subdir()
2584 priv.u.evtid = mevt->evtid; in mkdir_mondata_subdir()
2585 ret = mon_addfile(kn, mevt->name, priv.priv); in mkdir_mondata_subdir()
2589 if (is_mbm_event(mevt->evtid)) in mkdir_mondata_subdir()
2590 mon_event_read(&rr, r, d, prgrp, mevt->evtid, true); in mkdir_mondata_subdir()
2612 parent_kn = prgrp->mon.mon_data_kn; in mkdir_mondata_subdir_allrdtgrp()
2615 head = &prgrp->mon.crdtgrp_list; in mkdir_mondata_subdir_allrdtgrp()
2617 parent_kn = crgrp->mon.mon_data_kn; in mkdir_mondata_subdir_allrdtgrp()
2630 list_for_each_entry(dom, &r->domains, list) { in mkdir_mondata_subdir_alldom()
2692 * cbm_ensure_valid - Enforce validity on provided CBM
2708 unsigned int cbm_len = r->cache.cbm_len; in cbm_ensure_valid()
2719 bitmap_clear(&val, zero_bit, cbm_len - zero_bit); in cbm_ensure_valid()
2727 * all shareable and unused bits. All-zero CBM is invalid.
2729 static int __init_one_rdt_domain(struct rdt_domain *d, struct resctrl_schema *s, in __init_one_rdt_domain() argument
2732 enum resctrl_conf_type peer_type = resctrl_peer_type(s->conf_type); in __init_one_rdt_domain()
2733 enum resctrl_conf_type t = s->conf_type; in __init_one_rdt_domain()
2735 struct rdt_resource *r = s->res; in __init_one_rdt_domain()
2738 enum rdtgrp_mode mode; in __init_one_rdt_domain() local
2742 cfg = &d->staged_config[t]; in __init_one_rdt_domain()
2743 cfg->have_new_ctrl = false; in __init_one_rdt_domain()
2744 cfg->new_ctrl = r->cache.shareable_bits; in __init_one_rdt_domain()
2745 used_b = r->cache.shareable_bits; in __init_one_rdt_domain()
2748 mode = rdtgroup_mode_by_closid(i); in __init_one_rdt_domain()
2749 if (mode == RDT_MODE_PSEUDO_LOCKSETUP) in __init_one_rdt_domain()
2752 * until the schemata is written, and the mode in __init_one_rdt_domain()
2757 * If CDP is active include peer domain's in __init_one_rdt_domain()
2761 if (resctrl_arch_get_cdp_enabled(r->rid)) in __init_one_rdt_domain()
2767 s->conf_type); in __init_one_rdt_domain()
2769 if (mode == RDT_MODE_SHAREABLE) in __init_one_rdt_domain()
2770 cfg->new_ctrl |= ctrl_val | peer_ctl; in __init_one_rdt_domain()
2773 if (d->plr && d->plr->cbm > 0) in __init_one_rdt_domain()
2774 used_b |= d->plr->cbm; in __init_one_rdt_domain()
2775 unused_b = used_b ^ (BIT_MASK(r->cache.cbm_len) - 1); in __init_one_rdt_domain()
2776 unused_b &= BIT_MASK(r->cache.cbm_len) - 1; in __init_one_rdt_domain()
2777 cfg->new_ctrl |= unused_b; in __init_one_rdt_domain()
2782 cfg->new_ctrl = cbm_ensure_valid(cfg->new_ctrl, r); in __init_one_rdt_domain()
2785 * bitmap_weight() does not access out-of-bound memory. in __init_one_rdt_domain()
2787 tmp_cbm = cfg->new_ctrl; in __init_one_rdt_domain()
2788 if (bitmap_weight(&tmp_cbm, r->cache.cbm_len) < r->cache.min_cbm_bits) { in __init_one_rdt_domain()
2789 rdt_last_cmd_printf("No space on %s:%d\n", s->name, d->id); in __init_one_rdt_domain()
2790 return -ENOSPC; in __init_one_rdt_domain()
2792 cfg->have_new_ctrl = true; in __init_one_rdt_domain()
2807 static int rdtgroup_init_cat(struct resctrl_schema *s, u32 closid) in rdtgroup_init_cat() argument
2812 list_for_each_entry(d, &s->res->domains, list) { in rdtgroup_init_cat()
2813 ret = __init_one_rdt_domain(d, s, closid); in rdtgroup_init_cat()
2827 list_for_each_entry(d, &r->domains, list) { in rdtgroup_init_mba()
2829 d->mbps_val[closid] = MBA_MAX_MBPS; in rdtgroup_init_mba()
2833 cfg = &d->staged_config[CDP_NONE]; in rdtgroup_init_mba()
2834 cfg->new_ctrl = r->default_ctrl; in rdtgroup_init_mba()
2835 cfg->have_new_ctrl = true; in rdtgroup_init_mba()
2839 /* Initialize the RDT group's allocations. */
2842 struct resctrl_schema *s; in rdtgroup_init_alloc() local
2846 list_for_each_entry(s, &resctrl_schema_all, list) { in rdtgroup_init_alloc()
2847 r = s->res; in rdtgroup_init_alloc()
2848 if (r->rid == RDT_RESOURCE_MBA) { in rdtgroup_init_alloc()
2849 rdtgroup_init_mba(r, rdtgrp->closid); in rdtgroup_init_alloc()
2853 ret = rdtgroup_init_cat(s, rdtgrp->closid); in rdtgroup_init_alloc()
2858 ret = resctrl_arch_update_domains(r, rdtgrp->closid); in rdtgroup_init_alloc()
2866 rdtgrp->mode = RDT_MODE_SHAREABLE; in rdtgroup_init_alloc()
2872 const char *name, umode_t mode, in mkdir_rdt_prepare() argument
2882 ret = -ENODEV; in mkdir_rdt_prepare()
2887 (prdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP || in mkdir_rdt_prepare()
2888 prdtgrp->mode == RDT_MODE_PSEUDO_LOCKED)) { in mkdir_rdt_prepare()
2889 ret = -EINVAL; in mkdir_rdt_prepare()
2890 rdt_last_cmd_puts("Pseudo-locking in progress\n"); in mkdir_rdt_prepare()
2897 ret = -ENOSPC; in mkdir_rdt_prepare()
2902 rdtgrp->mon.parent = prdtgrp; in mkdir_rdt_prepare()
2903 rdtgrp->type = rtype; in mkdir_rdt_prepare()
2904 INIT_LIST_HEAD(&rdtgrp->mon.crdtgrp_list); in mkdir_rdt_prepare()
2907 kn = kernfs_create_dir(parent_kn, name, mode, rdtgrp); in mkdir_rdt_prepare()
2913 rdtgrp->kn = kn; in mkdir_rdt_prepare()
2942 rdtgrp->mon.rmid = ret; in mkdir_rdt_prepare()
2944 ret = mkdir_mondata_all(kn, rdtgrp, &rdtgrp->mon.mon_data_kn); in mkdir_rdt_prepare()
2958 free_rmid(rdtgrp->mon.rmid); in mkdir_rdt_prepare()
2960 kernfs_put(rdtgrp->kn); in mkdir_rdt_prepare()
2961 kernfs_remove(rdtgrp->kn); in mkdir_rdt_prepare()
2971 kernfs_remove(rgrp->kn); in mkdir_rdt_prepare_clean()
2972 free_rmid(rgrp->mon.rmid); in mkdir_rdt_prepare_clean()
2982 const char *name, umode_t mode) in rdtgroup_mkdir_mon() argument
2987 ret = mkdir_rdt_prepare(parent_kn, name, mode, RDTMON_GROUP, &rdtgrp); in rdtgroup_mkdir_mon()
2991 prgrp = rdtgrp->mon.parent; in rdtgroup_mkdir_mon()
2992 rdtgrp->closid = prgrp->closid; in rdtgroup_mkdir_mon()
2998 list_add_tail(&rdtgrp->mon.crdtgrp_list, &prgrp->mon.crdtgrp_list); in rdtgroup_mkdir_mon()
3009 const char *name, umode_t mode) in rdtgroup_mkdir_ctrl_mon() argument
3016 ret = mkdir_rdt_prepare(parent_kn, name, mode, RDTCTRL_GROUP, &rdtgrp); in rdtgroup_mkdir_ctrl_mon()
3020 kn = rdtgrp->kn; in rdtgroup_mkdir_ctrl_mon()
3029 rdtgrp->closid = closid; in rdtgroup_mkdir_ctrl_mon()
3034 list_add(&rdtgrp->rdtgroup_list, &rdt_all_groups); in rdtgroup_mkdir_ctrl_mon()
3051 list_del(&rdtgrp->rdtgroup_list); in rdtgroup_mkdir_ctrl_mon()
3073 return (!strcmp(kn->name, "mon_groups") && in is_mon_groups()
3078 umode_t mode) in rdtgroup_mkdir() argument
3082 return -EINVAL; in rdtgroup_mkdir()
3090 return rdtgroup_mkdir_ctrl_mon(parent_kn, name, mode); in rdtgroup_mkdir()
3097 return rdtgroup_mkdir_mon(parent_kn, name, mode); in rdtgroup_mkdir()
3099 return -EPERM; in rdtgroup_mkdir()
3104 struct rdtgroup *prdtgrp = rdtgrp->mon.parent; in rdtgroup_rmdir_mon()
3111 for_each_cpu(cpu, &rdtgrp->cpu_mask) in rdtgroup_rmdir_mon()
3112 per_cpu(pqr_state.default_rmid, cpu) = prdtgrp->mon.rmid; in rdtgroup_rmdir_mon()
3117 cpumask_or(tmpmask, tmpmask, &rdtgrp->cpu_mask); in rdtgroup_rmdir_mon()
3120 rdtgrp->flags = RDT_DELETED; in rdtgroup_rmdir_mon()
3121 free_rmid(rdtgrp->mon.rmid); in rdtgroup_rmdir_mon()
3124 * Remove the rdtgrp from the parent ctrl_mon group's list in rdtgroup_rmdir_mon()
3126 WARN_ON(list_empty(&prdtgrp->mon.crdtgrp_list)); in rdtgroup_rmdir_mon()
3127 list_del(&rdtgrp->mon.crdtgrp_list); in rdtgroup_rmdir_mon()
3129 kernfs_remove(rdtgrp->kn); in rdtgroup_rmdir_mon()
3136 rdtgrp->flags = RDT_DELETED; in rdtgroup_ctrl_remove()
3137 list_del(&rdtgrp->rdtgroup_list); in rdtgroup_ctrl_remove()
3139 kernfs_remove(rdtgrp->kn); in rdtgroup_ctrl_remove()
3152 &rdtgroup_default.cpu_mask, &rdtgrp->cpu_mask); in rdtgroup_rmdir_ctrl()
3155 for_each_cpu(cpu, &rdtgrp->cpu_mask) { in rdtgroup_rmdir_ctrl()
3164 cpumask_or(tmpmask, tmpmask, &rdtgrp->cpu_mask); in rdtgroup_rmdir_ctrl()
3167 closid_free(rdtgrp->closid); in rdtgroup_rmdir_ctrl()
3168 free_rmid(rdtgrp->mon.rmid); in rdtgroup_rmdir_ctrl()
3182 struct kernfs_node *parent_kn = kn->parent; in rdtgroup_rmdir()
3188 return -ENOMEM; in rdtgroup_rmdir()
3192 ret = -EPERM; in rdtgroup_rmdir()
3203 if (rdtgrp->type == RDTCTRL_GROUP && parent_kn == rdtgroup_default.kn && in rdtgroup_rmdir()
3205 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP || in rdtgroup_rmdir()
3206 rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED) { in rdtgroup_rmdir()
3211 } else if (rdtgrp->type == RDTMON_GROUP && in rdtgroup_rmdir()
3212 is_mon_groups(parent_kn, kn->name)) { in rdtgroup_rmdir()
3215 ret = -EPERM; in rdtgroup_rmdir()
3281 bitmap_free(d->rmid_busy_llc); in domain_destroy_mon_state()
3282 kfree(d->mbm_total); in domain_destroy_mon_state()
3283 kfree(d->mbm_local); in domain_destroy_mon_state()
3290 if (supports_mba_mbps() && r->rid == RDT_RESOURCE_MBA) in resctrl_offline_domain()
3293 if (!r->mon_capable) in resctrl_offline_domain()
3301 rmdir_mondata_subdir_allrdtgrp(r, d->id); in resctrl_offline_domain()
3304 cancel_delayed_work(&d->mbm_over); in resctrl_offline_domain()
3308 * decrement rmid->ebusy. There is no way to know in resctrl_offline_domain()
3315 cancel_delayed_work(&d->cqm_limbo); in resctrl_offline_domain()
3326 d->rmid_busy_llc = bitmap_zalloc(r->num_rmid, GFP_KERNEL); in domain_setup_mon_state()
3327 if (!d->rmid_busy_llc) in domain_setup_mon_state()
3328 return -ENOMEM; in domain_setup_mon_state()
3331 tsize = sizeof(*d->mbm_total); in domain_setup_mon_state()
3332 d->mbm_total = kcalloc(r->num_rmid, tsize, GFP_KERNEL); in domain_setup_mon_state()
3333 if (!d->mbm_total) { in domain_setup_mon_state()
3334 bitmap_free(d->rmid_busy_llc); in domain_setup_mon_state()
3335 return -ENOMEM; in domain_setup_mon_state()
3339 tsize = sizeof(*d->mbm_local); in domain_setup_mon_state()
3340 d->mbm_local = kcalloc(r->num_rmid, tsize, GFP_KERNEL); in domain_setup_mon_state()
3341 if (!d->mbm_local) { in domain_setup_mon_state()
3342 bitmap_free(d->rmid_busy_llc); in domain_setup_mon_state()
3343 kfree(d->mbm_total); in domain_setup_mon_state()
3344 return -ENOMEM; in domain_setup_mon_state()
3357 if (supports_mba_mbps() && r->rid == RDT_RESOURCE_MBA) in resctrl_online_domain()
3361 if (!r->mon_capable) in resctrl_online_domain()
3369 INIT_DELAYED_WORK(&d->mbm_over, mbm_handle_overflow); in resctrl_online_domain()
3374 INIT_DELAYED_WORK(&d->cqm_limbo, cqm_handle_limbo); in resctrl_online_domain()
3384 * rdtgroup_init - rdtgroup initialization
3389 * Return: 0 on success or -errno
3418 * during the debugfs directory creation also &sb->s_type->i_mutex_key in rdtgroup_init()
3419 * (the lockdep class of inode->i_rwsem). Other filesystem in rdtgroup_init()
3421 * &sb->s_type->i_mutex_key --> &mm->mmap_lock in rdtgroup_init()
3422 * During mmap(), called with &mm->mmap_lock, the rdtgroup_mutex in rdtgroup_init()
3424 * &mm->mmap_lock --> rdtgroup_mutex for the latter that can cause in rdtgroup_init()