[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <952c42aa-001f-42f0-8ec5-eb7e592b2629@huawei.com>
Date: Mon, 23 Sep 2024 15:00:49 +0800
From: Hongbo Li <lihongbo22@...wei.com>
To: Julia Lawall <julia.lawall@...ia.fr>
CC: <kees@...nel.org>, <andy@...nel.org>, <nicolas.palix@...g.fr>,
<linux-hardening@...r.kernel.org>, <cocci@...ia.fr>
Subject: Re: [PATCH -next v3 01/10] coccinelle: Add rules to find
str_true_false() replacements
On 2024/9/19 14:25, Julia Lawall wrote:
>
>
> On Wed, 11 Sep 2024, Hongbo Li wrote:
>
>> After str_true_false() has been introduced in the tree,
>> we can add rules for finding places where str_true_false()
>> can be used. A simple test can find over 10 locations.
>>
>> Signed-off-by: Hongbo Li <lihongbo22@...wei.com>
>> ---
>> scripts/coccinelle/api/string_choices.cocci | 19 +++++++++++++++++++
>> 1 file changed, 19 insertions(+)
>>
>> diff --git a/scripts/coccinelle/api/string_choices.cocci b/scripts/coccinelle/api/string_choices.cocci
>> index 5e729f187f22..6942ad7c4224 100644
>> --- a/scripts/coccinelle/api/string_choices.cocci
>> +++ b/scripts/coccinelle/api/string_choices.cocci
>> @@ -85,3 +85,22 @@ e << str_down_up_r.E;
>> @@
>>
>> coccilib.report.print_report(p[0], "opportunity for str_down_up(%s)" % e)
>> +
>> +@..._true_false depends on patch@
>> +expression E;
>> +@@
>> +- ((E) ? "true" : "false")
>> ++ str_true_false(E)
>> +
>> +@..._true_false_r depends on !patch exists@
>> +expression E;
>> +position P;
>> +@@
>> +* ((E@P) ? "true" : "false")
>
> Hello,
>
> The semantic patch is quite slow. Actually it tests a large number of
> cases, eg where the parentheses are present and where they are not.
>
> A small optimization is possible in the non-patch case. The outer
> parentheses are not needed, because you will already get the same
> information whether they are there or not.
>
> In contrast, for the patch case, the outer parentheses are needed, because
> if they are there we want to remove them, since they are not needed for
> the function call.
>
> Could you update the depends on !patch cases to remove the outer
> parentheses?
>
You mean in non-patch case, we could just write like the following?:
+@..._true_false_r depends on !patch exists@
+expression E;
+position P;
+@@
+* (E@P) ? "true" : "false"
I have tested in my machine. The impact of this parenthesis on
performance is very minimal.
With parentheses, the time on driver/ costs:
real 1m41.696s
user 85m24.069s
sys 1m8.891s
Without parentheses, the time on driver/ costs:
real 1m40.438s
user 85m53.987s
sys 1m7.981s
Thanks,
Hongbo
> Also, just one patch would be fine. There are many changes, but they are
> all sort of the same, so it would be easier just to see them all at once.
>
> thanks,
> julia
>
>
>> +
>> +@...ipt:python depends on report@
>> +p << str_true_false_r.P;
>> +e << str_true_false_r.E;
>> +@@
>> +
>> +coccilib.report.print_report(p[0], "opportunity for str_true_false(%s)" % e)
>> --
>> 2.34.1
>>
>>
Powered by blists - more mailing lists