diff options
| -rw-r--r-- | arch/x86/kernel/entry_64.S | 4 | ||||
| -rw-r--r-- | arch/x86/kernel/paravirt.c | 3 | ||||
| -rw-r--r-- | include/asm-x86/elf.h | 2 | ||||
| -rw-r--r-- | include/asm-x86/paravirt.h | 10 | ||||
| -rw-r--r-- | include/asm-x86/system.h | 3 | 
5 files changed, 18 insertions, 4 deletions
| diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S index 70fe13a1c41..07d69f26233 100644 --- a/arch/x86/kernel/entry_64.S +++ b/arch/x86/kernel/entry_64.S @@ -944,7 +944,7 @@ KPROBE_END(error_entry)         /* Reload gs selector with exception handling */         /* edi:  new selector */  -ENTRY(load_gs_index) +ENTRY(native_load_gs_index)  	CFI_STARTPROC  	pushf  	CFI_ADJUST_CFA_OFFSET 8 @@ -958,7 +958,7 @@ gs_change:  	CFI_ADJUST_CFA_OFFSET -8          ret  	CFI_ENDPROC -ENDPROC(load_gs_index) +ENDPROC(native_load_gs_index)          .section __ex_table,"a"          .align 8 diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c index b20c369cb89..27819e3e424 100644 --- a/arch/x86/kernel/paravirt.c +++ b/arch/x86/kernel/paravirt.c @@ -329,6 +329,9 @@ struct pv_cpu_ops pv_cpu_ops = {  	.store_idt = native_store_idt,  	.store_tr = native_store_tr,  	.load_tls = native_load_tls, +#ifdef CONFIG_X86_64 +	.load_gs_index = native_load_gs_index, +#endif  	.write_ldt_entry = native_write_ldt_entry,  	.write_gdt_entry = native_write_gdt_entry,  	.write_idt_entry = native_write_idt_entry, diff --git a/include/asm-x86/elf.h b/include/asm-x86/elf.h index 8f232dc5b5f..7be4733c793 100644 --- a/include/asm-x86/elf.h +++ b/include/asm-x86/elf.h @@ -83,9 +83,9 @@ extern unsigned int vdso_enabled;  	(((x)->e_machine == EM_386) || ((x)->e_machine == EM_486))  #include <asm/processor.h> +#include <asm/system.h>  #ifdef CONFIG_X86_32 -#include <asm/system.h>		/* for savesegment */  #include <asm/desc.h>  #define elf_check_arch(x)	elf_check_arch_ia32(x) diff --git a/include/asm-x86/paravirt.h b/include/asm-x86/paravirt.h index 3dc223da200..6d8966f9d19 100644 --- a/include/asm-x86/paravirt.h +++ b/include/asm-x86/paravirt.h @@ -115,6 +115,9 @@ struct pv_cpu_ops {  	void (*set_ldt)(const void *desc, unsigned entries);  	unsigned long (*store_tr)(void);  	void (*load_tls)(struct thread_struct *t, unsigned int cpu); +#ifdef CONFIG_X86_64 +	void (*load_gs_index)(unsigned int idx); +#endif  	void (*write_ldt_entry)(struct desc_struct *ldt, int entrynum,  				const void *desc);  	void (*write_gdt_entry)(struct desc_struct *, @@ -845,6 +848,13 @@ static inline void load_TLS(struct thread_struct *t, unsigned cpu)  	PVOP_VCALL2(pv_cpu_ops.load_tls, t, cpu);  } +#ifdef CONFIG_X86_64 +static inline void load_gs_index(unsigned int gs) +{ +	PVOP_VCALL1(pv_cpu_ops.load_gs_index, gs); +} +#endif +  static inline void write_ldt_entry(struct desc_struct *dt, int entry,  				   const void *desc)  { diff --git a/include/asm-x86/system.h b/include/asm-x86/system.h index f686aa6abfe..c4946c5964b 100644 --- a/include/asm-x86/system.h +++ b/include/asm-x86/system.h @@ -136,7 +136,7 @@ __asm__ __volatile__ ("movw %%dx,%1\n\t" \  #define set_base(ldt, base) _set_base(((char *)&(ldt)) , (base))  #define set_limit(ldt, limit) _set_limit(((char *)&(ldt)) , ((limit)-1)) -extern void load_gs_index(unsigned); +extern void native_load_gs_index(unsigned);  /*   * Load a segment. Fall back on loading the zero @@ -282,6 +282,7 @@ static inline void native_wbinvd(void)  #ifdef CONFIG_X86_64  #define read_cr8()	(native_read_cr8())  #define write_cr8(x)	(native_write_cr8(x)) +#define load_gs_index   native_load_gs_index  #endif  /* Clear the 'TS' bit */ | 
