qwx(4): qwx_dp_rx_tid_del_func: fix dp_reo_cache_flush_elem expiration logic
authorcheloha <cheloha@openbsd.org>
Sat, 24 Feb 2024 15:21:39 +0000 (15:21 +0000)
committercheloha <cheloha@openbsd.org>
Sat, 24 Feb 2024 15:21:39 +0000 (15:21 +0000)
commit81fa3e72ea1cd2761bc813d536bd3ccb190c5c6c
tree666341a0e7ddba31fbeb2e3bad597d55dd209cb9
parent5e446fa12676e6fbdbfd3e1e8671c3fd8b8802bb
qwx(4): qwx_dp_rx_tid_del_func: fix dp_reo_cache_flush_elem expiration logic

Tweak a few things in qwx_dp_rx_tid_del_func() to make it behave
correctly on OpenBSD:

- struct dp_reo_cache_flush_elem: make ts a 64-bit count of nanoseconds

  Linux uses jiffies to timestamp dp_reo_cache_flush_elem.  Although
  OpenBSD has a global jiffies variable, we shouldn't use it outside
  of drm(4).  I would rather not use our global ticks variable, either.
  We can use getnsecuptime(9), a low-res 64-bit nanosecond timestamp,
  as a substitute.

- qwx_dp_rx_tid_del_func: replace gettime(9) with getnsecuptime(9)

- qwx_dp_rx_tid_del_func: convert DP_REO_DESC_FREE_TIMEOUT_MS to nanoseconds

- qwx_dp_rx_tid_del_func: reverse timestamp comparison operator

  This comparison is backwards.  Linux uses the time_after() macro to
  test whether a given entry has expired, so our ported code needs to
  test whether the current uptime is greater than or equal to a given
  entry's expiration time.

Joint effort with stsp@.  Tested by stsp@.

ok stsp@
sys/dev/ic/qwx.c
sys/dev/ic/qwxvar.h