From: Petr Mladek <pmladek@suse.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: gor@linux.ibm.com, jpoimboe@redhat.com, jikos@kernel.org,
mbenes@suse.cz, mingo@kernel.org, linux-kernel@vger.kernel.org,
joe.lawrence@redhat.com, fweisbec@gmail.com, tglx@linutronix.de,
hca@linux.ibm.com, svens@linux.ibm.com, sumanthk@linux.ibm.com,
live-patching@vger.kernel.org, paulmck@kernel.org
Subject: Re: [RFC][PATCH 3/7] sched,livepatch: Use task_try_func()
Date: Thu, 23 Sep 2021 14:05:00 +0200 [thread overview]
Message-ID: <YUxtbCthpr+l9XM0@alley> (raw)
In-Reply-To: <20210922110836.065940560@infradead.org>
On Wed 2021-09-22 13:05:09, Peter Zijlstra wrote:
> Instead of frobbing around with scheduler internals, use the shiny new
> task_try_func() interface.
>
> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
> ---
> kernel/livepatch/transition.c | 84 ++++++++++++++++++------------------------
> 1 file changed, 37 insertions(+), 47 deletions(-)
>
> --- a/kernel/livepatch/transition.c
> +++ b/kernel/livepatch/transition.c
> @@ -274,6 +266,22 @@ static int klp_check_stack(struct task_s
> return 0;
> }
>
> +static int klp_check_task(struct task_struct *task, void *arg)
Please, call this klp_check_and_switch_task() to make it clear
that it actually does the switch.
> +{
> + int ret;
> +
> + if (task_curr(task))
> + return -EBUSY;
> +
> + ret = klp_check_stack(task, arg);
> + if (ret)
> + return ret;
> +
> + clear_tsk_thread_flag(task, TIF_PATCH_PENDING);
> + task->patch_state = klp_target_state;
> + return 0;
> +}
> +
> /*
> * Try to safely switch a task to the target patch state. If it's currently
> * running, or it's sleeping on a to-be-patched or to-be-unpatched function, or
> @@ -305,36 +308,23 @@ static bool klp_try_switch_task(struct t
> * functions. If all goes well, switch the task to the target patch
> * state.
> */
> - rq = task_rq_lock(task, &flags);
> -
> - if (task_running(rq, task) && task != current) {
> - snprintf(err_buf, STACK_ERR_BUF_SIZE,
> - "%s: %s:%d is running\n", __func__, task->comm,
> - task->pid);
> - goto done;
> + ret = task_try_func(task, klp_check_task, &old_name);
> + switch (ret) {
> + case -EBUSY:
> + pr_debug("%s: %s:%d is running\n",
> + __func__, task->comm, task->pid);
> + break;
> + case -EINVAL:
> + pr_debug("%s: %s:%d has an unreliable stack\n",
> + __func__, task->comm, task->pid);
> + break;
> + case -EADDRINUSE:
> + pr_debug("%s: %s:%d is sleeping on function %s\n",
> + __func__, task->comm, task->pid, old_name);
> + break;
I would prefer to be on the safe side and catch error codes that might
eventually appear in the future.
case 0:
/* success */
break;
default:
pr_debug("%s: Unknown error code (%d) when trying to switch %s:%d\n",
__func__, ret, task->comm, task->pid);
> }
>
> - ret = klp_check_stack(task, err_buf);
> - if (ret)
> - goto done;
> -
> - success = true;
> -
> - clear_tsk_thread_flag(task, TIF_PATCH_PENDING);
> - task->patch_state = klp_target_state;
> -
> -done:
> - task_rq_unlock(rq, task, &flags);
> -
> - /*
> - * Due to console deadlock issues, pr_debug() can't be used while
> - * holding the task rq lock. Instead we have to use a temporary buffer
> - * and print the debug message after releasing the lock.
> - */
> - if (err_buf[0] != '\0')
> - pr_debug("%s", err_buf);
> -
> - return success;
> + return !ret;
> }
Otherwise, it is great improvement!
Best Regards,
Petr
next prev parent reply other threads:[~2021-09-23 12:05 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-22 11:05 [RFC][PATCH 0/7] sched,rcu,context_tracking,livepatch: Improve livepatch task transitions for idle and NOHZ_FULL cpus Peter Zijlstra
2021-09-22 11:05 ` [RFC][PATCH 1/7] sched,rcu: Rework try_invoke_on_locked_down_task() Peter Zijlstra
2021-09-22 11:05 ` [RFC][PATCH 2/7] sched: Fix task_try_func() Peter Zijlstra
2021-09-22 11:05 ` [RFC][PATCH 3/7] sched,livepatch: Use task_try_func() Peter Zijlstra
2021-09-23 12:05 ` Petr Mladek [this message]
2021-09-23 13:17 ` Peter Zijlstra
2021-09-23 13:47 ` Peter Zijlstra
2021-09-22 11:05 ` [RFC][PATCH 4/7] sched: Simplify wake_up_*idle*() Peter Zijlstra
2021-09-22 11:05 ` [RFC][PATCH 5/7] sched,livepatch: Use wake_up_if_idle() Peter Zijlstra
2021-09-22 13:05 ` Miroslav Benes
2021-09-23 12:19 ` Petr Mladek
2021-09-22 11:05 ` [RFC][PATCH 6/7] context_tracking: Provide SMP ordering using RCU Peter Zijlstra
2021-09-22 15:17 ` Paul E. McKenney
2021-09-22 19:33 ` Peter Zijlstra
2021-09-22 19:47 ` Peter Zijlstra
2021-09-22 19:59 ` Paul E. McKenney
2021-09-22 19:53 ` Paul E. McKenney
2021-09-22 20:02 ` Peter Zijlstra
2021-09-23 12:10 ` Petr Mladek
2021-09-24 18:57 ` Joel Savitz
2021-09-27 14:33 ` Petr Mladek
2021-09-22 11:05 ` [RFC][PATCH 7/7] livepatch,context_tracking: Avoid disturbing NOHZ_FULL tasks Peter Zijlstra
2021-09-23 13:14 ` Petr Mladek
2021-09-23 13:28 ` Peter Zijlstra
2021-09-24 7:33 ` Petr Mladek
2021-09-23 13:22 ` [RFC][PATCH 0/7] sched,rcu,context_tracking,livepatch: Improve livepatch task transitions for idle and NOHZ_FULL cpus Petr Mladek
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=YUxtbCthpr+l9XM0@alley \
--to=pmladek@suse.com \
--cc=fweisbec@gmail.com \
--cc=gor@linux.ibm.com \
--cc=hca@linux.ibm.com \
--cc=jikos@kernel.org \
--cc=joe.lawrence@redhat.com \
--cc=jpoimboe@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=live-patching@vger.kernel.org \
--cc=mbenes@suse.cz \
--cc=mingo@kernel.org \
--cc=paulmck@kernel.org \
--cc=peterz@infradead.org \
--cc=sumanthk@linux.ibm.com \
--cc=svens@linux.ibm.com \
--cc=tglx@linutronix.de \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.