[v2] examples/multi_process: reconfigure port when rss or csum isn't supported

Message ID 20220221153518.503722-1-wenwux.ma@intel.com (mailing list archive)
State Superseded, archived
Delegated to: Thomas Monjalon
Headers
Series [v2] examples/multi_process: reconfigure port when rss or csum isn't supported |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK
ci/iol-broadcom-Functional success Functional Testing PASS
ci/intel-Testing success Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-broadcom-Performance success Performance Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-intel-Functional success Functional Testing PASS
ci/github-robot: build success github build: passed
ci/iol-aarch64-unit-testing success Testing PASS
ci/iol-aarch64-compile-testing success Testing PASS
ci/iol-x86_64-compile-testing success Testing PASS
ci/iol-x86_64-unit-testing success Testing PASS
ci/iol-abi-testing success Testing PASS

Commit Message

Ma, WenwuX Feb. 21, 2022, 3:35 p.m. UTC
  The default values of rx mq_mode and rx offloads for port
will cause symmetric_mp startup failure if the port do not
support rss or csum. This Patch make the app to reconfigure
the NIC without them. Only quit the app if the second
reconfiguration fails.

Signed-off-by: Wenwu Ma <wenwux.ma@intel.com>
---
 examples/multi_process/symmetric_mp/main.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
  

Comments

Bruce Richardson Feb. 21, 2022, 9:21 a.m. UTC | #1
On Mon, Feb 21, 2022 at 03:35:18PM +0000, Wenwu Ma wrote:
> The default values of rx mq_mode and rx offloads for port
> will cause symmetric_mp startup failure if the port do not
> support rss or csum. This Patch make the app to reconfigure
> the NIC without them. Only quit the app if the second
> reconfiguration fails.
> 
> Signed-off-by: Wenwu Ma <wenwux.ma@intel.com>
> ---
>  examples/multi_process/symmetric_mp/main.c | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)
> 
> diff --git a/examples/multi_process/symmetric_mp/main.c b/examples/multi_process/symmetric_mp/main.c
> index 050337765f..c0e7ed70e0 100644
> --- a/examples/multi_process/symmetric_mp/main.c
> +++ b/examples/multi_process/symmetric_mp/main.c
> @@ -232,6 +232,20 @@ smp_port_init(uint16_t port, struct rte_mempool *mbuf_pool,
>  	}
>  
>  	retval = rte_eth_dev_configure(port, rx_rings, tx_rings, &port_conf);
> +	if (retval == -EINVAL) {
> +		printf("Maybe port %u don't have csum offloads capabilities, "
> +			"so clear csum config and try again.\n", port);

Two comments for here and below:
1. Don't split error messages across multiple lines, as it means the
user/developer cannot find them using "grep" on the code.
2. Text should try and be shorter and clearer. I'd suggest:
"Port configuration failed. Re-attempting with HW checksum disabled"


> +		port_conf.rxmode.offloads &= ~(RTE_ETH_RX_OFFLOAD_CHECKSUM);
> +		retval = rte_eth_dev_configure(port, rx_rings, tx_rings, &port_conf);
> +	}
> +
> +	if (retval == -ENOTSUP) {
> +		printf("Maybe port %u don't support rss, "
> +			"so clear rss config and try again.\n", port);

Same two comments from above apply here.

> +		port_conf.rxmode.mq_mode &= ~(RTE_ETH_MQ_RX_RSS);
> +		retval = rte_eth_dev_configure(port, rx_rings, tx_rings, &port_conf);
> +	}
> +
>  	if (retval < 0)
>  		return retval;
>  
> -- 
> 2.25.1
>
  

Patch

diff --git a/examples/multi_process/symmetric_mp/main.c b/examples/multi_process/symmetric_mp/main.c
index 050337765f..c0e7ed70e0 100644
--- a/examples/multi_process/symmetric_mp/main.c
+++ b/examples/multi_process/symmetric_mp/main.c
@@ -232,6 +232,20 @@  smp_port_init(uint16_t port, struct rte_mempool *mbuf_pool,
 	}
 
 	retval = rte_eth_dev_configure(port, rx_rings, tx_rings, &port_conf);
+	if (retval == -EINVAL) {
+		printf("Maybe port %u don't have csum offloads capabilities, "
+			"so clear csum config and try again.\n", port);
+		port_conf.rxmode.offloads &= ~(RTE_ETH_RX_OFFLOAD_CHECKSUM);
+		retval = rte_eth_dev_configure(port, rx_rings, tx_rings, &port_conf);
+	}
+
+	if (retval == -ENOTSUP) {
+		printf("Maybe port %u don't support rss, "
+			"so clear rss config and try again.\n", port);
+		port_conf.rxmode.mq_mode &= ~(RTE_ETH_MQ_RX_RSS);
+		retval = rte_eth_dev_configure(port, rx_rings, tx_rings, &port_conf);
+	}
+
 	if (retval < 0)
 		return retval;