printk: Add this_cpu_in_panic()
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> Link: https://lore.kernel.org/r/20240207134103.1357162-8-john.ogness@linutronix.de Signed-off-by: Petr Mladek <pmladek@suse.com>
This commit is contained in:
parent
0ab7cdd004
commit
36652d0f3b
|
@ -130,6 +130,7 @@ struct printk_message {
|
||||||
};
|
};
|
||||||
|
|
||||||
bool other_cpu_in_panic(void);
|
bool other_cpu_in_panic(void);
|
||||||
|
bool this_cpu_in_panic(void);
|
||||||
bool printk_get_next_message(struct printk_message *pmsg, u64 seq,
|
bool printk_get_next_message(struct printk_message *pmsg, u64 seq,
|
||||||
bool is_extended, bool may_supress);
|
bool is_extended, bool may_supress);
|
||||||
|
|
||||||
|
|
|
@ -347,6 +347,29 @@ static bool panic_in_progress(void)
|
||||||
return unlikely(atomic_read(&panic_cpu) != PANIC_CPU_INVALID);
|
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
|
* This is used for debugging the mess that is the VT code by
|
||||||
* keeping track if we have the console semaphore held. It's
|
* 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 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
|
* console_lock - block the console subsystem from printing
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue