]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
ice: implement and use rd32_poll_timeout for ice_sq_done timeout
authorJacob Keller <jacob.e.keller@intel.com>
Tue, 6 Aug 2024 20:46:21 +0000 (13:46 -0700)
committerTony Nguyen <anthony.l.nguyen@intel.com>
Mon, 26 Aug 2024 16:34:38 +0000 (09:34 -0700)
commit5f6df173f92eff2d6fa09d74e47e204b0072f82e
tree088aeea5355c03631712846bb9079d9910e4697a
parent18aaa82bd36ae3d4eaa3f1d1d8cf643e39f151cd
ice: implement and use rd32_poll_timeout for ice_sq_done timeout

The ice_sq_done function is used to check the control queue head register
and determine whether or not the control queue processing is done. This
function is called in a loop checking against jiffies for a specified
timeout.

The pattern of reading a register in a loop until a condition is true or a
timeout is reached is a relatively common pattern. In fact, the kernel
provides a read_poll_timeout function implementing this behavior in
<linux/iopoll.h>

Use of read_poll_timeout is preferred over directly coding these loops.
However, using it in the ice driver is a bit more difficult because of the
rd32 wrapper. Implement a rd32_poll_timeout wrapper based on
read_poll_timeout.

Refactor ice_sq_done to use rd32_poll_timeout, replacing the loop calling
ice_sq_done in ice_sq_send_cmd. This simplifies the logic down to a single
ice_sq_done() call.

The implementation of rd32_poll_timeout uses microseconds for its timeout
value, so update the CQ timeout macros used to be specified in microseconds
units as well instead of using HZ for jiffies.

Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel)
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
drivers/net/ethernet/intel/ice/ice_controlq.c
drivers/net/ethernet/intel/ice/ice_controlq.h
drivers/net/ethernet/intel/ice/ice_osdep.h