summaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorPekka Riikonen <priikone@iki.fi>2013-05-13 14:32:07 +0200
committerH. Peter Anvin <hpa@linux.intel.com>2013-05-30 16:36:42 -0700
commit5187b28ff08249ab8a162e802209ed04e271ca02 (patch)
treed6620d76ab4011f03d5960f0e3dc4711e098b5fb /kernel
parent2baad6121e2b2fa3428ee6cb2298107be11ab23a (diff)
downloadlinux-5187b28ff08249ab8a162e802209ed04e271ca02.tar.gz
linux-5187b28ff08249ab8a162e802209ed04e271ca02.tar.bz2
linux-5187b28ff08249ab8a162e802209ed04e271ca02.zip
x86: Allow FPU to be used at interrupt time even with eagerfpu
With the addition of eagerfpu the irq_fpu_usable() now returns false negatives especially in the case of ksoftirqd and interrupted idle task, two common cases for FPU use for example in networking/crypto. With eagerfpu=off FPU use is possible in those contexts. This is because of the eagerfpu check in interrupted_kernel_fpu_idle(): ... * For now, with eagerfpu we will return interrupted kernel FPU * state as not-idle. TBD: Ideally we can change the return value * to something like __thread_has_fpu(current). But we need to * be careful of doing __thread_clear_has_fpu() before saving * the FPU etc for supporting nested uses etc. For now, take * the simple route! ... if (use_eager_fpu()) return 0; As eagerfpu is automatically "on" on those CPUs that also have the features like AES-NI this patch changes the eagerfpu check to return 1 in case the kernel_fpu_begin() has not been said yet. Once it has been the __thread_has_fpu() will start returning 0. Notice that with eagerfpu the __thread_has_fpu is always true initially. FPU use is thus always possible no matter what task is under us, unless the state has already been saved with kernel_fpu_begin(). [ hpa: this is a performance regression, not a correctness regression, but since it can be quite serious on CPUs which need encryption at interrupt time I am marking this for urgent/stable. ] Signed-off-by: Pekka Riikonen <priikone@iki.fi> Link: http://lkml.kernel.org/r/alpine.GSO.2.00.1305131356320.18@git.silcnet.org Cc: <stable@vger.kernel.org> v3.7+ Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Diffstat (limited to 'kernel')
0 files changed, 0 insertions, 0 deletions