ethdev: fix copying bug in rte_eth_set_queue_rate_limit

Message ID 9f22d89841c440c32235117e1a4fe223f97c7f8e.1542616118.git.leah@ethernitynet.com (mailing list archive)
State Rejected, archived
Delegated to: Ferruh Yigit
Headers
Series ethdev: fix copying bug in rte_eth_set_queue_rate_limit |

Checks

Context Check Description
ci/Intel-compilation success Compilation OK
ci/mellanox-Performance-Testing success Performance Testing PASS
ci/intel-Performance-Testing success Performance Testing PASS

Commit Message

Leah Tekoa Nov. 19, 2018, 8:38 a.m. UTC
  From: Leah Tekoa <leah@ethernitynet.com>

memcpy should be used for copying rte_eth_link structure

Fixes: 8dbe82b0 ("ethdev: Tx rate limitation for queue and VF")

Signed-off-by: Leah Tekoa <leah@ethernitynet.com>
---
 lib/librte_ethdev/rte_ethdev.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

Ferruh Yigit Nov. 19, 2018, 11:43 a.m. UTC | #1
On 11/19/2018 8:38 AM, Leah Tekoa wrote:
> From: Leah Tekoa <leah@ethernitynet.com>
> 
> memcpy should be used for copying rte_eth_link structure

Why?

> 
> Fixes: 8dbe82b0 ("ethdev: Tx rate limitation for queue and VF")
> 
> Signed-off-by: Leah Tekoa <leah@ethernitynet.com>
> ---
>  lib/librte_ethdev/rte_ethdev.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c
> index 5f85817..c187690 100644
> --- a/lib/librte_ethdev/rte_ethdev.c
> +++ b/lib/librte_ethdev/rte_ethdev.c
> @@ -3266,7 +3266,7 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx,
>  
>  	dev = &rte_eth_devices[port_id];
>  	rte_eth_dev_info_get(port_id, &dev_info);
> -	link = dev->data->dev_link;
> +	memcpy(&link, &dev->data->dev_link, sizeof(struct rte_eth_link));
>  
>  	if (queue_idx > dev_info.max_tx_queues) {
>  		RTE_ETHDEV_LOG(ERR,
>
  
Leah Tekoa Nov. 19, 2018, 11:55 a.m. UTC | #2
We had problems with the way it is currently written and it didn't work for us. We got zero in link.link_speed and the real value was not copied correctly. 

-----Original Message-----
From: Ferruh Yigit <ferruh.yigit@intel.com> 
Sent: November 19, 2018 1:44 PM
To: Leah Tekoa <Leah@Ethernitynet.com>; dev@dpdk.org
Cc: Ouyang Changchun <changchun.ouyang@intel.com>
Subject: Re: [dpdk-dev] [PATCH] ethdev: fix copying bug in rte_eth_set_queue_rate_limit

On 11/19/2018 8:38 AM, Leah Tekoa wrote:
> From: Leah Tekoa <leah@ethernitynet.com>
> 
> memcpy should be used for copying rte_eth_link structure

Why?

> 
> Fixes: 8dbe82b0 ("ethdev: Tx rate limitation for queue and VF")
> 
> Signed-off-by: Leah Tekoa <leah@ethernitynet.com>
> ---
>  lib/librte_ethdev/rte_ethdev.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/lib/librte_ethdev/rte_ethdev.c 
> b/lib/librte_ethdev/rte_ethdev.c index 5f85817..c187690 100644
> --- a/lib/librte_ethdev/rte_ethdev.c
> +++ b/lib/librte_ethdev/rte_ethdev.c
> @@ -3266,7 +3266,7 @@ int rte_eth_set_queue_rate_limit(uint16_t 
> port_id, uint16_t queue_idx,
>  
>  	dev = &rte_eth_devices[port_id];
>  	rte_eth_dev_info_get(port_id, &dev_info);
> -	link = dev->data->dev_link;
> +	memcpy(&link, &dev->data->dev_link, sizeof(struct rte_eth_link));
>  
>  	if (queue_idx > dev_info.max_tx_queues) {
>  		RTE_ETHDEV_LOG(ERR,
>
  
Stephen Hemminger Nov. 19, 2018, 5:10 p.m. UTC | #3
On Mon, 19 Nov 2018 08:38:44 +0000
Leah Tekoa <Leah@Ethernitynet.com> wrote:

> -	link = dev->data->dev_link;
> +	memcpy(&link, &dev->data->dev_link, sizeof(struct rte_eth_link));
>  

If structure assignment and memcpy don't give same result, then
you have a buggy compiler.
  

Patch

diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c
index 5f85817..c187690 100644
--- a/lib/librte_ethdev/rte_ethdev.c
+++ b/lib/librte_ethdev/rte_ethdev.c
@@ -3266,7 +3266,7 @@  int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx,
 
 	dev = &rte_eth_devices[port_id];
 	rte_eth_dev_info_get(port_id, &dev_info);
-	link = dev->data->dev_link;
+	memcpy(&link, &dev->data->dev_link, sizeof(struct rte_eth_link));
 
 	if (queue_idx > dev_info.max_tx_queues) {
 		RTE_ETHDEV_LOG(ERR,