|
Thomas Bogendoerfer |
f1692f |
From: Mateusz Palczewski <mateusz.palczewski@intel.com>
|
|
Thomas Bogendoerfer |
f1692f |
Date: Tue, 9 Feb 2021 11:59:38 +0000
|
|
Thomas Bogendoerfer |
f1692f |
Subject: iavf: Fix return of set the new channel count
|
|
Thomas Bogendoerfer |
f1692f |
Patch-mainline: v5.16-rc2
|
|
Thomas Bogendoerfer |
f1692f |
Git-commit: 4e5e6b5d9d1334d3490326b6922a2daaf56a867f
|
|
Thomas Bogendoerfer |
f1692f |
References: jsc#SLE-18385
|
|
Thomas Bogendoerfer |
f1692f |
|
|
Thomas Bogendoerfer |
f1692f |
Fixed return correct code from set the new channel count.
|
|
Thomas Bogendoerfer |
f1692f |
Implemented by check if reset is done in appropriate time.
|
|
Thomas Bogendoerfer |
f1692f |
This solution give a extra time to pf for reset vf in case
|
|
Thomas Bogendoerfer |
f1692f |
when user want set new channel count for all vfs.
|
|
Thomas Bogendoerfer |
f1692f |
Without this patch it is possible to return misleading output
|
|
Thomas Bogendoerfer |
f1692f |
code to user and vf reset not to be correctly performed by pf.
|
|
Thomas Bogendoerfer |
f1692f |
|
|
Thomas Bogendoerfer |
f1692f |
Fixes: 5520deb15326 ("iavf: Enable support for up to 16 queues")
|
|
Thomas Bogendoerfer |
f1692f |
Signed-off-by: Grzegorz Szczurek <grzegorzx.szczurek@intel.com>
|
|
Thomas Bogendoerfer |
f1692f |
Signed-off-by: Mateusz Palczewski <mateusz.palczewski@intel.com>
|
|
Thomas Bogendoerfer |
f1692f |
Tested-by: Konrad Jankowski <konrad0.jankowski@intel.com>
|
|
Thomas Bogendoerfer |
f1692f |
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
|
|
Thomas Bogendoerfer |
f1692f |
Acked-by: Thomas Bogendoerfer <tbogendoerfer@suse.de>
|
|
Thomas Bogendoerfer |
f1692f |
---
|
|
Thomas Bogendoerfer |
f1692f |
drivers/net/ethernet/intel/iavf/iavf_ethtool.c | 15 +++++++++++++++
|
|
Thomas Bogendoerfer |
f1692f |
1 file changed, 15 insertions(+)
|
|
Thomas Bogendoerfer |
f1692f |
|
|
Thomas Bogendoerfer |
f1692f |
--- a/drivers/net/ethernet/intel/iavf/iavf_ethtool.c
|
|
Thomas Bogendoerfer |
f1692f |
+++ b/drivers/net/ethernet/intel/iavf/iavf_ethtool.c
|
|
Thomas Bogendoerfer |
f1692f |
@@ -1776,6 +1776,7 @@ static int iavf_set_channels(struct net_
|
|
Thomas Bogendoerfer |
f1692f |
{
|
|
Thomas Bogendoerfer |
f1692f |
struct iavf_adapter *adapter = netdev_priv(netdev);
|
|
Thomas Bogendoerfer |
f1692f |
u32 num_req = ch->combined_count;
|
|
Thomas Bogendoerfer |
f1692f |
+ int i;
|
|
Thomas Bogendoerfer |
f1692f |
|
|
Thomas Bogendoerfer |
f1692f |
if ((adapter->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_ADQ) &&
|
|
Thomas Bogendoerfer |
f1692f |
adapter->num_tc) {
|
|
Thomas Bogendoerfer |
f1692f |
@@ -1798,6 +1799,20 @@ static int iavf_set_channels(struct net_
|
|
Thomas Bogendoerfer |
f1692f |
adapter->num_req_queues = num_req;
|
|
Thomas Bogendoerfer |
f1692f |
adapter->flags |= IAVF_FLAG_REINIT_ITR_NEEDED;
|
|
Thomas Bogendoerfer |
f1692f |
iavf_schedule_reset(adapter);
|
|
Thomas Bogendoerfer |
f1692f |
+
|
|
Thomas Bogendoerfer |
f1692f |
+ /* wait for the reset is done */
|
|
Thomas Bogendoerfer |
f1692f |
+ for (i = 0; i < IAVF_RESET_WAIT_COMPLETE_COUNT; i++) {
|
|
Thomas Bogendoerfer |
f1692f |
+ msleep(IAVF_RESET_WAIT_MS);
|
|
Thomas Bogendoerfer |
f1692f |
+ if (adapter->flags & IAVF_FLAG_RESET_PENDING)
|
|
Thomas Bogendoerfer |
f1692f |
+ continue;
|
|
Thomas Bogendoerfer |
f1692f |
+ break;
|
|
Thomas Bogendoerfer |
f1692f |
+ }
|
|
Thomas Bogendoerfer |
f1692f |
+ if (i == IAVF_RESET_WAIT_COMPLETE_COUNT) {
|
|
Thomas Bogendoerfer |
f1692f |
+ adapter->flags &= ~IAVF_FLAG_REINIT_ITR_NEEDED;
|
|
Thomas Bogendoerfer |
f1692f |
+ adapter->num_active_queues = num_req;
|
|
Thomas Bogendoerfer |
f1692f |
+ return -EOPNOTSUPP;
|
|
Thomas Bogendoerfer |
f1692f |
+ }
|
|
Thomas Bogendoerfer |
f1692f |
+
|
|
Thomas Bogendoerfer |
f1692f |
return 0;
|
|
Thomas Bogendoerfer |
f1692f |
}
|
|
Thomas Bogendoerfer |
f1692f |
|