Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F164155330
D39915.id121334.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
21 KB
Referenced Files
None
Subscribers
None
D39915.id121334.diff
View Options
diff --git a/sys/dev/hwpmc/hwpmc_amd.c b/sys/dev/hwpmc/hwpmc_amd.c
--- a/sys/dev/hwpmc/hwpmc_amd.c
+++ b/sys/dev/hwpmc/hwpmc_amd.c
@@ -397,11 +397,10 @@
*/
static int
-amd_read_pmc(int cpu, int ri, pmc_value_t *v)
+amd_read_pmc(int cpu, int ri, struct pmc *pm, pmc_value_t *v)
{
enum pmc_mode mode;
const struct amd_descr *pd;
- struct pmc *pm;
pmc_value_t tmp;
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
@@ -411,13 +410,7 @@
KASSERT(amd_pcpu[cpu],
("[amd,%d] null per-cpu, cpu %d", __LINE__, cpu));
- pm = amd_pcpu[cpu]->pc_amdpmcs[ri].phw_pmc;
pd = &amd_pmcdesc[ri];
-
- KASSERT(pm != NULL,
- ("[amd,%d] No owner for HWPMC [cpu%d,pmc%d]", __LINE__,
- cpu, ri));
-
mode = PMC_TO_MODE(pm);
PMCDBG2(MDP,REA,1,"amd-read id=%d class=%d", ri, pd->pm_descr.pd_class);
@@ -456,24 +449,17 @@
*/
static int
-amd_write_pmc(int cpu, int ri, pmc_value_t v)
+amd_write_pmc(int cpu, int ri, struct pmc *pm, pmc_value_t v)
{
const struct amd_descr *pd;
enum pmc_mode mode;
- struct pmc *pm;
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
("[amd,%d] illegal CPU value %d", __LINE__, cpu));
KASSERT(ri >= 0 && ri < AMD_NPMCS,
("[amd,%d] illegal row-index %d", __LINE__, ri));
- pm = amd_pcpu[cpu]->pc_amdpmcs[ri].phw_pmc;
pd = &amd_pmcdesc[ri];
-
- KASSERT(pm != NULL,
- ("[amd,%d] PMC not owned (cpu%d,pmc%d)", __LINE__,
- cpu, ri));
-
mode = PMC_TO_MODE(pm);
#ifdef HWPMC_DEBUG
@@ -705,11 +691,9 @@
*/
static int
-amd_start_pmc(int cpu, int ri)
+amd_start_pmc(int cpu, int ri, struct pmc *pm)
{
uint64_t config;
- struct pmc *pm;
- struct pmc_hw *phw;
const struct amd_descr *pd;
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
@@ -717,14 +701,8 @@
KASSERT(ri >= 0 && ri < AMD_NPMCS,
("[amd,%d] illegal row-index %d", __LINE__, ri));
- phw = &amd_pcpu[cpu]->pc_amdpmcs[ri];
- pm = phw->phw_pmc;
pd = &amd_pmcdesc[ri];
- KASSERT(pm != NULL,
- ("[amd,%d] starting cpu%d,pmc%d with null pmc record", __LINE__,
- cpu, ri));
-
PMCDBG2(MDP,STA,1,"amd-start cpu=%d ri=%d", cpu, ri);
KASSERT(AMD_PMC_IS_STOPPED(pd->pm_evsel),
@@ -745,10 +723,8 @@
*/
static int
-amd_stop_pmc(int cpu, int ri)
+amd_stop_pmc(int cpu, int ri, struct pmc *pm)
{
- struct pmc *pm;
- struct pmc_hw *phw;
const struct amd_descr *pd;
uint64_t config;
int i;
@@ -758,13 +734,8 @@
KASSERT(ri >= 0 && ri < AMD_NPMCS,
("[amd,%d] illegal row-index %d", __LINE__, ri));
- phw = &amd_pcpu[cpu]->pc_amdpmcs[ri];
- pm = phw->phw_pmc;
- pd = &amd_pmcdesc[ri];
+ pd = &amd_pmcdesc[ri];
- KASSERT(pm != NULL,
- ("[amd,%d] cpu%d,pmc%d no PMC to stop", __LINE__,
- cpu, ri));
KASSERT(!AMD_PMC_IS_STOPPED(pd->pm_evsel),
("[amd,%d] PMC%d, CPU%d \"%s\" already stopped",
__LINE__, ri, cpu, pd->pm_descr.pd_name));
diff --git a/sys/dev/hwpmc/hwpmc_arm64.c b/sys/dev/hwpmc/hwpmc_arm64.c
--- a/sys/dev/hwpmc/hwpmc_arm64.c
+++ b/sys/dev/hwpmc/hwpmc_arm64.c
@@ -211,10 +211,9 @@
static int
-arm64_read_pmc(int cpu, int ri, pmc_value_t *v)
+arm64_read_pmc(int cpu, int ri, struct pmc *pm, pmc_value_t *v)
{
pmc_value_t tmp;
- struct pmc *pm;
register_t s;
int reg;
@@ -223,8 +222,6 @@
KASSERT(ri >= 0 && ri < arm64_npmcs,
("[arm64,%d] illegal row index %d", __LINE__, ri));
- pm = arm64_pcpu[cpu]->pc_arm64pmcs[ri].phw_pmc;
-
/*
* Ensure we don't get interrupted while updating the overflow count.
*/
@@ -260,17 +257,14 @@
}
static int
-arm64_write_pmc(int cpu, int ri, pmc_value_t v)
+arm64_write_pmc(int cpu, int ri, struct pmc *pm, pmc_value_t v)
{
- struct pmc *pm;
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
("[arm64,%d] illegal CPU value %d", __LINE__, cpu));
KASSERT(ri >= 0 && ri < arm64_npmcs,
("[arm64,%d] illegal row-index %d", __LINE__, ri));
- pm = arm64_pcpu[cpu]->pc_arm64pmcs[ri].phw_pmc;
-
if (PMC_IS_SAMPLING_MODE(PMC_TO_MODE(pm)))
v = ARMV8_RELOAD_COUNT_TO_PERFCTR_VALUE(v);
@@ -306,14 +300,10 @@
}
static int
-arm64_start_pmc(int cpu, int ri)
+arm64_start_pmc(int cpu, int ri, struct pmc *pm)
{
- struct pmc_hw *phw;
uint32_t config;
- struct pmc *pm;
- phw = &arm64_pcpu[cpu]->pc_arm64pmcs[ri];
- pm = phw->phw_pmc;
config = pm->pm_md.pm_arm64.pm_arm64_evsel;
/*
@@ -334,7 +324,7 @@
}
static int
-arm64_stop_pmc(int cpu, int ri)
+arm64_stop_pmc(int cpu, int ri, struct pmc *pm __unused)
{
/*
* Disable the PMCs.
diff --git a/sys/dev/hwpmc/hwpmc_core.c b/sys/dev/hwpmc/hwpmc_core.c
--- a/sys/dev/hwpmc/hwpmc_core.c
+++ b/sys/dev/hwpmc/hwpmc_core.c
@@ -368,9 +368,8 @@
}
static int
-iaf_read_pmc(int cpu, int ri, pmc_value_t *v)
+iaf_read_pmc(int cpu, int ri, struct pmc *pm, pmc_value_t *v)
{
- struct pmc *pm;
pmc_value_t tmp;
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
@@ -378,12 +377,6 @@
KASSERT(ri >= 0 && ri < core_iaf_npmc,
("[core,%d] illegal row-index %d", __LINE__, ri));
- pm = core_pcpu[cpu]->pc_corepmcs[ri + core_iaf_ri].phw_pmc;
-
- KASSERT(pm,
- ("[core,%d] cpu %d ri %d(%d) pmc not configured", __LINE__, cpu,
- ri, ri + core_iaf_ri));
-
tmp = rdpmc(IAF_RI_TO_MSR(ri));
if (PMC_IS_SAMPLING_MODE(PMC_TO_MODE(pm)))
@@ -421,9 +414,8 @@
}
static int
-iaf_start_pmc(int cpu, int ri)
+iaf_start_pmc(int cpu, int ri, struct pmc *pm)
{
- struct pmc *pm;
struct core_cpu *cc;
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
@@ -434,8 +426,6 @@
PMCDBG2(MDP,STA,1,"iaf-start cpu=%d ri=%d", cpu, ri);
cc = core_pcpu[cpu];
- pm = cc->pc_corepmcs[ri + core_iaf_ri].phw_pmc;
-
cc->pc_iafctrl |= pm->pm_md.pm_iaf.pm_iaf_ctrl;
wrmsr(IAF_CTRL, cc->pc_iafctrl);
@@ -450,7 +440,7 @@
}
static int
-iaf_stop_pmc(int cpu, int ri)
+iaf_stop_pmc(int cpu, int ri, struct pmc *pm)
{
struct core_cpu *cc;
@@ -476,10 +466,9 @@
}
static int
-iaf_write_pmc(int cpu, int ri, pmc_value_t v)
+iaf_write_pmc(int cpu, int ri, struct pmc *pm, pmc_value_t v)
{
struct core_cpu *cc;
- struct pmc *pm;
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
("[core,%d] illegal cpu value %d", __LINE__, cpu));
@@ -487,10 +476,6 @@
("[core,%d] illegal row-index %d", __LINE__, ri));
cc = core_pcpu[cpu];
- pm = cc->pc_corepmcs[ri + core_iaf_ri].phw_pmc;
-
- KASSERT(pm,
- ("[core,%d] cpu %d ri %d pmc not configured", __LINE__, cpu, ri));
if (PMC_IS_SAMPLING_MODE(PMC_TO_MODE(pm)))
v = iaf_reload_count_to_perfctr_value(v);
@@ -846,9 +831,8 @@
}
static int
-iap_read_pmc(int cpu, int ri, pmc_value_t *v)
+iap_read_pmc(int cpu, int ri, struct pmc *pm, pmc_value_t *v)
{
- struct pmc *pm;
pmc_value_t tmp;
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
@@ -856,12 +840,6 @@
KASSERT(ri >= 0 && ri < core_iap_npmc,
("[core,%d] illegal row-index %d", __LINE__, ri));
- pm = core_pcpu[cpu]->pc_corepmcs[ri].phw_pmc;
-
- KASSERT(pm,
- ("[core,%d] cpu %d ri %d pmc not configured", __LINE__, cpu,
- ri));
-
tmp = rdpmc(ri);
if (PMC_IS_SAMPLING_MODE(PMC_TO_MODE(pm)))
*v = iap_perfctr_value_to_reload_count(tmp);
@@ -894,9 +872,8 @@
}
static int
-iap_start_pmc(int cpu, int ri)
+iap_start_pmc(int cpu, int ri, struct pmc *pm)
{
- struct pmc *pm;
uint64_t evsel;
struct core_cpu *cc;
@@ -906,11 +883,6 @@
("[core,%d] illegal row-index %d", __LINE__, ri));
cc = core_pcpu[cpu];
- pm = cc->pc_corepmcs[ri].phw_pmc;
-
- KASSERT(pm,
- ("[core,%d] starting cpu%d,ri%d with no pmc configured",
- __LINE__, cpu, ri));
PMCDBG2(MDP,STA,1, "iap-start cpu=%d ri=%d", cpu, ri);
@@ -943,23 +915,14 @@
}
static int
-iap_stop_pmc(int cpu, int ri)
+iap_stop_pmc(int cpu, int ri, struct pmc *pm __unused)
{
- struct pmc *pm __diagused;
- struct core_cpu *cc;
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
("[core,%d] illegal cpu value %d", __LINE__, cpu));
KASSERT(ri >= 0 && ri < core_iap_npmc,
("[core,%d] illegal row index %d", __LINE__, ri));
- cc = core_pcpu[cpu];
- pm = cc->pc_corepmcs[ri].phw_pmc;
-
- KASSERT(pm,
- ("[core,%d] cpu%d ri%d no configured PMC to stop", __LINE__,
- cpu, ri));
-
PMCDBG2(MDP,STO,1, "iap-stop cpu=%d ri=%d", cpu, ri);
wrmsr(IAP_EVSEL0 + ri, 0);
@@ -970,23 +933,14 @@
}
static int
-iap_write_pmc(int cpu, int ri, pmc_value_t v)
+iap_write_pmc(int cpu, int ri, struct pmc *pm, pmc_value_t v)
{
- struct pmc *pm;
- struct core_cpu *cc;
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
("[core,%d] illegal cpu value %d", __LINE__, cpu));
KASSERT(ri >= 0 && ri < core_iap_npmc,
("[core,%d] illegal row index %d", __LINE__, ri));
- cc = core_pcpu[cpu];
- pm = cc->pc_corepmcs[ri].phw_pmc;
-
- KASSERT(pm,
- ("[core,%d] cpu%d ri%d no configured PMC to stop", __LINE__,
- cpu, ri));
-
if (PMC_IS_SAMPLING_MODE(PMC_TO_MODE(pm)))
v = iap_reload_count_to_perfctr_value(v);
diff --git a/sys/dev/hwpmc/hwpmc_mod.c b/sys/dev/hwpmc/hwpmc_mod.c
--- a/sys/dev/hwpmc/hwpmc_mod.c
+++ b/sys/dev/hwpmc/hwpmc_mod.c
@@ -1488,7 +1488,7 @@
PMCDBG3(CSW,SWI,1,"cpu=%d ri=%d new=%jd", cpu, ri, newvalue);
- pcd->pcd_write_pmc(cpu, adjri, newvalue);
+ pcd->pcd_write_pmc(cpu, adjri, pm, newvalue);
/* If a sampling mode PMC, reset stalled state. */
if (PMC_TO_MODE(pm) == PMC_MODE_TS)
@@ -1498,7 +1498,7 @@
pm->pm_pcpu_state[cpu].pps_cpustate = 1;
/* Start the PMC. */
- pcd->pcd_start_pmc(cpu, adjri);
+ pcd->pcd_start_pmc(cpu, adjri, pm);
}
/*
@@ -1601,7 +1601,7 @@
*/
pm->pm_pcpu_state[cpu].pps_cpustate = 0;
if (pm->pm_pcpu_state[cpu].pps_stalled == 0)
- pcd->pcd_stop_pmc(cpu, adjri);
+ pcd->pcd_stop_pmc(cpu, adjri, pm);
KASSERT(counter_u64_fetch(pm->pm_runcount) > 0,
("[pmc,%d] pm=%p runcount %ld", __LINE__, (void *) pm,
@@ -1625,7 +1625,7 @@
("[pmc,%d] pp refcnt = %d", __LINE__,
pp->pp_refcnt));
- pcd->pcd_read_pmc(cpu, adjri, &newvalue);
+ pcd->pcd_read_pmc(cpu, adjri, pm, &newvalue);
if (mode == PMC_MODE_TS) {
PMCDBG3(CSW,SWO,1,"cpu=%d ri=%d val=%jd (samp)",
@@ -2824,7 +2824,7 @@
PMCDBG2(PMC,REL,2, "stopping cpu=%d ri=%d", cpu, ri);
critical_enter();
- pcd->pcd_stop_pmc(cpu, adjri);
+ pcd->pcd_stop_pmc(cpu, adjri, pm);
critical_exit();
}
@@ -3246,7 +3246,7 @@
pm->pm_state = PMC_STATE_RUNNING;
critical_enter();
- if ((error = pcd->pcd_write_pmc(cpu, adjri,
+ if ((error = pcd->pcd_write_pmc(cpu, adjri, pm,
PMC_IS_SAMPLING_MODE(mode) ?
pm->pm_sc.pm_reloadcount :
pm->pm_sc.pm_initial)) == 0) {
@@ -3256,7 +3256,7 @@
/* Indicate that we desire this to run. Start it. */
pm->pm_pcpu_state[cpu].pps_cpustate = 1;
- error = pcd->pcd_start_pmc(cpu, adjri);
+ error = pcd->pcd_start_pmc(cpu, adjri, pm);
}
critical_exit();
@@ -3321,8 +3321,9 @@
pm->pm_pcpu_state[cpu].pps_cpustate = 0;
critical_enter();
- if ((error = pcd->pcd_stop_pmc(cpu, adjri)) == 0)
- error = pcd->pcd_read_pmc(cpu, adjri, &pm->pm_sc.pm_initial);
+ if ((error = pcd->pcd_stop_pmc(cpu, adjri, pm)) == 0)
+ error = pcd->pcd_read_pmc(cpu, adjri, pm,
+ &pm->pm_sc.pm_initial);
critical_exit();
pmc_restore_cpu_binding(&pb);
@@ -4400,7 +4401,7 @@
if ((pm->pm_flags & PMC_F_ATTACHED_TO_OWNER) &&
(pm->pm_state == PMC_STATE_RUNNING))
error = (*pcd->pcd_read_pmc)(cpu, adjri,
- &oldvalue);
+ pm, &oldvalue);
else
oldvalue = pm->pm_gv.pm_savedvalue;
}
@@ -4425,13 +4426,14 @@
critical_enter();
/* save old value */
- if (prw.pm_flags & PMC_F_OLDVALUE)
+ if (prw.pm_flags & PMC_F_OLDVALUE) {
if ((error = (*pcd->pcd_read_pmc)(cpu, adjri,
- &oldvalue)))
+ pm, &oldvalue)))
goto error;
+ }
/* write out new value */
if (prw.pm_flags & PMC_F_NEWVALUE)
- error = (*pcd->pcd_write_pmc)(cpu, adjri,
+ error = (*pcd->pcd_write_pmc)(cpu, adjri, pm,
prw.pm_value);
error:
critical_exit();
@@ -5028,7 +5030,7 @@
continue;
pm->pm_pcpu_state[cpu].pps_stalled = 0;
- (*pcd->pcd_start_pmc)(cpu, adjri);
+ (*pcd->pcd_start_pmc)(cpu, adjri, pm);
}
}
@@ -5162,11 +5164,11 @@
if (pm->pm_pcpu_state[cpu].pps_cpustate) {
pm->pm_pcpu_state[cpu].pps_cpustate = 0;
if (!pm->pm_pcpu_state[cpu].pps_stalled) {
- (void) pcd->pcd_stop_pmc(cpu, adjri);
+ (void) pcd->pcd_stop_pmc(cpu, adjri, pm);
if (PMC_TO_MODE(pm) == PMC_MODE_TC) {
pcd->pcd_read_pmc(cpu, adjri,
- &newvalue);
+ pm, &newvalue);
tmp = newvalue -
PMC_PCPU_SAVED(cpu,ri);
diff --git a/sys/dev/hwpmc/hwpmc_soft.c b/sys/dev/hwpmc/hwpmc_soft.c
--- a/sys/dev/hwpmc/hwpmc_soft.c
+++ b/sys/dev/hwpmc/hwpmc_soft.c
@@ -257,22 +257,14 @@
}
static int
-soft_read_pmc(int cpu, int ri, pmc_value_t *v)
+soft_read_pmc(int cpu, int ri, struct pmc *pm __unused, pmc_value_t *v)
{
- struct pmc *pm __diagused;
- const struct pmc_hw *phw;
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
("[soft,%d] illegal CPU value %d", __LINE__, cpu));
KASSERT(ri >= 0 && ri < SOFT_NPMCS,
("[soft,%d] illegal row-index %d", __LINE__, ri));
- phw = &soft_pcpu[cpu]->soft_hw[ri];
- pm = phw->phw_pmc;
-
- KASSERT(pm != NULL,
- ("[soft,%d] no owner for PHW [cpu%d,pmc%d]", __LINE__, cpu, ri));
-
PMCDBG1(MDP,REA,1,"soft-read id=%d", ri);
*v = soft_pcpu[cpu]->soft_values[ri];
@@ -281,20 +273,13 @@
}
static int
-soft_write_pmc(int cpu, int ri, pmc_value_t v)
+soft_write_pmc(int cpu, int ri, struct pmc *pm __unused, pmc_value_t v)
{
- struct pmc *pm __diagused;
-
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
("[soft,%d] illegal cpu value %d", __LINE__, cpu));
KASSERT(ri >= 0 && ri < SOFT_NPMCS,
("[soft,%d] illegal row-index %d", __LINE__, ri));
- pm = soft_pcpu[cpu]->soft_hw[ri].phw_pmc;
-
- KASSERT(pm,
- ("[soft,%d] cpu %d ri %d pmc not configured", __LINE__, cpu, ri));
-
PMCDBG3(MDP,WRI,1, "soft-write cpu=%d ri=%d v=%jx", cpu, ri, v);
soft_pcpu[cpu]->soft_values[ri] = v;
@@ -335,10 +320,8 @@
}
static int
-soft_start_pmc(int cpu, int ri)
+soft_start_pmc(int cpu, int ri, struct pmc *pm)
{
- struct pmc *pm;
- struct soft_cpu *pc;
struct pmc_soft *ps;
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
@@ -346,12 +329,6 @@
KASSERT(ri >= 0 && ri < SOFT_NPMCS,
("[soft,%d] illegal row-index %d", __LINE__, ri));
- pc = soft_pcpu[cpu];
- pm = pc->soft_hw[ri].phw_pmc;
-
- KASSERT(pm,
- ("[soft,%d] cpu %d ri %d pmc not configured", __LINE__, cpu, ri));
-
ps = pmc_soft_ev_acquire(pm->pm_event);
if (ps == NULL)
return (EINVAL);
@@ -362,10 +339,8 @@
}
static int
-soft_stop_pmc(int cpu, int ri)
+soft_stop_pmc(int cpu, int ri, struct pmc *pm)
{
- struct pmc *pm;
- struct soft_cpu *pc;
struct pmc_soft *ps;
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
@@ -373,12 +348,6 @@
KASSERT(ri >= 0 && ri < SOFT_NPMCS,
("[soft,%d] illegal row-index %d", __LINE__, ri));
- pc = soft_pcpu[cpu];
- pm = pc->soft_hw[ri].phw_pmc;
-
- KASSERT(pm,
- ("[soft,%d] cpu %d ri %d pmc not configured", __LINE__, cpu, ri));
-
ps = pmc_soft_ev_acquire(pm->pm_event);
/* event unregistered ? */
if (ps != NULL) {
@@ -420,7 +389,7 @@
user_mode = TRAPF_USERMODE(ks->pm_tf);
error = pmc_process_interrupt(PMC_SR, pm, ks->pm_tf);
if (error) {
- soft_stop_pmc(ks->pm_cpu, ri);
+ soft_stop_pmc(ks->pm_cpu, ri, pm);
continue;
}
diff --git a/sys/dev/hwpmc/hwpmc_tsc.c b/sys/dev/hwpmc/hwpmc_tsc.c
--- a/sys/dev/hwpmc/hwpmc_tsc.c
+++ b/sys/dev/hwpmc/hwpmc_tsc.c
@@ -220,22 +220,14 @@
}
static int
-tsc_read_pmc(int cpu, int ri, pmc_value_t *v)
+tsc_read_pmc(int cpu, int ri, struct pmc *pm, pmc_value_t *v)
{
- struct pmc *pm;
enum pmc_mode mode __diagused;
- const struct pmc_hw *phw;
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
("[tsc,%d] illegal CPU value %d", __LINE__, cpu));
KASSERT(ri == 0, ("[tsc,%d] illegal ri %d", __LINE__, ri));
- phw = &tsc_pcpu[cpu]->tc_hw;
- pm = phw->phw_pmc;
-
- KASSERT(pm != NULL,
- ("[tsc,%d] no owner for PHW [cpu%d,pmc%d]", __LINE__, cpu, ri));
-
mode = PMC_TO_MODE(pm);
KASSERT(mode == PMC_MODE_SC,
@@ -270,7 +262,7 @@
}
static int
-tsc_start_pmc(int cpu __diagused, int ri __diagused)
+tsc_start_pmc(int cpu __diagused, int ri __diagused, struct pmc *pm __unused)
{
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
@@ -281,7 +273,7 @@
}
static int
-tsc_stop_pmc(int cpu __diagused, int ri __diagused)
+tsc_stop_pmc(int cpu __diagused, int ri __diagused, struct pmc *pm __unused)
{
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
@@ -292,7 +284,8 @@
}
static int
-tsc_write_pmc(int cpu __diagused, int ri __diagused, pmc_value_t v __unused)
+tsc_write_pmc(int cpu __diagused, int ri __diagused, struct pmc *pm __unused,
+ pmc_value_t v __unused)
{
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
diff --git a/sys/dev/hwpmc/hwpmc_uncore.c b/sys/dev/hwpmc/hwpmc_uncore.c
--- a/sys/dev/hwpmc/hwpmc_uncore.c
+++ b/sys/dev/hwpmc/hwpmc_uncore.c
@@ -260,9 +260,8 @@
}
static int
-ucf_read_pmc(int cpu, int ri, pmc_value_t *v)
+ucf_read_pmc(int cpu, int ri, struct pmc *pm, pmc_value_t *v)
{
- struct pmc *pm;
pmc_value_t tmp;
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
@@ -270,12 +269,6 @@
KASSERT(ri >= 0 && ri < uncore_ucf_npmc,
("[uncore,%d] illegal row-index %d", __LINE__, ri));
- pm = uncore_pcpu[cpu]->pc_uncorepmcs[ri + uncore_ucf_ri].phw_pmc;
-
- KASSERT(pm,
- ("[uncore,%d] cpu %d ri %d(%d) pmc not configured", __LINE__, cpu,
- ri, ri + uncore_ucf_ri));
-
tmp = rdmsr(UCF_CTR0 + ri);
if (PMC_IS_SAMPLING_MODE(PMC_TO_MODE(pm)))
@@ -305,9 +298,8 @@
}
static int
-ucf_start_pmc(int cpu, int ri)
+ucf_start_pmc(int cpu, int ri, struct pmc *pm)
{
- struct pmc *pm;
struct uncore_cpu *ucfc;
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
@@ -318,8 +310,6 @@
PMCDBG2(MDP,STA,1,"ucf-start cpu=%d ri=%d", cpu, ri);
ucfc = uncore_pcpu[cpu];
- pm = ucfc->pc_uncorepmcs[ri + uncore_ucf_ri].phw_pmc;
-
ucfc->pc_ucfctrl |= pm->pm_md.pm_ucf.pm_ucf_ctrl;
wrmsr(UCF_CTRL, ucfc->pc_ucfctrl);
@@ -335,7 +325,7 @@
}
static int
-ucf_stop_pmc(int cpu, int ri)
+ucf_stop_pmc(int cpu, int ri, struct pmc *pm __unused)
{
uint32_t fc;
struct uncore_cpu *ucfc;
@@ -366,10 +356,9 @@
}
static int
-ucf_write_pmc(int cpu, int ri, pmc_value_t v)
+ucf_write_pmc(int cpu, int ri, struct pmc *pm, pmc_value_t v)
{
struct uncore_cpu *cc;
- struct pmc *pm;
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
("[uncore,%d] illegal cpu value %d", __LINE__, cpu));
@@ -377,10 +366,6 @@
("[uncore,%d] illegal row-index %d", __LINE__, ri));
cc = uncore_pcpu[cpu];
- pm = cc->pc_uncorepmcs[ri + uncore_ucf_ri].phw_pmc;
-
- KASSERT(pm,
- ("[uncore,%d] cpu %d ri %d pmc not configured", __LINE__, cpu, ri));
if (PMC_IS_SAMPLING_MODE(PMC_TO_MODE(pm)))
v = ucf_reload_count_to_perfctr_value(v);
@@ -581,9 +566,8 @@
}
static int
-ucp_read_pmc(int cpu, int ri, pmc_value_t *v)
+ucp_read_pmc(int cpu, int ri, struct pmc *pm, pmc_value_t *v)
{
- struct pmc *pm;
pmc_value_t tmp;
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
@@ -591,12 +575,6 @@
KASSERT(ri >= 0 && ri < uncore_ucp_npmc,
("[uncore,%d] illegal row-index %d", __LINE__, ri));
- pm = uncore_pcpu[cpu]->pc_uncorepmcs[ri].phw_pmc;
-
- KASSERT(pm,
- ("[uncore,%d] cpu %d ri %d pmc not configured", __LINE__, cpu,
- ri));
-
tmp = rdmsr(UCP_PMC0 + ri);
if (PMC_IS_SAMPLING_MODE(PMC_TO_MODE(pm)))
*v = ucp_perfctr_value_to_reload_count(tmp);
@@ -629,9 +607,8 @@
}
static int
-ucp_start_pmc(int cpu, int ri)
+ucp_start_pmc(int cpu, int ri, struct pmc *pm)
{
- struct pmc *pm;
uint64_t evsel;
struct uncore_cpu *cc;
@@ -641,11 +618,6 @@
("[uncore,%d] illegal row-index %d", __LINE__, ri));
cc = uncore_pcpu[cpu];
- pm = cc->pc_uncorepmcs[ri].phw_pmc;
-
- KASSERT(pm,
- ("[uncore,%d] starting cpu%d,ri%d with no pmc configured",
- __LINE__, cpu, ri));
PMCDBG2(MDP,STA,1, "ucp-start cpu=%d ri=%d", cpu, ri);
@@ -664,23 +636,14 @@
}
static int
-ucp_stop_pmc(int cpu, int ri)
+ucp_stop_pmc(int cpu, int ri, struct pmc *pm __unused)
{
- struct pmc *pm __diagused;
- struct uncore_cpu *cc;
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
("[uncore,%d] illegal cpu value %d", __LINE__, cpu));
KASSERT(ri >= 0 && ri < uncore_ucp_npmc,
("[uncore,%d] illegal row index %d", __LINE__, ri));
- cc = uncore_pcpu[cpu];
- pm = cc->pc_uncorepmcs[ri].phw_pmc;
-
- KASSERT(pm,
- ("[uncore,%d] cpu%d ri%d no configured PMC to stop", __LINE__,
- cpu, ri));
-
PMCDBG2(MDP,STO,1, "ucp-stop cpu=%d ri=%d", cpu, ri);
/* stop hw. */
@@ -692,23 +655,14 @@
}
static int
-ucp_write_pmc(int cpu, int ri, pmc_value_t v)
+ucp_write_pmc(int cpu, int ri, struct pmc *pm, pmc_value_t v)
{
- struct pmc *pm;
- struct uncore_cpu *cc;
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
("[uncore,%d] illegal cpu value %d", __LINE__, cpu));
KASSERT(ri >= 0 && ri < uncore_ucp_npmc,
("[uncore,%d] illegal row index %d", __LINE__, ri));
- cc = uncore_pcpu[cpu];
- pm = cc->pc_uncorepmcs[ri].phw_pmc;
-
- KASSERT(pm,
- ("[uncore,%d] cpu%d ri%d no configured PMC to stop", __LINE__,
- cpu, ri));
-
PMCDBG4(MDP,WRI,1, "ucp-write cpu=%d ri=%d msr=0x%x v=%jx", cpu, ri,
UCP_PMC0 + ri, v);
diff --git a/sys/sys/pmc.h b/sys/sys/pmc.h
--- a/sys/sys/pmc.h
+++ b/sys/sys/pmc.h
@@ -62,7 +62,7 @@
* The patch version is incremented for every bug fix.
*/
#define PMC_VERSION_MAJOR 0x09
-#define PMC_VERSION_MINOR 0x03
+#define PMC_VERSION_MINOR 0x04
#define PMC_VERSION_PATCH 0x0000
#define PMC_VERSION (PMC_VERSION_MAJOR << 24 | \
@@ -1004,8 +1004,10 @@
/* configuring/reading/writing the hardware PMCs */
int (*pcd_config_pmc)(int _cpu, int _ri, struct pmc *_pm);
int (*pcd_get_config)(int _cpu, int _ri, struct pmc **_ppm);
- int (*pcd_read_pmc)(int _cpu, int _ri, pmc_value_t *_value);
- int (*pcd_write_pmc)(int _cpu, int _ri, pmc_value_t _value);
+ int (*pcd_read_pmc)(int _cpu, int _ri, struct pmc *_pm,
+ pmc_value_t *_value);
+ int (*pcd_write_pmc)(int _cpu, int _ri, struct pmc *_pm,
+ pmc_value_t _value);
/* pmc allocation/release */
int (*pcd_allocate_pmc)(int _cpu, int _ri, struct pmc *_t,
@@ -1013,8 +1015,8 @@
int (*pcd_release_pmc)(int _cpu, int _ri, struct pmc *_pm);
/* starting and stopping PMCs */
- int (*pcd_start_pmc)(int _cpu, int _ri);
- int (*pcd_stop_pmc)(int _cpu, int _ri);
+ int (*pcd_start_pmc)(int _cpu, int _ri, struct pmc *_pm);
+ int (*pcd_stop_pmc)(int _cpu, int _ri, struct pmc *_pm);
/* description */
int (*pcd_describe)(int _cpu, int _ri, struct pmc_info *_pi,
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Jul 30, 5:25 AM (14 h, 22 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
35728841
Default Alt Text
D39915.id121334.diff (21 KB)
Attached To
Mode
D39915: hwpmc: pass pmc pointer to more class methods
Attached
Detach File
Event Timeline
Log In to Comment