[tip: timers/core] posix-timers: Move posixtimer_exec_cleanup() out of exec.c
From: tip-bot2 for Thomas Gleixner
Date: Wed Sep 16 2026 - 14:46:28 EST
The following commit has been merged into the timers/core branch of tip:
Commit-ID: 7117334f022ba0cc7475f688efa68dd56e60f65b
Gitweb: https://git.kernel.org/tip/7117334f022ba0cc7475f688efa68dd56e60f65b
Author: Thomas Gleixner <tglx@xxxxxxxxxx>
AuthorDate: Fri, 11 Sep 2026 11:09:21 +02:00
Committer: Thomas Gleixner <tglx@xxxxxxxxxx>
CommitterDate: Wed, 16 Sep 2026 18:44:03 +02:00
posix-timers: Move posixtimer_exec_cleanup() out of exec.c
Move it to the POSIX timer code and provide a proper stub when POSIX timers
are disabled in Kconfig.
No functional change.
Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxx>
Tested-by: Kijo Park <red993688@xxxxxxxxx>
Reviewed-by: Frederic Weisbecker <frederic@xxxxxxxxxx>
Reviewed-by: Oleg Nesterov <oleg@xxxxxxxxxx>
Link: https://patch.msgid.link/20260911090541.680668094@xxxxxxxxxx
---
fs/exec.c | 13 +------------
include/linux/posix-timers.h | 3 +++
kernel/time/posix-timers.c | 9 +++++++++
3 files changed, 13 insertions(+), 12 deletions(-)
diff --git a/fs/exec.c b/fs/exec.c
index 8196434..1fc5671 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -1115,17 +1115,6 @@ static struct file *bprm_identity_file(const struct linux_binprm *bprm)
return bprm->file;
}
-static void posixtimer_exec(struct task_struct *me)
-{
-#ifdef CONFIG_POSIX_TIMERS
- spin_lock_irq(&me->sighand->siglock);
- posix_cpu_timers_exit(me);
- spin_unlock_irq(&me->sighand->siglock);
- exit_itimers(me);
- flush_itimer_signals();
-#endif
-}
-
/*
* Calling this is the point of no return. None of the failures will be
* seen by userspace since either the process is already taking a fatal
@@ -1171,7 +1160,7 @@ int begin_new_exec(struct linux_binprm * bprm)
* timer would not remove an enqueued timer because the TID lookup
* of the old TID fails.
*/
- posixtimer_exec(me);
+ posixtimer_exec();
/* see the comment in check_unsafe_exec() */
current->fs->in_exec = 0;
diff --git a/include/linux/posix-timers.h b/include/linux/posix-timers.h
index 9a1a0c6..7b31da6 100644
--- a/include/linux/posix-timers.h
+++ b/include/linux/posix-timers.h
@@ -232,6 +232,8 @@ void set_process_cpu_timer(struct task_struct *task, unsigned int clock_idx,
int update_rlimit_cpu(struct task_struct *task, unsigned long rlim_new);
#ifdef CONFIG_POSIX_TIMERS
+void posixtimer_exec(void);
+
static inline void posixtimer_putref(struct k_itimer *tmr)
{
if (rcuref_put(&tmr->rcuref))
@@ -259,6 +261,7 @@ static inline bool posixtimer_valid(const struct k_itimer *timer)
return !(val & 0x1UL);
}
#else /* CONFIG_POSIX_TIMERS */
+static inline void posixtimer_exec(void) { }
static inline void posixtimer_sigqueue_getref(struct sigqueue *q) { }
static inline void posixtimer_sigqueue_putref(struct sigqueue *q) { }
#endif /* !CONFIG_POSIX_TIMERS */
diff --git a/kernel/time/posix-timers.c b/kernel/time/posix-timers.c
index 436ba79..9611ed4 100644
--- a/kernel/time/posix-timers.c
+++ b/kernel/time/posix-timers.c
@@ -1120,6 +1120,15 @@ void exit_itimers(struct task_struct *tsk)
}
}
+void posixtimer_exec(void)
+{
+ scoped_guard(spinlock_irq, ¤t->sighand->siglock)
+ posix_cpu_timers_exit(current);
+
+ exit_itimers(current);
+ flush_itimer_signals();
+}
+
SYSCALL_DEFINE2(clock_settime, const clockid_t, which_clock,
const struct __kernel_timespec __user *, tp)
{