Re: [PATCH v2 05/12] io_uring: Use helper function hrtimer_update_function()

From: Jens Axboe
Date: Wed Feb 05 2025 - 13:45:48 EST


On 2/5/25 3:55 AM, Nam Cao wrote:
> The field 'function' of struct hrtimer should not be changed directly, as
> the write is lockless and a concurrent timer expiry might end up using the
> wrong function pointer.
>
> Switch to use hrtimer_update_function() which also performs runtime checks
> that it is safe to modify the callback.
>
> Signed-off-by: Nam Cao <namcao@xxxxxxxxxxxxx>
> Cc: Jens Axboe <axboe@xxxxxxxxx>
> ---
> io_uring/io_uring.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/io_uring/io_uring.c b/io_uring/io_uring.c
> index ceacf6230e34..936f8b4106cf 100644
> --- a/io_uring/io_uring.c
> +++ b/io_uring/io_uring.c
> @@ -2421,7 +2421,7 @@ static enum hrtimer_restart io_cqring_min_timer_wakeup(struct hrtimer *timer)
> goto out_wake;
> }
>
> - iowq->t.function = io_cqring_timer_wakeup;
> + hrtimer_update_function(&iowq->t, io_cqring_timer_wakeup);
> hrtimer_set_expires(timer, iowq->timeout);
> return HRTIMER_RESTART;
> out_wake:

The timer is known expired here, it's inside the callback. Is this
really necessary or useful?

--
Jens Axboe