Messages in this thread Patch in this message | | | Date | Wed, 22 Sep 2021 13:05:13 +0200 | From | Peter Zijlstra <> | Subject | [RFC][PATCH 7/7] livepatch,context_tracking: Avoid disturbing NOHZ_FULL tasks |
| |
When a task is stuck in NOHZ_FULL usermode, we can simply mark the livepatch state complete.
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> --- kernel/livepatch/transition.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-)
--- a/kernel/livepatch/transition.c +++ b/kernel/livepatch/transition.c @@ -270,13 +270,24 @@ static int klp_check_task(struct task_st { int ret; - if (task_curr(task)) + if (task_curr(task)) { + if (context_tracking_state_cpu(task_cpu(task)) == CONTEXT_USER) { + /* + * If we observe the CPU being in USER context, they + * must issue an smp_mb() before doing much kernel + * space and as such will observe the patched state, + * mark it clean. + */ + goto complete; + } return -EBUSY; + } ret = klp_check_stack(task, arg); if (ret) return ret; +complete: clear_tsk_thread_flag(task, TIF_PATCH_PENDING); task->patch_state = klp_target_state; return 0;
| |