zfsonlinux/spl — pull request #304 by nedbass (2013-11-01 20:55:18+00:00)
Title: Emulate illumos interface cv_timedwait_hires()

Needed for Illumos #3582. This interface is supposed to support a
variable-resolution timeout with nanosecond granularity. This
implementation rounds up to microsecond resolution, as
nanosecond-precision timing is rarely needed for real-world performance
tuning and may incur unnecessary busy-waiting. usleep_range() is used
if available, otherwise udelay() or msleep() are used depending on the
length of the delay interval.

Add flags from sys/callo.h as these are used to control the behavior of
cv_timedwait_hires(). Specifically,

CALLOUT_FLAG_ABSOLUTE
Normally, the expiration passed to the timeout API functions is
an expiration interval. If this flag is specified, then it is
interpreted as the expiration time itself.

CALLOUT_FLAG_ROUNDUP
Roundup the expiration time to the next resolution boundary. If this
flag is not specified, the expiration time is rounded down.

References:
https://www.illumos.org/issues/3582
illumos/illumos-gate@0689f76