[Intel-wired-lan] [PATCH 2/9] ixgbevf: add ethtool private flag for legacy Rx

Singh, Krishneil K krishneil.k.singh at intel.com
Mon Feb 26 16:02:38 UTC 2018


> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces at osuosl.org] On Behalf Of
> Emil Tantilov
> Sent: Tuesday, January 30, 2018 4:51 PM
> To: intel-wired-lan at lists.osuosl.org
> Subject: [Intel-wired-lan] [PATCH 2/9] ixgbevf: add ethtool private flag for
> legacy Rx
> 
> Introduce legacy-rx private flag that will allow switching between the
> old and new (build_skb based) Rx code paths. The implementation is the
> same as in commit e08912985b29
> ("igb: Add support for ethtool private flag to allow use of legacy Rx")
> 
> This provides a means of validating the legacy Rx path in the event that
> we are forced to fall back.  At some point in the future when we are
> convinced we don't need it anymore we might be able to drop the legacy-rx
> flag.
> 
> Signed-off-by: Emil Tantilov <emil.s.tantilov at intel.com>
> ---
>  drivers/net/ethernet/intel/ixgbevf/ethtool.c |   48
> ++++++++++++++++++++++++++
>  drivers/net/ethernet/intel/ixgbevf/ixgbevf.h |    2 +
>  2 files changed, 50 insertions(+)
> 
> diff --git a/drivers/net/ethernet/intel/ixgbevf/ethtool.c
> b/drivers/net/ethernet/intel/ixgbevf/ethtool.c
> index 4400e49..e7623fe 100644
> --- a/drivers/net/ethernet/intel/ixgbevf/ethtool.c
> +++ b/drivers/net/ethernet/intel/ixgbevf/ethtool.c
> @@ -94,6 +94,13 @@ struct ixgbe_stats {
> 
>  #define IXGBEVF_TEST_LEN (sizeof(ixgbe_gstrings_test) / ETH_GSTRING_LEN)
> 
> +static const char ixgbevf_priv_flags_strings[][ETH_GSTRING_LEN] = {
> +#define IXGBEVF_PRIV_FLAGS_LEGACY_RX	BIT(0)
> +	"legacy-rx",
> +};
> +
> +#define IXGBEVF_PRIV_FLAGS_STR_LEN
> ARRAY_SIZE(ixgbevf_priv_flags_strings)
> +
>  static int ixgbevf_get_link_ksettings(struct net_device *netdev,
>  				      struct ethtool_link_ksettings *cmd)
>  {
> @@ -241,6 +248,8 @@ static void ixgbevf_get_drvinfo(struct net_device
> *netdev,
>  		sizeof(drvinfo->version));
>  	strlcpy(drvinfo->bus_info, pci_name(adapter->pdev),
>  		sizeof(drvinfo->bus_info));
> +
> +	drvinfo->n_priv_flags = IXGBEVF_PRIV_FLAGS_STR_LEN;
>  }
> 
>  static void ixgbevf_get_ringparam(struct net_device *netdev,
> @@ -392,6 +401,8 @@ static int ixgbevf_get_sset_count(struct net_device
> *netdev, int stringset)
>  		return IXGBEVF_TEST_LEN;
>  	case ETH_SS_STATS:
>  		return IXGBEVF_STATS_LEN;
> +	case ETH_SS_PRIV_FLAGS:
> +		return IXGBEVF_PRIV_FLAGS_STR_LEN;
>  	default:
>  		return -EINVAL;
>  	}
> @@ -496,6 +507,10 @@ static void ixgbevf_get_strings(struct net_device
> *netdev, u32 stringset,
>  			p += ETH_GSTRING_LEN;
>  		}
>  		break;
> +	case ETH_SS_PRIV_FLAGS:
> +		memcpy(data, ixgbevf_priv_flags_strings,
> +		       IXGBEVF_PRIV_FLAGS_STR_LEN * ETH_GSTRING_LEN);
> +		break;
>  	}
>  }
> 
> @@ -888,6 +903,37 @@ static int ixgbevf_get_rxfh(struct net_device *netdev,
> u32 *indir, u8 *key,
>  	return err;
>  }
> 
> +static u32 ixgbevf_get_priv_flags(struct net_device *netdev)
> +{
> +	struct ixgbevf_adapter *adapter = netdev_priv(netdev);
> +	u32 priv_flags = 0;
> +
> +	if (adapter->flags & IXGBEVF_FLAGS_LEGACY_RX)
> +		priv_flags |= IXGBEVF_PRIV_FLAGS_LEGACY_RX;
> +
> +	return priv_flags;
> +}
> +
> +static int ixgbevf_set_priv_flags(struct net_device *netdev, u32 priv_flags)
> +{
> +	struct ixgbevf_adapter *adapter = netdev_priv(netdev);
> +	unsigned int flags = adapter->flags;
> +
> +	flags &= ~IXGBEVF_FLAGS_LEGACY_RX;
> +	if (priv_flags & IXGBEVF_PRIV_FLAGS_LEGACY_RX)
> +		flags |= IXGBEVF_FLAGS_LEGACY_RX;
> +
> +	if (flags != adapter->flags) {
> +		adapter->flags = flags;
> +
> +		/* reset interface to repopulate queues */
> +		if (netif_running(netdev))
> +			ixgbevf_reinit_locked(adapter);
> +	}
> +
> +	return 0;
> +}
> +
>  static const struct ethtool_ops ixgbevf_ethtool_ops = {
>  	.get_drvinfo		= ixgbevf_get_drvinfo,
>  	.get_regs_len		= ixgbevf_get_regs_len,
> @@ -909,6 +955,8 @@ static int ixgbevf_get_rxfh(struct net_device *netdev,
> u32 *indir, u8 *key,
>  	.get_rxfh_key_size	= ixgbevf_get_rxfh_key_size,
>  	.get_rxfh		= ixgbevf_get_rxfh,
>  	.get_link_ksettings	= ixgbevf_get_link_ksettings,
> +	.get_priv_flags		= ixgbevf_get_priv_flags,
> +	.set_priv_flags		= ixgbevf_set_priv_flags,
>  };
> 
>  void ixgbevf_set_ethtool_ops(struct net_device *netdev)
> diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf.h
> b/drivers/net/ethernet/intel/ixgbevf/ixgbevf.h
> index f695242..62a3669 100644
> --- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf.h
> +++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf.h
> @@ -331,6 +331,8 @@ struct ixgbevf_adapter {
> 
>  	u32 *rss_key;
>  	u8 rss_indir_tbl[IXGBEVF_X550_VFRETA_SIZE];
> +	u32 flags;
> +#define IXGBEVF_FLAGS_LEGACY_RX		BIT(1)
>  };
> 
>  enum ixbgevf_state_t {
> 
> _______________________________________________
> Intel-wired-lan mailing list
> Intel-wired-lan at osuosl.org
> https://lists.osuosl.org/mailman/listinfo/intel-wired-lan

Tested-by: Krishneil Singh <krishneil.k.singh at intel.com>



More information about the Intel-wired-lan mailing list