Re: Patching kthread functions
From: Petr Mladek <pmladek@suse.com>
Date: 2020-10-01 14:46:29
On Thu 2020-10-01 13:13:07, Miroslav Benes wrote:
On Wed, 30 Sep 2020, Evgenii Shatokhin wrote:quoted
Hi, I wonder, can livepatch from the current mainline kernel patch the main functions of kthreads, which are running or sleeping constantly? Are there any best practices here?No. It is a "known" limitation, "" because we discussed it a couple of times (at least with Petr), but it is not documented :( I wonder if it is really an issue practically. I haven't met a case yet when we wanted to patch such thing. But yes, you're correct, it is not possible.quoted
I mean, suppose we have a function which runs in a kthread (passed to kthread_create()) and is organized like this: while (!kthread_should_stop()) { ... DEFINE_WAIT(_wait); for (;;) { prepare_to_wait(waitq, &_wait, TASK_INTERRUPTIBLE); if (we_have_requests_to_process || kthread_should_stop()) break; schedule(); } finish_wait(waitq, &_wait); ... if (we_have_requests_to_process) process_one_request(); ... }
Crazy hack would be to patch only process_one_request() the following way: 1. Put the fixed main loop into the new process_one_request() function. 2. Put the original process_one_request() code into another function, e.g. do_process_one_request_for_real() and call it from the fixed loop. Does it make any sense or should I provide some code? Be aware that such patch could not get reverted because it would never leave the new main loop. Best Regards, Petr