diff options
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.patch | 78 |
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 + |