Given the SCSI_NOSLEEP split here I think the simplest thing we can do is ask to sleep as much as we delay(9).
The question is: if you *could* poll in 10us intervals here with tsleep_nsec(9), would you want to? If so, then this works. If not, what is a more appropriate interval? Index: pv/xbf.c =================================================================== RCS file: /cvs/src/sys/dev/pv/xbf.c,v retrieving revision 1.32 diff -u -p -r1.32 xbf.c --- pv/xbf.c 17 Jul 2017 10:30:03 -0000 1.32 +++ pv/xbf.c 15 Jan 2020 06:20:25 -0000 @@ -738,7 +738,7 @@ xbf_poll_cmd(struct scsi_xfer *xs) if (ISSET(xs->flags, SCSI_NOSLEEP)) delay(10); else - tsleep(xs, PRIBIO, "xbfpoll", 1); + tsleep_nsec(xs, PRIBIO, "xbfpoll", USEC_TO_NSEC(10)); xbf_intr(xs->sc_link->adapter_softc); } while(--timo > 0);