Re: [PATCH] Evdev: Fix bug in checking duplicate clock change request

From: Aniroop Mathur
Date: Fri Oct 30 2015 - 09:04:55 EST


Hello Mr. Torokhov,

On Fri, Oct 30, 2015 at 4:45 PM, Dmitry Torokhov
<dmitry.torokhov@xxxxxxxxx> wrote:
> Hi Aniroop,
>
> On Thu, Oct 29, 2015 at 01:38:32AM +0530, Aniroop Mathur wrote:
>> From: Aniroop Mathur <a.mathur@xxxxxxxxxxx>
>>
>> clk_type and clkid stores different predefined clock identification
>> values so they cannot be compared for checking duplicate clock change
>> request. Therefore, lets fix it to avoid unexpected results.
>
> Good catch!
>

Thank you :)

>>
>> Signed-off-by: Aniroop Mathur <a.mathur@xxxxxxxxxxx>
>> Signed-off-by: Aniroop Mathur <aniroop.mathur@xxxxxxxxx>
>
> You only need one signoff, which one should I keep? The Samsung one?
>

Yes, Samsung one.

>> ---
>> drivers/input/evdev.c | 10 ++++++----
>> 1 file changed, 6 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c
>> index 08d4964..0d40f6f 100644
>> --- a/drivers/input/evdev.c
>> +++ b/drivers/input/evdev.c
>> @@ -56,7 +56,7 @@ struct evdev_client {
>> struct fasync_struct *fasync;
>> struct evdev *evdev;
>> struct list_head node;
>> - int clk_type;
>> + unsigned int clk_type;
>> bool revoked;
>> unsigned int bufsize;
>> struct input_event buffer[];
>> @@ -146,9 +146,7 @@ static void evdev_queue_syn_dropped(struct evdev_client *client)
>> static int evdev_set_clk_type(struct evdev_client *client, unsigned int clkid)
>> {
>> unsigned long flags;
>> -
>> - if (client->clk_type == clkid)
>> - return 0;
>> + unsigned int prev_clk_type = client->clk_type;
>
> I prefer the other way around: convert to a temp and then compare. I;ll
> fix it up on my side.
>

I thought that was the only better way of all.
I am not sure what exactly you're referring. I guess I need little
more elaboration here or anyways, I'll check it up up once you apply
it.

>>
>> switch (clkid) {
>>
>> @@ -165,6 +163,10 @@ static int evdev_set_clk_type(struct evdev_client *client, unsigned int clkid)
>> return -EINVAL;
>> }
>>
>> + /* No need to flush if clk_type is same as before */
>> + if (client->clk_type == prev_clk_type)
>> + return 0;
>> +
>> /*
>> * Flush pending events and queue SYN_DROPPED event,
>> * but only if the queue is not empty.
>> --
>> 2.6.2
>>
>
> Thanks.
>
> --
> Dmitry

Regards,
Aniroop
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/