Lines Matching refs:rdtgrp

173 	struct rdtgroup *rdtgrp;  in rdtgroup_mode_by_closid()  local
175 list_for_each_entry(rdtgrp, &rdt_all_groups, rdtgroup_list) { in rdtgroup_mode_by_closid()
176 if (rdtgrp->closid == closid) in rdtgroup_mode_by_closid()
177 return rdtgrp->mode; in rdtgroup_mode_by_closid()
280 struct rdtgroup *rdtgrp; in rdtgroup_cpus_show() local
284 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_cpus_show()
286 if (rdtgrp) { in rdtgroup_cpus_show()
287 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED) { in rdtgroup_cpus_show()
288 if (!rdtgrp->plr->d) { in rdtgroup_cpus_show()
293 mask = &rdtgrp->plr->d->cpu_mask; in rdtgroup_cpus_show()
300 cpumask_pr_args(&rdtgrp->cpu_mask)); in rdtgroup_cpus_show()
344 static int cpus_mon_write(struct rdtgroup *rdtgrp, cpumask_var_t newmask, in cpus_mon_write() argument
347 struct rdtgroup *prgrp = rdtgrp->mon.parent, *crgrp; in cpus_mon_write()
358 cpumask_andnot(tmpmask, &rdtgrp->cpu_mask, newmask); in cpus_mon_write()
369 cpumask_andnot(tmpmask, newmask, &rdtgrp->cpu_mask); in cpus_mon_write()
373 if (crgrp == rdtgrp) in cpus_mon_write()
378 update_closid_rmid(tmpmask, rdtgrp); in cpus_mon_write()
382 cpumask_copy(&rdtgrp->cpu_mask, newmask); in cpus_mon_write()
397 static int cpus_ctrl_write(struct rdtgroup *rdtgrp, cpumask_var_t newmask, in cpus_ctrl_write() argument
404 cpumask_andnot(tmpmask, &rdtgrp->cpu_mask, newmask); in cpus_ctrl_write()
407 if (rdtgrp == &rdtgroup_default) { in cpus_ctrl_write()
423 cpumask_andnot(tmpmask, newmask, &rdtgrp->cpu_mask); in cpus_ctrl_write()
426 if (r == rdtgrp) in cpus_ctrl_write()
432 update_closid_rmid(tmpmask, rdtgrp); in cpus_ctrl_write()
436 cpumask_copy(&rdtgrp->cpu_mask, newmask); in cpus_ctrl_write()
442 head = &rdtgrp->mon.crdtgrp_list; in cpus_ctrl_write()
444 cpumask_and(tmpmask, &rdtgrp->cpu_mask, &crgrp->cpu_mask); in cpus_ctrl_write()
445 update_closid_rmid(tmpmask, rdtgrp); in cpus_ctrl_write()
456 struct rdtgroup *rdtgrp; in rdtgroup_cpus_write() local
474 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_cpus_write()
475 if (!rdtgrp) { in rdtgroup_cpus_write()
480 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED || in rdtgroup_cpus_write()
481 rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) { in rdtgroup_cpus_write()
505 if (rdtgrp->type == RDTCTRL_GROUP) in rdtgroup_cpus_write()
506 ret = cpus_ctrl_write(rdtgrp, newmask, tmpmask, tmpmask1); in rdtgroup_cpus_write()
507 else if (rdtgrp->type == RDTMON_GROUP) in rdtgroup_cpus_write()
508 ret = cpus_mon_write(rdtgrp, newmask, tmpmask); in rdtgroup_cpus_write()
533 static void rdtgroup_remove(struct rdtgroup *rdtgrp) in rdtgroup_remove() argument
535 kernfs_put(rdtgrp->kn); in rdtgroup_remove()
536 kfree(rdtgrp); in rdtgroup_remove()
558 struct rdtgroup *rdtgrp) in __rdtgroup_move_task() argument
561 if ((rdtgrp->type == RDTCTRL_GROUP && tsk->closid == rdtgrp->closid && in __rdtgroup_move_task()
562 tsk->rmid == rdtgrp->mon.rmid) || in __rdtgroup_move_task()
563 (rdtgrp->type == RDTMON_GROUP && tsk->rmid == rdtgrp->mon.rmid && in __rdtgroup_move_task()
564 tsk->closid == rdtgrp->mon.parent->closid)) in __rdtgroup_move_task()
576 if (rdtgrp->type == RDTCTRL_GROUP) { in __rdtgroup_move_task()
577 WRITE_ONCE(tsk->closid, rdtgrp->closid); in __rdtgroup_move_task()
578 WRITE_ONCE(tsk->rmid, rdtgrp->mon.rmid); in __rdtgroup_move_task()
579 } else if (rdtgrp->type == RDTMON_GROUP) { in __rdtgroup_move_task()
580 if (rdtgrp->mon.parent->closid == tsk->closid) { in __rdtgroup_move_task()
581 WRITE_ONCE(tsk->rmid, rdtgrp->mon.rmid); in __rdtgroup_move_task()
666 static int rdtgroup_move_task(pid_t pid, struct rdtgroup *rdtgrp, in rdtgroup_move_task() argument
689 ret = __rdtgroup_move_task(tsk, rdtgrp); in rdtgroup_move_task()
698 struct rdtgroup *rdtgrp; in rdtgroup_tasks_write() local
704 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_tasks_write()
705 if (!rdtgrp) { in rdtgroup_tasks_write()
711 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED || in rdtgroup_tasks_write()
712 rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) { in rdtgroup_tasks_write()
718 ret = rdtgroup_move_task(pid, rdtgrp, of); in rdtgroup_tasks_write()
745 struct rdtgroup *rdtgrp; in rdtgroup_tasks_show() local
748 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_tasks_show()
749 if (rdtgrp) in rdtgroup_tasks_show()
750 show_rdt_tasks(rdtgrp, s); in rdtgroup_tasks_show()
1093 struct rdtgroup *rdtgrp; in rdtgroup_mode_show() local
1095 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_mode_show()
1096 if (!rdtgrp) { in rdtgroup_mode_show()
1101 seq_printf(s, "%s\n", rdtgroup_mode_str(rdtgrp->mode)); in rdtgroup_mode_show()
1222 static bool rdtgroup_mode_test_exclusive(struct rdtgroup *rdtgrp) in rdtgroup_mode_test_exclusive() argument
1224 int closid = rdtgrp->closid; in rdtgroup_mode_test_exclusive()
1261 struct rdtgroup *rdtgrp; in rdtgroup_mode_write() local
1270 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_mode_write()
1271 if (!rdtgrp) { in rdtgroup_mode_write()
1278 mode = rdtgrp->mode; in rdtgroup_mode_write()
1294 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) { in rdtgroup_mode_write()
1295 ret = rdtgroup_locksetup_exit(rdtgrp); in rdtgroup_mode_write()
1299 rdtgrp->mode = RDT_MODE_SHAREABLE; in rdtgroup_mode_write()
1301 if (!rdtgroup_mode_test_exclusive(rdtgrp)) { in rdtgroup_mode_write()
1305 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) { in rdtgroup_mode_write()
1306 ret = rdtgroup_locksetup_exit(rdtgrp); in rdtgroup_mode_write()
1310 rdtgrp->mode = RDT_MODE_EXCLUSIVE; in rdtgroup_mode_write()
1312 ret = rdtgroup_locksetup_enter(rdtgrp); in rdtgroup_mode_write()
1315 rdtgrp->mode = RDT_MODE_PSEUDO_LOCKSETUP; in rdtgroup_mode_write()
1372 struct rdtgroup *rdtgrp; in rdtgroup_size_show() local
1381 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_size_show()
1382 if (!rdtgrp) { in rdtgroup_size_show()
1387 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED) { in rdtgroup_size_show()
1388 if (!rdtgrp->plr->d) { in rdtgroup_size_show()
1394 rdtgrp->plr->s->name); in rdtgroup_size_show()
1395 size = rdtgroup_cbm_to_size(rdtgrp->plr->s->res, in rdtgroup_size_show()
1396 rdtgrp->plr->d, in rdtgroup_size_show()
1397 rdtgrp->plr->cbm); in rdtgroup_size_show()
1398 seq_printf(s, "%d=%u\n", rdtgrp->plr->d->id, size); in rdtgroup_size_show()
1403 closid = rdtgrp->closid; in rdtgroup_size_show()
1413 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) { in rdtgroup_size_show()
2310 static void rdtgroup_kn_get(struct rdtgroup *rdtgrp, struct kernfs_node *kn) in rdtgroup_kn_get() argument
2312 atomic_inc(&rdtgrp->waitcount); in rdtgroup_kn_get()
2316 static void rdtgroup_kn_put(struct rdtgroup *rdtgrp, struct kernfs_node *kn) in rdtgroup_kn_put() argument
2318 if (atomic_dec_and_test(&rdtgrp->waitcount) && in rdtgroup_kn_put()
2319 (rdtgrp->flags & RDT_DELETED)) { in rdtgroup_kn_put()
2320 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP || in rdtgroup_kn_put()
2321 rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED) in rdtgroup_kn_put()
2322 rdtgroup_pseudo_lock_remove(rdtgrp); in rdtgroup_kn_put()
2324 rdtgroup_remove(rdtgrp); in rdtgroup_kn_put()
2332 struct rdtgroup *rdtgrp = kernfs_to_rdtgroup(kn); in rdtgroup_kn_lock_live() local
2334 if (!rdtgrp) in rdtgroup_kn_lock_live()
2337 rdtgroup_kn_get(rdtgrp, kn); in rdtgroup_kn_lock_live()
2342 if (rdtgrp->flags & RDT_DELETED) in rdtgroup_kn_lock_live()
2345 return rdtgrp; in rdtgroup_kn_lock_live()
2350 struct rdtgroup *rdtgrp = kernfs_to_rdtgroup(kn); in rdtgroup_kn_unlock() local
2352 if (!rdtgrp) in rdtgroup_kn_unlock()
2356 rdtgroup_kn_put(rdtgrp, kn); in rdtgroup_kn_unlock()
2712 static void free_all_child_rdtgrp(struct rdtgroup *rdtgrp) in free_all_child_rdtgrp() argument
2717 head = &rdtgrp->mon.crdtgrp_list; in free_all_child_rdtgrp()
2734 struct rdtgroup *rdtgrp, *tmp; in rmdir_all_sub() local
2739 list_for_each_entry_safe(rdtgrp, tmp, &rdt_all_groups, rdtgroup_list) { in rmdir_all_sub()
2741 free_all_child_rdtgrp(rdtgrp); in rmdir_all_sub()
2744 if (rdtgrp == &rdtgroup_default) in rmdir_all_sub()
2747 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP || in rmdir_all_sub()
2748 rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED) in rmdir_all_sub()
2749 rdtgroup_pseudo_lock_remove(rdtgrp); in rmdir_all_sub()
2757 &rdtgroup_default.cpu_mask, &rdtgrp->cpu_mask); in rmdir_all_sub()
2759 free_rmid(rdtgrp->mon.rmid); in rmdir_all_sub()
2761 kernfs_remove(rdtgrp->kn); in rmdir_all_sub()
2762 list_del(&rdtgrp->rdtgroup_list); in rmdir_all_sub()
2764 if (atomic_read(&rdtgrp->waitcount) != 0) in rmdir_all_sub()
2765 rdtgrp->flags = RDT_DELETED; in rmdir_all_sub()
2767 rdtgroup_remove(rdtgrp); in rmdir_all_sub()
3134 static int rdtgroup_init_alloc(struct rdtgroup *rdtgrp) in rdtgroup_init_alloc() argument
3146 rdtgroup_init_mba(r, rdtgrp->closid); in rdtgroup_init_alloc()
3150 ret = rdtgroup_init_cat(s, rdtgrp->closid); in rdtgroup_init_alloc()
3155 ret = resctrl_arch_update_domains(r, rdtgrp->closid); in rdtgroup_init_alloc()
3163 rdtgrp->mode = RDT_MODE_SHAREABLE; in rdtgroup_init_alloc()
3174 struct rdtgroup *prdtgrp, *rdtgrp; in mkdir_rdt_prepare() local
3194 rdtgrp = kzalloc(sizeof(*rdtgrp), GFP_KERNEL); in mkdir_rdt_prepare()
3195 if (!rdtgrp) { in mkdir_rdt_prepare()
3200 *r = rdtgrp; in mkdir_rdt_prepare()
3201 rdtgrp->mon.parent = prdtgrp; in mkdir_rdt_prepare()
3202 rdtgrp->type = rtype; in mkdir_rdt_prepare()
3203 INIT_LIST_HEAD(&rdtgrp->mon.crdtgrp_list); in mkdir_rdt_prepare()
3206 kn = kernfs_create_dir(parent_kn, name, mode, rdtgrp); in mkdir_rdt_prepare()
3212 rdtgrp->kn = kn; in mkdir_rdt_prepare()
3241 rdtgrp->mon.rmid = ret; in mkdir_rdt_prepare()
3243 ret = mkdir_mondata_all(kn, rdtgrp, &rdtgrp->mon.mon_data_kn); in mkdir_rdt_prepare()
3257 free_rmid(rdtgrp->mon.rmid); in mkdir_rdt_prepare()
3259 kernfs_put(rdtgrp->kn); in mkdir_rdt_prepare()
3260 kernfs_remove(rdtgrp->kn); in mkdir_rdt_prepare()
3262 kfree(rdtgrp); in mkdir_rdt_prepare()
3283 struct rdtgroup *rdtgrp, *prgrp; in rdtgroup_mkdir_mon() local
3286 ret = mkdir_rdt_prepare(parent_kn, name, mode, RDTMON_GROUP, &rdtgrp); in rdtgroup_mkdir_mon()
3290 prgrp = rdtgrp->mon.parent; in rdtgroup_mkdir_mon()
3291 rdtgrp->closid = prgrp->closid; in rdtgroup_mkdir_mon()
3297 list_add_tail(&rdtgrp->mon.crdtgrp_list, &prgrp->mon.crdtgrp_list); in rdtgroup_mkdir_mon()
3310 struct rdtgroup *rdtgrp; in rdtgroup_mkdir_ctrl_mon() local
3315 ret = mkdir_rdt_prepare(parent_kn, name, mode, RDTCTRL_GROUP, &rdtgrp); in rdtgroup_mkdir_ctrl_mon()
3319 kn = rdtgrp->kn; in rdtgroup_mkdir_ctrl_mon()
3328 rdtgrp->closid = closid; in rdtgroup_mkdir_ctrl_mon()
3329 ret = rdtgroup_init_alloc(rdtgrp); in rdtgroup_mkdir_ctrl_mon()
3333 list_add(&rdtgrp->rdtgroup_list, &rdt_all_groups); in rdtgroup_mkdir_ctrl_mon()
3340 ret = mongroup_create_dir(kn, rdtgrp, "mon_groups", NULL); in rdtgroup_mkdir_ctrl_mon()
3350 list_del(&rdtgrp->rdtgroup_list); in rdtgroup_mkdir_ctrl_mon()
3354 mkdir_rdt_prepare_clean(rdtgrp); in rdtgroup_mkdir_ctrl_mon()
3401 static int rdtgroup_rmdir_mon(struct rdtgroup *rdtgrp, cpumask_var_t tmpmask) in rdtgroup_rmdir_mon() argument
3403 struct rdtgroup *prdtgrp = rdtgrp->mon.parent; in rdtgroup_rmdir_mon()
3407 rdt_move_group_tasks(rdtgrp, prdtgrp, tmpmask); in rdtgroup_rmdir_mon()
3410 for_each_cpu(cpu, &rdtgrp->cpu_mask) in rdtgroup_rmdir_mon()
3416 cpumask_or(tmpmask, tmpmask, &rdtgrp->cpu_mask); in rdtgroup_rmdir_mon()
3419 rdtgrp->flags = RDT_DELETED; in rdtgroup_rmdir_mon()
3420 free_rmid(rdtgrp->mon.rmid); in rdtgroup_rmdir_mon()
3426 list_del(&rdtgrp->mon.crdtgrp_list); in rdtgroup_rmdir_mon()
3428 kernfs_remove(rdtgrp->kn); in rdtgroup_rmdir_mon()
3433 static int rdtgroup_ctrl_remove(struct rdtgroup *rdtgrp) in rdtgroup_ctrl_remove() argument
3435 rdtgrp->flags = RDT_DELETED; in rdtgroup_ctrl_remove()
3436 list_del(&rdtgrp->rdtgroup_list); in rdtgroup_ctrl_remove()
3438 kernfs_remove(rdtgrp->kn); in rdtgroup_ctrl_remove()
3442 static int rdtgroup_rmdir_ctrl(struct rdtgroup *rdtgrp, cpumask_var_t tmpmask) in rdtgroup_rmdir_ctrl() argument
3447 rdt_move_group_tasks(rdtgrp, &rdtgroup_default, tmpmask); in rdtgroup_rmdir_ctrl()
3451 &rdtgroup_default.cpu_mask, &rdtgrp->cpu_mask); in rdtgroup_rmdir_ctrl()
3454 for_each_cpu(cpu, &rdtgrp->cpu_mask) { in rdtgroup_rmdir_ctrl()
3463 cpumask_or(tmpmask, tmpmask, &rdtgrp->cpu_mask); in rdtgroup_rmdir_ctrl()
3466 closid_free(rdtgrp->closid); in rdtgroup_rmdir_ctrl()
3467 free_rmid(rdtgrp->mon.rmid); in rdtgroup_rmdir_ctrl()
3469 rdtgroup_ctrl_remove(rdtgrp); in rdtgroup_rmdir_ctrl()
3474 free_all_child_rdtgrp(rdtgrp); in rdtgroup_rmdir_ctrl()
3482 struct rdtgroup *rdtgrp; in rdtgroup_rmdir() local
3489 rdtgrp = rdtgroup_kn_lock_live(kn); in rdtgroup_rmdir()
3490 if (!rdtgrp) { in rdtgroup_rmdir()
3502 if (rdtgrp->type == RDTCTRL_GROUP && parent_kn == rdtgroup_default.kn && in rdtgroup_rmdir()
3503 rdtgrp != &rdtgroup_default) { in rdtgroup_rmdir()
3504 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP || in rdtgroup_rmdir()
3505 rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED) { in rdtgroup_rmdir()
3506 ret = rdtgroup_ctrl_remove(rdtgrp); in rdtgroup_rmdir()
3508 ret = rdtgroup_rmdir_ctrl(rdtgrp, tmpmask); in rdtgroup_rmdir()
3510 } else if (rdtgrp->type == RDTMON_GROUP && in rdtgroup_rmdir()
3512 ret = rdtgroup_rmdir_mon(rdtgrp, tmpmask); in rdtgroup_rmdir()
3533 static void mongrp_reparent(struct rdtgroup *rdtgrp, in mongrp_reparent() argument
3537 struct rdtgroup *prdtgrp = rdtgrp->mon.parent; in mongrp_reparent()
3539 WARN_ON(rdtgrp->type != RDTMON_GROUP); in mongrp_reparent()
3547 list_move_tail(&rdtgrp->mon.crdtgrp_list, in mongrp_reparent()
3550 rdtgrp->mon.parent = new_prdtgrp; in mongrp_reparent()
3551 rdtgrp->closid = new_prdtgrp->closid; in mongrp_reparent()
3554 rdt_move_group_tasks(rdtgrp, rdtgrp, cpus); in mongrp_reparent()
3563 struct rdtgroup *rdtgrp; in rdtgroup_rename() local
3567 rdtgrp = kernfs_to_rdtgroup(kn); in rdtgroup_rename()
3569 if (!rdtgrp || !new_prdtgrp) in rdtgroup_rename()
3573 rdtgroup_kn_get(rdtgrp, kn); in rdtgroup_rename()
3591 if ((rdtgrp->flags & RDT_DELETED) || (new_prdtgrp->flags & RDT_DELETED)) { in rdtgroup_rename()
3596 if (rdtgrp->type != RDTMON_GROUP || !kn->parent || in rdtgroup_rename()
3614 if (!cpumask_empty(&rdtgrp->cpu_mask) && in rdtgroup_rename()
3615 rdtgrp->mon.parent != new_prdtgrp) { in rdtgroup_rename()
3639 mongrp_reparent(rdtgrp, new_prdtgrp, tmpmask); in rdtgroup_rename()
3645 rdtgroup_kn_put(rdtgrp, kn); in rdtgroup_rename()