Skip to content

Commit

Permalink
x86, fpu: drop the fpu state during thread exit
Browse files Browse the repository at this point in the history
There is no need to save any active fpu state to the task structure
memory if the task is dead. Just drop the state instead.

For example, this saved some 1770 xsave's during the system boot
of a two socket Xeon system.

Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
Link: http://lkml.kernel.org/r/1336692811-30576-4-git-send-email-suresh.b.siddha@intel.com
Cc: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
  • Loading branch information
Suresh Siddha authored and H. Peter Anvin committed May 16, 2012
1 parent d75f1b3 commit 1dcc8d7
Showing 1 changed file with 13 additions and 6 deletions.
19 changes: 13 additions & 6 deletions arch/x86/kernel/process.c
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,16 @@ void arch_task_cache_init(void)
SLAB_PANIC | SLAB_NOTRACK, NULL);
}

static inline void drop_fpu(struct task_struct *tsk)
{
/*
* Forget coprocessor state..
*/
tsk->fpu_counter = 0;
clear_fpu(tsk);
clear_used_math();
}

/*
* Free current thread data structures etc..
*/
Expand All @@ -109,6 +119,8 @@ void exit_thread(void)
put_cpu();
kfree(bp);
}

drop_fpu(me);
}

void show_regs(struct pt_regs *regs)
Expand Down Expand Up @@ -149,12 +161,7 @@ void flush_thread(void)

flush_ptrace_hw_breakpoint(tsk);
memset(tsk->thread.tls_array, 0, sizeof(tsk->thread.tls_array));
/*
* Forget coprocessor state..
*/
tsk->fpu_counter = 0;
clear_fpu(tsk);
clear_used_math();
drop_fpu(tsk);
}

static void hard_disable_TSC(void)
Expand Down

0 comments on commit 1dcc8d7

Please sign in to comment.