Subject: Re: Behavior of DTR changed between 1.3.3 and 1.4.1?
To: None <port-sparc@NetBSD.ORG>
From: Greg Earle <earle@isolar.DynDNS.ORG>
List: port-sparc
Date: 09/28/1999 16:52:11
> From my quick perusal of the code a few months ago, I
> think that one can either make the serial port handler ignore
> all breaks, or remove the call to the debugger when break is
> detected. That is further up the tree. I don't know which
> is better. Suppose if you need the serial port driver to
> be able to detect break under any circumstances, or on other ports.
Well, as the one who started this thread, some additional data points:
As I mentioned before, when I had my SS20 running 1.3.3 it didn't seem to
drop to the PROM like it started doing when I went to 1.4.1.
Last night I built a new custom kernel on the SS20 and enabled DDB. I can't
recall if I pulled the plug on the console (I would rather use the Mac's
modem port for my Connectix QuickCam, and be able to plug/unplug the SS20
serial console at will, when needed) or if I had to three-finger reboot the
Mac, but when I came home from work, I found the SS20 down in DDB:
db>
db> trace
_zstty_stint(0xf04b2c54, 0x0, 0xf0152e04, 0xf0100d78, 0xf0161800, 0x2711) at
_zstty_stint+0x3c
_zsc_intr_hard(0x8, 0xf04f7f00, 0xf014c000, 0xc30, 0xffff, 0xa00) at
_zsc_intr_hard+0x68
_zshard(0x0, 0xf00f9198, 0x3c788, 0x41c00, 0x4d000, 0x42000) at _zshard+0x40
_sparc_interrupt44c(0x0, 0x0, 0xf0141638, 0x0, 0xffffffff, 0x0) at
_sparc_interrupt44c+0x104
[...]
db> c
Stopped at _Debugger+0x4: jmpl [%o7 + 0x8], %g0
db> c
NetBSD/sparc (isolar) (console)
login:
I notice there's a check for a console break almost immediately near the top
of zstty_stint(). (But if it hit this, why doesn't the DDB stack trace show
a call to zs_abort()?)
I note with interest that I was able to recover from this one by doing a "c"
in DDB, whereas without it I was dropping to the PROM and was unable to do a
continue from the PROM via "go", which puzzles me.
Is there a consensus that if I want the behavior I desire, I need to boot a
non-DDB-enabled kernel, and make a custom mod to zs_abort() to do something
like
...
#elif defined(DDB)
Debugger();
#else
#if defined(IGNORE_CONSOLE_BREAK) /* Defined in kernel config file */
printf("keyboard abort detected; ignored\n");
#else
printf("stopping on keyboard abort\n");
callrom();
#endif
#endif
}
???
- Greg