]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - arch/arm/kernel/perf_event.c
ARM: 6902/1: perf: Remove erroneous check on active_events
[mv-sheeva.git] / arch / arm / kernel / perf_event.c
index 69cfee0fe00f1cbc38eb7f789ef23aae51688dd6..d53c0abc4dd3aaa375595fcd4d54527f013b41f8 100644 (file)
@@ -221,7 +221,7 @@ again:
        prev_raw_count &= armpmu->max_period;
 
        if (overflow)
-               delta = armpmu->max_period - prev_raw_count + new_raw_count;
+               delta = armpmu->max_period - prev_raw_count + new_raw_count + 1;
        else
                delta = new_raw_count - prev_raw_count;
 
@@ -560,11 +560,6 @@ static int armpmu_event_init(struct perf_event *event)
        event->destroy = hw_perf_event_destroy;
 
        if (!atomic_inc_not_zero(&active_events)) {
-               if (atomic_read(&active_events) > armpmu->num_events) {
-                       atomic_dec(&active_events);
-                       return -ENOSPC;
-               }
-
                mutex_lock(&pmu_reserve_mutex);
                if (atomic_read(&active_events) == 0) {
                        err = armpmu_reserve_hardware();
@@ -746,7 +741,8 @@ perf_callchain_user(struct perf_callchain_entry *entry, struct pt_regs *regs)
 
        tail = (struct frame_tail __user *)regs->ARM_fp - 1;
 
-       while (tail && !((unsigned long)tail & 0x3))
+       while ((entry->nr < PERF_MAX_STACK_DEPTH) &&
+              tail && !((unsigned long)tail & 0x3))
                tail = user_backtrace(tail, entry);
 }