Wed Jul 29 01:55:58 2020 UTC ()
cninit - don't reset cn_tab on entry.

cn_tab can be already set up by the MD startup code to point to an
early console vtable that can still be useful for debugging and as a
fallback.


(uwe)
diff -r1.13 -r1.14 src/sys/dev/cninit.c

cvs diff -r1.13 -r1.14 src/sys/dev/cninit.c (expand / switch to unified diff)

--- src/sys/dev/cninit.c 2020/07/17 02:16:57 1.13
+++ src/sys/dev/cninit.c 2020/07/29 01:55:58 1.14
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1/* $NetBSD: cninit.c,v 1.13 2020/07/17 02:16:57 uwe Exp $ */ 1/* $NetBSD: cninit.c,v 1.14 2020/07/29 01:55:58 uwe Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 1988 University of Utah. 4 * Copyright (c) 1988 University of Utah.
5 * Copyright (c) 1990, 1993 5 * Copyright (c) 1990, 1993
6 * The Regents of the University of California. All rights reserved. 6 * The Regents of the University of California. All rights reserved.
7 * 7 *
8 * This code is derived from software contributed to Berkeley by 8 * This code is derived from software contributed to Berkeley by
9 * the Systems Programming Group of the University of Utah Computer 9 * the Systems Programming Group of the University of Utah Computer
10 * Science Department. 10 * Science Department.
11 * 11 *
12 * Redistribution and use in source and binary forms, with or without 12 * Redistribution and use in source and binary forms, with or without
13 * modification, are permitted provided that the following conditions 13 * modification, are permitted provided that the following conditions
14 * are met: 14 * are met:
@@ -29,72 +29,69 @@ @@ -29,72 +29,69 @@
29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 * SUCH DAMAGE. 34 * SUCH DAMAGE.
35 * 35 *
36 * from: Utah $Hdr: cons.c 1.7 92/01/21$ 36 * from: Utah $Hdr: cons.c 1.7 92/01/21$
37 * 37 *
38 * @(#)cons.c 8.2 (Berkeley) 1/12/94 38 * @(#)cons.c 8.2 (Berkeley) 1/12/94
39 */ 39 */
40 40
41#include <sys/cdefs.h> 41#include <sys/cdefs.h>
42__KERNEL_RCSID(0, "$NetBSD: cninit.c,v 1.13 2020/07/17 02:16:57 uwe Exp $"); 42__KERNEL_RCSID(0, "$NetBSD: cninit.c,v 1.14 2020/07/29 01:55:58 uwe Exp $");
43 43
44#include <sys/param.h> 44#include <sys/param.h>
45#include <sys/proc.h> 45#include <sys/proc.h>
46#include <sys/systm.h> 46#include <sys/systm.h>
47#include <sys/buf.h> 47#include <sys/buf.h>
48#include <sys/ioctl.h> 48#include <sys/ioctl.h>
49#include <sys/tty.h> 49#include <sys/tty.h>
50#include <sys/file.h> 50#include <sys/file.h>
51#include <sys/conf.h> 51#include <sys/conf.h>
52#include <sys/vnode.h> 52#include <sys/vnode.h>
53 53
54#include <dev/cons.h> 54#include <dev/cons.h>
55 55
56void 56void
57cninit(void) 57cninit(void)
58{ 58{
59 struct consdev *bestMatch; 59 struct consdev *bestMatch;
60 struct consdev *cp; 60 struct consdev *cp;
61 61
62 cn_tab = NULL; 
63 
64 /* 62 /*
65 * Collect information about all possible consoles 63 * Collect information about all possible consoles
66 * and find the one with highest priority 64 * and find the one with highest priority
67 */ 65 */
68 bestMatch = NULL; 66 bestMatch = NULL;
69 for (cp = constab; cp->cn_probe; cp++) { 67 for (cp = constab; cp->cn_probe; cp++) {
70 (*cp->cn_probe)(cp); 68 (*cp->cn_probe)(cp);
71 if (cp->cn_pri > CN_DEAD && 69 if (cp->cn_pri > CN_DEAD &&
72 (bestMatch == NULL || cp->cn_pri > bestMatch->cn_pri)) { 70 (bestMatch == NULL || cp->cn_pri > bestMatch->cn_pri)) {
73 bestMatch = cp; 71 bestMatch = cp;
74 } 72 }
75 } 73 }
76 74
77 /* 75 /*
78 * No console, we can handle it 76 * No console, we can handle it
79 */ 77 */
80 if (bestMatch == NULL) 78 if (bestMatch == NULL)
81 return; 79 return;
82 80
83 /* 81 /*
84 * Turn on console 82 * Turn on console
85 */ 83 */
86 { 84 {
87 /* XXX: can this ever be non-NULL? */ 
88 struct consdev *old_cn_tab = cn_tab; 85 struct consdev *old_cn_tab = cn_tab;
89 86
90 /* cn_init may set cn_tab to self */ 87 /* cn_init may set cn_tab to self */
91 (*bestMatch->cn_init)(bestMatch); 88 (*bestMatch->cn_init)(bestMatch);
92 89
93 /* 90 /*
94 * Now let everyone know we have an active console they can 91 * Now let everyone know we have an active console they can
95 * use for diagnostics. If we use cn_tab in the search loop 92 * use for diagnostics. If we use cn_tab in the search loop
96 * then interrupts from the ethernet at boot may cause system 93 * then interrupts from the ethernet at boot may cause system
97 * hang. 94 * hang.
98 */ 95 */
99 if (cn_tab == old_cn_tab) /* if cn_init didn't, set it */ 96 if (cn_tab == old_cn_tab) /* if cn_init didn't, set it */
100 cn_tab = bestMatch; 97 cn_tab = bestMatch;