From 87cc037674342cbf6213829b2cc59bb71be60777 Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Mon, 28 Aug 2017 08:47:42 +0200 Subject: x86/ldttss: Clean up 32-bit descriptors Like the IDT descriptors, the LDT/TSS descriptors are pointlessly different on 32 and 64 bit kernels. Unify them and get rid of the duplicated code. Signed-off-by: Thomas Gleixner Cc: Andy Lutomirski Cc: Borislav Petkov Cc: Brian Gerst Cc: Denys Vlasenko Cc: H. Peter Anvin Cc: Josh Poimboeuf Cc: Linus Torvalds Cc: Peter Zijlstra Cc: Steven Rostedt Link: http://lkml.kernel.org/r/20170828064958.289634692@linutronix.de Signed-off-by: Ingo Molnar --- arch/x86/include/asm/desc.h | 26 +++----------------------- 1 file changed, 3 insertions(+), 23 deletions(-) (limited to 'arch/x86/include/asm/desc.h') diff --git a/arch/x86/include/asm/desc.h b/arch/x86/include/asm/desc.h index 2090cd223505..108a9e894019 100644 --- a/arch/x86/include/asm/desc.h +++ b/arch/x86/include/asm/desc.h @@ -166,42 +166,22 @@ native_write_gdt_entry(struct desc_struct *gdt, int entry, const void *desc, int memcpy(&gdt[entry], desc, size); } -static inline void pack_descriptor(struct desc_struct *desc, unsigned long base, - unsigned long limit, unsigned char type, - unsigned char flags) -{ - desc->limit0 = (u16) limit; - desc->base0 = (u16) base; - desc->base1 = (base >> 16) & 0xFF; - desc->type = type & 0x0F; - desc->s = 0; - desc->dpl = 0; - desc->p = 1; - desc->limit1 = (limit >> 16) & 0xF; - desc->avl = (flags >> 0) & 0x01; - desc->l = (flags >> 1) & 0x01; - desc->d = (flags >> 2) & 0x01; - desc->g = (flags >> 3) & 0x01; -} - static inline void set_tssldt_descriptor(void *d, unsigned long addr, unsigned type, unsigned size) { -#ifdef CONFIG_X86_64 - struct ldttss_desc64 *desc = d; + struct ldttss_desc *desc = d; memset(desc, 0, sizeof(*desc)); - desc->limit0 = size & 0xFFFF; + desc->limit0 = (u16) size; desc->base0 = (u16) addr; desc->base1 = (addr >> 16) & 0xFF; desc->type = type; desc->p = 1; desc->limit1 = (size >> 16) & 0xF; desc->base2 = (addr >> 24) & 0xFF; +#ifdef CONFIG_X86_64 desc->base3 = (u32) (addr >> 32); -#else - pack_descriptor((struct desc_struct *)d, addr, size, type, 0); #endif } -- cgit v1.2.3