Re: [PATCH v5 5/5] x86/CPU/AMD: Print the reason for the last reset
From: Borislav Petkov
Date: Thu May 01 2025 - 04:32:36 EST
On Wed, Apr 30, 2025 at 02:32:44PM -0500, Mario Limonciello wrote:
> This would work, but would still need to track if "no" known bits were set
> to emit an "unknown" message.
No, when no bits are set, you don't emit anything. Because the information
content of "oh, your system rebooted due to an unknown reason" is minimal and
even actively confusing at best.
Let sleeping dogs lie.
---
diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
index bef871adbf84..9a8c590456d0 100644
--- a/arch/x86/kernel/cpu/amd.c
+++ b/arch/x86/kernel/cpu/amd.c
@@ -1264,10 +1264,9 @@ static const char * const s5_reset_reason_txt[] = {
static __init int print_s5_reset_status_mmio(void)
{
- void __iomem *addr;
unsigned long value;
- int nr_reasons = 0;
- int bit = -1;
+ void __iomem *addr;
+ int i;
if (!cpu_feature_enabled(X86_FEATURE_ZEN))
return 0;
@@ -1279,23 +1278,13 @@ static __init int print_s5_reset_status_mmio(void)
value = ioread32(addr);
iounmap(addr);
- /* Iterate on each bit in the 'value' mask: */
- while (true) {
- bit = find_next_bit(&value, BITS_PER_LONG, bit + 1);
-
- /* Reached the end of the word, no more bits: */
- if (bit >= BITS_PER_LONG) {
- if (!nr_reasons)
- pr_info("x86/amd: Previous system reset reason [0x%08lx]: Unknown\n", value);
- break;
- }
-
- if (!s5_reset_reason_txt[bit])
+ for (i = 0; i <= ARRAY_SIZE(s5_reset_reason_txt); i++) {
+ if (!(value & BIT(i)))
continue;
- nr_reasons++;
- pr_info("x86/amd: Previous system reset reason [0x%08lx]: %s\n",
- value, s5_reset_reason_txt[bit]);
+ if (s5_reset_reason_txt[i])
+ pr_info("x86/amd: Previous system reset reason [0x%08lx]: %s\n",
+ value, s5_reset_reason_txt[i]);
}
return 0;
--
Regards/Gruss,
Boris.
https://people.kernel.org/tglx/notes-about-netiquette