diff options
Diffstat (limited to 'arch/x86/include/asm/desc.h')
| -rw-r--r-- | arch/x86/include/asm/desc.h | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/arch/x86/include/asm/desc.h b/arch/x86/include/asm/desc.h index 50d033a8947d..a94b82e8f156 100644 --- a/arch/x86/include/asm/desc.h +++ b/arch/x86/include/asm/desc.h | |||
| @@ -251,7 +251,8 @@ static inline void native_load_tls(struct thread_struct *t, unsigned int cpu) | |||
| 251 | gdt[GDT_ENTRY_TLS_MIN + i] = t->tls_array[i]; | 251 | gdt[GDT_ENTRY_TLS_MIN + i] = t->tls_array[i]; |
| 252 | } | 252 | } |
| 253 | 253 | ||
| 254 | #define _LDT_empty(info) \ | 254 | /* This intentionally ignores lm, since 32-bit apps don't have that field. */ |
| 255 | #define LDT_empty(info) \ | ||
| 255 | ((info)->base_addr == 0 && \ | 256 | ((info)->base_addr == 0 && \ |
| 256 | (info)->limit == 0 && \ | 257 | (info)->limit == 0 && \ |
| 257 | (info)->contents == 0 && \ | 258 | (info)->contents == 0 && \ |
| @@ -261,11 +262,18 @@ static inline void native_load_tls(struct thread_struct *t, unsigned int cpu) | |||
| 261 | (info)->seg_not_present == 1 && \ | 262 | (info)->seg_not_present == 1 && \ |
| 262 | (info)->useable == 0) | 263 | (info)->useable == 0) |
| 263 | 264 | ||
| 264 | #ifdef CONFIG_X86_64 | 265 | /* Lots of programs expect an all-zero user_desc to mean "no segment at all". */ |
| 265 | #define LDT_empty(info) (_LDT_empty(info) && ((info)->lm == 0)) | 266 | static inline bool LDT_zero(const struct user_desc *info) |
| 266 | #else | 267 | { |
| 267 | #define LDT_empty(info) (_LDT_empty(info)) | 268 | return (info->base_addr == 0 && |
| 268 | #endif | 269 | info->limit == 0 && |
| 270 | info->contents == 0 && | ||
| 271 | info->read_exec_only == 0 && | ||
| 272 | info->seg_32bit == 0 && | ||
| 273 | info->limit_in_pages == 0 && | ||
| 274 | info->seg_not_present == 0 && | ||
| 275 | info->useable == 0); | ||
| 276 | } | ||
| 269 | 277 | ||
| 270 | static inline void clear_LDT(void) | 278 | static inline void clear_LDT(void) |
| 271 | { | 279 | { |
