diff options
Diffstat (limited to 'arch/x86/include/asm/processor.h')
| -rw-r--r-- | arch/x86/include/asm/processor.h | 17 | 
1 files changed, 13 insertions, 4 deletions
| diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h index c24297268ebc..617805981cce 100644 --- a/arch/x86/include/asm/processor.h +++ b/arch/x86/include/asm/processor.h @@ -132,6 +132,8 @@ struct cpuinfo_x86 {  	/* Index into per_cpu list: */  	u16			cpu_index;  	u32			microcode; +	/* Address space bits used by the cache internally */ +	u8			x86_cache_bits;  	unsigned		initialized : 1;  } __randomize_layout; @@ -153,7 +155,8 @@ enum cpuid_regs_idx {  #define X86_VENDOR_CENTAUR	5  #define X86_VENDOR_TRANSMETA	7  #define X86_VENDOR_NSC		8 -#define X86_VENDOR_NUM		9 +#define X86_VENDOR_HYGON	9 +#define X86_VENDOR_NUM		10  #define X86_VENDOR_UNKNOWN	0xff @@ -183,7 +186,7 @@ extern void cpu_detect(struct cpuinfo_x86 *c);  static inline unsigned long long l1tf_pfn_limit(void)  { -	return BIT_ULL(boot_cpu_data.x86_phys_bits - 1 - PAGE_SHIFT); +	return BIT_ULL(boot_cpu_data.x86_cache_bits - 1 - PAGE_SHIFT);  }  extern void early_cpu_init(void); @@ -313,7 +316,13 @@ struct x86_hw_tss {  	 */  	u64			sp1; +	/* +	 * Since Linux does not use ring 2, the 'sp2' slot is unused by +	 * hardware.  entry_SYSCALL_64 uses it as scratch space to stash +	 * the user RSP value. +	 */  	u64			sp2; +  	u64			reserved2;  	u64			ist[7];  	u32			reserved3; @@ -576,7 +585,7 @@ static inline bool on_thread_stack(void)  			       current_stack_pointer) < THREAD_SIZE;  } -#ifdef CONFIG_PARAVIRT +#ifdef CONFIG_PARAVIRT_XXL  #include <asm/paravirt.h>  #else  #define __cpuid			native_cpuid @@ -587,7 +596,7 @@ static inline void load_sp0(unsigned long sp0)  }  #define set_iopl_mask native_set_iopl_mask -#endif /* CONFIG_PARAVIRT */ +#endif /* CONFIG_PARAVIRT_XXL */  /* Free all resources held by a thread. */  extern void release_thread(struct task_struct *); |