aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-x86/processor.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-x86/processor.h')
-rw-r--r--include/asm-x86/processor.h45
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
144extern const struct seq_operations cpuinfo_op;
145
143static inline int hlt_works(int cpu) 146static 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
154extern void cpu_detect(struct cpuinfo_x86 *c); 157extern void cpu_detect(struct cpuinfo_x86 *c);
155 158
159extern struct pt_regs *idle_regs(struct pt_regs *);
160
156extern void early_cpu_init(void); 161extern void early_cpu_init(void);
157extern void identify_boot_cpu(void); 162extern void identify_boot_cpu(void);
158extern void identify_secondary_cpu(struct cpuinfo_x86 *); 163extern 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
419static inline unsigned long native_get_debugreg(int regno) 429static inline unsigned long native_get_debugreg(int regno)
@@ -728,6 +738,29 @@ extern unsigned long boot_option_idle_override;
728extern unsigned long idle_halt; 738extern unsigned long idle_halt;
729extern unsigned long idle_nomwait; 739extern 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 */
753static 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
731extern void enable_sep_cpu(void); 764extern void enable_sep_cpu(void);
732extern int sysenter_setup(void); 765extern int sysenter_setup(void);
733 766
@@ -920,4 +953,4 @@ extern void start_thread(struct pt_regs *regs, unsigned long new_ip,
920extern int get_tsc_mode(unsigned long adr); 953extern int get_tsc_mode(unsigned long adr);
921extern int set_tsc_mode(unsigned int val); 954extern int set_tsc_mode(unsigned int val);
922 955
923#endif 956#endif /* ASM_X86__PROCESSOR_H */