i387: Uninline the generic FP helpers that we expose to kernel modules
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 21 Feb 2012 18:25:45 +0000 (10:25 -0800)
committerH. Peter Anvin <hpa@linux.intel.com>
Tue, 21 Feb 2012 22:12:46 +0000 (14:12 -0800)
commit8546c008924d5fd1724fa698eaa92b414bafd50d
treefe2d3f50b350c884201c57ca6c331dd867c5d1e8
parent27e74da9800289e69ba907777df1e2085231eff7
i387: Uninline the generic FP helpers that we expose to kernel modules

Instead of exporting the very low-level internals of the FPU state
save/restore code (ie things like 'fpu_owner_task'), we should export
the higher-level interfaces.

Inlining these things is pointless anyway: sure, sometimes the end
result is small, but while 'stts()' can result in just three x86
instructions, those are not cheap instructions (writing %cr0 is a
serializing instruction and a very slow one at that).

So the overhead of a function call is not noticeable, and we really
don't want random modules mucking about with our internal state save
logic anyway.

So this unexports 'fpu_owner_task', and instead uninlines and exports
the actual functions that modules can use: fpu_kernel_begin/end() and
unlazy_fpu().

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Link: http://lkml.kernel.org/r/alpine.LFD.2.02.1202211339590.5354@i5.linux-foundation.org
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
arch/x86/include/asm/i387.h
arch/x86/kernel/cpu/common.c
arch/x86/kernel/i387.c