app/testpmd: set fixed flag when exact link speed is chosen

Message ID 1555074753-9098-1-git-send-email-arybchenko@solarflare.com
State Accepted
Delegated to: Ferruh Yigit
Headers show
Series
  • app/testpmd: set fixed flag when exact link speed is chosen
Related show

Checks

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

Commit Message

Andrew Rybchenko April 12, 2019, 1:12 p.m.
Setting exact link speed makes sense if auto-negotiation is
disabled. Fixed flag is required to disable auto-negotiation.

Fixes: 88fbedcd5e5a ("app/testpmd: move speed and duplex parsing in a function")
Cc: stable@dpdk.org

Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
---
 app/test-pmd/cmdline.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

Comments

Iremonger, Bernard April 12, 2019, 2:40 p.m. | #1
> -----Original Message-----
> From: Andrew Rybchenko [mailto:arybchenko@solarflare.com]
> Sent: Friday, April 12, 2019 2:13 PM
> To: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Wu, Jingjing
> <jingjing.wu@intel.com>; Iremonger, Bernard
> <bernard.iremonger@intel.com>
> Cc: dev@dpdk.org; stable@dpdk.org
> Subject: [PATCH] app/testpmd: set fixed flag when exact link speed is
> chosen
> 
> Setting exact link speed makes sense if auto-negotiation is disabled. Fixed
> flag is required to disable auto-negotiation.
> 
> Fixes: 88fbedcd5e5a ("app/testpmd: move speed and duplex parsing in a
> function")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>

Acked-by: Bernard Iremonger <bernard.iremonger@intel.com>
Ferruh Yigit April 16, 2019, 2:04 p.m. | #2
On 4/12/2019 3:40 PM, Iremonger, Bernard wrote:
>> -----Original Message-----
>> From: Andrew Rybchenko [mailto:arybchenko@solarflare.com]
>> Sent: Friday, April 12, 2019 2:13 PM
>> To: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Wu, Jingjing
>> <jingjing.wu@intel.com>; Iremonger, Bernard
>> <bernard.iremonger@intel.com>
>> Cc: dev@dpdk.org; stable@dpdk.org
>> Subject: [PATCH] app/testpmd: set fixed flag when exact link speed is
>> chosen
>>
>> Setting exact link speed makes sense if auto-negotiation is disabled. Fixed
>> flag is required to disable auto-negotiation.
>>
>> Fixes: 88fbedcd5e5a ("app/testpmd: move speed and duplex parsing in a
>> function")
>> Cc: stable@dpdk.org
>>
>> Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
> 
> Acked-by: Bernard Iremonger <bernard.iremonger@intel.com>
> 

Applied to dpdk-next-net/master, thanks.
Ferruh Yigit April 23, 2019, 3:02 p.m. | #3
On 4/12/2019 2:12 PM, Andrew Rybchenko wrote:
> Setting exact link speed makes sense if auto-negotiation is
> disabled. Fixed flag is required to disable auto-negotiation.

Hi Andrew,

Fixed link speed is not supported by all PMDs and this change is breaking them
to set the speed in testpmd.

As long as device speed set correct, I believe the command doesn't really care
about if link mode is auto-negotiation or not.

I am for reverting this commit, is there any objection to revert it?

> 
> Fixes: 88fbedcd5e5a ("app/testpmd: move speed and duplex parsing in a function")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
> ---
>  app/test-pmd/cmdline.c | 12 ++++++------
>  1 file changed, 6 insertions(+), 6 deletions(-)
> 
> diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
> index 2ab03c111..691d818a6 100644
> --- a/app/test-pmd/cmdline.c
> +++ b/app/test-pmd/cmdline.c
> @@ -1440,17 +1440,17 @@ parse_and_check_speed_duplex(char *speedstr, char *duplexstr, uint32_t *speed)
>  			return -1;
>  		}
>  		if (!strcmp(speedstr, "1000")) {
> -			*speed = ETH_LINK_SPEED_1G;
> +			*speed = ETH_LINK_SPEED_1G | ETH_LINK_SPEED_FIXED;
>  		} else if (!strcmp(speedstr, "10000")) {
> -			*speed = ETH_LINK_SPEED_10G;
> +			*speed = ETH_LINK_SPEED_10G | ETH_LINK_SPEED_FIXED;
>  		} else if (!strcmp(speedstr, "25000")) {
> -			*speed = ETH_LINK_SPEED_25G;
> +			*speed = ETH_LINK_SPEED_25G | ETH_LINK_SPEED_FIXED;
>  		} else if (!strcmp(speedstr, "40000")) {
> -			*speed = ETH_LINK_SPEED_40G;
> +			*speed = ETH_LINK_SPEED_40G | ETH_LINK_SPEED_FIXED;
>  		} else if (!strcmp(speedstr, "50000")) {
> -			*speed = ETH_LINK_SPEED_50G;
> +			*speed = ETH_LINK_SPEED_50G | ETH_LINK_SPEED_FIXED;
>  		} else if (!strcmp(speedstr, "100000")) {
> -			*speed = ETH_LINK_SPEED_100G;
> +			*speed = ETH_LINK_SPEED_100G | ETH_LINK_SPEED_FIXED;
>  		} else if (!strcmp(speedstr, "auto")) {
>  			*speed = ETH_LINK_SPEED_AUTONEG;
>  		} else {
>
Ferruh Yigit April 23, 2019, 3:04 p.m. | #4
On 4/23/2019 4:02 PM, Ferruh Yigit wrote:
> On 4/12/2019 2:12 PM, Andrew Rybchenko wrote:
>> Setting exact link speed makes sense if auto-negotiation is
>> disabled. Fixed flag is required to disable auto-negotiation.
> 
> Hi Andrew,
> 
> Fixed link speed is not supported by all PMDs and this change is breaking them
> to set the speed in testpmd.
> 
> As long as device speed set correct, I believe the command doesn't really care
> about if link mode is auto-negotiation or not.
> 
> I am for reverting this commit, is there any objection to revert it?

cc'ing Wenjie who reported the issue.

> 
>>
>> Fixes: 88fbedcd5e5a ("app/testpmd: move speed and duplex parsing in a function")
>> Cc: stable@dpdk.org
>>
>> Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
>> ---
>>  app/test-pmd/cmdline.c | 12 ++++++------
>>  1 file changed, 6 insertions(+), 6 deletions(-)
>>
>> diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
>> index 2ab03c111..691d818a6 100644
>> --- a/app/test-pmd/cmdline.c
>> +++ b/app/test-pmd/cmdline.c
>> @@ -1440,17 +1440,17 @@ parse_and_check_speed_duplex(char *speedstr, char *duplexstr, uint32_t *speed)
>>  			return -1;
>>  		}
>>  		if (!strcmp(speedstr, "1000")) {
>> -			*speed = ETH_LINK_SPEED_1G;
>> +			*speed = ETH_LINK_SPEED_1G | ETH_LINK_SPEED_FIXED;
>>  		} else if (!strcmp(speedstr, "10000")) {
>> -			*speed = ETH_LINK_SPEED_10G;
>> +			*speed = ETH_LINK_SPEED_10G | ETH_LINK_SPEED_FIXED;
>>  		} else if (!strcmp(speedstr, "25000")) {
>> -			*speed = ETH_LINK_SPEED_25G;
>> +			*speed = ETH_LINK_SPEED_25G | ETH_LINK_SPEED_FIXED;
>>  		} else if (!strcmp(speedstr, "40000")) {
>> -			*speed = ETH_LINK_SPEED_40G;
>> +			*speed = ETH_LINK_SPEED_40G | ETH_LINK_SPEED_FIXED;
>>  		} else if (!strcmp(speedstr, "50000")) {
>> -			*speed = ETH_LINK_SPEED_50G;
>> +			*speed = ETH_LINK_SPEED_50G | ETH_LINK_SPEED_FIXED;
>>  		} else if (!strcmp(speedstr, "100000")) {
>> -			*speed = ETH_LINK_SPEED_100G;
>> +			*speed = ETH_LINK_SPEED_100G | ETH_LINK_SPEED_FIXED;
>>  		} else if (!strcmp(speedstr, "auto")) {
>>  			*speed = ETH_LINK_SPEED_AUTONEG;
>>  		} else {
>>
>
Andrew Rybchenko April 23, 2019, 3:44 p.m. | #5
On 4/23/19 6:04 PM, Ferruh Yigit wrote:
> On 4/23/2019 4:02 PM, Ferruh Yigit wrote:
>> On 4/12/2019 2:12 PM, Andrew Rybchenko wrote:
>>> Setting exact link speed makes sense if auto-negotiation is
>>> disabled. Fixed flag is required to disable auto-negotiation.
>> Hi Andrew,
>>
>> Fixed link speed is not supported by all PMDs and this change is breaking them
>> to set the speed in testpmd.

Not all. sfc definitely supports it.
It looks like bnxt, e1000, igb support it as well.

>> As long as device speed set correct, I believe the command doesn't really care
>> about if link mode is auto-negotiation or not.

Sometimes it is really important to disable auto-negotiation.

>> I am for reverting this commit, is there any objection to revert it?
> cc'ing Wenjie who reported the issue.

May be I misunderstood the purpose of the command.
Typically if someone wants to set link speed, it is assumed that
auto-negotiation should be disabled since user specifies what he really 
wants.
Of course, it is still valid request to keep auto-negotiation enabled, but
limit set of advertised speeds (may be keep only one).

So, I'm not happy to revert it completely. There is an option to revert 
to old
behaviour and add optional argument to disable auto-negotiation, but I
can't say that I like it, since it would make sense if the command 
allows more
than one speed to be advertised (to be auto-negotiated). If it is only 
one speed,
the default should be autoneg disabled.

Anyway documentation of the command should be improved.

Andrew.

>>> Fixes: 88fbedcd5e5a ("app/testpmd: move speed and duplex parsing in a function")
>>> Cc: stable@dpdk.org
>>>
>>> Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
>>> ---
>>>   app/test-pmd/cmdline.c | 12 ++++++------
>>>   1 file changed, 6 insertions(+), 6 deletions(-)
>>>
>>> diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
>>> index 2ab03c111..691d818a6 100644
>>> --- a/app/test-pmd/cmdline.c
>>> +++ b/app/test-pmd/cmdline.c
>>> @@ -1440,17 +1440,17 @@ parse_and_check_speed_duplex(char *speedstr, char *duplexstr, uint32_t *speed)
>>>   			return -1;
>>>   		}
>>>   		if (!strcmp(speedstr, "1000")) {
>>> -			*speed = ETH_LINK_SPEED_1G;
>>> +			*speed = ETH_LINK_SPEED_1G | ETH_LINK_SPEED_FIXED;
>>>   		} else if (!strcmp(speedstr, "10000")) {
>>> -			*speed = ETH_LINK_SPEED_10G;
>>> +			*speed = ETH_LINK_SPEED_10G | ETH_LINK_SPEED_FIXED;
>>>   		} else if (!strcmp(speedstr, "25000")) {
>>> -			*speed = ETH_LINK_SPEED_25G;
>>> +			*speed = ETH_LINK_SPEED_25G | ETH_LINK_SPEED_FIXED;
>>>   		} else if (!strcmp(speedstr, "40000")) {
>>> -			*speed = ETH_LINK_SPEED_40G;
>>> +			*speed = ETH_LINK_SPEED_40G | ETH_LINK_SPEED_FIXED;
>>>   		} else if (!strcmp(speedstr, "50000")) {
>>> -			*speed = ETH_LINK_SPEED_50G;
>>> +			*speed = ETH_LINK_SPEED_50G | ETH_LINK_SPEED_FIXED;
>>>   		} else if (!strcmp(speedstr, "100000")) {
>>> -			*speed = ETH_LINK_SPEED_100G;
>>> +			*speed = ETH_LINK_SPEED_100G | ETH_LINK_SPEED_FIXED;
>>>   		} else if (!strcmp(speedstr, "auto")) {
>>>   			*speed = ETH_LINK_SPEED_AUTONEG;
>>>   		} else {
>>>
Ferruh Yigit April 23, 2019, 3:53 p.m. | #6
On 4/23/2019 4:44 PM, Andrew Rybchenko wrote:
> On 4/23/19 6:04 PM, Ferruh Yigit wrote:
>> On 4/23/2019 4:02 PM, Ferruh Yigit wrote:
>>> On 4/12/2019 2:12 PM, Andrew Rybchenko wrote:
>>>> Setting exact link speed makes sense if auto-negotiation is
>>>> disabled. Fixed flag is required to disable auto-negotiation.
>>> Hi Andrew,
>>>
>>> Fixed link speed is not supported by all PMDs and this change is breaking them
>>> to set the speed in testpmd.
> 
> Not all. sfc definitely supports it.
> It looks like bnxt, e1000, igb support it as well.

The ones we know for now as not supported are ixgbe and i40e.

> 
>>> As long as device speed set correct, I believe the command doesn't really care
>>> about if link mode is auto-negotiation or not.
> 
> Sometimes it is really important to disable auto-negotiation.

If this is the case, we should cover this option in testpmd, but perhaps as an
extension to current command, like new parameter?

> 
>>> I am for reverting this commit, is there any objection to revert it?
>> cc'ing Wenjie who reported the issue.
> 
> May be I misunderstood the purpose of the command.
> Typically if someone wants to set link speed, it is assumed that
> auto-negotiation should be disabled since user specifies what he really 
> wants.
> Of course, it is still valid request to keep auto-negotiation enabled, but
> limit set of advertised speeds (may be keep only one).

I think the purpose of the command is not clear, and what you said makes sense,
only it is breaking the some PMDs is problem I think.

> 
> So, I'm not happy to revert it completely. There is an option to revert 
> to old
> behaviour and add optional argument to disable auto-negotiation, but I
> can't say that I like it, since it would make sense if the command 
> allows more
> than one speed to be advertised (to be auto-negotiated). If it is only 
> one speed,
> the default should be autoneg disabled.

Indeed I was suggesting same thing above, I didn't get the problem with this
approach, if the 'fixed' arg added it will work as you suggested, single fixed
speed value.

> 
> Anyway documentation of the command should be improved.
> 
> Andrew.
> 
>>>> Fixes: 88fbedcd5e5a ("app/testpmd: move speed and duplex parsing in a function")
>>>> Cc: stable@dpdk.org
>>>>
>>>> Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
>>>> ---
>>>>   app/test-pmd/cmdline.c | 12 ++++++------
>>>>   1 file changed, 6 insertions(+), 6 deletions(-)
>>>>
>>>> diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
>>>> index 2ab03c111..691d818a6 100644
>>>> --- a/app/test-pmd/cmdline.c
>>>> +++ b/app/test-pmd/cmdline.c
>>>> @@ -1440,17 +1440,17 @@ parse_and_check_speed_duplex(char *speedstr, char *duplexstr, uint32_t *speed)
>>>>   			return -1;
>>>>   		}
>>>>   		if (!strcmp(speedstr, "1000")) {
>>>> -			*speed = ETH_LINK_SPEED_1G;
>>>> +			*speed = ETH_LINK_SPEED_1G | ETH_LINK_SPEED_FIXED;
>>>>   		} else if (!strcmp(speedstr, "10000")) {
>>>> -			*speed = ETH_LINK_SPEED_10G;
>>>> +			*speed = ETH_LINK_SPEED_10G | ETH_LINK_SPEED_FIXED;
>>>>   		} else if (!strcmp(speedstr, "25000")) {
>>>> -			*speed = ETH_LINK_SPEED_25G;
>>>> +			*speed = ETH_LINK_SPEED_25G | ETH_LINK_SPEED_FIXED;
>>>>   		} else if (!strcmp(speedstr, "40000")) {
>>>> -			*speed = ETH_LINK_SPEED_40G;
>>>> +			*speed = ETH_LINK_SPEED_40G | ETH_LINK_SPEED_FIXED;
>>>>   		} else if (!strcmp(speedstr, "50000")) {
>>>> -			*speed = ETH_LINK_SPEED_50G;
>>>> +			*speed = ETH_LINK_SPEED_50G | ETH_LINK_SPEED_FIXED;
>>>>   		} else if (!strcmp(speedstr, "100000")) {
>>>> -			*speed = ETH_LINK_SPEED_100G;
>>>> +			*speed = ETH_LINK_SPEED_100G | ETH_LINK_SPEED_FIXED;
>>>>   		} else if (!strcmp(speedstr, "auto")) {
>>>>   			*speed = ETH_LINK_SPEED_AUTONEG;
>>>>   		} else {
>>>>
>

Patch

diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index 2ab03c111..691d818a6 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -1440,17 +1440,17 @@  parse_and_check_speed_duplex(char *speedstr, char *duplexstr, uint32_t *speed)
 			return -1;
 		}
 		if (!strcmp(speedstr, "1000")) {
-			*speed = ETH_LINK_SPEED_1G;
+			*speed = ETH_LINK_SPEED_1G | ETH_LINK_SPEED_FIXED;
 		} else if (!strcmp(speedstr, "10000")) {
-			*speed = ETH_LINK_SPEED_10G;
+			*speed = ETH_LINK_SPEED_10G | ETH_LINK_SPEED_FIXED;
 		} else if (!strcmp(speedstr, "25000")) {
-			*speed = ETH_LINK_SPEED_25G;
+			*speed = ETH_LINK_SPEED_25G | ETH_LINK_SPEED_FIXED;
 		} else if (!strcmp(speedstr, "40000")) {
-			*speed = ETH_LINK_SPEED_40G;
+			*speed = ETH_LINK_SPEED_40G | ETH_LINK_SPEED_FIXED;
 		} else if (!strcmp(speedstr, "50000")) {
-			*speed = ETH_LINK_SPEED_50G;
+			*speed = ETH_LINK_SPEED_50G | ETH_LINK_SPEED_FIXED;
 		} else if (!strcmp(speedstr, "100000")) {
-			*speed = ETH_LINK_SPEED_100G;
+			*speed = ETH_LINK_SPEED_100G | ETH_LINK_SPEED_FIXED;
 		} else if (!strcmp(speedstr, "auto")) {
 			*speed = ETH_LINK_SPEED_AUTONEG;
 		} else {