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()
2308 static void rdtgroup_kn_get(struct rdtgroup *rdtgrp, struct kernfs_node *kn) in rdtgroup_kn_get() argument
2310 atomic_inc(&rdtgrp->waitcount); in rdtgroup_kn_get()
2314 static void rdtgroup_kn_put(struct rdtgroup *rdtgrp, struct kernfs_node *kn) in rdtgroup_kn_put() argument
2316 if (atomic_dec_and_test(&rdtgrp->waitcount) && in rdtgroup_kn_put()
2317 (rdtgrp->flags & RDT_DELETED)) { in rdtgroup_kn_put()
2318 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP || in rdtgroup_kn_put()
2319 rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED) in rdtgroup_kn_put()
2320 rdtgroup_pseudo_lock_remove(rdtgrp); in rdtgroup_kn_put()
2322 rdtgroup_remove(rdtgrp); in rdtgroup_kn_put()
2330 struct rdtgroup *rdtgrp = kernfs_to_rdtgroup(kn); in rdtgroup_kn_lock_live() local
2332 if (!rdtgrp) in rdtgroup_kn_lock_live()
2335 rdtgroup_kn_get(rdtgrp, kn); in rdtgroup_kn_lock_live()
2340 if (rdtgrp->flags & RDT_DELETED) in rdtgroup_kn_lock_live()
2343 return rdtgrp; in rdtgroup_kn_lock_live()
2348 struct rdtgroup *rdtgrp = kernfs_to_rdtgroup(kn); in rdtgroup_kn_unlock() local
2350 if (!rdtgrp) in rdtgroup_kn_unlock()
2354 rdtgroup_kn_put(rdtgrp, kn); in rdtgroup_kn_unlock()
2710 static void free_all_child_rdtgrp(struct rdtgroup *rdtgrp) in free_all_child_rdtgrp() argument
2715 head = &rdtgrp->mon.crdtgrp_list; in free_all_child_rdtgrp()
2732 struct rdtgroup *rdtgrp, *tmp; in rmdir_all_sub() local
2737 list_for_each_entry_safe(rdtgrp, tmp, &rdt_all_groups, rdtgroup_list) { in rmdir_all_sub()
2739 free_all_child_rdtgrp(rdtgrp); in rmdir_all_sub()
2742 if (rdtgrp == &rdtgroup_default) in rmdir_all_sub()
2745 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP || in rmdir_all_sub()
2746 rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED) in rmdir_all_sub()
2747 rdtgroup_pseudo_lock_remove(rdtgrp); in rmdir_all_sub()
2755 &rdtgroup_default.cpu_mask, &rdtgrp->cpu_mask); in rmdir_all_sub()
2757 free_rmid(rdtgrp->mon.rmid); in rmdir_all_sub()
2759 kernfs_remove(rdtgrp->kn); in rmdir_all_sub()
2760 list_del(&rdtgrp->rdtgroup_list); in rmdir_all_sub()
2762 if (atomic_read(&rdtgrp->waitcount) != 0) in rmdir_all_sub()
2763 rdtgrp->flags = RDT_DELETED; in rmdir_all_sub()
2765 rdtgroup_remove(rdtgrp); in rmdir_all_sub()
3132 static int rdtgroup_init_alloc(struct rdtgroup *rdtgrp) in rdtgroup_init_alloc() argument
3144 rdtgroup_init_mba(r, rdtgrp->closid); in rdtgroup_init_alloc()
3148 ret = rdtgroup_init_cat(s, rdtgrp->closid); in rdtgroup_init_alloc()
3153 ret = resctrl_arch_update_domains(r, rdtgrp->closid); in rdtgroup_init_alloc()
3161 rdtgrp->mode = RDT_MODE_SHAREABLE; in rdtgroup_init_alloc()
3172 struct rdtgroup *prdtgrp, *rdtgrp; in mkdir_rdt_prepare() local
3192 rdtgrp = kzalloc(sizeof(*rdtgrp), GFP_KERNEL); in mkdir_rdt_prepare()
3193 if (!rdtgrp) { in mkdir_rdt_prepare()
3198 *r = rdtgrp; in mkdir_rdt_prepare()
3199 rdtgrp->mon.parent = prdtgrp; in mkdir_rdt_prepare()
3200 rdtgrp->type = rtype; in mkdir_rdt_prepare()
3201 INIT_LIST_HEAD(&rdtgrp->mon.crdtgrp_list); in mkdir_rdt_prepare()
3204 kn = kernfs_create_dir(parent_kn, name, mode, rdtgrp); in mkdir_rdt_prepare()
3210 rdtgrp->kn = kn; in mkdir_rdt_prepare()
3239 rdtgrp->mon.rmid = ret; in mkdir_rdt_prepare()
3241 ret = mkdir_mondata_all(kn, rdtgrp, &rdtgrp->mon.mon_data_kn); in mkdir_rdt_prepare()
3255 free_rmid(rdtgrp->mon.rmid); in mkdir_rdt_prepare()
3257 kernfs_put(rdtgrp->kn); in mkdir_rdt_prepare()
3258 kernfs_remove(rdtgrp->kn); in mkdir_rdt_prepare()
3260 kfree(rdtgrp); in mkdir_rdt_prepare()
3281 struct rdtgroup *rdtgrp, *prgrp; in rdtgroup_mkdir_mon() local
3284 ret = mkdir_rdt_prepare(parent_kn, name, mode, RDTMON_GROUP, &rdtgrp); in rdtgroup_mkdir_mon()
3288 prgrp = rdtgrp->mon.parent; in rdtgroup_mkdir_mon()
3289 rdtgrp->closid = prgrp->closid; in rdtgroup_mkdir_mon()
3295 list_add_tail(&rdtgrp->mon.crdtgrp_list, &prgrp->mon.crdtgrp_list); in rdtgroup_mkdir_mon()
3308 struct rdtgroup *rdtgrp; in rdtgroup_mkdir_ctrl_mon() local
3313 ret = mkdir_rdt_prepare(parent_kn, name, mode, RDTCTRL_GROUP, &rdtgrp); in rdtgroup_mkdir_ctrl_mon()
3317 kn = rdtgrp->kn; in rdtgroup_mkdir_ctrl_mon()
3326 rdtgrp->closid = closid; in rdtgroup_mkdir_ctrl_mon()
3327 ret = rdtgroup_init_alloc(rdtgrp); in rdtgroup_mkdir_ctrl_mon()
3331 list_add(&rdtgrp->rdtgroup_list, &rdt_all_groups); in rdtgroup_mkdir_ctrl_mon()
3338 ret = mongroup_create_dir(kn, rdtgrp, "mon_groups", NULL); in rdtgroup_mkdir_ctrl_mon()
3348 list_del(&rdtgrp->rdtgroup_list); in rdtgroup_mkdir_ctrl_mon()
3352 mkdir_rdt_prepare_clean(rdtgrp); in rdtgroup_mkdir_ctrl_mon()
3399 static int rdtgroup_rmdir_mon(struct rdtgroup *rdtgrp, cpumask_var_t tmpmask) in rdtgroup_rmdir_mon() argument
3401 struct rdtgroup *prdtgrp = rdtgrp->mon.parent; in rdtgroup_rmdir_mon()
3405 rdt_move_group_tasks(rdtgrp, prdtgrp, tmpmask); in rdtgroup_rmdir_mon()
3408 for_each_cpu(cpu, &rdtgrp->cpu_mask) in rdtgroup_rmdir_mon()
3414 cpumask_or(tmpmask, tmpmask, &rdtgrp->cpu_mask); in rdtgroup_rmdir_mon()
3417 rdtgrp->flags = RDT_DELETED; in rdtgroup_rmdir_mon()
3418 free_rmid(rdtgrp->mon.rmid); in rdtgroup_rmdir_mon()
3424 list_del(&rdtgrp->mon.crdtgrp_list); in rdtgroup_rmdir_mon()
3426 kernfs_remove(rdtgrp->kn); in rdtgroup_rmdir_mon()
3431 static int rdtgroup_ctrl_remove(struct rdtgroup *rdtgrp) in rdtgroup_ctrl_remove() argument
3433 rdtgrp->flags = RDT_DELETED; in rdtgroup_ctrl_remove()
3434 list_del(&rdtgrp->rdtgroup_list); in rdtgroup_ctrl_remove()
3436 kernfs_remove(rdtgrp->kn); in rdtgroup_ctrl_remove()
3440 static int rdtgroup_rmdir_ctrl(struct rdtgroup *rdtgrp, cpumask_var_t tmpmask) in rdtgroup_rmdir_ctrl() argument
3445 rdt_move_group_tasks(rdtgrp, &rdtgroup_default, tmpmask); in rdtgroup_rmdir_ctrl()
3449 &rdtgroup_default.cpu_mask, &rdtgrp->cpu_mask); in rdtgroup_rmdir_ctrl()
3452 for_each_cpu(cpu, &rdtgrp->cpu_mask) { in rdtgroup_rmdir_ctrl()
3461 cpumask_or(tmpmask, tmpmask, &rdtgrp->cpu_mask); in rdtgroup_rmdir_ctrl()
3464 closid_free(rdtgrp->closid); in rdtgroup_rmdir_ctrl()
3465 free_rmid(rdtgrp->mon.rmid); in rdtgroup_rmdir_ctrl()
3467 rdtgroup_ctrl_remove(rdtgrp); in rdtgroup_rmdir_ctrl()
3472 free_all_child_rdtgrp(rdtgrp); in rdtgroup_rmdir_ctrl()
3480 struct rdtgroup *rdtgrp; in rdtgroup_rmdir() local
3487 rdtgrp = rdtgroup_kn_lock_live(kn); in rdtgroup_rmdir()
3488 if (!rdtgrp) { in rdtgroup_rmdir()
3500 if (rdtgrp->type == RDTCTRL_GROUP && parent_kn == rdtgroup_default.kn && in rdtgroup_rmdir()
3501 rdtgrp != &rdtgroup_default) { in rdtgroup_rmdir()
3502 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP || in rdtgroup_rmdir()
3503 rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED) { in rdtgroup_rmdir()
3504 ret = rdtgroup_ctrl_remove(rdtgrp); in rdtgroup_rmdir()
3506 ret = rdtgroup_rmdir_ctrl(rdtgrp, tmpmask); in rdtgroup_rmdir()
3508 } else if (rdtgrp->type == RDTMON_GROUP && in rdtgroup_rmdir()
3510 ret = rdtgroup_rmdir_mon(rdtgrp, tmpmask); in rdtgroup_rmdir()
3531 static void mongrp_reparent(struct rdtgroup *rdtgrp, in mongrp_reparent() argument
3535 struct rdtgroup *prdtgrp = rdtgrp->mon.parent; in mongrp_reparent()
3537 WARN_ON(rdtgrp->type != RDTMON_GROUP); in mongrp_reparent()
3545 list_move_tail(&rdtgrp->mon.crdtgrp_list, in mongrp_reparent()
3548 rdtgrp->mon.parent = new_prdtgrp; in mongrp_reparent()
3549 rdtgrp->closid = new_prdtgrp->closid; in mongrp_reparent()
3552 rdt_move_group_tasks(rdtgrp, rdtgrp, cpus); in mongrp_reparent()
3561 struct rdtgroup *rdtgrp; in rdtgroup_rename() local
3565 rdtgrp = kernfs_to_rdtgroup(kn); in rdtgroup_rename()
3567 if (!rdtgrp || !new_prdtgrp) in rdtgroup_rename()
3571 rdtgroup_kn_get(rdtgrp, kn); in rdtgroup_rename()
3589 if ((rdtgrp->flags & RDT_DELETED) || (new_prdtgrp->flags & RDT_DELETED)) { in rdtgroup_rename()
3594 if (rdtgrp->type != RDTMON_GROUP || !kn->parent || in rdtgroup_rename()
3612 if (!cpumask_empty(&rdtgrp->cpu_mask) && in rdtgroup_rename()
3613 rdtgrp->mon.parent != new_prdtgrp) { in rdtgroup_rename()
3637 mongrp_reparent(rdtgrp, new_prdtgrp, tmpmask); in rdtgroup_rename()
3643 rdtgroup_kn_put(rdtgrp, kn); in rdtgroup_rename()