2020-09-18 16:59:38

by Grygorii Strashko

[permalink] [raw]
Subject: [PATCH] pm: runtime: fix timer_expires on 32bits arch

The commit 8234f6734c5d ("PM-runtime: Switch autosuspend over to using
hrtimers") switched PM runtime autosuspend to use hrtimers and all related
time accounting in ns, but missed update the struct
dev_pm_info->timer_expires to u64. This causes timer_expires value to be
truncated on 32bits architectures when assignment is done from u64 values:

rpm_suspend()
|- dev->power.timer_expires = expires;

Hence, fix it by changing timer_expires type to u64.

Cc: Vincent Guittot <[email protected]>
Fixes: 8234f6734c5d ("PM-runtime: Switch autosuspend over to using hrtimers")
Signed-off-by: Grygorii Strashko <[email protected]>
---
include/linux/pm.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/linux/pm.h b/include/linux/pm.h
index a30a4b54df52..47aca6bac1d6 100644
--- a/include/linux/pm.h
+++ b/include/linux/pm.h
@@ -590,7 +590,7 @@ struct dev_pm_info {
#endif
#ifdef CONFIG_PM
struct hrtimer suspend_timer;
- unsigned long timer_expires;
+ u64 timer_expires;
struct work_struct work;
wait_queue_head_t wait_queue;
struct wake_irq *wakeirq;
--
2.17.1


2020-09-18 21:05:05

by Pavel Machek

[permalink] [raw]
Subject: Re: [PATCH] pm: runtime: fix timer_expires on 32bits arch

On Fri 2020-09-18 19:55:18, Grygorii Strashko wrote:
> The commit 8234f6734c5d ("PM-runtime: Switch autosuspend over to using
> hrtimers") switched PM runtime autosuspend to use hrtimers and all related
> time accounting in ns, but missed update the struct
> dev_pm_info->timer_expires to u64. This causes timer_expires value to be
> truncated on 32bits architectures when assignment is done from u64 values:
>
> rpm_suspend()
> |- dev->power.timer_expires = expires;
>
> Hence, fix it by changing timer_expires type to u64.
>
> Cc: Vincent Guittot <[email protected]>
> Fixes: 8234f6734c5d ("PM-runtime: Switch autosuspend over to using hrtimers")
> Signed-off-by: Grygorii Strashko <[email protected]>

Acked-by: Pavel Machek <[email protected]>

--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html


Attachments:
(No filename) (920.00 B)
signature.asc (201.00 B)
Download all attachments

2020-09-21 06:54:53

by Vincent Guittot

[permalink] [raw]
Subject: Re: [PATCH] pm: runtime: fix timer_expires on 32bits arch

On Fri, 18 Sep 2020 at 18:55, Grygorii Strashko
<[email protected]> wrote:
>
> The commit 8234f6734c5d ("PM-runtime: Switch autosuspend over to using
> hrtimers") switched PM runtime autosuspend to use hrtimers and all related
> time accounting in ns, but missed update the struct
> dev_pm_info->timer_expires to u64. This causes timer_expires value to be
> truncated on 32bits architectures when assignment is done from u64 values:
>
> rpm_suspend()
> |- dev->power.timer_expires = expires;
>
> Hence, fix it by changing timer_expires type to u64.
>
> Cc: Vincent Guittot <[email protected]>
> Fixes: 8234f6734c5d ("PM-runtime: Switch autosuspend over to using hrtimers")
> Signed-off-by: Grygorii Strashko <[email protected]>

Acked-by: Vincent Guittot <[email protected]>

> ---
> include/linux/pm.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/include/linux/pm.h b/include/linux/pm.h
> index a30a4b54df52..47aca6bac1d6 100644
> --- a/include/linux/pm.h
> +++ b/include/linux/pm.h
> @@ -590,7 +590,7 @@ struct dev_pm_info {
> #endif
> #ifdef CONFIG_PM
> struct hrtimer suspend_timer;
> - unsigned long timer_expires;
> + u64 timer_expires;
> struct work_struct work;
> wait_queue_head_t wait_queue;
> struct wake_irq *wakeirq;
> --
> 2.17.1
>

2020-09-21 14:17:27

by Rafael J. Wysocki

[permalink] [raw]
Subject: Re: [PATCH] pm: runtime: fix timer_expires on 32bits arch

On Mon, Sep 21, 2020 at 8:51 AM Vincent Guittot
<[email protected]> wrote:
>
> On Fri, 18 Sep 2020 at 18:55, Grygorii Strashko
> <[email protected]> wrote:
> >
> > The commit 8234f6734c5d ("PM-runtime: Switch autosuspend over to using
> > hrtimers") switched PM runtime autosuspend to use hrtimers and all related
> > time accounting in ns, but missed update the struct
> > dev_pm_info->timer_expires to u64. This causes timer_expires value to be
> > truncated on 32bits architectures when assignment is done from u64 values:
> >
> > rpm_suspend()
> > |- dev->power.timer_expires = expires;
> >
> > Hence, fix it by changing timer_expires type to u64.
> >
> > Cc: Vincent Guittot <[email protected]>
> > Fixes: 8234f6734c5d ("PM-runtime: Switch autosuspend over to using hrtimers")
> > Signed-off-by: Grygorii Strashko <[email protected]>
>
> Acked-by: Vincent Guittot <[email protected]>

Applied as 5.9-rc7 material with some edits in the subject and
changelog, thanks!

> > ---
> > include/linux/pm.h | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/include/linux/pm.h b/include/linux/pm.h
> > index a30a4b54df52..47aca6bac1d6 100644
> > --- a/include/linux/pm.h
> > +++ b/include/linux/pm.h
> > @@ -590,7 +590,7 @@ struct dev_pm_info {
> > #endif
> > #ifdef CONFIG_PM
> > struct hrtimer suspend_timer;
> > - unsigned long timer_expires;
> > + u64 timer_expires;
> > struct work_struct work;
> > wait_queue_head_t wait_queue;
> > struct wake_irq *wakeirq;
> > --
> > 2.17.1
> >