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