All of lore.kernel.org
 help / color / mirror / Atom feed
From: John Ogness <john.ogness@linutronix.de>
To: Petr Mladek <pmladek@suse.com>
Cc: Sergey Senozhatsky <senozhatsky@chromium.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	linux-kernel@vger.kernel.org
Subject: [PATCH printk v4 07/14] printk: Add this_cpu_in_panic()
Date: Wed,  7 Feb 2024 14:46:56 +0106	[thread overview]
Message-ID: <20240207134103.1357162-8-john.ogness@linutronix.de> (raw)
In-Reply-To: <20240207134103.1357162-1-john.ogness@linutronix.de>

There is already panic_in_progress() and other_cpu_in_panic(),
but checking if the current CPU is the panic CPU must still be
open coded.

Add this_cpu_in_panic() to complete the set.

Signed-off-by: John Ogness <john.ogness@linutronix.de>
Reviewed-by: Petr Mladek <pmladek@suse.com>
---
 kernel/printk/internal.h |  1 +
 kernel/printk/printk.c   | 43 +++++++++++++++++++++-------------------
 2 files changed, 24 insertions(+), 20 deletions(-)

diff --git a/kernel/printk/internal.h b/kernel/printk/internal.h
index 6c2afee5ef62..ac2d9750e5f8 100644
--- a/kernel/printk/internal.h
+++ b/kernel/printk/internal.h
@@ -130,6 +130,7 @@ struct printk_message {
 };
 
 bool other_cpu_in_panic(void);
+bool this_cpu_in_panic(void);
 bool printk_get_next_message(struct printk_message *pmsg, u64 seq,
 			     bool is_extended, bool may_supress);
 
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
index 22bb45d8f2f2..82dc2c7949b7 100644
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
@@ -347,6 +347,29 @@ static bool panic_in_progress(void)
 	return unlikely(atomic_read(&panic_cpu) != PANIC_CPU_INVALID);
 }
 
+/* Return true if a panic is in progress on the current CPU. */
+bool this_cpu_in_panic(void)
+{
+	/*
+	 * We can use raw_smp_processor_id() here because it is impossible for
+	 * the task to be migrated to the panic_cpu, or away from it. If
+	 * panic_cpu has already been set, and we're not currently executing on
+	 * that CPU, then we never will be.
+	 */
+	return unlikely(atomic_read(&panic_cpu) == raw_smp_processor_id());
+}
+
+/*
+ * Return true if a panic is in progress on a remote CPU.
+ *
+ * On true, the local CPU should immediately release any printing resources
+ * that may be needed by the panic CPU.
+ */
+bool other_cpu_in_panic(void)
+{
+	return (panic_in_progress() && !this_cpu_in_panic());
+}
+
 /*
  * This is used for debugging the mess that is the VT code by
  * keeping track if we have the console semaphore held. It's
@@ -2592,26 +2615,6 @@ static int console_cpu_notify(unsigned int cpu)
 	return 0;
 }
 
-/*
- * Return true if a panic is in progress on a remote CPU.
- *
- * On true, the local CPU should immediately release any printing resources
- * that may be needed by the panic CPU.
- */
-bool other_cpu_in_panic(void)
-{
-	if (!panic_in_progress())
-		return false;
-
-	/*
-	 * We can use raw_smp_processor_id() here because it is impossible for
-	 * the task to be migrated to the panic_cpu, or away from it. If
-	 * panic_cpu has already been set, and we're not currently executing on
-	 * that CPU, then we never will be.
-	 */
-	return atomic_read(&panic_cpu) != raw_smp_processor_id();
-}
-
 /**
  * console_lock - block the console subsystem from printing
  *
-- 
2.39.2


  parent reply	other threads:[~2024-02-07 13:41 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-07 13:40 [PATCH printk v4 00/14] fix console flushing John Ogness
2024-02-07 13:40 ` [PATCH printk v4 01/14] printk: nbcon: Relocate 32bit seq macros John Ogness
2024-02-07 13:40 ` [PATCH printk v4 02/14] printk: Adjust mapping for " John Ogness
2024-02-07 13:40 ` [PATCH printk v4 03/14] printk: Use prb_first_seq() as base " John Ogness
2024-02-07 13:40 ` [PATCH printk v4 04/14] printk: ringbuffer: Do not skip non-finalized records with prb_next_seq() John Ogness
2024-02-07 16:00   ` Petr Mladek
2024-02-07 13:40 ` [PATCH printk v4 05/14] printk: ringbuffer: Clarify special lpos values John Ogness
2024-02-07 13:40 ` [PATCH printk v4 06/14] printk: For @suppress_panic_printk check for other CPU in panic John Ogness
2024-02-07 13:40 ` John Ogness [this message]
2024-02-07 13:40 ` [PATCH printk v4 08/14] printk: ringbuffer: Cleanup reader terminology John Ogness
2024-02-07 13:40 ` [PATCH printk v4 09/14] printk: Wait for all reserved records with pr_flush() John Ogness
2024-02-07 13:40 ` [PATCH printk v4 10/14] printk: ringbuffer: Skip non-finalized records in panic John Ogness
2024-02-07 13:41 ` [PATCH printk v4 11/14] printk: Disable passing console lock owner completely during panic() John Ogness
2024-02-07 13:41 ` [PATCH printk v4 12/14] printk: Avoid non-panic CPUs writing to ringbuffer John Ogness
2024-02-07 13:41 ` [PATCH printk v4 13/14] panic: Flush kernel log buffer at the end John Ogness
2024-02-07 13:41 ` [PATCH printk v4 14/14] dump_stack: Do not get cpu_sync for panic CPU John Ogness
2024-02-07 16:16   ` Petr Mladek
2024-02-07 16:18 ` [PATCH printk v4 00/14] fix console flushing Petr Mladek
2024-02-07 16:53   ` Petr Mladek

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240207134103.1357162-8-john.ogness@linutronix.de \
    --to=john.ogness@linutronix.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pmladek@suse.com \
    --cc=rostedt@goodmis.org \
    --cc=senozhatsky@chromium.org \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.