[dpdk-dev] app/testpmd: fix failing to enable SW checksum calculation

Message ID 1516846424-19929-1-git-send-email-jiayu.hu@intel.com (mailing list archive)
State Accepted, archived
Delegated to: Thomas Monjalon
Headers

Checks

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

Commit Message

Hu, Jiayu Jan. 25, 2018, 2:13 a.m. UTC
  In current design, we can't enable SW checksum calculation
for the devices which don't have checksum offloading abilities
via the command "csum set ip|tcp|udp|sctp|outer-ip sw <port_id>".
But SW checksum calculation shouldn't depend on HW offloading
abilities. This patch is to fix this issue.

Fixes: 3926dd2b6668 ("app/testpmd: enforce offload capabilities check")
Signed-off-by: Jiayu Hu <jiayu.hu@intel.com>
---
 app/test-pmd/cmdline.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)
  

Comments

Wenzhuo Lu Jan. 25, 2018, 2:58 a.m. UTC | #1
Hi Jiayu,


> -----Original Message-----
> From: Hu, Jiayu
> Sent: Thursday, January 25, 2018 10:14 AM
> To: dev@dpdk.org
> Cc: shahafs@mellanox.com; Lu, Wenzhuo <wenzhuo.lu@intel.com>; Yao, Lei
> A <lei.a.yao@intel.com>; Hu, Jiayu <jiayu.hu@intel.com>
> Subject: [PATCH] app/testpmd: fix failing to enable SW checksum calculation
> 
> In current design, we can't enable SW checksum calculation for the devices
> which don't have checksum offloading abilities via the command "csum set
> ip|tcp|udp|sctp|outer-ip sw <port_id>".
Confused, you mean it's an issue or the expected behavior?

> But SW checksum calculation shouldn't depend on HW offloading abilities.
> This patch is to fix this issue.
> 
> Fixes: 3926dd2b6668 ("app/testpmd: enforce offload capabilities check")
> Signed-off-by: Jiayu Hu <jiayu.hu@intel.com>
> ---
>  app/test-pmd/cmdline.c | 20 ++++++++++----------
>  1 file changed, 10 insertions(+), 10 deletions(-)
> 
> diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index
> 9f12c0f..a2db9b7 100644
> --- a/app/test-pmd/cmdline.c
> +++ b/app/test-pmd/cmdline.c
> @@ -3706,40 +3706,40 @@ cmd_csum_parsed(void *parsed_result,
>  			hw = 1;
> 
>  		if (!strcmp(res->proto, "ip")) {
> -			if (dev_info.tx_offload_capa &
> -
> 	DEV_TX_OFFLOAD_IPV4_CKSUM) {
> +			if (hw == 0 || (dev_info.tx_offload_capa &
You mean SW can support the capability anyway, not need to check anything, right?
  
Hu, Jiayu Jan. 25, 2018, 3:04 a.m. UTC | #2
Hi Wenzhuo,

> -----Original Message-----
> From: Lu, Wenzhuo
> Sent: Thursday, January 25, 2018 10:58 AM
> To: Hu, Jiayu <jiayu.hu@intel.com>; dev@dpdk.org
> Cc: shahafs@mellanox.com; Yao, Lei A <lei.a.yao@intel.com>
> Subject: RE: [PATCH] app/testpmd: fix failing to enable SW checksum
> calculation
> 
> Hi Jiayu,
> 
> 
> > -----Original Message-----
> > From: Hu, Jiayu
> > Sent: Thursday, January 25, 2018 10:14 AM
> > To: dev@dpdk.org
> > Cc: shahafs@mellanox.com; Lu, Wenzhuo <wenzhuo.lu@intel.com>; Yao,
> Lei
> > A <lei.a.yao@intel.com>; Hu, Jiayu <jiayu.hu@intel.com>
> > Subject: [PATCH] app/testpmd: fix failing to enable SW checksum
> calculation
> >
> > In current design, we can't enable SW checksum calculation for the devices
> > which don't have checksum offloading abilities via the command "csum set
> > ip|tcp|udp|sctp|outer-ip sw <port_id>".
> Confused, you mean it's an issue or the expected behavior?
> 
> > But SW checksum calculation shouldn't depend on HW offloading abilities.
> > This patch is to fix this issue.
> >
> > Fixes: 3926dd2b6668 ("app/testpmd: enforce offload capabilities check")
> > Signed-off-by: Jiayu Hu <jiayu.hu@intel.com>
> > ---
> >  app/test-pmd/cmdline.c | 20 ++++++++++----------
> >  1 file changed, 10 insertions(+), 10 deletions(-)
> >
> > diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index
> > 9f12c0f..a2db9b7 100644
> > --- a/app/test-pmd/cmdline.c
> > +++ b/app/test-pmd/cmdline.c
> > @@ -3706,40 +3706,40 @@ cmd_csum_parsed(void *parsed_result,
> >  			hw = 1;
> >
> >  		if (!strcmp(res->proto, "ip")) {
> > -			if (dev_info.tx_offload_capa &
> > -
> > 	DEV_TX_OFFLOAD_IPV4_CKSUM) {
> > +			if (hw == 0 || (dev_info.tx_offload_capa &
> You mean SW can support the capability anyway, not need to check anything,
> right?
Yes, it's the csum forwarding engine to calculate checksums. This SW ability should
supports all devices.

Thanks,
Jiayu
  
Hu, Jiayu Jan. 25, 2018, 3:06 a.m. UTC | #3
> -----Original Message-----
> From: Lu, Wenzhuo
> Sent: Thursday, January 25, 2018 10:58 AM
> To: Hu, Jiayu <jiayu.hu@intel.com>; dev@dpdk.org
> Cc: shahafs@mellanox.com; Yao, Lei A <lei.a.yao@intel.com>
> Subject: RE: [PATCH] app/testpmd: fix failing to enable SW checksum
> calculation
> 
> Hi Jiayu,
> 
> 
> > -----Original Message-----
> > From: Hu, Jiayu
> > Sent: Thursday, January 25, 2018 10:14 AM
> > To: dev@dpdk.org
> > Cc: shahafs@mellanox.com; Lu, Wenzhuo <wenzhuo.lu@intel.com>; Yao,
> Lei
> > A <lei.a.yao@intel.com>; Hu, Jiayu <jiayu.hu@intel.com>
> > Subject: [PATCH] app/testpmd: fix failing to enable SW checksum
> calculation
> >
> > In current design, we can't enable SW checksum calculation for the devices
> > which don't have checksum offloading abilities via the command "csum set
> > ip|tcp|udp|sctp|outer-ip sw <port_id>".
> Confused, you mean it's an issue or the expected behavior?

It's an issue. SW checksum calculation should support all devices.

> 
> > But SW checksum calculation shouldn't depend on HW offloading abilities.
> > This patch is to fix this issue.
> >
> > Fixes: 3926dd2b6668 ("app/testpmd: enforce offload capabilities check")
> > Signed-off-by: Jiayu Hu <jiayu.hu@intel.com>
> > ---
> >  app/test-pmd/cmdline.c | 20 ++++++++++----------
> >  1 file changed, 10 insertions(+), 10 deletions(-)
> >
> > diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index
> > 9f12c0f..a2db9b7 100644
> > --- a/app/test-pmd/cmdline.c
> > +++ b/app/test-pmd/cmdline.c
> > @@ -3706,40 +3706,40 @@ cmd_csum_parsed(void *parsed_result,
> >  			hw = 1;
> >
> >  		if (!strcmp(res->proto, "ip")) {
> > -			if (dev_info.tx_offload_capa &
> > -
> > 	DEV_TX_OFFLOAD_IPV4_CKSUM) {
> > +			if (hw == 0 || (dev_info.tx_offload_capa &
> You mean SW can support the capability anyway, not need to check anything,
> right?
  
Shahaf Shuler Jan. 25, 2018, 6:54 a.m. UTC | #4
Hi Jiayu Hu,

Good fix, thanks.

Thursday, January 25, 2018 4:14 AM, Jiayu Hu:
> In current design, we can't enable SW checksum calculation for the devices
> which don't have checksum offloading abilities via the command "csum set
> ip|tcp|udp|sctp|outer-ip sw <port_id>".
> But SW checksum calculation shouldn't depend on HW offloading abilities.
> This patch is to fix this issue.
> 
> Fixes: 3926dd2b6668 ("app/testpmd: enforce offload capabilities check")
> Signed-off-by: Jiayu Hu <jiayu.hu@intel.com>
> ---
>  app/test-pmd/cmdline.c | 20 ++++++++++----------
>  1 file changed, 10 insertions(+), 10 deletions(-)
> 
> diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index
> 9f12c0f..a2db9b7 100644
> --- a/app/test-pmd/cmdline.c
> +++ b/app/test-pmd/cmdline.c
> @@ -3706,40 +3706,40 @@ cmd_csum_parsed(void *parsed_result,
>  			hw = 1;
> 
>  		if (!strcmp(res->proto, "ip")) {
> -			if (dev_info.tx_offload_capa &
> -
> 	DEV_TX_OFFLOAD_IPV4_CKSUM) {
> +			if (hw == 0 || (dev_info.tx_offload_capa &
> +
> 	DEV_TX_OFFLOAD_IPV4_CKSUM)) {
>  				csum_offloads |=
> DEV_TX_OFFLOAD_IPV4_CKSUM;
>  			} else {
>  				printf("IP checksum offload is not supported
> "
>  				       "by port %u\n", res->port_id);
>  			}
>  		} else if (!strcmp(res->proto, "udp")) {
> -			if (dev_info.tx_offload_capa &
> -
> 	DEV_TX_OFFLOAD_UDP_CKSUM) {
> +			if (hw == 0 || (dev_info.tx_offload_capa &
> +
> 	DEV_TX_OFFLOAD_UDP_CKSUM)) {
>  				csum_offloads |=
> DEV_TX_OFFLOAD_UDP_CKSUM;
>  			} else {
>  				printf("UDP checksum offload is not
> supported "
>  				       "by port %u\n", res->port_id);
>  			}
>  		} else if (!strcmp(res->proto, "tcp")) {
> -			if (dev_info.tx_offload_capa &
> -
> 	DEV_TX_OFFLOAD_TCP_CKSUM) {
> +			if (hw == 0 || (dev_info.tx_offload_capa &
> +
> 	DEV_TX_OFFLOAD_TCP_CKSUM)) {
>  				csum_offloads |=
> DEV_TX_OFFLOAD_TCP_CKSUM;
>  			} else {
>  				printf("TCP checksum offload is not
> supported "
>  				       "by port %u\n", res->port_id);
>  			}
>  		} else if (!strcmp(res->proto, "sctp")) {
> -			if (dev_info.tx_offload_capa &
> -
> 	DEV_TX_OFFLOAD_SCTP_CKSUM) {
> +			if (hw == 0 || (dev_info.tx_offload_capa &
> +
> 	DEV_TX_OFFLOAD_SCTP_CKSUM)) {
>  				csum_offloads |=
> DEV_TX_OFFLOAD_SCTP_CKSUM;
>  			} else {
>  				printf("SCTP checksum offload is not
> supported "
>  				       "by port %u\n", res->port_id);
>  			}
>  		} else if (!strcmp(res->proto, "outer-ip")) {
> -			if (dev_info.tx_offload_capa &
> -
> 	DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM) {
> +			if (hw == 0 || (dev_info.tx_offload_capa &
> +
> 	DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM)) {
>  				csum_offloads |=
> 
> 	DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM;
>  			} else {

Reviewed-by: Shahaf Shuler <shahafs@mellanox.com>

> --
> 2.7.4
  
Thomas Monjalon Jan. 31, 2018, 10:34 p.m. UTC | #5
25/01/2018 07:54, Shahaf Shuler:
> Hi Jiayu Hu,
> 
> Good fix, thanks.
> 
> Thursday, January 25, 2018 4:14 AM, Jiayu Hu:
> > In current design, we can't enable SW checksum calculation for the devices
> > which don't have checksum offloading abilities via the command "csum set
> > ip|tcp|udp|sctp|outer-ip sw <port_id>".
> > But SW checksum calculation shouldn't depend on HW offloading abilities.
> > This patch is to fix this issue.
> > 
> > Fixes: 3926dd2b6668 ("app/testpmd: enforce offload capabilities check")
> > Signed-off-by: Jiayu Hu <jiayu.hu@intel.com>
> 
> Reviewed-by: Shahaf Shuler <shahafs@mellanox.com>

Applied, thanks
  

Patch

diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index 9f12c0f..a2db9b7 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -3706,40 +3706,40 @@  cmd_csum_parsed(void *parsed_result,
 			hw = 1;
 
 		if (!strcmp(res->proto, "ip")) {
-			if (dev_info.tx_offload_capa &
-						DEV_TX_OFFLOAD_IPV4_CKSUM) {
+			if (hw == 0 || (dev_info.tx_offload_capa &
+						DEV_TX_OFFLOAD_IPV4_CKSUM)) {
 				csum_offloads |= DEV_TX_OFFLOAD_IPV4_CKSUM;
 			} else {
 				printf("IP checksum offload is not supported "
 				       "by port %u\n", res->port_id);
 			}
 		} else if (!strcmp(res->proto, "udp")) {
-			if (dev_info.tx_offload_capa &
-						DEV_TX_OFFLOAD_UDP_CKSUM) {
+			if (hw == 0 || (dev_info.tx_offload_capa &
+						DEV_TX_OFFLOAD_UDP_CKSUM)) {
 				csum_offloads |= DEV_TX_OFFLOAD_UDP_CKSUM;
 			} else {
 				printf("UDP checksum offload is not supported "
 				       "by port %u\n", res->port_id);
 			}
 		} else if (!strcmp(res->proto, "tcp")) {
-			if (dev_info.tx_offload_capa &
-						DEV_TX_OFFLOAD_TCP_CKSUM) {
+			if (hw == 0 || (dev_info.tx_offload_capa &
+						DEV_TX_OFFLOAD_TCP_CKSUM)) {
 				csum_offloads |= DEV_TX_OFFLOAD_TCP_CKSUM;
 			} else {
 				printf("TCP checksum offload is not supported "
 				       "by port %u\n", res->port_id);
 			}
 		} else if (!strcmp(res->proto, "sctp")) {
-			if (dev_info.tx_offload_capa &
-						DEV_TX_OFFLOAD_SCTP_CKSUM) {
+			if (hw == 0 || (dev_info.tx_offload_capa &
+						DEV_TX_OFFLOAD_SCTP_CKSUM)) {
 				csum_offloads |= DEV_TX_OFFLOAD_SCTP_CKSUM;
 			} else {
 				printf("SCTP checksum offload is not supported "
 				       "by port %u\n", res->port_id);
 			}
 		} else if (!strcmp(res->proto, "outer-ip")) {
-			if (dev_info.tx_offload_capa &
-					DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM) {
+			if (hw == 0 || (dev_info.tx_offload_capa &
+					DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM)) {
 				csum_offloads |=
 						DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM;
 			} else {