On 2018-11-15 11:02, Warner Losh wrote:
> Author: imp
> Date: Thu Nov 15 16:02:13 2018
> New Revision: 340450
> URL: https://svnweb.freebsd.org/changeset/base/340450
> 
> Log:
>   When converting ns,us,ms to sbt, return the ceil() of the result
>   rather than the floor(). Returning the floor means that
>   sbttoX(Xtosbt(y)) != y for almost all values of y.  In practice, this
>   results in a difference of at most 1 in the lsb of the sbintime_t.
>   This difference is meaningless for all current users of these
>   functions, but is important for the newly introduced sysctl conversion
>   routines which implicitly rely on the transformation being idempotent.
>   
>   Sponsored by: Netflix, Inc
> 

This seems to break attaching for my mlxen(4), with or without r340451

I don't understand why at this point.

Nov 18 19:28:12 CA-HML3-09 kernel: mlx4_core0: <mlx4_core> mem
0xfbe00000-0xfbefffff,0xfa800000-0xfaffffff irq 48 at device 0.0
numa-domain 1 on pci11
Nov 18 19:28:12 CA-HML3-09 kernel: mlx4_core: Initializing mlx4_core
Nov 18 19:29:12 CA-HML3-09 kernel: mlx4_core0: command 0x4 timed out (go
bit not cleared)
Nov 18 19:29:12 CA-HML3-09 kernel: mlx4_core0: device is going to be reset
Nov 18 19:29:12 CA-HML3-09 kernel: mlx4_core0: device was reset successfully
Nov 18 19:29:13 CA-HML3-09 kernel: mlx4_core0: QUERY_FW command failed,
aborting
Nov 18 19:29:13 CA-HML3-09 kernel: mlx4_core0: Failed to init fw, aborting.
Nov 18 19:29:13 CA-HML3-09 kernel: device_attach: mlx4_core0 attach
returned 5

It works fine under r340449:

Nov 18 19:46:07 CA-HML3-09 kernel: mlx4_core0: <mlx4_core> mem
0xfbe00000-0xfbefffff,0xfa800000-0xfaffffff irq 48 at device 0.0
numa-domain 1 on pci11
Nov 18 19:46:07 CA-HML3-09 kernel: mlx4_core: Mellanox ConnectX core
driver v3.4.1 (October 2017)
Nov 18 19:46:07 CA-HML3-09 kernel: mlx4_core: Initializing mlx4_core
Nov 18 19:46:07 CA-HML3-09 kernel: mlx4_core0: Unable to determine PCI
device chain minimum BW
Nov 18 19:46:07 CA-HML3-09 kernel: mlx4_en mlx4_core0: Activating port:1
Nov 18 19:46:07 CA-HML3-09 kernel: mlxen0: Ethernet address:
00:02:c9:4d:6a:e8
Nov 18 19:46:07 CA-HML3-09 kernel: mlx4_en: mlx4_core0: Port 1: Using 32
TX rings
Nov 18 19:46:07 CA-HML3-09 kernel: mlxen0: link state changed to DOWN
Nov 18 19:46:07 CA-HML3-09 kernel: mlx4_en: mlx4_core0: Port 1: Using 16
RX rings
Nov 18 19:46:07 CA-HML3-09 kernel: mlx4_en: mlxen0: Using 32 TX rings
Nov 18 19:46:07 CA-HML3-09 kernel: mlx4_en: mlxen0: Using 16 RX rings
Nov 18 19:46:07 CA-HML3-09 kernel: mlx4_en: mlxen0: Initializing port
Nov 18 19:46:07 CA-HML3-09 kernel: mlx4_en: mlxen0: Link Down
Nov 18 19:46:07 CA-HML3-09 kernel: mlxen0: link state changed to UP



> Modified:
>   head/sys/sys/time.h
> 
> Modified: head/sys/sys/time.h
> ==============================================================================
> --- head/sys/sys/time.h       Thu Nov 15 08:43:17 2018        (r340449)
> +++ head/sys/sys/time.h       Thu Nov 15 16:02:13 2018        (r340450)
> @@ -161,6 +161,10 @@ sbttobt(sbintime_t _sbt)
>   * Decimal<->sbt conversions.  Multiplying or dividing by SBT_1NS results in
>   * large roundoff errors which sbttons() and nstosbt() avoid.  Millisecond 
> and
>   * microsecond functions are also provided for completeness.
> + *
> + * These functions return the smallest sbt larger or equal to the number of
> + * seconds requested so that sbttoX(Xtosbt(y)) == y. The 1 << 32 - 1 term 
> added
> + * transforms the >> 32 from floor() to ceil().
>   */
>  static __inline int64_t
>  sbttons(sbintime_t _sbt)
> @@ -173,7 +177,7 @@ static __inline sbintime_t
>  nstosbt(int64_t _ns)
>  {
>  
> -     return ((_ns * (((uint64_t)1 << 63) / 500000000)) >> 32);
> +     return ((_ns * (((uint64_t)1 << 63) / 500000000) + (1ull << 32) - 1) >> 
> 32);
>  }
>  
>  static __inline int64_t
> @@ -187,7 +191,7 @@ static __inline sbintime_t
>  ustosbt(int64_t _us)
>  {
>  
> -     return ((_us * (((uint64_t)1 << 63) / 500000)) >> 32);
> +     return ((_us * (((uint64_t)1 << 63) / 500000) + (1ull << 32) - 1) >> 
> 32);
>  }
>  
>  static __inline int64_t
> @@ -201,7 +205,7 @@ static __inline sbintime_t
>  mstosbt(int64_t _ms)
>  {
>  
> -     return ((_ms * (((uint64_t)1 << 63) / 500)) >> 32);
> +     return ((_ms * (((uint64_t)1 << 63) / 500) + (1ull << 32) - 1) >> 32);
>  }
>  
>  /*-
> 


-- 
Allan Jude

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to