Module Name: src Committed By: martin Date: Tue May 26 13:24:53 UTC 2020
Modified Files: src/sys/dev/ic: com.c Log Message: Make the readahead-while-sending-output code conditional in com_common_putc(), only erquest readahead before interrupts are enabled and when called from comcnputc(). Fixes PR kern/55286. To generate a diff of this commit: cvs rdiff -u -r1.358 -r1.359 src/sys/dev/ic/com.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/dev/ic/com.c diff -u src/sys/dev/ic/com.c:1.358 src/sys/dev/ic/com.c:1.359 --- src/sys/dev/ic/com.c:1.358 Fri May 1 07:27:51 2020 +++ src/sys/dev/ic/com.c Tue May 26 13:24:52 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: com.c,v 1.358 2020/05/01 07:27:51 simonb Exp $ */ +/* $NetBSD: com.c,v 1.359 2020/05/26 13:24:52 martin Exp $ */ /*- * Copyright (c) 1998, 1999, 2004, 2008 The NetBSD Foundation, Inc. @@ -66,7 +66,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: com.c,v 1.358 2020/05/01 07:27:51 simonb Exp $"); +__KERNEL_RCSID(0, "$NetBSD: com.c,v 1.359 2020/05/26 13:24:52 martin Exp $"); #include "opt_com.h" #include "opt_ddb.h" @@ -159,7 +159,7 @@ int com_to_tiocm(struct com_softc *); void com_iflush(struct com_softc *); int com_common_getc(dev_t, struct com_regs *); -static void com_common_putc(dev_t, struct com_regs *, int); +static void com_common_putc(dev_t, struct com_regs *, int, int); int cominit(struct com_regs *, int, int, int, tcflag_t); @@ -2399,12 +2399,12 @@ com_common_getc(dev_t dev, struct com_re } static void -com_common_putc(dev_t dev, struct com_regs *regsp, int c) +com_common_putc(dev_t dev, struct com_regs *regsp, int c, int with_readahead) { int s = splserial(); int cin, stat, timo; - if (com_readaheadcount < MAX_READAHEAD + if (with_readahead && com_readaheadcount < MAX_READAHEAD && ISSET(stat = CSR_READ_1(regsp, COM_REG_LSR), LSR_RXRDY)) { int cn_trapped = 0; cin = CSR_READ_1(regsp, COM_REG_RXDATA); @@ -2572,7 +2572,7 @@ void comcnputc(dev_t dev, int c) { - com_common_putc(dev, &comcons_info.regs, c); + com_common_putc(dev, &comcons_info.regs, c, cold); } void @@ -2641,7 +2641,7 @@ void com_kgdb_putc(void *arg, int c) { - com_common_putc(NODEV, &comkgdbregs, c); + com_common_putc(NODEV, &comkgdbregs, c, 0); } #endif /* KGDB */