chris@eneevax.UUCP (02/04/84)
I wonder if this particular problem is ubiquitous. I've seen it in two 4.1BSD device drivers now. Index: Unibus Device Drivers: uda.c, ts.c; Fix Description: After a Unibus reset, the console prints "IVMR" errors every once in a while. (IVMR is InValid Map Register). This is caused by a Unibus device that mapped itself to the Unibus and thinks it's still mapped. Typically there is an "sc_mapped" field in the structure describing the device which is not being cleared. Repeat-By: Reset the Unibus after using the UDA50 or TS11. Try to use it again. Fix: In uda.c and in ts.c the "xx_softc" structure has a field called "sc_mapped"; this should be cleared in the reset routine. This seems to be a ``general'' bug. The Unibus reset code clears the UBA map, but the drivers don't know that. I imagine someone forgot to clear sc_mapped in one driver, and every driver since then was written by first copying the buggy code and then modifying it for the particular device. (Interestingly, there is code in ubarelse() to check for zeros and ignore the release. I suppose this is useful for devices which release their UBA resources as soon as they've finished their I/O, but it also serves well to hide this other bug.) -- Chris Torek, Dept of CS, Univeristy of Maryland, College Park, MD ...!umcp-cs!chris chris%umcp-cs@CSNet-Relay