On Sat, 2018-03-03 at 18:54 +0000, Hans Petter Selasky wrote:
> Author: hselasky
> Date: Sat Mar  3 18:54:16 2018
> New Revision: 330352
> URL: https://svnweb.freebsd.org/changeset/base/330352
> 
> Log:
>   Implement msleep_interruptible() in the LinuxKPI. While at it use 
> pause_sbt()
>   instead of pause() in the msleep() function to avoid rounding errors when
>   converting delay values forth and back. Add a guard for a delay value
>   of zero milliseconds which is undefined.
>   
>   MFC after:  1 week
>   Requested by:       Johannes Lundberg <johal...@gmail.com>
>   Sponsored by:       Mellanox Technologies
> 
> Modified:
>   head/sys/compat/linuxkpi/common/include/linux/delay.h
>   head/sys/compat/linuxkpi/common/src/linux_schedule.c
> 
> Modified: head/sys/compat/linuxkpi/common/include/linux/delay.h
> ==============================================================================
> --- head/sys/compat/linuxkpi/common/include/linux/delay.h     Sat Mar  3 
> 18:52:19 2018        (r330351)
> +++ head/sys/compat/linuxkpi/common/include/linux/delay.h     Sat Mar  3 
> 18:54:16 2018        (r330352)
> @@ -36,14 +36,20 @@
>  #include 
>  
>  static inline void
> -linux_msleep(int ms)
> +linux_msleep(unsigned int ms)
>  {
> -     pause("lnxsleep", msecs_to_jiffies(ms));
> +     /* guard against invalid values */
> +     if (ms == 0)
> +             ms = 1;
> +     pause_sbt("lnxsleep", SBT_1MS * ms, 0, C_HARDCLOCK);
>  }
>  

To really avoid roundoff errors, use mstosbt(ms) instead of SBT_1MS*ms.

The rounding errors when multiplying or dividing by SBT_1MS is not
severe like it is with SBT_1NS, but the inline functions still do the
arithmetic more correctly to avoid roundoff error.

-- Ian
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to