From: Alexander Duyck <alexander.duyck@gmail.com>
To: intel-wired-lan@osuosl.org
Subject: [Intel-wired-lan] [next PATCH v5 08/12] igb: Add support for ethtool private flag to allow use of legacy Rx
Date: Mon, 06 Feb 2017 18:26:52 -0800 [thread overview]
Message-ID: <20170207022646.9864.10096.stgit@localhost.localdomain> (raw)
In-Reply-To: <20170207022339.9864.87863.stgit@localhost.localdomain>
From: Alexander Duyck <alexander.h.duyck@intel.com>
Since there are potential drawbacks to the new Rx allocation approach I
thought it best to add a "chicken bit" so that we can turn the feature off
if in the event that a problem is found.
It also 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: Alexander Duyck <alexander.h.duyck@intel.com>
---
v4: Move patch up so that we add support for RX_LEGACY flag before we add
support for the new approach.
Added actual creation of the RX_LEGACY flag to this patch.
drivers/net/ethernet/intel/igb/igb.h | 1 +
drivers/net/ethernet/intel/igb/igb_ethtool.c | 48 ++++++++++++++++++++++++++
2 files changed, 49 insertions(+)
diff --git a/drivers/net/ethernet/intel/igb/igb.h b/drivers/net/ethernet/intel/igb/igb.h
index 6a88a08c021c..bffdfe65a0b6 100644
--- a/drivers/net/ethernet/intel/igb/igb.h
+++ b/drivers/net/ethernet/intel/igb/igb.h
@@ -557,6 +557,7 @@ struct igb_adapter {
#define IGB_FLAG_HAS_MSIX BIT(13)
#define IGB_FLAG_EEE BIT(14)
#define IGB_FLAG_VLAN_PROMISC BIT(15)
+#define IGB_FLAG_RX_LEGACY BIT(16)
/* Media Auto Sense */
#define IGB_MAS_ENABLE_0 0X0001
diff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c b/drivers/net/ethernet/intel/igb/igb_ethtool.c
index d5966feb7b96..797b9daba224 100644
--- a/drivers/net/ethernet/intel/igb/igb_ethtool.c
+++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c
@@ -144,6 +144,13 @@ enum igb_diagnostics_results {
};
#define IGB_TEST_LEN (sizeof(igb_gstrings_test) / ETH_GSTRING_LEN)
+static const char igb_priv_flags_strings[][ETH_GSTRING_LEN] = {
+#define IGB_PRIV_FLAGS_LEGACY_RX BIT(0)
+ "legacy-rx",
+};
+
+#define IGB_PRIV_FLAGS_STR_LEN ARRAY_SIZE(igb_priv_flags_strings)
+
static int igb_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
{
struct igb_adapter *adapter = netdev_priv(netdev);
@@ -852,6 +859,8 @@ static void igb_get_drvinfo(struct net_device *netdev,
sizeof(drvinfo->fw_version));
strlcpy(drvinfo->bus_info, pci_name(adapter->pdev),
sizeof(drvinfo->bus_info));
+
+ drvinfo->n_priv_flags = IGB_PRIV_FLAGS_STR_LEN;
}
static void igb_get_ringparam(struct net_device *netdev,
@@ -2280,6 +2289,8 @@ static int igb_get_sset_count(struct net_device *netdev, int sset)
return IGB_STATS_LEN;
case ETH_SS_TEST:
return IGB_TEST_LEN;
+ case ETH_SS_PRIV_FLAGS:
+ return IGB_PRIV_FLAGS_STR_LEN;
default:
return -ENOTSUPP;
}
@@ -2385,6 +2396,10 @@ static void igb_get_strings(struct net_device *netdev, u32 stringset, u8 *data)
}
/* BUG_ON(p - data != IGB_STATS_LEN * ETH_GSTRING_LEN); */
break;
+ case ETH_SS_PRIV_FLAGS:
+ memcpy(data, igb_priv_flags_strings,
+ IGB_PRIV_FLAGS_STR_LEN * ETH_GSTRING_LEN);
+ break;
}
}
@@ -3397,6 +3412,37 @@ static int igb_set_channels(struct net_device *netdev,
return 0;
}
+static u32 igb_get_priv_flags(struct net_device *netdev)
+{
+ struct igb_adapter *adapter = netdev_priv(netdev);
+ u32 priv_flags = 0;
+
+ if (adapter->flags & IGB_FLAG_RX_LEGACY)
+ priv_flags |= IGB_PRIV_FLAGS_LEGACY_RX;
+
+ return priv_flags;
+}
+
+static int igb_set_priv_flags(struct net_device *netdev, u32 priv_flags)
+{
+ struct igb_adapter *adapter = netdev_priv(netdev);
+ unsigned int flags = adapter->flags;
+
+ flags &= ~IGB_FLAG_RX_LEGACY;
+ if (priv_flags & IGB_PRIV_FLAGS_LEGACY_RX)
+ flags |= IGB_FLAG_RX_LEGACY;
+
+ if (flags != adapter->flags) {
+ adapter->flags = flags;
+
+ /* reset interface to repopulate queues */
+ if (netif_running(netdev))
+ igb_reinit_locked(adapter);
+ }
+
+ return 0;
+}
+
static const struct ethtool_ops igb_ethtool_ops = {
.get_settings = igb_get_settings,
.set_settings = igb_set_settings,
@@ -3435,6 +3481,8 @@ static int igb_set_channels(struct net_device *netdev,
.set_rxfh = igb_set_rxfh,
.get_channels = igb_get_channels,
.set_channels = igb_set_channels,
+ .get_priv_flags = igb_get_priv_flags,
+ .set_priv_flags = igb_set_priv_flags,
.begin = igb_ethtool_begin,
.complete = igb_ethtool_complete,
};
next prev parent reply other threads:[~2017-02-07 2:26 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-07 2:25 [Intel-wired-lan] [next PATCH v5 00/12] igb: Add support for writable pages and build_skb Alexander Duyck
2017-02-07 2:25 ` [Intel-wired-lan] [next PATCH v5 01/12] igb: Add support for DMA_ATTR_WEAK_ORDERING Alexander Duyck
2017-02-17 3:26 ` Brown, Aaron F
2017-02-07 2:25 ` [Intel-wired-lan] [next PATCH v5 02/12] igb: Use length to determine if descriptor is done Alexander Duyck
2017-02-17 3:26 ` Brown, Aaron F
2017-02-07 2:25 ` [Intel-wired-lan] [next PATCH v5 03/12] igb: Clear Rx buffer_info in configure instead of clean Alexander Duyck
2017-02-17 3:26 ` Brown, Aaron F
2017-02-07 2:26 ` [Intel-wired-lan] [next PATCH v5 04/12] igb: Don't bother clearing Tx buffer_info in igb_clean_tx_ring Alexander Duyck
2017-02-17 3:27 ` Brown, Aaron F
2017-02-07 2:26 ` [Intel-wired-lan] [next PATCH v5 05/12] igb: Limit maximum frame Rx based on MTU Alexander Duyck
2017-02-17 3:27 ` Brown, Aaron F
2017-02-07 2:26 ` [Intel-wired-lan] [next PATCH v5 06/12] igb: Only sync size of expected frame in ethtool testing Alexander Duyck
2017-02-17 3:28 ` Brown, Aaron F
2017-02-07 2:26 ` [Intel-wired-lan] [next PATCH v5 07/12] igb: Use page_address offset from page instead of masking virtual address Alexander Duyck
2017-02-17 3:28 ` Brown, Aaron F
2017-02-07 2:26 ` Alexander Duyck [this message]
2017-02-17 3:28 ` [Intel-wired-lan] [next PATCH v5 08/12] igb: Add support for ethtool private flag to allow use of legacy Rx Brown, Aaron F
2017-02-07 2:27 ` [Intel-wired-lan] [next PATCH v5 09/12] igb: Add support for using order 1 pages to receive large frames Alexander Duyck
2017-02-17 3:29 ` Brown, Aaron F
2017-02-07 2:27 ` [Intel-wired-lan] [next PATCH v5 10/12] igb: Add support for padding packet Alexander Duyck
2017-02-17 3:29 ` Brown, Aaron F
2017-02-07 2:27 ` [Intel-wired-lan] [next PATCH v5 11/12] igb: Break out Rx buffer page management Alexander Duyck
2017-02-17 3:30 ` Brown, Aaron F
2017-02-07 2:27 ` [Intel-wired-lan] [next PATCH v5 12/12] igb: Re-add support for build_skb in igb Alexander Duyck
2017-02-17 3:30 ` Brown, Aaron F
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170207022646.9864.10096.stgit@localhost.localdomain \
--to=alexander.duyck@gmail.com \
--cc=intel-wired-lan@osuosl.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox