Lines Matching +full:non +full:- +full:pc
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
83 * Per-CPU data structure.
106 ("[soft,%d] illegal row-index %d", __LINE__, ri)); in soft_allocate_pmc()
108 if (a->pm_class != PMC_CLASS_SOFT) in soft_allocate_pmc()
111 if ((pm->pm_caps & SOFT_CAPS) == 0) in soft_allocate_pmc()
114 if ((pm->pm_caps & ~SOFT_CAPS) != 0) in soft_allocate_pmc()
117 ev = pm->pm_event; in soft_allocate_pmc()
127 if (ps->ps_alloc != NULL) in soft_allocate_pmc()
128 ps->ps_alloc(); in soft_allocate_pmc()
143 ("[soft,%d] illegal row-index %d", __LINE__, ri)); in soft_config_pmc()
145 phw = &soft_pcpu[cpu]->soft_hw[ri]; in soft_config_pmc()
147 KASSERT(pm == NULL || phw->phw_pmc == NULL, in soft_config_pmc()
148 ("[soft,%d] pm=%p phw->pm=%p hwpmc not unconfigured", __LINE__, in soft_config_pmc()
149 pm, phw->phw_pmc)); in soft_config_pmc()
151 phw->phw_pmc = pm; in soft_config_pmc()
165 ("[soft,%d] illegal row-index %d", __LINE__, ri)); in soft_describe()
167 phw = &soft_pcpu[cpu]->soft_hw[ri]; in soft_describe()
170 strlcpy(pi->pm_name, pd->pm_descr.pd_name, sizeof(pi->pm_name)); in soft_describe()
171 pi->pm_class = pd->pm_descr.pd_class; in soft_describe()
173 if (phw->phw_state & PMC_PHW_FLAG_IS_ENABLED) { in soft_describe()
174 pi->pm_enabled = TRUE; in soft_describe()
175 *ppmc = phw->phw_pmc; in soft_describe()
177 pi->pm_enabled = FALSE; in soft_describe()
192 ("[soft,%d] illegal row-index %d", __LINE__, ri)); in soft_get_config()
194 *ppm = soft_pcpu[cpu]->soft_hw[ri].phw_pmc; in soft_get_config()
202 struct pmc_cpu *pc; in soft_pcpu_fini() local
211 ri = md->pmd_classdep[PMC_CLASS_INDEX_SOFT].pcd_ri; in soft_pcpu_fini()
216 pc = pmc_pcpu[cpu]; in soft_pcpu_fini()
217 pc->pc_hwpmcs[ri] = NULL; in soft_pcpu_fini()
226 struct pmc_cpu *pc; in soft_pcpu_init() local
234 KASSERT(soft_pcpu[cpu] == NULL, ("[soft,%d] non-null per-cpu", in soft_pcpu_init()
238 pc = pmc_pcpu[cpu]; in soft_pcpu_init()
240 KASSERT(pc != NULL, ("[soft,%d] cpu %d null per-cpu", __LINE__, cpu)); in soft_pcpu_init()
243 phw = soft_pc->soft_hw; in soft_pcpu_init()
244 first_ri = md->pmd_classdep[PMC_CLASS_INDEX_SOFT].pcd_ri; in soft_pcpu_init()
247 phw->phw_state = PMC_PHW_FLAG_IS_ENABLED | in soft_pcpu_init()
249 phw->phw_pmc = NULL; in soft_pcpu_init()
250 pc->pc_hwpmcs[n + first_ri] = phw; in soft_pcpu_init()
263 ("[soft,%d] illegal row-index %d", __LINE__, ri)); in soft_read_pmc()
265 PMCDBG1(MDP,REA,1,"soft-read id=%d", ri); in soft_read_pmc()
267 *v = soft_pcpu[cpu]->soft_values[ri]; in soft_read_pmc()
278 ("[soft,%d] illegal row-index %d", __LINE__, ri)); in soft_write_pmc()
280 PMCDBG3(MDP,WRI,1, "soft-write cpu=%d ri=%d v=%jx", cpu, ri, v); in soft_write_pmc()
282 soft_pcpu[cpu]->soft_values[ri] = v; in soft_write_pmc()
299 ("[soft,%d] illegal row-index %d", __LINE__, ri)); in soft_release_pmc()
301 phw = &soft_pcpu[cpu]->soft_hw[ri]; in soft_release_pmc()
303 KASSERT(phw->phw_pmc == NULL, in soft_release_pmc()
304 ("[soft,%d] PHW pmc %p non-NULL", __LINE__, phw->phw_pmc)); in soft_release_pmc()
306 ev = pmc->pm_event; in soft_release_pmc()
314 if (ps->ps_release != NULL) in soft_release_pmc()
315 ps->ps_release(); in soft_release_pmc()
327 ("[soft,%d] illegal row-index %d", __LINE__, ri)); in soft_start_pmc()
329 ps = pmc_soft_ev_acquire(pm->pm_event); in soft_start_pmc()
332 atomic_add_int(&ps->ps_running, 1); in soft_start_pmc()
346 ("[soft,%d] illegal row-index %d", __LINE__, ri)); in soft_stop_pmc()
348 ps = pmc_soft_ev_acquire(pm->pm_event); in soft_stop_pmc()
351 atomic_subtract_int(&ps->ps_running, 1); in soft_stop_pmc()
362 struct soft_cpu *pc; in pmc_soft_intr() local
365 KASSERT(ks->pm_cpu >= 0 && ks->pm_cpu < pmc_cpu_max(), in pmc_soft_intr()
366 ("[soft,%d] CPU %d out of range", __LINE__, ks->pm_cpu)); in pmc_soft_intr()
369 pc = soft_pcpu[ks->pm_cpu]; in pmc_soft_intr()
373 pm = pc->soft_hw[ri].phw_pmc; in pmc_soft_intr()
375 pm->pm_state != PMC_STATE_RUNNING || in pmc_soft_intr()
376 pm->pm_event != ks->pm_ev) { in pmc_soft_intr()
382 if ((pc->soft_values[ri]--) <= 0) in pmc_soft_intr()
383 pc->soft_values[ri] += pm->pm_sc.pm_reloadcount; in pmc_soft_intr()
386 user_mode = TRAPF_USERMODE(ks->pm_tf); in pmc_soft_intr()
387 error = pmc_process_interrupt(PMC_SR, pm, ks->pm_tf); in pmc_soft_intr()
389 soft_stop_pmc(ks->pm_cpu, ri, pm); in pmc_soft_intr()
401 pc->soft_values[ri]++; in pmc_soft_intr()
417 (void *)td->td_frame); in ast_hwpmc()
429 pcd = &md->pmd_classdep[PMC_CLASS_INDEX_SOFT]; in pmc_soft_initialize()
431 pcd->pcd_caps = SOFT_CAPS; in pmc_soft_initialize()
432 pcd->pcd_class = PMC_CLASS_SOFT; in pmc_soft_initialize()
433 pcd->pcd_num = SOFT_NPMCS; in pmc_soft_initialize()
434 pcd->pcd_ri = md->pmd_npmc; in pmc_soft_initialize()
435 pcd->pcd_width = 64; in pmc_soft_initialize()
437 pcd->pcd_allocate_pmc = soft_allocate_pmc; in pmc_soft_initialize()
438 pcd->pcd_config_pmc = soft_config_pmc; in pmc_soft_initialize()
439 pcd->pcd_describe = soft_describe; in pmc_soft_initialize()
440 pcd->pcd_get_config = soft_get_config; in pmc_soft_initialize()
441 pcd->pcd_get_msr = NULL; in pmc_soft_initialize()
442 pcd->pcd_pcpu_init = soft_pcpu_init; in pmc_soft_initialize()
443 pcd->pcd_pcpu_fini = soft_pcpu_fini; in pmc_soft_initialize()
444 pcd->pcd_read_pmc = soft_read_pmc; in pmc_soft_initialize()
445 pcd->pcd_write_pmc = soft_write_pmc; in pmc_soft_initialize()
446 pcd->pcd_release_pmc = soft_release_pmc; in pmc_soft_initialize()
447 pcd->pcd_start_pmc = soft_start_pmc; in pmc_soft_initialize()
448 pcd->pcd_stop_pmc = soft_stop_pmc; in pmc_soft_initialize()
450 md->pmd_npmc += SOFT_NPMCS; in pmc_soft_initialize()
458 PMCDBG0(MDP, INI, 1, "soft-finalize"); in pmc_soft_finalize()
461 KASSERT(soft_pcpu[i] == NULL, ("[soft,%d] non-null pcpu cpu %d", in pmc_soft_finalize()