Module Name:    src
Committed By:   mrg
Date:           Sun Feb  5 21:18:05 UTC 2023

Modified Files:
        src/sys/kern: subr_prf.c

Log Message:
avoid pserialize usage in early boot

there are DEBUG-only aprint_normal() calls early in eg, ksyms
setup that may happen before eg curcpu() is setup.  this is the
case in sparc64, where it sets up ksyms as early as it can so
that DDB has symbols early, which is before the curcpu() setup
is created, and thus the calls to pserialize_read_enter() and
pserialize_read_exit() attempt to access unmapped cpu_info and
due to being so early, the system faults to the prom.

simply use "cold" to determine whether to skip these pserialize
calls or not.

ok riastradh

XXX: pullup-10


To generate a diff of this commit:
cvs rdiff -u -r1.196 -r1.197 src/sys/kern/subr_prf.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/kern/subr_prf.c
diff -u src/sys/kern/subr_prf.c:1.196 src/sys/kern/subr_prf.c:1.197
--- src/sys/kern/subr_prf.c:1.196	Mon Oct 31 09:14:18 2022
+++ src/sys/kern/subr_prf.c	Sun Feb  5 21:18:05 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: subr_prf.c,v 1.196 2022/10/31 09:14:18 simonb Exp $	*/
+/*	$NetBSD: subr_prf.c,v 1.197 2023/02/05 21:18:05 mrg Exp $	*/
 
 /*-
  * Copyright (c) 1986, 1988, 1991, 1993
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: subr_prf.c,v 1.196 2022/10/31 09:14:18 simonb Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_prf.c,v 1.197 2023/02/05 21:18:05 mrg Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ddb.h"
@@ -401,6 +401,7 @@ putone(int c, int flags, struct tty *tp)
 {
 	struct tty *ctp;
 	int s;
+	bool do_ps = cold;
 
 	ctp = NULL;	/* XXX gcc i386 -Os */
 
@@ -408,7 +409,8 @@ putone(int c, int flags, struct tty *tp)
 	 * Ensure whatever constty points to can't go away while we're
 	 * trying to use it.
 	 */
-	s = pserialize_read_enter();
+	if (__predict_true(do_ps))
+		s = pserialize_read_enter();
 
 	if (panicstr)
 		atomic_store_relaxed(&constty, NULL);
@@ -429,7 +431,8 @@ putone(int c, int flags, struct tty *tp)
 	if ((flags & TOCONS) && ctp == NULL && c != '\0')
 		(*v_putc)(c);
 
-	pserialize_read_exit(s);
+	if (__predict_true(do_ps))
+		pserialize_read_exit(s);
 }
 
 static void

Reply via email to