diff options
Diffstat (limited to 'debian/patches-rt/hrtimer-by-timers-by-default-into-the-softirq-context.patch')
-rw-r--r-- | debian/patches-rt/hrtimer-by-timers-by-default-into-the-softirq-context.patch | 210 |
1 files changed, 0 insertions, 210 deletions
diff --git a/debian/patches-rt/hrtimer-by-timers-by-default-into-the-softirq-context.patch b/debian/patches-rt/hrtimer-by-timers-by-default-into-the-softirq-context.patch deleted file mode 100644 index cddacda2c..000000000 --- a/debian/patches-rt/hrtimer-by-timers-by-default-into-the-softirq-context.patch +++ /dev/null @@ -1,210 +0,0 @@ -From: Sebastian Andrzej Siewior <bigeasy@linutronix.de> -Date: Fri, 3 Jul 2009 08:44:31 -0500 -Subject: hrtimer: by timers by default into the softirq context -Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/5.2/older/patches-5.2.17-rt9.tar.xz - -We can't have hrtimers callbacks running in hardirq context on RT. Therefore -the timers are deferred to the softirq context by default. -There are few timers which expect to be run in hardirq context even on RT. -Those are: -- very short running where low latency is critical (kvm lapic) -- timers which take raw locks and need run in hard-irq context (perf, sched) -- wake up related timer (kernel side of clock_nanosleep() and so on) - -Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> ---- - arch/x86/kvm/lapic.c | 2 +- - include/linux/hrtimer.h | 6 ++++++ - kernel/events/core.c | 4 ++-- - kernel/sched/core.c | 2 +- - kernel/sched/deadline.c | 2 +- - kernel/sched/fair.c | 4 ++-- - kernel/sched/rt.c | 4 ++-- - kernel/time/hrtimer.c | 21 +++++++++++++++++++-- - kernel/time/tick-broadcast-hrtimer.c | 2 +- - kernel/time/tick-sched.c | 2 +- - kernel/watchdog.c | 2 +- - 11 files changed, 37 insertions(+), 14 deletions(-) - ---- a/arch/x86/kvm/lapic.c -+++ b/arch/x86/kvm/lapic.c -@@ -2313,7 +2313,7 @@ int kvm_create_lapic(struct kvm_vcpu *vc - apic->vcpu = vcpu; - - hrtimer_init(&apic->lapic_timer.timer, CLOCK_MONOTONIC, -- HRTIMER_MODE_ABS_PINNED); -+ HRTIMER_MODE_ABS_PINNED_HARD); - apic->lapic_timer.timer.function = apic_timer_fn; - if (timer_advance_ns == -1) { - apic->lapic_timer.timer_advance_ns = 1000; ---- a/include/linux/hrtimer.h -+++ b/include/linux/hrtimer.h -@@ -38,6 +38,7 @@ enum hrtimer_mode { - HRTIMER_MODE_REL = 0x01, - HRTIMER_MODE_PINNED = 0x02, - HRTIMER_MODE_SOFT = 0x04, -+ HRTIMER_MODE_HARD = 0x08, - - HRTIMER_MODE_ABS_PINNED = HRTIMER_MODE_ABS | HRTIMER_MODE_PINNED, - HRTIMER_MODE_REL_PINNED = HRTIMER_MODE_REL | HRTIMER_MODE_PINNED, -@@ -48,6 +49,11 @@ enum hrtimer_mode { - HRTIMER_MODE_ABS_PINNED_SOFT = HRTIMER_MODE_ABS_PINNED | HRTIMER_MODE_SOFT, - HRTIMER_MODE_REL_PINNED_SOFT = HRTIMER_MODE_REL_PINNED | HRTIMER_MODE_SOFT, - -+ HRTIMER_MODE_ABS_HARD = HRTIMER_MODE_ABS | HRTIMER_MODE_HARD, -+ HRTIMER_MODE_REL_HARD = HRTIMER_MODE_REL | HRTIMER_MODE_HARD, -+ -+ HRTIMER_MODE_ABS_PINNED_HARD = HRTIMER_MODE_ABS_PINNED | HRTIMER_MODE_HARD, -+ HRTIMER_MODE_REL_PINNED_HARD = HRTIMER_MODE_REL_PINNED | HRTIMER_MODE_HARD, - }; - - /* ---- a/kernel/events/core.c -+++ b/kernel/events/core.c -@@ -1103,7 +1103,7 @@ static void __perf_mux_hrtimer_init(stru - cpuctx->hrtimer_interval = ns_to_ktime(NSEC_PER_MSEC * interval); - - raw_spin_lock_init(&cpuctx->hrtimer_lock); -- hrtimer_init(timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS_PINNED); -+ hrtimer_init(timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS_PINNED_HARD); - timer->function = perf_mux_hrtimer_handler; - } - -@@ -9511,7 +9511,7 @@ static void perf_swevent_init_hrtimer(st - if (!is_sampling_event(event)) - return; - -- hrtimer_init(&hwc->hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); -+ hrtimer_init(&hwc->hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL_HARD); - hwc->hrtimer.function = perf_swevent_hrtimer; - - /* ---- a/kernel/sched/core.c -+++ b/kernel/sched/core.c -@@ -317,7 +317,7 @@ static void hrtick_rq_init(struct rq *rq - rq->hrtick_csd.info = rq; - #endif - -- hrtimer_init(&rq->hrtick_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); -+ hrtimer_init(&rq->hrtick_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL_HARD); - rq->hrtick_timer.function = hrtick; - } - #else /* CONFIG_SCHED_HRTICK */ ---- a/kernel/sched/deadline.c -+++ b/kernel/sched/deadline.c -@@ -1053,7 +1053,7 @@ void init_dl_task_timer(struct sched_dl_ - { - struct hrtimer *timer = &dl_se->dl_timer; - -- hrtimer_init(timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); -+ hrtimer_init(timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL_HARD); - timer->function = dl_task_timer; - } - ---- a/kernel/sched/fair.c -+++ b/kernel/sched/fair.c -@@ -5004,9 +5004,9 @@ void init_cfs_bandwidth(struct cfs_bandw - cfs_b->period = ns_to_ktime(default_cfs_period()); - - INIT_LIST_HEAD(&cfs_b->throttled_cfs_rq); -- hrtimer_init(&cfs_b->period_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS_PINNED); -+ hrtimer_init(&cfs_b->period_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS_PINNED_HARD); - cfs_b->period_timer.function = sched_cfs_period_timer; -- hrtimer_init(&cfs_b->slack_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); -+ hrtimer_init(&cfs_b->slack_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL_HARD); - cfs_b->slack_timer.function = sched_cfs_slack_timer; - cfs_b->distribute_running = 0; - } ---- a/kernel/sched/rt.c -+++ b/kernel/sched/rt.c -@@ -45,8 +45,8 @@ void init_rt_bandwidth(struct rt_bandwid - - raw_spin_lock_init(&rt_b->rt_runtime_lock); - -- hrtimer_init(&rt_b->rt_period_timer, -- CLOCK_MONOTONIC, HRTIMER_MODE_REL); -+ hrtimer_init(&rt_b->rt_period_timer, CLOCK_MONOTONIC, -+ HRTIMER_MODE_REL_HARD); - rt_b->rt_period_timer.function = sched_rt_period_timer; - } - ---- a/kernel/time/hrtimer.c -+++ b/kernel/time/hrtimer.c -@@ -1109,7 +1109,9 @@ void hrtimer_start_range_ns(struct hrtim - * Check whether the HRTIMER_MODE_SOFT bit and hrtimer.is_soft - * match. - */ -+#ifndef CONFIG_PREEMPT_RT_BASE - WARN_ON_ONCE(!(mode & HRTIMER_MODE_SOFT) ^ !timer->is_soft); -+#endif - - base = lock_hrtimer_base(timer, &flags); - -@@ -1269,10 +1271,17 @@ static inline int hrtimer_clockid_to_bas - static void __hrtimer_init(struct hrtimer *timer, clockid_t clock_id, - enum hrtimer_mode mode) - { -- bool softtimer = !!(mode & HRTIMER_MODE_SOFT); -- int base = softtimer ? HRTIMER_MAX_CLOCK_BASES / 2 : 0; -+ bool softtimer; -+ int base; - struct hrtimer_cpu_base *cpu_base; - -+ softtimer = !!(mode & HRTIMER_MODE_SOFT); -+#ifdef CONFIG_PREEMPT_RT_FULL -+ if (!softtimer && !(mode & HRTIMER_MODE_HARD)) -+ softtimer = true; -+#endif -+ base = softtimer ? HRTIMER_MAX_CLOCK_BASES / 2 : 0; -+ - memset(timer, 0, sizeof(struct hrtimer)); - - cpu_base = raw_cpu_ptr(&hrtimer_bases); -@@ -1656,6 +1665,14 @@ static void __hrtimer_init_sleeper(struc - enum hrtimer_mode mode, - struct task_struct *task) - { -+#ifdef CONFIG_PREEMPT_RT_FULL -+ if (!(mode & (HRTIMER_MODE_SOFT | HRTIMER_MODE_HARD))) { -+ if (task_is_realtime(current) || system_state != SYSTEM_RUNNING) -+ mode |= HRTIMER_MODE_HARD; -+ else -+ mode |= HRTIMER_MODE_SOFT; -+ } -+#endif - __hrtimer_init(&sl->timer, clock_id, mode); - sl->timer.function = hrtimer_wakeup; - sl->task = task; ---- a/kernel/time/tick-broadcast-hrtimer.c -+++ b/kernel/time/tick-broadcast-hrtimer.c -@@ -104,7 +104,7 @@ static enum hrtimer_restart bc_handler(s - - void tick_setup_hrtimer_broadcast(void) - { -- hrtimer_init(&bctimer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS); -+ hrtimer_init(&bctimer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS_HARD); - bctimer.function = bc_handler; - clockevents_register_device(&ce_broadcast_hrtimer); - } ---- a/kernel/time/tick-sched.c -+++ b/kernel/time/tick-sched.c -@@ -1327,7 +1327,7 @@ void tick_setup_sched_timer(void) - /* - * Emulate tick processing via per-CPU hrtimers: - */ -- hrtimer_init(&ts->sched_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS); -+ hrtimer_init(&ts->sched_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS_HARD); - ts->sched_timer.function = tick_sched_timer; - - /* Get the next period (per-CPU) */ ---- a/kernel/watchdog.c -+++ b/kernel/watchdog.c -@@ -490,7 +490,7 @@ static void watchdog_enable(unsigned int - * Start the timer first to prevent the NMI watchdog triggering - * before the timer has a chance to fire. - */ -- hrtimer_init(hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); -+ hrtimer_init(hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL_HARD); - hrtimer->function = watchdog_timer_fn; - hrtimer_start(hrtimer, ns_to_ktime(sample_period), - HRTIMER_MODE_REL_PINNED); |