From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by dpdk.org (Postfix) with ESMTP id 5E6621B953 for ; Fri, 14 Dec 2018 18:52:48 +0100 (CET) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id B9D0C80F84; Fri, 14 Dec 2018 17:52:47 +0000 (UTC) Received: from ktraynor.remote.csb (ovpn-116-106.ams2.redhat.com [10.36.116.106]) by smtp.corp.redhat.com (Postfix) with ESMTP id BD3A160BF7; Fri, 14 Dec 2018 17:52:46 +0000 (UTC) From: Kevin Traynor To: Xiaoyun Li Cc: Qi Zhang , dpdk stable Date: Fri, 14 Dec 2018 17:51:53 +0000 Message-Id: <20181214175203.24908-9-ktraynor@redhat.com> In-Reply-To: <20181214175203.24908-1-ktraynor@redhat.com> References: <20181214175203.24908-1-ktraynor@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Fri, 14 Dec 2018 17:52:47 +0000 (UTC) Subject: [dpdk-stable] patch 'net/ixgbe: fix overwriting RSS RETA' has been queued to stable release 18.08.1 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Dec 2018 17:52:48 -0000 Hi, FYI, your patch has been queued to stable release 18.08.1 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 12/18/18. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. If the code is different (ie: not only metadata diffs), due for example to a change in context or macro names, please double check it. Thanks. Kevin Traynor --- >>From 3e3c5bb1e4761a17fc11c2f4630f7ef455b59d37 Mon Sep 17 00:00:00 2001 From: Xiaoyun Li Date: Tue, 4 Dec 2018 12:37:57 +0800 Subject: [PATCH] net/ixgbe: fix overwriting RSS RETA [ upstream commit 8832837c6e64a75be31f32c49da261db15054c0d ] When starting the device, the RSS table is initialized. So the RSS update before device_start would be overwritten. This patch allows users to update the RSS reta table before device_start. Fixes: db5b65301dde ("ethdev: allow to set RSS hash computation flags and/or key") Signed-off-by: Xiaoyun Li Acked-by: Qi Zhang --- drivers/net/ixgbe/ixgbe_ethdev.c | 11 +++++++++++ drivers/net/ixgbe/ixgbe_ethdev.h | 3 +++ drivers/net/ixgbe/ixgbe_rxtx.c | 22 +++++++++++++--------- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c index 9de9c0c3e..15cf47c24 100644 --- a/drivers/net/ixgbe/ixgbe_ethdev.c +++ b/drivers/net/ixgbe/ixgbe_ethdev.c @@ -2794,4 +2794,6 @@ ixgbe_dev_stop(struct rte_eth_dev *dev) { struct rte_eth_link link; + struct ixgbe_adapter *adapter = + (struct ixgbe_adapter *)dev->data->dev_private; struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private); @@ -2854,4 +2856,6 @@ ixgbe_dev_stop(struct rte_eth_dev *dev) /* reset hierarchy commit */ tm_conf->committed = false; + + adapter->rss_reta_updated = 0; } @@ -4785,4 +4789,6 @@ ixgbe_dev_rss_reta_update(struct rte_eth_dev *dev, uint32_t reta, r; uint16_t idx, shift; + struct ixgbe_adapter *adapter = + (struct ixgbe_adapter *)dev->data->dev_private; struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private); uint32_t reta_reg; @@ -4826,4 +4832,5 @@ ixgbe_dev_rss_reta_update(struct rte_eth_dev *dev, IXGBE_WRITE_REG(hw, reta_reg, reta); } + adapter->rss_reta_updated = 1; return 0; @@ -5149,4 +5156,6 @@ ixgbevf_dev_stop(struct rte_eth_dev *dev) { struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private); + struct ixgbe_adapter *adapter = + (struct ixgbe_adapter *)dev->data->dev_private; struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev); struct rte_intr_handle *intr_handle = &pci_dev->intr_handle; @@ -5178,4 +5187,6 @@ ixgbevf_dev_stop(struct rte_eth_dev *dev) intr_handle->intr_vec = NULL; } + + adapter->rss_reta_updated = 0; } diff --git a/drivers/net/ixgbe/ixgbe_ethdev.h b/drivers/net/ixgbe/ixgbe_ethdev.h index d0b93968b..565c69c9e 100644 --- a/drivers/net/ixgbe/ixgbe_ethdev.h +++ b/drivers/net/ixgbe/ixgbe_ethdev.h @@ -491,4 +491,7 @@ struct ixgbe_adapter { struct rte_timecounter tx_tstamp_tc; struct ixgbe_tm_conf tm_conf; + + /* For RSS reta table update */ + uint8_t rss_reta_updated; }; diff --git a/drivers/net/ixgbe/ixgbe_rxtx.c b/drivers/net/ixgbe/ixgbe_rxtx.c index 1ea7ae59f..337a1a50c 100644 --- a/drivers/net/ixgbe/ixgbe_rxtx.c +++ b/drivers/net/ixgbe/ixgbe_rxtx.c @@ -3421,4 +3421,5 @@ ixgbe_rss_configure(struct rte_eth_dev *dev) { struct rte_eth_rss_conf rss_conf; + struct ixgbe_adapter *adapter; struct ixgbe_hw *hw; uint32_t reta; @@ -3429,4 +3430,5 @@ ixgbe_rss_configure(struct rte_eth_dev *dev) PMD_INIT_FUNC_TRACE(); + adapter = (struct ixgbe_adapter *)dev->data->dev_private; hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private); @@ -3438,14 +3440,16 @@ ixgbe_rss_configure(struct rte_eth_dev *dev) * little-endian order. */ - reta = 0; - for (i = 0, j = 0; i < sp_reta_size; i++, j++) { - reta_reg = ixgbe_reta_reg_get(hw->mac.type, i); + if (adapter->rss_reta_updated == 0) { + reta = 0; + for (i = 0, j = 0; i < sp_reta_size; i++, j++) { + reta_reg = ixgbe_reta_reg_get(hw->mac.type, i); - if (j == dev->data->nb_rx_queues) - j = 0; - reta = (reta << 8) | j; - if ((i & 3) == 3) - IXGBE_WRITE_REG(hw, reta_reg, - rte_bswap32(reta)); + if (j == dev->data->nb_rx_queues) + j = 0; + reta = (reta << 8) | j; + if ((i & 3) == 3) + IXGBE_WRITE_REG(hw, reta_reg, + rte_bswap32(reta)); + } } -- 2.19.0 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2018-12-14 17:49:47.967073482 +0000 +++ 0009-net-ixgbe-fix-overwriting-RSS-RETA.patch 2018-12-14 17:49:47.000000000 +0000 @@ -1,14 +1,15 @@ -From 8832837c6e64a75be31f32c49da261db15054c0d Mon Sep 17 00:00:00 2001 +From 3e3c5bb1e4761a17fc11c2f4630f7ef455b59d37 Mon Sep 17 00:00:00 2001 From: Xiaoyun Li Date: Tue, 4 Dec 2018 12:37:57 +0800 Subject: [PATCH] net/ixgbe: fix overwriting RSS RETA +[ upstream commit 8832837c6e64a75be31f32c49da261db15054c0d ] + When starting the device, the RSS table is initialized. So the RSS update before device_start would be overwritten. This patch allows users to update the RSS reta table before device_start. Fixes: db5b65301dde ("ethdev: allow to set RSS hash computation flags and/or key") -Cc: stable@dpdk.org Signed-off-by: Xiaoyun Li Acked-by: Qi Zhang @@ -19,44 +20,44 @@ 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c -index 91ba6201d..749311048 100644 +index 9de9c0c3e..15cf47c24 100644 --- a/drivers/net/ixgbe/ixgbe_ethdev.c +++ b/drivers/net/ixgbe/ixgbe_ethdev.c -@@ -2791,4 +2791,6 @@ ixgbe_dev_stop(struct rte_eth_dev *dev) +@@ -2794,4 +2794,6 @@ ixgbe_dev_stop(struct rte_eth_dev *dev) { struct rte_eth_link link; + struct ixgbe_adapter *adapter = + (struct ixgbe_adapter *)dev->data->dev_private; struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private); -@@ -2851,4 +2853,6 @@ ixgbe_dev_stop(struct rte_eth_dev *dev) +@@ -2854,4 +2856,6 @@ ixgbe_dev_stop(struct rte_eth_dev *dev) /* reset hierarchy commit */ tm_conf->committed = false; + + adapter->rss_reta_updated = 0; } -@@ -4780,4 +4784,6 @@ ixgbe_dev_rss_reta_update(struct rte_eth_dev *dev, +@@ -4785,4 +4789,6 @@ ixgbe_dev_rss_reta_update(struct rte_eth_dev *dev, uint32_t reta, r; uint16_t idx, shift; + struct ixgbe_adapter *adapter = + (struct ixgbe_adapter *)dev->data->dev_private; struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private); uint32_t reta_reg; -@@ -4821,4 +4827,5 @@ ixgbe_dev_rss_reta_update(struct rte_eth_dev *dev, +@@ -4826,4 +4832,5 @@ ixgbe_dev_rss_reta_update(struct rte_eth_dev *dev, IXGBE_WRITE_REG(hw, reta_reg, reta); } + adapter->rss_reta_updated = 1; return 0; -@@ -5144,4 +5151,6 @@ ixgbevf_dev_stop(struct rte_eth_dev *dev) +@@ -5149,4 +5156,6 @@ ixgbevf_dev_stop(struct rte_eth_dev *dev) { struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private); + struct ixgbe_adapter *adapter = + (struct ixgbe_adapter *)dev->data->dev_private; struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev); struct rte_intr_handle *intr_handle = &pci_dev->intr_handle; -@@ -5173,4 +5182,6 @@ ixgbevf_dev_stop(struct rte_eth_dev *dev) +@@ -5178,4 +5187,6 @@ ixgbevf_dev_stop(struct rte_eth_dev *dev) intr_handle->intr_vec = NULL; } + @@ -76,22 +77,22 @@ }; diff --git a/drivers/net/ixgbe/ixgbe_rxtx.c b/drivers/net/ixgbe/ixgbe_rxtx.c -index 7771d0e6d..9a79d18e4 100644 +index 1ea7ae59f..337a1a50c 100644 --- a/drivers/net/ixgbe/ixgbe_rxtx.c +++ b/drivers/net/ixgbe/ixgbe_rxtx.c -@@ -3419,4 +3419,5 @@ ixgbe_rss_configure(struct rte_eth_dev *dev) +@@ -3421,4 +3421,5 @@ ixgbe_rss_configure(struct rte_eth_dev *dev) { struct rte_eth_rss_conf rss_conf; + struct ixgbe_adapter *adapter; struct ixgbe_hw *hw; uint32_t reta; -@@ -3427,4 +3428,5 @@ ixgbe_rss_configure(struct rte_eth_dev *dev) +@@ -3429,4 +3430,5 @@ ixgbe_rss_configure(struct rte_eth_dev *dev) PMD_INIT_FUNC_TRACE(); + adapter = (struct ixgbe_adapter *)dev->data->dev_private; hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private); -@@ -3436,14 +3438,16 @@ ixgbe_rss_configure(struct rte_eth_dev *dev) +@@ -3438,14 +3440,16 @@ ixgbe_rss_configure(struct rte_eth_dev *dev) * little-endian order. */ - reta = 0;