* [PATCH net-next v2 1/2] i40e: Add helper for VF inited state check with timeout
2023-07-14 20:12 [PATCH net-next v2 0/2][pull request] Intel Wired LAN Driver Updates 2023-07-14 (i40e) Tony Nguyen
@ 2023-07-14 20:12 ` Tony Nguyen
2023-07-14 20:12 ` [PATCH net-next v2 2/2] i40e: Wait for pending VF reset in VF set callbacks Tony Nguyen
` (2 subsequent siblings)
3 siblings, 0 replies; 7+ messages in thread
From: Tony Nguyen @ 2023-07-14 20:12 UTC (permalink / raw)
To: davem, kuba, pabeni, edumazet, netdev
Cc: Ivan Vecera, anthony.l.nguyen, leon, simon.horman, Ma Yuying
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>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
---
.../ethernet/intel/i40e/i40e_virtchnl_pf.c | 49 +++++++++++++------
1 file changed, 33 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..b203465357af 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
@@ -4304,6 +4304,38 @@ 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);
+ }
+
+ if (!test_bit(I40E_VF_STATE_INIT, &vf->vf_states)) {
+ dev_err(&vf->pf->pdev->dev,
+ "VF %d still in reset. Try again.\n", vf->vf_id);
+ return false;
+ }
+
+ return true;
+}
+
/**
* i40e_ndo_set_vf_mac
* @netdev: network interface device structure
@@ -4322,7 +4354,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 +4366,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
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH net-next v2 2/2] i40e: Wait for pending VF reset in VF set callbacks
2023-07-14 20:12 [PATCH net-next v2 0/2][pull request] Intel Wired LAN Driver Updates 2023-07-14 (i40e) Tony Nguyen
2023-07-14 20:12 ` [PATCH net-next v2 1/2] i40e: Add helper for VF inited state check with timeout Tony Nguyen
@ 2023-07-14 20:12 ` Tony Nguyen
2023-07-18 10:14 ` [PATCH net-next v2 0/2][pull request] Intel Wired LAN Driver Updates 2023-07-14 (i40e) Paolo Abeni
2023-07-19 11:40 ` patchwork-bot+netdevbpf
3 siblings, 0 replies; 7+ messages in thread
From: Tony Nguyen @ 2023-07-14 20:12 UTC (permalink / raw)
To: davem, kuba, pabeni, edumazet, netdev
Cc: Ivan Vecera, anthony.l.nguyen, leon, simon.horman, Ma Yuying
From: Ivan Vecera <ivecera@redhat.com>
Commit 028daf80117376 ("i40e: Fix attach VF to VM issue") fixed
a race between i40e_ndo_set_vf_mac() and i40e_reset_vf() during
an attachment of VF device to VM. This issue is not related to
setting MAC address only but also VLAN assignment to particular
VF because the newer libvirt sets configured MAC address as well
as an optional VLAN. The same behavior is also for i40e's
.ndo_set_vf_rate and .ndo_set_vf_spoofchk where the callbacks
just check if the VF was initialized but not wait for the finish
of pending reset.
Reproducer:
[root@host ~]# virsh attach-interface guest hostdev --managed 0000:02:02.0 --mac 52:54:00:b4:aa:bb
error: Failed to attach interface
error: Cannot set interface MAC/vlanid to 52:54:00:b4:aa:bb/0 for ifname enp2s0f0 vf 0: Resource temporarily unavailable
Fix this issue by using i40e_check_vf_init_timeout() helper to check
whether a reset of particular VF was finished in i40e's
.ndo_set_vf_vlan, .ndo_set_vf_rate and .ndo_set_vf_spoofchk callbacks.
Tested-by: Ma Yuying <yuma@redhat.com>
Signed-off-by: Ivan Vecera <ivecera@redhat.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
---
.../net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 16 +++++-----------
1 file changed, 5 insertions(+), 11 deletions(-)
diff --git a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
index b203465357af..398fb4854cbe 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
@@ -4468,13 +4468,11 @@ int i40e_ndo_set_vf_port_vlan(struct net_device *netdev, int vf_id,
}
vf = &pf->vf[vf_id];
- vsi = pf->vsi[vf->lan_vsi_idx];
- 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_pvid;
}
+ vsi = pf->vsi[vf->lan_vsi_idx];
if (le16_to_cpu(vsi->info.pvid) == vlanprio)
/* duplicate request, so just return success */
@@ -4618,13 +4616,11 @@ int i40e_ndo_set_vf_bw(struct net_device *netdev, int vf_id, int min_tx_rate,
}
vf = &pf->vf[vf_id];
- vsi = pf->vsi[vf->lan_vsi_idx];
- 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;
}
+ vsi = pf->vsi[vf->lan_vsi_idx];
ret = i40e_set_bw_limit(vsi, vsi->seid, max_tx_rate);
if (ret)
@@ -4791,9 +4787,7 @@ int i40e_ndo_set_vf_spoofchk(struct net_device *netdev, int vf_id, bool enable)
}
vf = &(pf->vf[vf_id]);
- 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 out;
}
--
2.38.1
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [PATCH net-next v2 0/2][pull request] Intel Wired LAN Driver Updates 2023-07-14 (i40e)
2023-07-14 20:12 [PATCH net-next v2 0/2][pull request] Intel Wired LAN Driver Updates 2023-07-14 (i40e) Tony Nguyen
2023-07-14 20:12 ` [PATCH net-next v2 1/2] i40e: Add helper for VF inited state check with timeout Tony Nguyen
2023-07-14 20:12 ` [PATCH net-next v2 2/2] i40e: Wait for pending VF reset in VF set callbacks Tony Nguyen
@ 2023-07-18 10:14 ` Paolo Abeni
2023-07-18 17:04 ` Tony Nguyen
2023-07-21 14:10 ` Ivan Vecera
2023-07-19 11:40 ` patchwork-bot+netdevbpf
3 siblings, 2 replies; 7+ messages in thread
From: Paolo Abeni @ 2023-07-18 10:14 UTC (permalink / raw)
To: Tony Nguyen, davem, kuba, edumazet, netdev
Hi,
On Fri, 2023-07-14 at 13:12 -0700, Tony Nguyen wrote:
> This series contains updates to i40e driver only.
>
> Ivan Vecera adds waiting for VF to complete initialization on VF related
> configuration callbacks.
>
> The following are changes since commit 68af900072c157c0cdce0256968edd15067e1e5a:
> gve: trivial spell fix Recive to Receive
> and are available in the git repository at:
> git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/next-queue 40GbE
>
> Ivan Vecera (2):
> i40e: Add helper for VF inited state check with timeout
> i40e: Wait for pending VF reset in VF set callbacks
>
> .../ethernet/intel/i40e/i40e_virtchnl_pf.c | 65 +++++++++++--------
> 1 file changed, 38 insertions(+), 27 deletions(-)
>
The series LGTM, but is targeting net-next while it looks like -net
material to me (except for the missing Fixes tag ;). Am I missing
something? Could you please clarify?
Thanks!
Paolo
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH net-next v2 0/2][pull request] Intel Wired LAN Driver Updates 2023-07-14 (i40e)
2023-07-18 10:14 ` [PATCH net-next v2 0/2][pull request] Intel Wired LAN Driver Updates 2023-07-14 (i40e) Paolo Abeni
@ 2023-07-18 17:04 ` Tony Nguyen
2023-07-21 14:10 ` Ivan Vecera
1 sibling, 0 replies; 7+ messages in thread
From: Tony Nguyen @ 2023-07-18 17:04 UTC (permalink / raw)
To: Paolo Abeni, davem, kuba, edumazet, netdev, ivecera
On 7/18/2023 3:14 AM, Paolo Abeni wrote:
> Hi,
>
> On Fri, 2023-07-14 at 13:12 -0700, Tony Nguyen wrote:
>> This series contains updates to i40e driver only.
>>
>> Ivan Vecera adds waiting for VF to complete initialization on VF related
>> configuration callbacks.
>>
>> The following are changes since commit 68af900072c157c0cdce0256968edd15067e1e5a:
>> gve: trivial spell fix Recive to Receive
>> and are available in the git repository at:
>> git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/next-queue 40GbE
>>
>> Ivan Vecera (2):
>> i40e: Add helper for VF inited state check with timeout
>> i40e: Wait for pending VF reset in VF set callbacks
>>
>> .../ethernet/intel/i40e/i40e_virtchnl_pf.c | 65 +++++++++++--------
>> 1 file changed, 38 insertions(+), 27 deletions(-)
>>
> The series LGTM, but is targeting net-next while it looks like -net
> material to me (except for the missing Fixes tag ;). Am I missing
> something? Could you please clarify?
This was sent to me with -next as the target [1] so I was following that
intention. Ivan is there a reason you wanted next over net?
Thanks,
Tony
[1]
https://lore.kernel.org/intel-wired-lan/20230613121610.137654-1-ivecera@redhat.com/#t
> Thanks!
>
> Paolo
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH net-next v2 0/2][pull request] Intel Wired LAN Driver Updates 2023-07-14 (i40e)
2023-07-18 10:14 ` [PATCH net-next v2 0/2][pull request] Intel Wired LAN Driver Updates 2023-07-14 (i40e) Paolo Abeni
2023-07-18 17:04 ` Tony Nguyen
@ 2023-07-21 14:10 ` Ivan Vecera
1 sibling, 0 replies; 7+ messages in thread
From: Ivan Vecera @ 2023-07-21 14:10 UTC (permalink / raw)
To: Paolo Abeni, Tony Nguyen, davem, kuba, edumazet, netdev
On 18. 07. 23 12:14, Paolo Abeni wrote:
> Hi,
>
> On Fri, 2023-07-14 at 13:12 -0700, Tony Nguyen wrote:
>> This series contains updates to i40e driver only.
>>
>> Ivan Vecera adds waiting for VF to complete initialization on VF related
>> configuration callbacks.
>>
>> The following are changes since commit 68af900072c157c0cdce0256968edd15067e1e5a:
>> gve: trivial spell fix Recive to Receive
>> and are available in the git repository at:
>> git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/next-queue 40GbE
>>
>> Ivan Vecera (2):
>> i40e: Add helper for VF inited state check with timeout
>> i40e: Wait for pending VF reset in VF set callbacks
>>
>> .../ethernet/intel/i40e/i40e_virtchnl_pf.c | 65 +++++++++++--------
>> 1 file changed, 38 insertions(+), 27 deletions(-)
>>
> The series LGTM, but is targeting net-next while it looks like -net
> material to me (except for the missing Fixes tag ;). Am I missing
> something? Could you please clarify?
>
> Thanks!
>
> Paolo
Next is the fine... You are right there are no Fixes tags as there are
no such commits. So I have selected -next.
Ivan
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH net-next v2 0/2][pull request] Intel Wired LAN Driver Updates 2023-07-14 (i40e)
2023-07-14 20:12 [PATCH net-next v2 0/2][pull request] Intel Wired LAN Driver Updates 2023-07-14 (i40e) Tony Nguyen
` (2 preceding siblings ...)
2023-07-18 10:14 ` [PATCH net-next v2 0/2][pull request] Intel Wired LAN Driver Updates 2023-07-14 (i40e) Paolo Abeni
@ 2023-07-19 11:40 ` patchwork-bot+netdevbpf
3 siblings, 0 replies; 7+ messages in thread
From: patchwork-bot+netdevbpf @ 2023-07-19 11:40 UTC (permalink / raw)
To: Tony Nguyen; +Cc: davem, kuba, pabeni, edumazet, netdev
Hello:
This series was applied to netdev/net-next.git (main)
by Tony Nguyen <anthony.l.nguyen@intel.com>:
On Fri, 14 Jul 2023 13:12:51 -0700 you wrote:
> This series contains updates to i40e driver only.
>
> Ivan Vecera adds waiting for VF to complete initialization on VF related
> configuration callbacks.
>
> The following are changes since commit 68af900072c157c0cdce0256968edd15067e1e5a:
> gve: trivial spell fix Recive to Receive
> and are available in the git repository at:
> git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/next-queue 40GbE
>
> [...]
Here is the summary with links:
- [net-next,v2,1/2] i40e: Add helper for VF inited state check with timeout
https://git.kernel.org/netdev/net-next/c/df84f0ce569d
- [net-next,v2,2/2] i40e: Wait for pending VF reset in VF set callbacks
https://git.kernel.org/netdev/net-next/c/efb6f4a35954
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 7+ messages in thread