Skip to content
  • Arnd Bergmann's avatar
    infiniband: i40iw, nes: don't use wall time for TCP sequence numbers · 07f3355d
    Arnd Bergmann authored
    
    
    The nes infiniband driver uses current_kernel_time() to get a nanosecond
    granunarity timestamp to initialize its tcp sequence counters. This is
    one of only a few remaining users of that deprecated function, so we
    should try to get rid of it.
    
    Aside from using a deprecated API, there are several problems I see here:
    
    - Using a CLOCK_REALTIME based time source makes it predictable in
      case the time base is synchronized.
    - Using a coarse timestamp means it only gets updated once per jiffie,
      making it even more predictable in order to avoid having to access
      the hardware clock source
    - The upper 2 bits are always zero because the nanoseconds are at most
      999999999.
    
    For the Linux TCP implementation, we use secure_tcp_seq(), which appears
    to be appropriate here as well, and solves all the above problems.
    
    i40iw uses a variant of the same code, so I do that same thing there
    for ipv4. Unlike nes, i40e also supports ipv6, which needs to call
    secure_tcpv6_seq instead.
    
    Acked-by: default avatarShiraz Saleem <shiraz.saleem@intel.com>
    Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
    Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
    07f3355d