PM: Convert timers to use timer_setup()
Subsystems (4)
PATCH 1/1 PM: Convert timers to use timer_setup()
In preparation for unconditionally passing the struct timer_list pointer to all timer callbacks, switch to using the new timer_setup() and from_timer() to pass the timer pointer explicitly. Removes test of .data field, since that will be going away.
--- drivers/base/power/runtime.c | 7 +++---- drivers/base/power/wakeup.c | 11 +++++------ 2 files changed, 8 insertions(+), 10 deletions(-)
drivers/base/power/runtime.c +3 -4
@@ -894,9 +894,9 @@ static void pm_runtime_work(struct work_struct *work)* * Check if the time is right and queue a suspend request. */ -static void pm_suspend_timer_fn (unsigned long data) +static void pm_suspend_timer_fn (struct timer_list *t) { -struct device *dev = (struct device *)data; +struct device *dev =from_timer (dev, t, power.suspend_timer);unsigned long flags;unsigned long expires;
@@ -1499,8 +1499,7 @@ void pm_runtime_init(struct device *dev)INIT_WORK (&dev->power.work, pm_runtime_work); dev->power.timer_expires =0 ; -setup_timer (&dev->power.suspend_timer, pm_suspend_timer_fn, - (unsigned long )dev); +timer_setup (&dev->power.suspend_timer, pm_suspend_timer_fn,0 );init_waitqueue_head (&dev->power.wait_queue); }
drivers/base/power/wakeup.c +5 -6
@@ -54,7 +54,7 @@ static unsigned int saved_count;static DEFINE_SPINLOCK (events_lock); -static void pm_wakeup_timer_fn (unsigned long data); +static void pm_wakeup_timer_fn (struct timer_list *t);static LIST_HEAD (wakeup_sources);
@@ -176,7 +176,7 @@ void wakeup_source_add(struct wakeup_source *ws)return ;spin_lock_init (&ws->lock); -setup_timer (&ws->timer, pm_wakeup_timer_fn, (unsigned long )ws); +timer_setup (&ws->timer, pm_wakeup_timer_fn,0 ); ws->active = false; ws->last_time =ktime_get ();
@@ -481,8 +481,7 @@ static bool wakeup_source_not_registered(struct wakeup_source *ws)* Use timer struct to check if the given source is initialized * by wakeup_source_add. */ -return ws->timer.function != pm_wakeup_timer_fn || - ws->timer.data != (unsigned long )ws; +return ws->timer.function != (TIMER_FUNC_TYPE )pm_wakeup_timer_fn; }/*
@@ -724,9 +723,9 @@ EXPORT_SYMBOL_GPL(pm_relax);* in @data if it is currently active and its timer has not been canceled and * the expiration time of the timer is not in future. */ -static void pm_wakeup_timer_fn (unsigned long data) +static void pm_wakeup_timer_fn (struct timer_list *t) { -struct wakeup_source *ws = (struct wakeup_source *)data; +struct wakeup_source *ws =from_timer (ws, t, timer);unsigned long flags;spin_lock_irqsave (&ws->lock, flags);
Signature · 6 lines
2.7.4 -- Kees Cook Pixel Security
Quoted 11 lines · Kees Cook
In preparation for unconditionally passing the struct
timer_listpointer to all timer callbacks, switch to using the newtimer_setup()andfrom_timer()to pass the timer pointer explicitly. Removes test of .data field, since that will be going away.Cc "Rafael J. Wysocki" <[email protected]>Cc Pavel Machek <[email protected]>Cc Len Brown <[email protected]>Cc Greg Kroah-Hartman <[email protected]>Signed-off-by Kees Cook <[email protected]>
Quoted 75 lines
--- drivers/base/power/runtime.c | 7 +++---- drivers/base/power/wakeup.c | 11 +++++------ 2 files changed, 8 insertions(+), 10 deletions(-)drivers/base/power/runtime.c +3
-4@@ -894,9 +894,9 @@ static void pm_runtime_work(struct work_struct *work)* * Check if the time is right and queue a suspend request. */ -static void pm_suspend_timer_fn (unsigned long data) +static void pm_suspend_timer_fn (struct timer_list *t) { -struct device *dev = (struct device *)data; +struct device *dev =from_timer (dev, t, power.suspend_timer);unsigned long flags;unsigned long expires;@@ -1499,8 +1499,7 @@ void pm_runtime_init(struct device *dev)INIT_WORK (&dev->power.work, pm_runtime_work); dev->power.timer_expires =0 ; -setup_timer (&dev->power.suspend_timer, pm_suspend_timer_fn, - (unsigned long )dev); +timer_setup (&dev->power.suspend_timer, pm_suspend_timer_fn,0 );init_waitqueue_head (&dev->power.wait_queue); }drivers/base/power/wakeup.c +5
-6@@ -54,7 +54,7 @@ static unsigned int saved_count;static DEFINE_SPINLOCK (events_lock); -static void pm_wakeup_timer_fn (unsigned long data); +static void pm_wakeup_timer_fn (struct timer_list *t);static LIST_HEAD (wakeup_sources);@@ -176,7 +176,7 @@ void wakeup_source_add(struct wakeup_source *ws)return ;spin_lock_init (&ws->lock); -setup_timer (&ws->timer, pm_wakeup_timer_fn, (unsigned long )ws); +timer_setup (&ws->timer, pm_wakeup_timer_fn,0 ); ws->active = false; ws->last_time =ktime_get ();@@ -481,8 +481,7 @@ static bool wakeup_source_not_registered(struct wakeup_source *ws)* Use timer struct to check if the given source is initialized * by wakeup_source_add. */ -return ws->timer.function != pm_wakeup_timer_fn || - ws->timer.data != (unsigned long )ws; +return ws->timer.function != (TIMER_FUNC_TYPE )pm_wakeup_timer_fn; }/* @@ -724,9 +723,9 @@ EXPORT_SYMBOL_GPL(pm_relax);* in @data if it is currently active and its timer has not been canceled and * the expiration time of the timer is not in future. */ -static void pm_wakeup_timer_fn (unsigned long data) +static void pm_wakeup_timer_fn (struct timer_list *t) { -struct wakeup_source *ws = (struct wakeup_source *)data; +struct wakeup_source *ws =from_timer (ws, t, timer);unsigned long flags;spin_lock_irqsave (&ws->lock, flags);
Quoted 17 lines · Rafael J. Wysocki
Quoted 8 lines · Kees Cook
In preparation for unconditionally passing the struct
timer_listpointer to
all timer callbacks, switch to using the newtimer_setup()andfrom_timer()
to pass the timer pointer explicitly. Removes test of .data field, since that will be going away.Quoted 6 lines
Cc "Rafael J. Wysocki" <[email protected]>Cc Pavel Machek <[email protected]>Cc Len Brown <[email protected]>Cc Greg Kroah-Hartman <[email protected]>Signed-off-by Kees Cook <[email protected]>
Quoted 1 line
Do you want this to be carried in the timers tree, or can you pick it up?
Thanks!
-Kees
Signature · 2 lines
Kees Cook Pixel Security
Quoted 19 lines · CEST Kees Cook
Quoted 17 lines · Rafael J. Wysocki
Quoted 14 lines · Kees Cook
In preparation for unconditionally passing the struct
timer_listpointer to
all timer callbacks, switch to using the newtimer_setup()andfrom_timer()
to pass the timer pointer explicitly. Removes test of .data field, since that will be going away.Cc "Rafael J. Wysocki" <[email protected]>Cc Pavel Machek <[email protected]>Cc Len Brown <[email protected]>Cc Greg Kroah-Hartman <[email protected]>Signed-off-by Kees Cook <[email protected]>
Quoted 3 lines
Quoted 1 line
Do you want this to be carried in the timers tree, or can you pick it up?
I can pick it up, but only for 4.15.
Thanks,
Rafael
Quoted 20 lines · Rafael J. Wysocki
Quoted 19 lines · CEST Kees Cook
Quoted 17 lines · Rafael J. Wysocki
Quoted 14 lines · Kees Cook
In preparation for unconditionally passing the struct
timer_listpointer to
all timer callbacks, switch to using the newtimer_setup()andfrom_timer()
to pass the timer pointer explicitly. Removes test of .data field, since that will be going away.Cc "Rafael J. Wysocki" <[email protected]>Cc Pavel Machek <[email protected]>Cc Len Brown <[email protected]>Cc Greg Kroah-Hartman <[email protected]>Signed-off-by Kees Cook <[email protected]>
Quoted 5 lines
Quoted 3 lines
Quoted 1 line
Do you want this to be carried in the timers tree, or can you pick it up?
I can pick it up, but only for 4.15.
Yup, this is based on -next. Thanks!
-Kees
Signature · 2 lines
Kees Cook Pixel Security