svn commit: r330352 - in head/sys/compat/linuxkpi/common: include/linux src
Ian Lepore
ian at freebsd.org
Sat Mar 3 19:14:51 UTC 2018
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 <johalun0 at 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
More information about the svn-src-all
mailing list