[v2,2/2] examples/kni: fix MTU change to setup Tx queue

Message ID 20200514040938.25505-2-rmody@marvell.com (mailing list archive)
State Accepted, archived
Delegated to: Thomas Monjalon
Headers
Series None |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-nxp-Performance success Performance Testing PASS
ci/Intel-compilation success Compilation OK
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-testing fail Testing issues

Commit Message

Rasesh Mody May 14, 2020, 4:09 a.m. UTC
  This patch adds a fix to setup Tx queue when changing KNI interface MTU.
It ensures device can safely start txq post MTU change operation.

Fixes: fc9ee41b7016 ("examples/kni: convert to new ethdev offloads API")
Cc: stable@dpdk.org

Signed-off-by: Rasesh Mody <rmody@marvell.com>
---
 examples/kni/main.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)
  

Comments

Ferruh Yigit May 14, 2020, 3:33 p.m. UTC | #1
On 5/14/2020 5:09 AM, Rasesh Mody wrote:
> This patch adds a fix to setup Tx queue when changing KNI interface MTU.
> It ensures device can safely start txq post MTU change operation.
> 
> Fixes: fc9ee41b7016 ("examples/kni: convert to new ethdev offloads API")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Rasesh Mody <rmody@marvell.com>
> ---
>  examples/kni/main.c | 14 +++++++++++++-
>  1 file changed, 13 insertions(+), 1 deletion(-)
> 
> diff --git a/examples/kni/main.c b/examples/kni/main.c
> index 6b4ab3b5b..7a927a50c 100644
> --- a/examples/kni/main.c
> +++ b/examples/kni/main.c
> @@ -774,9 +774,11 @@ kni_change_mtu(uint16_t port_id, unsigned int new_mtu)
>  {
>  	int ret;
>  	uint16_t nb_rxd = NB_RXD;
> +	uint16_t nb_txd = NB_TXD;
>  	struct rte_eth_conf conf;
>  	struct rte_eth_dev_info dev_info;
>  	struct rte_eth_rxconf rxq_conf;
> +	struct rte_eth_txconf txq_conf;
>  
>  	if (!rte_eth_dev_is_valid_port(port_id)) {
>  		RTE_LOG(ERR, APP, "Invalid port id %d\n", port_id);
> @@ -804,7 +806,7 @@ kni_change_mtu(uint16_t port_id, unsigned int new_mtu)
>  		return ret;
>  	}
>  
> -	ret = rte_eth_dev_adjust_nb_rx_tx_desc(port_id, &nb_rxd, NULL);
> +	ret = rte_eth_dev_adjust_nb_rx_tx_desc(port_id, &nb_rxd, &nb_txd);
>  	if (ret < 0)
>  		rte_exit(EXIT_FAILURE, "Could not adjust number of descriptors "
>  				"for port%u (%d)\n", (unsigned int)port_id,
> @@ -829,6 +831,16 @@ kni_change_mtu(uint16_t port_id, unsigned int new_mtu)
>  		return ret;
>  	}
>  
> +	txq_conf = dev_info.default_txconf;
> +	txq_conf.offloads = conf.txmode.offloads;
> +	ret = rte_eth_tx_queue_setup(port_id, 0, nb_txd,
> +		rte_eth_dev_socket_id(port_id), &txq_conf);
> +	if (ret < 0) {
> +		RTE_LOG(ERR, APP, "Fail to setup Tx queue of port %d\n",
> +				port_id);
> +		return ret;
> +	}
> +
>  	/* Restart specific port */
>  	ret = rte_eth_dev_start(port_id);
>  	if (ret < 0) {
> 

Hi Rasesh,

The change looks OK but I am trying to understand the need for it, already asked
in other tread, will follow there.
  
Ferruh Yigit May 15, 2020, 11:29 a.m. UTC | #2
On 5/14/2020 5:09 AM, Rasesh Mody wrote:
> This patch adds a fix to setup Tx queue when changing KNI interface MTU.
> It ensures device can safely start txq post MTU change operation.
> 
> Fixes: fc9ee41b7016 ("examples/kni: convert to new ethdev offloads API")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Rasesh Mody <rmody@marvell.com>

I see you are going with a fix in the PMD, but the fix in the KNI sample also
looks reasonable, so I guess we can keep this.

Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
  
Thomas Monjalon May 19, 2020, 4:31 p.m. UTC | #3
15/05/2020 13:29, Ferruh Yigit:
> On 5/14/2020 5:09 AM, Rasesh Mody wrote:
> > This patch adds a fix to setup Tx queue when changing KNI interface MTU.
> > It ensures device can safely start txq post MTU change operation.
> > 
> > Fixes: fc9ee41b7016 ("examples/kni: convert to new ethdev offloads API")
> > Cc: stable@dpdk.org
> > 
> > Signed-off-by: Rasesh Mody <rmody@marvell.com>
> 
> I see you are going with a fix in the PMD, but the fix in the KNI sample also
> looks reasonable, so I guess we can keep this.
> 
> Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>

Applied, thanks
  

Patch

diff --git a/examples/kni/main.c b/examples/kni/main.c
index 6b4ab3b5b..7a927a50c 100644
--- a/examples/kni/main.c
+++ b/examples/kni/main.c
@@ -774,9 +774,11 @@  kni_change_mtu(uint16_t port_id, unsigned int new_mtu)
 {
 	int ret;
 	uint16_t nb_rxd = NB_RXD;
+	uint16_t nb_txd = NB_TXD;
 	struct rte_eth_conf conf;
 	struct rte_eth_dev_info dev_info;
 	struct rte_eth_rxconf rxq_conf;
+	struct rte_eth_txconf txq_conf;
 
 	if (!rte_eth_dev_is_valid_port(port_id)) {
 		RTE_LOG(ERR, APP, "Invalid port id %d\n", port_id);
@@ -804,7 +806,7 @@  kni_change_mtu(uint16_t port_id, unsigned int new_mtu)
 		return ret;
 	}
 
-	ret = rte_eth_dev_adjust_nb_rx_tx_desc(port_id, &nb_rxd, NULL);
+	ret = rte_eth_dev_adjust_nb_rx_tx_desc(port_id, &nb_rxd, &nb_txd);
 	if (ret < 0)
 		rte_exit(EXIT_FAILURE, "Could not adjust number of descriptors "
 				"for port%u (%d)\n", (unsigned int)port_id,
@@ -829,6 +831,16 @@  kni_change_mtu(uint16_t port_id, unsigned int new_mtu)
 		return ret;
 	}
 
+	txq_conf = dev_info.default_txconf;
+	txq_conf.offloads = conf.txmode.offloads;
+	ret = rte_eth_tx_queue_setup(port_id, 0, nb_txd,
+		rte_eth_dev_socket_id(port_id), &txq_conf);
+	if (ret < 0) {
+		RTE_LOG(ERR, APP, "Fail to setup Tx queue of port %d\n",
+				port_id);
+		return ret;
+	}
+
 	/* Restart specific port */
 	ret = rte_eth_dev_start(port_id);
 	if (ret < 0) {