Commit 9a1e9693f534174945154197fec4ec92f168ce21
Committed by
Ingo Molnar
1 parent
ca2db6cf30
Exists in
master
and in
39 other branches
tracepoints: fix reentrancy
The tracepoints had the same problem markers did have wrt reentrancy. Apply a similar fix using a rcu_barrier after each tracepoint mutex lock. Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Showing 1 changed file with 4 additions and 0 deletions Side-by-side Diff
kernel/tracepoint.c
... | ... | @@ -356,6 +356,8 @@ |
356 | 356 | mutex_lock(&tracepoints_mutex); |
357 | 357 | entry = get_tracepoint(name); |
358 | 358 | WARN_ON(!entry); |
359 | + if (entry->rcu_pending) | |
360 | + rcu_barrier_sched(); | |
359 | 361 | tracepoint_entry_free_old(entry, old); |
360 | 362 | end: |
361 | 363 | mutex_unlock(&tracepoints_mutex); |
... | ... | @@ -392,6 +394,8 @@ |
392 | 394 | entry = get_tracepoint(name); |
393 | 395 | if (!entry) |
394 | 396 | goto end; |
397 | + if (entry->rcu_pending) | |
398 | + rcu_barrier_sched(); | |
395 | 399 | tracepoint_entry_free_old(entry, old); |
396 | 400 | remove_tracepoint(name); /* Ignore busy error message */ |
397 | 401 | ret = 0; |