[PATCH v2] selftests/intel_pstate: fix operand expected

Alessandro Zanni posted 1 patch 1 month, 1 week ago
tools/testing/selftests/intel_pstate/run.sh | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
[PATCH v2] selftests/intel_pstate: fix operand expected
Posted by Alessandro Zanni 1 month, 1 week ago
This fix solves theses errors, when calling kselftest with
targets "intel_pstate":

./run.sh: line 90: / 1000: syntax error: operand expected (error token is "/ 1000")

./run.sh: line 92: / 1000: syntax error: operand expected (error token is "/ 1000")

To error was found by running tests manually with the command:
make kselftest TARGETS=intel_pstate

Signed-off-by: Alessandro Zanni <alessandro.zanni87@gmail.com>
---

Notes:
    v2: removed debug echos

 tools/testing/selftests/intel_pstate/run.sh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/testing/selftests/intel_pstate/run.sh b/tools/testing/selftests/intel_pstate/run.sh
index e7008f614ad7..0c1b6c1308a4 100755
--- a/tools/testing/selftests/intel_pstate/run.sh
+++ b/tools/testing/selftests/intel_pstate/run.sh
@@ -87,9 +87,9 @@ mkt_freq=${_mkt_freq}0
 
 # Get the ranges from cpupower
 _min_freq=$(cpupower frequency-info -l | tail -1 | awk ' { print $1 } ')
-min_freq=$(($_min_freq / 1000))
+min_freq=$((_min_freq / 1000))
 _max_freq=$(cpupower frequency-info -l | tail -1 | awk ' { print $2 } ')
-max_freq=$(($_max_freq / 1000))
+max_freq=$((_max_freq / 1000))
 
 
 [ $EVALUATE_ONLY -eq 0 ] && for freq in `seq $max_freq -100 $min_freq`
-- 
2.43.0
Re: [PATCH v2] selftests/intel_pstate: fix operand expected
Posted by Shuah Khan 1 month, 1 week ago
On 10/14/24 11:21, Alessandro Zanni wrote:
> This fix solves theses errors, when calling kselftest with
> targets "intel_pstate":
> 
> ./run.sh: line 90: / 1000: syntax error: operand expected (error token is "/ 1000")
> 
> ./run.sh: line 92: / 1000: syntax error: operand expected (error token is "/ 1000")
> 
> To error was found by running tests manually with the command:
> make kselftest TARGETS=intel_pstate
> 
> Signed-off-by: Alessandro Zanni <alessandro.zanni87@gmail.com>
> ---
> 
> Notes:
>      v2: removed debug echos

See my comments on your v1. It would help to wait a bit
to send v2.

I can't reproduce this problem on Linux 6.12-rc3.
What's you environment like?

> 
>   tools/testing/selftests/intel_pstate/run.sh | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/testing/selftests/intel_pstate/run.sh b/tools/testing/selftests/intel_pstate/run.sh
> index e7008f614ad7..0c1b6c1308a4 100755
> --- a/tools/testing/selftests/intel_pstate/run.sh
> +++ b/tools/testing/selftests/intel_pstate/run.sh
> @@ -87,9 +87,9 @@ mkt_freq=${_mkt_freq}0
>   
>   # Get the ranges from cpupower
>   _min_freq=$(cpupower frequency-info -l | tail -1 | awk ' { print $1 } ')
> -min_freq=$(($_min_freq / 1000))
> +min_freq=$((_min_freq / 1000))
>   _max_freq=$(cpupower frequency-info -l | tail -1 | awk ' { print $2 } ')
> -max_freq=$(($_max_freq / 1000))
> +max_freq=$((_max_freq / 1000))
>   
>   
>   [ $EVALUATE_ONLY -eq 0 ] && for freq in `seq $max_freq -100 $min_freq`

thanks,
-- Shuah
Re: [PATCH v2] selftests/intel_pstate: fix operand expected
Posted by Alessandro Zanni 1 month, 1 week ago
On 24/10/14 06:05, Shuah Khan wrote:
> On 10/14/24 11:21, Alessandro Zanni wrote:
> > This fix solves theses errors, when calling kselftest with
> > targets "intel_pstate":
> > 
> > ./run.sh: line 90: / 1000: syntax error: operand expected (error token is "/ 1000")
> > 
> > ./run.sh: line 92: / 1000: syntax error: operand expected (error token is "/ 1000")
> > 
> > To error was found by running tests manually with the command:
> > make kselftest TARGETS=intel_pstate
> > 
> > Signed-off-by: Alessandro Zanni <alessandro.zanni87@gmail.com>
> > ---
> > 
> > Notes:
> >      v2: removed debug echos
> 
> See my comments on your v1. It would help to wait a bit
> to send v2.

Ok and thanks for the comments.

> I can't reproduce this problem on Linux 6.12-rc3.
> What's you environment like?

My kernel version is 6.12.0-rc3 from "make kernelversion".

I think the errors are related to the bash type and version, rather than the kernel version.
My bash version is: GNU bash, version 5.2.21(1)-release (x86_64-pc-linux-gnu)

In fact, some shell do not complete expressions in variables and $var and command substitutions 
are done before the arithmetic expression itself is parsed.
That expansion happens without regard for the arithmetic syntax, so with $var you can mess 
with that.
So, I suggest to avoid to use $var inside a arithmetic expansion in order to be cross-platform.

> > 
> >   tools/testing/selftests/intel_pstate/run.sh | 4 ++--
> >   1 file changed, 2 insertions(+), 2 deletions(-)
> > 
> > diff --git a/tools/testing/selftests/intel_pstate/run.sh b/tools/testing/selftests/intel_pstate/run.sh
> > index e7008f614ad7..0c1b6c1308a4 100755
> > --- a/tools/testing/selftests/intel_pstate/run.sh
> > +++ b/tools/testing/selftests/intel_pstate/run.sh
> > @@ -87,9 +87,9 @@ mkt_freq=${_mkt_freq}0
> >   # Get the ranges from cpupower
> >   _min_freq=$(cpupower frequency-info -l | tail -1 | awk ' { print $1 } ')
> > -min_freq=$(($_min_freq / 1000))
> > +min_freq=$((_min_freq / 1000))
> >   _max_freq=$(cpupower frequency-info -l | tail -1 | awk ' { print $2 } ')
> > -max_freq=$(($_max_freq / 1000))
> > +max_freq=$((_max_freq / 1000))
> >   [ $EVALUATE_ONLY -eq 0 ] && for freq in `seq $max_freq -100 $min_freq`
> 
> thanks,
> -- Shuah

Thanks,
Alessandro
Re: [PATCH v2] selftests/intel_pstate: fix operand expected
Posted by Alessandro Zanni 1 month ago
> On 24/10/14 06:05, Shuah Khan wrote:
> > On 10/14/24 11:21, Alessandro Zanni wrote:
> > > This fix solves theses errors, when calling kselftest with
> > > targets "intel_pstate":
> > >
> > > ./run.sh: line 90: / 1000: syntax error: operand expected (error token is "/ 1000")
> > >
> > > ./run.sh: line 92: / 1000: syntax error: operand expected (error token is "/ 1000")
> > >
> > > To error was found by running tests manually with the command:
> > > make kselftest TARGETS=intel_pstate
> > >
> > > Signed-off-by: Alessandro Zanni <alessandro.zanni87@gmail.com>
> > > ---
> > >
> > > Notes:
> > >      v2: removed debug echos
> >
> > See my comments on your v1. It would help to wait a bit
> > to send v2.
>
> Ok and thanks for the comments.
>
> > I can't reproduce this problem on Linux 6.12-rc3.
> > What's you environment like?
>
> My kernel version is 6.12.0-rc3 from "make kernelversion".
>
> I think the errors are related to the bash type and version, rather than the kernel version.
> My bash version is: GNU bash, version 5.2.21(1)-release (x86_64-pc-linux-gnu)
>
> In fact, some shell do not complete expressions in variables and $var and command substitutions
> are done before the arithmetic expression itself is parsed.
> That expansion happens without regard for the arithmetic syntax, so with $var you can mess
> with that.
> So, I suggest to avoid to use $var inside a arithmetic expansion in order to be cross-platform.

Hello,
any thoughts about this patch?

Were you able to replicate the error?

> > >
> > >   tools/testing/selftests/intel_pstate/run.sh | 4 ++--
> > >   1 file changed, 2 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/tools/testing/selftests/intel_pstate/run.sh b/tools/testing/selftests/intel_pstate/run.sh
> > > index e7008f614ad7..0c1b6c1308a4 100755
> > > --- a/tools/testing/selftests/intel_pstate/run.sh
> > > +++ b/tools/testing/selftests/intel_pstate/run.sh
> > > @@ -87,9 +87,9 @@ mkt_freq=${_mkt_freq}0
> > >   # Get the ranges from cpupower
> > >   _min_freq=$(cpupower frequency-info -l | tail -1 | awk ' { print $1 } ')
> > > -min_freq=$(($_min_freq / 1000))
> > > +min_freq=$((_min_freq / 1000))
> > >   _max_freq=$(cpupower frequency-info -l | tail -1 | awk ' { print $2 } ')
> > > -max_freq=$(($_max_freq / 1000))
> > > +max_freq=$((_max_freq / 1000))
> > >   [ $EVALUATE_ONLY -eq 0 ] && for freq in `seq $max_freq -100 $min_freq`
> >
> > thanks,
> > -- Shuah
>
> Thanks,
> Alessandro

Feel free to indicate if I can provide something useful for your evaluation.

Thanks,
Alessandro
Re: [PATCH v2] selftests/intel_pstate: fix operand expected
Posted by Shuah Khan 1 month ago
On 10/21/24 09:04, Alessandro Zanni wrote:
>> On 24/10/14 06:05, Shuah Khan wrote:
>>> On 10/14/24 11:21, Alessandro Zanni wrote:
>>>> This fix solves theses errors, when calling kselftest with
>>>> targets "intel_pstate":
>>>>
>>>> ./run.sh: line 90: / 1000: syntax error: operand expected (error token is "/ 1000")
>>>>
>>>> ./run.sh: line 92: / 1000: syntax error: operand expected (error token is "/ 1000")
>>>>
>>>> To error was found by running tests manually with the command:
>>>> make kselftest TARGETS=intel_pstate
>>>>
>>>> Signed-off-by: Alessandro Zanni <alessandro.zanni87@gmail.com>
>>>> ---
>>>>
>>>> Notes:
>>>>       v2: removed debug echos
>>>
>>> See my comments on your v1. It would help to wait a bit
>>> to send v2.
>>
>> Ok and thanks for the comments.
>>
>>> I can't reproduce this problem on Linux 6.12-rc3.
>>> What's you environment like?
>>
>> My kernel version is 6.12.0-rc3 from "make kernelversion".
>>
>> I think the errors are related to the bash type and version, rather than the kernel version.
>> My bash version is: GNU bash, version 5.2.21(1)-release (x86_64-pc-linux-gnu)
>>
>> In fact, some shell do not complete expressions in variables and $var and command substitutions
>> are done before the arithmetic expression itself is parsed.
>> That expansion happens without regard for the arithmetic syntax, so with $var you can mess
>> with that.
>> So, I suggest to avoid to use $var inside a arithmetic expansion in order to be cross-platform.
> 
> Hello,
> any thoughts about this patch?
> 
> Were you able to replicate the error?
> 

Yes I was able to reproduce what you are seeing.

>>>>
>>>>    tools/testing/selftests/intel_pstate/run.sh | 4 ++--
>>>>    1 file changed, 2 insertions(+), 2 deletions(-)
>>>>
>>>> diff --git a/tools/testing/selftests/intel_pstate/run.sh b/tools/testing/selftests/intel_pstate/run.sh
>>>> index e7008f614ad7..0c1b6c1308a4 100755
>>>> --- a/tools/testing/selftests/intel_pstate/run.sh
>>>> +++ b/tools/testing/selftests/intel_pstate/run.sh
>>>> @@ -87,9 +87,9 @@ mkt_freq=${_mkt_freq}0
>>>>    # Get the ranges from cpupower
>>>>    _min_freq=$(cpupower frequency-info -l | tail -1 | awk ' { print $1 } ')
>>>> -min_freq=$(($_min_freq / 1000))
>>>> +min_freq=$((_min_freq / 1000))
>>>>    _max_freq=$(cpupower frequency-info -l | tail -1 | awk ' { print $2 } ')
>>>> -max_freq=$(($_max_freq / 1000))
>>>> +max_freq=$((_max_freq / 1000))
>>>>    [ $EVALUATE_ONLY -eq 0 ] && for freq in `seq $max_freq -100 $min_freq`
>>>

The patch is fine. I applied and run it. I found another problem
when cpupower command doesn't run

# ./run.sh: line 89: cpupower: command not found
# ./run.sh: line 91: cpupower: command not found

So you would have to check if min_freq and max_freq are valid
and don't continue if cpupower isn't found. This test depends
on cpupower.

You can do that as a separate patch and send it as a series with
commit log changes I suggested on v1 of this patch.

thanks,
-- Shuah
Re: [PATCH v2] selftests/intel_pstate: fix operand expected
Posted by Alessandro Zanni 1 month ago
> On 10/21/24 09:04, Alessandro Zanni wrote:
> >> On 24/10/14 06:05, Shuah Khan wrote:
> >>> On 10/14/24 11:21, Alessandro Zanni wrote:
> >>>> This fix solves theses errors, when calling kselftest with
> >>>> targets "intel_pstate":
> >>>>
> >>>> ./run.sh: line 90: / 1000: syntax error: operand expected (error token is "/ 1000")
> >>>>
> >>>> ./run.sh: line 92: / 1000: syntax error: operand expected (error token is "/ 1000")
> >>>>
> >>>> To error was found by running tests manually with the command:
> >>>> make kselftest TARGETS=intel_pstate
> >>>>
> >>>> Signed-off-by: Alessandro Zanni <alessandro.zanni87@gmail.com>
> >>>> ---
> >>>>
> >>>> Notes:
> >>>>       v2: removed debug echos
> >>>
> >>> See my comments on your v1. It would help to wait a bit
> >>> to send v2.
> >>
> >> Ok and thanks for the comments.
> >>
> >>> I can't reproduce this problem on Linux 6.12-rc3.
> >>> What's you environment like?
> >>
> >> My kernel version is 6.12.0-rc3 from "make kernelversion".
> >>
> >> I think the errors are related to the bash type and version, rather than the kernel version.
> >> My bash version is: GNU bash, version 5.2.21(1)-release (x86_64-pc-linux-gnu)
> >>
> >> In fact, some shell do not complete expressions in variables and $var and command substitutions
> >> are done before the arithmetic expression itself is parsed.
> >> That expansion happens without regard for the arithmetic syntax, so with $var you can mess
> >> with that.
> >> So, I suggest to avoid to use $var inside a arithmetic expansion in order to be cross-platform.
> >
> > Hello,
> > any thoughts about this patch?
> >
> > Were you able to replicate the error?
> >
>
> Yes I was able to reproduce what you are seeing.
>
> >>>>
> >>>>    tools/testing/selftests/intel_pstate/run.sh | 4 ++--
> >>>>    1 file changed, 2 insertions(+), 2 deletions(-)
> >>>>
> >>>> diff --git a/tools/testing/selftests/intel_pstate/run.sh b/tools/testing/selftests/intel_pstate/run.sh
> >>>> index e7008f614ad7..0c1b6c1308a4 100755
> >>>> --- a/tools/testing/selftests/intel_pstate/run.sh
> >>>> +++ b/tools/testing/selftests/intel_pstate/run.sh
> >>>> @@ -87,9 +87,9 @@ mkt_freq=${_mkt_freq}0
> >>>>    # Get the ranges from cpupower
> >>>>    _min_freq=$(cpupower frequency-info -l | tail -1 | awk ' { print $1 } ')
> >>>> -min_freq=$(($_min_freq / 1000))
> >>>> +min_freq=$((_min_freq / 1000))
> >>>>    _max_freq=$(cpupower frequency-info -l | tail -1 | awk ' { print $2 } ')
> >>>> -max_freq=$(($_max_freq / 1000))
> >>>> +max_freq=$((_max_freq / 1000))
> >>>>    [ $EVALUATE_ONLY -eq 0 ] && for freq in `seq $max_freq -100 $min_freq`
> >>>
>
> The patch is fine. I applied and run it. I found another problem
> when cpupower command doesn't run
>
> # ./run.sh: line 89: cpupower: command not found
> # ./run.sh: line 91: cpupower: command not found
>
> So you would have to check if min_freq and max_freq are valid
> and don't continue if cpupower isn't found. This test depends
> on cpupower.

Thanks for the feedback.
I'm going to work also on the cpupower issue.

> You can do that as a separate patch and send it as a series with
> commit log changes I suggested on v1 of this patch.

Ok.

> thanks,
> -- Shuah

Thank again,
Alessandro