Josef Bacik
4ce97dbf50
trace: Fix epoll hang when we race with new entries
...
Epoll on trace_pipe can sometimes hang in a weird case. If the ring buffer is
empty when we set waiters_pending but an event shows up exactly at that moment
we can miss being woken up by the ring buffers irq work. Since
ring_buffer_empty() is inherently racey we will sometimes think that the buffer
is not empty. So we don't get woken up and we don't think there are any events
even though there were some ready when we added the watch, which makes us hang.
This patch fixes this by making sure that we are actually on the wait list
before we set waiters_pending, and add a memory barrier to make sure
ring_buffer_empty() is going to be correct.
Link: http://lkml.kernel.org/p/1408989581-23727-1-git-send-email-jbacik@fb.com
Cc: stable@vger.kernel.org # 3.10+
Cc: Martin Lau <kafai@fb.com>
Signed-off-by: Josef Bacik <jbacik@fb.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2014-08-25 20:18:11 -04:00
..
blktrace.c
ftrace.c
ftrace: Use current addr when converting to nop in __ftrace_replace_code()
2014-08-22 21:04:35 -04:00
Kconfig
tracing: Remove function_trace_stop and HAVE_FUNCTION_TRACE_MCOUNT_TEST
2014-07-18 13:58:12 -04:00
Makefile
tracing: Move the trace_seq_* functions into its own trace_seq.c file
2014-07-01 07:13:35 -04:00
power-traces.c
ring_buffer.c
trace: Fix epoll hang when we race with new entries
2014-08-25 20:18:11 -04:00
ring_buffer_benchmark.c
rpm-traces.c
trace.c
Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2014-08-05 17:46:42 -07:00
trace.h
tracing: let user specify tracing_thresh after selecting function_graph
2014-07-18 15:48:52 -04:00
trace_benchmark.c
tracing: Only calculate stats of tracepoint benchmarks for 2^32 times
2014-06-06 00:41:38 -04:00
trace_benchmark.h
tracing: Add tracepoint benchmark tracepoint
2014-05-29 22:49:54 -04:00
trace_branch.c
trace_clock.c
tracing: Fix wraparound problems in "uptime" trace clock
2014-07-21 09:56:12 -04:00
trace_entries.h
trace_event_perf.c
perf: Check permission only for parent tracepoint event
2014-07-28 10:01:38 +02:00
trace_events.c
Oleg Nesterov did several clean ups with the tracing filter code.
2014-08-04 12:02:48 -07:00
trace_events_filter.c
tracing: Kill "filter_string" arg of replace_preds()
2014-07-16 14:58:53 -04:00
trace_events_filter_test.h
trace_events_trigger.c
tracing: Use rcu_dereference_sched() for trace event triggers
2014-05-02 23:12:42 -04:00
trace_export.c
tracing: Fix anonymous unions in struct ftrace_event_call
2014-04-09 20:02:55 -04:00
trace_functions.c
tracing: Remove mock up poll wait function
2014-04-30 08:40:05 -04:00
trace_functions_graph.c
tracing: Convert local function_graph functions to static
2014-07-18 21:16:06 -04:00
trace_irqsoff.c
tracing: Allow irq/preempt tracers to be used by instances
2014-04-21 13:59:29 -04:00
trace_kdb.c
trace_kprobe.c
Merge branch 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2014-06-12 19:18:49 -07:00
trace_mmiotrace.c
trace_nop.c
tracing: Remove mock up poll wait function
2014-04-30 08:40:05 -04:00
trace_output.c
tracing: Add trace_seq_buffer_ptr() helper function
2014-07-01 07:13:39 -04:00
trace_output.h
tracing: Make trace_seq_putmem_hex() more robust
2014-07-01 07:13:37 -04:00
trace_printk.c
trace_probe.c
kprobes, ftrace: Use NOKPROBE_SYMBOL macro in ftrace
2014-04-24 10:26:39 +02:00
trace_probe.h
kprobes, ftrace: Use NOKPROBE_SYMBOL macro in ftrace
2014-04-24 10:26:39 +02:00
trace_sched_switch.c
trace_sched_wakeup.c
tracing: Remove mock up poll wait function
2014-04-30 08:40:05 -04:00
trace_selftest.c
tracing: Add static to local functions
2014-04-21 14:00:46 -04:00
trace_selftest_dynamic.c
trace_seq.c
tracing: Remove trace_seq_reserve()
2014-07-01 07:13:37 -04:00
trace_stack.c
tracing: Print max callstack on stacktrace bug
2014-06-02 16:43:49 -04:00
trace_stat.c
trace_stat.h
trace_syscalls.c
trace_uprobe.c
tracing/uprobes: Kill the dead TRACE_EVENT_FL_USE_CALL_FILTER logic
2014-07-16 14:25:19 -04:00