Module Name:    src
Committed By:   riastradh
Date:           Wed Jan 22 10:03:55 UTC 2025

Modified Files:
        src/sys/arch/amd64/amd64: machdep.c

Log Message:
amd64: Be more verbose about dump failures.

PR kern/59024: dump fails on raid0b


To generate a diff of this commit:
cvs rdiff -u -r1.370 -r1.371 src/sys/arch/amd64/amd64/machdep.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/amd64/amd64/machdep.c
diff -u src/sys/arch/amd64/amd64/machdep.c:1.370 src/sys/arch/amd64/amd64/machdep.c:1.371
--- src/sys/arch/amd64/amd64/machdep.c:1.370	Mon Dec  2 13:31:32 2024
+++ src/sys/arch/amd64/amd64/machdep.c	Wed Jan 22 10:03:55 2025
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.370 2024/12/02 13:31:32 bouyer Exp $	*/
+/*	$NetBSD: machdep.c,v 1.371 2025/01/22 10:03:55 riastradh Exp $	*/
 
 /*
  * Copyright (c) 1996, 1997, 1998, 2000, 2006, 2007, 2008, 2011
@@ -110,7 +110,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.370 2024/12/02 13:31:32 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.371 2025/01/22 10:03:55 riastradh Exp $");
 
 #include "opt_modular.h"
 #include "opt_user_ldt.h"
@@ -1020,15 +1020,26 @@ int
 dump_header_addseg(paddr_t start, paddr_t size)
 {
 	phys_ram_seg_t seg = { start, size };
+	int error;
 
-	return dump_header_addbytes(&seg, sizeof(seg));
+	error = dump_header_addbytes(&seg, sizeof(seg));
+	if (error) {
+		printf("[seg 0x%"PRIxPADDR" bytes 0x%"PRIxPSIZE" failed,"
+		    " error=%d] ", start, size, error);
+	}
+	return error;
 }
 
 int
 dump_header_finish(void)
 {
+	int error;
+
 	memset(dump_headerbuf_ptr, 0, dump_headerbuf_avail);
-	return dump_header_flush();
+	error = dump_header_flush();
+	if (error)
+		printf("[finish failed, error=%d] ", error);
+	return error;
 }
 
 
@@ -1080,24 +1091,37 @@ cpu_dump(void)
 	kcore_seg_t seg;
 	cpu_kcore_hdr_t cpuhdr;
 	const struct bdevsw *bdev;
+	int error;
 
 	bdev = bdevsw_lookup(dumpdev);
-	if (bdev == NULL)
-		return (ENXIO);
+	if (bdev == NULL) {
+		printf("[device 0x%llx ENXIO] ", (unsigned long long)dumpdev);
+		return ENXIO;
+	}
 
 	/*
 	 * Generate a segment header.
 	 */
 	CORE_SETMAGIC(seg, KCORE_MAGIC, MID_MACHINE, CORE_CPU);
 	seg.c_size = dump_header_size - ALIGN(sizeof(seg));
-	(void)dump_header_addbytes(&seg, ALIGN(sizeof(seg)));
+	error = dump_header_addbytes(&seg, ALIGN(sizeof(seg)));
+	if (error) {
+		printf("[segment header %zu bytes failed, error=%d] ",
+		    ALIGN(sizeof(seg)), error);
+		/* blithely proceed (can't fail?) */
+	}
 
 	/*
 	 * Add the machine-dependent header info.
 	 */
 	cpuhdr.ptdpaddr = PDPpaddr;
 	cpuhdr.nmemsegs = dump_nmemsegs;
-	(void)dump_header_addbytes(&cpuhdr, ALIGN(sizeof(cpuhdr)));
+	error = dump_header_addbytes(&cpuhdr, ALIGN(sizeof(cpuhdr)));
+	if (error) {
+		printf("[MD header %zu bytes failed, error=%d] ",
+		    ALIGN(sizeof(cpuhdr)), error);
+		/* blithely proceed (can't fail?) */
+	}
 
 	/*
 	 * Write out the memory segment descriptors.

Reply via email to