x86: Avoid unnecessary __clear_user() and xrstor in signal handling
authorSuresh Siddha <suresh.b.siddha@intel.com>
Tue, 22 Jun 2010 23:23:37 +0000 (16:23 -0700)
committerH. Peter Anvin <hpa@linux.intel.com>
Tue, 6 Jul 2010 23:31:04 +0000 (16:31 -0700)
commit8e221b6db4477643fefc885a97ea9889ac733140
tree96f87079865607c26e5a3ca3eab908187bec1fbf
parent815c4163b6c8ebf8152f42b0a5fd015cfdcedc78
x86: Avoid unnecessary __clear_user() and xrstor in signal handling

fxsave/xsave doesn't touch all the bytes in the memory layout used by
these instructions. Specifically SW reserved (bytes 464..511) fields
in the fxsave frame and the reserved fields in the xsave header.

To present a clean context for the signal handling, just clear these fields
instead of clearing the complete fxsave/xsave memory layout, when we dump these
registers directly to the user signal frame.

Also avoid the call to second xrstor (which inits the state not passed
in the signal frame) in restore_user_xstate() if all the state has already
been restored by the first xrstor.

These changes improve the performance of signal handling(by ~3-5% as measured
by the lat_sig).

Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
LKML-Reference: <1277249017.2847.85.camel@sbs-t61.sc.intel.com>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
arch/x86/include/asm/i387.h
arch/x86/include/asm/xsave.h
arch/x86/kernel/xsave.c