diff options
Diffstat (limited to 'debian/patches-rt/0098-hrtimer-consolidate-hrtimer_init-hrtimer_init_sleepe.patch')
-rw-r--r-- | debian/patches-rt/0098-hrtimer-consolidate-hrtimer_init-hrtimer_init_sleepe.patch | 290 |
1 files changed, 290 insertions, 0 deletions
diff --git a/debian/patches-rt/0098-hrtimer-consolidate-hrtimer_init-hrtimer_init_sleepe.patch b/debian/patches-rt/0098-hrtimer-consolidate-hrtimer_init-hrtimer_init_sleepe.patch new file mode 100644 index 000000000..997af2fb1 --- /dev/null +++ b/debian/patches-rt/0098-hrtimer-consolidate-hrtimer_init-hrtimer_init_sleepe.patch @@ -0,0 +1,290 @@ +From 4b2913d980738fe5078dd581af6d6183c40a0616 Mon Sep 17 00:00:00 2001 +From: Sebastian Andrzej Siewior <bigeasy@linutronix.de> +Date: Tue, 3 Jul 2018 11:25:41 +0200 +Subject: [PATCH 098/347] hrtimer: consolidate hrtimer_init() + + hrtimer_init_sleeper() calls +Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.19/older/patches-4.19.246-rt110.tar.xz + +hrtimer_init_sleeper() calls require a prior initialisation of the +hrtimer object with hrtimer_init(). Lets make the initialisation of +the hrtimer object part of hrtimer_init_sleeper(). To remain +consistent consider init_on_stack as well. + +Beside adapting the hrtimer_init_sleeper[_on_stack]() functions, call +sites need to be updated as well. + +Link: http://lkml.kernel.org/r/20180703092541.2870-1-anna-maria@linutronix.de +Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> +[anna-maria: Updating the commit message, add staging/android/vsoc.c] +Signed-off-by: Anna-Maria Gleixner <anna-maria@linutronix.de> +--- + block/blk-mq.c | 3 +-- + drivers/staging/android/vsoc.c | 6 ++--- + include/linux/hrtimer.h | 19 +++++++++++--- + include/linux/wait.h | 4 +-- + kernel/futex.c | 19 ++++++-------- + kernel/time/hrtimer.c | 46 ++++++++++++++++++++++++++-------- + net/core/pktgen.c | 4 +-- + 7 files changed, 67 insertions(+), 34 deletions(-) + +diff --git a/block/blk-mq.c b/block/blk-mq.c +index ae70b4809bec..ffa97d90bde9 100644 +--- a/block/blk-mq.c ++++ b/block/blk-mq.c +@@ -3139,10 +3139,9 @@ static bool blk_mq_poll_hybrid_sleep(struct request_queue *q, + kt = nsecs; + + mode = HRTIMER_MODE_REL; +- hrtimer_init_on_stack(&hs.timer, CLOCK_MONOTONIC, mode); ++ hrtimer_init_sleeper_on_stack(&hs, CLOCK_MONOTONIC, mode, current); + hrtimer_set_expires(&hs.timer, kt); + +- hrtimer_init_sleeper(&hs, current); + do { + if (blk_mq_rq_state(rq) == MQ_RQ_COMPLETE) + break; +diff --git a/drivers/staging/android/vsoc.c b/drivers/staging/android/vsoc.c +index 034d86869772..d089b2cb5dd7 100644 +--- a/drivers/staging/android/vsoc.c ++++ b/drivers/staging/android/vsoc.c +@@ -438,12 +438,10 @@ static int handle_vsoc_cond_wait(struct file *filp, struct vsoc_cond_wait *arg) + return -EINVAL; + wake_time = ktime_set(arg->wake_time_sec, arg->wake_time_nsec); + +- hrtimer_init_on_stack(&to->timer, CLOCK_MONOTONIC, +- HRTIMER_MODE_ABS); ++ hrtimer_init_sleeper_on_stack(to, CLOCK_MONOTONIC, ++ HRTIMER_MODE_ABS, current); + hrtimer_set_expires_range_ns(&to->timer, wake_time, + current->timer_slack_ns); +- +- hrtimer_init_sleeper(to, current); + } + + while (1) { +diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h +index 542b4fa2cda9..cbd041b22088 100644 +--- a/include/linux/hrtimer.h ++++ b/include/linux/hrtimer.h +@@ -364,10 +364,17 @@ DECLARE_PER_CPU(struct tick_device, tick_cpu_device); + /* Initialize timers: */ + extern void hrtimer_init(struct hrtimer *timer, clockid_t which_clock, + enum hrtimer_mode mode); ++extern void hrtimer_init_sleeper(struct hrtimer_sleeper *sl, clockid_t clock_id, ++ enum hrtimer_mode mode, ++ struct task_struct *task); + + #ifdef CONFIG_DEBUG_OBJECTS_TIMERS + extern void hrtimer_init_on_stack(struct hrtimer *timer, clockid_t which_clock, + enum hrtimer_mode mode); ++extern void hrtimer_init_sleeper_on_stack(struct hrtimer_sleeper *sl, ++ clockid_t clock_id, ++ enum hrtimer_mode mode, ++ struct task_struct *task); + + extern void destroy_hrtimer_on_stack(struct hrtimer *timer); + #else +@@ -377,6 +384,15 @@ static inline void hrtimer_init_on_stack(struct hrtimer *timer, + { + hrtimer_init(timer, which_clock, mode); + } ++ ++static inline void hrtimer_init_sleeper_on_stack(struct hrtimer_sleeper *sl, ++ clockid_t clock_id, ++ enum hrtimer_mode mode, ++ struct task_struct *task) ++{ ++ hrtimer_init_sleeper(sl, clock_id, mode, task); ++} ++ + static inline void destroy_hrtimer_on_stack(struct hrtimer *timer) { } + #endif + +@@ -486,9 +502,6 @@ extern long hrtimer_nanosleep(const struct timespec64 *rqtp, + const enum hrtimer_mode mode, + const clockid_t clockid); + +-extern void hrtimer_init_sleeper(struct hrtimer_sleeper *sl, +- struct task_struct *tsk); +- + extern int schedule_hrtimeout_range(ktime_t *expires, u64 delta, + const enum hrtimer_mode mode); + extern int schedule_hrtimeout_range_clock(ktime_t *expires, +diff --git a/include/linux/wait.h b/include/linux/wait.h +index 189da6e44756..523c68edc48a 100644 +--- a/include/linux/wait.h ++++ b/include/linux/wait.h +@@ -515,8 +515,8 @@ do { \ + int __ret = 0; \ + struct hrtimer_sleeper __t; \ + \ +- hrtimer_init_on_stack(&__t.timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); \ +- hrtimer_init_sleeper(&__t, current); \ ++ hrtimer_init_sleeper_on_stack(&__t, CLOCK_MONOTONIC, HRTIMER_MODE_REL, \ ++ current); \ + if ((timeout) != KTIME_MAX) \ + hrtimer_start_range_ns(&__t.timer, timeout, \ + current->timer_slack_ns, \ +diff --git a/kernel/futex.c b/kernel/futex.c +index fac994367189..ac015d1dd16c 100644 +--- a/kernel/futex.c ++++ b/kernel/futex.c +@@ -2816,10 +2816,9 @@ static int futex_wait(u32 __user *uaddr, unsigned int flags, u32 val, + if (abs_time) { + to = &timeout; + +- hrtimer_init_on_stack(&to->timer, (flags & FLAGS_CLOCKRT) ? +- CLOCK_REALTIME : CLOCK_MONOTONIC, +- HRTIMER_MODE_ABS); +- hrtimer_init_sleeper(to, current); ++ hrtimer_init_sleeper_on_stack(to, (flags & FLAGS_CLOCKRT) ? ++ CLOCK_REALTIME : CLOCK_MONOTONIC, ++ HRTIMER_MODE_ABS, current); + hrtimer_set_expires_range_ns(&to->timer, *abs_time, + current->timer_slack_ns); + } +@@ -2917,9 +2916,8 @@ static int futex_lock_pi(u32 __user *uaddr, unsigned int flags, + + if (time) { + to = &timeout; +- hrtimer_init_on_stack(&to->timer, CLOCK_REALTIME, +- HRTIMER_MODE_ABS); +- hrtimer_init_sleeper(to, current); ++ hrtimer_init_sleeper_on_stack(to, CLOCK_REALTIME, ++ HRTIMER_MODE_ABS, current); + hrtimer_set_expires(&to->timer, *time); + } + +@@ -3349,10 +3347,9 @@ static int futex_wait_requeue_pi(u32 __user *uaddr, unsigned int flags, + + if (abs_time) { + to = &timeout; +- hrtimer_init_on_stack(&to->timer, (flags & FLAGS_CLOCKRT) ? +- CLOCK_REALTIME : CLOCK_MONOTONIC, +- HRTIMER_MODE_ABS); +- hrtimer_init_sleeper(to, current); ++ hrtimer_init_sleeper_on_stack(to, (flags & FLAGS_CLOCKRT) ? ++ CLOCK_REALTIME : CLOCK_MONOTONIC, ++ HRTIMER_MODE_ABS, current); + hrtimer_set_expires_range_ns(&to->timer, *abs_time, + current->timer_slack_ns); + } +diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c +index 32ee24f5142a..1e03d7fab81c 100644 +--- a/kernel/time/hrtimer.c ++++ b/kernel/time/hrtimer.c +@@ -1715,13 +1715,44 @@ static enum hrtimer_restart hrtimer_wakeup(struct hrtimer *timer) + return HRTIMER_NORESTART; + } + +-void hrtimer_init_sleeper(struct hrtimer_sleeper *sl, struct task_struct *task) ++static void __hrtimer_init_sleeper(struct hrtimer_sleeper *sl, ++ clockid_t clock_id, ++ enum hrtimer_mode mode, ++ struct task_struct *task) + { ++ __hrtimer_init(&sl->timer, clock_id, mode); + sl->timer.function = hrtimer_wakeup; + sl->task = task; + } ++ ++/** ++ * hrtimer_init_sleeper - initialize sleeper to the given clock ++ * @sl: sleeper to be initialized ++ * @clock_id: the clock to be used ++ * @mode: timer mode abs/rel ++ * @task: the task to wake up ++ */ ++void hrtimer_init_sleeper(struct hrtimer_sleeper *sl, clockid_t clock_id, ++ enum hrtimer_mode mode, struct task_struct *task) ++{ ++ debug_init(&sl->timer, clock_id, mode); ++ __hrtimer_init_sleeper(sl, clock_id, mode, task); ++ ++} + EXPORT_SYMBOL_GPL(hrtimer_init_sleeper); + ++#ifdef CONFIG_DEBUG_OBJECTS_TIMERS ++void hrtimer_init_sleeper_on_stack(struct hrtimer_sleeper *sl, ++ clockid_t clock_id, ++ enum hrtimer_mode mode, ++ struct task_struct *task) ++{ ++ debug_object_init_on_stack(&sl->timer, &hrtimer_debug_descr); ++ __hrtimer_init_sleeper(sl, clock_id, mode, task); ++} ++EXPORT_SYMBOL_GPL(hrtimer_init_sleeper_on_stack); ++#endif ++ + int nanosleep_copyout(struct restart_block *restart, struct timespec64 *ts) + { + switch(restart->nanosleep.type) { +@@ -1745,8 +1776,6 @@ static int __sched do_nanosleep(struct hrtimer_sleeper *t, enum hrtimer_mode mod + { + struct restart_block *restart; + +- hrtimer_init_sleeper(t, current); +- + do { + set_current_state(TASK_INTERRUPTIBLE); + hrtimer_start_expires(&t->timer, mode); +@@ -1783,10 +1812,9 @@ static long __sched hrtimer_nanosleep_restart(struct restart_block *restart) + struct hrtimer_sleeper t; + int ret; + +- hrtimer_init_on_stack(&t.timer, restart->nanosleep.clockid, +- HRTIMER_MODE_ABS); ++ hrtimer_init_sleeper_on_stack(&t, restart->nanosleep.clockid, ++ HRTIMER_MODE_ABS, current); + hrtimer_set_expires_tv64(&t.timer, restart->nanosleep.expires); +- + ret = do_nanosleep(&t, HRTIMER_MODE_ABS); + destroy_hrtimer_on_stack(&t.timer); + return ret; +@@ -1804,7 +1832,7 @@ long hrtimer_nanosleep(const struct timespec64 *rqtp, + if (dl_task(current) || rt_task(current)) + slack = 0; + +- hrtimer_init_on_stack(&t.timer, clockid, mode); ++ hrtimer_init_sleeper_on_stack(&t, clockid, mode, current); + hrtimer_set_expires_range_ns(&t.timer, timespec64_to_ktime(*rqtp), slack); + ret = do_nanosleep(&t, mode); + if (ret != -ERESTART_RESTARTBLOCK) +@@ -2003,11 +2031,9 @@ schedule_hrtimeout_range_clock(ktime_t *expires, u64 delta, + return -EINTR; + } + +- hrtimer_init_on_stack(&t.timer, clock_id, mode); ++ hrtimer_init_sleeper_on_stack(&t, clock_id, mode, current); + hrtimer_set_expires_range_ns(&t.timer, *expires, delta); + +- hrtimer_init_sleeper(&t, current); +- + hrtimer_start_expires(&t.timer, mode); + + if (likely(t.task)) +diff --git a/net/core/pktgen.c b/net/core/pktgen.c +index 3714cd9e3111..2cea192b1475 100644 +--- a/net/core/pktgen.c ++++ b/net/core/pktgen.c +@@ -2160,7 +2160,8 @@ static void spin(struct pktgen_dev *pkt_dev, ktime_t spin_until) + s64 remaining; + struct hrtimer_sleeper t; + +- hrtimer_init_on_stack(&t.timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS); ++ hrtimer_init_sleeper_on_stack(&t, CLOCK_MONOTONIC, HRTIMER_MODE_ABS, ++ current); + hrtimer_set_expires(&t.timer, spin_until); + + remaining = ktime_to_ns(hrtimer_expires_remaining(&t.timer)); +@@ -2175,7 +2176,6 @@ static void spin(struct pktgen_dev *pkt_dev, ktime_t spin_until) + } while (ktime_compare(end_time, spin_until) < 0); + } else { + /* see do_nanosleep */ +- hrtimer_init_sleeper(&t, current); + do { + set_current_state(TASK_INTERRUPTIBLE); + hrtimer_start_expires(&t.timer, HRTIMER_MODE_ABS); +-- +2.36.1 + |