From: tip-bot for Kees Cook <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: linux@roeck-us.net, pmladek@suse.com, cmetcalf@mellanox.com,
manish.chopra@cavium.com, oleg@redhat.com, hpa@zytor.com,
harish.patil@cavium.com, paulus@samba.org,
gregkh@linuxfoundation.org, benh@kernel.crashing.org,
tj@kernel.org, kvalo@qca.qualcomm.com, ubraun@linux.vnet.ibm.com,
schwidefsky@de.ibm.com, stefanr@s5r6.in-berlin.de,
john.stultz@linaro.org, akpm@linux-foundation.org,
rjw@rjwysocki.net, tglx@linutronix.de, mingo@kernel.org,
ralf@linux-mips.org, jwi@linux.vnet.ibm.com, sre@kernel.org,
viresh.kumar@linaro.org, linux-kernel@vger.kernel.org,
jiangshanlai@gmail.com, martin.petersen@oracle.com, pavel@ucw.cz,
sudipm.mukherjee@gmail.com, sboyd@codeaurora.org, arnd@arndb.de,
mark.gross@intel.com, jejb@linux.vnet.ibm.com,
keescook@chromium.org, geert@linux-m68k.org,
heiko.carstens@de.ibm.com, wim@iguana.be, len.brown@intel.com,
mdr@sgi.com, mpe@ellerman.id.au
Subject: [tip:timers/core] timer: Convert schedule_timeout() to use from_timer()
Date: Thu, 5 Oct 2017 06:03:49 -0700 [thread overview]
Message-ID: <tip-58e1177b4cd10b0d358faf7d7ebb3779f98bc3ea@git.kernel.org> (raw)
In-Reply-To: <1507159627-127660-2-git-send-email-keescook@chromium.org>
Commit-ID: 58e1177b4cd10b0d358faf7d7ebb3779f98bc3ea
Gitweb: https://git.kernel.org/tip/58e1177b4cd10b0d358faf7d7ebb3779f98bc3ea
Author: Kees Cook <keescook@chromium.org>
AuthorDate: Wed, 4 Oct 2017 16:26:55 -0700
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Thu, 5 Oct 2017 15:01:16 +0200
timer: Convert schedule_timeout() to use from_timer()
In preparation for unconditionally passing the struct timer_list pointer to
all timer callbacks, switch to using the new from_timer() helper and passing
the timer pointer explicitly. Since this special timer is on the stack, it
needs to have a wrapper structure to carry state once .data is eliminated.
Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-mips@linux-mips.org
Cc: Petr Mladek <pmladek@suse.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Lai Jiangshan <jiangshanlai@gmail.com>
Cc: Sebastian Reichel <sre@kernel.org>
Cc: Kalle Valo <kvalo@qca.qualcomm.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Pavel Machek <pavel@ucw.cz>
Cc: linux1394-devel@lists.sourceforge.net
Cc: Chris Metcalf <cmetcalf@mellanox.com>
Cc: linux-s390@vger.kernel.org
Cc: linux-wireless@vger.kernel.org
Cc: "James E.J. Bottomley" <jejb@linux.vnet.ibm.com>
Cc: Wim Van Sebroeck <wim@iguana.be>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Ursula Braun <ubraun@linux.vnet.ibm.com>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Viresh Kumar <viresh.kumar@linaro.org>
Cc: Harish Patil <harish.patil@cavium.com>
Cc: Guenter Roeck <linux@roeck-us.net>
Cc: Manish Chopra <manish.chopra@cavium.com>
Cc: Len Brown <len.brown@intel.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: linux-pm@vger.kernel.org
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Tejun Heo <tj@kernel.org>
Cc: Julian Wiedmann <jwi@linux.vnet.ibm.com>
Cc: John Stultz <john.stultz@linaro.org>
Cc: Mark Gross <mark.gross@intel.com>
Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>
Cc: linux-watchdog@vger.kernel.org
Cc: linux-scsi@vger.kernel.org
Cc: "Martin K. Petersen" <martin.petersen@oracle.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Stephen Boyd <sboyd@codeaurora.org>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Stefan Richter <stefanr@s5r6.in-berlin.de>
Cc: Michael Reed <mdr@sgi.com>
Cc: netdev@vger.kernel.org
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: linuxppc-dev@lists.ozlabs.org
Cc: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
Link: https://lkml.kernel.org/r/1507159627-127660-2-git-send-email-keescook@chromium.org
---
include/linux/timer.h | 8 ++++++++
kernel/time/timer.c | 26 +++++++++++++++++++-------
2 files changed, 27 insertions(+), 7 deletions(-)
diff --git a/include/linux/timer.h b/include/linux/timer.h
index 6383c52..5ef5c9e 100644
--- a/include/linux/timer.h
+++ b/include/linux/timer.h
@@ -179,6 +179,14 @@ static inline void timer_setup(struct timer_list *timer,
(TIMER_DATA_TYPE)timer, flags);
}
+static inline void timer_setup_on_stack(struct timer_list *timer,
+ void (*callback)(struct timer_list *),
+ unsigned int flags)
+{
+ __setup_timer_on_stack(timer, (TIMER_FUNC_TYPE)callback,
+ (TIMER_DATA_TYPE)timer, flags);
+}
+
#define from_timer(var, callback_timer, timer_fieldname) \
container_of(callback_timer, typeof(*var), timer_fieldname)
diff --git a/kernel/time/timer.c b/kernel/time/timer.c
index f2674a0..38613ce 100644
--- a/kernel/time/timer.c
+++ b/kernel/time/timer.c
@@ -1668,9 +1668,20 @@ void run_local_timers(void)
raise_softirq(TIMER_SOFTIRQ);
}
-static void process_timeout(unsigned long __data)
+/*
+ * Since schedule_timeout()'s timer is defined on the stack, it must store
+ * the target task on the stack as well.
+ */
+struct process_timer {
+ struct timer_list timer;
+ struct task_struct *task;
+};
+
+static void process_timeout(struct timer_list *t)
{
- wake_up_process((struct task_struct *)__data);
+ struct process_timer *timeout = from_timer(timeout, t, timer);
+
+ wake_up_process(timeout->task);
}
/**
@@ -1704,7 +1715,7 @@ static void process_timeout(unsigned long __data)
*/
signed long __sched schedule_timeout(signed long timeout)
{
- struct timer_list timer;
+ struct process_timer timer;
unsigned long expire;
switch (timeout)
@@ -1738,13 +1749,14 @@ signed long __sched schedule_timeout(signed long timeout)
expire = timeout + jiffies;
- setup_timer_on_stack(&timer, process_timeout, (unsigned long)current);
- __mod_timer(&timer, expire, false);
+ timer.task = current;
+ timer_setup_on_stack(&timer.timer, process_timeout, 0);
+ __mod_timer(&timer.timer, expire, false);
schedule();
- del_singleshot_timer_sync(&timer);
+ del_singleshot_timer_sync(&timer.timer);
/* Remove the timer from the object tracker */
- destroy_timer_on_stack(&timer);
+ destroy_timer_on_stack(&timer.timer);
timeout = expire - jiffies;
next prev parent reply other threads:[~2017-10-05 13:18 UTC|newest]
Thread overview: 94+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-10-04 23:26 [PATCH 00/13] timer: Start conversion to timer_setup() Kees Cook
2017-10-04 23:26 ` Kees Cook
2017-10-04 23:26 ` Kees Cook
2017-10-04 23:26 ` [PATCH 01/13] timer: Convert schedule_timeout() to use from_timer() Kees Cook
2017-10-04 23:26 ` Kees Cook
2017-10-04 23:26 ` Kees Cook
2017-10-05 13:03 ` tip-bot for Kees Cook [this message]
2017-10-04 23:26 ` [PATCH 02/13] timer: Remove init_timer_pinned_deferrable() in favor of timer_setup() Kees Cook
2017-10-04 23:26 ` Kees Cook
2017-10-04 23:26 ` Kees Cook
2017-10-05 13:04 ` [tip:timers/core] " tip-bot for Kees Cook
2017-10-04 23:26 ` [PATCH 03/13] timer: Remove init_timer_on_stack() in favor of timer_setup_on_stack() Kees Cook
2017-10-04 23:26 ` Kees Cook
2017-10-04 23:26 ` Kees Cook
2017-10-05 13:04 ` [tip:timers/core] " tip-bot for Kees Cook
2017-10-05 13:18 ` [PATCH 03/13] " Rafael J. Wysocki
2017-10-05 13:18 ` Rafael J. Wysocki
2017-10-05 13:18 ` Rafael J. Wysocki
2017-10-04 23:26 ` [PATCH 04/13] timer: Remove init_timer_pinned() in favor of timer_setup() Kees Cook
2017-10-04 23:26 ` Kees Cook
2017-10-04 23:26 ` Kees Cook
2017-10-05 0:41 ` David Miller
2017-10-05 0:41 ` David Miller
2017-10-05 13:05 ` [tip:timers/core] " tip-bot for Kees Cook
2017-10-04 23:26 ` [PATCH 05/13] timer: Remove init_timer_deferrable() " Kees Cook
2017-10-04 23:26 ` Kees Cook
2017-10-04 23:26 ` Kees Cook
2017-10-05 0:41 ` David Miller
2017-10-05 0:41 ` David Miller
2017-10-05 1:02 ` Sebastian Reichel
2017-10-05 1:02 ` Sebastian Reichel
2017-10-05 13:05 ` [tip:timers/core] " tip-bot for Kees Cook
2017-10-04 23:27 ` [PATCH 06/13] timer: Remove users of TIMER_DEFERRED_INITIALIZER Kees Cook
2017-10-04 23:27 ` Kees Cook
2017-10-04 23:27 ` Kees Cook
2017-10-05 13:05 ` [tip:timers/core] " tip-bot for Kees Cook
2017-10-04 23:27 ` [PATCH 07/13] timer: Remove last user of TIMER_INITIALIZER Kees Cook
2017-10-04 23:27 ` Kees Cook
2017-10-04 23:27 ` Kees Cook
2017-10-05 13:06 ` [tip:timers/core] " tip-bot for Kees Cook
2017-10-05 22:39 ` [PATCH 07/13] " Gross, Mark
2017-10-05 22:39 ` Gross, Mark
2017-10-05 22:39 ` Gross, Mark
2017-10-05 22:39 ` Gross, Mark
2017-10-04 23:27 ` [PATCH 08/13] timer: Remove unused static initializer macros Kees Cook
2017-10-04 23:27 ` Kees Cook
2017-10-04 23:27 ` Kees Cook
2017-10-05 13:06 ` [tip:timers/core] " tip-bot for Kees Cook
2017-10-04 23:27 ` [PATCH 09/13] timer: Remove users of expire and data arguments to DEFINE_TIMER Kees Cook
2017-10-04 23:27 ` Kees Cook
2017-10-04 23:27 ` Kees Cook
2017-10-05 0:12 ` Guenter Roeck
2017-10-05 0:12 ` Guenter Roeck
2017-10-05 0:12 ` Guenter Roeck
2017-10-05 13:07 ` [tip:timers/core] " tip-bot for Kees Cook
2017-10-09 13:23 ` [PATCH 09/13] " Ralf Baechle
2017-10-09 13:23 ` Ralf Baechle
2017-10-04 23:27 ` [PATCH 10/13] timer: Remove expires and data arguments from DEFINE_TIMER Kees Cook
2017-10-04 23:27 ` Kees Cook
2017-10-04 23:27 ` Kees Cook
2017-10-05 0:13 ` Guenter Roeck
2017-10-05 0:13 ` Guenter Roeck
2017-10-05 0:13 ` Guenter Roeck
2017-10-05 0:40 ` David Miller
2017-10-05 0:40 ` David Miller
2017-10-05 5:28 ` Greg Kroah-Hartman
2017-10-05 5:28 ` Greg Kroah-Hartman
2017-10-05 5:28 ` Greg Kroah-Hartman
2017-10-05 6:54 ` Kalle Valo
2017-10-05 6:54 ` Kalle Valo
2017-10-05 6:54 ` Kalle Valo
2017-10-05 8:59 ` Arnd Bergmann
2017-10-05 8:59 ` Arnd Bergmann
2017-10-05 8:59 ` Arnd Bergmann
2017-10-05 13:07 ` [tip:timers/core] " tip-bot for Kees Cook
2017-10-09 13:27 ` [PATCH 10/13] " Ralf Baechle
2017-10-09 13:27 ` Ralf Baechle
2017-10-04 23:27 ` [PATCH 11/13] timer: Remove expires argument from __TIMER_INITIALIZER() Kees Cook
2017-10-04 23:27 ` Kees Cook
2017-10-04 23:27 ` Kees Cook
2017-10-05 13:07 ` [tip:timers/core] " tip-bot for Kees Cook
2017-10-11 10:15 ` [PATCH 11/13] " Petr Mladek
2017-10-11 10:15 ` Petr Mladek
2017-10-04 23:27 ` [PATCH 12/13] kthread: Convert callback to use from_timer() Kees Cook
2017-10-04 23:27 ` Kees Cook
2017-10-04 23:27 ` Kees Cook
2017-10-05 13:08 ` [tip:timers/core] " tip-bot for Kees Cook
2017-10-11 10:20 ` [PATCH 12/13] " Petr Mladek
2017-10-11 10:20 ` Petr Mladek
2017-10-11 10:20 ` Petr Mladek
2017-10-04 23:27 ` [PATCH 13/13] workqueue: " Kees Cook
2017-10-04 23:27 ` Kees Cook
2017-10-04 23:27 ` Kees Cook
2017-10-05 13:08 ` [tip:timers/core] " tip-bot for Kees Cook
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=tip-58e1177b4cd10b0d358faf7d7ebb3779f98bc3ea@git.kernel.org \
--to=tipbot@zytor.com \
--cc=akpm@linux-foundation.org \
--cc=arnd@arndb.de \
--cc=benh@kernel.crashing.org \
--cc=cmetcalf@mellanox.com \
--cc=geert@linux-m68k.org \
--cc=gregkh@linuxfoundation.org \
--cc=harish.patil@cavium.com \
--cc=heiko.carstens@de.ibm.com \
--cc=hpa@zytor.com \
--cc=jejb@linux.vnet.ibm.com \
--cc=jiangshanlai@gmail.com \
--cc=john.stultz@linaro.org \
--cc=jwi@linux.vnet.ibm.com \
--cc=keescook@chromium.org \
--cc=kvalo@qca.qualcomm.com \
--cc=len.brown@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=linux@roeck-us.net \
--cc=manish.chopra@cavium.com \
--cc=mark.gross@intel.com \
--cc=martin.petersen@oracle.com \
--cc=mdr@sgi.com \
--cc=mingo@kernel.org \
--cc=mpe@ellerman.id.au \
--cc=oleg@redhat.com \
--cc=paulus@samba.org \
--cc=pavel@ucw.cz \
--cc=pmladek@suse.com \
--cc=ralf@linux-mips.org \
--cc=rjw@rjwysocki.net \
--cc=sboyd@codeaurora.org \
--cc=schwidefsky@de.ibm.com \
--cc=sre@kernel.org \
--cc=stefanr@s5r6.in-berlin.de \
--cc=sudipm.mukherjee@gmail.com \
--cc=tglx@linutronix.de \
--cc=tj@kernel.org \
--cc=ubraun@linux.vnet.ibm.com \
--cc=viresh.kumar@linaro.org \
--cc=wim@iguana.be \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.