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 ...

Matthew Dillon dillon at
Tue May 2 23:27:22 PDT 2006

: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
:RAID controller):
:			:
: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.

					Matthew Dillon 
					<dillon at xxxxxxxxxxxxx>

More information about the Commits mailing list