]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
s390/boot: Improve decompression error reporting
authorVasily Gorbik <gor@linux.ibm.com>
Thu, 12 Dec 2024 15:39:05 +0000 (16:39 +0100)
committerAlexander Gordeev <agordeev@linux.ibm.com>
Sun, 26 Jan 2025 16:24:03 +0000 (17:24 +0100)
Currently, decompression error messages can be very uninformative:
[    0.029853] startup: read error
[    0.040507] startup:  -- System halted

Improve these messages to make it clear that the error originates from
the decompression code. Additionally, on decompression failures, if
bootdebug is enabled, dump the message ring buffer before halting. This
provides more context for diagnosing startup issues.

Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Acked-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
arch/s390/boot/decompressor.c

index f478e8e9cbda4aa384b7ce2e42458036f900d906..03500b9d9fb9aded28c63e3a7623e19367b90fa1 100644 (file)
@@ -9,6 +9,7 @@
 
 #include <linux/kernel.h>
 #include <linux/string.h>
+#include <asm/boot_data.h>
 #include <asm/page.h>
 #include "decompressor.h"
 #include "boot.h"
@@ -63,6 +64,15 @@ static unsigned long free_mem_end_ptr = (unsigned long) _end + BOOT_HEAP_SIZE;
 #include "../../../../lib/decompress_unzstd.c"
 #endif
 
+static void decompress_error(char *m)
+{
+       if (bootdebug)
+               boot_rb_dump();
+       boot_emerg("Decompression error: %s\n", m);
+       boot_emerg(" -- System halted\n");
+       disabled_wait();
+}
+
 unsigned long mem_safe_offset(void)
 {
        return ALIGN(free_mem_end_ptr, PAGE_SIZE);
@@ -71,5 +81,5 @@ unsigned long mem_safe_offset(void)
 void deploy_kernel(void *output)
 {
        __decompress(_compressed_start, _compressed_end - _compressed_start,
-                    NULL, NULL, output, vmlinux.image_size, NULL, error);
+                    NULL, NULL, output, vmlinux.image_size, NULL, decompress_error);
 }