live-patching.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Evgenii Shatokhin <eshatokhin@virtuozzo.com>
To: live-patching@vger.kernel.org
Subject: Patching kthread functions
Date: Wed, 30 Sep 2020 18:44:41 +0300	[thread overview]
Message-ID: <9c9e5b82-660e-a666-b55c-a357dd7482cb@virtuozzo.com> (raw)

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?

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();
   ...
}

(The question appeared when I was looking at the following code: 
https://src.openvz.org/projects/OVZ/repos/vzkernel/browse/drivers/block/ploop/io_kaio.c?at=refs%2Ftags%2Frh7-3.10.0-1127.8.2.vz7.151.14#478)

The kthread is always running and never exits the kernel.

I could rewrite the function to add klp_update_patch_state() somewhere, 
but would it help?

No locks are held right before and after "schedule()", and the thread is 
not processing any requests at that point. But even if I place 
klp_update_patch_state(), say, just before schedule(), it would just 
switch task->patch_state for that kthread. The old function will 
continue running, right?

Looks like we can only switch to the patched code of the function at the 
beginning, via Ftrace hook. So, if the function is constantly running or 
sleeping, it seems, it cannot be live-patched. Is that so? Are there any 
workarounds?

Thanks in advance.

Regards,
Evgenii

             reply	other threads:[~2020-09-30 15:44 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-30 15:44 Evgenii Shatokhin [this message]
2020-10-01 11:13 ` Patching kthread functions Miroslav Benes
2020-10-01 12:43   ` Nicolai Stange
2020-10-01 13:18     ` Evgenii Shatokhin
2020-10-01 13:12   ` Evgenii Shatokhin
2020-10-02 11:53     ` Miroslav Benes
2020-10-02 12:52       ` Evgenii Shatokhin
2020-10-02 13:06         ` Miroslav Benes
2020-10-01 14:46   ` Petr Mladek
2020-10-01 16:34     ` Evgenii Shatokhin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=9c9e5b82-660e-a666-b55c-a357dd7482cb@virtuozzo.com \
    --to=eshatokhin@virtuozzo.com \
    --cc=live-patching@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).