[PATCH 00/21] hrtimers: Switch to new hrtimer interface functions (1/5)

Nam Cao posted 21 patches 4 weeks ago
arch/x86/kvm/xen.c                            |   4 +-
drivers/gpu/drm/i915/i915_request.c           |  17 +--
.../net/wireless/ralink/rt2x00/rt2x00usb.c    |   2 -
fs/aio.c                                      |   2 +-
include/linux/hrtimer.h                       |  51 ++++----
include/linux/wait.h                          |   4 +-
io_uring/io_uring.c                           |   7 +-
io_uring/timeout.c                            |   1 -
kernel/futex/core.c                           |   6 +-
kernel/sched/idle.c                           |   4 +-
kernel/time/alarmtimer.c                      |   9 +-
kernel/time/hrtimer.c                         | 110 +++++++++++++-----
kernel/time/sleep_timeout.c                   |   2 +-
net/can/bcm.c                                 |  19 ++-
net/core/pktgen.c                             |   2 +-
15 files changed, 143 insertions(+), 97 deletions(-)
[PATCH 00/21] hrtimers: Switch to new hrtimer interface functions (1/5)
Posted by Nam Cao 4 weeks ago
This is the first part of a 5-part series (split for convenience). All 5
parts are:

Part 1: https://lore.kernel.org/lkml/cover.1729864615.git.namcao@linutronix.de
Part 2: https://lore.kernel.org/lkml/cover.1729864823.git.namcao@linutronix.de
Part 3: https://lore.kernel.org/lkml/cover.1729865232.git.namcao@linutronix.de
Part 4: https://lore.kernel.org/lkml/cover.1729865485.git.namcao@linutronix.de
Part 5: https://lore.kernel.org/lkml/cover.1729865740.git.namcao@linutronix.de

To use hrtimer, hrtimer_init() (or one of its variant) must be called, and
also the timer's callfack function must be setup separately.

That can cause misuse of hrtimer. For example, because:
  - The callback function is not setup
  - The callback function is setup while it is not safe to do so

To prevent misuse of hrtimer, this series:
  - Introduce new functions hrtimer_setup*(). These new functions are
    similar to hrtimer_init*(), except that they also sanity-check and
    initialize the callback function.
  - Introduce hrtimer_update_function() which checks that it is safe to
    change the callback function. The 'function' field of hrtimer is then
    made private.
  - Convert all users to use the new functions.
  - Some minor cleanups on the way.

Most conversion patches were created using Coccinelle with the sematic
patch below; except for tricky cases that Coccinelle cannot handle, or for
some cases where a Coccinelle's bug regarding 100 column limit is
triggered. Any patches not mentioning Coccinelle were done manually.

virtual patch
@@ expression timer, clock, mode, func; @@
- hrtimer_init(timer, clock, mode);
  ...
- timer->function = func;
+ hrtimer_setup(timer, func, clock, mode);

@@ expression timer, clock, mode, func; @@
- hrtimer_init(&timer, clock, mode);
  ...
- timer.function = func;
+ hrtimer_setup(&timer, func, clock, mode);

@@ expression timer, clock, mode, func; @@
- hrtimer_init_on_stack(&timer, clock, mode);
  ...
- timer.function = func;
+ hrtimer_setup_on_stack(&timer, func, clock, mode);

@@ expression timer, clock, mode; @@
- hrtimer_init_sleeper_on_stack(timer, clock, mode);
+ hrtimer_setup_sleeper_on_stack(timer, clock, mode);

Signed-off-by: Nam Cao <namcao@linutronix.de>
Cc: Jani Nikula <jani.nikula@linux.intel.com>
Cc: intel-gfx@lists.freedesktop.org
Cc: Sean Christopherson <seanjc@google.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: x86@kernel.org
Cc: Jakub Kicinski <kuba@kernel.org>
Cc: Oliver Hartkopp <socketcan@hartkopp.net>
Cc: Kalle Valo <kvalo@kernel.org>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Christian Brauner <brauner@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: John Stultz <jstultz@google.com>

Nam Cao (21):
  hrtimers: Add missing hrtimer_init event trace points
  hrtimers: Remove unused hrtimer_init_sleeper()
  drm/i915/request: Remove unnecessary abuse of hrtimer::function
  KVM: x86/xen: Initialize hrtimer in kvm_xen_init_vcpu()
  can: bcm: Don't initialized an unused hrtimer
  wifi: rt2x00: Remove redundant hrtimer_init()
  io_uring: Remove redundant hrtimer's callback function setup
  hrtimers: Introduce hrtimer_setup() to replace hrtimer_init()
  hrtimers: Introduce hrtimer_setup_on_stack()
  hrtimers: Introduce hrtimer_setup_sleeper_on_stack()
  hrtimers: Introduce hrtimer_update_function()
  fs/aio: Switch to use hrtimer_setup_sleeper_on_stack()
  futex: Switch to use hrtimer_setup_sleeper_on_stack()
  net: pktgen: Switch to use hrtimer_setup_sleeper_on_stack()
  timers: Switch to use hrtimer_setup_sleeper_on_stack()
  wait: Switch to use hrtimer_setup_sleeper_on_stack()
  hrtimers: Delete hrtimer_init_sleeper_on_stack()
  sched/idle: Switch to use hrtimer_setup_on_stack()
  io_uring: Switch to use hrtimer_setup_on_stack()
  alarmtimer: Switch to use hrtimer_setup() and hrtimer_setup_on_stack()
  hrtimers: Delete hrtimer_init_on_stack()

 arch/x86/kvm/xen.c                            |   4 +-
 drivers/gpu/drm/i915/i915_request.c           |  17 +--
 .../net/wireless/ralink/rt2x00/rt2x00usb.c    |   2 -
 fs/aio.c                                      |   2 +-
 include/linux/hrtimer.h                       |  51 ++++----
 include/linux/wait.h                          |   4 +-
 io_uring/io_uring.c                           |   7 +-
 io_uring/timeout.c                            |   1 -
 kernel/futex/core.c                           |   6 +-
 kernel/sched/idle.c                           |   4 +-
 kernel/time/alarmtimer.c                      |   9 +-
 kernel/time/hrtimer.c                         | 110 +++++++++++++-----
 kernel/time/sleep_timeout.c                   |   2 +-
 net/can/bcm.c                                 |  19 ++-
 net/core/pktgen.c                             |   2 +-
 15 files changed, 143 insertions(+), 97 deletions(-)

-- 
2.39.5
Re: [PATCH 00/21] hrtimers: Switch to new hrtimer interface functions (1/5)
Posted by Sean Christopherson 3 weeks, 6 days ago
On Mon, Oct 28, 2024, Nam Cao wrote:
> This is the first part of a 5-part series (split for convenience). All 5
> parts are:
> 
> Part 1: https://lore.kernel.org/lkml/cover.1729864615.git.namcao@linutronix.de
> Part 2: https://lore.kernel.org/lkml/cover.1729864823.git.namcao@linutronix.de
> Part 3: https://lore.kernel.org/lkml/cover.1729865232.git.namcao@linutronix.de
> Part 4: https://lore.kernel.org/lkml/cover.1729865485.git.namcao@linutronix.de
> Part 5: https://lore.kernel.org/lkml/cover.1729865740.git.namcao@linutronix.de

How do y'all anticipate landing these patches?  Is the plan/desire to get acks
from subsystems?  Land the new helpers and then let subsystems grab their relevant
patches?  Option C?
Re: [PATCH 00/21] hrtimers: Switch to new hrtimer interface functions (1/5)
Posted by Thomas Gleixner 3 weeks, 5 days ago
On Mon, Oct 28 2024 at 09:05, Sean Christopherson wrote:
> On Mon, Oct 28, 2024, Nam Cao wrote:
>> This is the first part of a 5-part series (split for convenience). All 5
>> parts are:
>> 
>> Part 1: https://lore.kernel.org/lkml/cover.1729864615.git.namcao@linutronix.de
>> Part 2: https://lore.kernel.org/lkml/cover.1729864823.git.namcao@linutronix.de
>> Part 3: https://lore.kernel.org/lkml/cover.1729865232.git.namcao@linutronix.de
>> Part 4: https://lore.kernel.org/lkml/cover.1729865485.git.namcao@linutronix.de
>> Part 5: https://lore.kernel.org/lkml/cover.1729865740.git.namcao@linutronix.de
>
> How do y'all anticipate landing these patches?  Is the plan/desire to get acks
> from subsystems?  Land the new helpers and then let subsystems grab their relevant
> patches?  Option C?

Ideally I can just collect acks and route them through my tree. Last
time we did this helper first and subsystems grab it took ages and lots
of chasing to get it done.

Thanks,

        tglx