aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Tjin <pattjin@google.com>2016-03-22 09:10:45 -0700
committerPatrick Tjin <pattjin@google.com>2016-03-22 09:11:03 -0700
commit2ab75015a246fc29d55b44cf06b7a4b1c9cd6ec6 (patch)
tree74801460746edb05fc62c0d78de75258c944edd5
parenteca06b455852ca7d29d2ca55a6326d5540e7c329 (diff)
Revert "Keep history after reset to 094b859"android-6.0.1_r0.70android-6.0.1_r0.51android-6.0.1_r0.31
This reverts commit c97b5c0d3ca3da755d7daec9b3a148062b416058, reversing changes made to 6b5cc177149e07bdb4775559371241e573fb55fd. Change-Id: I2fbf3d21c74ff886640f6ba54d783a8c3d0a75b3 Signed-off-by: Patrick Tjin <pattjin@google.com>
-rw-r--r--arch/arm/mach-msm/perf_event_msm_krait_l2.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/arch/arm/mach-msm/perf_event_msm_krait_l2.c b/arch/arm/mach-msm/perf_event_msm_krait_l2.c
index 34b942613425..048f024497e5 100644
--- a/arch/arm/mach-msm/perf_event_msm_krait_l2.c
+++ b/arch/arm/mach-msm/perf_event_msm_krait_l2.c
@@ -66,13 +66,15 @@
#define RESRX_VALUE_EN 0x80000000
+#define PMU_CODES_SIZE 64
+
/*
* The L2 PMU is shared between all CPU's, so protect
* its bitmap access.
*/
struct pmu_constraints {
u64 pmu_bitmap;
- u8 codes[64];
+ u8 codes[PMU_CODES_SIZE];
raw_spinlock_t lock;
} l2_pmu_constraints = {
.pmu_bitmap = 0,
@@ -460,7 +462,7 @@ static int msm_l2_test_set_ev_constraint(struct perf_event *event)
u8 group = evt_type & 0x0000F;
u8 code = (evt_type & 0x00FF0) >> 4;
unsigned long flags;
- u32 err = 0;
+ int err = 0;
u64 bitmap_t;
u32 shift_idx;
@@ -475,6 +477,11 @@ static int msm_l2_test_set_ev_constraint(struct perf_event *event)
shift_idx = ((reg * 4) + group);
+ if (shift_idx >= PMU_CODES_SIZE) {
+ err = -EINVAL;
+ goto out;
+ }
+
bitmap_t = 1 << shift_idx;
if (!(l2_pmu_constraints.pmu_bitmap & bitmap_t)) {
@@ -512,11 +519,17 @@ static int msm_l2_clear_ev_constraint(struct perf_event *event)
unsigned long flags;
u64 bitmap_t;
u32 shift_idx;
+ int err = 1;
raw_spin_lock_irqsave(&l2_pmu_constraints.lock, flags);
shift_idx = ((reg * 4) + group);
+ if (shift_idx >= PMU_CODES_SIZE) {
+ err = -EINVAL;
+ goto out;
+ }
+
bitmap_t = 1 << shift_idx;
/* Clear constraint bit. */
@@ -526,7 +539,8 @@ static int msm_l2_clear_ev_constraint(struct perf_event *event)
l2_pmu_constraints.codes[shift_idx] = -1;
raw_spin_unlock_irqrestore(&l2_pmu_constraints.lock, flags);
- return 1;
+out:
+ return err;
}
int get_num_events(void)