Return to BSD News archive
Newsgroups: comp.os.386bsd.bugs
Path: sserve!newshost.anu.edu.au!munnari.oz.au!spool.mu.edu!howland.reston.ans.net!ee.und.ac.za!hippo.ru.ac.za!kudu!g89r4222
From: g89r4222@kudu.ru.ac.za (Geoff Rehmet)
Subject: [FreeBSD 1.0E] lpt.c - fix for driver hangs
Message-ID: <g89r4222.751488540@kudu>
Sender: news@hippo.ru.ac.za (Usenet News Admin)
Organization: Rhodes University, Grahamstown, South Africa
Date: Sun, 24 Oct 1993 18:49:00 GMT
Lines: 76
I have been using the lpt driver again recently under FreeBSD,
and have come up against the problem that if the active job was
deleted from the printer queue, and lpd then attempted to print
the next job, the printer driver hung up. This appears to have
been because of a lost interrupt.
Here's my fix for the problem,
Geoff.
-----------------------------------------------------------------------
*** /sys/i386/isa/lpt.c.orig Sat Oct 23 15:14:46 1993
--- /sys/i386/isa/lpt.c Sat Oct 23 16:50:58 1993
***************
*** 98,106 ****
#endif
void lptout();
- #ifdef DEBUG
- int lptflag = 1;
- #endif
int lptprobe(), lptattach();
void lptintr();
--- 98,103 ----
***************
*** 262,268 ****
return (ENXIO);
sc = lpt_sc + unit;
! if (sc->sc_state) {
lprintf("lp: still open\n") ;
lprintf("still open %x\n", sc->sc_state);
return(EBUSY);
--- 259,266 ----
return (ENXIO);
sc = lpt_sc + unit;
! /* Only check open bit
*/
! if (sc->sc_state & OPEN) {
lprintf("lp: still open\n") ;
lprintf("still open %x\n", sc->sc_state);
return(EBUSY);
***************
*** 446,452 ****
wakeup((caddr_t)sc);
lprintf("w ");
return;
! } else sc->sc_state |= ERROR;
lprintf("sts %x ", sts);
}
--- 444,456 ----
wakeup((caddr_t)sc);
lprintf("w ");
return;
! } else
! {
! sc->sc_state |= ERROR;
! /* if(sc->sc_xfercount == 0) */
! sc->sc_state &= ~OBUSY; /* fool upper half into
thinking not busy */
! wakeup((caddr_t)sc); /* wake up upper half
*/
! }
lprintf("sts %x ", sts);
}
-----------------------------------------------------------------------
--
===========================csgr@alpha.ru.ac.za================================
Geoff Rehmet, Parallel Processing Group, | ____ _ o /\
Computer Science Department, | ___ _-\_<, /\/\/\
Rhodes University, RSA. | (*)/'(*) /\/\/\/\/\