[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
More on splbio()
- To: tech_(_at_)_openbsd_(_dot_)_org
- Subject: More on splbio()
- From: briggs_(_at_)_puma_(_dot_)_macbsd_(_dot_)_com
- Date: Sun, 27 Oct 1996 01:14:50 -0400 (EDT)
[ Context: I'm trying to get the mac68k to boot with an ncr53c96 using
a customized esp driver. It's getting hung up trying to mount root
because it's getting SCSI transactions w/o SCSI_POLL, but where the
kernel is basically polling (
s = splbio();
while (!done)
tsleep();
splx(s);
where "done" is waiting for xs->flags &ITS_DONE or the equivalent for
the buf in biowait()). splbio blocks the disk interrupts and since
SCSI_POLL wasn't specified, it is in a state where it needs an
interrupt to continue. ]
OK. As was pointed out to me, the sleep/tsleep will normally cause
someone else to be scheduled. In mountroot(), though, there is just
proc0 so nothing else will ever get scheduled, and the processor stays
at splbio, preventing me from getting the required interrupt. Can't we
still end up with all processes waiting on I/O, so all are running at
splbio and the driver is still waiting on an interrupt which it can't
receive?
I must still be being dense... I don't see how the sparc port works
right now... Can someone please give me some enlightenment?
Thanks,
-allen
--
Allen Briggs - end killing - briggs_(_at_)_macbsd_(_dot_)_com
Visit your host, monkey.org