On Thu 2021-09-09 10:54:05, Vasily Gorbik wrote:
On Fri, Aug 27, 2021 at 02:54:39PM +0200, Petr Mladek wrote:
quoted
On Wed 2021-07-07 14:49:38, Vasily Gorbik wrote:
quoted
--- a/kernel/livepatch/transition.c
+++ b/kernel/livepatch/transition.c
@@ -415,8 +415,11 @@ void klp_try_complete_transition(void)
for_each_possible_cpu(cpu) {
task = idle_task(cpu);
if (cpu_online(cpu)) {
- if (!klp_try_switch_task(task))
+ if (!klp_try_switch_task(task)) {
complete = false;
+ set_tsk_need_resched(task);
Is this really needed?
Yes, otherwise the inner idle loop is not left and
klp_update_patch_state() is not reached. Only waking up idle
cpus is not enough.
I see.
quoted
Also, please do this in klp_send_signals(). We kick there all other
tasks that block the transition for too long.
#define SIGNALS_TIMEOUT 15
Hm, kicking the idle threads in klp_send_signals() means extra 15 seconds
delay for every transition in our case and failing kselftests:
I understand this 15 seconds delay for loaded system and tasks doing real
work is good,
Yup. Also normal processes should not stay in the running state
for this long. They are typically migrated quickly. But the idle task is
special.
but those lazy idle "running" tasks could be kicked right
away with no harm done, right?
Fair enough.
Best Regards,
Petr