diff options
| author | Takashi Iwai <tiwai@suse.de> | 2022-01-05 15:38:11 +0100 |
|---|---|---|
| committer | Takashi Iwai <tiwai@suse.de> | 2022-01-05 15:38:34 +0100 |
| commit | f81483aaeb59da530b286fe5d081e1705eb5c886 (patch) | |
| tree | a4fed750afcdf61df3a2e3c7ab4456c515651290 /kernel/livepatch/patch.c | |
| parent | 08977fe8cfb7d9fe9337470eec4843081cf3a76d (diff) | |
| parent | 57f234248ff925d88caedf4019ec84e6ecb83909 (diff) | |
Merge branch 'for-next' into for-linus
Pull 5.17 materials.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'kernel/livepatch/patch.c')
| -rw-r--r-- | kernel/livepatch/patch.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/kernel/livepatch/patch.c b/kernel/livepatch/patch.c index e8029aea67f1..fe316c021d73 100644 --- a/kernel/livepatch/patch.c +++ b/kernel/livepatch/patch.c @@ -49,14 +49,15 @@ static void notrace klp_ftrace_handler(unsigned long ip, ops = container_of(fops, struct klp_ops, fops); + /* + * The ftrace_test_recursion_trylock() will disable preemption, + * which is required for the variant of synchronize_rcu() that is + * used to allow patching functions where RCU is not watching. + * See klp_synchronize_transition() for more details. + */ bit = ftrace_test_recursion_trylock(ip, parent_ip); if (WARN_ON_ONCE(bit < 0)) return; - /* - * A variant of synchronize_rcu() is used to allow patching functions - * where RCU is not watching, see klp_synchronize_transition(). - */ - preempt_disable_notrace(); func = list_first_or_null_rcu(&ops->func_stack, struct klp_func, stack_node); @@ -120,7 +121,6 @@ static void notrace klp_ftrace_handler(unsigned long ip, klp_arch_set_pc(fregs, (unsigned long)func->new_func); unlock: - preempt_enable_notrace(); ftrace_test_recursion_unlock(bit); } |
