On Wed, 21 Aug 2019, Julien Grall wrote: > migration_base is used as a placeholder when an hrtimer is switching > between base (see switch_hrtimer_timer_base). It is possible > theoritically possible to have timer->base equal to migration_base. > > Even if it is a placeholder, it would pass all the current check in > hrtimer_grab_expiry_lock() leading to use softirq_expiry_lock > uninitialized. > > This is can be prevented by checking whether the base is equal to > the placeholder (i.e. migration_base). That's a lame argument. The point is that it does not make sense to do that on migration base, but not for the reason you are giving (uninitialized lock). If base == migration_base then there is no point to lock soft_expiry_lock simply because the timer is not executing the callback in soft irq context and the whole lock/unlock dance can be avoided. But, yes. Good catch. Thanks, tglx