Commit ee9b63dd authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull perf fix from Ingo Molnar:
 "A perf kernel side fix for a fuzzer triggered lockup"

* 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  perf: Fix irq_work 'tail' recursion
parents 0fa7271a d525211f
...@@ -4574,6 +4574,13 @@ static void perf_pending_event(struct irq_work *entry) ...@@ -4574,6 +4574,13 @@ static void perf_pending_event(struct irq_work *entry)
{ {
struct perf_event *event = container_of(entry, struct perf_event *event = container_of(entry,
struct perf_event, pending); 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) { if (event->pending_disable) {
event->pending_disable = 0; event->pending_disable = 0;
...@@ -4584,6 +4591,9 @@ static void perf_pending_event(struct irq_work *entry) ...@@ -4584,6 +4591,9 @@ static void perf_pending_event(struct irq_work *entry)
event->pending_wakeup = 0; event->pending_wakeup = 0;
perf_event_wakeup(event); perf_event_wakeup(event);
} }
if (rctx >= 0)
perf_swevent_put_recursion_context(rctx);
} }
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment