Skip to content

Commit e646469

Browse files
Jiri Slabytorvalds
authored andcommitted
exit_thread: accept a task parameter to be exited
We need to call exit_thread from copy_process in a fail path. So make it accept task_struct as a parameter. [v2] * s390: exit_thread_runtime_instr doesn't make sense to be called for non-current tasks. * arm: fix the comment in vfp_thread_copy * change 'me' to 'tsk' for task_struct * now we can change only archs that actually have exit_thread [akpm@linux-foundation.org: coding-style fixes] Signed-off-by: Jiri Slaby <jslaby@suse.cz> Cc: "David S. Miller" <davem@davemloft.net> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: "James E.J. Bottomley" <jejb@parisc-linux.org> Cc: Aurelien Jacquiot <a-jacquiot@ti.com> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Chen Liqin <liqin.linux@gmail.com> Cc: Chris Metcalf <cmetcalf@mellanox.com> Cc: Chris Zankel <chris@zankel.net> Cc: David Howells <dhowells@redhat.com> Cc: Fenghua Yu <fenghua.yu@intel.com> Cc: Geert Uytterhoeven <geert@linux-m68k.org> Cc: Guan Xuetao <gxt@mprc.pku.edu.cn> Cc: Haavard Skinnemoen <hskinnemoen@gmail.com> Cc: Hans-Christian Egtvedt <egtvedt@samfundet.no> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: Helge Deller <deller@gmx.de> Cc: Ingo Molnar <mingo@redhat.com> Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru> Cc: James Hogan <james.hogan@imgtec.com> Cc: Jeff Dike <jdike@addtoit.com> Cc: Jesper Nilsson <jesper.nilsson@axis.com> Cc: Jiri Slaby <jslaby@suse.cz> Cc: Jonas Bonn <jonas@southpole.se> Cc: Koichi Yasutake <yasutake.koichi@jp.panasonic.com> Cc: Lennox Wu <lennox.wu@gmail.com> Cc: Ley Foon Tan <lftan@altera.com> Cc: Mark Salter <msalter@redhat.com> Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Cc: Matt Turner <mattst88@gmail.com> Cc: Max Filippov <jcmvbkbc@gmail.com> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Michal Simek <monstr@monstr.eu> Cc: Mikael Starvik <starvik@axis.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Rich Felker <dalias@libc.org> Cc: Richard Henderson <rth@twiddle.net> Cc: Richard Kuo <rkuo@codeaurora.org> Cc: Richard Weinberger <richard@nod.at> Cc: Russell King <linux@arm.linux.org.uk> Cc: Steven Miao <realmz6@gmail.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Tony Luck <tony.luck@intel.com> Cc: Vineet Gupta <vgupta@synopsys.com> Cc: Will Deacon <will.deacon@arm.com> Cc: Yoshinori Sato <ysato@users.sourceforge.jp> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent 5f56a5d commit e646469

17 files changed

Lines changed: 42 additions & 47 deletions

File tree

arch/arm/kernel/process.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,9 +193,9 @@ EXPORT_SYMBOL_GPL(thread_notify_head);
193193
/*
194194
* Free current thread data structures etc..
195195
*/
196-
void exit_thread(void)
196+
void exit_thread(struct task_struct *tsk)
197197
{
198-
thread_notify(THREAD_NOTIFY_EXIT, current_thread_info());
198+
thread_notify(THREAD_NOTIFY_EXIT, task_thread_info(tsk));
199199
}
200200

201201
void flush_thread(void)

arch/arm/vfp/vfpmodule.c

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -156,10 +156,6 @@ static void vfp_thread_copy(struct thread_info *thread)
156156
* - we could be preempted if tree preempt rcu is enabled, so
157157
* it is unsafe to use thread->cpu.
158158
* THREAD_NOTIFY_EXIT
159-
* - the thread (v) will be running on the local CPU, so
160-
* v === current_thread_info()
161-
* - thread->cpu is the local CPU number at the time it is accessed,
162-
* but may change at any time.
163159
* - we could be preempted if tree preempt rcu is enabled, so
164160
* it is unsafe to use thread->cpu.
165161
*/

arch/avr32/kernel/process.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,9 @@ void machine_restart(char *cmd)
6262
/*
6363
* Free current thread data structures etc
6464
*/
65-
void exit_thread(void)
65+
void exit_thread(struct task_struct *tsk)
6666
{
67-
ocd_disable(current);
67+
ocd_disable(tsk);
6868
}
6969

7070
void flush_thread(void)

arch/cris/arch-v32/kernel/process.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ void default_idle(void)
3333
*/
3434

3535
extern void deconfigure_bp(long pid);
36-
void exit_thread(void)
36+
void exit_thread(struct task_struct *tsk)
3737
{
38-
deconfigure_bp(current->pid);
38+
deconfigure_bp(tsk->pid);
3939
}
4040

4141
/*

arch/ia64/kernel/perfmon.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4542,8 +4542,8 @@ pfm_context_unload(pfm_context_t *ctx, void *arg, int count, struct pt_regs *reg
45424542

45434543

45444544
/*
4545-
* called only from exit_thread(): task == current
4546-
* we come here only if current has a context attached (loaded or masked)
4545+
* called only from exit_thread()
4546+
* we come here only if the task has a context attached (loaded or masked)
45474547
*/
45484548
void
45494549
pfm_exit_thread(struct task_struct *task)

arch/ia64/kernel/process.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -570,22 +570,22 @@ flush_thread (void)
570570
}
571571

572572
/*
573-
* Clean up state associated with current thread. This is called when
573+
* Clean up state associated with a thread. This is called when
574574
* the thread calls exit().
575575
*/
576576
void
577-
exit_thread (void)
577+
exit_thread (struct task_struct *tsk)
578578
{
579579

580-
ia64_drop_fpu(current);
580+
ia64_drop_fpu(tsk);
581581
#ifdef CONFIG_PERFMON
582582
/* if needed, stop monitoring and flush state to perfmon context */
583-
if (current->thread.pfm_context)
584-
pfm_exit_thread(current);
583+
if (tsk->thread.pfm_context)
584+
pfm_exit_thread(tsk);
585585

586586
/* free debug register resources */
587-
if (current->thread.flags & IA64_THREAD_DBG_VALID)
588-
pfm_release_debug_registers(current);
587+
if (tsk->thread.flags & IA64_THREAD_DBG_VALID)
588+
pfm_release_debug_registers(tsk);
589589
#endif
590590
}
591591

arch/metag/kernel/process.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -345,10 +345,10 @@ void flush_thread(void)
345345
/*
346346
* Free current thread data structures etc.
347347
*/
348-
void exit_thread(void)
348+
void exit_thread(struct task_struct *tsk)
349349
{
350-
clear_fpu(&current->thread);
351-
clear_dsp(&current->thread);
350+
clear_fpu(&tsk->thread);
351+
clear_dsp(&tsk->thread);
352352
}
353353

354354
/* TODO: figure out how to unwind the kernel stack here to figure out

arch/mn10300/kernel/process.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,9 @@ void show_regs(struct pt_regs *regs)
103103
/*
104104
* free current thread data structures etc..
105105
*/
106-
void exit_thread(void)
106+
void exit_thread(struct task_struct *tsk)
107107
{
108-
exit_fpu(current);
108+
exit_fpu(tsk);
109109
}
110110

111111
void flush_thread(void)

arch/s390/kernel/process.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,10 @@ extern void kernel_thread_starter(void);
6868
/*
6969
* Free current thread data structures etc..
7070
*/
71-
void exit_thread(void)
71+
void exit_thread(struct task_struct *tsk)
7272
{
73-
exit_thread_runtime_instr();
73+
if (tsk == current)
74+
exit_thread_runtime_instr();
7475
}
7576

7677
void flush_thread(void)

arch/sh/kernel/process_64.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ void show_regs(struct pt_regs *regs)
288288
/*
289289
* Free current thread data structures etc..
290290
*/
291-
void exit_thread(void)
291+
void exit_thread(struct task_struct *tsk)
292292
{
293293
/*
294294
* See arch/sparc/kernel/process.c for the precedent for doing
@@ -307,9 +307,8 @@ void exit_thread(void)
307307
* which it would get safely nulled.
308308
*/
309309
#ifdef CONFIG_SH_FPU
310-
if (last_task_used_math == current) {
310+
if (last_task_used_math == tsk)
311311
last_task_used_math = NULL;
312-
}
313312
#endif
314313
}
315314

0 commit comments

Comments
 (0)