• Zachary Amsden's avatar
    [PATCH] x86: make IOPL explicit · a5201129
    Zachary Amsden authored
    The pushf/popf in switch_to are ONLY used to switch IOPL.  Making this
    explicit in C code is more clear.  This pushf/popf pair was added as a
    bugfix for leaking IOPL to unprivileged processes when using
    sysenter/sysexit based system calls (sysexit does not restore flags).
    
    When requesting an IOPL change in sys_iopl(), it is just as easy to change
    the current flags and the flags in the stack image (in case an IRET is
    required), but there is no reason to force an IRET if we came in from the
    SYSENTER path.
    
    This change is the minimal solution for supporting a paravirtualized Linux
    kernel that allows user processes to run with I/O privilege.  Other
    solutions require radical rewrites of part of the low level fault / system
    call handling code, or do not fully support sysenter based system calls.
    
    Unfortunately, this added one field to the thread_struct.  But as a bonus,
    on P4, the fastest time measured for switch_to() went from 312 to 260
    cycles, a win of about 17% in the fast case through this performance
    critical path.
    Signed-off-by: default avatarZachary Amsden <zach@vmware.com>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    a5201129
system.h 14.3 KB