mirror of https://github.com/torvalds/linux.git
signal: Move MMCID exit out of sighand lock
There is no need anymore to keep this under sighand lock as the current code and the upcoming replacement are not depending on the exit state of a task anymore. That allows to use a mutex in the exit path. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Link: https://patch.msgid.link/20251119172549.706439391@linutronix.de
This commit is contained in:
parent
539115f08c
commit
2b1642b881
|
|
@ -2298,7 +2298,7 @@ static __always_inline void alloc_tag_restore(struct alloc_tag *tag, struct allo
|
||||||
void sched_mm_cid_before_execve(struct task_struct *t);
|
void sched_mm_cid_before_execve(struct task_struct *t);
|
||||||
void sched_mm_cid_after_execve(struct task_struct *t);
|
void sched_mm_cid_after_execve(struct task_struct *t);
|
||||||
void sched_mm_cid_fork(struct task_struct *t);
|
void sched_mm_cid_fork(struct task_struct *t);
|
||||||
void sched_mm_cid_exit_signals(struct task_struct *t);
|
void sched_mm_cid_exit(struct task_struct *t);
|
||||||
static inline int task_mm_cid(struct task_struct *t)
|
static inline int task_mm_cid(struct task_struct *t)
|
||||||
{
|
{
|
||||||
return t->mm_cid.cid;
|
return t->mm_cid.cid;
|
||||||
|
|
@ -2307,7 +2307,7 @@ static inline int task_mm_cid(struct task_struct *t)
|
||||||
static inline void sched_mm_cid_before_execve(struct task_struct *t) { }
|
static inline void sched_mm_cid_before_execve(struct task_struct *t) { }
|
||||||
static inline void sched_mm_cid_after_execve(struct task_struct *t) { }
|
static inline void sched_mm_cid_after_execve(struct task_struct *t) { }
|
||||||
static inline void sched_mm_cid_fork(struct task_struct *t) { }
|
static inline void sched_mm_cid_fork(struct task_struct *t) { }
|
||||||
static inline void sched_mm_cid_exit_signals(struct task_struct *t) { }
|
static inline void sched_mm_cid_exit(struct task_struct *t) { }
|
||||||
static inline int task_mm_cid(struct task_struct *t)
|
static inline int task_mm_cid(struct task_struct *t)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
|
|
@ -910,6 +910,7 @@ void __noreturn do_exit(long code)
|
||||||
user_events_exit(tsk);
|
user_events_exit(tsk);
|
||||||
|
|
||||||
io_uring_files_cancel();
|
io_uring_files_cancel();
|
||||||
|
sched_mm_cid_exit(tsk);
|
||||||
exit_signals(tsk); /* sets PF_EXITING */
|
exit_signals(tsk); /* sets PF_EXITING */
|
||||||
|
|
||||||
seccomp_filter_release(tsk);
|
seccomp_filter_release(tsk);
|
||||||
|
|
|
||||||
|
|
@ -10392,7 +10392,7 @@ static inline void mm_update_cpus_allowed(struct mm_struct *mm, const struct cpu
|
||||||
WRITE_ONCE(mm->mm_cid.nr_cpus_allowed, weight);
|
WRITE_ONCE(mm->mm_cid.nr_cpus_allowed, weight);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sched_mm_cid_exit_signals(struct task_struct *t)
|
void sched_mm_cid_exit(struct task_struct *t)
|
||||||
{
|
{
|
||||||
struct mm_struct *mm = t->mm;
|
struct mm_struct *mm = t->mm;
|
||||||
|
|
||||||
|
|
@ -10410,7 +10410,7 @@ void sched_mm_cid_exit_signals(struct task_struct *t)
|
||||||
/* Deactivate MM CID allocation across execve() */
|
/* Deactivate MM CID allocation across execve() */
|
||||||
void sched_mm_cid_before_execve(struct task_struct *t)
|
void sched_mm_cid_before_execve(struct task_struct *t)
|
||||||
{
|
{
|
||||||
sched_mm_cid_exit_signals(t);
|
sched_mm_cid_exit(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Reactivate MM CID after successful execve() */
|
/* Reactivate MM CID after successful execve() */
|
||||||
|
|
|
||||||
|
|
@ -3125,7 +3125,6 @@ void exit_signals(struct task_struct *tsk)
|
||||||
cgroup_threadgroup_change_begin(tsk);
|
cgroup_threadgroup_change_begin(tsk);
|
||||||
|
|
||||||
if (thread_group_empty(tsk) || (tsk->signal->flags & SIGNAL_GROUP_EXIT)) {
|
if (thread_group_empty(tsk) || (tsk->signal->flags & SIGNAL_GROUP_EXIT)) {
|
||||||
sched_mm_cid_exit_signals(tsk);
|
|
||||||
tsk->flags |= PF_EXITING;
|
tsk->flags |= PF_EXITING;
|
||||||
cgroup_threadgroup_change_end(tsk);
|
cgroup_threadgroup_change_end(tsk);
|
||||||
return;
|
return;
|
||||||
|
|
@ -3136,7 +3135,6 @@ void exit_signals(struct task_struct *tsk)
|
||||||
* From now this task is not visible for group-wide signals,
|
* From now this task is not visible for group-wide signals,
|
||||||
* see wants_signal(), do_signal_stop().
|
* see wants_signal(), do_signal_stop().
|
||||||
*/
|
*/
|
||||||
sched_mm_cid_exit_signals(tsk);
|
|
||||||
tsk->flags |= PF_EXITING;
|
tsk->flags |= PF_EXITING;
|
||||||
|
|
||||||
cgroup_threadgroup_change_end(tsk);
|
cgroup_threadgroup_change_end(tsk);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue