Lines Matching refs:rdtgrp
160 struct rdtgroup *rdtgrp; in rdtgroup_mode_by_closid() local
162 list_for_each_entry(rdtgrp, &rdt_all_groups, rdtgroup_list) { in rdtgroup_mode_by_closid()
163 if (rdtgrp->closid == closid) in rdtgroup_mode_by_closid()
164 return rdtgrp->mode; in rdtgroup_mode_by_closid()
267 struct rdtgroup *rdtgrp; in rdtgroup_cpus_show() local
271 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_cpus_show()
273 if (rdtgrp) { 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()
280 mask = &rdtgrp->plr->d->cpu_mask; in rdtgroup_cpus_show()
287 cpumask_pr_args(&rdtgrp->cpu_mask)); in rdtgroup_cpus_show()
336 static int cpus_mon_write(struct rdtgroup *rdtgrp, cpumask_var_t newmask, in cpus_mon_write() argument
339 struct rdtgroup *prgrp = rdtgrp->mon.parent, *crgrp; in cpus_mon_write()
350 cpumask_andnot(tmpmask, &rdtgrp->cpu_mask, newmask); in cpus_mon_write()
361 cpumask_andnot(tmpmask, newmask, &rdtgrp->cpu_mask); in cpus_mon_write()
365 if (crgrp == rdtgrp) in cpus_mon_write()
370 update_closid_rmid(tmpmask, rdtgrp); in cpus_mon_write()
374 cpumask_copy(&rdtgrp->cpu_mask, newmask); in cpus_mon_write()
389 static int cpus_ctrl_write(struct rdtgroup *rdtgrp, cpumask_var_t newmask, in cpus_ctrl_write() argument
396 cpumask_andnot(tmpmask, &rdtgrp->cpu_mask, newmask); in cpus_ctrl_write()
399 if (rdtgrp == &rdtgroup_default) { in cpus_ctrl_write()
415 cpumask_andnot(tmpmask, newmask, &rdtgrp->cpu_mask); in cpus_ctrl_write()
418 if (r == rdtgrp) in cpus_ctrl_write()
424 update_closid_rmid(tmpmask, rdtgrp); 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()
437 update_closid_rmid(tmpmask, rdtgrp); in cpus_ctrl_write()
448 struct rdtgroup *rdtgrp; in rdtgroup_cpus_write() local
466 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_cpus_write()
467 if (!rdtgrp) { 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()
497 if (rdtgrp->type == RDTCTRL_GROUP) in rdtgroup_cpus_write()
498 ret = cpus_ctrl_write(rdtgrp, newmask, tmpmask, tmpmask1); in rdtgroup_cpus_write()
499 else if (rdtgrp->type == RDTMON_GROUP) in rdtgroup_cpus_write()
500 ret = cpus_mon_write(rdtgrp, newmask, tmpmask); in rdtgroup_cpus_write()
525 static void rdtgroup_remove(struct rdtgroup *rdtgrp) in rdtgroup_remove() argument
527 kernfs_put(rdtgrp->kn); in rdtgroup_remove()
528 kfree(rdtgrp); in rdtgroup_remove()
550 struct rdtgroup *rdtgrp) in __rdtgroup_move_task() argument
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()
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()
656 static int rdtgroup_move_task(pid_t pid, struct rdtgroup *rdtgrp, in rdtgroup_move_task() argument
679 ret = __rdtgroup_move_task(tsk, rdtgrp); in rdtgroup_move_task()
688 struct rdtgroup *rdtgrp; in rdtgroup_tasks_write() local
694 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_tasks_write()
695 if (!rdtgrp) { 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()
708 ret = rdtgroup_move_task(pid, rdtgrp, of); in rdtgroup_tasks_write()
731 struct rdtgroup *rdtgrp; in rdtgroup_tasks_show() local
734 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_tasks_show()
735 if (rdtgrp) in rdtgroup_tasks_show()
736 show_rdt_tasks(rdtgrp, s); in rdtgroup_tasks_show()
1076 struct rdtgroup *rdtgrp; in rdtgroup_mode_show() local
1078 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_mode_show()
1079 if (!rdtgrp) { in rdtgroup_mode_show()
1084 seq_printf(s, "%s\n", rdtgroup_mode_str(rdtgrp->mode)); in rdtgroup_mode_show()
1205 static bool rdtgroup_mode_test_exclusive(struct rdtgroup *rdtgrp) in rdtgroup_mode_test_exclusive() argument
1207 int closid = rdtgrp->closid; in rdtgroup_mode_test_exclusive()
1244 struct rdtgroup *rdtgrp; in rdtgroup_mode_write() local
1253 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_mode_write()
1254 if (!rdtgrp) { in rdtgroup_mode_write()
1261 mode = rdtgrp->mode; in rdtgroup_mode_write()
1277 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) { in rdtgroup_mode_write()
1278 ret = rdtgroup_locksetup_exit(rdtgrp); in rdtgroup_mode_write()
1282 rdtgrp->mode = RDT_MODE_SHAREABLE; in rdtgroup_mode_write()
1284 if (!rdtgroup_mode_test_exclusive(rdtgrp)) { in rdtgroup_mode_write()
1288 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) { in rdtgroup_mode_write()
1289 ret = rdtgroup_locksetup_exit(rdtgrp); in rdtgroup_mode_write()
1293 rdtgrp->mode = RDT_MODE_EXCLUSIVE; in rdtgroup_mode_write()
1295 ret = rdtgroup_locksetup_enter(rdtgrp); in rdtgroup_mode_write()
1298 rdtgrp->mode = RDT_MODE_PSEUDO_LOCKSETUP; in rdtgroup_mode_write()
1355 struct rdtgroup *rdtgrp; in rdtgroup_size_show() local
1364 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_size_show()
1365 if (!rdtgrp) { 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()
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()
1396 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) { in rdtgroup_size_show()
2031 struct rdtgroup *rdtgrp = kernfs_to_rdtgroup(kn); in rdtgroup_kn_lock_live() local
2033 if (!rdtgrp) in rdtgroup_kn_lock_live()
2036 atomic_inc(&rdtgrp->waitcount); in rdtgroup_kn_lock_live()
2042 if (rdtgrp->flags & RDT_DELETED) in rdtgroup_kn_lock_live()
2045 return rdtgrp; in rdtgroup_kn_lock_live()
2050 struct rdtgroup *rdtgrp = kernfs_to_rdtgroup(kn); in rdtgroup_kn_unlock() local
2052 if (!rdtgrp) in rdtgroup_kn_unlock()
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()
2061 rdtgroup_pseudo_lock_remove(rdtgrp); in rdtgroup_kn_unlock()
2063 rdtgroup_remove(rdtgrp); in rdtgroup_kn_unlock()
2418 static void free_all_child_rdtgrp(struct rdtgroup *rdtgrp) in free_all_child_rdtgrp() argument
2423 head = &rdtgrp->mon.crdtgrp_list; in free_all_child_rdtgrp()
2440 struct rdtgroup *rdtgrp, *tmp; in rmdir_all_sub() local
2445 list_for_each_entry_safe(rdtgrp, tmp, &rdt_all_groups, rdtgroup_list) { in rmdir_all_sub()
2447 free_all_child_rdtgrp(rdtgrp); in rmdir_all_sub()
2450 if (rdtgrp == &rdtgroup_default) in rmdir_all_sub()
2453 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP || in rmdir_all_sub()
2454 rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED) in rmdir_all_sub()
2455 rdtgroup_pseudo_lock_remove(rdtgrp); 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()
2473 rdtgroup_remove(rdtgrp); in rmdir_all_sub()
2840 static int rdtgroup_init_alloc(struct rdtgroup *rdtgrp) in rdtgroup_init_alloc() argument
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()
2875 struct rdtgroup *prdtgrp, *rdtgrp; in mkdir_rdt_prepare() local
2895 rdtgrp = kzalloc(sizeof(*rdtgrp), GFP_KERNEL); in mkdir_rdt_prepare()
2896 if (!rdtgrp) { in mkdir_rdt_prepare()
2901 *r = rdtgrp; 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()
2963 kfree(rdtgrp); in mkdir_rdt_prepare()
2984 struct rdtgroup *rdtgrp, *prgrp; in rdtgroup_mkdir_mon() local
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()
3011 struct rdtgroup *rdtgrp; in rdtgroup_mkdir_ctrl_mon() local
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()
3030 ret = rdtgroup_init_alloc(rdtgrp); in rdtgroup_mkdir_ctrl_mon()
3034 list_add(&rdtgrp->rdtgroup_list, &rdt_all_groups); in rdtgroup_mkdir_ctrl_mon()
3041 ret = mongroup_create_dir(kn, rdtgrp, "mon_groups", NULL); in rdtgroup_mkdir_ctrl_mon()
3051 list_del(&rdtgrp->rdtgroup_list); in rdtgroup_mkdir_ctrl_mon()
3055 mkdir_rdt_prepare_clean(rdtgrp); in rdtgroup_mkdir_ctrl_mon()
3102 static int rdtgroup_rmdir_mon(struct rdtgroup *rdtgrp, cpumask_var_t tmpmask) in rdtgroup_rmdir_mon() argument
3104 struct rdtgroup *prdtgrp = rdtgrp->mon.parent; in rdtgroup_rmdir_mon()
3108 rdt_move_group_tasks(rdtgrp, prdtgrp, tmpmask); in rdtgroup_rmdir_mon()
3111 for_each_cpu(cpu, &rdtgrp->cpu_mask) 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()
3127 list_del(&rdtgrp->mon.crdtgrp_list); in rdtgroup_rmdir_mon()
3129 kernfs_remove(rdtgrp->kn); in rdtgroup_rmdir_mon()
3134 static int rdtgroup_ctrl_remove(struct rdtgroup *rdtgrp) in rdtgroup_ctrl_remove() argument
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()
3143 static int rdtgroup_rmdir_ctrl(struct rdtgroup *rdtgrp, cpumask_var_t tmpmask) in rdtgroup_rmdir_ctrl() argument
3148 rdt_move_group_tasks(rdtgrp, &rdtgroup_default, tmpmask); in rdtgroup_rmdir_ctrl()
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()
3170 rdtgroup_ctrl_remove(rdtgrp); in rdtgroup_rmdir_ctrl()
3175 free_all_child_rdtgrp(rdtgrp); in rdtgroup_rmdir_ctrl()
3183 struct rdtgroup *rdtgrp; in rdtgroup_rmdir() local
3190 rdtgrp = rdtgroup_kn_lock_live(kn); in rdtgroup_rmdir()
3191 if (!rdtgrp) { in rdtgroup_rmdir()
3203 if (rdtgrp->type == RDTCTRL_GROUP && parent_kn == rdtgroup_default.kn && in rdtgroup_rmdir()
3204 rdtgrp != &rdtgroup_default) { in rdtgroup_rmdir()
3205 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP || in rdtgroup_rmdir()
3206 rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED) { in rdtgroup_rmdir()
3207 ret = rdtgroup_ctrl_remove(rdtgrp); in rdtgroup_rmdir()
3209 ret = rdtgroup_rmdir_ctrl(rdtgrp, tmpmask); in rdtgroup_rmdir()
3211 } else if (rdtgrp->type == RDTMON_GROUP && in rdtgroup_rmdir()
3213 ret = rdtgroup_rmdir_mon(rdtgrp, tmpmask); in rdtgroup_rmdir()