summaryrefslogtreecommitdiff
path: root/kernels/linux-libre-rt/revert_timers-dont_raise_softirq_unconditionally_and_fixes.patch
diff options
context:
space:
mode:
Diffstat (limited to 'kernels/linux-libre-rt/revert_timers-dont_raise_softirq_unconditionally_and_fixes.patch')
-rw-r--r--kernels/linux-libre-rt/revert_timers-dont_raise_softirq_unconditionally_and_fixes.patch130
1 files changed, 0 insertions, 130 deletions
diff --git a/kernels/linux-libre-rt/revert_timers-dont_raise_softirq_unconditionally_and_fixes.patch b/kernels/linux-libre-rt/revert_timers-dont_raise_softirq_unconditionally_and_fixes.patch
deleted file mode 100644
index ffd42376a..000000000
--- a/kernels/linux-libre-rt/revert_timers-dont_raise_softirq_unconditionally_and_fixes.patch
+++ /dev/null
@@ -1,130 +0,0 @@
-diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h
-index bdbf77db..79a7a35 100644
---- a/include/linux/hrtimer.h
-+++ b/include/linux/hrtimer.h
-@@ -461,8 +461,9 @@ extern int schedule_hrtimeout_range_clock(ktime_t *expires,
- unsigned long delta, const enum hrtimer_mode mode, int clock);
- extern int schedule_hrtimeout(ktime_t *expires, const enum hrtimer_mode mode);
-
--/* Called from the periodic timer tick */
-+/* Soft interrupt function to run the hrtimer queues: */
- extern void hrtimer_run_queues(void);
-+extern void hrtimer_run_pending(void);
-
- /* Bootup initialization: */
- extern void __init hrtimers_init(void);
-diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c
-index c19183d..c6d8232 100644
---- a/kernel/hrtimer.c
-+++ b/kernel/hrtimer.c
-@@ -1694,6 +1694,30 @@ static void run_hrtimer_softirq(struct softirq_action *h)
- }
-
- /*
-+ * Called from timer softirq every jiffy, expire hrtimers:
-+ *
-+ * For HRT its the fall back code to run the softirq in the timer
-+ * softirq context in case the hrtimer initialization failed or has
-+ * not been done yet.
-+ */
-+void hrtimer_run_pending(void)
-+{
-+ if (hrtimer_hres_active())
-+ return;
-+
-+ /*
-+ * This _is_ ugly: We have to check in the softirq context,
-+ * whether we can switch to highres and / or nohz mode. The
-+ * clocksource switch happens in the timer interrupt with
-+ * xtime_lock held. Notification from there only sets the
-+ * check bit in the tick_oneshot code, otherwise we might
-+ * deadlock vs. xtime_lock.
-+ */
-+ if (tick_check_oneshot_change(!hrtimer_is_hres_enabled()))
-+ hrtimer_switch_to_hres();
-+}
-+
-+/*
- * Called from hardirq context every jiffy
- */
- void hrtimer_run_queues(void)
-@@ -1706,13 +1730,6 @@ void hrtimer_run_queues(void)
- if (hrtimer_hres_active())
- return;
-
-- /*
-- * Check whether we can switch to highres mode.
-- */
-- if (tick_check_oneshot_change(!hrtimer_is_hres_enabled())
-- && hrtimer_switch_to_hres())
-- return;
--
- for (index = 0; index < HRTIMER_MAX_CLOCK_BASES; index++) {
- base = &cpu_base->clock_base[index];
- if (!timerqueue_getnext(&base->active))
-diff --git a/kernel/timer.c b/kernel/timer.c
-index cc34e42..7c523a4 100644
---- a/kernel/timer.c
-+++ b/kernel/timer.c
-@@ -1443,6 +1443,8 @@
- irq_work_run();
- #endif
-
-+ hrtimer_run_pending();
-+
- if (time_after_eq(jiffies, base->timer_jiffies))
- __run_timers(base);
- }
-@@ -1452,52 +1454,8 @@
- */
- void run_local_timers(void)
- {
-- struct tvec_base *base = __this_cpu_read(tvec_bases);
--
- hrtimer_run_queues();
-- /*
-- * We can access this lockless as we are in the timer
-- * interrupt. If there are no timers queued, nothing to do in
-- * the timer softirq.
-- */
--#ifdef CONFIG_PREEMPT_RT_FULL
--
--#ifndef CONFIG_SMP
-- /*
-- * The spin_do_trylock() later may fail as the lock may be hold before
-- * the interrupt arrived. The spin-lock debugging code will raise a
-- * warning if the try_lock fails on UP. Since this is only an
-- * optimization for the FULL_NO_HZ case (not to run the timer softirq on
-- * an nohz_full CPU) we don't really care and shedule the softirq.
-- */
- raise_softirq(TIMER_SOFTIRQ);
-- return;
--#endif
--
-- /* On RT, irq work runs from softirq */
-- if (irq_work_needs_cpu()) {
-- raise_softirq(TIMER_SOFTIRQ);
-- return;
-- }
--
-- if (!spin_do_trylock(&base->lock)) {
-- raise_softirq(TIMER_SOFTIRQ);
-- return;
-- }
--#endif
--
-- if (!base->active_timers)
-- goto out;
--
-- /* Check whether the next pending timer has expired */
-- if (time_before_eq(base->next_timer, jiffies))
-- raise_softirq(TIMER_SOFTIRQ);
--out:
--#ifdef CONFIG_PREEMPT_RT_FULL
-- rt_spin_unlock_after_trylock_in_irq(&base->lock);
--#endif
-- /* The ; ensures that gcc won't complain in the !RT case */
-- ;
- }
-
- #ifdef __ARCH_WANT_SYS_ALARM