Lines Matching refs:plr
176 if (rdtgrp->plr && rdtgrp->plr->minor == minor) { in region_find_by_minor()
194 static void pseudo_lock_cstates_relax(struct pseudo_lock_region *plr) in pseudo_lock_cstates_relax() argument
198 list_for_each_entry_safe(pm_req, next, &plr->pm_reqs, list) { in pseudo_lock_cstates_relax()
223 static int pseudo_lock_cstates_constrain(struct pseudo_lock_region *plr) in pseudo_lock_cstates_constrain() argument
229 for_each_cpu(cpu, &plr->d->hdr.cpu_mask) { in pseudo_lock_cstates_constrain()
247 list_add(&pm_req->list, &plr->pm_reqs); in pseudo_lock_cstates_constrain()
253 pseudo_lock_cstates_relax(plr); in pseudo_lock_cstates_constrain()
266 static void pseudo_lock_region_clear(struct pseudo_lock_region *plr) in pseudo_lock_region_clear() argument
268 plr->size = 0; in pseudo_lock_region_clear()
269 plr->line_size = 0; in pseudo_lock_region_clear()
270 kfree(plr->kmem); in pseudo_lock_region_clear()
271 plr->kmem = NULL; in pseudo_lock_region_clear()
272 plr->s = NULL; in pseudo_lock_region_clear()
273 if (plr->d) in pseudo_lock_region_clear()
274 plr->d->plr = NULL; in pseudo_lock_region_clear()
275 plr->d = NULL; in pseudo_lock_region_clear()
276 plr->cbm = 0; in pseudo_lock_region_clear()
277 plr->debugfs_dir = NULL; in pseudo_lock_region_clear()
298 static int pseudo_lock_region_init(struct pseudo_lock_region *plr) in pseudo_lock_region_init() argument
300 enum resctrl_scope scope = plr->s->res->ctrl_scope; in pseudo_lock_region_init()
308 plr->cpu = cpumask_first(&plr->d->hdr.cpu_mask); in pseudo_lock_region_init()
310 if (!cpu_online(plr->cpu)) { in pseudo_lock_region_init()
312 plr->cpu); in pseudo_lock_region_init()
317 ci = get_cpu_cacheinfo_level(plr->cpu, scope); in pseudo_lock_region_init()
319 plr->line_size = ci->coherency_line_size; in pseudo_lock_region_init()
320 plr->size = rdtgroup_cbm_to_size(plr->s->res, plr->d, plr->cbm); in pseudo_lock_region_init()
327 pseudo_lock_region_clear(plr); in pseudo_lock_region_init()
344 struct pseudo_lock_region *plr; in pseudo_lock_init() local
346 plr = kzalloc(sizeof(*plr), GFP_KERNEL); in pseudo_lock_init()
347 if (!plr) in pseudo_lock_init()
350 init_waitqueue_head(&plr->lock_thread_wq); in pseudo_lock_init()
351 INIT_LIST_HEAD(&plr->pm_reqs); in pseudo_lock_init()
352 rdtgrp->plr = plr; in pseudo_lock_init()
366 static int pseudo_lock_region_alloc(struct pseudo_lock_region *plr) in pseudo_lock_region_alloc() argument
370 ret = pseudo_lock_region_init(plr); in pseudo_lock_region_alloc()
378 if (plr->size > KMALLOC_MAX_SIZE) { in pseudo_lock_region_alloc()
384 plr->kmem = kzalloc(plr->size, GFP_KERNEL); in pseudo_lock_region_alloc()
385 if (!plr->kmem) { in pseudo_lock_region_alloc()
394 pseudo_lock_region_clear(plr); in pseudo_lock_region_alloc()
411 pseudo_lock_region_clear(rdtgrp->plr); in pseudo_lock_free()
412 kfree(rdtgrp->plr); in pseudo_lock_free()
413 rdtgrp->plr = NULL; in pseudo_lock_free()
437 struct pseudo_lock_region *plr = _plr; in resctrl_arch_pseudo_lock_fn() local
488 mem_r = plr->kmem; in resctrl_arch_pseudo_lock_fn()
489 size = plr->size; in resctrl_arch_pseudo_lock_fn()
490 line_size = plr->line_size; in resctrl_arch_pseudo_lock_fn()
497 __wrmsr(MSR_IA32_PQR_ASSOC, rmid_p, plr->closid); in resctrl_arch_pseudo_lock_fn()
540 plr->thread_done = 1; in resctrl_arch_pseudo_lock_fn()
541 wake_up_interruptible(&plr->lock_thread_wq); in resctrl_arch_pseudo_lock_fn()
821 if (d->plr) { in rdtgroup_cbm_overlaps_pseudo_locked()
822 cbm_len = d->plr->s->res->cache.cbm_len; in rdtgroup_cbm_overlaps_pseudo_locked()
823 cbm_b = d->plr->cbm; in rdtgroup_cbm_overlaps_pseudo_locked()
862 if (d_i->plr) in rdtgroup_pseudo_locked_in_hierarchy()
896 struct pseudo_lock_region *plr = _plr; in resctrl_arch_measure_cycles_lat_fn() local
908 mem_r = READ_ONCE(plr->kmem); in resctrl_arch_measure_cycles_lat_fn()
914 for (i = 0; i < plr->size; i += 32) { in resctrl_arch_measure_cycles_lat_fn()
925 plr->thread_done = 1; in resctrl_arch_measure_cycles_lat_fn()
926 wake_up_interruptible(&plr->lock_thread_wq); in resctrl_arch_measure_cycles_lat_fn()
962 struct pseudo_lock_region *plr, in measure_residency_fn() argument
975 miss_event = perf_event_create_kernel_counter(miss_attr, plr->cpu, in measure_residency_fn()
980 hit_event = perf_event_create_kernel_counter(hit_attr, plr->cpu, in measure_residency_fn()
1012 line_size = READ_ONCE(plr->line_size); in measure_residency_fn()
1013 mem_r = READ_ONCE(plr->kmem); in measure_residency_fn()
1014 size = READ_ONCE(plr->size); in measure_residency_fn()
1080 struct pseudo_lock_region *plr = _plr; in resctrl_arch_measure_l2_residency() local
1103 measure_residency_fn(&perf_miss_attr, &perf_hit_attr, plr, &counts); in resctrl_arch_measure_l2_residency()
1111 plr->thread_done = 1; in resctrl_arch_measure_l2_residency()
1112 wake_up_interruptible(&plr->lock_thread_wq); in resctrl_arch_measure_l2_residency()
1118 struct pseudo_lock_region *plr = _plr; in resctrl_arch_measure_l3_residency() local
1142 measure_residency_fn(&perf_miss_attr, &perf_hit_attr, plr, &counts); in resctrl_arch_measure_l3_residency()
1167 plr->thread_done = 1; in resctrl_arch_measure_l3_residency()
1168 wake_up_interruptible(&plr->lock_thread_wq); in resctrl_arch_measure_l3_residency()
1186 struct pseudo_lock_region *plr = rdtgrp->plr; in pseudo_lock_measure_cycles() local
1199 if (!plr->d) { in pseudo_lock_measure_cycles()
1204 plr->thread_done = 0; in pseudo_lock_measure_cycles()
1205 cpu = cpumask_first(&plr->d->hdr.cpu_mask); in pseudo_lock_measure_cycles()
1211 plr->cpu = cpu; in pseudo_lock_measure_cycles()
1215 plr, cpu, "pseudo_lock_measure/%u"); in pseudo_lock_measure_cycles()
1218 plr, cpu, "pseudo_lock_measure/%u"); in pseudo_lock_measure_cycles()
1221 plr, cpu, "pseudo_lock_measure/%u"); in pseudo_lock_measure_cycles()
1230 ret = wait_event_interruptible(plr->lock_thread_wq, in pseudo_lock_measure_cycles()
1231 plr->thread_done == 1); in pseudo_lock_measure_cycles()
1298 struct pseudo_lock_region *plr = rdtgrp->plr; in rdtgroup_pseudo_lock_create() local
1305 ret = pseudo_lock_region_alloc(plr); in rdtgroup_pseudo_lock_create()
1309 ret = pseudo_lock_cstates_constrain(plr); in rdtgroup_pseudo_lock_create()
1320 plr->thread_done = 0; in rdtgroup_pseudo_lock_create()
1322 thread = kthread_run_on_cpu(resctrl_arch_pseudo_lock_fn, plr, in rdtgroup_pseudo_lock_create()
1323 plr->cpu, "pseudo_lock/%u"); in rdtgroup_pseudo_lock_create()
1330 ret = wait_event_interruptible(plr->lock_thread_wq, in rdtgroup_pseudo_lock_create()
1331 plr->thread_done == 1); in rdtgroup_pseudo_lock_create()
1363 plr->debugfs_dir = debugfs_create_dir(kn_name, debugfs_resctrl); in rdtgroup_pseudo_lock_create()
1364 if (!IS_ERR_OR_NULL(plr->debugfs_dir)) in rdtgroup_pseudo_lock_create()
1366 plr->debugfs_dir, rdtgrp, in rdtgroup_pseudo_lock_create()
1389 plr->minor = new_minor; in rdtgroup_pseudo_lock_create()
1402 debugfs_remove_recursive(plr->debugfs_dir); in rdtgroup_pseudo_lock_create()
1405 pseudo_lock_cstates_relax(plr); in rdtgroup_pseudo_lock_create()
1407 pseudo_lock_region_clear(plr); in rdtgroup_pseudo_lock_create()
1428 struct pseudo_lock_region *plr = rdtgrp->plr; in rdtgroup_pseudo_lock_remove() local
1439 pseudo_lock_cstates_relax(plr); in rdtgroup_pseudo_lock_remove()
1440 debugfs_remove_recursive(rdtgrp->plr->debugfs_dir); in rdtgroup_pseudo_lock_remove()
1441 device_destroy(&pseudo_lock_class, MKDEV(pseudo_lock_major, plr->minor)); in rdtgroup_pseudo_lock_remove()
1442 pseudo_lock_minor_release(plr->minor); in rdtgroup_pseudo_lock_remove()
1501 struct pseudo_lock_region *plr; in pseudo_lock_dev_mmap() local
1515 plr = rdtgrp->plr; in pseudo_lock_dev_mmap()
1517 if (!plr->d) { in pseudo_lock_dev_mmap()
1528 if (!cpumask_subset(current->cpus_ptr, &plr->d->hdr.cpu_mask)) { in pseudo_lock_dev_mmap()
1533 physical = __pa(plr->kmem) >> PAGE_SHIFT; in pseudo_lock_dev_mmap()
1534 psize = plr->size - off; in pseudo_lock_dev_mmap()
1536 if (off > plr->size) { in pseudo_lock_dev_mmap()
1555 memset(plr->kmem + off, 0, vsize); in pseudo_lock_dev_mmap()