diff options
Diffstat (limited to 'include/asm-x86/processor.h')
-rw-r--r-- | include/asm-x86/processor.h | 45 |
1 files changed, 39 insertions, 6 deletions
diff --git a/include/asm-x86/processor.h b/include/asm-x86/processor.h index 5f58da401b43..5eaf9bf0a623 100644 --- a/include/asm-x86/processor.h +++ b/include/asm-x86/processor.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_X86_PROCESSOR_H | 1 | #ifndef ASM_X86__PROCESSOR_H |
2 | #define __ASM_X86_PROCESSOR_H | 2 | #define ASM_X86__PROCESSOR_H |
3 | 3 | ||
4 | #include <asm/processor-flags.h> | 4 | #include <asm/processor-flags.h> |
5 | 5 | ||
@@ -20,6 +20,7 @@ struct mm_struct; | |||
20 | #include <asm/msr.h> | 20 | #include <asm/msr.h> |
21 | #include <asm/desc_defs.h> | 21 | #include <asm/desc_defs.h> |
22 | #include <asm/nops.h> | 22 | #include <asm/nops.h> |
23 | #include <asm/ds.h> | ||
23 | 24 | ||
24 | #include <linux/personality.h> | 25 | #include <linux/personality.h> |
25 | #include <linux/cpumask.h> | 26 | #include <linux/cpumask.h> |
@@ -140,6 +141,8 @@ DECLARE_PER_CPU(struct cpuinfo_x86, cpu_info); | |||
140 | #define current_cpu_data boot_cpu_data | 141 | #define current_cpu_data boot_cpu_data |
141 | #endif | 142 | #endif |
142 | 143 | ||
144 | extern const struct seq_operations cpuinfo_op; | ||
145 | |||
143 | static inline int hlt_works(int cpu) | 146 | static inline int hlt_works(int cpu) |
144 | { | 147 | { |
145 | #ifdef CONFIG_X86_32 | 148 | #ifdef CONFIG_X86_32 |
@@ -153,6 +156,8 @@ static inline int hlt_works(int cpu) | |||
153 | 156 | ||
154 | extern void cpu_detect(struct cpuinfo_x86 *c); | 157 | extern void cpu_detect(struct cpuinfo_x86 *c); |
155 | 158 | ||
159 | extern struct pt_regs *idle_regs(struct pt_regs *); | ||
160 | |||
156 | extern void early_cpu_init(void); | 161 | extern void early_cpu_init(void); |
157 | extern void identify_boot_cpu(void); | 162 | extern void identify_boot_cpu(void); |
158 | extern void identify_secondary_cpu(struct cpuinfo_x86 *); | 163 | extern void identify_secondary_cpu(struct cpuinfo_x86 *); |
@@ -411,9 +416,14 @@ struct thread_struct { | |||
411 | unsigned io_bitmap_max; | 416 | unsigned io_bitmap_max; |
412 | /* MSR_IA32_DEBUGCTLMSR value to switch in if TIF_DEBUGCTLMSR is set. */ | 417 | /* MSR_IA32_DEBUGCTLMSR value to switch in if TIF_DEBUGCTLMSR is set. */ |
413 | unsigned long debugctlmsr; | 418 | unsigned long debugctlmsr; |
414 | /* Debug Store - if not 0 points to a DS Save Area configuration; | 419 | #ifdef CONFIG_X86_DS |
415 | * goes into MSR_IA32_DS_AREA */ | 420 | /* Debug Store context; see include/asm-x86/ds.h; goes into MSR_IA32_DS_AREA */ |
416 | unsigned long ds_area_msr; | 421 | struct ds_context *ds_ctx; |
422 | #endif /* CONFIG_X86_DS */ | ||
423 | #ifdef CONFIG_X86_PTRACE_BTS | ||
424 | /* the signal to send on a bts buffer overflow */ | ||
425 | unsigned int bts_ovfl_signal; | ||
426 | #endif /* CONFIG_X86_PTRACE_BTS */ | ||
417 | }; | 427 | }; |
418 | 428 | ||
419 | static inline unsigned long native_get_debugreg(int regno) | 429 | static inline unsigned long native_get_debugreg(int regno) |
@@ -728,6 +738,29 @@ extern unsigned long boot_option_idle_override; | |||
728 | extern unsigned long idle_halt; | 738 | extern unsigned long idle_halt; |
729 | extern unsigned long idle_nomwait; | 739 | extern unsigned long idle_nomwait; |
730 | 740 | ||
741 | /* | ||
742 | * on systems with caches, caches must be flashed as the absolute | ||
743 | * last instruction before going into a suspended halt. Otherwise, | ||
744 | * dirty data can linger in the cache and become stale on resume, | ||
745 | * leading to strange errors. | ||
746 | * | ||
747 | * perform a variety of operations to guarantee that the compiler | ||
748 | * will not reorder instructions. wbinvd itself is serializing | ||
749 | * so the processor will not reorder. | ||
750 | * | ||
751 | * Systems without cache can just go into halt. | ||
752 | */ | ||
753 | static inline void wbinvd_halt(void) | ||
754 | { | ||
755 | mb(); | ||
756 | /* check for clflush to determine if wbinvd is legal */ | ||
757 | if (cpu_has_clflush) | ||
758 | asm volatile("cli; wbinvd; 1: hlt; jmp 1b" : : : "memory"); | ||
759 | else | ||
760 | while (1) | ||
761 | halt(); | ||
762 | } | ||
763 | |||
731 | extern void enable_sep_cpu(void); | 764 | extern void enable_sep_cpu(void); |
732 | extern int sysenter_setup(void); | 765 | extern int sysenter_setup(void); |
733 | 766 | ||
@@ -920,4 +953,4 @@ extern void start_thread(struct pt_regs *regs, unsigned long new_ip, | |||
920 | extern int get_tsc_mode(unsigned long adr); | 953 | extern int get_tsc_mode(unsigned long adr); |
921 | extern int set_tsc_mode(unsigned int val); | 954 | extern int set_tsc_mode(unsigned int val); |
922 | 955 | ||
923 | #endif | 956 | #endif /* ASM_X86__PROCESSOR_H */ |