Lines Matching refs:rdtgrp
246 struct rdtgroup *rdtgrp; in rdtgroup_mode_by_closid() local
248 list_for_each_entry(rdtgrp, &rdt_all_groups, rdtgroup_list) { in rdtgroup_mode_by_closid()
249 if (rdtgrp->closid == closid) in rdtgroup_mode_by_closid()
250 return rdtgrp->mode; in rdtgroup_mode_by_closid()
353 struct rdtgroup *rdtgrp; in rdtgroup_cpus_show() local
357 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_cpus_show()
359 if (rdtgrp) { in rdtgroup_cpus_show()
360 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED) { in rdtgroup_cpus_show()
361 if (!rdtgrp->plr->d) { in rdtgroup_cpus_show()
366 mask = &rdtgrp->plr->d->hdr.cpu_mask; in rdtgroup_cpus_show()
373 cpumask_pr_args(&rdtgrp->cpu_mask)); in rdtgroup_cpus_show()
403 static int cpus_mon_write(struct rdtgroup *rdtgrp, cpumask_var_t newmask, in cpus_mon_write() argument
406 struct rdtgroup *prgrp = rdtgrp->mon.parent, *crgrp; in cpus_mon_write()
417 cpumask_andnot(tmpmask, &rdtgrp->cpu_mask, newmask); in cpus_mon_write()
428 cpumask_andnot(tmpmask, newmask, &rdtgrp->cpu_mask); in cpus_mon_write()
432 if (crgrp == rdtgrp) in cpus_mon_write()
437 update_closid_rmid(tmpmask, rdtgrp); in cpus_mon_write()
441 cpumask_copy(&rdtgrp->cpu_mask, newmask); in cpus_mon_write()
456 static int cpus_ctrl_write(struct rdtgroup *rdtgrp, cpumask_var_t newmask, in cpus_ctrl_write() argument
463 cpumask_andnot(tmpmask, &rdtgrp->cpu_mask, newmask); in cpus_ctrl_write()
466 if (rdtgrp == &rdtgroup_default) { in cpus_ctrl_write()
482 cpumask_andnot(tmpmask, newmask, &rdtgrp->cpu_mask); in cpus_ctrl_write()
485 if (r == rdtgrp) in cpus_ctrl_write()
491 update_closid_rmid(tmpmask, rdtgrp); in cpus_ctrl_write()
495 cpumask_copy(&rdtgrp->cpu_mask, newmask); in cpus_ctrl_write()
501 head = &rdtgrp->mon.crdtgrp_list; in cpus_ctrl_write()
503 cpumask_and(tmpmask, &rdtgrp->cpu_mask, &crgrp->cpu_mask); in cpus_ctrl_write()
504 update_closid_rmid(tmpmask, rdtgrp); in cpus_ctrl_write()
515 struct rdtgroup *rdtgrp; in rdtgroup_cpus_write() local
533 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_cpus_write()
534 if (!rdtgrp) { in rdtgroup_cpus_write()
541 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED || in rdtgroup_cpus_write()
542 rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) { in rdtgroup_cpus_write()
566 if (rdtgrp->type == RDTCTRL_GROUP) in rdtgroup_cpus_write()
567 ret = cpus_ctrl_write(rdtgrp, newmask, tmpmask, tmpmask1); in rdtgroup_cpus_write()
568 else if (rdtgrp->type == RDTMON_GROUP) in rdtgroup_cpus_write()
569 ret = cpus_mon_write(rdtgrp, newmask, tmpmask); in rdtgroup_cpus_write()
594 static void rdtgroup_remove(struct rdtgroup *rdtgrp) in rdtgroup_remove() argument
596 kernfs_put(rdtgrp->kn); in rdtgroup_remove()
597 kfree(rdtgrp); in rdtgroup_remove()
618 static bool task_in_rdtgroup(struct task_struct *tsk, struct rdtgroup *rdtgrp) in task_in_rdtgroup() argument
620 u32 closid, rmid = rdtgrp->mon.rmid; in task_in_rdtgroup()
622 if (rdtgrp->type == RDTCTRL_GROUP) in task_in_rdtgroup()
623 closid = rdtgrp->closid; in task_in_rdtgroup()
624 else if (rdtgrp->type == RDTMON_GROUP) in task_in_rdtgroup()
625 closid = rdtgrp->mon.parent->closid; in task_in_rdtgroup()
634 struct rdtgroup *rdtgrp) in __rdtgroup_move_task() argument
637 if (task_in_rdtgroup(tsk, rdtgrp)) in __rdtgroup_move_task()
648 if (rdtgrp->type == RDTMON_GROUP && in __rdtgroup_move_task()
649 !resctrl_arch_match_closid(tsk, rdtgrp->mon.parent->closid)) { in __rdtgroup_move_task()
654 if (rdtgrp->type == RDTMON_GROUP) in __rdtgroup_move_task()
655 resctrl_arch_set_closid_rmid(tsk, rdtgrp->mon.parent->closid, in __rdtgroup_move_task()
656 rdtgrp->mon.rmid); in __rdtgroup_move_task()
658 resctrl_arch_set_closid_rmid(tsk, rdtgrp->closid, in __rdtgroup_move_task()
659 rdtgrp->mon.rmid); in __rdtgroup_move_task()
740 static int rdtgroup_move_task(pid_t pid, struct rdtgroup *rdtgrp, in rdtgroup_move_task() argument
763 ret = __rdtgroup_move_task(tsk, rdtgrp); in rdtgroup_move_task()
772 struct rdtgroup *rdtgrp; in rdtgroup_tasks_write() local
777 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_tasks_write()
778 if (!rdtgrp) { in rdtgroup_tasks_write()
784 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED || in rdtgroup_tasks_write()
785 rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) { in rdtgroup_tasks_write()
806 ret = rdtgroup_move_task(pid, rdtgrp, of); in rdtgroup_tasks_write()
838 struct rdtgroup *rdtgrp; in rdtgroup_tasks_show() local
841 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_tasks_show()
842 if (rdtgrp) in rdtgroup_tasks_show()
843 show_rdt_tasks(rdtgrp, s); in rdtgroup_tasks_show()
854 struct rdtgroup *rdtgrp; in rdtgroup_closid_show() local
857 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_closid_show()
858 if (rdtgrp) in rdtgroup_closid_show()
859 seq_printf(s, "%u\n", rdtgrp->closid); in rdtgroup_closid_show()
870 struct rdtgroup *rdtgrp; in rdtgroup_rmid_show() local
873 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_rmid_show()
874 if (rdtgrp) in rdtgroup_rmid_show()
875 seq_printf(s, "%u\n", rdtgrp->mon.rmid); in rdtgroup_rmid_show()
1239 struct rdtgroup *rdtgrp; in rdtgroup_mode_show() local
1241 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_mode_show()
1242 if (!rdtgrp) { in rdtgroup_mode_show()
1247 seq_printf(s, "%s\n", rdtgroup_mode_str(rdtgrp->mode)); in rdtgroup_mode_show()
1381 static bool rdtgroup_mode_test_exclusive(struct rdtgroup *rdtgrp) in rdtgroup_mode_test_exclusive() argument
1383 int closid = rdtgrp->closid; in rdtgroup_mode_test_exclusive()
1422 struct rdtgroup *rdtgrp; in rdtgroup_mode_write() local
1431 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_mode_write()
1432 if (!rdtgrp) { in rdtgroup_mode_write()
1439 mode = rdtgrp->mode; in rdtgroup_mode_write()
1455 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) { in rdtgroup_mode_write()
1456 ret = rdtgroup_locksetup_exit(rdtgrp); in rdtgroup_mode_write()
1460 rdtgrp->mode = RDT_MODE_SHAREABLE; in rdtgroup_mode_write()
1462 if (!rdtgroup_mode_test_exclusive(rdtgrp)) { in rdtgroup_mode_write()
1466 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) { in rdtgroup_mode_write()
1467 ret = rdtgroup_locksetup_exit(rdtgrp); in rdtgroup_mode_write()
1471 rdtgrp->mode = RDT_MODE_EXCLUSIVE; in rdtgroup_mode_write()
1474 ret = rdtgroup_locksetup_enter(rdtgrp); in rdtgroup_mode_write()
1477 rdtgrp->mode = RDT_MODE_PSEUDO_LOCKSETUP; in rdtgroup_mode_write()
1548 struct rdtgroup *rdtgrp; in rdtgroup_size_show() local
1556 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_size_show()
1557 if (!rdtgrp) { in rdtgroup_size_show()
1562 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED) { in rdtgroup_size_show()
1563 if (!rdtgrp->plr->d) { in rdtgroup_size_show()
1569 rdtgrp->plr->s->name); in rdtgroup_size_show()
1570 size = rdtgroup_cbm_to_size(rdtgrp->plr->s->res, in rdtgroup_size_show()
1571 rdtgrp->plr->d, in rdtgroup_size_show()
1572 rdtgrp->plr->cbm); in rdtgroup_size_show()
1573 seq_printf(s, "%d=%u\n", rdtgrp->plr->d->hdr.id, size); in rdtgroup_size_show()
1578 closid = rdtgrp->closid; in rdtgroup_size_show()
1588 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) { in rdtgroup_size_show()
2384 static void rdtgroup_kn_get(struct rdtgroup *rdtgrp, struct kernfs_node *kn) in rdtgroup_kn_get() argument
2386 atomic_inc(&rdtgrp->waitcount); in rdtgroup_kn_get()
2390 static void rdtgroup_kn_put(struct rdtgroup *rdtgrp, struct kernfs_node *kn) in rdtgroup_kn_put() argument
2392 if (atomic_dec_and_test(&rdtgrp->waitcount) && in rdtgroup_kn_put()
2393 (rdtgrp->flags & RDT_DELETED)) { in rdtgroup_kn_put()
2394 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP || in rdtgroup_kn_put()
2395 rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED) in rdtgroup_kn_put()
2396 rdtgroup_pseudo_lock_remove(rdtgrp); in rdtgroup_kn_put()
2398 rdtgroup_remove(rdtgrp); in rdtgroup_kn_put()
2406 struct rdtgroup *rdtgrp = kernfs_to_rdtgroup(kn); in rdtgroup_kn_lock_live() local
2408 if (!rdtgrp) in rdtgroup_kn_lock_live()
2411 rdtgroup_kn_get(rdtgrp, kn); in rdtgroup_kn_lock_live()
2417 if (rdtgrp->flags & RDT_DELETED) in rdtgroup_kn_lock_live()
2420 return rdtgrp; in rdtgroup_kn_lock_live()
2425 struct rdtgroup *rdtgrp = kernfs_to_rdtgroup(kn); in rdtgroup_kn_unlock() local
2427 if (!rdtgrp) in rdtgroup_kn_unlock()
2433 rdtgroup_kn_put(rdtgrp, kn); in rdtgroup_kn_unlock()
2818 static void free_all_child_rdtgrp(struct rdtgroup *rdtgrp) in free_all_child_rdtgrp() argument
2823 head = &rdtgrp->mon.crdtgrp_list; in free_all_child_rdtgrp()
2840 struct rdtgroup *rdtgrp, *tmp; in rmdir_all_sub() local
2845 list_for_each_entry_safe(rdtgrp, tmp, &rdt_all_groups, rdtgroup_list) { in rmdir_all_sub()
2847 free_all_child_rdtgrp(rdtgrp); in rmdir_all_sub()
2850 if (rdtgrp == &rdtgroup_default) in rmdir_all_sub()
2853 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP || in rmdir_all_sub()
2854 rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED) in rmdir_all_sub()
2855 rdtgroup_pseudo_lock_remove(rdtgrp); in rmdir_all_sub()
2863 &rdtgroup_default.cpu_mask, &rdtgrp->cpu_mask); in rmdir_all_sub()
2865 free_rmid(rdtgrp->closid, rdtgrp->mon.rmid); in rmdir_all_sub()
2867 kernfs_remove(rdtgrp->kn); in rmdir_all_sub()
2868 list_del(&rdtgrp->rdtgroup_list); in rmdir_all_sub()
2870 if (atomic_read(&rdtgrp->waitcount) != 0) in rmdir_all_sub()
2871 rdtgrp->flags = RDT_DELETED; in rmdir_all_sub()
2873 rdtgroup_remove(rdtgrp); in rmdir_all_sub()
3381 static int rdtgroup_init_alloc(struct rdtgroup *rdtgrp) in rdtgroup_init_alloc() argument
3393 rdtgroup_init_mba(r, rdtgrp->closid); in rdtgroup_init_alloc()
3397 ret = rdtgroup_init_cat(s, rdtgrp->closid); in rdtgroup_init_alloc()
3402 ret = resctrl_arch_update_domains(r, rdtgrp->closid); in rdtgroup_init_alloc()
3409 rdtgrp->mode = RDT_MODE_SHAREABLE; in rdtgroup_init_alloc()
3416 static int mkdir_rdt_prepare_rmid_alloc(struct rdtgroup *rdtgrp) in mkdir_rdt_prepare_rmid_alloc() argument
3423 ret = alloc_rmid(rdtgrp->closid); in mkdir_rdt_prepare_rmid_alloc()
3428 rdtgrp->mon.rmid = ret; in mkdir_rdt_prepare_rmid_alloc()
3430 ret = mkdir_mondata_all(rdtgrp->kn, rdtgrp, &rdtgrp->mon.mon_data_kn); in mkdir_rdt_prepare_rmid_alloc()
3433 free_rmid(rdtgrp->closid, rdtgrp->mon.rmid); in mkdir_rdt_prepare_rmid_alloc()
3466 struct rdtgroup *prdtgrp, *rdtgrp; in mkdir_rdt_prepare() local
3497 rdtgrp = kzalloc(sizeof(*rdtgrp), GFP_KERNEL); in mkdir_rdt_prepare()
3498 if (!rdtgrp) { in mkdir_rdt_prepare()
3503 *r = rdtgrp; in mkdir_rdt_prepare()
3504 rdtgrp->mon.parent = prdtgrp; in mkdir_rdt_prepare()
3505 rdtgrp->type = rtype; in mkdir_rdt_prepare()
3506 INIT_LIST_HEAD(&rdtgrp->mon.crdtgrp_list); in mkdir_rdt_prepare()
3509 kn = kernfs_create_dir(parent_kn, name, mode, rdtgrp); in mkdir_rdt_prepare()
3515 rdtgrp->kn = kn; in mkdir_rdt_prepare()
3551 kernfs_put(rdtgrp->kn); in mkdir_rdt_prepare()
3552 kernfs_remove(rdtgrp->kn); in mkdir_rdt_prepare()
3554 kfree(rdtgrp); in mkdir_rdt_prepare()
3574 struct rdtgroup *rdtgrp, *prgrp; in rdtgroup_mkdir_mon() local
3577 ret = mkdir_rdt_prepare(parent_kn, name, mode, RDTMON_GROUP, &rdtgrp); in rdtgroup_mkdir_mon()
3581 prgrp = rdtgrp->mon.parent; in rdtgroup_mkdir_mon()
3582 rdtgrp->closid = prgrp->closid; in rdtgroup_mkdir_mon()
3584 ret = mkdir_rdt_prepare_rmid_alloc(rdtgrp); in rdtgroup_mkdir_mon()
3586 mkdir_rdt_prepare_clean(rdtgrp); in rdtgroup_mkdir_mon()
3590 kernfs_activate(rdtgrp->kn); in rdtgroup_mkdir_mon()
3596 list_add_tail(&rdtgrp->mon.crdtgrp_list, &prgrp->mon.crdtgrp_list); in rdtgroup_mkdir_mon()
3610 struct rdtgroup *rdtgrp; in rdtgroup_mkdir_ctrl_mon() local
3615 ret = mkdir_rdt_prepare(parent_kn, name, mode, RDTCTRL_GROUP, &rdtgrp); in rdtgroup_mkdir_ctrl_mon()
3619 kn = rdtgrp->kn; in rdtgroup_mkdir_ctrl_mon()
3628 rdtgrp->closid = closid; in rdtgroup_mkdir_ctrl_mon()
3630 ret = mkdir_rdt_prepare_rmid_alloc(rdtgrp); in rdtgroup_mkdir_ctrl_mon()
3634 kernfs_activate(rdtgrp->kn); in rdtgroup_mkdir_ctrl_mon()
3636 ret = rdtgroup_init_alloc(rdtgrp); in rdtgroup_mkdir_ctrl_mon()
3640 list_add(&rdtgrp->rdtgroup_list, &rdt_all_groups); in rdtgroup_mkdir_ctrl_mon()
3647 ret = mongroup_create_dir(kn, rdtgrp, "mon_groups", NULL); in rdtgroup_mkdir_ctrl_mon()
3653 rdtgrp->mba_mbps_event = mba_mbps_default_event; in rdtgroup_mkdir_ctrl_mon()
3659 list_del(&rdtgrp->rdtgroup_list); in rdtgroup_mkdir_ctrl_mon()
3661 mkdir_rdt_prepare_rmid_free(rdtgrp); in rdtgroup_mkdir_ctrl_mon()
3665 mkdir_rdt_prepare_clean(rdtgrp); in rdtgroup_mkdir_ctrl_mon()
3693 static int rdtgroup_rmdir_mon(struct rdtgroup *rdtgrp, cpumask_var_t tmpmask) in rdtgroup_rmdir_mon() argument
3695 struct rdtgroup *prdtgrp = rdtgrp->mon.parent; in rdtgroup_rmdir_mon()
3700 rdt_move_group_tasks(rdtgrp, prdtgrp, tmpmask); in rdtgroup_rmdir_mon()
3708 for_each_cpu(cpu, &rdtgrp->cpu_mask) in rdtgroup_rmdir_mon()
3715 cpumask_or(tmpmask, tmpmask, &rdtgrp->cpu_mask); in rdtgroup_rmdir_mon()
3718 rdtgrp->flags = RDT_DELETED; in rdtgroup_rmdir_mon()
3719 free_rmid(rdtgrp->closid, rdtgrp->mon.rmid); in rdtgroup_rmdir_mon()
3725 list_del(&rdtgrp->mon.crdtgrp_list); in rdtgroup_rmdir_mon()
3727 kernfs_remove(rdtgrp->kn); in rdtgroup_rmdir_mon()
3732 static int rdtgroup_ctrl_remove(struct rdtgroup *rdtgrp) in rdtgroup_ctrl_remove() argument
3734 rdtgrp->flags = RDT_DELETED; in rdtgroup_ctrl_remove()
3735 list_del(&rdtgrp->rdtgroup_list); in rdtgroup_ctrl_remove()
3737 kernfs_remove(rdtgrp->kn); in rdtgroup_ctrl_remove()
3741 static int rdtgroup_rmdir_ctrl(struct rdtgroup *rdtgrp, cpumask_var_t tmpmask) in rdtgroup_rmdir_ctrl() argument
3747 rdt_move_group_tasks(rdtgrp, &rdtgroup_default, tmpmask); in rdtgroup_rmdir_ctrl()
3751 &rdtgroup_default.cpu_mask, &rdtgrp->cpu_mask); in rdtgroup_rmdir_ctrl()
3756 for_each_cpu(cpu, &rdtgrp->cpu_mask) in rdtgroup_rmdir_ctrl()
3763 cpumask_or(tmpmask, tmpmask, &rdtgrp->cpu_mask); in rdtgroup_rmdir_ctrl()
3766 free_rmid(rdtgrp->closid, rdtgrp->mon.rmid); in rdtgroup_rmdir_ctrl()
3767 closid_free(rdtgrp->closid); in rdtgroup_rmdir_ctrl()
3769 rdtgroup_ctrl_remove(rdtgrp); in rdtgroup_rmdir_ctrl()
3774 free_all_child_rdtgrp(rdtgrp); in rdtgroup_rmdir_ctrl()
3791 struct rdtgroup *rdtgrp; in rdtgroup_rmdir() local
3798 rdtgrp = rdtgroup_kn_lock_live(kn); in rdtgroup_rmdir()
3799 if (!rdtgrp) { in rdtgroup_rmdir()
3812 if (rdtgrp->type == RDTCTRL_GROUP && parent_kn == rdtgroup_default.kn && in rdtgroup_rmdir()
3813 rdtgrp != &rdtgroup_default) { in rdtgroup_rmdir()
3814 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP || in rdtgroup_rmdir()
3815 rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED) { in rdtgroup_rmdir()
3816 ret = rdtgroup_ctrl_remove(rdtgrp); in rdtgroup_rmdir()
3818 ret = rdtgroup_rmdir_ctrl(rdtgrp, tmpmask); in rdtgroup_rmdir()
3820 } else if (rdtgrp->type == RDTMON_GROUP && in rdtgroup_rmdir()
3822 ret = rdtgroup_rmdir_mon(rdtgrp, tmpmask); in rdtgroup_rmdir()
3843 static void mongrp_reparent(struct rdtgroup *rdtgrp, in mongrp_reparent() argument
3847 struct rdtgroup *prdtgrp = rdtgrp->mon.parent; in mongrp_reparent()
3849 WARN_ON(rdtgrp->type != RDTMON_GROUP); in mongrp_reparent()
3857 list_move_tail(&rdtgrp->mon.crdtgrp_list, in mongrp_reparent()
3860 rdtgrp->mon.parent = new_prdtgrp; in mongrp_reparent()
3861 rdtgrp->closid = new_prdtgrp->closid; in mongrp_reparent()
3864 rdt_move_group_tasks(rdtgrp, rdtgrp, cpus); in mongrp_reparent()
3874 struct rdtgroup *rdtgrp; in rdtgroup_rename() local
3878 rdtgrp = kernfs_to_rdtgroup(kn); in rdtgroup_rename()
3880 if (!rdtgrp || !new_prdtgrp) in rdtgroup_rename()
3884 rdtgroup_kn_get(rdtgrp, kn); in rdtgroup_rename()
3902 if ((rdtgrp->flags & RDT_DELETED) || (new_prdtgrp->flags & RDT_DELETED)) { in rdtgroup_rename()
3908 if (rdtgrp->type != RDTMON_GROUP || !kn_parent || in rdtgroup_rename()
3926 if (!cpumask_empty(&rdtgrp->cpu_mask) && in rdtgroup_rename()
3927 rdtgrp->mon.parent != new_prdtgrp) { in rdtgroup_rename()
3951 mongrp_reparent(rdtgrp, new_prdtgrp, tmpmask); in rdtgroup_rename()
3957 rdtgroup_kn_put(rdtgrp, kn); in rdtgroup_rename()
4203 struct rdtgroup *rdtgrp; in resctrl_offline_cpu() local
4206 list_for_each_entry(rdtgrp, &rdt_all_groups, rdtgroup_list) { in resctrl_offline_cpu()
4207 if (cpumask_test_and_clear_cpu(cpu, &rdtgrp->cpu_mask)) { in resctrl_offline_cpu()
4208 clear_childcpus(rdtgrp, cpu); in resctrl_offline_cpu()