From patchwork Wed Jun 24 13:45:16 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Barbette X-Patchwork-Id: 488079 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138]) by ozlabs.org (Postfix) with ESMTP id 8473314030F for ; Wed, 24 Jun 2015 23:52:28 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by whitealder.osuosl.org (Postfix) with ESMTP id B1F90919A3; Wed, 24 Jun 2015 13:52:27 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from whitealder.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id f4FZ31aOIRJV; Wed, 24 Jun 2015 13:52:25 +0000 (UTC) Received: from ash.osuosl.org (ash.osuosl.org [140.211.166.34]) by whitealder.osuosl.org (Postfix) with ESMTP id C62D0919D5; Wed, 24 Jun 2015 13:52:25 +0000 (UTC) X-Original-To: intel-wired-lan@lists.osuosl.org Delivered-To: intel-wired-lan@lists.osuosl.org Received: from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137]) by ash.osuosl.org (Postfix) with ESMTP id D96B21BFA89 for ; Wed, 24 Jun 2015 13:52:23 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by fraxinus.osuosl.org (Postfix) with ESMTP id D0095A323B for ; Wed, 24 Jun 2015 13:52:23 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from fraxinus.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id S7d1-_HOHaPL for ; Wed, 24 Jun 2015 13:52:22 +0000 (UTC) X-Greylist: delayed 00:06:42 by SQLgrey-1.7.6 Received: from serv108.segi.ulg.ac.be (serv108.segi.ulg.ac.be [139.165.32.111]) by fraxinus.osuosl.org (Postfix) with ESMTPS id AD916A32AA for ; Wed, 24 Jun 2015 13:52:21 +0000 (UTC) Received: (qmail 20751 invoked from network); 24 Jun 2015 15:45:36 +0200 Received: from unknown (HELO mail-lb0-f175.google.com) (u215564@[209.85.217.175]) (envelope-sender ) by serv108.segi.ulg.ac.be (qmail-ldap-1.03) with RC4-SHA encrypted SMTP for ; 24 Jun 2015 15:45:36 +0200 Received: by lbbwc1 with SMTP id wc1so26681612lbb.2 for ; Wed, 24 Jun 2015 06:45:36 -0700 (PDT) X-Received: by 10.112.151.178 with SMTP id ur18mr40675112lbb.59.1435153536322; Wed, 24 Jun 2015 06:45:36 -0700 (PDT) MIME-Version: 1.0 Received: by 10.112.235.200 with HTTP; Wed, 24 Jun 2015 06:45:16 -0700 (PDT) From: Tom Barbette Date: Wed, 24 Jun 2015 15:45:16 +0200 Message-ID: To: intel-wired-lan@lists.osuosl.org Subject: [Intel-wired-lan] [PATCH net-next] ixgbe support for ethtool set_rxfh X-BeenThere: intel-wired-lan@lists.osuosl.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: Intel Wired Ethernet Linux Kernel Driver Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-wired-lan-bounces@lists.osuosl.org Sender: "Intel-wired-lan" Allows to change the rxfh indirection table and/or key using ethtool interface Signed-off-by: Tom Barbette --- drivers/net/ethernet/intel/ixgbe/ixgbe.h | 1 + drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 40 ++++++++++++++++++++++++ drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 2 +- 3 files changed, 42 insertions(+), 1 deletion(-) struct ixgbe_hw *hw = &adapter->hw; diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe.h b/drivers/net/ethernet/intel/ixgbe/ixgbe.h index ac3ac2a..4314799 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe.h +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe.h @@ -967,4 +967,5 @@ netdev_tx_t ixgbe_xmit_frame_ring(struct sk_buff *skb, struct ixgbe_adapter *adapter, struct ixgbe_ring *tx_ring); u32 ixgbe_rss_indir_tbl_entries(struct ixgbe_adapter *adapter); +void ixgbe_store_reta(struct ixgbe_adapter *adapter); #endif /* _IXGBE_H_ */ diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c index ec7b232..1d373b9 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c @@ -2907,6 +2907,45 @@ static int ixgbe_get_rxfh(struct net_device *netdev, u32 *indir, u8 *key, return 0; } +static int ixgbe_set_rxfh(struct net_device *netdev, const u32 *indir, + const u8 *key, const u8 hfunc) +{ + struct ixgbe_adapter *adapter = netdev_priv(netdev); + u32 reta_entries = ixgbe_rss_indir_tbl_entries(adapter); + int i; + u32 num_queues; + + num_queues = adapter->num_rx_queues; + + /* + * Allow at least 2 queues w/ SR-IOV. + */ + if ((adapter->flags & IXGBE_FLAG_SRIOV_ENABLED) && (num_queues < 2)) + num_queues = 2; + + if (hfunc) + return -EINVAL; + + /* Fill out the redirection table */ + if (indir) { + /* Verify user input. */ + for (i = 0; i < reta_entries; i++) + if (indir[i] >= num_queues) + return -EINVAL; + + for (i = 0; i < reta_entries; i++) + adapter->rss_indir_tbl[i] = indir[i]; + } + + /* Fill out the rss hash key */ + if (key) + memcpy(adapter->rss_key, key, ixgbe_get_rxfh_key_size(netdev)); + + ixgbe_store_reta(adapter); + + return 0; +} + static int ixgbe_get_ts_info(struct net_device *dev, struct ethtool_ts_info *info) { @@ -3167,6 +3206,7 @@ static const struct ethtool_ops ixgbe_ethtool_ops = { .get_rxfh_indir_size = ixgbe_rss_indir_size, .get_rxfh_key_size = ixgbe_get_rxfh_key_size, .get_rxfh = ixgbe_get_rxfh, + .set_rxfh = ixgbe_set_rxfh, .get_channels = ixgbe_get_channels, .set_channels = ixgbe_set_channels, .get_ts_info = ixgbe_get_ts_info, diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c index 9aa6104..0fdeb76 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c @@ -3287,7 +3287,7 @@ u32 ixgbe_rss_indir_tbl_entries(struct ixgbe_adapter *adapter) * * Write the RSS redirection table stored in adapter.rss_indir_tbl[] to HW. */ -static void ixgbe_store_reta(struct ixgbe_adapter *adapter) +void ixgbe_store_reta(struct ixgbe_adapter *adapter) { u32 i, reta_entries = ixgbe_rss_indir_tbl_entries(adapter);