DragonFly commits List (threaded) for 2006-05
Re: cvs commit: src/sys/amd64/amd64 genassym.c src/sys/bus/cam cam_periph.c src/sys/bus/cam/scsi scsi_cd.c scsi_da.c scsi_pt.c scsi_sa.c src/sys/bus/firewire fwmem.c src/sys/bus/isa isavar.h src/sys/bus/isa/i386 isa_device.h isa_dma.c isa_dma.h ...
:Not sure if this is a bug, but before this commit(or at least until 15th of
:April), the boot message looked like this on my laptop (which doesn't have
:now it looks slightly diffrent and, there's about 15 seconds delay before
:the second line:
: ad0: success setting UDMA4 on Acer chip
: ar: FreeBSD read conf failed
:I found where these diagnostic messages come from, so I added printf's
:in ar_rw() to see what's happening:
:This appears to me that the pre-bufcmd01.patch code would set B_DONE
:somewhare around biodone() (well, I can't find where bp->bio1.bio_done
:is called, so I may be wrong), so the while() loop in above code
:terminated after the first call to tsleep() returned. But in the new code,
:b_cmd remains BUF_CMD_READ until the retry expires. I imagined adding back
: bp->b_cmd = BUF_CMD_DONE;
Ah hah! Stefan Krueger reported the same long delay. I did have to
rewrite the B_DONE operation. The problem is pretty obvious...
bio_done has to be set to a routine which sets b_cmd to BUF_CMD_DONE
(the new way to indicate doneness instead of B_DONE) and then call
wakeup. It can't just call wakeup() like it does now.