[Intel-wired-lan] [PATCH net v2] iavf: Fix return of set the new channel count
Jankowski, Konrad0
konrad0.jankowski at intel.com
Thu Oct 28 06:44:12 UTC 2021
> -----Original Message-----
> From: Intel-wired-lan <intel-wired-lan-bounces at osuosl.org> On Behalf Of
> Mateusz Palczewski
> Sent: wtorek, 9 lutego 2021 13:00
> To: intel-wired-lan at lists.osuosl.org
> Cc: Palczewski, Mateusz <mateusz.palczewski at intel.com>
> Subject: [Intel-wired-lan] [PATCH net v2] iavf: Fix return of set the new
> channel count
>
> Fixed return correct code from set the new channel count.
> Implemented by check if reset is done in appropriate time.
> This solution give a extra time to pf for reset vf in case when user want set
> new channel count for all vfs.
> Without this patch it is possible to return misleading output code to user and
> vf reset not to be correctly performed by pf.
>
> Fixes: 5520deb15326("iavf: Enable support for up to 16 queues")
> Signed-off-by: Grzegorz Szczurek <grzegorzx.szczurek at intel.com>
> Signed-off-by: Mateusz Palczewski <mateusz.palczewski at intel.com>
> ---
> v2:
> - added missing define in iavf.h file
>
> drivers/net/ethernet/intel/iavf/iavf.h | 1 +
> drivers/net/ethernet/intel/iavf/iavf_ethtool.c | 15 +++++++++++++++
> 2 files changed, 16 insertions(+)
>
> diff --git a/drivers/net/ethernet/intel/iavf/iavf.h
> b/drivers/net/ethernet/intel/iavf/iavf.h
> index bda2a90..09e5b9c 100644
> --- a/drivers/net/ethernet/intel/iavf/iavf.h
> +++ b/drivers/net/ethernet/intel/iavf/iavf.h
> @@ -220,6 +220,7 @@ struct iavf_cloud_filter {
> bool add; /* filter needs to be added */
> };
>
> +#define IAVF_RESET_WAIT_COUNT 500
> #define IAVF_RESET_WAIT_MS 10
> #define IAVF_RESET_WAIT_DETECTED_COUNT 500 #define
> IAVF_RESET_WAIT_COMPLETE_COUNT 2000 diff --git
> a/drivers/net/ethernet/intel/iavf/iavf_ethtool.c
> b/drivers/net/ethernet/intel/iavf/iavf_ethtool.c
> index 3ebfef7..d9ed4d4 100644
> --- a/drivers/net/ethernet/intel/iavf/iavf_ethtool.c
> +++ b/drivers/net/ethernet/intel/iavf/iavf_ethtool.c
> @@ -1522,6 +1522,7 @@ static int iavf_set_channels(struct net_device
> *netdev, {
> struct iavf_adapter *adapter = netdev_priv(netdev);
> u32 num_req = ch->combined_count;
> + int i;
>
> if ((adapter->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_ADQ)
> &&
> adapter->num_tc) {
> @@ -1544,6 +1545,20 @@ static int iavf_set_channels(struct net_device
> *netdev,
> adapter->num_req_queues = num_req;
> adapter->flags |= IAVF_FLAG_REINIT_ITR_NEEDED;
> iavf_schedule_reset(adapter);
> +
> + /* wait for the reset is done */
> + for (i = 0; i < IAVF_RESET_WAIT_COUNT; i++) {
> + msleep(IAVF_RESET_WAIT_MS);
> + if (adapter->flags & IAVF_FLAG_RESET_PENDING)
> + continue;
> + break;
> + }
> + if (i == IAVF_RESET_WAIT_COUNT) {
> + adapter->flags &= ~IAVF_FLAG_REINIT_ITR_NEEDED;
> + adapter->num_active_queues = num_req;
> + return -EOPNOTSUPP;
> + }
> +
> return 0;
> }
>
Tested-by: Konrad Jankowski <konrad0.jankowski at intel.com>
More information about the Intel-wired-lan
mailing list