[PATCH v13 02/17] preempt: Reduce NMI_MASK to single bit and restore HARDIRQ_BITS

Lyude Paul posted 17 patches 2 months ago
There is a newer version of this series
[PATCH v13 02/17] preempt: Reduce NMI_MASK to single bit and restore HARDIRQ_BITS
Posted by Lyude Paul 2 months ago
From: Joel Fernandes <joelagnelf@nvidia.com>

Now that NMI nesting is tracked in a separate per-CPU variable
(nmi_nesting), we no longer need multiple bits in preempt_count
for NMI tracking. Reduce NMI_BITS from 3 to 1, using it only to
detect if we're in an NMI.

Signed-off-by: Joel Fernandes <joelaf@google.com>
Signed-off-by: Lyude Paul <lyude@redhat.com>
---
 include/linux/preempt.h | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/include/linux/preempt.h b/include/linux/preempt.h
index 102202185d7a2..9580b972e1545 100644
--- a/include/linux/preempt.h
+++ b/include/linux/preempt.h
@@ -17,6 +17,7 @@
  *
  * - bits 0-7 are the preemption count (max preemption depth: 256)
  * - bits 8-15 are the softirq count (max # of softirqs: 256)
+ * - bit 28 is the NMI flag (no nesting count, tracked separately)
  *
  * The hardirq count could in theory be the same as the number of
  * interrupts in the system, but we run all interrupt handlers with
@@ -24,16 +25,19 @@
  * there are a few palaeontologic drivers which reenable interrupts in
  * the handler, so we need more than one bit here.
  *
+ * NMI nesting depth is tracked in a separate per-CPU variable
+ * (nmi_nesting) to save bits in preempt_count.
+ *
  *         PREEMPT_MASK:	0x000000ff
  *         SOFTIRQ_MASK:	0x0000ff00
  *         HARDIRQ_MASK:	0x000f0000
- *             NMI_MASK:	0x00f00000
+ *             NMI_MASK:	0x10000000
  * PREEMPT_NEED_RESCHED:	0x80000000
  */
 #define PREEMPT_BITS	8
 #define SOFTIRQ_BITS	8
 #define HARDIRQ_BITS	4
-#define NMI_BITS	4
+#define NMI_BITS	1
 
 #define PREEMPT_SHIFT	0
 #define SOFTIRQ_SHIFT	(PREEMPT_SHIFT + PREEMPT_BITS)
-- 
2.51.0
Re: [PATCH v13 02/17] preempt: Reduce NMI_MASK to single bit and restore HARDIRQ_BITS
Posted by Andreas Hindborg 1 month, 2 weeks ago
Lyude Paul <lyude@redhat.com> writes:

> From: Joel Fernandes <joelagnelf@nvidia.com>
>
> Now that NMI nesting is tracked in a separate per-CPU variable
> (nmi_nesting), we no longer need multiple bits in preempt_count
> for NMI tracking. Reduce NMI_BITS from 3 to 1, using it only to
> detect if we're in an NMI.
>
> Signed-off-by: Joel Fernandes <joelaf@google.com>
> Signed-off-by: Lyude Paul <lyude@redhat.com>

The commit summary is mentioning HARDIRQ_BITS, but I don't think that
change is part of this commit.


Best regards,
Andreas Hindborg