Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1621671
| From | Steven Rostedt <rostedt@goodmis.org> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH] tracing: Have the trace_event benchmark thread call cond_resched_rcu_qs() |
| Date | 2017-04-12 01:00 +0200 |
| Message-ID | <tvcVs-4Kn-3@gated-at.bofh.it> (permalink) |
| Organization | linux.* mail to news gateway |
From: "Steven Rostedt (VMware)" <rostedt@goodmis.org> The trace_event benchmark thread runs in kernel space in an infinite loop while also calling cond_resched() in case anything else wants to schedule in. Unfortunately, on a PREEMPT kernel, that makes it a nop, in which case, this will never voluntarily schedule. That will cause synchronize_rcu_tasks() to forever block on this thread, while it is running. This is exactly what cond_resched_rcu_qs() is for. Use that instead. Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org> --- kernel/trace/trace_benchmark.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/kernel/trace/trace_benchmark.c b/kernel/trace/trace_benchmark.c index e49fbe9..16a8cf0 100644 --- a/kernel/trace/trace_benchmark.c +++ b/kernel/trace/trace_benchmark.c @@ -153,10 +153,18 @@ static int benchmark_event_kthread(void *arg) trace_do_benchmark(); /* - * We don't go to sleep, but let others - * run as well. + * We don't go to sleep, but let others run as well. + * This is bascially a "yield()" to let any task that + * wants to run, schedule in, but if the CPU is idle, + * we'll keep burning cycles. + * + * Note the _rcu_qs() version of cond_resched() will + * notify synchronize_rcu_tasks() that this thread has + * passed a quiescent state for rcu_tasks. Otherwise + * this thread will never voluntarily schedule which would + * block synchronize_rcu_tasks() indefinitely. */ - cond_resched(); + cond_resched_rcu_qs(); } return 0; -- 2.9.3
Back to linux.kernel | Previous | Next — Next in thread | Find similar | Unroll thread
[PATCH] tracing: Have the trace_event benchmark thread call cond_resched_rcu_qs() Steven Rostedt <rostedt@goodmis.org> - 2017-04-12 01:00 +0200
Re: [PATCH] tracing: Have the trace_event benchmark thread call cond_resched_rcu_qs() Steven Rostedt <rostedt@goodmis.org> - 2017-04-12 01:00 +0200
Re: [PATCH] tracing: Have the trace_event benchmark thread call cond_resched_rcu_qs() "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> - 2017-04-12 01:50 +0200
csiph-web