summaryrefslogtreecommitdiff
path: root/arch/x86/math-emu/fpu_system.h
diff options
context:
space:
mode:
authorIngo Molnar <mingo@kernel.org>2015-08-18 10:39:47 +0300
committerIngo Molnar <mingo@kernel.org>2015-08-18 10:39:47 +0300
commita5dd19249607474ed680f16b4f5e8477d2b68689 (patch)
tree1aeeef053773c07bc02f3aa637febc80ceb96732 /arch/x86/math-emu/fpu_system.h
parent6b7e26547fad7ace3dcb27a5babd2317fb9d1e12 (diff)
parent512255a2ad2c832ca7d4de9f31245f73781922d0 (diff)
downloadlinux-a5dd19249607474ed680f16b4f5e8477d2b68689.tar.xz
Merge branch 'x86/urgent' into x86/asm to fix up conflicts and to pick up fixes
Conflicts: arch/x86/entry/entry_64_compat.S arch/x86/math-emu/get_address.c Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'arch/x86/math-emu/fpu_system.h')
-rw-r--r--arch/x86/math-emu/fpu_system.h21
1 files changed, 18 insertions, 3 deletions
diff --git a/arch/x86/math-emu/fpu_system.h b/arch/x86/math-emu/fpu_system.h
index 9ccecb61a4fa..5e044d506b7a 100644
--- a/arch/x86/math-emu/fpu_system.h
+++ b/arch/x86/math-emu/fpu_system.h
@@ -16,9 +16,24 @@
#include <linux/kernel.h>
#include <linux/mm.h>
-/* s is always from a cpu register, and the cpu does bounds checking
- * during register load --> no further bounds checks needed */
-#define LDT_DESCRIPTOR(s) (((struct desc_struct *)current->mm->context.ldt)[(s) >> 3])
+#include <asm/desc.h>
+#include <asm/mmu_context.h>
+
+static inline struct desc_struct FPU_get_ldt_descriptor(unsigned seg)
+{
+ static struct desc_struct zero_desc;
+ struct desc_struct ret = zero_desc;
+
+#ifdef CONFIG_MODIFY_LDT_SYSCALL
+ seg >>= 3;
+ mutex_lock(&current->mm->context.lock);
+ if (current->mm->context.ldt && seg < current->mm->context.ldt->size)
+ ret = current->mm->context.ldt->entries[seg];
+ mutex_unlock(&current->mm->context.lock);
+#endif
+ return ret;
+}
+
#define SEG_D_SIZE(x) ((x).b & (3 << 21))
#define SEG_G_BIT(x) ((x).b & (1 << 23))
#define SEG_GRANULARITY(x) (((x).b & (1 << 23)) ? 4096 : 1)