[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4C8B3AD3.5050309@orcon.net.nz>
Date: Sat, 11 Sep 2010 20:16:19 +1200
From: Michael Cree <mcree@...on.net.nz>
To: mingo@...hat.com, dengcheng.zhu@...il.com, a.p.zijlstra@...llo.nl,
yanmin_zhang@...ux.intel.com, gorcunov@...il.com,
fweisbec@...il.com, robert.richter@....com, ming.m.lin@...el.com,
tglx@...utronix.de, hpa@...or.com, paulus@...ba.org,
linux-kernel@...r.kernel.org, eranian@...glemail.com,
will.deacon@....com, lethal@...ux-sh.org, davem@...emloft.net,
mingo@...e.hu
CC: linux-alpha@...r.kernel.org
Subject: Re: [tip:perf/core] perf: Rework the PMU methods
On 10/09/10 07:50, tip-bot for Peter Zijlstra wrote:
> Commit-ID: a4eaf7f14675cb512d69f0c928055e73d0c6d252
> Gitweb: http://git.kernel.org/tip/a4eaf7f14675cb512d69f0c928055e73d0c6d252
> Author: Peter Zijlstra<a.p.zijlstra@...llo.nl>
> AuthorDate: Wed, 16 Jun 2010 14:37:10 +0200
> Committer: Ingo Molnar<mingo@...e.hu>
> CommitDate: Thu, 9 Sep 2010 20:46:30 +0200
>
> perf: Rework the PMU methods
>
> Replace pmu::{enable,disable,start,stop,unthrottle} with
> pmu::{add,del,start,stop}, all of which take a flags argument.
Regarding the new function alpha_pmu_stop() in
arch/alpha/kernel/perf_event.c:
> -static void alpha_pmu_unthrottle(struct perf_event *event)
> +static void alpha_pmu_stop(struct perf_event *event, int flags)
> {
> struct hw_perf_event *hwc =&event->hw;
> struct cpu_hw_events *cpuc =&__get_cpu_var(cpu_hw_events);
>
> + if (!(hwc->state& PERF_HES_STOPPED)) {
> + cpuc->idx_mask&= !(1UL<<hwc->idx);
^
Presumably ones complement (rather than logical not) is meant.
> + hwc->state |= PERF_HES_STOPPED;
> + }
> +
> + if ((flags& PERF_EF_UPDATE)&& !(hwc->state& PERF_HES_UPTODATE)) {
> + alpha_perf_event_update(event, hwc, hwc->idx, 0);
> + hwc->state |= PERF_HES_UPTODATE;
> + }
> +
> + if (cpuc->enabled)
> + wrperfmon(PERFMON_CMD_ENABLE, (1UL<<hwc->idx));
By the name of the function (alpha_pmu_stop) I assume that the intent is
to stop the specific PMC here. The above fails to do that. When
wrperfmon() is used with PERFMON_CMD_ENABLE it enables the PMCs with set
bits in the second argument. It does not stop the others. To do that
wrperfmon() must be called with PERFMON_CMD_DISABLE and the
corresponding PMC bits set to disable the PMC.
Cheers
Michael.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists