aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Motin <mav@FreeBSD.org>2022-01-07 17:49:21 +0000
committerAlexander Motin <mav@FreeBSD.org>2022-01-07 17:59:16 +0000
commit0e5c50bf60727a5a832da9ba9dac06c057307a76 (patch)
tree4b32dd76f9f5029055c4958f2cd808cdc15a18e7
parentef1b9270da7d13e0a7113a7b6841574b9183ed9b (diff)
downloadsrc-0e5c50bf60727a5a832da9ba9dac06c057307a76.tar.gz
src-0e5c50bf60727a5a832da9ba9dac06c057307a76.zip
cam: Relax callouts precisions.
On large systems even relatively rare callouts may fire many times per second. This should allow them to aggregate better, since we do not require any precision when polling for media change, etc. MFC after: 2 weeks
-rw-r--r--sys/cam/ata/ata_da.c13
-rw-r--r--sys/cam/cam_xpt.c6
-rw-r--r--sys/cam/scsi/scsi_cd.c14
-rw-r--r--sys/cam/scsi/scsi_da.c26
-rw-r--r--sys/cam/scsi/scsi_enc.c4
5 files changed, 36 insertions, 27 deletions
diff --git a/sys/cam/ata/ata_da.c b/sys/cam/ata/ata_da.c
index adfcc0ee1845..26d0d96d026f 100644
--- a/sys/cam/ata/ata_da.c
+++ b/sys/cam/ata/ata_da.c
@@ -1957,9 +1957,9 @@ adaregister(struct cam_periph *periph, void *arg)
* ordered tag to a device.
*/
callout_init_mtx(&softc->sendordered_c, cam_periph_mtx(periph), 0);
- callout_reset(&softc->sendordered_c,
- (ada_default_timeout * hz) / ADA_ORDEREDTAG_INTERVAL,
- adasendorderedtag, softc);
+ callout_reset_sbt(&softc->sendordered_c,
+ SBT_1S / ADA_ORDEREDTAG_INTERVAL * ada_default_timeout, 0,
+ adasendorderedtag, softc, C_PREL(1));
if (ADA_RA >= 0 && softc->flags & ADA_FLAG_CAN_RAHEAD) {
softc->state = ADA_STATE_RAHEAD;
@@ -3541,10 +3541,11 @@ adasendorderedtag(void *arg)
softc->flags &= ~ADA_FLAG_WAS_OTAG;
}
}
+
/* Queue us up again */
- callout_reset(&softc->sendordered_c,
- (ada_default_timeout * hz) / ADA_ORDEREDTAG_INTERVAL,
- adasendorderedtag, softc);
+ callout_schedule_sbt(&softc->sendordered_c,
+ SBT_1S / ADA_ORDEREDTAG_INTERVAL * ada_default_timeout, 0,
+ C_PREL(1));
}
/*
diff --git a/sys/cam/cam_xpt.c b/sys/cam/cam_xpt.c
index d9ecabefe044..b8fc9458ec03 100644
--- a/sys/cam/cam_xpt.c
+++ b/sys/cam/cam_xpt.c
@@ -3043,7 +3043,7 @@ call_sim:
}
callout_reset_sbt(&dev->callout,
- SBT_1MS * crs->release_timeout, 0,
+ SBT_1MS * crs->release_timeout, SBT_1MS,
xpt_release_devq_timeout, dev, 0);
dev->flags |= CAM_DEV_REL_TIMEOUT_PENDING;
@@ -5099,8 +5099,8 @@ xpt_ch_done(void *arg)
{
callout_init(&xsoftc.boot_callout, 1);
- callout_reset_sbt(&xsoftc.boot_callout, SBT_1MS * xsoftc.boot_delay, 0,
- xpt_boot_delay, NULL, 0);
+ callout_reset_sbt(&xsoftc.boot_callout, SBT_1MS * xsoftc.boot_delay,
+ SBT_1MS, xpt_boot_delay, NULL, 0);
}
SYSINIT(xpt_hw_delay, SI_SUB_INT_CONFIG_HOOKS, SI_ORDER_ANY, xpt_ch_done, NULL);
diff --git a/sys/cam/scsi/scsi_cd.c b/sys/cam/scsi/scsi_cd.c
index 3f5cadb44fdc..d1b56d551732 100644
--- a/sys/cam/scsi/scsi_cd.c
+++ b/sys/cam/scsi/scsi_cd.c
@@ -744,9 +744,10 @@ cdregister(struct cam_periph *periph, void *arg)
callout_init_mtx(&softc->mediapoll_c, cam_periph_mtx(periph), 0);
if ((softc->flags & CD_FLAG_DISC_REMOVABLE) &&
(cgd->inq_flags & SID_AEN) == 0 &&
- cd_poll_period != 0)
- callout_reset(&softc->mediapoll_c, cd_poll_period * hz,
- cdmediapoll, periph);
+ cd_poll_period != 0) {
+ callout_reset_sbt(&softc->mediapoll_c, cd_poll_period * SBT_1S,
+ 0, cdmediapoll, periph, C_PREL(1));
+ }
xpt_schedule(periph, CAM_PRIORITY_DEV);
return(CAM_REQ_CMP);
@@ -3134,9 +3135,12 @@ cdmediapoll(void *arg)
xpt_schedule(periph, CAM_PRIORITY_NORMAL);
}
}
+
/* Queue us up again */
- if (cd_poll_period != 0)
- callout_schedule(&softc->mediapoll_c, cd_poll_period * hz);
+ if (cd_poll_period != 0) {
+ callout_schedule_sbt(&softc->mediapoll_c,
+ cd_poll_period * SBT_1S, 0, C_PREL(1));
+ }
}
/*
diff --git a/sys/cam/scsi/scsi_da.c b/sys/cam/scsi/scsi_da.c
index df8791e4b23e..8dde9d5b056e 100644
--- a/sys/cam/scsi/scsi_da.c
+++ b/sys/cam/scsi/scsi_da.c
@@ -2876,9 +2876,9 @@ daregister(struct cam_periph *periph, void *arg)
* ordered tag to a device.
*/
callout_init_mtx(&softc->sendordered_c, cam_periph_mtx(periph), 0);
- callout_reset(&softc->sendordered_c,
- (da_default_timeout * hz) / DA_ORDEREDTAG_INTERVAL,
- dasendorderedtag, periph);
+ callout_reset_sbt(&softc->sendordered_c,
+ SBT_1S / DA_ORDEREDTAG_INTERVAL * da_default_timeout, 0,
+ dasendorderedtag, periph, C_PREL(1));
cam_periph_unlock(periph);
/*
@@ -3003,9 +3003,10 @@ daregister(struct cam_periph *periph, void *arg)
callout_init_mtx(&softc->mediapoll_c, cam_periph_mtx(periph), 0);
if ((softc->flags & DA_FLAG_PACK_REMOVABLE) &&
(cgd->inq_flags & SID_AEN) == 0 &&
- da_poll_period != 0)
- callout_reset(&softc->mediapoll_c, da_poll_period * hz,
- damediapoll, periph);
+ da_poll_period != 0) {
+ callout_reset_sbt(&softc->mediapoll_c, da_poll_period * SBT_1S,
+ 0, damediapoll, periph, C_PREL(1));
+ }
xpt_schedule(periph, CAM_PRIORITY_DEV);
@@ -6035,9 +6036,12 @@ damediapoll(void *arg)
daschedule(periph);
}
}
+
/* Queue us up again */
- if (da_poll_period != 0)
- callout_schedule(&softc->mediapoll_c, da_poll_period * hz);
+ if (da_poll_period != 0) {
+ callout_schedule_sbt(&softc->mediapoll_c,
+ da_poll_period * SBT_1S, 0, C_PREL(1));
+ }
}
static void
@@ -6224,9 +6228,9 @@ dasendorderedtag(void *arg)
}
/* Queue us up again */
- callout_reset(&softc->sendordered_c,
- (da_default_timeout * hz) / DA_ORDEREDTAG_INTERVAL,
- dasendorderedtag, periph);
+ callout_schedule_sbt(&softc->sendordered_c,
+ SBT_1S / DA_ORDEREDTAG_INTERVAL * da_default_timeout, 0,
+ C_PREL(1));
}
/*
diff --git a/sys/cam/scsi/scsi_enc.c b/sys/cam/scsi/scsi_enc.c
index ad6c09c99f58..e01f613514fb 100644
--- a/sys/cam/scsi/scsi_enc.c
+++ b/sys/cam/scsi/scsi_enc.c
@@ -844,8 +844,8 @@ enc_daemon(void *arg)
*/
root_mount_rel(&enc->enc_rootmount);
- callout_reset(&enc->status_updater, 60*hz,
- enc_status_updater, enc);
+ callout_reset_sbt(&enc->status_updater, 60 * SBT_1S, 0,
+ enc_status_updater, enc, C_PREL(1));
cam_periph_sleep(enc->periph, enc->enc_daemon,
PUSER, "idle", 0);