Came upon a strange thing with ddi_get_lbolt and cv_timedwait. Following a code fragment to show the issue:
mutex_enter(&ptr->mutex); while (ptr->busy != 0) { clock_t until; (void) ddi_get_lbolt(); /* just call function, seems not to work at first call */ until = ddi_get_lbolt() + drv_usectohz(tmo); if (cv_timedwait(&ptr->cv, &ptr->mutex, until) == -1) { mutex_exit(&ptr->mutex); err = EAGAIN; goto somewhere_else; } } mutex_exit(&mstr_ptr->vv_mutex); In theory the line "(void) ddi_get_lbolt();" should be completely unnecessary. But in case I omit this line and ddi_get_lbolt() has never been called before in the driver cv_timedwait() will not return when timeout is reached without the condition being signaled. Inserting that (in theory useless) line makes everything work fine. Did I understand or do something wrong or is it really a bug? I'm a little bit unsure if I have seen this on all platforms. Last time I was getting into this trap was on Solaris x86 / single cpu machine. This message posted from opensolaris.org _______________________________________________ opensolaris-code mailing list opensolaris-code@opensolaris.org http://mail.opensolaris.org/mailman/listinfo/opensolaris-code