Index: sys/cam/cam_xpt.c =================================================================== --- sys/cam/cam_xpt.c +++ sys/cam/cam_xpt.c @@ -2893,9 +2893,9 @@ start_ccb->ccb_h.flags |= CAM_DEV_QFREEZE; } - callout_reset(&dev->callout, - (crs->release_timeout * hz) / 1000, - xpt_release_devq_timeout, dev); + callout_reset_sbt(&dev->callout, + SBT_1MS * crs->release_timeout, 0, + xpt_release_devq_timeout, dev, 0); dev->flags |= CAM_DEV_REL_TIMEOUT_PENDING; @@ -4944,8 +4944,8 @@ periphdriver_init(1); xpt_hold_boot(); callout_init(&xsoftc.boot_callout, 1); - callout_reset(&xsoftc.boot_callout, hz * xsoftc.boot_delay / 1000, - xpt_boot_delay, NULL); + callout_reset_sbt(&xsoftc.boot_callout, SBT_1MS * xsoftc.boot_delay, 0, + xpt_boot_delay, NULL, 0); /* Fire up rescan thread. */ if (kproc_kthread_add(xpt_scanner_thread, NULL, &cam_proc, NULL, 0, 0, "cam", "scanner")) { Index: sys/dev/advansys/advansys.c =================================================================== --- sys/dev/advansys/advansys.c +++ sys/dev/advansys/advansys.c @@ -168,9 +168,9 @@ ccb_h = LIST_FIRST(&adv->pending_ccbs); while (ccb_h != NULL) { cinfo = ccb_h->ccb_cinfo_ptr; - callout_reset(&cinfo->timer, - ccb_h->timeout * hz / 1000, adv_timeout, - ccb_h); + callout_reset_sbt(&cinfo->timer, + SBT_1MS * ccb_h->timeout, 0, + adv_timeout, ccb_h, 0); ccb_h = LIST_NEXT(ccb_h, sim_links.le); } adv->state &= ~ADV_IN_TIMEOUT; @@ -569,8 +569,8 @@ ccb_h->status |= CAM_SIM_QUEUED; LIST_INSERT_HEAD(&adv->pending_ccbs, ccb_h, sim_links.le); /* Schedule our timeout */ - callout_reset(&cinfo->timer, ccb_h->timeout * hz /1000, adv_timeout, - csio); + callout_reset_sbt(&cinfo->timer, SBT_1MS * ccb_h->timeout, 0, + adv_timeout, csio, 0); } static struct adv_ccb_info * Index: sys/dev/advansys/adwcam.c =================================================================== --- sys/dev/advansys/adwcam.c +++ sys/dev/advansys/adwcam.c @@ -322,8 +322,8 @@ acb->state |= ACB_ACTIVE; ccb->ccb_h.status |= CAM_SIM_QUEUED; LIST_INSERT_HEAD(&adw->pending_ccbs, &ccb->ccb_h, sim_links.le); - callout_reset(&acb->timer, (ccb->ccb_h.timeout * hz) / 1000, - adwtimeout, acb); + callout_reset_sbt(&acb->timer, SBT_1MS * ccb->ccb_h.timeout, 0, + adwtimeout, acb, 0); adw_send_acb(adw, acb, acbvtob(adw, acb)); } Index: sys/dev/aha/aha.c =================================================================== --- sys/dev/aha/aha.c +++ sys/dev/aha/aha.c @@ -1047,8 +1047,8 @@ ccb->ccb_h.status |= CAM_SIM_QUEUED; LIST_INSERT_HEAD(&aha->pending_ccbs, &ccb->ccb_h, sim_links.le); - callout_reset(&accb->timer, (ccb->ccb_h.timeout * hz) / 1000, - ahatimeout, accb); + callout_reset_sbt(&accb->timer, SBT_1MS * ccb->ccb_h.timeout, 0, + ahatimeout, accb, 0); /* Tell the adapter about this command */ if (aha->cur_outbox->action_code != AMBO_FREE) { @@ -1181,9 +1181,9 @@ ccb_h = LIST_NEXT(ccb_h, sim_links.le); ahadone(aha, pending_accb, AMBI_ERROR); } else { - callout_reset(&pending_accb->timer, - (ccb_h->timeout * hz) / 1000, - ahatimeout, pending_accb); + callout_reset_sbt(&pending_accb->timer, + SBT_1MS * ccb_h->timeout, 0, ahatimeout, + pending_accb, 0); ccb_h = LIST_NEXT(ccb_h, sim_links.le); } } Index: sys/dev/ahb/ahb.c =================================================================== --- sys/dev/ahb/ahb.c +++ sys/dev/ahb/ahb.c @@ -616,9 +616,9 @@ xpt_done(ccb); } else if (ahb->immed_ecb != NULL) { /* Re-instate timeout */ - callout_reset(&pending_ecb->timer, - (ccb->ccb_h.timeout * hz) / 1000, - ahbtimeout, pending_ecb); + callout_reset_sbt(&pending_ecb->timer, + SBT_1MS * ccb->ccb_h.timeout, 0, ahbtimeout, + pending_ecb, 0); } } @@ -985,8 +985,8 @@ /* Tell the adapter about this command */ ahbqueuembox(ahb, ecb_paddr, ATTN_STARTECB|ccb->ccb_h.target_id); - callout_reset(&ecb->timer, (ccb->ccb_h.timeout * hz) / 1000, ahbtimeout, - ecb); + callout_reset_sbt(&ecb->timer, SBT_1MS * ccb->ccb_h.timeout, 0, + ahbtimeout, ecb, 0); } static void Index: sys/dev/ahci/ahci.c =================================================================== --- sys/dev/ahci/ahci.c +++ sys/dev/ahci/ahci.c @@ -1582,8 +1582,8 @@ return; } /* Start command execution timeout */ - callout_reset(&slot->timeout, (int)ccb->ccb_h.timeout * hz / 2000, - (timeout_t*)ahci_timeout, slot); + callout_reset_sbt(&slot->timeout, SBT_1MS * ccb->ccb_h.timeout / 2, + 0, (timeout_t*)ahci_timeout, slot, 0); return; } @@ -1618,9 +1618,9 @@ continue; if ((ch->toslots & (1 << i)) == 0) continue; - callout_reset(&slot->timeout, - (int)slot->ccb->ccb_h.timeout * hz / 2000, - (timeout_t*)ahci_timeout, slot); + callout_reset_sbt(&slot->timeout, + SBT_1MS * slot->ccb->ccb_h.timeout / 2, 0, + (timeout_t*)ahci_timeout, slot, 0); } } @@ -1652,9 +1652,9 @@ slot->state = AHCI_SLOT_EXECUTING; } - callout_reset(&slot->timeout, - (int)slot->ccb->ccb_h.timeout * hz / 2000, - (timeout_t*)ahci_timeout, slot); + callout_reset_sbt(&slot->timeout, + SBT_1MS * slot->ccb->ccb_h.timeout / 2, 0, + (timeout_t*)ahci_timeout, slot, 0); return; } Index: sys/dev/aic/aic.c =================================================================== --- sys/dev/aic/aic.c +++ sys/dev/aic/aic.c @@ -319,8 +319,8 @@ ccb->ccb_h.status |= CAM_SIM_QUEUED; TAILQ_INSERT_TAIL(&aic->pending_ccbs, &ccb->ccb_h, sim_links.tqe); - callout_reset(&scb->timer, (ccb->ccb_h.timeout * hz) / 1000, - aic_timeout, scb); + callout_reset_sbt(&scb->timer, SBT_1MS * ccb->ccb_h.timeout, 0, + aic_timeout, scb, 0); aic_start(aic); } @@ -1075,9 +1075,9 @@ &pending_scb->ccb->ccb_h, sim_links.tqe); aic_done(aic, pending_scb); } else { - callout_reset(&pending_scb->timer, - (ccb_h->timeout * hz) / 1000, aic_timeout, - pending_scb); + callout_reset_sbt(&pending_scb->timer, + SBT_1MS * ccb_h->timeout, 0, aic_timeout, + pending_scb, 0); ccb_h = TAILQ_NEXT(ccb_h, sim_links.tqe); } } @@ -1094,9 +1094,9 @@ &nexus_scb->ccb->ccb_h, sim_links.tqe); aic_done(aic, nexus_scb); } else { - callout_reset(&nexus_scb->timer, - (ccb_h->timeout * hz) / 1000, aic_timeout, - nexus_scb); + callout_reset_sbt(&nexus_scb->timer, + SBT_1MS * ccb_h->timeout, 0, aic_timeout, + nexus_scb, 0); ccb_h = TAILQ_NEXT(ccb_h, sim_links.tqe); } } Index: sys/dev/arcmsr/arcmsr.c =================================================================== --- sys/dev/arcmsr/arcmsr.c +++ sys/dev/arcmsr/arcmsr.c @@ -2705,7 +2705,9 @@ if (pccb->ccb_h.timeout != CAM_TIME_INFINITY) { arcmsr_callout_init(&srb->ccb_callout); - callout_reset(&srb->ccb_callout, ((pccb->ccb_h.timeout + (ARCMSR_TIMEOUT_DELAY * 1000)) * hz) / 1000, arcmsr_srb_timeout, srb); + callout_reset_sbt(&srb->ccb_callout, SBT_1MS * + (pccb->ccb_h.timeout + (ARCMSR_TIMEOUT_DELAY * 1000)), 0, + arcmsr_srb_timeout, srb, 0); srb->srb_flags |= SRB_FLAG_TIMER_START; } } Index: sys/dev/asr/asr.c =================================================================== --- sys/dev/asr/asr.c +++ sys/dev/asr/asr.c @@ -309,6 +309,7 @@ struct ccb_hdr ccb_h; /* For convenience */ struct ccb_scsiio csio; struct ccb_setasync csa; + struct callout ccb_callout; }; struct Asr_status_mem { @@ -385,21 +386,6 @@ static STAILQ_HEAD(, Asr_softc) Asr_softc_list = STAILQ_HEAD_INITIALIZER(Asr_softc_list); -static __inline void -set_ccb_timeout_ch(union asr_ccb *ccb, struct callout_handle ch) -{ - ccb->ccb_h.sim_priv.entries[0].ptr = ch.callout; -} - -static __inline struct callout_handle -get_ccb_timeout_ch(union asr_ccb *ccb) -{ - struct callout_handle ch; - - ch.callout = ccb->ccb_h.sim_priv.entries[0].ptr; - return ch; -} - /* * Prototypes of the routines we have in this object. */ @@ -712,6 +698,7 @@ new_ccb->ccb_h.pinfo.priority = 1; new_ccb->ccb_h.pinfo.index = CAM_UNQUEUED_INDEX; new_ccb->ccb_h.spriv_ptr0 = sc; + callout_init(&new_ccb->ccb_callout, /*mpsafe*/1); } return (new_ccb); } /* asr_alloc_ccb */ @@ -812,8 +799,9 @@ */ ccb->ccb_h.timeout = 6 * 60 * 1000; } - set_ccb_timeout_ch(ccb, timeout(asr_timeout, (caddr_t)ccb, - (ccb->ccb_h.timeout * hz) / 1000)); + callout_reset_sbt(&ccb->ccb_callout, + SBT_1MS * ccb->ccb_h.timeout, 0, asr_timeout, + (caddr_t)ccb, 0); } splx(s); } /* ASR_ccbAdd */ @@ -827,7 +815,7 @@ int s; s = splcam(); - untimeout(asr_timeout, (caddr_t)ccb, get_ccb_timeout_ch(ccb)); + callout_stop(&ccb->ccb_callout); LIST_REMOVE(&(ccb->ccb_h), sim_links.le); splx(s); } /* ASR_ccbRemove */ @@ -1337,9 +1325,9 @@ cam_sim_unit(xpt_path_sim(ccb->ccb_h.path)), s); if (ASR_reset (sc) == ENXIO) { /* Try again later */ - set_ccb_timeout_ch(ccb, timeout(asr_timeout, - (caddr_t)ccb, - (ccb->ccb_h.timeout * hz) / 1000)); + callout_reset_sbt(&ccb->ccb_callout, + SBT_1MS * ccb->ccb_h.timeout, 0, asr_timeout, + (caddr_t)ccb, 0); } return; } @@ -1353,9 +1341,9 @@ if ((ccb->ccb_h.status & CAM_STATUS_MASK) == CAM_CMD_TIMEOUT) { debug_asr_printf (" AGAIN\nreinitializing adapter\n"); if (ASR_reset (sc) == ENXIO) { - set_ccb_timeout_ch(ccb, timeout(asr_timeout, - (caddr_t)ccb, - (ccb->ccb_h.timeout * hz) / 1000)); + callout_reset_sbt(&ccb->ccb_callout, + SBT_1MS * ccb->ccb_h.timeout, 0, asr_timeout, + (caddr_t)ccb, 0); } splx(s); return; @@ -1364,8 +1352,8 @@ /* If the BUS reset does not take, then an adapter reset is next! */ ccb->ccb_h.status &= ~CAM_STATUS_MASK; ccb->ccb_h.status |= CAM_CMD_TIMEOUT; - set_ccb_timeout_ch(ccb, timeout(asr_timeout, (caddr_t)ccb, - (ccb->ccb_h.timeout * hz) / 1000)); + callout_reset_sbt(&ccb->ccb_callout, SBT_1MS * ccb->ccb_h.timeout, 0, + asr_timeout, (caddr_t)ccb, 0); ASR_resetBus (sc, cam_sim_bus(xpt_path_sim(ccb->ccb_h.path))); xpt_async (AC_BUS_RESET, ccb->ccb_h.path, NULL); splx(s); Index: sys/dev/buslogic/bt.c =================================================================== --- sys/dev/buslogic/bt.c +++ sys/dev/buslogic/bt.c @@ -1465,8 +1465,8 @@ ccb->ccb_h.status |= CAM_SIM_QUEUED; LIST_INSERT_HEAD(&bt->pending_ccbs, &ccb->ccb_h, sim_links.le); - callout_reset(&bccb->timer, (ccb->ccb_h.timeout * hz) / 1000, - bttimeout, bccb); + callout_reset_sbt(&bccb->timer, SBT_1MS * ccb->ccb_h.timeout, 0, + bttimeout, bccb, 0); /* Tell the adapter about this command */ bt->cur_outbox->ccb_addr = btccbvtop(bt, bccb); @@ -1600,9 +1600,9 @@ ccb_h = LIST_NEXT(ccb_h, sim_links.le); btdone(bt, pending_bccb, BMBI_ERROR); } else { - callout_reset(&pending_bccb->timer, - (ccb_h->timeout * hz) / 1000, - bttimeout, pending_bccb); + callout_reset_sbt(&pending_bccb->timer, + SBT_1MS * ccb_h->timeout, 0, bttimeout, + pending_bccb, 0); ccb_h = LIST_NEXT(ccb_h, sim_links.le); } } Index: sys/dev/ciss/ciss.c =================================================================== --- sys/dev/ciss/ciss.c +++ sys/dev/ciss/ciss.c @@ -2414,7 +2414,8 @@ return(error); while ((cr->cr_flags & CISS_REQ_SLEEP) && (error != EWOULDBLOCK)) { - error = msleep(cr, &cr->cr_sc->ciss_mtx, PRIBIO, "cissREQ", (timeout * hz) / 1000); + error = msleep_sbt(cr, &cr->cr_sc->ciss_mtx, PRIBIO, "cissREQ", + SBT_1MS * timeout, 0, 0); } return(error); } Index: sys/dev/dpt/dpt_scsi.c =================================================================== --- sys/dev/dpt/dpt_scsi.c +++ sys/dev/dpt/dpt_scsi.c @@ -793,8 +793,8 @@ dccb->state |= DCCB_ACTIVE; ccb->ccb_h.status |= CAM_SIM_QUEUED; LIST_INSERT_HEAD(&dpt->pending_ccb_list, &ccb->ccb_h, sim_links.le); - callout_reset(&dccb->timer, (ccb->ccb_h.timeout * hz) / 1000, - dpttimeout, dccb); + callout_reset_sbt(&dccb->timer, SBT_1MS * ccb->ccb_h.timeout, 0, + dpttimeout, dccb, 0); if (dpt_send_eata_command(dpt, &dccb->eata_ccb, dccb->eata_ccb.cp_busaddr, EATA_CMD_DMA_SEND_CP, 0, 0, 0, 0) != 0) { Index: sys/dev/firewire/sbp.c =================================================================== --- sys/dev/firewire/sbp.c +++ sys/dev/firewire/sbp.c @@ -1028,8 +1028,8 @@ sbp_scan_dev(struct sbp_dev *sdev) { sdev->status = SBP_DEV_PROBE; - callout_reset(&sdev->target->scan_callout, scan_delay * hz / 1000, - sbp_cam_scan_target, (void *)sdev->target); + callout_reset_sbt(&sdev->target->scan_callout, SBT_1MS * scan_delay, 0, + sbp_cam_scan_target, (void *)sdev->target, 0); } static void @@ -1397,7 +1397,7 @@ start: target->mgm_ocb_cur = ocb; - callout_reset(&target->mgm_ocb_timeout, 5*hz, + callout_reset(&target->mgm_ocb_timeout, 5 * hz, sbp_mgm_timeout, (caddr_t)ocb); xfer = sbp_write_cmd(sdev, FWTCODE_WREQB, 0); if (xfer == NULL) { @@ -2699,9 +2699,11 @@ prev2 = prev = STAILQ_LAST(&sdev->ocbs, sbp_ocb, ocb); STAILQ_INSERT_TAIL(&sdev->ocbs, ocb, ocb); - if (ocb->ccb != NULL) - callout_reset(&ocb->timer, (ocb->ccb->ccb_h.timeout * hz) / 1000, - sbp_timeout, ocb); + if (ocb->ccb != NULL) { + callout_reset_sbt(&ocb->timer, + SBT_1MS * ocb->ccb->ccb_h.timeout, 0, sbp_timeout, + ocb, 0); + } if (use_doorbell && prev == NULL) prev2 = sdev->last_ocb; Index: sys/dev/glxiic/glxiic.c =================================================================== --- sys/dev/glxiic/glxiic.c +++ sys/dev/glxiic/glxiic.c @@ -559,8 +559,8 @@ GLXIIC_ASSERT_LOCKED(sc); - callout_reset(&sc->callout, sc->timeout * 1000 / hz, glxiic_timeout, - sc); + callout_reset_sbt(&sc->callout, SBT_1MS * sc->timeout, 0, + glxiic_timeout, sc, 0); } static void Index: sys/dev/hpt27xx/hpt27xx_os_bsd.c =================================================================== --- sys/dev/hpt27xx/hpt27xx_os_bsd.c +++ sys/dev/hpt27xx/hpt27xx_os_bsd.c @@ -240,8 +240,8 @@ HPT_ASSERT(vbus_ext->ext_type==EXT_TYPE_VBUS); - callout_reset(&vbus_ext->timer, interval * hz / 1000000, - os_timer_for_ldm, vbus_ext); + callout_reset_sbt(&vbus_ext->timer, SBT_1US * interval, 0, + os_timer_for_ldm, vbus_ext, 0); } HPT_TIME os_query_time(void) Index: sys/dev/hptnr/hptnr_os_bsd.c =================================================================== --- sys/dev/hptnr/hptnr_os_bsd.c +++ sys/dev/hptnr/hptnr_os_bsd.c @@ -235,8 +235,8 @@ HPT_ASSERT(vbus_ext->ext_type==EXT_TYPE_VBUS); - callout_reset(&vbus_ext->timer, interval * hz / 1000000, - os_timer_for_ldm, vbus_ext); + callout_reset_sbt(&vbus_ext->timer, SBT_1US * interval, 0, + os_timer_for_ldm, vbus_ext, 0); } HPT_TIME os_query_time(void) Index: sys/dev/hptrr/hptrr_os_bsd.c =================================================================== --- sys/dev/hptrr/hptrr_os_bsd.c +++ sys/dev/hptrr/hptrr_os_bsd.c @@ -221,8 +221,8 @@ HPT_ASSERT(vbus_ext->ext_type==EXT_TYPE_VBUS); - callout_reset(&vbus_ext->timer, interval * hz / 1000000, - os_timer_for_ldm, vbus_ext); + callout_reset_sbt(&vbus_ext->timer, SBT_1US * interval, 0, + os_timer_for_ldm, vbus_ext, 0); } HPT_TIME os_query_time(void) Index: sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c =================================================================== --- sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c +++ sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c @@ -983,9 +983,8 @@ mtx_unlock(&sc->hs_lock); reqp->retries++; - callout_reset(&reqp->callout, - (ccb->ccb_h.timeout * hz) / 1000, - storvsc_timeout, reqp); + callout_reset_sbt(&reqp->callout, SBT_1MS * ccb->ccb_h.timeout, + 0, storvsc_timeout, reqp, 0); #if HVS_TIMEOUT_TEST storvsc_timeout_test(reqp, SEND_DIAGNOSTIC, 0); #endif @@ -1158,9 +1157,9 @@ if (ccb->ccb_h.timeout != CAM_TIME_INFINITY) { callout_init(&reqp->callout, CALLOUT_MPSAFE); - callout_reset(&reqp->callout, - (ccb->ccb_h.timeout * hz) / 1000, - storvsc_timeout, reqp); + callout_reset_sbt(&reqp->callout, + SBT_1MS * ccb->ccb_h.timeout, 0, + storvsc_timeout, reqp, 0); #if HVS_TIMEOUT_TEST cv_init(&reqp->event.cv, "storvsc timeout cv"); mtx_init(&reqp->event.mtx, "storvsc timeout mutex", Index: sys/dev/iir/iir.c =================================================================== --- sys/dev/iir/iir.c +++ sys/dev/iir/iir.c @@ -267,7 +267,7 @@ &gccb->gc_dmamap) != 0) return(1); gccb->gc_map_flag = TRUE; - gccb->gc_scratch = &gdt->sc_gcscratch[GDT_SCRATCH_SZ * i]; + gccb->gc_scratch = &gdt->sc_gcscratch[GDT_SCRATCH_SZ * i]; gccb->gc_scratch_busbase = gdt->sc_gcscratch_busbase + GDT_SCRATCH_SZ * i; callout_init_mtx(&gccb->gc_timeout, &gdt->sc_lock, 0); SLIST_INSERT_HEAD(&gdt->sc_free_gccb, gccb, sle); @@ -1234,8 +1234,8 @@ ccb->ccb_h.status |= CAM_SIM_QUEUED; /* timeout handling */ - callout_reset(&gccb->gc_timeout, (ccb->ccb_h.timeout * hz) / 1000, - iir_timeout, gccb); + callout_reset_sbt(&gccb->gc_timeout, SBT_1MS * ccb->ccb_h.timeout, 0, + iir_timeout, (caddr_t)gccb, 0); gdt->sc_copy_cmd(gdt, gccb); } Index: sys/dev/isci/isci_timer.c =================================================================== --- sys/dev/isci/isci_timer.c +++ sys/dev/isci/isci_timer.c @@ -79,8 +79,8 @@ isci_timer->is_started = TRUE; isci_log_message(3, "TIMER", "start %p %d\n", timer, milliseconds); - callout_reset(&isci_timer->callout, (milliseconds * hz)/1000, - isci_timer_timeout, timer); + callout_reset_sbt(&isci_timer->callout, SBT_1MS * milliseconds, 0, + isci_timer_timeout, timer, 0); } /** Index: sys/dev/mpr/mpr_sas.c =================================================================== --- sys/dev/mpr/mpr_sas.c +++ sys/dev/mpr/mpr_sas.c @@ -1903,8 +1903,8 @@ cm->cm_desc.SCSIIO.DevHandle = htole16(targ->handle); } - callout_reset(&cm->cm_callout, (ccb->ccb_h.timeout * hz) / 1000, - mprsas_scsiio_timeout, cm); + callout_reset_sbt(&cm->cm_callout, SBT_1MS * ccb->ccb_h.timeout, 0, + mprsas_scsiio_timeout, cm, 0); targ->issued++; targ->outstanding++; Index: sys/dev/mps/mps_sas.c =================================================================== --- sys/dev/mps/mps_sas.c +++ sys/dev/mps/mps_sas.c @@ -1839,8 +1839,8 @@ } } - callout_reset(&cm->cm_callout, (ccb->ccb_h.timeout * hz) / 1000, - mpssas_scsiio_timeout, cm); + callout_reset_sbt(&cm->cm_callout, SBT_1MS * ccb->ccb_h.timeout, 0, + mpssas_scsiio_timeout, cm, 0); targ->issued++; targ->outstanding++; Index: sys/dev/mpt/mpt.h =================================================================== --- sys/dev/mpt/mpt.h +++ sys/dev/mpt/mpt.h @@ -771,10 +771,10 @@ #define MPT_UNLOCK(mpt) mtx_unlock(&(mpt)->mpt_lock) #define MPT_OWNED(mpt) mtx_owned(&(mpt)->mpt_lock) #define MPT_LOCK_ASSERT(mpt) mtx_assert(&(mpt)->mpt_lock, MA_OWNED) -#define mpt_sleep(mpt, ident, priority, wmesg, timo) \ - msleep(ident, &(mpt)->mpt_lock, priority, wmesg, timo) -#define mpt_req_timeout(req, ticks, func, arg) \ - callout_reset(&(req)->callout, (ticks), (func), (arg)) +#define mpt_sleep(mpt, ident, priority, wmesg, sbt) \ + msleep_sbt(ident, &(mpt)->mpt_lock, priority, wmesg, sbt, 0, 0) +#define mpt_req_timeout(req, sbt, func, arg) \ + callout_reset_sbt(&(req)->callout, (sbt), 0, (func), (arg), 0) #define mpt_req_untimeout(req, func, arg) \ callout_stop(&(req)->callout) #define mpt_callout_init(mpt, c) \ Index: sys/dev/mpt/mpt.c =================================================================== --- sys/dev/mpt/mpt.c +++ sys/dev/mpt/mpt.c @@ -1320,17 +1320,19 @@ mpt_req_state_t state, mpt_req_state_t mask, int sleep_ok, int time_ms) { - int error; int timeout; u_int saved_cnt; + sbintime_t sbt; /* - * timeout is in ms. 0 indicates infinite wait. - * Convert to ticks or 500us units depending on + * time_ms is in ms, 0 indicates infinite wait. + * Convert to sbintime_t or 500us units depending on * our sleep mode. */ if (sleep_ok != 0) { - timeout = (time_ms * hz) / 1000; + sbt = SBT_1MS * time_ms; + /* Set timeout as well so final timeout check works. */ + timeout = time_ms; } else { timeout = time_ms * 2; } @@ -1339,8 +1341,8 @@ saved_cnt = mpt->reset_cnt; while ((req->state & mask) != state && mpt->reset_cnt == saved_cnt) { if (sleep_ok != 0) { - error = mpt_sleep(mpt, req, PUSER, "mptreq", timeout); - if (error == EWOULDBLOCK) { + if (mpt_sleep(mpt, req, PUSER, "mptreq", sbt) == + EWOULDBLOCK) { timeout = 0; break; } Index: sys/dev/mpt/mpt_cam.c =================================================================== --- sys/dev/mpt/mpt_cam.c +++ sys/dev/mpt/mpt_cam.c @@ -1630,7 +1630,7 @@ ccb->ccb_h.status |= CAM_SIM_QUEUED; if (ccb->ccb_h.timeout != CAM_TIME_INFINITY) { - mpt_req_timeout(req, (ccb->ccb_h.timeout * hz) / 1000, + mpt_req_timeout(req, SBT_1MS * ccb->ccb_h.timeout, mpt_timeout, ccb); } if (mpt->verbose > MPT_PRT_DEBUG) { @@ -2016,7 +2016,7 @@ ccb->ccb_h.status |= CAM_SIM_QUEUED; if (ccb->ccb_h.timeout != CAM_TIME_INFINITY) { - mpt_req_timeout(req, (ccb->ccb_h.timeout * hz) / 1000, + mpt_req_timeout(req, SBT_1MS * ccb->ccb_h.timeout, mpt_timeout, ccb); } if (mpt->verbose > MPT_PRT_DEBUG) { @@ -4752,7 +4752,7 @@ req->serno, tgt->resid); if (ccb) { ccb->ccb_h.status = CAM_SIM_QUEUED | CAM_REQ_INPROG; - mpt_req_timeout(req, 60 * hz, mpt_timeout, ccb); + mpt_req_timeout(req, SBT_1S * 60, mpt_timeout, ccb); } mpt_send_cmd(mpt, req); } Index: sys/dev/mrsas/mrsas_cam.c =================================================================== --- sys/dev/mrsas/mrsas_cam.c +++ sys/dev/mrsas/mrsas_cam.c @@ -378,8 +378,8 @@ * on OCR enable/disable property of Controller from ocr_thread * context. */ - callout_reset(&cmd->cm_callout, (600000 * hz) / 1000, - mrsas_scsiio_timeout, cmd); + callout_reset_sbt(&cmd->cm_callout, SBT_1S * 600, 0, + mrsas_scsiio_timeout, cmd, 0); sc->do_timedout_reset = 1; if (sc->ocr_thread_active) wakeup(&sc->ocr_chan); @@ -530,8 +530,8 @@ /* * Start timer for IO timeout. Default timeout value is 90 second. */ - callout_reset(&cmd->cm_callout, (sc->mrsas_io_timeout * hz) / 1000, - mrsas_scsiio_timeout, cmd); + callout_reset_sbt(&cmd->cm_callout, SBT_1MS * sc->mrsas_io_timeout, 0, + mrsas_scsiio_timeout, cmd, 0); mrsas_atomic_inc(&sc->fw_outstanding); if (mrsas_atomic_read(&sc->fw_outstanding) > sc->io_cmds_highwater) Index: sys/dev/mvs/mvs.c =================================================================== --- sys/dev/mvs/mvs.c +++ sys/dev/mvs/mvs.c @@ -1415,8 +1415,8 @@ } } /* Start command execution timeout */ - callout_reset(&slot->timeout, (int)ccb->ccb_h.timeout * hz / 1000, - (timeout_t*)mvs_timeout, slot); + callout_reset_sbt(&slot->timeout, SBT_1MS * ccb->ccb_h.timeout, 0, + (timeout_t*)mvs_timeout, slot, 0); } /* Must be called with channel locked. */ @@ -1529,8 +1529,8 @@ ATA_OUTL(ch->r_mem, EDMA_REQQIP, ch->dma.workrq_bus + MVS_CRQB_OFFSET + (MVS_CRQB_SIZE * ch->out_idx)); /* Start command execution timeout */ - callout_reset(&slot->timeout, (int)ccb->ccb_h.timeout * hz / 1000, - (timeout_t*)mvs_timeout, slot); + callout_reset_sbt(&slot->timeout, SBT_1MS * ccb->ccb_h.timeout, 0, + (timeout_t*)mvs_timeout, slot, 0); return; } @@ -1567,9 +1567,9 @@ continue; if ((ch->toslots & (1 << i)) == 0) continue; - callout_reset(&slot->timeout, - (int)slot->ccb->ccb_h.timeout * hz / 2000, - (timeout_t*)mvs_timeout, slot); + callout_reset_sbt(&slot->timeout, + SBT_1MS * slot->ccb->ccb_h.timeout / 2, 0, + (timeout_t*)mvs_timeout, slot, 0); } } Index: sys/dev/siis/siis.c =================================================================== --- sys/dev/siis/siis.c +++ sys/dev/siis/siis.c @@ -1120,8 +1120,8 @@ ATA_OUTL(ch->r_mem, SIIS_P_CACTL(slot->slot), prb_bus); ATA_OUTL(ch->r_mem, SIIS_P_CACTH(slot->slot), prb_bus >> 32); /* Start command execution timeout */ - callout_reset(&slot->timeout, (int)ccb->ccb_h.timeout * hz / 1000, - (timeout_t*)siis_timeout, slot); + callout_reset_sbt(&slot->timeout, SBT_1MS * ccb->ccb_h.timeout, 0, + (timeout_t*)siis_timeout, slot, 0); return; } @@ -1162,9 +1162,9 @@ continue; if ((ch->toslots & (1 << i)) == 0) continue; - callout_reset(&slot->timeout, - (int)slot->ccb->ccb_h.timeout * hz / 1000, - (timeout_t*)siis_timeout, slot); + callout_reset_sbt(&slot->timeout, + SBT_1MS * slot->ccb->ccb_h.timeout, 0, + (timeout_t*)siis_timeout, slot, 0); } } Index: sys/dev/sym/sym_hipd.c =================================================================== --- sys/dev/sym/sym_hipd.c +++ sys/dev/sym/sym_hipd.c @@ -2329,8 +2329,8 @@ assert(!(ccb->ccb_h.status & CAM_SIM_QUEUED)); ccb->ccb_h.status = CAM_REQ_INPROG; - callout_reset(&cp->ch, ccb->ccb_h.timeout * hz / 1000, sym_callout, - (caddr_t) ccb); + callout_reset_sbt(&cp->ch, SBT_1MS * ccb->ccb_h.timeout, 0, sym_callout, + (caddr_t)ccb, 0); ccb->ccb_h.status |= CAM_SIM_QUEUED; ccb->ccb_h.sym_hcb_ptr = np; Index: sys/dev/trm/trm.c =================================================================== --- sys/dev/trm/trm.c +++ sys/dev/trm/trm.c @@ -473,10 +473,6 @@ return; } ccb->ccb_h.status |= CAM_SIM_QUEUED; -#if 0 - /* XXX Need a timeout handler */ - ccb->ccb_h.timeout_ch = timeout(trmtimeout, (caddr_t)srb, (ccb->ccb_h.timeout * hz) / 1000); -#endif trm_SendSRB(pACB, pSRB); splx(flags); return; Index: sys/dev/tws/tws_cam.c =================================================================== --- sys/dev/tws/tws_cam.c +++ sys/dev/tws/tws_cam.c @@ -747,7 +747,8 @@ * and submit the I/O. */ sc->stats.scsi_ios++; - callout_reset(&req->timeout, (ccb_h->timeout * hz) / 1000, tws_timeout, req); + callout_reset_sbt(&req->timeout, SBT_1MS * ccb->ccb_h.timeout, 0, + tws_timeout, req, 0); error = tws_map_request(sc, req); return(error); } Index: sys/dev/virtio/scsi/virtio_scsi.c =================================================================== --- sys/dev/virtio/scsi/virtio_scsi.c +++ sys/dev/virtio/scsi/virtio_scsi.c @@ -1087,8 +1087,8 @@ if (ccbh->timeout != CAM_TIME_INFINITY) { req->vsr_flags |= VTSCSI_REQ_FLAG_TIMEOUT_SET; - callout_reset(&req->vsr_callout, ccbh->timeout * hz / 1000, - vtscsi_timedout_scsi_cmd, req); + callout_reset_sbt(&req->vsr_callout, SBT_1MS * ccbh->timeout, + 0, vtscsi_timedout_scsi_cmd, req, 0); } vtscsi_dprintf_req(req, VTSCSI_TRACE, "enqueued req=%p ccb=%p\n",