All of lore.kernel.org
 help / color / mirror / Atom feed
From: Leon Romanovsky <leon@kernel.org>
To: Tony Nguyen <anthony.l.nguyen@intel.com>
Cc: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com,
	edumazet@google.com, netdev@vger.kernel.org,
	Ivan Vecera <ivecera@redhat.com>, Ma Yuying <yuma@redhat.com>,
	Simon Horman <simon.horman@corigine.com>,
	Rafal Romanowski <rafal.romanowski@intel.com>
Subject: Re: [PATCH net-next 1/2] i40e: Add helper for VF inited state check with timeout
Date: Tue, 11 Jul 2023 15:09:04 +0300	[thread overview]
Message-ID: <20230711120904.GP41919@unreal> (raw)
In-Reply-To: <20230710164030.2821326-2-anthony.l.nguyen@intel.com>

On Mon, Jul 10, 2023 at 09:40:29AM -0700, Tony Nguyen wrote:
> From: Ivan Vecera <ivecera@redhat.com>
> 
> Move the check for VF inited state (with optional up-to 300ms
> timeout to separate helper i40e_check_vf_init_timeout() that
> will be used in the following commit.
> 
> Tested-by: Ma Yuying <yuma@redhat.com>
> Signed-off-by: Ivan Vecera <ivecera@redhat.com>
> Reviewed-by: Simon Horman <simon.horman@corigine.com>
> Tested-by: Rafal Romanowski <rafal.romanowski@intel.com>
> Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
> ---
>  .../ethernet/intel/i40e/i40e_virtchnl_pf.c    | 47 ++++++++++++-------
>  1 file changed, 31 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
> index be59ba3774e1..b84b6b675fa7 100644
> --- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
> +++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
> @@ -4304,6 +4304,36 @@ static int i40e_validate_vf(struct i40e_pf *pf, int vf_id)
>  	return ret;
>  }
>  
> +/**
> + * i40e_check_vf_init_timeout
> + * @vf: the virtual function
> + *
> + * Check that the VF's initialization was successfully done and if not
> + * wait up to 300ms for its finish.
> + *
> + * Returns true when VF is initialized, false on timeout
> + **/
> +static bool i40e_check_vf_init_timeout(struct i40e_vf *vf)
> +{
> +	int i;
> +
> +	/* When the VF is resetting wait until it is done.
> +	 * It can take up to 200 milliseconds, but wait for
> +	 * up to 300 milliseconds to be safe.
> +	 */
> +	for (i = 0; i < 15; i++) {
> +		if (test_bit(I40E_VF_STATE_INIT, &vf->vf_states))
> +			return true;
> +
> +		msleep(20);
> +	}
> +
> +	dev_err(&vf->pf->pdev->dev, "VF %d still in reset. Try again.\n",
> +		vf->vf_id);

This error is not accurate in the edge case, when VF state changed to
be INIT during msleep() while i was 14.

Thanks

> +
> +	return false;
> +}
> +
>  /**
>   * i40e_ndo_set_vf_mac
>   * @netdev: network interface device structure
> @@ -4322,7 +4352,6 @@ int i40e_ndo_set_vf_mac(struct net_device *netdev, int vf_id, u8 *mac)
>  	int ret = 0;
>  	struct hlist_node *h;
>  	int bkt;
> -	u8 i;
>  
>  	if (test_and_set_bit(__I40E_VIRTCHNL_OP_PENDING, pf->state)) {
>  		dev_warn(&pf->pdev->dev, "Unable to configure VFs, other operation is pending.\n");
> @@ -4335,21 +4364,7 @@ int i40e_ndo_set_vf_mac(struct net_device *netdev, int vf_id, u8 *mac)
>  		goto error_param;
>  
>  	vf = &pf->vf[vf_id];
> -
> -	/* When the VF is resetting wait until it is done.
> -	 * It can take up to 200 milliseconds,
> -	 * but wait for up to 300 milliseconds to be safe.
> -	 * Acquire the VSI pointer only after the VF has been
> -	 * properly initialized.
> -	 */
> -	for (i = 0; i < 15; i++) {
> -		if (test_bit(I40E_VF_STATE_INIT, &vf->vf_states))
> -			break;
> -		msleep(20);
> -	}
> -	if (!test_bit(I40E_VF_STATE_INIT, &vf->vf_states)) {
> -		dev_err(&pf->pdev->dev, "VF %d still in reset. Try again.\n",
> -			vf_id);
> +	if (!i40e_check_vf_init_timeout(vf)) {
>  		ret = -EAGAIN;
>  		goto error_param;
>  	}
> -- 
> 2.38.1
> 
> 

  reply	other threads:[~2023-07-11 12:09 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-10 16:40 [PATCH net-next 0/2][pull request] Intel Wired LAN Driver Updates 2023-07-10 (i40e) Tony Nguyen
2023-07-10 16:40 ` [PATCH net-next 1/2] i40e: Add helper for VF inited state check with timeout Tony Nguyen
2023-07-11 12:09   ` Leon Romanovsky [this message]
2023-07-12  0:37     ` Jakub Kicinski
2023-07-12 13:28       ` Ivan Vecera
2023-07-12 13:18     ` Ivan Vecera
2023-07-12 17:31       ` Jakub Kicinski
2023-07-10 16:40 ` [PATCH net-next 2/2] i40e: Wait for pending VF reset in VF set callbacks Tony Nguyen
2023-07-11 12:10   ` Leon Romanovsky
  -- strict thread matches above, loose matches on Subject: below --
2023-06-13 12:16 [PATCH net-next 1/2] i40e: Add helper for VF inited state check with timeout Ivan Vecera
2023-06-14  8:26 ` Simon Horman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230711120904.GP41919@unreal \
    --to=leon@kernel.org \
    --cc=anthony.l.nguyen@intel.com \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=ivecera@redhat.com \
    --cc=kuba@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=rafal.romanowski@intel.com \
    --cc=simon.horman@corigine.com \
    --cc=yuma@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.