Lines Matching refs:rdtgrp

227 	struct rdtgroup *rdtgrp;  in rdtgroup_mode_by_closid()  local
229 list_for_each_entry(rdtgrp, &rdt_all_groups, rdtgroup_list) { in rdtgroup_mode_by_closid()
230 if (rdtgrp->closid == closid) in rdtgroup_mode_by_closid()
231 return rdtgrp->mode; in rdtgroup_mode_by_closid()
334 struct rdtgroup *rdtgrp; in rdtgroup_cpus_show() local
338 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_cpus_show()
340 if (rdtgrp) { in rdtgroup_cpus_show()
341 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED) { in rdtgroup_cpus_show()
342 if (!rdtgrp->plr->d) { in rdtgroup_cpus_show()
347 mask = &rdtgrp->plr->d->hdr.cpu_mask; in rdtgroup_cpus_show()
354 cpumask_pr_args(&rdtgrp->cpu_mask)); in rdtgroup_cpus_show()
407 static int cpus_mon_write(struct rdtgroup *rdtgrp, cpumask_var_t newmask, in cpus_mon_write() argument
410 struct rdtgroup *prgrp = rdtgrp->mon.parent, *crgrp; in cpus_mon_write()
421 cpumask_andnot(tmpmask, &rdtgrp->cpu_mask, newmask); in cpus_mon_write()
432 cpumask_andnot(tmpmask, newmask, &rdtgrp->cpu_mask); in cpus_mon_write()
436 if (crgrp == rdtgrp) in cpus_mon_write()
441 update_closid_rmid(tmpmask, rdtgrp); in cpus_mon_write()
445 cpumask_copy(&rdtgrp->cpu_mask, newmask); in cpus_mon_write()
460 static int cpus_ctrl_write(struct rdtgroup *rdtgrp, cpumask_var_t newmask, in cpus_ctrl_write() argument
467 cpumask_andnot(tmpmask, &rdtgrp->cpu_mask, newmask); in cpus_ctrl_write()
470 if (rdtgrp == &rdtgroup_default) { in cpus_ctrl_write()
486 cpumask_andnot(tmpmask, newmask, &rdtgrp->cpu_mask); in cpus_ctrl_write()
489 if (r == rdtgrp) in cpus_ctrl_write()
495 update_closid_rmid(tmpmask, rdtgrp); in cpus_ctrl_write()
499 cpumask_copy(&rdtgrp->cpu_mask, newmask); in cpus_ctrl_write()
505 head = &rdtgrp->mon.crdtgrp_list; in cpus_ctrl_write()
507 cpumask_and(tmpmask, &rdtgrp->cpu_mask, &crgrp->cpu_mask); in cpus_ctrl_write()
508 update_closid_rmid(tmpmask, rdtgrp); in cpus_ctrl_write()
519 struct rdtgroup *rdtgrp; in rdtgroup_cpus_write() local
537 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_cpus_write()
538 if (!rdtgrp) { in rdtgroup_cpus_write()
543 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED || in rdtgroup_cpus_write()
544 rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) { in rdtgroup_cpus_write()
568 if (rdtgrp->type == RDTCTRL_GROUP) in rdtgroup_cpus_write()
569 ret = cpus_ctrl_write(rdtgrp, newmask, tmpmask, tmpmask1); in rdtgroup_cpus_write()
570 else if (rdtgrp->type == RDTMON_GROUP) in rdtgroup_cpus_write()
571 ret = cpus_mon_write(rdtgrp, newmask, tmpmask); in rdtgroup_cpus_write()
596 static void rdtgroup_remove(struct rdtgroup *rdtgrp) in rdtgroup_remove() argument
598 kernfs_put(rdtgrp->kn); in rdtgroup_remove()
599 kfree(rdtgrp); in rdtgroup_remove()
620 static bool task_in_rdtgroup(struct task_struct *tsk, struct rdtgroup *rdtgrp) in task_in_rdtgroup() argument
622 u32 closid, rmid = rdtgrp->mon.rmid; in task_in_rdtgroup()
624 if (rdtgrp->type == RDTCTRL_GROUP) in task_in_rdtgroup()
625 closid = rdtgrp->closid; in task_in_rdtgroup()
626 else if (rdtgrp->type == RDTMON_GROUP) in task_in_rdtgroup()
627 closid = rdtgrp->mon.parent->closid; in task_in_rdtgroup()
636 struct rdtgroup *rdtgrp) in __rdtgroup_move_task() argument
639 if (task_in_rdtgroup(tsk, rdtgrp)) in __rdtgroup_move_task()
650 if (rdtgrp->type == RDTMON_GROUP && in __rdtgroup_move_task()
651 !resctrl_arch_match_closid(tsk, rdtgrp->mon.parent->closid)) { in __rdtgroup_move_task()
656 if (rdtgrp->type == RDTMON_GROUP) in __rdtgroup_move_task()
657 resctrl_arch_set_closid_rmid(tsk, rdtgrp->mon.parent->closid, in __rdtgroup_move_task()
658 rdtgrp->mon.rmid); in __rdtgroup_move_task()
660 resctrl_arch_set_closid_rmid(tsk, rdtgrp->closid, in __rdtgroup_move_task()
661 rdtgrp->mon.rmid); in __rdtgroup_move_task()
742 static int rdtgroup_move_task(pid_t pid, struct rdtgroup *rdtgrp, in rdtgroup_move_task() argument
765 ret = __rdtgroup_move_task(tsk, rdtgrp); in rdtgroup_move_task()
774 struct rdtgroup *rdtgrp; in rdtgroup_tasks_write() local
779 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_tasks_write()
780 if (!rdtgrp) { in rdtgroup_tasks_write()
786 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED || in rdtgroup_tasks_write()
787 rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) { in rdtgroup_tasks_write()
808 ret = rdtgroup_move_task(pid, rdtgrp, of); in rdtgroup_tasks_write()
840 struct rdtgroup *rdtgrp; in rdtgroup_tasks_show() local
843 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_tasks_show()
844 if (rdtgrp) in rdtgroup_tasks_show()
845 show_rdt_tasks(rdtgrp, s); in rdtgroup_tasks_show()
856 struct rdtgroup *rdtgrp; in rdtgroup_closid_show() local
859 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_closid_show()
860 if (rdtgrp) in rdtgroup_closid_show()
861 seq_printf(s, "%u\n", rdtgrp->closid); in rdtgroup_closid_show()
872 struct rdtgroup *rdtgrp; in rdtgroup_rmid_show() local
875 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_rmid_show()
876 if (rdtgrp) in rdtgroup_rmid_show()
877 seq_printf(s, "%u\n", rdtgrp->mon.rmid); in rdtgroup_rmid_show()
1242 struct rdtgroup *rdtgrp; in rdtgroup_mode_show() local
1244 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_mode_show()
1245 if (!rdtgrp) { in rdtgroup_mode_show()
1250 seq_printf(s, "%s\n", rdtgroup_mode_str(rdtgrp->mode)); in rdtgroup_mode_show()
1384 static bool rdtgroup_mode_test_exclusive(struct rdtgroup *rdtgrp) in rdtgroup_mode_test_exclusive() argument
1386 int closid = rdtgrp->closid; in rdtgroup_mode_test_exclusive()
1425 struct rdtgroup *rdtgrp; in rdtgroup_mode_write() local
1434 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_mode_write()
1435 if (!rdtgrp) { in rdtgroup_mode_write()
1442 mode = rdtgrp->mode; in rdtgroup_mode_write()
1458 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) { in rdtgroup_mode_write()
1459 ret = rdtgroup_locksetup_exit(rdtgrp); in rdtgroup_mode_write()
1463 rdtgrp->mode = RDT_MODE_SHAREABLE; in rdtgroup_mode_write()
1465 if (!rdtgroup_mode_test_exclusive(rdtgrp)) { in rdtgroup_mode_write()
1469 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) { in rdtgroup_mode_write()
1470 ret = rdtgroup_locksetup_exit(rdtgrp); in rdtgroup_mode_write()
1474 rdtgrp->mode = RDT_MODE_EXCLUSIVE; in rdtgroup_mode_write()
1477 ret = rdtgroup_locksetup_enter(rdtgrp); in rdtgroup_mode_write()
1480 rdtgrp->mode = RDT_MODE_PSEUDO_LOCKSETUP; in rdtgroup_mode_write()
1536 struct rdtgroup *rdtgrp; in rdtgroup_size_show() local
1544 rdtgrp = rdtgroup_kn_lock_live(of->kn); in rdtgroup_size_show()
1545 if (!rdtgrp) { in rdtgroup_size_show()
1550 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED) { in rdtgroup_size_show()
1551 if (!rdtgrp->plr->d) { in rdtgroup_size_show()
1557 rdtgrp->plr->s->name); in rdtgroup_size_show()
1558 size = rdtgroup_cbm_to_size(rdtgrp->plr->s->res, in rdtgroup_size_show()
1559 rdtgrp->plr->d, in rdtgroup_size_show()
1560 rdtgrp->plr->cbm); in rdtgroup_size_show()
1561 seq_printf(s, "%d=%u\n", rdtgrp->plr->d->hdr.id, size); in rdtgroup_size_show()
1566 closid = rdtgrp->closid; in rdtgroup_size_show()
1576 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) { in rdtgroup_size_show()
2536 static void rdtgroup_kn_get(struct rdtgroup *rdtgrp, struct kernfs_node *kn) in rdtgroup_kn_get() argument
2538 atomic_inc(&rdtgrp->waitcount); in rdtgroup_kn_get()
2542 static void rdtgroup_kn_put(struct rdtgroup *rdtgrp, struct kernfs_node *kn) in rdtgroup_kn_put() argument
2544 if (atomic_dec_and_test(&rdtgrp->waitcount) && in rdtgroup_kn_put()
2545 (rdtgrp->flags & RDT_DELETED)) { in rdtgroup_kn_put()
2546 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP || in rdtgroup_kn_put()
2547 rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED) in rdtgroup_kn_put()
2548 rdtgroup_pseudo_lock_remove(rdtgrp); in rdtgroup_kn_put()
2550 rdtgroup_remove(rdtgrp); in rdtgroup_kn_put()
2558 struct rdtgroup *rdtgrp = kernfs_to_rdtgroup(kn); in rdtgroup_kn_lock_live() local
2560 if (!rdtgrp) in rdtgroup_kn_lock_live()
2563 rdtgroup_kn_get(rdtgrp, kn); in rdtgroup_kn_lock_live()
2569 if (rdtgrp->flags & RDT_DELETED) in rdtgroup_kn_lock_live()
2572 return rdtgrp; in rdtgroup_kn_lock_live()
2577 struct rdtgroup *rdtgrp = kernfs_to_rdtgroup(kn); in rdtgroup_kn_unlock() local
2579 if (!rdtgrp) in rdtgroup_kn_unlock()
2585 rdtgroup_kn_put(rdtgrp, kn); in rdtgroup_kn_unlock()
2998 static void free_all_child_rdtgrp(struct rdtgroup *rdtgrp) in free_all_child_rdtgrp() argument
3003 head = &rdtgrp->mon.crdtgrp_list; in free_all_child_rdtgrp()
3020 struct rdtgroup *rdtgrp, *tmp; in rmdir_all_sub() local
3025 list_for_each_entry_safe(rdtgrp, tmp, &rdt_all_groups, rdtgroup_list) { in rmdir_all_sub()
3027 free_all_child_rdtgrp(rdtgrp); in rmdir_all_sub()
3030 if (rdtgrp == &rdtgroup_default) in rmdir_all_sub()
3033 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP || in rmdir_all_sub()
3034 rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED) in rmdir_all_sub()
3035 rdtgroup_pseudo_lock_remove(rdtgrp); in rmdir_all_sub()
3043 &rdtgroup_default.cpu_mask, &rdtgrp->cpu_mask); in rmdir_all_sub()
3045 free_rmid(rdtgrp->closid, rdtgrp->mon.rmid); in rmdir_all_sub()
3047 kernfs_remove(rdtgrp->kn); in rmdir_all_sub()
3048 list_del(&rdtgrp->rdtgroup_list); in rmdir_all_sub()
3050 if (atomic_read(&rdtgrp->waitcount) != 0) in rmdir_all_sub()
3051 rdtgrp->flags = RDT_DELETED; in rmdir_all_sub()
3053 rdtgroup_remove(rdtgrp); in rmdir_all_sub()
3490 static int rdtgroup_init_alloc(struct rdtgroup *rdtgrp) in rdtgroup_init_alloc() argument
3502 rdtgroup_init_mba(r, rdtgrp->closid); in rdtgroup_init_alloc()
3506 ret = rdtgroup_init_cat(s, rdtgrp->closid); in rdtgroup_init_alloc()
3511 ret = resctrl_arch_update_domains(r, rdtgrp->closid); in rdtgroup_init_alloc()
3519 rdtgrp->mode = RDT_MODE_SHAREABLE; in rdtgroup_init_alloc()
3526 static int mkdir_rdt_prepare_rmid_alloc(struct rdtgroup *rdtgrp) in mkdir_rdt_prepare_rmid_alloc() argument
3533 ret = alloc_rmid(rdtgrp->closid); in mkdir_rdt_prepare_rmid_alloc()
3538 rdtgrp->mon.rmid = ret; in mkdir_rdt_prepare_rmid_alloc()
3540 ret = mkdir_mondata_all(rdtgrp->kn, rdtgrp, &rdtgrp->mon.mon_data_kn); in mkdir_rdt_prepare_rmid_alloc()
3543 free_rmid(rdtgrp->closid, rdtgrp->mon.rmid); in mkdir_rdt_prepare_rmid_alloc()
3576 struct rdtgroup *prdtgrp, *rdtgrp; in mkdir_rdt_prepare() local
3605 rdtgrp = kzalloc(sizeof(*rdtgrp), GFP_KERNEL); in mkdir_rdt_prepare()
3606 if (!rdtgrp) { in mkdir_rdt_prepare()
3611 *r = rdtgrp; in mkdir_rdt_prepare()
3612 rdtgrp->mon.parent = prdtgrp; in mkdir_rdt_prepare()
3613 rdtgrp->type = rtype; in mkdir_rdt_prepare()
3614 INIT_LIST_HEAD(&rdtgrp->mon.crdtgrp_list); in mkdir_rdt_prepare()
3617 kn = kernfs_create_dir(parent_kn, name, mode, rdtgrp); in mkdir_rdt_prepare()
3623 rdtgrp->kn = kn; in mkdir_rdt_prepare()
3659 kernfs_put(rdtgrp->kn); in mkdir_rdt_prepare()
3660 kernfs_remove(rdtgrp->kn); in mkdir_rdt_prepare()
3662 kfree(rdtgrp); in mkdir_rdt_prepare()
3682 struct rdtgroup *rdtgrp, *prgrp; in rdtgroup_mkdir_mon() local
3685 ret = mkdir_rdt_prepare(parent_kn, name, mode, RDTMON_GROUP, &rdtgrp); in rdtgroup_mkdir_mon()
3689 prgrp = rdtgrp->mon.parent; in rdtgroup_mkdir_mon()
3690 rdtgrp->closid = prgrp->closid; in rdtgroup_mkdir_mon()
3692 ret = mkdir_rdt_prepare_rmid_alloc(rdtgrp); in rdtgroup_mkdir_mon()
3694 mkdir_rdt_prepare_clean(rdtgrp); in rdtgroup_mkdir_mon()
3698 kernfs_activate(rdtgrp->kn); in rdtgroup_mkdir_mon()
3704 list_add_tail(&rdtgrp->mon.crdtgrp_list, &prgrp->mon.crdtgrp_list); in rdtgroup_mkdir_mon()
3718 struct rdtgroup *rdtgrp; in rdtgroup_mkdir_ctrl_mon() local
3723 ret = mkdir_rdt_prepare(parent_kn, name, mode, RDTCTRL_GROUP, &rdtgrp); in rdtgroup_mkdir_ctrl_mon()
3727 kn = rdtgrp->kn; in rdtgroup_mkdir_ctrl_mon()
3736 rdtgrp->closid = closid; in rdtgroup_mkdir_ctrl_mon()
3738 ret = mkdir_rdt_prepare_rmid_alloc(rdtgrp); in rdtgroup_mkdir_ctrl_mon()
3742 kernfs_activate(rdtgrp->kn); in rdtgroup_mkdir_ctrl_mon()
3744 ret = rdtgroup_init_alloc(rdtgrp); in rdtgroup_mkdir_ctrl_mon()
3748 list_add(&rdtgrp->rdtgroup_list, &rdt_all_groups); in rdtgroup_mkdir_ctrl_mon()
3755 ret = mongroup_create_dir(kn, rdtgrp, "mon_groups", NULL); in rdtgroup_mkdir_ctrl_mon()
3761 rdtgrp->mba_mbps_event = mba_mbps_default_event; in rdtgroup_mkdir_ctrl_mon()
3767 list_del(&rdtgrp->rdtgroup_list); in rdtgroup_mkdir_ctrl_mon()
3769 mkdir_rdt_prepare_rmid_free(rdtgrp); in rdtgroup_mkdir_ctrl_mon()
3773 mkdir_rdt_prepare_clean(rdtgrp); in rdtgroup_mkdir_ctrl_mon()
3801 static int rdtgroup_rmdir_mon(struct rdtgroup *rdtgrp, cpumask_var_t tmpmask) in rdtgroup_rmdir_mon() argument
3803 struct rdtgroup *prdtgrp = rdtgrp->mon.parent; in rdtgroup_rmdir_mon()
3808 rdt_move_group_tasks(rdtgrp, prdtgrp, tmpmask); in rdtgroup_rmdir_mon()
3816 for_each_cpu(cpu, &rdtgrp->cpu_mask) in rdtgroup_rmdir_mon()
3823 cpumask_or(tmpmask, tmpmask, &rdtgrp->cpu_mask); in rdtgroup_rmdir_mon()
3826 rdtgrp->flags = RDT_DELETED; in rdtgroup_rmdir_mon()
3827 free_rmid(rdtgrp->closid, rdtgrp->mon.rmid); in rdtgroup_rmdir_mon()
3833 list_del(&rdtgrp->mon.crdtgrp_list); in rdtgroup_rmdir_mon()
3835 kernfs_remove(rdtgrp->kn); in rdtgroup_rmdir_mon()
3840 static int rdtgroup_ctrl_remove(struct rdtgroup *rdtgrp) in rdtgroup_ctrl_remove() argument
3842 rdtgrp->flags = RDT_DELETED; in rdtgroup_ctrl_remove()
3843 list_del(&rdtgrp->rdtgroup_list); in rdtgroup_ctrl_remove()
3845 kernfs_remove(rdtgrp->kn); in rdtgroup_ctrl_remove()
3849 static int rdtgroup_rmdir_ctrl(struct rdtgroup *rdtgrp, cpumask_var_t tmpmask) in rdtgroup_rmdir_ctrl() argument
3855 rdt_move_group_tasks(rdtgrp, &rdtgroup_default, tmpmask); in rdtgroup_rmdir_ctrl()
3859 &rdtgroup_default.cpu_mask, &rdtgrp->cpu_mask); in rdtgroup_rmdir_ctrl()
3864 for_each_cpu(cpu, &rdtgrp->cpu_mask) in rdtgroup_rmdir_ctrl()
3871 cpumask_or(tmpmask, tmpmask, &rdtgrp->cpu_mask); in rdtgroup_rmdir_ctrl()
3874 free_rmid(rdtgrp->closid, rdtgrp->mon.rmid); in rdtgroup_rmdir_ctrl()
3875 closid_free(rdtgrp->closid); in rdtgroup_rmdir_ctrl()
3877 rdtgroup_ctrl_remove(rdtgrp); in rdtgroup_rmdir_ctrl()
3882 free_all_child_rdtgrp(rdtgrp); in rdtgroup_rmdir_ctrl()
3899 struct rdtgroup *rdtgrp; in rdtgroup_rmdir() local
3906 rdtgrp = rdtgroup_kn_lock_live(kn); in rdtgroup_rmdir()
3907 if (!rdtgrp) { in rdtgroup_rmdir()
3920 if (rdtgrp->type == RDTCTRL_GROUP && parent_kn == rdtgroup_default.kn && in rdtgroup_rmdir()
3921 rdtgrp != &rdtgroup_default) { in rdtgroup_rmdir()
3922 if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP || in rdtgroup_rmdir()
3923 rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED) { in rdtgroup_rmdir()
3924 ret = rdtgroup_ctrl_remove(rdtgrp); in rdtgroup_rmdir()
3926 ret = rdtgroup_rmdir_ctrl(rdtgrp, tmpmask); in rdtgroup_rmdir()
3928 } else if (rdtgrp->type == RDTMON_GROUP && in rdtgroup_rmdir()
3930 ret = rdtgroup_rmdir_mon(rdtgrp, tmpmask); in rdtgroup_rmdir()
3951 static void mongrp_reparent(struct rdtgroup *rdtgrp, in mongrp_reparent() argument
3955 struct rdtgroup *prdtgrp = rdtgrp->mon.parent; in mongrp_reparent()
3957 WARN_ON(rdtgrp->type != RDTMON_GROUP); in mongrp_reparent()
3965 list_move_tail(&rdtgrp->mon.crdtgrp_list, in mongrp_reparent()
3968 rdtgrp->mon.parent = new_prdtgrp; in mongrp_reparent()
3969 rdtgrp->closid = new_prdtgrp->closid; in mongrp_reparent()
3972 rdt_move_group_tasks(rdtgrp, rdtgrp, cpus); in mongrp_reparent()
3982 struct rdtgroup *rdtgrp; in rdtgroup_rename() local
3986 rdtgrp = kernfs_to_rdtgroup(kn); in rdtgroup_rename()
3988 if (!rdtgrp || !new_prdtgrp) in rdtgroup_rename()
3992 rdtgroup_kn_get(rdtgrp, kn); in rdtgroup_rename()
4010 if ((rdtgrp->flags & RDT_DELETED) || (new_prdtgrp->flags & RDT_DELETED)) { in rdtgroup_rename()
4016 if (rdtgrp->type != RDTMON_GROUP || !kn_parent || in rdtgroup_rename()
4034 if (!cpumask_empty(&rdtgrp->cpu_mask) && in rdtgroup_rename()
4035 rdtgrp->mon.parent != new_prdtgrp) { in rdtgroup_rename()
4059 mongrp_reparent(rdtgrp, new_prdtgrp, tmpmask); in rdtgroup_rename()
4065 rdtgroup_kn_put(rdtgrp, kn); in rdtgroup_rename()
4309 struct rdtgroup *rdtgrp; in resctrl_offline_cpu() local
4312 list_for_each_entry(rdtgrp, &rdt_all_groups, rdtgroup_list) { in resctrl_offline_cpu()
4313 if (cpumask_test_and_clear_cpu(cpu, &rdtgrp->cpu_mask)) { in resctrl_offline_cpu()
4314 clear_childcpus(rdtgrp, cpu); in resctrl_offline_cpu()