z@rocksvax.UUCP (Jim Ziobro) (12/05/85)
Revisions: 4.2BSD and 4.3BSD (Beta) Index: /sys/vaxuba/dh.c Problem: dm handler fails to lock out interrupts. Repeat by: Toggle the carrier on one of the multiplexors lines. Then watch random login processes get hangup signals. This problem was discovered on an Emulex CS-11 with 32 lines. Fix: Add an spl5/splx to the dm interrupt handler. This is a fix for 4.2: *** dh.c.ucb Fri Jul 29 10:33:35 1983 --- dh.c Wed Dec 4 22:40:35 1985 *************** *** 699,704 register struct uba_device *ui; register struct tty *tp; register struct dmdevice *addr; ui = dminfo[dm]; if (ui == 0) --- 699,705 ----- register struct uba_device *ui; register struct tty *tp; register struct dmdevice *addr; + int s; ui = dminfo[dm]; if (ui == 0) *************** *** 703,708 ui = dminfo[dm]; if (ui == 0) return; addr = (struct dmdevice *)ui->ui_addr; if (addr->dmcsr&DM_DONE) { if (addr->dmcsr&DM_CF) { --- 704,713 ----- ui = dminfo[dm]; if (ui == 0) return; + /* + If you have two dm's the second may interrupt so block it. + */ + s = spl5(); addr = (struct dmdevice *)ui->ui_addr; if (addr->dmcsr&DM_DONE) { if (addr->dmcsr&DM_CF) { *************** *** 731,735 } addr->dmcsr = DM_IE|DM_SE; } } #endif --- 736,741 ----- } addr->dmcsr = DM_IE|DM_SE; } + splx(s); } #endif -- //Z\\ James M. Ziobro Ziobro.Henr@Xerox.ARPA {rochester,amd,sunybcs,ihnp4}!rocksvax!z