Re: [PATCH] timers: Use set_current_state macro

From: Thomas Gleixner
Date: Tue May 19 2020 - 04:36:25 EST


Xianting Tian <xianting_tian@xxxxxxx> writes:
> Use set_current_state macro instead of current->state = TASK_RUNNING
>
> Signed-off-by: Xianting Tian <xianting_tian@xxxxxxx>
> ---
> kernel/time/timer.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/kernel/time/timer.c b/kernel/time/timer.c
> index 4820823..b9ecf87 100644
> --- a/kernel/time/timer.c
> +++ b/kernel/time/timer.c
> @@ -1882,7 +1882,7 @@ signed long __sched schedule_timeout(signed long timeout)
> printk(KERN_ERR "schedule_timeout: wrong timeout "
> "value %lx\n", timeout);
> dump_stack();
> - current->state = TASK_RUNNING;
> + set_current_state(TASK_RUNNING);

This is still wrong. Again:

"That's not the same and adds a barrier which is not needed.

Not a big problem in that particular error handling code path, but in
general you really have to look whether your replacement is resulting in
the same code.

If not then you need to make an argument in the changelog why you are
replacing existing code with something which is not fully equivalent.

For this particular case, please check the implementation and read the
documentation of set_current_state() in include/linux/sched.h."

Thanks,

tglx