> -----Original Message-----
> From: Zhang, Peng1X <peng1x.zh...@intel.com>
> Sent: Wednesday, June 1, 2022 1:48 AM
> To: Yang, Qiming <qiming.y...@intel.com>; Zhang, Qi Z
> <qi.z.zh...@intel.com>; dev@dpdk.org
> Cc: Zhang, Peng1X <peng1x.zh...@intel.com>; sta...@dpdk.org
> Subject: [PATCH v4] net/ice: retry sending adminQ command after failure
> 
> From: Peng Zhang <peng1x.zh...@intel.com>
> 
> The origin design is if error happen during the step 3 of following given 
> situation,
> it will return error directly without retry. While in current patch, it will 
> retry
> again and again during certain time. If retry succeed, rule can be 
> continuously
> created. It will improve success rate of creating rule under following given
> situation.
> 
> The given situation as following steps show:
> step 1. Kernel PF and DCF are ready at the beginning.
> step 2. A VF reset happen, kernel send an event to DPDK DCF and set STATE to
> pause.
> step 3. Before DPDK DCF receive the event, it is possible a rule creation is
> ongoing and switch rules, recipe, or vsi list related adminQ operation is
> executing.
> step 4. Then result of operation is failure, it will lead to error return to 
> DPDK
> DCF. DPDK DCF error code will be set as EINVAL, not EAGAIN.
> 
> Fixes: 6bad5047be24 ("net/ice/base: return correct error code")
> Fixes: 453d087ccaff ("net/ice/base: add common functions")
> Cc: sta...@dpdk.org
> 
> Signed-off-by: Peng Zhang <peng1x.zh...@intel.com>
> ---
>  v4 changes:
>  - Add retry mechanism if fail to send adminQ command under given situation.
>  v3 Changes:
>  - Add the situation description, expected error code and incorrect error code
>  - in commit log.
>  v2 Changes:
>  - Modify DCF state checking mechanism.
> 
>  drivers/net/ice/base/ice_common.c |  2 +-  drivers/net/ice/base/ice_switch.c 
> |
> 46 +++++++++++++++++++++++++++----  drivers/net/ice/base/ice_switch.h |  5
> ++++
>  3 files changed, 46 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/net/ice/base/ice_common.c
> b/drivers/net/ice/base/ice_common.c
> index db87bacd97..013c255371 100644
> --- a/drivers/net/ice/base/ice_common.c
> +++ b/drivers/net/ice/base/ice_common.c
> @@ -2127,7 +2127,7 @@ ice_aq_alloc_free_res(struct ice_hw *hw, u16
> num_entries,
> 
>       cmd->num_entries = CPU_TO_LE16(num_entries);
> 
> -     return ice_aq_send_cmd(hw, &desc, buf, buf_size, cd);
> +     return ice_aq_retry_send_cmd(hw, &desc, buf, buf_size, cd);

this is the fix only for DCF, we don't need to retry in a PF driver context.
Better keep the same function name, but implements the retry mechanism inside 
the function, and should only be triggered  when it is in a DCF context

Reply via email to