summaryrefslogtreecommitdiffstats
path: root/debian/patches-rt/0123-preempt-Cleanup-the-macro-maze-a-bit.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches-rt/0123-preempt-Cleanup-the-macro-maze-a-bit.patch')
-rw-r--r--debian/patches-rt/0123-preempt-Cleanup-the-macro-maze-a-bit.patch78
1 files changed, 78 insertions, 0 deletions
diff --git a/debian/patches-rt/0123-preempt-Cleanup-the-macro-maze-a-bit.patch b/debian/patches-rt/0123-preempt-Cleanup-the-macro-maze-a-bit.patch
new file mode 100644
index 000000000..9e6469ec2
--- /dev/null
+++ b/debian/patches-rt/0123-preempt-Cleanup-the-macro-maze-a-bit.patch
@@ -0,0 +1,78 @@
+From b743317882baa4d44bdc55dea99865bf53623193 Mon Sep 17 00:00:00 2001
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Fri, 13 Nov 2020 15:02:17 +0100
+Subject: [PATCH 123/323] preempt: Cleanup the macro maze a bit
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/5.10/older/patches-5.10.204-rt100.tar.xz
+
+Make the macro maze consistent and prepare it for adding the RT variant for
+BH accounting.
+
+ - Use nmi_count() for the NMI portion of preempt count
+ - Introduce in_hardirq() to make the naming consistent and non-ambiguos
+ - Use the macros to create combined checks (e.g. in_task()) so the
+ softirq representation for RT just falls into place.
+ - Update comments and move the deprecated macros aside
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
+Link: https://lore.kernel.org/r/20201113141733.864469886@linutronix.de
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ include/linux/preempt.h | 30 ++++++++++++++++--------------
+ 1 file changed, 16 insertions(+), 14 deletions(-)
+
+diff --git a/include/linux/preempt.h b/include/linux/preempt.h
+index 6df63cbe8bb0..69cc8b64aa3a 100644
+--- a/include/linux/preempt.h
++++ b/include/linux/preempt.h
+@@ -77,31 +77,33 @@
+ /* preempt_count() and related functions, depends on PREEMPT_NEED_RESCHED */
+ #include <asm/preempt.h>
+
++#define nmi_count() (preempt_count() & NMI_MASK)
+ #define hardirq_count() (preempt_count() & HARDIRQ_MASK)
+ #define softirq_count() (preempt_count() & SOFTIRQ_MASK)
+-#define irq_count() (preempt_count() & (HARDIRQ_MASK | SOFTIRQ_MASK \
+- | NMI_MASK))
++#define irq_count() (nmi_count() | hardirq_count() | softirq_count())
+
+ /*
+- * Are we doing bottom half or hardware interrupt processing?
++ * Macros to retrieve the current execution context:
+ *
+- * in_irq() - We're in (hard) IRQ context
++ * in_nmi() - We're in NMI context
++ * in_hardirq() - We're in hard IRQ context
++ * in_serving_softirq() - We're in softirq context
++ * in_task() - We're in task context
++ */
++#define in_nmi() (nmi_count())
++#define in_hardirq() (hardirq_count())
++#define in_serving_softirq() (softirq_count() & SOFTIRQ_OFFSET)
++#define in_task() (!(in_nmi() | in_hardirq() | in_serving_softirq()))
++
++/*
++ * The following macros are deprecated and should not be used in new code:
++ * in_irq() - Obsolete version of in_hardirq()
+ * in_softirq() - We have BH disabled, or are processing softirqs
+ * in_interrupt() - We're in NMI,IRQ,SoftIRQ context or have BH disabled
+- * in_serving_softirq() - We're in softirq context
+- * in_nmi() - We're in NMI context
+- * in_task() - We're in task context
+- *
+- * Note: due to the BH disabled confusion: in_softirq(),in_interrupt() really
+- * should not be used in new code.
+ */
+ #define in_irq() (hardirq_count())
+ #define in_softirq() (softirq_count())
+ #define in_interrupt() (irq_count())
+-#define in_serving_softirq() (softirq_count() & SOFTIRQ_OFFSET)
+-#define in_nmi() (preempt_count() & NMI_MASK)
+-#define in_task() (!(preempt_count() & \
+- (NMI_MASK | HARDIRQ_MASK | SOFTIRQ_OFFSET)))
+
+ /*
+ * The preempt_count offset after preempt_disable();
+--
+2.43.0
+