| .. | .. | 
|---|
| 31 | 31 |   */ | 
|---|
| 32 | 32 |  #define SEGMENT_RPL_MASK	0x3 | 
|---|
| 33 | 33 |   | 
|---|
 | 34 | +/*  | 
|---|
 | 35 | + * When running on Xen PV, the actual privilege level of the kernel is 1,  | 
|---|
 | 36 | + * not 0. Testing the Requested Privilege Level in a segment selector to  | 
|---|
 | 37 | + * determine whether the context is user mode or kernel mode with  | 
|---|
 | 38 | + * SEGMENT_RPL_MASK is wrong because the PV kernel's privilege level  | 
|---|
 | 39 | + * matches the 0x3 mask.  | 
|---|
 | 40 | + *  | 
|---|
 | 41 | + * Testing with USER_SEGMENT_RPL_MASK is valid for both native and Xen PV  | 
|---|
 | 42 | + * kernels because privilege level 2 is never used.  | 
|---|
 | 43 | + */  | 
|---|
 | 44 | +#define USER_SEGMENT_RPL_MASK	0x2  | 
|---|
 | 45 | +  | 
|---|
| 34 | 46 |  /* User mode is privilege level 3: */ | 
|---|
| 35 | 47 |  #define USER_RPL		0x3 | 
|---|
| 36 | 48 |   | 
|---|
| .. | .. | 
|---|
| 210 | 222 |   | 
|---|
| 211 | 223 |  #endif | 
|---|
| 212 | 224 |   | 
|---|
| 213 |  | -#ifndef CONFIG_PARAVIRT  | 
|---|
| 214 |  | -# define get_kernel_rpl()		0  | 
|---|
| 215 |  | -#endif  | 
|---|
| 216 |  | -  | 
|---|
| 217 | 225 |  #define IDT_ENTRIES			256 | 
|---|
| 218 | 226 |  #define NUM_EXCEPTION_VECTORS		32 | 
|---|
| 219 | 227 |   | 
|---|
| 220 | 228 |  /* Bitmask of exception vectors which push an error code on the stack: */ | 
|---|
| 221 |  | -#define EXCEPTION_ERRCODE_MASK		0x00027d00  | 
|---|
 | 229 | +#define EXCEPTION_ERRCODE_MASK		0x20027d00  | 
|---|
| 222 | 230 |   | 
|---|
| 223 | 231 |  #define GDT_SIZE			(GDT_ENTRIES*8) | 
|---|
| 224 | 232 |  #define GDT_ENTRY_TLS_ENTRIES		3 | 
|---|
| .. | .. | 
|---|
| 289 | 297 |  extern const char early_idt_handler_array[NUM_EXCEPTION_VECTORS][EARLY_IDT_HANDLER_SIZE]; | 
|---|
| 290 | 298 |  extern void early_ignore_irq(void); | 
|---|
| 291 | 299 |   | 
|---|
| 292 |  | -#if defined(CONFIG_X86_64) && defined(CONFIG_XEN_PV)  | 
|---|
 | 300 | +#ifdef CONFIG_XEN_PV  | 
|---|
| 293 | 301 |  extern const char xen_early_idt_handler_array[NUM_EXCEPTION_VECTORS][XEN_EARLY_IDT_HANDLER_SIZE]; | 
|---|
| 294 | 302 |  #endif | 
|---|
| 295 | 303 |   | 
|---|