Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F98525705
D39915.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
34 KB
Referenced Files
None
Subscribers
None
D39915.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.
@@ -404,10 +394,10 @@
error = pmc_process_interrupt(PMC_HR, pm, tf);
if (error)
- arm64_stop_pmc(cpu, ri);
+ arm64_stop_pmc(cpu, ri, pm);
/* Reload sampling count */
- arm64_write_pmc(cpu, ri, pm->pm_sc.pm_reloadcount);
+ arm64_write_pmc(cpu, ri, pm, pm->pm_sc.pm_reloadcount);
}
return (retval);
diff --git a/sys/dev/hwpmc/hwpmc_armv7.c b/sys/dev/hwpmc/hwpmc_armv7.c
--- a/sys/dev/hwpmc/hwpmc_armv7.c
+++ b/sys/dev/hwpmc/hwpmc_armv7.c
@@ -160,10 +160,9 @@
static int
-armv7_read_pmc(int cpu, int ri, pmc_value_t *v)
+armv7_read_pmc(int cpu, int ri, struct pmc *pm, pmc_value_t *v)
{
pmc_value_t tmp;
- struct pmc *pm;
register_t s;
u_int reg;
@@ -172,8 +171,6 @@
KASSERT(ri >= 0 && ri < armv7_npmcs,
("[armv7,%d] illegal row index %d", __LINE__, ri));
- pm = armv7_pcpu[cpu]->pc_armv7pmcs[ri].phw_pmc;
-
s = intr_disable();
tmp = armv7_pmcn_read(ri, pm->pm_md.pm_armv7.pm_armv7_evsel);
@@ -212,17 +209,14 @@
}
static int
-armv7_write_pmc(int cpu, int ri, pmc_value_t v)
+armv7_write_pmc(int cpu, int ri, struct pmc *pm, pmc_value_t v)
{
- struct pmc *pm;
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
("[armv7,%d] illegal CPU value %d", __LINE__, cpu));
KASSERT(ri >= 0 && ri < armv7_npmcs,
("[armv7,%d] illegal row-index %d", __LINE__, ri));
- pm = armv7_pcpu[cpu]->pc_armv7pmcs[ri].phw_pmc;
-
if (PMC_IS_SAMPLING_MODE(PMC_TO_MODE(pm)))
v = ARMV7_RELOAD_COUNT_TO_PERFCTR_VALUE(v);
@@ -261,14 +255,10 @@
}
static int
-armv7_start_pmc(int cpu, int ri)
+armv7_start_pmc(int cpu, int ri, struct pmc *pm)
{
- struct pmc_hw *phw;
uint32_t config;
- struct pmc *pm;
- phw = &armv7_pcpu[cpu]->pc_armv7pmcs[ri];
- pm = phw->phw_pmc;
config = pm->pm_md.pm_armv7.pm_armv7_evsel;
/*
@@ -290,14 +280,10 @@
}
static int
-armv7_stop_pmc(int cpu, int ri)
+armv7_stop_pmc(int cpu, int ri, struct pmc *pm)
{
- struct pmc_hw *phw;
- struct pmc *pm;
uint32_t config;
- phw = &armv7_pcpu[cpu]->pc_armv7pmcs[ri];
- pm = phw->phw_pmc;
config = pm->pm_md.pm_armv7.pm_armv7_evsel;
if (config == PMC_EV_CPU_CYCLES)
ri = 31;
@@ -372,10 +358,10 @@
error = pmc_process_interrupt(PMC_HR, pm, tf);
if (error)
- armv7_stop_pmc(cpu, ri);
+ armv7_stop_pmc(cpu, ri, pm);
/* Reload sampling count */
- armv7_write_pmc(cpu, ri, pm->pm_sc.pm_reloadcount);
+ armv7_write_pmc(cpu, ri, pm, pm->pm_sc.pm_reloadcount);
}
return (retval);
diff --git a/sys/dev/hwpmc/hwpmc_cmn600.c b/sys/dev/hwpmc/hwpmc_cmn600.c
--- a/sys/dev/hwpmc/hwpmc_cmn600.c
+++ b/sys/dev/hwpmc/hwpmc_cmn600.c
@@ -141,11 +141,10 @@
* read a pmc register
*/
static int
-cmn600_read_pmc(int cpu, int ri, pmc_value_t *v)
+cmn600_read_pmc(int cpu, int ri, struct pmc *pm, pmc_value_t *v)
{
int counter, local_counter, nodeid;
struct cmn600_descr *desc;
- struct pmc *pm;
void *arg;
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
@@ -155,15 +154,10 @@
counter = ri % CMN600_COUNTERS_N;
desc = cmn600desc(ri);
- pm = desc->pd_phw->phw_pmc;
arg = desc->pd_rw_arg;
nodeid = pm->pm_md.pm_cmn600.pm_cmn600_nodeid;
local_counter = pm->pm_md.pm_cmn600.pm_cmn600_local_counter;
- KASSERT(pm != NULL,
- ("[cmn600,%d] No owner for HWPMC [cpu%d,pmc%d]", __LINE__,
- cpu, ri));
-
*v = cmn600_pmu_readcntr(arg, nodeid, local_counter, counter, 4);
PMCDBG3(MDP, REA, 2, "%s id=%d -> %jd", __func__, ri, *v);
@@ -174,11 +168,10 @@
* Write a pmc register.
*/
static int
-cmn600_write_pmc(int cpu, int ri, pmc_value_t v)
+cmn600_write_pmc(int cpu, int ri, struct pmc *pm, pmc_value_t v)
{
int counter, local_counter, nodeid;
struct cmn600_descr *desc;
- struct pmc *pm;
void *arg;
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
@@ -188,7 +181,6 @@
counter = ri % CMN600_COUNTERS_N;
desc = cmn600desc(ri);
- pm = desc->pd_phw->phw_pmc;
arg = desc->pd_rw_arg;
nodeid = pm->pm_md.pm_cmn600.pm_cmn600_nodeid;
local_counter = pm->pm_md.pm_cmn600.pm_cmn600_local_counter;
@@ -424,13 +416,11 @@
*/
static int
-cmn600_start_pmc(int cpu, int ri)
+cmn600_start_pmc(int cpu, int ri, struct pmc *pm)
{
int counter, local_counter, node_type, shift;
uint64_t config, occupancy, source, xp_pmucfg;
struct cmn600_descr *desc;
- struct pmc_hw *phw;
- struct pmc *pm;
uint8_t event, port, sub;
uint16_t nodeid;
void *arg;
@@ -442,14 +432,8 @@
counter = ri % CMN600_COUNTERS_N;
desc = cmn600desc(ri);
- phw = desc->pd_phw;
- pm = phw->phw_pmc;
arg = desc->pd_rw_arg;
- KASSERT(pm != NULL,
- ("[cmn600,%d] starting cpu%d,pmc%d with null pmc record", __LINE__,
- cpu, ri));
-
PMCDBG3(MDP, STA, 1, "%s cpu=%d ri=%d", __func__, cpu, ri);
config = pm->pm_md.pm_cmn600.pm_cmn600_config;
@@ -541,11 +525,9 @@
*/
static int
-cmn600_stop_pmc(int cpu, int ri)
+cmn600_stop_pmc(int cpu, int ri, struct pmc *pm)
{
struct cmn600_descr *desc;
- struct pmc_hw *phw;
- struct pmc *pm;
int local_counter;
uint64_t val;
@@ -555,12 +537,6 @@
ri));
desc = cmn600desc(ri);
- phw = desc->pd_phw;
- pm = phw->phw_pmc;
-
- KASSERT(pm != NULL,
- ("[cmn600,%d] cpu%d,pmc%d no PMC to stop", __LINE__,
- cpu, ri));
PMCDBG2(MDP, STO, 1, "%s ri=%d", __func__, ri);
@@ -696,10 +672,10 @@
error = pmc_process_interrupt(PMC_HR, pm, tf);
if (error)
- cmn600_stop_pmc(cpu, ri);
+ cmn600_stop_pmc(cpu, ri, pm);
/* Reload sampling count */
- cmn600_write_pmc(cpu, ri, pm->pm_sc.pm_reloadcount);
+ cmn600_write_pmc(cpu, ri, pm, pm->pm_sc.pm_reloadcount);
return (0);
}
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_dmc620.c b/sys/dev/hwpmc/hwpmc_dmc620.c
--- a/sys/dev/hwpmc/hwpmc_dmc620.c
+++ b/sys/dev/hwpmc/hwpmc_dmc620.c
@@ -192,10 +192,10 @@
* read a pmc register
*/
-CLASSDEP_FN3(dmc620_read_pmc, int, cpu, int, ri, pmc_value_t *, v)
+CLASSDEP_FN4(dmc620_read_pmc, int, cpu, int, ri, struct pmc *, pm,
+ pmc_value_t *, v)
{
struct dmc620_descr *desc;
- struct pmc *pm;
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
("[dmc620,%d] illegal CPU value %d", __LINE__, cpu));
@@ -203,11 +203,6 @@
ri));
desc = dmc620desc(class, cpu, ri);
- pm = desc->pd_phw->phw_pmc;
-
- KASSERT(pm != NULL,
- ("[dmc620,%d] No owner for HWPMC [cpu%d,pmc%d]", __LINE__,
- cpu, ri));
PMCDBG3(MDP,REA,1,"%s id=%d class=%d", __func__, ri, class);
@@ -229,10 +224,10 @@
* Write a pmc register.
*/
-CLASSDEP_FN3(dmc620_write_pmc, int, cpu, int, ri, pmc_value_t, v)
+CLASSDEP_FN4(dmc620_write_pmc, int, cpu, int, ri, struct pmc *, pm,
+ pmc_value_t, v)
{
struct dmc620_descr *desc;
- struct pmc *pm __diagused;
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
("[dmc620,%d] illegal CPU value %d", __LINE__, cpu));
@@ -240,11 +235,6 @@
ri));
desc = dmc620desc(class, cpu, ri);
- pm = desc->pd_phw->phw_pmc;
-
- KASSERT(pm != NULL,
- ("[dmc620,%d] PMC not owned (cpu%d,pmc%d)", __LINE__,
- cpu, ri));
PMCDBG4(MDP, WRI, 1, "%s cpu=%d ri=%d v=%jx", __func__, cpu, ri, v);
@@ -374,12 +364,10 @@
* start a PMC.
*/
-CLASSDEP_FN2(dmc620_start_pmc, int, cpu, int, ri)
+CLASSDEP_FN3(dmc620_start_pmc, int, cpu, int, ri, struct pmc *, pm)
{
struct dmc620_descr *desc;
- struct pmc_hw *phw;
uint64_t control;
- struct pmc *pm;
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
("[dmc620,%d] illegal CPU value %d", __LINE__, cpu));
@@ -387,12 +375,6 @@
ri));
desc = dmc620desc(class, cpu, ri);
- phw = desc->pd_phw;
- pm = phw->phw_pmc;
-
- KASSERT(pm != NULL,
- ("[dmc620,%d] starting cpu%d,pmc%d with null pmc record", __LINE__,
- cpu, ri));
PMCDBG3(MDP, STA, 1, "%s cpu=%d ri=%d", __func__, cpu, ri);
@@ -418,11 +400,9 @@
* Stop a PMC.
*/
-CLASSDEP_FN2(dmc620_stop_pmc, int, cpu, int, ri)
+CLASSDEP_FN3(dmc620_stop_pmc, int, cpu, int, ri, struct pmc *, pm)
{
struct dmc620_descr *desc;
- struct pmc_hw *phw;
- struct pmc *pm;
uint64_t control;
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
@@ -431,12 +411,6 @@
ri));
desc = dmc620desc(class, cpu, ri);
- phw = desc->pd_phw;
- pm = phw->phw_pmc;
-
- KASSERT(pm != NULL,
- ("[dmc620,%d] cpu%d,pmc%d no PMC to stop", __LINE__,
- cpu, ri));
PMCDBG2(MDP, STO, 1, "%s ri=%d", __func__, ri);
@@ -564,10 +538,10 @@
error = pmc_process_interrupt(PMC_HR, pm, tf);
if (error)
- dmc620_stop_pmc(class, cpu, ri);
+ dmc620_stop_pmc(class, cpu, ri, pm);
/* Reload sampling count */
- dmc620_write_pmc(class, cpu, ri, pm->pm_sc.pm_reloadcount);
+ dmc620_write_pmc(class, cpu, ri, pm, pm->pm_sc.pm_reloadcount);
return (0);
}
diff --git a/sys/dev/hwpmc/hwpmc_e500.c b/sys/dev/hwpmc/hwpmc_e500.c
--- a/sys/dev/hwpmc/hwpmc_e500.c
+++ b/sys/dev/hwpmc/hwpmc_e500.c
@@ -341,7 +341,7 @@
for (i = 0; i < E500_MAX_PMCS; i++)
/* Initialize the PMC to stopped */
- powerpc_stop_pmc(cpu, i);
+ e500_set_pmc(cpu, i, PMCN_NONE);
/* Unfreeze global register. */
mtpmr(PMR_PMGC0, PMGC_PMIE | PMGC_FCECE);
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_powerpc.h b/sys/dev/hwpmc/hwpmc_powerpc.h
--- a/sys/dev/hwpmc/hwpmc_powerpc.h
+++ b/sys/dev/hwpmc/hwpmc_powerpc.h
@@ -101,13 +101,13 @@
int powerpc_allocate_pmc(int cpu, int ri, struct pmc *pm,
const struct pmc_op_pmcallocate *a);
int powerpc_release_pmc(int cpu, int ri, struct pmc *pmc);
-int powerpc_start_pmc(int cpu, int ri);
-int powerpc_stop_pmc(int cpu, int ri);
+int powerpc_start_pmc(int cpu, int ri, struct pmc *pm);
+int powerpc_stop_pmc(int cpu, int ri, struct pmc *pm);
int powerpc_config_pmc(int cpu, int ri, struct pmc *pm);
pmc_value_t powerpc_pmcn_read_default(unsigned int pmc);
void powerpc_pmcn_write_default(unsigned int pmc, uint32_t val);
-int powerpc_read_pmc(int cpu, int ri, pmc_value_t *v);
-int powerpc_write_pmc(int cpu, int ri, pmc_value_t v);
+int powerpc_read_pmc(int cpu, int ri, struct pmc *pm, pmc_value_t *v);
+int powerpc_write_pmc(int cpu, int ri, struct pmc *pm, pmc_value_t v);
int powerpc_pmc_intr(struct trapframe *tf);
#endif /* _KERNEL */
diff --git a/sys/dev/hwpmc/hwpmc_powerpc.c b/sys/dev/hwpmc/hwpmc_powerpc.c
--- a/sys/dev/hwpmc/hwpmc_powerpc.c
+++ b/sys/dev/hwpmc/hwpmc_powerpc.c
@@ -248,19 +248,17 @@
}
int
-powerpc_start_pmc(int cpu, int ri)
+powerpc_start_pmc(int cpu, int ri, struct pmc *pm)
{
- struct pmc *pm;
PMCDBG2(MDP,STA,1,"powerpc-start cpu=%d ri=%d", cpu, ri);
- pm = powerpc_pcpu[cpu]->pc_ppcpmcs[ri].phw_pmc;
powerpc_set_pmc(cpu, ri, pm->pm_md.pm_powerpc.pm_powerpc_evsel);
return (0);
}
int
-powerpc_stop_pmc(int cpu, int ri)
+powerpc_stop_pmc(int cpu, int ri, struct pmc *pm __unused)
{
PMCDBG2(MDP,STO,1, "powerpc-stop cpu=%d ri=%d", cpu, ri);
powerpc_set_pmc(cpu, ri, PMCN_NONE);
@@ -363,9 +361,8 @@
}
int
-powerpc_read_pmc(int cpu, int ri, pmc_value_t *v)
+powerpc_read_pmc(int cpu, int ri, struct pmc *pm, pmc_value_t *v)
{
- struct pmc *pm;
pmc_value_t p, r, tmp;
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
@@ -373,11 +370,6 @@
KASSERT(ri >= 0 && ri < ppc_max_pmcs,
("[powerpc,%d] illegal row index %d", __LINE__, ri));
- pm = powerpc_pcpu[cpu]->pc_ppcpmcs[ri].phw_pmc;
- KASSERT(pm,
- ("[core,%d] cpu %d ri %d pmc not configured", __LINE__, cpu,
- ri));
-
/*
* After an interrupt occurs because of a PMC overflow, the PMC value
* is not always MAX_PMC_VALUE + 1, but may be a little above it.
@@ -416,9 +408,8 @@
}
int
-powerpc_write_pmc(int cpu, int ri, pmc_value_t v)
+powerpc_write_pmc(int cpu, int ri, struct pmc *pm, pmc_value_t v)
{
- struct pmc *pm;
pmc_value_t vlo;
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
@@ -426,8 +417,6 @@
KASSERT(ri >= 0 && ri < ppc_max_pmcs,
("[powerpc,%d] illegal row-index %d", __LINE__, ri));
- pm = powerpc_pcpu[cpu]->pc_ppcpmcs[ri].phw_pmc;
-
if (PMC_IS_COUNTING_MODE(PMC_TO_MODE(pm))) {
PPC_OVERFLOWCNT(pm) = v / (POWERPC_MAX_PMC_VALUE + 1);
vlo = v % (POWERPC_MAX_PMC_VALUE + 1);
@@ -482,7 +471,7 @@
if ((pm = pc->pc_ppcpmcs[i].phw_pmc) != NULL &&
PMC_IS_SAMPLING_MODE(PMC_TO_MODE(pm))) {
if (pm->pm_state != PMC_STATE_RUNNING) {
- powerpc_write_pmc(cpu, i,
+ powerpc_write_pmc(cpu, i, pm,
pm->pm_sc.pm_reloadcount);
continue;
}
@@ -504,11 +493,11 @@
PMCDBG3(MDP,INT,3,
"cpu=%d ri=%d: error %d processing interrupt",
cpu, i, error);
- powerpc_stop_pmc(cpu, i);
+ powerpc_stop_pmc(cpu, i, pm);
}
/* Reload sampling count */
- powerpc_write_pmc(cpu, i, pm->pm_sc.pm_reloadcount);
+ powerpc_write_pmc(cpu, i, pm, pm->pm_sc.pm_reloadcount);
}
if (retval)
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
Fri, Oct 4, 5:25 PM (21 h, 56 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
13567479
Default Alt Text
D39915.diff (34 KB)
Attached To
Mode
D39915: hwpmc: pass pmc pointer to more class methods
Attached
Detach File
Event Timeline
Log In to Comment