diff options
Diffstat (limited to 'include/linux/tracepoint.h')
| -rw-r--r-- | include/linux/tracepoint.h | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/include/linux/tracepoint.h b/include/linux/tracepoint.h index 7f2e16e76ac4..041f7e56a289 100644 --- a/include/linux/tracepoint.h +++ b/include/linux/tracepoint.h | |||
| @@ -158,8 +158,10 @@ extern void syscall_unregfunc(void); | |||
| 158 | * For rcuidle callers, use srcu since sched-rcu \ | 158 | * For rcuidle callers, use srcu since sched-rcu \ |
| 159 | * doesn't work from the idle path. \ | 159 | * doesn't work from the idle path. \ |
| 160 | */ \ | 160 | */ \ |
| 161 | if (rcuidle) \ | 161 | if (rcuidle) { \ |
| 162 | idx = srcu_read_lock_notrace(&tracepoint_srcu); \ | 162 | idx = srcu_read_lock_notrace(&tracepoint_srcu); \ |
| 163 | rcu_irq_enter_irqson(); \ | ||
| 164 | } \ | ||
| 163 | \ | 165 | \ |
| 164 | it_func_ptr = rcu_dereference_raw((tp)->funcs); \ | 166 | it_func_ptr = rcu_dereference_raw((tp)->funcs); \ |
| 165 | \ | 167 | \ |
| @@ -171,8 +173,10 @@ extern void syscall_unregfunc(void); | |||
| 171 | } while ((++it_func_ptr)->func); \ | 173 | } while ((++it_func_ptr)->func); \ |
| 172 | } \ | 174 | } \ |
| 173 | \ | 175 | \ |
| 174 | if (rcuidle) \ | 176 | if (rcuidle) { \ |
| 177 | rcu_irq_exit_irqson(); \ | ||
| 175 | srcu_read_unlock_notrace(&tracepoint_srcu, idx);\ | 178 | srcu_read_unlock_notrace(&tracepoint_srcu, idx);\ |
| 179 | } \ | ||
| 176 | \ | 180 | \ |
| 177 | preempt_enable_notrace(); \ | 181 | preempt_enable_notrace(); \ |
| 178 | } while (0) | 182 | } while (0) |
