diff options
Diffstat (limited to 'arch/x86/include')
-rw-r--r-- | arch/x86/include/asm/apic.h | 13 | ||||
-rwxr-xr-x | arch/x86/include/asm/cpu_debug.h | 49 | ||||
-rw-r--r-- | arch/x86/include/asm/io_apic.h | 5 | ||||
-rw-r--r-- | arch/x86/include/asm/irq_remapping.h | 2 | ||||
-rw-r--r-- | arch/x86/include/asm/msidef.h | 1 | ||||
-rw-r--r-- | arch/x86/include/asm/paravirt.h | 4 | ||||
-rw-r--r-- | arch/x86/include/asm/processor.h | 5 | ||||
-rw-r--r-- | arch/x86/include/asm/xen/hypercall.h | 2 |
8 files changed, 66 insertions, 15 deletions
diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h index 394d177d721b..00f5962d82d0 100644 --- a/arch/x86/include/asm/apic.h +++ b/arch/x86/include/asm/apic.h | |||
@@ -108,6 +108,16 @@ extern void native_apic_icr_write(u32 low, u32 id); | |||
108 | extern u64 native_apic_icr_read(void); | 108 | extern u64 native_apic_icr_read(void); |
109 | 109 | ||
110 | #ifdef CONFIG_X86_X2APIC | 110 | #ifdef CONFIG_X86_X2APIC |
111 | /* | ||
112 | * Make previous memory operations globally visible before | ||
113 | * sending the IPI through x2apic wrmsr. We need a serializing instruction or | ||
114 | * mfence for this. | ||
115 | */ | ||
116 | static inline void x2apic_wrmsr_fence(void) | ||
117 | { | ||
118 | asm volatile("mfence" : : : "memory"); | ||
119 | } | ||
120 | |||
111 | static inline void native_apic_msr_write(u32 reg, u32 v) | 121 | static inline void native_apic_msr_write(u32 reg, u32 v) |
112 | { | 122 | { |
113 | if (reg == APIC_DFR || reg == APIC_ID || reg == APIC_LDR || | 123 | if (reg == APIC_DFR || reg == APIC_ID || reg == APIC_LDR || |
@@ -184,6 +194,9 @@ static inline int x2apic_enabled(void) | |||
184 | { | 194 | { |
185 | return 0; | 195 | return 0; |
186 | } | 196 | } |
197 | |||
198 | #define x2apic 0 | ||
199 | |||
187 | #endif | 200 | #endif |
188 | 201 | ||
189 | extern int get_physical_broadcast(void); | 202 | extern int get_physical_broadcast(void); |
diff --git a/arch/x86/include/asm/cpu_debug.h b/arch/x86/include/asm/cpu_debug.h index d24d64fcee04..222802029fa6 100755 --- a/arch/x86/include/asm/cpu_debug.h +++ b/arch/x86/include/asm/cpu_debug.h | |||
@@ -33,6 +33,8 @@ enum cpu_debug_bit { | |||
33 | CPU_VMX_BIT, /* VMX */ | 33 | CPU_VMX_BIT, /* VMX */ |
34 | CPU_CALL_BIT, /* System Call */ | 34 | CPU_CALL_BIT, /* System Call */ |
35 | CPU_BASE_BIT, /* BASE Address */ | 35 | CPU_BASE_BIT, /* BASE Address */ |
36 | CPU_VER_BIT, /* Version ID */ | ||
37 | CPU_CONF_BIT, /* Configuration */ | ||
36 | CPU_SMM_BIT, /* System mgmt mode */ | 38 | CPU_SMM_BIT, /* System mgmt mode */ |
37 | CPU_SVM_BIT, /*Secure Virtual Machine*/ | 39 | CPU_SVM_BIT, /*Secure Virtual Machine*/ |
38 | CPU_OSVM_BIT, /* OS-Visible Workaround*/ | 40 | CPU_OSVM_BIT, /* OS-Visible Workaround*/ |
@@ -69,6 +71,8 @@ enum cpu_debug_bit { | |||
69 | #define CPU_VMX (1 << CPU_VMX_BIT) | 71 | #define CPU_VMX (1 << CPU_VMX_BIT) |
70 | #define CPU_CALL (1 << CPU_CALL_BIT) | 72 | #define CPU_CALL (1 << CPU_CALL_BIT) |
71 | #define CPU_BASE (1 << CPU_BASE_BIT) | 73 | #define CPU_BASE (1 << CPU_BASE_BIT) |
74 | #define CPU_VER (1 << CPU_VER_BIT) | ||
75 | #define CPU_CONF (1 << CPU_CONF_BIT) | ||
72 | #define CPU_SMM (1 << CPU_SMM_BIT) | 76 | #define CPU_SMM (1 << CPU_SMM_BIT) |
73 | #define CPU_SVM (1 << CPU_SVM_BIT) | 77 | #define CPU_SVM (1 << CPU_SVM_BIT) |
74 | #define CPU_OSVM (1 << CPU_OSVM_BIT) | 78 | #define CPU_OSVM (1 << CPU_OSVM_BIT) |
@@ -123,10 +127,15 @@ enum cpu_processor_bit { | |||
123 | CPU_INTEL_ATOM_BIT, | 127 | CPU_INTEL_ATOM_BIT, |
124 | CPU_INTEL_XEON_P4_BIT, | 128 | CPU_INTEL_XEON_P4_BIT, |
125 | CPU_INTEL_XEON_MP_BIT, | 129 | CPU_INTEL_XEON_MP_BIT, |
130 | /* AMD */ | ||
131 | CPU_AMD_K6_BIT, | ||
132 | CPU_AMD_K7_BIT, | ||
133 | CPU_AMD_K8_BIT, | ||
134 | CPU_AMD_0F_BIT, | ||
135 | CPU_AMD_10_BIT, | ||
136 | CPU_AMD_11_BIT, | ||
126 | }; | 137 | }; |
127 | 138 | ||
128 | #define CPU_ALL (~0) /* Select all CPUs */ | ||
129 | |||
130 | #define CPU_INTEL_PENTIUM (1 << CPU_INTEL_PENTIUM_BIT) | 139 | #define CPU_INTEL_PENTIUM (1 << CPU_INTEL_PENTIUM_BIT) |
131 | #define CPU_INTEL_P6 (1 << CPU_INTEL_P6_BIT) | 140 | #define CPU_INTEL_P6 (1 << CPU_INTEL_P6_BIT) |
132 | #define CPU_INTEL_PENTIUM_M (1 << CPU_INTEL_PENTIUM_M_BIT) | 141 | #define CPU_INTEL_PENTIUM_M (1 << CPU_INTEL_PENTIUM_M_BIT) |
@@ -156,9 +165,27 @@ enum cpu_processor_bit { | |||
156 | #define CPU_PX_CX_AT (CPU_INTEL_PX | CPU_CX_AT) | 165 | #define CPU_PX_CX_AT (CPU_INTEL_PX | CPU_CX_AT) |
157 | #define CPU_PX_CX_AT_XE (CPU_INTEL_PX | CPU_CX_AT_XE) | 166 | #define CPU_PX_CX_AT_XE (CPU_INTEL_PX | CPU_CX_AT_XE) |
158 | 167 | ||
159 | /* Select all Intel CPUs*/ | 168 | /* Select all supported Intel CPUs */ |
160 | #define CPU_INTEL_ALL (CPU_INTEL_PENTIUM | CPU_PX_CX_AT_XE) | 169 | #define CPU_INTEL_ALL (CPU_INTEL_PENTIUM | CPU_PX_CX_AT_XE) |
161 | 170 | ||
171 | #define CPU_AMD_K6 (1 << CPU_AMD_K6_BIT) | ||
172 | #define CPU_AMD_K7 (1 << CPU_AMD_K7_BIT) | ||
173 | #define CPU_AMD_K8 (1 << CPU_AMD_K8_BIT) | ||
174 | #define CPU_AMD_0F (1 << CPU_AMD_0F_BIT) | ||
175 | #define CPU_AMD_10 (1 << CPU_AMD_10_BIT) | ||
176 | #define CPU_AMD_11 (1 << CPU_AMD_11_BIT) | ||
177 | |||
178 | #define CPU_K10_PLUS (CPU_AMD_10 | CPU_AMD_11) | ||
179 | #define CPU_K0F_PLUS (CPU_AMD_0F | CPU_K10_PLUS) | ||
180 | #define CPU_K8_PLUS (CPU_AMD_K8 | CPU_K0F_PLUS) | ||
181 | #define CPU_K7_PLUS (CPU_AMD_K7 | CPU_K8_PLUS) | ||
182 | |||
183 | /* Select all supported AMD CPUs */ | ||
184 | #define CPU_AMD_ALL (CPU_AMD_K6 | CPU_K7_PLUS) | ||
185 | |||
186 | /* Select all supported CPUs */ | ||
187 | #define CPU_ALL (CPU_INTEL_ALL | CPU_AMD_ALL) | ||
188 | |||
162 | #define MAX_CPU_FILES 512 | 189 | #define MAX_CPU_FILES 512 |
163 | 190 | ||
164 | struct cpu_private { | 191 | struct cpu_private { |
@@ -171,16 +198,22 @@ struct cpu_private { | |||
171 | struct cpu_debug_base { | 198 | struct cpu_debug_base { |
172 | char *name; /* Register name */ | 199 | char *name; /* Register name */ |
173 | unsigned flag; /* Register flag */ | 200 | unsigned flag; /* Register flag */ |
201 | unsigned write; /* Register write flag */ | ||
174 | }; | 202 | }; |
175 | 203 | ||
176 | struct cpu_cpuX_base { | 204 | /* |
177 | struct dentry *dentry; /* Register dentry */ | 205 | * Currently it looks similar to cpu_debug_base but once we add more files |
178 | int init; /* Register index file */ | 206 | * cpu_file_base will go in different direction |
179 | }; | 207 | */ |
180 | |||
181 | struct cpu_file_base { | 208 | struct cpu_file_base { |
182 | char *name; /* Register file name */ | 209 | char *name; /* Register file name */ |
183 | unsigned flag; /* Register file flag */ | 210 | unsigned flag; /* Register file flag */ |
211 | unsigned write; /* Register write flag */ | ||
212 | }; | ||
213 | |||
214 | struct cpu_cpuX_base { | ||
215 | struct dentry *dentry; /* Register dentry */ | ||
216 | int init; /* Register index file */ | ||
184 | }; | 217 | }; |
185 | 218 | ||
186 | struct cpu_debug_range { | 219 | struct cpu_debug_range { |
diff --git a/arch/x86/include/asm/io_apic.h b/arch/x86/include/asm/io_apic.h index 59cb4a1317b7..373cc2bbcad2 100644 --- a/arch/x86/include/asm/io_apic.h +++ b/arch/x86/include/asm/io_apic.h | |||
@@ -162,7 +162,8 @@ extern int (*ioapic_renumber_irq)(int ioapic, int irq); | |||
162 | extern void ioapic_init_mappings(void); | 162 | extern void ioapic_init_mappings(void); |
163 | 163 | ||
164 | #ifdef CONFIG_X86_64 | 164 | #ifdef CONFIG_X86_64 |
165 | extern int save_mask_IO_APIC_setup(void); | 165 | extern int save_IO_APIC_setup(void); |
166 | extern void mask_IO_APIC_setup(void); | ||
166 | extern void restore_IO_APIC_setup(void); | 167 | extern void restore_IO_APIC_setup(void); |
167 | extern void reinit_intr_remapped_IO_APIC(int); | 168 | extern void reinit_intr_remapped_IO_APIC(int); |
168 | #endif | 169 | #endif |
@@ -172,7 +173,7 @@ extern void probe_nr_irqs_gsi(void); | |||
172 | extern int setup_ioapic_entry(int apic, int irq, | 173 | extern int setup_ioapic_entry(int apic, int irq, |
173 | struct IO_APIC_route_entry *entry, | 174 | struct IO_APIC_route_entry *entry, |
174 | unsigned int destination, int trigger, | 175 | unsigned int destination, int trigger, |
175 | int polarity, int vector); | 176 | int polarity, int vector, int pin); |
176 | extern void ioapic_write_entry(int apic, int pin, | 177 | extern void ioapic_write_entry(int apic, int pin, |
177 | struct IO_APIC_route_entry e); | 178 | struct IO_APIC_route_entry e); |
178 | #else /* !CONFIG_X86_IO_APIC */ | 179 | #else /* !CONFIG_X86_IO_APIC */ |
diff --git a/arch/x86/include/asm/irq_remapping.h b/arch/x86/include/asm/irq_remapping.h index 20e1fd588dbf..0396760fccb8 100644 --- a/arch/x86/include/asm/irq_remapping.h +++ b/arch/x86/include/asm/irq_remapping.h | |||
@@ -1,8 +1,6 @@ | |||
1 | #ifndef _ASM_X86_IRQ_REMAPPING_H | 1 | #ifndef _ASM_X86_IRQ_REMAPPING_H |
2 | #define _ASM_X86_IRQ_REMAPPING_H | 2 | #define _ASM_X86_IRQ_REMAPPING_H |
3 | 3 | ||
4 | extern int x2apic; | ||
5 | |||
6 | #define IRTE_DEST(dest) ((x2apic) ? dest : dest << 8) | 4 | #define IRTE_DEST(dest) ((x2apic) ? dest : dest << 8) |
7 | 5 | ||
8 | #endif /* _ASM_X86_IRQ_REMAPPING_H */ | 6 | #endif /* _ASM_X86_IRQ_REMAPPING_H */ |
diff --git a/arch/x86/include/asm/msidef.h b/arch/x86/include/asm/msidef.h index 6706b3006f13..4cc48af23fef 100644 --- a/arch/x86/include/asm/msidef.h +++ b/arch/x86/include/asm/msidef.h | |||
@@ -47,6 +47,7 @@ | |||
47 | #define MSI_ADDR_DEST_ID_MASK 0x00ffff0 | 47 | #define MSI_ADDR_DEST_ID_MASK 0x00ffff0 |
48 | #define MSI_ADDR_DEST_ID(dest) (((dest) << MSI_ADDR_DEST_ID_SHIFT) & \ | 48 | #define MSI_ADDR_DEST_ID(dest) (((dest) << MSI_ADDR_DEST_ID_SHIFT) & \ |
49 | MSI_ADDR_DEST_ID_MASK) | 49 | MSI_ADDR_DEST_ID_MASK) |
50 | #define MSI_ADDR_EXT_DEST_ID(dest) ((dest) & 0xffffff00) | ||
50 | 51 | ||
51 | #define MSI_ADDR_IR_EXT_INT (1 << 4) | 52 | #define MSI_ADDR_IR_EXT_INT (1 << 4) |
52 | #define MSI_ADDR_IR_SHV (1 << 3) | 53 | #define MSI_ADDR_IR_SHV (1 << 3) |
diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h index 0617d5cc9712..31fe83b10a4f 100644 --- a/arch/x86/include/asm/paravirt.h +++ b/arch/x86/include/asm/paravirt.h | |||
@@ -389,7 +389,7 @@ extern struct pv_lock_ops pv_lock_ops; | |||
389 | 389 | ||
390 | #define paravirt_type(op) \ | 390 | #define paravirt_type(op) \ |
391 | [paravirt_typenum] "i" (PARAVIRT_PATCH(op)), \ | 391 | [paravirt_typenum] "i" (PARAVIRT_PATCH(op)), \ |
392 | [paravirt_opptr] "m" (op) | 392 | [paravirt_opptr] "i" (&(op)) |
393 | #define paravirt_clobber(clobber) \ | 393 | #define paravirt_clobber(clobber) \ |
394 | [paravirt_clobber] "i" (clobber) | 394 | [paravirt_clobber] "i" (clobber) |
395 | 395 | ||
@@ -443,7 +443,7 @@ int paravirt_disable_iospace(void); | |||
443 | * offset into the paravirt_patch_template structure, and can therefore be | 443 | * offset into the paravirt_patch_template structure, and can therefore be |
444 | * freely converted back into a structure offset. | 444 | * freely converted back into a structure offset. |
445 | */ | 445 | */ |
446 | #define PARAVIRT_CALL "call *%[paravirt_opptr];" | 446 | #define PARAVIRT_CALL "call *%c[paravirt_opptr];" |
447 | 447 | ||
448 | /* | 448 | /* |
449 | * These macros are intended to wrap calls through one of the paravirt | 449 | * These macros are intended to wrap calls through one of the paravirt |
diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h index 76139506c3e4..ae85a8d66a30 100644 --- a/arch/x86/include/asm/processor.h +++ b/arch/x86/include/asm/processor.h | |||
@@ -75,9 +75,9 @@ struct cpuinfo_x86 { | |||
75 | #else | 75 | #else |
76 | /* Number of 4K pages in DTLB/ITLB combined(in pages): */ | 76 | /* Number of 4K pages in DTLB/ITLB combined(in pages): */ |
77 | int x86_tlbsize; | 77 | int x86_tlbsize; |
78 | #endif | ||
78 | __u8 x86_virt_bits; | 79 | __u8 x86_virt_bits; |
79 | __u8 x86_phys_bits; | 80 | __u8 x86_phys_bits; |
80 | #endif | ||
81 | /* CPUID returned core id bits: */ | 81 | /* CPUID returned core id bits: */ |
82 | __u8 x86_coreid_bits; | 82 | __u8 x86_coreid_bits; |
83 | /* Max extended CPUID function supported: */ | 83 | /* Max extended CPUID function supported: */ |
@@ -391,6 +391,9 @@ DECLARE_PER_CPU(union irq_stack_union, irq_stack_union); | |||
391 | DECLARE_INIT_PER_CPU(irq_stack_union); | 391 | DECLARE_INIT_PER_CPU(irq_stack_union); |
392 | 392 | ||
393 | DECLARE_PER_CPU(char *, irq_stack_ptr); | 393 | DECLARE_PER_CPU(char *, irq_stack_ptr); |
394 | DECLARE_PER_CPU(unsigned int, irq_count); | ||
395 | extern unsigned long kernel_eflags; | ||
396 | extern asmlinkage void ignore_sysret(void); | ||
394 | #else /* X86_64 */ | 397 | #else /* X86_64 */ |
395 | #ifdef CONFIG_CC_STACKPROTECTOR | 398 | #ifdef CONFIG_CC_STACKPROTECTOR |
396 | DECLARE_PER_CPU(unsigned long, stack_canary); | 399 | DECLARE_PER_CPU(unsigned long, stack_canary); |
diff --git a/arch/x86/include/asm/xen/hypercall.h b/arch/x86/include/asm/xen/hypercall.h index 5e79ca694326..9c371e4a9fa6 100644 --- a/arch/x86/include/asm/xen/hypercall.h +++ b/arch/x86/include/asm/xen/hypercall.h | |||
@@ -296,6 +296,8 @@ HYPERVISOR_get_debugreg(int reg) | |||
296 | static inline int | 296 | static inline int |
297 | HYPERVISOR_update_descriptor(u64 ma, u64 desc) | 297 | HYPERVISOR_update_descriptor(u64 ma, u64 desc) |
298 | { | 298 | { |
299 | if (sizeof(u64) == sizeof(long)) | ||
300 | return _hypercall2(int, update_descriptor, ma, desc); | ||
299 | return _hypercall4(int, update_descriptor, ma, ma>>32, desc, desc>>32); | 301 | return _hypercall4(int, update_descriptor, ma, ma>>32, desc, desc>>32); |
300 | } | 302 | } |
301 | 303 | ||