• Rusty Russell's avatar
    [PATCH] i386: Allow a kernel not to be in ring 0 · 78be3706
    Rusty Russell authored
    We allow for the fact that the guest kernel may not run in ring 0.  This
    requires some abstraction in a few places when setting %cs or checking
    privilege level (user vs kernel).
    
    This is Chris' [RFC PATCH 15/33] move segment checks to subarch, except rather
    than using #define USER_MODE_MASK which depends on a config option, we use
    Zach's more flexible approach of assuming ring 3 == userspace.  I also used
    "get_kernel_rpl()" over "get_kernel_cs()" because I think it reads better in
    the code...
    
    1) Remove the hardcoded 3 and introduce #define SEGMENT_RPL_MASK 3 2) Add a
    get_kernel_rpl() macro, and don't assume it's zero.
    
    And:
    
    Clean up of patch for letting kernel run other than ring 0:
    
    a. Add some comments about the SEGMENT_IS_*_CODE() macros.
    b. Add a USER_RPL macro.  (Code was comparing a value to a mask
       in some places and to the magic number 3 in other places.)
    c. Add macros for table indicator field and use them.
    d. Change the entry.S tests for LDT stack segment to use the macros
    Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
    Signed-off-by: default avatarZachary Amsden <zach@vmware.com>
    Signed-off-by: default avatarJeremy Fitzhardinge <jeremy@xensource.com>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarAndi Kleen <ak@suse.de>
    78be3706
fault.c 16.9 KB