[v2,2/2] examples/kni: fix MTU change to setup Tx queue
Checks
Commit Message
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
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.
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>
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
@@ -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) {