From: Robert Richter <robert.richter@amd.com>
To: Peter Zijlstra <a.p.zijlstra@chello.nl>,
Stephane Eranian <eranian@googlemail.com>
Cc: Paul Mackerras <paulus@samba.org>, Ingo Molnar <mingo@elte.hu>,
LKML <linux-kernel@vger.kernel.org>,
Robert Richter <robert.richter@amd.com>
Subject: [PATCH 12/12] perf/core, x86: make event constraint handler generic
Date: Fri, 22 Jan 2010 15:22:07 +0100 [thread overview]
Message-ID: <1264170127-17402-13-git-send-email-robert.richter@amd.com> (raw)
In-Reply-To: <1264170127-17402-1-git-send-email-robert.richter@amd.com>
This patch makes the handler for event constraints that was
implemented for Intel pmus general for all models. Now, an event
constraint table can be implemented and used also for AMD models.
Signed-off-by: Robert Richter <robert.richter@amd.com>
---
arch/x86/kernel/cpu/perf_event.c | 43 +++++++++++++++-----------------------
1 files changed, 17 insertions(+), 26 deletions(-)
diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c
index b893ee7..ac2d3a7 100644
--- a/arch/x86/kernel/cpu/perf_event.c
+++ b/arch/x86/kernel/cpu/perf_event.c
@@ -1387,47 +1387,38 @@ static int fixed_mode_idx(struct hw_perf_event *hwc)
}
/*
- * generic counter allocator: get next free counter
+ * generic counter allocator
*/
static int
gen_get_event_idx(struct cpu_hw_events *cpuc, struct hw_perf_event *hwc)
{
- int idx;
-
-again:
- idx = find_first_zero_bit(cpuc->used_mask, x86_pmu.num_counters);
- if (idx == x86_pmu.num_counters)
- return -1;
- if (test_and_set_bit(idx, cpuc->used_mask))
- goto again;
- return idx;
-}
-
-/*
- * intel-specific counter allocator: check event constraints
- */
-static inline int
-__intel_get_event_idx(struct cpu_hw_events *cpuc, struct hw_perf_event *hwc)
-{
const struct event_constraint *event_constraint;
- int i, code;
+ int idx, code;
if (!x86_pmu.event_constraints)
- goto skip;
+ goto get_next_free;
code = hwc->config & ARCH_PERFMON_EVENTSEL_EVENT;
+ /* check event constraints */
for_each_event_constraint(event_constraint, x86_pmu.event_constraints) {
if (code == event_constraint->code) {
- for_each_bit(i, event_constraint->idxmsk, X86_PMC_IDX_MAX) {
- if (!test_and_set_bit(i, cpuc->used_mask))
- return i;
+ for_each_bit(idx, event_constraint->idxmsk, X86_PMC_IDX_MAX) {
+ if (!test_and_set_bit(idx, cpuc->used_mask))
+ return idx;
}
return -1;
}
}
-skip:
- return gen_get_event_idx(cpuc, hwc);
+
+get_next_free:
+ /* get next free counter */
+ idx = find_first_zero_bit(cpuc->used_mask, x86_pmu.num_counters);
+ if (idx == x86_pmu.num_counters)
+ return -1;
+ if (test_and_set_bit(idx, cpuc->used_mask))
+ goto get_next_free;
+ return idx;
}
static int
@@ -1465,7 +1456,7 @@ intel_get_event_idx(struct cpu_hw_events *cpuc, struct hw_perf_event *hwc)
/* Try to get the previous generic event again */
if (idx == -1 || test_and_set_bit(idx, cpuc->used_mask)) {
try_generic:
- idx = __intel_get_event_idx(cpuc, hwc);
+ idx = gen_get_event_idx(cpuc, hwc);
if (idx == -1)
return -EAGAIN;
--
1.6.6
prev parent reply other threads:[~2010-01-22 14:55 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-01-22 14:21 [PATCH 01/12] perf/core: x86 and AMD pmu updates Robert Richter
2010-01-22 14:21 ` [PATCH 01/12] perf/core: correct files in MAINTAINERS entry Robert Richter
2010-01-22 14:21 ` [PATCH 02/12] perf/core, x86: undo some some *_counter* -> *_event* renames Robert Richter
2010-01-22 14:21 ` [PATCH 03/12] perf/core, x86: remove duplicate perf_event_mask variable Robert Richter
2010-01-22 14:21 ` [PATCH 04/12] perf/core, x86: remove cpu_hw_events.interrupts Robert Richter
2010-01-22 14:22 ` [PATCH 05/12] perf/core, x86: reduce number of CONFIG_X86_LOCAL_APIC macros Robert Richter
2010-01-22 14:22 ` [PATCH 06/12] perf/core, x86: removing p6_pmu_raw_event() Robert Richter
2010-01-22 14:22 ` [PATCH 07/12] perf/core, x86: rename macro in ARCH_PERFMON_EVENTSEL_ENABLE Robert Richter
2010-01-22 14:22 ` [PATCH 08/12] perf/core, x86: implement ARCH_PERFMON_EVENTSEL bit masks Robert Richter
2010-01-22 14:22 ` [PATCH 09/12] perf/core, x86: use test_and_set_bit() to when grabbing a counter Robert Richter
2010-01-22 14:22 ` [PATCH 10/12] perf/core, x86: removing fixed counter handling for AMD pmu Robert Richter
2010-01-22 14:22 ` [PATCH 11/12] perf/core, x86: make event_constraints a member of struct x86_pmu Robert Richter
2010-01-22 14:22 ` Robert Richter [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1264170127-17402-13-git-send-email-robert.richter@amd.com \
--to=robert.richter@amd.com \
--cc=a.p.zijlstra@chello.nl \
--cc=eranian@googlemail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=paulus@samba.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox