[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