aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorJan Engelmohr <jan.engelmohr@mailbox.tu-dresden.de>2016-07-26 18:11:06 +0200
committerMoyster <oysterized@gmail.com>2016-08-26 16:00:05 +0200
commit42fb8800204306978c6fb8f99ef68b8c1e895fd2 (patch)
tree1b90dc930c732604ec6ab4d26a7d366264d0d292 /kernel
parent66b3b5f4bb0c4811f364332d0268fbc047835d71 (diff)
3.10.73 -> 3.10.74
Diffstat (limited to 'kernel')
-rw-r--r--kernel/events/core.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/kernel/events/core.c b/kernel/events/core.c
index 7bf4d519c..7daf52c34 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -4007,6 +4007,13 @@ static void perf_pending_event(struct irq_work *entry)
{
struct perf_event *event = container_of(entry,
struct perf_event, pending);
+ int rctx;
+
+ rctx = perf_swevent_get_recursion_context();
+ /*
+ * If we 'fail' here, that's OK, it means recursion is already disabled
+ * and we won't recurse 'further'.
+ */
if (event->pending_disable) {
event->pending_disable = 0;
@@ -4017,6 +4024,9 @@ static void perf_pending_event(struct irq_work *entry)
event->pending_wakeup = 0;
perf_event_wakeup(event);
}
+
+ if (rctx >= 0)
+ perf_swevent_put_recursion_context(rctx);
}
/*