Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 327332
b: refs/heads/master
c: b38e99f
h: refs/heads/master
v: v3
  • Loading branch information
David S. Miller committed Aug 19, 2012
1 parent f061c2a commit 69b9875
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 6faaeb8ea30e55c9fd7cf65d05f3ce44973d1d12
refs/heads/master: b38e99f5bdf62f37d7552311fef1bff00bec6308
20 changes: 20 additions & 0 deletions trunk/arch/sparc/kernel/perf_event.c
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,9 @@ struct sparc_pmu {
int irq_bit;
int upper_nop;
int lower_nop;
unsigned int flags;
#define SPARC_PMU_ALL_EXCLUDES_SAME 0x00000001
#define SPARC_PMU_HAS_CONFLICTS 0x00000002
};

static const struct perf_event_map ultra3_perfmon_event_map[] = {
Expand Down Expand Up @@ -272,6 +275,8 @@ static const struct sparc_pmu ultra3_pmu = {
.event_mask = 0x3f,
.upper_nop = 0x1c,
.lower_nop = 0x14,
.flags = (SPARC_PMU_ALL_EXCLUDES_SAME |
SPARC_PMU_HAS_CONFLICTS),
};

/* Niagara1 is very limited. The upper PIC is hard-locked to count
Expand Down Expand Up @@ -401,6 +406,8 @@ static const struct sparc_pmu niagara1_pmu = {
.event_mask = 0x7,
.upper_nop = 0x0,
.lower_nop = 0x0,
.flags = (SPARC_PMU_ALL_EXCLUDES_SAME |
SPARC_PMU_HAS_CONFLICTS),
};

static const struct perf_event_map niagara2_perfmon_event_map[] = {
Expand Down Expand Up @@ -529,6 +536,8 @@ static const struct sparc_pmu niagara2_pmu = {
.irq_bit = 0x30,
.upper_nop = 0x220,
.lower_nop = 0x220,
.flags = (SPARC_PMU_ALL_EXCLUDES_SAME |
SPARC_PMU_HAS_CONFLICTS),
};

static const struct sparc_pmu *sparc_pmu __read_mostly;
Expand Down Expand Up @@ -944,6 +953,14 @@ static int sparc_check_constraints(struct perf_event **evts,
if (n_ev > MAX_HWEVENTS)
return -1;

if (!(sparc_pmu->flags & SPARC_PMU_HAS_CONFLICTS)) {
int i;

for (i = 0; i < n_ev; i++)
evts[i]->hw.idx = i;
return 0;
}

msk0 = perf_event_get_msk(events[0]);
if (n_ev == 1) {
if (msk0 & PIC_LOWER)
Expand Down Expand Up @@ -999,6 +1016,9 @@ static int check_excludes(struct perf_event **evts, int n_prev, int n_new)
struct perf_event *event;
int i, n, first;

if (!(sparc_pmu->flags & SPARC_PMU_ALL_EXCLUDES_SAME))
return 0;

n = n_prev + n_new;
if (n <= 1)
return 0;
Expand Down

0 comments on commit 69b9875

Please sign in to comment.