diff options
author | David S. Miller <davem@davemloft.net> | 2012-08-17 02:33:44 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-08-18 23:26:19 -0700 |
commit | 59660495e80e7eabc726c301ddc46afd2ce1bcac (patch) | |
tree | 394bfc9a65e1e236a925d34300e9015cf10e6489 /arch/sparc/kernel/perf_event.c | |
parent | b38e99f5bdf62f37d7552311fef1bff00bec6308 (diff) | |
download | lwn-59660495e80e7eabc726c301ddc46afd2ce1bcac.tar.gz lwn-59660495e80e7eabc726c301ddc46afd2ce1bcac.zip |
sparc64: Allow max hw perf events to be variable.
Now specified in sparc_pmu descriptor.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc/kernel/perf_event.c')
-rw-r--r-- | arch/sparc/kernel/perf_event.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/arch/sparc/kernel/perf_event.c b/arch/sparc/kernel/perf_event.c index 11b424bb0b2b..f7b9ae39c264 100644 --- a/arch/sparc/kernel/perf_event.c +++ b/arch/sparc/kernel/perf_event.c @@ -151,6 +151,7 @@ struct sparc_pmu { unsigned int flags; #define SPARC_PMU_ALL_EXCLUDES_SAME 0x00000001 #define SPARC_PMU_HAS_CONFLICTS 0x00000002 + int max_hw_events; }; static const struct perf_event_map ultra3_perfmon_event_map[] = { @@ -277,6 +278,7 @@ static const struct sparc_pmu ultra3_pmu = { .lower_nop = 0x14, .flags = (SPARC_PMU_ALL_EXCLUDES_SAME | SPARC_PMU_HAS_CONFLICTS), + .max_hw_events = 2, }; /* Niagara1 is very limited. The upper PIC is hard-locked to count @@ -408,6 +410,7 @@ static const struct sparc_pmu niagara1_pmu = { .lower_nop = 0x0, .flags = (SPARC_PMU_ALL_EXCLUDES_SAME | SPARC_PMU_HAS_CONFLICTS), + .max_hw_events = 2, }; static const struct perf_event_map niagara2_perfmon_event_map[] = { @@ -538,6 +541,7 @@ static const struct sparc_pmu niagara2_pmu = { .lower_nop = 0x220, .flags = (SPARC_PMU_ALL_EXCLUDES_SAME | SPARC_PMU_HAS_CONFLICTS), + .max_hw_events = 2, }; static const struct sparc_pmu *sparc_pmu __read_mostly; @@ -950,7 +954,7 @@ static int sparc_check_constraints(struct perf_event **evts, if (!n_ev) return 0; - if (n_ev > MAX_HWEVENTS) + if (n_ev > sparc_pmu->max_hw_events) return -1; if (!(sparc_pmu->flags & SPARC_PMU_HAS_CONFLICTS)) { @@ -1078,7 +1082,7 @@ static int sparc_pmu_add(struct perf_event *event, int ef_flags) perf_pmu_disable(event->pmu); n0 = cpuc->n_events; - if (n0 >= MAX_HWEVENTS) + if (n0 >= sparc_pmu->max_hw_events) goto out; cpuc->event[n0] = event; @@ -1174,7 +1178,7 @@ static int sparc_pmu_event_init(struct perf_event *event) n = 0; if (event->group_leader != event) { n = collect_events(event->group_leader, - MAX_HWEVENTS - 1, + sparc_pmu->max_hw_events - 1, evts, events, current_idx_dmy); if (n < 0) return -EINVAL; |