summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/fs/dev/sdev_comm.c
diff options
context:
space:
mode:
authorRafael Vanoni <rafael.vanoni@sun.com>2009-11-13 01:32:32 -0800
committerRafael Vanoni <rafael.vanoni@sun.com>2009-11-13 01:32:32 -0800
commitd3d50737e566cade9a08d73d2af95105ac7cd960 (patch)
tree399b76a3f6bf107e2ff506d8f9c3333654b29fc7 /usr/src/uts/common/fs/dev/sdev_comm.c
parent1eff5f7761619411b3c31280fcd96cefc32968b7 (diff)
downloadillumos-joyent-d3d50737e566cade9a08d73d2af95105ac7cd960.tar.gz
PSARC/2009/396 Tickless Kernel Architecture / lbolt decoupling
6860030 tickless clock requires a clock() decoupled lbolt / lbolt64 Portions contributed by Chad Mynhier <cmynhier@gmail.com>
Diffstat (limited to 'usr/src/uts/common/fs/dev/sdev_comm.c')
-rw-r--r--usr/src/uts/common/fs/dev/sdev_comm.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/usr/src/uts/common/fs/dev/sdev_comm.c b/usr/src/uts/common/fs/dev/sdev_comm.c
index 226e323149..2cf5b37db7 100644
--- a/usr/src/uts/common/fs/dev/sdev_comm.c
+++ b/usr/src/uts/common/fs/dev/sdev_comm.c
@@ -110,6 +110,7 @@ sdev_wait4lookup(struct sdev_node *dv, int cmd)
{
clock_t expire;
clock_t rv;
+ clock_t wakeup = drv_usectohz(2 * 1000000);
int rval = ENOENT;
int is_lookup = (cmd == SDEV_LOOKUP);
@@ -129,9 +130,8 @@ sdev_wait4lookup(struct sdev_node *dv, int cmd)
while (DEVNAME_DEVFSADM_IS_RUNNING(devfsadm_state) &&
!sdev_devfsadm_revoked()) {
/* wait 2 sec and check devfsadm completion */
- rv = cv_timedwait_sig(&dv->sdev_lookup_cv,
- &dv->sdev_lookup_lock, ddi_get_lbolt() +
- drv_usectohz(2 * 1000000));
+ rv = cv_reltimedwait_sig(&dv->sdev_lookup_cv,
+ &dv->sdev_lookup_lock, wakeup, TR_CLOCK_TICK);
if (is_lookup && (rv > 0)) {
/* was this node constructed ? */
@@ -233,9 +233,8 @@ sdev_open_upcall_door()
ASSERT(sdev_upcall_door == NULL);
- /* tick value at which wait expires */
- expire = ddi_get_lbolt() +
- drv_usectohz(dev_devfsadm_startup * 1000000);
+ /* timeout expires this many ticks in the future */
+ expire = ddi_get_lbolt() + drv_usectohz(dev_devfsadm_startup * 1000000);
if (sdev_door_upcall_filename == NULL) {
if ((error = sdev_start_devfsadmd()) != 0) {