• Dave Hansen's avatar
    x86/mpx: Use the new get_xsave_field_ptr()API · a84eeaa9
    Dave Hansen authored
    The MPX registers (bndcsr/bndcfgu/bndstatus) are not directly
    accessible via normal instructions.  They essentially act as
    if they were floating point registers and are saved/restored
    along with those registers.
    
    There are two main paths in the MPX code where we care about
    the contents of these registers:
    
    	1. #BR (bounds) faults
    	2. the prctl() code where we are setting MPX up
    
    Both of those paths _might_ be called without the FPU having
    been used.  That means that 'tsk->thread.fpu.state' might
    never be allocated.
    
    Also, fpu_save_init() is not preempt-safe.  It was a bug to
    call it without disabling preemption.  The new
    get_xsave_addr() calls unlazy_fpu() instead and properly
    disables preemption.
    Signed-off-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
    Reviewed-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: Dave Hansen <dave@sr71.net>
    Cc: Fenghua Yu <fenghua.yu@intel.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Rik van Riel <riel@redhat.com>
    Cc: Suresh Siddha <sbsiddha@gmail.com>
    Cc: bp@alien8.de
    Link: http://lkml.kernel.org/r/20150607183701.BC0D37CF@viggo.jf.intel.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    a84eeaa9
mpx.c 24.2 KB