From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932993AbdJPXxd (ORCPT ); Mon, 16 Oct 2017 19:53:33 -0400 Received: from mga05.intel.com ([192.55.52.43]:16080 "EHLO mga05.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932519AbdJPXxc (ORCPT ); Mon, 16 Oct 2017 19:53:32 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.43,388,1503385200"; d="scan'208";a="139088542" Subject: Re: [PATCH] PM: Convert timers to use timer_setup() To: Kees Cook Cc: "Rafael J. Wysocki" , Pavel Machek , Len Brown , Greg Kroah-Hartman , linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org References: <20171016232055.GA100369@beast> From: "Rafael J. Wysocki" Organization: Intel Technology Poland Sp. z o. o., KRS 101882, ul. Slowackiego 173, 80-298 Gdansk Message-ID: Date: Tue, 17 Oct 2017 01:53:28 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 In-Reply-To: <20171016232055.GA100369@beast> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-US Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 10/17/2017 1:20 AM, Kees Cook wrote: > 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. > > Cc: "Rafael J. Wysocki" > Cc: Pavel Machek > Cc: Len Brown > Cc: Greg Kroah-Hartman > Cc: linux-pm@vger.kernel.org > Signed-off-by: Kees Cook Acked-by: Rafael J. Wysocki > --- > drivers/base/power/runtime.c | 7 +++---- > drivers/base/power/wakeup.c | 11 +++++------ > 2 files changed, 8 insertions(+), 10 deletions(-) > > diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c > index 7bcf80fa9ada..1cea431c0adf 100644 > --- a/drivers/base/power/runtime.c > +++ b/drivers/base/power/runtime.c > @@ -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); > } > diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c > index cdd6f256da59..680ee1d36ac9 100644 > --- a/drivers/base/power/wakeup.c > +++ b/drivers/base/power/wakeup.c > @@ -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);