2018-01-26 15:15:54

by Jia-Ju Bai

[permalink] [raw]
Subject: [PATCH] auxdisplay: charlcd: delete mdelay in long_sleep

The function long_sleep() calls mdelay() when in an interrupt handler.
But only charlcd_clear_display() and charlcd_init_display calls
long_sleep(), and my tool finds that the two functions
are never called in an interrupt handler.
Thus mdelay() and in_interrupt() are not necessary.

This is found by a static analysis tool named DCNS written by myself.

Signed-off-by: Jia-Ju Bai <[email protected]>
---
drivers/auxdisplay/charlcd.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/drivers/auxdisplay/charlcd.c b/drivers/auxdisplay/charlcd.c
index 642afd8..9e84795 100644
--- a/drivers/auxdisplay/charlcd.c
+++ b/drivers/auxdisplay/charlcd.c
@@ -102,10 +102,7 @@ struct charlcd_priv {
/* sleeps that many milliseconds with a reschedule */
static void long_sleep(int ms)
{
- if (in_interrupt())
- mdelay(ms);
- else
- schedule_timeout_interruptible(msecs_to_jiffies(ms));
+ schedule_timeout_interruptible(msecs_to_jiffies(ms));
}

/* turn the backlight on or off */
--
1.7.9.5



2018-01-29 06:51:36

by Willy Tarreau

[permalink] [raw]
Subject: Re: [PATCH] auxdisplay: charlcd: delete mdelay in long_sleep

Hi,

On Fri, Jan 26, 2018 at 11:19:15PM +0800, Jia-Ju Bai wrote:
> The function long_sleep() calls mdelay() when in an interrupt handler.
> But only charlcd_clear_display() and charlcd_init_display calls
> long_sleep(), and my tool finds that the two functions
> are never called in an interrupt handler.
> Thus mdelay() and in_interrupt() are not necessary.
>
> This is found by a static analysis tool named DCNS written by myself.

Looks good. This code is extremely old (started in 2.2) so I'm not
surprised at all that after many changes such parts are not used
anymore.

Acked-by: Willy Tarreau <[email protected]>

Willy

2018-02-12 13:38:22

by Miguel Ojeda

[permalink] [raw]
Subject: Re: [PATCH] auxdisplay: charlcd: delete mdelay in long_sleep

On Mon, Jan 29, 2018 at 7:50 AM, Willy Tarreau <[email protected]> wrote:
> Hi,
>
> On Fri, Jan 26, 2018 at 11:19:15PM +0800, Jia-Ju Bai wrote:
>> The function long_sleep() calls mdelay() when in an interrupt handler.
>> But only charlcd_clear_display() and charlcd_init_display calls
>> long_sleep(), and my tool finds that the two functions
>> are never called in an interrupt handler.
>> Thus mdelay() and in_interrupt() are not necessary.
>>
>> This is found by a static analysis tool named DCNS written by myself.
>
> Looks good. This code is extremely old (started in 2.2) so I'm not
> surprised at all that after many changes such parts are not used
> anymore.
>
> Acked-by: Willy Tarreau <[email protected]>

Thanks for the patch and the ack, putting it in the queue.

Miguel

>
> Willy

2018-02-12 16:53:18

by Miguel Ojeda

[permalink] [raw]
Subject: Re: [PATCH] auxdisplay: charlcd: delete mdelay in long_sleep

On Mon, Jan 29, 2018 at 7:50 AM, Willy Tarreau <[email protected]> wrote:
> Hi,
>
> On Fri, Jan 26, 2018 at 11:19:15PM +0800, Jia-Ju Bai wrote:
>> The function long_sleep() calls mdelay() when in an interrupt handler.
>> But only charlcd_clear_display() and charlcd_init_display calls
>> long_sleep(), and my tool finds that the two functions
>> are never called in an interrupt handler.
>> Thus mdelay() and in_interrupt() are not necessary.
>>
>> This is found by a static analysis tool named DCNS written by myself.
>
> Looks good. This code is extremely old (started in 2.2) so I'm not
> surprised at all that after many changes such parts are not used
> anymore.

By the way, maybe msleep_interruptible() should be used instead?
(since I guess you want a minimum time here, no?). It would also take
care of the jiffies to ms conversion, so the whole long_jump could be
removed.

>
> Acked-by: Willy Tarreau <[email protected]>
>
> Willy