timer: add hardirq expiry dependency

Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
diff --git a/queue/hrtimer-Introduce-HARD-expiry-mode.patch b/queue/hrtimer-Introduce-HARD-expiry-mode.patch
new file mode 100644
index 0000000..9d6876a
--- /dev/null
+++ b/queue/hrtimer-Introduce-HARD-expiry-mode.patch
@@ -0,0 +1,58 @@
+From ae6683d815895c2be1e60e1942630fa99488055b Mon Sep 17 00:00:00 2001
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Fri, 26 Jul 2019 20:30:51 +0200
+Subject: [PATCH] hrtimer: Introduce HARD expiry mode
+
+commit ae6683d815895c2be1e60e1942630fa99488055b upstream.
+
+On PREEMPT_RT not all hrtimers can be expired in hard interrupt context
+even if that is perfectly fine on a PREEMPT_RT=n kernel, e.g. because they
+take regular spinlocks. Also for latency reasons PREEMPT_RT tries to defer
+most hrtimers' expiry into soft interrupt context.
+
+But there are hrtimers which must be expired in hard interrupt context even
+when PREEMPT_RT is enabled:
+
+  - hrtimers which must expiry in hard interrupt context, e.g. scheduler,
+    perf, watchdog related hrtimers
+
+  - latency critical hrtimers, e.g. nanosleep, ..., kvm lapic timer
+
+Add a new mode flag HRTIMER_MODE_HARD which allows to mark these timers so
+PREEMPT_RT will not move them into softirq expiry mode.
+
+[ tglx: Split out of a larger combo patch. Added changelog ]
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+Link: https://lkml.kernel.org/r/20190726185752.981398465@linutronix.de
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h
+index 24072a0942c0..15c2ba6b6316 100644
+--- 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,
+ };
+ 
+ /*
+-- 
+2.7.4
+
diff --git a/queue/series b/queue/series
index 1d83921..dabe30a 100644
--- a/queue/series
+++ b/queue/series
@@ -149,6 +149,7 @@
 block-keep-bdi-io_pages-in-sync-with-max_sectors_kb-.patch
 debugfs-Check-module-state-before-warning-in-full-op.patch
 irqchip-versatile-fpga-Handle-chained-IRQs-properly.patch
+hrtimer-Introduce-HARD-expiry-mode.patch
 time-sched_clock-Expire-timer-in-hardirq-context.patch
 sched-Avoid-scale-real-weight-down-to-zero.patch
 selftests-x86-ptrace_syscall_32-Fix-no-vDSO-segfault.patch