[dpdk-dev,v2] app/testpmd: fix log of start command

Message ID 1526909296-28215-1-git-send-email-bernard.iremonger@intel.com (mailing list archive)
State Superseded, archived
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Iremonger, Bernard May 21, 2018, 1:28 p.m. UTC
  Call the rte_eth_rxq_info_get() and rte_eth_txq_info_get() functions
to update the number of rx and tx descriptors in the rte_port
variable.

Fixes: ce8d561418d4 ("app/testpmd: add port configuration settings")
Signed-off-by: Bernard Iremonger <bernard.iremonger@intel.com>
---
 app/test-pmd/testpmd.c | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)
  

Comments

Ferruh Yigit May 21, 2018, 2:15 p.m. UTC | #1
On 5/21/2018 2:28 PM, Bernard Iremonger wrote:
> Call the rte_eth_rxq_info_get() and rte_eth_txq_info_get() functions
> to update the number of rx and tx descriptors in the rte_port
> variable.
> 
> Fixes: ce8d561418d4 ("app/testpmd: add port configuration settings")
> Signed-off-by: Bernard Iremonger <bernard.iremonger@intel.com>
> ---
>  app/test-pmd/testpmd.c | 16 +++++++++++++++-
>  1 file changed, 15 insertions(+), 1 deletion(-)
> 
> diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
> index 1d308f0..293b2a5 100644
> --- a/app/test-pmd/testpmd.c
> +++ b/app/test-pmd/testpmd.c
> @@ -1592,6 +1592,9 @@ static void eth_dev_event_callback(char *device_name,
>  	struct rte_port *port;
>  	struct ether_addr mac_addr;
>  	enum rte_eth_event_type event_type;
> +	struct rte_eth_rxq_info rx_qinfo;
> +	struct rte_eth_txq_info tx_qinfo;
> +	int32_t rc;
>  
>  	if (port_id_is_invalid(pid, ENABLED_WARN))
>  		return 0;
> @@ -1706,8 +1709,19 @@ static void eth_dev_event_callback(char *device_name,
>  					     &(port->rx_conf[qi]),
>  					     mp);
>  				}
> -				if (diag == 0)
> +				if (diag == 0) {
> +					rc = rte_eth_rx_queue_info_get(pi, qi,
> +						&rx_qinfo);
> +					if (!rc)
> +						port->nb_rx_desc[qi] =
> +							rx_qinfo.nb_desc;
> +					rc = rte_eth_tx_queue_info_get(pi, qi,
> +						&tx_qinfo);
> +					if (!rc)
> +						port->nb_tx_desc[qi] =
> +							tx_qinfo.nb_desc;

Hi Bernard,

port->nb_rx_desc[qi] and port->nb_tx_desc[qi] are intentionally set to zero, to
be able to use PMD provided values, assigning value to them will break that logic.

Instead of updating these values, what about using same information on print only?
  
Iremonger, Bernard May 22, 2018, 9:06 a.m. UTC | #2
Hi Ferruh,

> -----Original Message-----

> From: Yigit, Ferruh

> Sent: Monday, May 21, 2018 3:16 PM

> To: Iremonger, Bernard <bernard.iremonger@intel.com>; dev@dpdk.org

> Subject: Re: [PATCH v2] app/testpmd: fix log of start command

> 

> On 5/21/2018 2:28 PM, Bernard Iremonger wrote:

> > Call the rte_eth_rxq_info_get() and rte_eth_txq_info_get() functions

> > to update the number of rx and tx descriptors in the rte_port

> > variable.

> >

> > Fixes: ce8d561418d4 ("app/testpmd: add port configuration settings")

> > Signed-off-by: Bernard Iremonger <bernard.iremonger@intel.com>

> > ---

> >  app/test-pmd/testpmd.c | 16 +++++++++++++++-

> >  1 file changed, 15 insertions(+), 1 deletion(-)

> >

> > diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index

> > 1d308f0..293b2a5 100644

> > --- a/app/test-pmd/testpmd.c

> > +++ b/app/test-pmd/testpmd.c

> > @@ -1592,6 +1592,9 @@ static void eth_dev_event_callback(char

> *device_name,

> >  	struct rte_port *port;

> >  	struct ether_addr mac_addr;

> >  	enum rte_eth_event_type event_type;

> > +	struct rte_eth_rxq_info rx_qinfo;

> > +	struct rte_eth_txq_info tx_qinfo;

> > +	int32_t rc;

> >

> >  	if (port_id_is_invalid(pid, ENABLED_WARN))

> >  		return 0;

> > @@ -1706,8 +1709,19 @@ static void eth_dev_event_callback(char

> *device_name,

> >  					     &(port->rx_conf[qi]),

> >  					     mp);

> >  				}

> > -				if (diag == 0)

> > +				if (diag == 0) {

> > +					rc = rte_eth_rx_queue_info_get(pi,

> qi,

> > +						&rx_qinfo);

> > +					if (!rc)

> > +						port->nb_rx_desc[qi] =

> > +							rx_qinfo.nb_desc;

> > +					rc = rte_eth_tx_queue_info_get(pi,

> qi,

> > +						&tx_qinfo);

> > +					if (!rc)

> > +						port->nb_tx_desc[qi] =

> > +							tx_qinfo.nb_desc;

> 

> Hi Bernard,

> 

> port->nb_rx_desc[qi] and port->nb_tx_desc[qi] are intentionally set to

> port->zero, to

> be able to use PMD provided values, assigning value to them will break that

> logic.

> 

> Instead of updating these values, what about using same information on

> print only?


I don't think this fix is breaking any logic, as the nb_rx_desc[qi] and nb_tx_desc[qi] values are not being updated until after the rx and tx queues have been configured using the original values.
The nb_rxd and nb_txd values assigned to nb_rx_desc[qi] and nb_tx_desc[qi]  are initialised to 0 but can be initialised to other vallues  from the command line.

I will investigate using the updated values in the print only to avoid any risk.

Regards,

Bernard.
  

Patch

diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index 1d308f0..293b2a5 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -1592,6 +1592,9 @@  static void eth_dev_event_callback(char *device_name,
 	struct rte_port *port;
 	struct ether_addr mac_addr;
 	enum rte_eth_event_type event_type;
+	struct rte_eth_rxq_info rx_qinfo;
+	struct rte_eth_txq_info tx_qinfo;
+	int32_t rc;
 
 	if (port_id_is_invalid(pid, ENABLED_WARN))
 		return 0;
@@ -1706,8 +1709,19 @@  static void eth_dev_event_callback(char *device_name,
 					     &(port->rx_conf[qi]),
 					     mp);
 				}
-				if (diag == 0)
+				if (diag == 0) {
+					rc = rte_eth_rx_queue_info_get(pi, qi,
+						&rx_qinfo);
+					if (!rc)
+						port->nb_rx_desc[qi] =
+							rx_qinfo.nb_desc;
+					rc = rte_eth_tx_queue_info_get(pi, qi,
+						&tx_qinfo);
+					if (!rc)
+						port->nb_tx_desc[qi] =
+							tx_qinfo.nb_desc;
 					continue;
+				}
 
 				/* Fail to setup rx queue, return */
 				if (rte_atomic16_cmpset(&(port->port_status),