Merge tag 'arm64-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64...
[linux-2.6-microblaze.git] / arch / arm / kernel / perf_event_v7.c
index eb21904..a3322e2 100644 (file)
@@ -870,10 +870,8 @@ static void armv7_pmnc_dump_regs(struct arm_pmu *cpu_pmu)
 
 static void armv7pmu_enable_event(struct perf_event *event)
 {
-       unsigned long flags;
        struct hw_perf_event *hwc = &event->hw;
        struct arm_pmu *cpu_pmu = to_arm_pmu(event->pmu);
-       struct pmu_hw_events *events = this_cpu_ptr(cpu_pmu->hw_events);
        int idx = hwc->idx;
 
        if (!armv7_pmnc_counter_valid(cpu_pmu, idx)) {
@@ -886,7 +884,6 @@ static void armv7pmu_enable_event(struct perf_event *event)
         * Enable counter and interrupt, and set the counter to count
         * the event that we're interested in.
         */
-       raw_spin_lock_irqsave(&events->pmu_lock, flags);
 
        /*
         * Disable counter
@@ -910,16 +907,12 @@ static void armv7pmu_enable_event(struct perf_event *event)
         * Enable counter
         */
        armv7_pmnc_enable_counter(idx);
-
-       raw_spin_unlock_irqrestore(&events->pmu_lock, flags);
 }
 
 static void armv7pmu_disable_event(struct perf_event *event)
 {
-       unsigned long flags;
        struct hw_perf_event *hwc = &event->hw;
        struct arm_pmu *cpu_pmu = to_arm_pmu(event->pmu);
-       struct pmu_hw_events *events = this_cpu_ptr(cpu_pmu->hw_events);
        int idx = hwc->idx;
 
        if (!armv7_pmnc_counter_valid(cpu_pmu, idx)) {
@@ -931,7 +924,6 @@ static void armv7pmu_disable_event(struct perf_event *event)
        /*
         * Disable counter and interrupt
         */
-       raw_spin_lock_irqsave(&events->pmu_lock, flags);
 
        /*
         * Disable counter
@@ -942,8 +934,6 @@ static void armv7pmu_disable_event(struct perf_event *event)
         * Disable interrupt for this counter
         */
        armv7_pmnc_disable_intens(idx);
-
-       raw_spin_unlock_irqrestore(&events->pmu_lock, flags);
 }
 
 static irqreturn_t armv7pmu_handle_irq(struct arm_pmu *cpu_pmu)
@@ -1009,24 +999,14 @@ static irqreturn_t armv7pmu_handle_irq(struct arm_pmu *cpu_pmu)
 
 static void armv7pmu_start(struct arm_pmu *cpu_pmu)
 {
-       unsigned long flags;
-       struct pmu_hw_events *events = this_cpu_ptr(cpu_pmu->hw_events);
-
-       raw_spin_lock_irqsave(&events->pmu_lock, flags);
        /* Enable all counters */
        armv7_pmnc_write(armv7_pmnc_read() | ARMV7_PMNC_E);
-       raw_spin_unlock_irqrestore(&events->pmu_lock, flags);
 }
 
 static void armv7pmu_stop(struct arm_pmu *cpu_pmu)
 {
-       unsigned long flags;
-       struct pmu_hw_events *events = this_cpu_ptr(cpu_pmu->hw_events);
-
-       raw_spin_lock_irqsave(&events->pmu_lock, flags);
        /* Disable all counters */
        armv7_pmnc_write(armv7_pmnc_read() & ~ARMV7_PMNC_E);
-       raw_spin_unlock_irqrestore(&events->pmu_lock, flags);
 }
 
 static int armv7pmu_get_event_idx(struct pmu_hw_events *cpuc,
@@ -1072,8 +1052,10 @@ static int armv7pmu_set_event_filter(struct hw_perf_event *event,
 {
        unsigned long config_base = 0;
 
-       if (attr->exclude_idle)
-               return -EPERM;
+       if (attr->exclude_idle) {
+               pr_debug("ARM performance counters do not support mode exclusion\n");
+               return -EOPNOTSUPP;
+       }
        if (attr->exclude_user)
                config_base |= ARMV7_EXCLUDE_USER;
        if (attr->exclude_kernel)
@@ -1492,14 +1474,10 @@ static void krait_clearpmu(u32 config_base)
 
 static void krait_pmu_disable_event(struct perf_event *event)
 {
-       unsigned long flags;
        struct hw_perf_event *hwc = &event->hw;
        int idx = hwc->idx;
-       struct arm_pmu *cpu_pmu = to_arm_pmu(event->pmu);
-       struct pmu_hw_events *events = this_cpu_ptr(cpu_pmu->hw_events);
 
        /* Disable counter and interrupt */
-       raw_spin_lock_irqsave(&events->pmu_lock, flags);
 
        /* Disable counter */
        armv7_pmnc_disable_counter(idx);
@@ -1512,23 +1490,17 @@ static void krait_pmu_disable_event(struct perf_event *event)
 
        /* Disable interrupt for this counter */
        armv7_pmnc_disable_intens(idx);
-
-       raw_spin_unlock_irqrestore(&events->pmu_lock, flags);
 }
 
 static void krait_pmu_enable_event(struct perf_event *event)
 {
-       unsigned long flags;
        struct hw_perf_event *hwc = &event->hw;
        int idx = hwc->idx;
-       struct arm_pmu *cpu_pmu = to_arm_pmu(event->pmu);
-       struct pmu_hw_events *events = this_cpu_ptr(cpu_pmu->hw_events);
 
        /*
         * Enable counter and interrupt, and set the counter to count
         * the event that we're interested in.
         */
-       raw_spin_lock_irqsave(&events->pmu_lock, flags);
 
        /* Disable counter */
        armv7_pmnc_disable_counter(idx);
@@ -1548,8 +1520,6 @@ static void krait_pmu_enable_event(struct perf_event *event)
 
        /* Enable counter */
        armv7_pmnc_enable_counter(idx);
-
-       raw_spin_unlock_irqrestore(&events->pmu_lock, flags);
 }
 
 static void krait_pmu_reset(void *info)
@@ -1825,14 +1795,10 @@ static void scorpion_clearpmu(u32 config_base)
 
 static void scorpion_pmu_disable_event(struct perf_event *event)
 {
-       unsigned long flags;
        struct hw_perf_event *hwc = &event->hw;
        int idx = hwc->idx;
-       struct arm_pmu *cpu_pmu = to_arm_pmu(event->pmu);
-       struct pmu_hw_events *events = this_cpu_ptr(cpu_pmu->hw_events);
 
        /* Disable counter and interrupt */
-       raw_spin_lock_irqsave(&events->pmu_lock, flags);
 
        /* Disable counter */
        armv7_pmnc_disable_counter(idx);
@@ -1845,23 +1811,17 @@ static void scorpion_pmu_disable_event(struct perf_event *event)
 
        /* Disable interrupt for this counter */
        armv7_pmnc_disable_intens(idx);
-
-       raw_spin_unlock_irqrestore(&events->pmu_lock, flags);
 }
 
 static void scorpion_pmu_enable_event(struct perf_event *event)
 {
-       unsigned long flags;
        struct hw_perf_event *hwc = &event->hw;
        int idx = hwc->idx;
-       struct arm_pmu *cpu_pmu = to_arm_pmu(event->pmu);
-       struct pmu_hw_events *events = this_cpu_ptr(cpu_pmu->hw_events);
 
        /*
         * Enable counter and interrupt, and set the counter to count
         * the event that we're interested in.
         */
-       raw_spin_lock_irqsave(&events->pmu_lock, flags);
 
        /* Disable counter */
        armv7_pmnc_disable_counter(idx);
@@ -1881,8 +1841,6 @@ static void scorpion_pmu_enable_event(struct perf_event *event)
 
        /* Enable counter */
        armv7_pmnc_enable_counter(idx);
-
-       raw_spin_unlock_irqrestore(&events->pmu_lock, flags);
 }
 
 static void scorpion_pmu_reset(void *info)