[PATCH 3/3] perf/imx_ddr: don't enable counter0 if none of 4 counters are used
Frank Li
frank.li at nxp.com
Wed Jul 5 07:50:37 PDT 2023
>
> diff --git a/drivers/perf/fsl_imx8_ddr_perf.c
> b/drivers/perf/fsl_imx8_ddr_perf.c
> index 4e6cbfc48429..f7c832611713 100644
> --- a/drivers/perf/fsl_imx8_ddr_perf.c
> +++ b/drivers/perf/fsl_imx8_ddr_perf.c
> @@ -591,7 +591,9 @@ static void ddr_perf_pmu_enable(struct pmu *pmu)
> struct ddr_pmu *ddr_pmu = to_ddr_pmu(pmu);
>
> /* enable cycle counter if cycle is not active event list */
> - if (ddr_pmu->events[EVENT_CYCLES_COUNTER] == NULL)
> + if (ddr_pmu->events[EVENT_CYCLES_COUNTER] == NULL &&
EVENT_CYCLES_COUNTER is 0, if only enable cycles counter, below logic
Will failure. Then counter will not work.
> + (ddr_pmu->events[0] || ddr_pmu->events[1] ||
> + ddr_pmu->events[2] || ddr_pmu->events[3]))
I suggest maintain a enabled_event counter,
If(ddr_pmu->active_num==0)
ddr_perf_counter_enable(..., true);
ddr_pmu->active_num++;
At disable function()
{
ddr_pmu->active_num --;
if( ddr_pmu->active_num == 0)
ddr_perf_counter_enable(.., false);
}
> ddr_perf_counter_enable(ddr_pmu,
> EVENT_CYCLES_ID,
> EVENT_CYCLES_COUNTER,
> @@ -602,7 +604,9 @@ static void ddr_perf_pmu_disable(struct pmu *pmu)
> {
> struct ddr_pmu *ddr_pmu = to_ddr_pmu(pmu);
>
> - if (ddr_pmu->events[EVENT_CYCLES_COUNTER] == NULL)
> + if (ddr_pmu->events[EVENT_CYCLES_COUNTER] == NULL &&
> + (ddr_pmu->events[0] || ddr_pmu->events[1] ||
> + ddr_pmu->events[2] || ddr_pmu->events[3]))
> ddr_perf_counter_enable(ddr_pmu,
> EVENT_CYCLES_ID,
> EVENT_CYCLES_COUNTER,
> --
> 2.34.1
More information about the linux-arm-kernel
mailing list