From: Sebastian Andrzej Siewior Date: Wed, 15 Nov 2017 17:29:51 +0100 Subject: [PATCH] time/hrtimer: avoid schedule_work() with interrupts disabled Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/5.0/older/patches-5.0.7-rt5.tar.xz The NOHZ code tries to schedule a workqueue with interrupts disabled. Since this does not work -RT I am switching it to swork instead. Signed-off-by: Sebastian Andrzej Siewior --- kernel/time/timer.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) --- a/kernel/time/timer.c +++ b/kernel/time/timer.c @@ -216,9 +216,6 @@ static DEFINE_PER_CPU(struct timer_base, static DEFINE_STATIC_KEY_FALSE(timers_nohz_active); static DEFINE_MUTEX(timer_keys_mutex); -static void timer_update_keys(struct work_struct *work); -static DECLARE_WORK(timer_update_work, timer_update_keys); - #ifdef CONFIG_SMP unsigned int sysctl_timer_migration = 1; @@ -235,17 +232,18 @@ static void timers_update_migration(void static inline void timers_update_migration(void) { } #endif /* !CONFIG_SMP */ -static void timer_update_keys(struct work_struct *work) +static void timer_update_keys(struct kthread_work *work) { mutex_lock(&timer_keys_mutex); timers_update_migration(); static_branch_enable(&timers_nohz_active); mutex_unlock(&timer_keys_mutex); } +static DEFINE_KTHREAD_WORK(timer_update_swork, timer_update_keys); void timers_update_nohz(void) { - schedule_work(&timer_update_work); + kthread_schedule_work(&timer_update_swork); } int timer_migration_handler(struct ctl_table *table, int write,