summaryrefslogtreecommitdiffstats
path: root/debian/patches-rt/0098-hrtimer-consolidate-hrtimer_init-hrtimer_init_sleepe.patch
diff options
context:
space:
mode:
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.patch290
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
+