diff options
Diffstat (limited to 'include/asm-x86')
292 files changed, 2741 insertions, 1485 deletions
diff --git a/include/asm-x86/a.out-core.h b/include/asm-x86/a.out-core.h index 714207a1c387..f5705761a37b 100644 --- a/include/asm-x86/a.out-core.h +++ b/include/asm-x86/a.out-core.h | |||
@@ -9,8 +9,8 @@ | |||
9 | * 2 of the Licence, or (at your option) any later version. | 9 | * 2 of the Licence, or (at your option) any later version. |
10 | */ | 10 | */ |
11 | 11 | ||
12 | #ifndef _ASM_A_OUT_CORE_H | 12 | #ifndef ASM_X86__A_OUT_CORE_H |
13 | #define _ASM_A_OUT_CORE_H | 13 | #define ASM_X86__A_OUT_CORE_H |
14 | 14 | ||
15 | #ifdef __KERNEL__ | 15 | #ifdef __KERNEL__ |
16 | #ifdef CONFIG_X86_32 | 16 | #ifdef CONFIG_X86_32 |
@@ -70,4 +70,4 @@ static inline void aout_dump_thread(struct pt_regs *regs, struct user *dump) | |||
70 | 70 | ||
71 | #endif /* CONFIG_X86_32 */ | 71 | #endif /* CONFIG_X86_32 */ |
72 | #endif /* __KERNEL__ */ | 72 | #endif /* __KERNEL__ */ |
73 | #endif /* _ASM_A_OUT_CORE_H */ | 73 | #endif /* ASM_X86__A_OUT_CORE_H */ |
diff --git a/include/asm-x86/a.out.h b/include/asm-x86/a.out.h index 4684f97a5bbd..0948748bc69c 100644 --- a/include/asm-x86/a.out.h +++ b/include/asm-x86/a.out.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_A_OUT_H | 1 | #ifndef ASM_X86__A_OUT_H |
2 | #define _ASM_X86_A_OUT_H | 2 | #define ASM_X86__A_OUT_H |
3 | 3 | ||
4 | struct exec | 4 | struct exec |
5 | { | 5 | { |
@@ -17,4 +17,4 @@ struct exec | |||
17 | #define N_DRSIZE(a) ((a).a_drsize) | 17 | #define N_DRSIZE(a) ((a).a_drsize) |
18 | #define N_SYMSIZE(a) ((a).a_syms) | 18 | #define N_SYMSIZE(a) ((a).a_syms) |
19 | 19 | ||
20 | #endif /* _ASM_X86_A_OUT_H */ | 20 | #endif /* ASM_X86__A_OUT_H */ |
diff --git a/include/asm-x86/acpi.h b/include/asm-x86/acpi.h index 635d764dc13e..392e17336be1 100644 --- a/include/asm-x86/acpi.h +++ b/include/asm-x86/acpi.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_ACPI_H | 1 | #ifndef ASM_X86__ACPI_H |
2 | #define _ASM_X86_ACPI_H | 2 | #define ASM_X86__ACPI_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * Copyright (C) 2001 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com> | 5 | * Copyright (C) 2001 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com> |
@@ -140,6 +140,8 @@ static inline unsigned int acpi_processor_cstate_check(unsigned int max_cstate) | |||
140 | boot_cpu_data.x86_model <= 0x05 && | 140 | boot_cpu_data.x86_model <= 0x05 && |
141 | boot_cpu_data.x86_mask < 0x0A) | 141 | boot_cpu_data.x86_mask < 0x0A) |
142 | return 1; | 142 | return 1; |
143 | else if (boot_cpu_has(X86_FEATURE_AMDC1E)) | ||
144 | return 1; | ||
143 | else | 145 | else |
144 | return max_cstate; | 146 | return max_cstate; |
145 | } | 147 | } |
@@ -173,4 +175,4 @@ static inline void acpi_fake_nodes(const struct bootnode *fake_nodes, | |||
173 | 175 | ||
174 | #define acpi_unlazy_tlb(x) leave_mm(x) | 176 | #define acpi_unlazy_tlb(x) leave_mm(x) |
175 | 177 | ||
176 | #endif /*__X86_ASM_ACPI_H*/ | 178 | #endif /* ASM_X86__ACPI_H */ |
diff --git a/include/asm-x86/agp.h b/include/asm-x86/agp.h index e4004a9f6a9a..3617fd4fcdf9 100644 --- a/include/asm-x86/agp.h +++ b/include/asm-x86/agp.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_AGP_H | 1 | #ifndef ASM_X86__AGP_H |
2 | #define _ASM_X86_AGP_H | 2 | #define ASM_X86__AGP_H |
3 | 3 | ||
4 | #include <asm/pgtable.h> | 4 | #include <asm/pgtable.h> |
5 | #include <asm/cacheflush.h> | 5 | #include <asm/cacheflush.h> |
@@ -32,4 +32,4 @@ | |||
32 | #define free_gatt_pages(table, order) \ | 32 | #define free_gatt_pages(table, order) \ |
33 | free_pages((unsigned long)(table), (order)) | 33 | free_pages((unsigned long)(table), (order)) |
34 | 34 | ||
35 | #endif | 35 | #endif /* ASM_X86__AGP_H */ |
diff --git a/include/asm-x86/alternative.h b/include/asm-x86/alternative.h index f6aa18eadf71..22d3c9862bf3 100644 --- a/include/asm-x86/alternative.h +++ b/include/asm-x86/alternative.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_ALTERNATIVE_H | 1 | #ifndef ASM_X86__ALTERNATIVE_H |
2 | #define _ASM_X86_ALTERNATIVE_H | 2 | #define ASM_X86__ALTERNATIVE_H |
3 | 3 | ||
4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
5 | #include <linux/stddef.h> | 5 | #include <linux/stddef.h> |
@@ -180,4 +180,4 @@ extern void add_nops(void *insns, unsigned int len); | |||
180 | extern void *text_poke(void *addr, const void *opcode, size_t len); | 180 | extern void *text_poke(void *addr, const void *opcode, size_t len); |
181 | extern void *text_poke_early(void *addr, const void *opcode, size_t len); | 181 | extern void *text_poke_early(void *addr, const void *opcode, size_t len); |
182 | 182 | ||
183 | #endif /* _ASM_X86_ALTERNATIVE_H */ | 183 | #endif /* ASM_X86__ALTERNATIVE_H */ |
diff --git a/include/asm-x86/amd_iommu.h b/include/asm-x86/amd_iommu.h index 30a12049353b..041d0db7da27 100644 --- a/include/asm-x86/amd_iommu.h +++ b/include/asm-x86/amd_iommu.h | |||
@@ -17,16 +17,19 @@ | |||
17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
18 | */ | 18 | */ |
19 | 19 | ||
20 | #ifndef _ASM_X86_AMD_IOMMU_H | 20 | #ifndef ASM_X86__AMD_IOMMU_H |
21 | #define _ASM_X86_AMD_IOMMU_H | 21 | #define ASM_X86__AMD_IOMMU_H |
22 | |||
23 | #include <linux/irqreturn.h> | ||
22 | 24 | ||
23 | #ifdef CONFIG_AMD_IOMMU | 25 | #ifdef CONFIG_AMD_IOMMU |
24 | extern int amd_iommu_init(void); | 26 | extern int amd_iommu_init(void); |
25 | extern int amd_iommu_init_dma_ops(void); | 27 | extern int amd_iommu_init_dma_ops(void); |
26 | extern void amd_iommu_detect(void); | 28 | extern void amd_iommu_detect(void); |
29 | extern irqreturn_t amd_iommu_int_handler(int irq, void *data); | ||
27 | #else | 30 | #else |
28 | static inline int amd_iommu_init(void) { return -ENODEV; } | 31 | static inline int amd_iommu_init(void) { return -ENODEV; } |
29 | static inline void amd_iommu_detect(void) { } | 32 | static inline void amd_iommu_detect(void) { } |
30 | #endif | 33 | #endif |
31 | 34 | ||
32 | #endif | 35 | #endif /* ASM_X86__AMD_IOMMU_H */ |
diff --git a/include/asm-x86/amd_iommu_types.h b/include/asm-x86/amd_iommu_types.h index dcc812067394..b3085869a17b 100644 --- a/include/asm-x86/amd_iommu_types.h +++ b/include/asm-x86/amd_iommu_types.h | |||
@@ -17,8 +17,8 @@ | |||
17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
18 | */ | 18 | */ |
19 | 19 | ||
20 | #ifndef __AMD_IOMMU_TYPES_H__ | 20 | #ifndef ASM_X86__AMD_IOMMU_TYPES_H |
21 | #define __AMD_IOMMU_TYPES_H__ | 21 | #define ASM_X86__AMD_IOMMU_TYPES_H |
22 | 22 | ||
23 | #include <linux/types.h> | 23 | #include <linux/types.h> |
24 | #include <linux/list.h> | 24 | #include <linux/list.h> |
@@ -37,6 +37,7 @@ | |||
37 | /* Capability offsets used by the driver */ | 37 | /* Capability offsets used by the driver */ |
38 | #define MMIO_CAP_HDR_OFFSET 0x00 | 38 | #define MMIO_CAP_HDR_OFFSET 0x00 |
39 | #define MMIO_RANGE_OFFSET 0x0c | 39 | #define MMIO_RANGE_OFFSET 0x0c |
40 | #define MMIO_MISC_OFFSET 0x10 | ||
40 | 41 | ||
41 | /* Masks, shifts and macros to parse the device range capability */ | 42 | /* Masks, shifts and macros to parse the device range capability */ |
42 | #define MMIO_RANGE_LD_MASK 0xff000000 | 43 | #define MMIO_RANGE_LD_MASK 0xff000000 |
@@ -48,6 +49,7 @@ | |||
48 | #define MMIO_GET_LD(x) (((x) & MMIO_RANGE_LD_MASK) >> MMIO_RANGE_LD_SHIFT) | 49 | #define MMIO_GET_LD(x) (((x) & MMIO_RANGE_LD_MASK) >> MMIO_RANGE_LD_SHIFT) |
49 | #define MMIO_GET_FD(x) (((x) & MMIO_RANGE_FD_MASK) >> MMIO_RANGE_FD_SHIFT) | 50 | #define MMIO_GET_FD(x) (((x) & MMIO_RANGE_FD_MASK) >> MMIO_RANGE_FD_SHIFT) |
50 | #define MMIO_GET_BUS(x) (((x) & MMIO_RANGE_BUS_MASK) >> MMIO_RANGE_BUS_SHIFT) | 51 | #define MMIO_GET_BUS(x) (((x) & MMIO_RANGE_BUS_MASK) >> MMIO_RANGE_BUS_SHIFT) |
52 | #define MMIO_MSI_NUM(x) ((x) & 0x1f) | ||
51 | 53 | ||
52 | /* Flag masks for the AMD IOMMU exclusion range */ | 54 | /* Flag masks for the AMD IOMMU exclusion range */ |
53 | #define MMIO_EXCL_ENABLE_MASK 0x01ULL | 55 | #define MMIO_EXCL_ENABLE_MASK 0x01ULL |
@@ -69,6 +71,25 @@ | |||
69 | /* MMIO status bits */ | 71 | /* MMIO status bits */ |
70 | #define MMIO_STATUS_COM_WAIT_INT_MASK 0x04 | 72 | #define MMIO_STATUS_COM_WAIT_INT_MASK 0x04 |
71 | 73 | ||
74 | /* event logging constants */ | ||
75 | #define EVENT_ENTRY_SIZE 0x10 | ||
76 | #define EVENT_TYPE_SHIFT 28 | ||
77 | #define EVENT_TYPE_MASK 0xf | ||
78 | #define EVENT_TYPE_ILL_DEV 0x1 | ||
79 | #define EVENT_TYPE_IO_FAULT 0x2 | ||
80 | #define EVENT_TYPE_DEV_TAB_ERR 0x3 | ||
81 | #define EVENT_TYPE_PAGE_TAB_ERR 0x4 | ||
82 | #define EVENT_TYPE_ILL_CMD 0x5 | ||
83 | #define EVENT_TYPE_CMD_HARD_ERR 0x6 | ||
84 | #define EVENT_TYPE_IOTLB_INV_TO 0x7 | ||
85 | #define EVENT_TYPE_INV_DEV_REQ 0x8 | ||
86 | #define EVENT_DEVID_MASK 0xffff | ||
87 | #define EVENT_DEVID_SHIFT 0 | ||
88 | #define EVENT_DOMID_MASK 0xffff | ||
89 | #define EVENT_DOMID_SHIFT 0 | ||
90 | #define EVENT_FLAGS_MASK 0xfff | ||
91 | #define EVENT_FLAGS_SHIFT 0x10 | ||
92 | |||
72 | /* feature control bits */ | 93 | /* feature control bits */ |
73 | #define CONTROL_IOMMU_EN 0x00ULL | 94 | #define CONTROL_IOMMU_EN 0x00ULL |
74 | #define CONTROL_HT_TUN_EN 0x01ULL | 95 | #define CONTROL_HT_TUN_EN 0x01ULL |
@@ -109,6 +130,8 @@ | |||
109 | #define DEV_ENTRY_NMI_PASS 0xba | 130 | #define DEV_ENTRY_NMI_PASS 0xba |
110 | #define DEV_ENTRY_LINT0_PASS 0xbe | 131 | #define DEV_ENTRY_LINT0_PASS 0xbe |
111 | #define DEV_ENTRY_LINT1_PASS 0xbf | 132 | #define DEV_ENTRY_LINT1_PASS 0xbf |
133 | #define DEV_ENTRY_MODE_MASK 0x07 | ||
134 | #define DEV_ENTRY_MODE_SHIFT 0x09 | ||
112 | 135 | ||
113 | /* constants to configure the command buffer */ | 136 | /* constants to configure the command buffer */ |
114 | #define CMD_BUFFER_SIZE 8192 | 137 | #define CMD_BUFFER_SIZE 8192 |
@@ -116,6 +139,10 @@ | |||
116 | #define MMIO_CMD_SIZE_SHIFT 56 | 139 | #define MMIO_CMD_SIZE_SHIFT 56 |
117 | #define MMIO_CMD_SIZE_512 (0x9ULL << MMIO_CMD_SIZE_SHIFT) | 140 | #define MMIO_CMD_SIZE_512 (0x9ULL << MMIO_CMD_SIZE_SHIFT) |
118 | 141 | ||
142 | /* constants for event buffer handling */ | ||
143 | #define EVT_BUFFER_SIZE 8192 /* 512 entries */ | ||
144 | #define EVT_LEN_MASK (0x9ULL << 56) | ||
145 | |||
119 | #define PAGE_MODE_1_LEVEL 0x01 | 146 | #define PAGE_MODE_1_LEVEL 0x01 |
120 | #define PAGE_MODE_2_LEVEL 0x02 | 147 | #define PAGE_MODE_2_LEVEL 0x02 |
121 | #define PAGE_MODE_3_LEVEL 0x03 | 148 | #define PAGE_MODE_3_LEVEL 0x03 |
@@ -134,6 +161,7 @@ | |||
134 | #define IOMMU_MAP_SIZE_L3 (1ULL << 39) | 161 | #define IOMMU_MAP_SIZE_L3 (1ULL << 39) |
135 | 162 | ||
136 | #define IOMMU_PTE_P (1ULL << 0) | 163 | #define IOMMU_PTE_P (1ULL << 0) |
164 | #define IOMMU_PTE_TV (1ULL << 1) | ||
137 | #define IOMMU_PTE_U (1ULL << 59) | 165 | #define IOMMU_PTE_U (1ULL << 59) |
138 | #define IOMMU_PTE_FC (1ULL << 60) | 166 | #define IOMMU_PTE_FC (1ULL << 60) |
139 | #define IOMMU_PTE_IR (1ULL << 61) | 167 | #define IOMMU_PTE_IR (1ULL << 61) |
@@ -159,6 +187,9 @@ | |||
159 | 187 | ||
160 | #define MAX_DOMAIN_ID 65536 | 188 | #define MAX_DOMAIN_ID 65536 |
161 | 189 | ||
190 | /* FIXME: move this macro to <linux/pci.h> */ | ||
191 | #define PCI_BUS(x) (((x) >> 8) & 0xff) | ||
192 | |||
162 | /* | 193 | /* |
163 | * This structure contains generic data for IOMMU protection domains | 194 | * This structure contains generic data for IOMMU protection domains |
164 | * independent of their use. | 195 | * independent of their use. |
@@ -196,6 +227,15 @@ struct dma_ops_domain { | |||
196 | * just calculate its address in constant time. | 227 | * just calculate its address in constant time. |
197 | */ | 228 | */ |
198 | u64 **pte_pages; | 229 | u64 **pte_pages; |
230 | |||
231 | /* This will be set to true when TLB needs to be flushed */ | ||
232 | bool need_flush; | ||
233 | |||
234 | /* | ||
235 | * if this is a preallocated domain, keep the device for which it was | ||
236 | * preallocated in this variable | ||
237 | */ | ||
238 | u16 target_dev; | ||
199 | }; | 239 | }; |
200 | 240 | ||
201 | /* | 241 | /* |
@@ -208,8 +248,9 @@ struct amd_iommu { | |||
208 | /* locks the accesses to the hardware */ | 248 | /* locks the accesses to the hardware */ |
209 | spinlock_t lock; | 249 | spinlock_t lock; |
210 | 250 | ||
211 | /* device id of this IOMMU */ | 251 | /* Pointer to PCI device of this IOMMU */ |
212 | u16 devid; | 252 | struct pci_dev *dev; |
253 | |||
213 | /* | 254 | /* |
214 | * Capability pointer. There could be more than one IOMMU per PCI | 255 | * Capability pointer. There could be more than one IOMMU per PCI |
215 | * device function if there are more than one AMD IOMMU capability | 256 | * device function if there are more than one AMD IOMMU capability |
@@ -225,6 +266,9 @@ struct amd_iommu { | |||
225 | /* capabilities of that IOMMU read from ACPI */ | 266 | /* capabilities of that IOMMU read from ACPI */ |
226 | u32 cap; | 267 | u32 cap; |
227 | 268 | ||
269 | /* pci domain of this IOMMU */ | ||
270 | u16 pci_seg; | ||
271 | |||
228 | /* first device this IOMMU handles. read from PCI */ | 272 | /* first device this IOMMU handles. read from PCI */ |
229 | u16 first_device; | 273 | u16 first_device; |
230 | /* last device this IOMMU handles. read from PCI */ | 274 | /* last device this IOMMU handles. read from PCI */ |
@@ -240,9 +284,19 @@ struct amd_iommu { | |||
240 | /* size of command buffer */ | 284 | /* size of command buffer */ |
241 | u32 cmd_buf_size; | 285 | u32 cmd_buf_size; |
242 | 286 | ||
287 | /* event buffer virtual address */ | ||
288 | u8 *evt_buf; | ||
289 | /* size of event buffer */ | ||
290 | u32 evt_buf_size; | ||
291 | /* MSI number for event interrupt */ | ||
292 | u16 evt_msi_num; | ||
293 | |||
243 | /* if one, we need to send a completion wait command */ | 294 | /* if one, we need to send a completion wait command */ |
244 | int need_sync; | 295 | int need_sync; |
245 | 296 | ||
297 | /* true if interrupts for this IOMMU are already enabled */ | ||
298 | bool int_enabled; | ||
299 | |||
246 | /* default dma_ops domain for that IOMMU */ | 300 | /* default dma_ops domain for that IOMMU */ |
247 | struct dma_ops_domain *default_dom; | 301 | struct dma_ops_domain *default_dom; |
248 | }; | 302 | }; |
@@ -322,6 +376,12 @@ extern unsigned long *amd_iommu_pd_alloc_bitmap; | |||
322 | /* will be 1 if device isolation is enabled */ | 376 | /* will be 1 if device isolation is enabled */ |
323 | extern int amd_iommu_isolate; | 377 | extern int amd_iommu_isolate; |
324 | 378 | ||
379 | /* | ||
380 | * If true, the addresses will be flushed on unmap time, not when | ||
381 | * they are reused | ||
382 | */ | ||
383 | extern bool amd_iommu_unmap_flush; | ||
384 | |||
325 | /* takes a PCI device id and prints it out in a readable form */ | 385 | /* takes a PCI device id and prints it out in a readable form */ |
326 | static inline void print_devid(u16 devid, int nl) | 386 | static inline void print_devid(u16 devid, int nl) |
327 | { | 387 | { |
@@ -341,4 +401,4 @@ static inline u16 calc_devid(u8 bus, u8 devfn) | |||
341 | return (((u16)bus) << 8) | devfn; | 401 | return (((u16)bus) << 8) | devfn; |
342 | } | 402 | } |
343 | 403 | ||
344 | #endif | 404 | #endif /* ASM_X86__AMD_IOMMU_TYPES_H */ |
diff --git a/include/asm-x86/apic.h b/include/asm-x86/apic.h index 133c998161ca..d76a0839abe9 100644 --- a/include/asm-x86/apic.h +++ b/include/asm-x86/apic.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_APIC_H | 1 | #ifndef ASM_X86__APIC_H |
2 | #define _ASM_X86_APIC_H | 2 | #define ASM_X86__APIC_H |
3 | 3 | ||
4 | #include <linux/pm.h> | 4 | #include <linux/pm.h> |
5 | #include <linux/delay.h> | 5 | #include <linux/delay.h> |
@@ -9,6 +9,8 @@ | |||
9 | #include <asm/apicdef.h> | 9 | #include <asm/apicdef.h> |
10 | #include <asm/processor.h> | 10 | #include <asm/processor.h> |
11 | #include <asm/system.h> | 11 | #include <asm/system.h> |
12 | #include <asm/cpufeature.h> | ||
13 | #include <asm/msr.h> | ||
12 | 14 | ||
13 | #define ARCH_APICTIMER_STOPS_ON_C3 1 | 15 | #define ARCH_APICTIMER_STOPS_ON_C3 1 |
14 | 16 | ||
@@ -47,15 +49,18 @@ extern int disable_apic; | |||
47 | #ifdef CONFIG_PARAVIRT | 49 | #ifdef CONFIG_PARAVIRT |
48 | #include <asm/paravirt.h> | 50 | #include <asm/paravirt.h> |
49 | #else | 51 | #else |
50 | #define apic_write native_apic_write | ||
51 | #define apic_read native_apic_read | ||
52 | #define setup_boot_clock setup_boot_APIC_clock | 52 | #define setup_boot_clock setup_boot_APIC_clock |
53 | #define setup_secondary_clock setup_secondary_APIC_clock | 53 | #define setup_secondary_clock setup_secondary_APIC_clock |
54 | #endif | 54 | #endif |
55 | 55 | ||
56 | extern int is_vsmp_box(void); | 56 | extern int is_vsmp_box(void); |
57 | extern void xapic_wait_icr_idle(void); | ||
58 | extern u32 safe_xapic_wait_icr_idle(void); | ||
59 | extern u64 xapic_icr_read(void); | ||
60 | extern void xapic_icr_write(u32, u32); | ||
61 | extern int setup_profiling_timer(unsigned int); | ||
57 | 62 | ||
58 | static inline void native_apic_write(unsigned long reg, u32 v) | 63 | static inline void native_apic_mem_write(u32 reg, u32 v) |
59 | { | 64 | { |
60 | volatile u32 *addr = (volatile u32 *)(APIC_BASE + reg); | 65 | volatile u32 *addr = (volatile u32 *)(APIC_BASE + reg); |
61 | 66 | ||
@@ -64,21 +69,72 @@ static inline void native_apic_write(unsigned long reg, u32 v) | |||
64 | ASM_OUTPUT2("0" (v), "m" (*addr))); | 69 | ASM_OUTPUT2("0" (v), "m" (*addr))); |
65 | } | 70 | } |
66 | 71 | ||
67 | static inline u32 native_apic_read(unsigned long reg) | 72 | static inline u32 native_apic_mem_read(u32 reg) |
68 | { | 73 | { |
69 | return *((volatile u32 *)(APIC_BASE + reg)); | 74 | return *((volatile u32 *)(APIC_BASE + reg)); |
70 | } | 75 | } |
71 | 76 | ||
72 | extern void apic_wait_icr_idle(void); | 77 | static inline void native_apic_msr_write(u32 reg, u32 v) |
73 | extern u32 safe_apic_wait_icr_idle(void); | 78 | { |
79 | if (reg == APIC_DFR || reg == APIC_ID || reg == APIC_LDR || | ||
80 | reg == APIC_LVR) | ||
81 | return; | ||
82 | |||
83 | wrmsr(APIC_BASE_MSR + (reg >> 4), v, 0); | ||
84 | } | ||
85 | |||
86 | static inline u32 native_apic_msr_read(u32 reg) | ||
87 | { | ||
88 | u32 low, high; | ||
89 | |||
90 | if (reg == APIC_DFR) | ||
91 | return -1; | ||
92 | |||
93 | rdmsr(APIC_BASE_MSR + (reg >> 4), low, high); | ||
94 | return low; | ||
95 | } | ||
96 | |||
97 | #ifndef CONFIG_X86_32 | ||
98 | extern int x2apic, x2apic_preenabled; | ||
99 | extern void check_x2apic(void); | ||
100 | extern void enable_x2apic(void); | ||
101 | extern void enable_IR_x2apic(void); | ||
102 | extern void x2apic_icr_write(u32 low, u32 id); | ||
103 | #endif | ||
104 | |||
105 | struct apic_ops { | ||
106 | u32 (*read)(u32 reg); | ||
107 | void (*write)(u32 reg, u32 v); | ||
108 | u64 (*icr_read)(void); | ||
109 | void (*icr_write)(u32 low, u32 high); | ||
110 | void (*wait_icr_idle)(void); | ||
111 | u32 (*safe_wait_icr_idle)(void); | ||
112 | }; | ||
113 | |||
114 | extern struct apic_ops *apic_ops; | ||
115 | |||
116 | #define apic_read (apic_ops->read) | ||
117 | #define apic_write (apic_ops->write) | ||
118 | #define apic_icr_read (apic_ops->icr_read) | ||
119 | #define apic_icr_write (apic_ops->icr_write) | ||
120 | #define apic_wait_icr_idle (apic_ops->wait_icr_idle) | ||
121 | #define safe_apic_wait_icr_idle (apic_ops->safe_wait_icr_idle) | ||
122 | |||
74 | extern int get_physical_broadcast(void); | 123 | extern int get_physical_broadcast(void); |
75 | 124 | ||
125 | #ifdef CONFIG_X86_64 | ||
126 | static inline void ack_x2APIC_irq(void) | ||
127 | { | ||
128 | /* Docs say use 0 for future compatibility */ | ||
129 | native_apic_msr_write(APIC_EOI, 0); | ||
130 | } | ||
131 | #endif | ||
132 | |||
133 | |||
76 | static inline void ack_APIC_irq(void) | 134 | static inline void ack_APIC_irq(void) |
77 | { | 135 | { |
78 | /* | 136 | /* |
79 | * ack_APIC_irq() actually gets compiled as a single instruction: | 137 | * ack_APIC_irq() actually gets compiled as a single instruction |
80 | * - a single rmw on Pentium/82489DX | ||
81 | * - a single write on P6+ cores (CONFIG_X86_GOOD_APIC) | ||
82 | * ... yummie. | 138 | * ... yummie. |
83 | */ | 139 | */ |
84 | 140 | ||
@@ -128,4 +184,4 @@ static inline void init_apic_mappings(void) { } | |||
128 | 184 | ||
129 | #endif /* !CONFIG_X86_LOCAL_APIC */ | 185 | #endif /* !CONFIG_X86_LOCAL_APIC */ |
130 | 186 | ||
131 | #endif /* __ASM_APIC_H */ | 187 | #endif /* ASM_X86__APIC_H */ |
diff --git a/include/asm-x86/apicdef.h b/include/asm-x86/apicdef.h index 6b9008c78731..b922c85ac91d 100644 --- a/include/asm-x86/apicdef.h +++ b/include/asm-x86/apicdef.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_APICDEF_H | 1 | #ifndef ASM_X86__APICDEF_H |
2 | #define _ASM_X86_APICDEF_H | 2 | #define ASM_X86__APICDEF_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * Constants for various Intel APICs. (local APIC, IOAPIC, etc.) | 5 | * Constants for various Intel APICs. (local APIC, IOAPIC, etc.) |
@@ -105,6 +105,7 @@ | |||
105 | #define APIC_TMICT 0x380 | 105 | #define APIC_TMICT 0x380 |
106 | #define APIC_TMCCT 0x390 | 106 | #define APIC_TMCCT 0x390 |
107 | #define APIC_TDCR 0x3E0 | 107 | #define APIC_TDCR 0x3E0 |
108 | #define APIC_SELF_IPI 0x3F0 | ||
108 | #define APIC_TDR_DIV_TMBASE (1 << 2) | 109 | #define APIC_TDR_DIV_TMBASE (1 << 2) |
109 | #define APIC_TDR_DIV_1 0xB | 110 | #define APIC_TDR_DIV_1 0xB |
110 | #define APIC_TDR_DIV_2 0x0 | 111 | #define APIC_TDR_DIV_2 0x0 |
@@ -128,6 +129,8 @@ | |||
128 | #define APIC_EILVT3 0x530 | 129 | #define APIC_EILVT3 0x530 |
129 | 130 | ||
130 | #define APIC_BASE (fix_to_virt(FIX_APIC_BASE)) | 131 | #define APIC_BASE (fix_to_virt(FIX_APIC_BASE)) |
132 | #define APIC_BASE_MSR 0x800 | ||
133 | #define X2APIC_ENABLE (1UL << 10) | ||
131 | 134 | ||
132 | #ifdef CONFIG_X86_32 | 135 | #ifdef CONFIG_X86_32 |
133 | # define MAX_IO_APICS 64 | 136 | # define MAX_IO_APICS 64 |
@@ -411,4 +414,4 @@ struct local_apic { | |||
411 | #else | 414 | #else |
412 | #define BAD_APICID 0xFFFFu | 415 | #define BAD_APICID 0xFFFFu |
413 | #endif | 416 | #endif |
414 | #endif | 417 | #endif /* ASM_X86__APICDEF_H */ |
diff --git a/include/asm-x86/arch_hooks.h b/include/asm-x86/arch_hooks.h index 8411750ceb63..de4596b24c23 100644 --- a/include/asm-x86/arch_hooks.h +++ b/include/asm-x86/arch_hooks.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_ARCH_HOOKS_H | 1 | #ifndef ASM_X86__ARCH_HOOKS_H |
2 | #define _ASM_ARCH_HOOKS_H | 2 | #define ASM_X86__ARCH_HOOKS_H |
3 | 3 | ||
4 | #include <linux/interrupt.h> | 4 | #include <linux/interrupt.h> |
5 | 5 | ||
@@ -12,8 +12,6 @@ | |||
12 | /* these aren't arch hooks, they are generic routines | 12 | /* these aren't arch hooks, they are generic routines |
13 | * that can be used by the hooks */ | 13 | * that can be used by the hooks */ |
14 | extern void init_ISA_irqs(void); | 14 | extern void init_ISA_irqs(void); |
15 | extern void apic_intr_init(void); | ||
16 | extern void smp_intr_init(void); | ||
17 | extern irqreturn_t timer_interrupt(int irq, void *dev_id); | 15 | extern irqreturn_t timer_interrupt(int irq, void *dev_id); |
18 | 16 | ||
19 | /* these are the defined hooks */ | 17 | /* these are the defined hooks */ |
@@ -25,4 +23,4 @@ extern void pre_time_init_hook(void); | |||
25 | extern void time_init_hook(void); | 23 | extern void time_init_hook(void); |
26 | extern void mca_nmi_hook(void); | 24 | extern void mca_nmi_hook(void); |
27 | 25 | ||
28 | #endif | 26 | #endif /* ASM_X86__ARCH_HOOKS_H */ |
diff --git a/include/asm-x86/asm.h b/include/asm-x86/asm.h index 97220321f39d..e1355f44d7c3 100644 --- a/include/asm-x86/asm.h +++ b/include/asm-x86/asm.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_ASM_H | 1 | #ifndef ASM_X86__ASM_H |
2 | #define _ASM_X86_ASM_H | 2 | #define ASM_X86__ASM_H |
3 | 3 | ||
4 | #ifdef __ASSEMBLY__ | 4 | #ifdef __ASSEMBLY__ |
5 | # define __ASM_FORM(x) x | 5 | # define __ASM_FORM(x) x |
@@ -20,17 +20,22 @@ | |||
20 | 20 | ||
21 | #define _ASM_PTR __ASM_SEL(.long, .quad) | 21 | #define _ASM_PTR __ASM_SEL(.long, .quad) |
22 | #define _ASM_ALIGN __ASM_SEL(.balign 4, .balign 8) | 22 | #define _ASM_ALIGN __ASM_SEL(.balign 4, .balign 8) |
23 | #define _ASM_MOV_UL __ASM_SIZE(mov) | ||
24 | 23 | ||
24 | #define _ASM_MOV __ASM_SIZE(mov) | ||
25 | #define _ASM_INC __ASM_SIZE(inc) | 25 | #define _ASM_INC __ASM_SIZE(inc) |
26 | #define _ASM_DEC __ASM_SIZE(dec) | 26 | #define _ASM_DEC __ASM_SIZE(dec) |
27 | #define _ASM_ADD __ASM_SIZE(add) | 27 | #define _ASM_ADD __ASM_SIZE(add) |
28 | #define _ASM_SUB __ASM_SIZE(sub) | 28 | #define _ASM_SUB __ASM_SIZE(sub) |
29 | #define _ASM_XADD __ASM_SIZE(xadd) | 29 | #define _ASM_XADD __ASM_SIZE(xadd) |
30 | |||
30 | #define _ASM_AX __ASM_REG(ax) | 31 | #define _ASM_AX __ASM_REG(ax) |
31 | #define _ASM_BX __ASM_REG(bx) | 32 | #define _ASM_BX __ASM_REG(bx) |
32 | #define _ASM_CX __ASM_REG(cx) | 33 | #define _ASM_CX __ASM_REG(cx) |
33 | #define _ASM_DX __ASM_REG(dx) | 34 | #define _ASM_DX __ASM_REG(dx) |
35 | #define _ASM_SP __ASM_REG(sp) | ||
36 | #define _ASM_BP __ASM_REG(bp) | ||
37 | #define _ASM_SI __ASM_REG(si) | ||
38 | #define _ASM_DI __ASM_REG(di) | ||
34 | 39 | ||
35 | /* Exception table entry */ | 40 | /* Exception table entry */ |
36 | # define _ASM_EXTABLE(from,to) \ | 41 | # define _ASM_EXTABLE(from,to) \ |
@@ -39,4 +44,4 @@ | |||
39 | _ASM_PTR #from "," #to "\n" \ | 44 | _ASM_PTR #from "," #to "\n" \ |
40 | " .previous\n" | 45 | " .previous\n" |
41 | 46 | ||
42 | #endif /* _ASM_X86_ASM_H */ | 47 | #endif /* ASM_X86__ASM_H */ |
diff --git a/include/asm-x86/atomic_32.h b/include/asm-x86/atomic_32.h index 21a4825148c0..14d3f0beb889 100644 --- a/include/asm-x86/atomic_32.h +++ b/include/asm-x86/atomic_32.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ARCH_I386_ATOMIC__ | 1 | #ifndef ASM_X86__ATOMIC_32_H |
2 | #define __ARCH_I386_ATOMIC__ | 2 | #define ASM_X86__ATOMIC_32_H |
3 | 3 | ||
4 | #include <linux/compiler.h> | 4 | #include <linux/compiler.h> |
5 | #include <asm/processor.h> | 5 | #include <asm/processor.h> |
@@ -256,4 +256,4 @@ static inline int atomic_add_unless(atomic_t *v, int a, int u) | |||
256 | #define smp_mb__after_atomic_inc() barrier() | 256 | #define smp_mb__after_atomic_inc() barrier() |
257 | 257 | ||
258 | #include <asm-generic/atomic.h> | 258 | #include <asm-generic/atomic.h> |
259 | #endif | 259 | #endif /* ASM_X86__ATOMIC_32_H */ |
diff --git a/include/asm-x86/atomic_64.h b/include/asm-x86/atomic_64.h index 91c7d03e65bc..2cb218c4a356 100644 --- a/include/asm-x86/atomic_64.h +++ b/include/asm-x86/atomic_64.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ARCH_X86_64_ATOMIC__ | 1 | #ifndef ASM_X86__ATOMIC_64_H |
2 | #define __ARCH_X86_64_ATOMIC__ | 2 | #define ASM_X86__ATOMIC_64_H |
3 | 3 | ||
4 | #include <asm/alternative.h> | 4 | #include <asm/alternative.h> |
5 | #include <asm/cmpxchg.h> | 5 | #include <asm/cmpxchg.h> |
@@ -470,4 +470,4 @@ static inline void atomic_or_long(unsigned long *v1, unsigned long v2) | |||
470 | #define smp_mb__after_atomic_inc() barrier() | 470 | #define smp_mb__after_atomic_inc() barrier() |
471 | 471 | ||
472 | #include <asm-generic/atomic.h> | 472 | #include <asm-generic/atomic.h> |
473 | #endif | 473 | #endif /* ASM_X86__ATOMIC_64_H */ |
diff --git a/include/asm-x86/auxvec.h b/include/asm-x86/auxvec.h index 87f5e6d5a020..12c7cac74202 100644 --- a/include/asm-x86/auxvec.h +++ b/include/asm-x86/auxvec.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_AUXVEC_H | 1 | #ifndef ASM_X86__AUXVEC_H |
2 | #define _ASM_X86_AUXVEC_H | 2 | #define ASM_X86__AUXVEC_H |
3 | /* | 3 | /* |
4 | * Architecture-neutral AT_ values in 0-17, leave some room | 4 | * Architecture-neutral AT_ values in 0-17, leave some room |
5 | * for more of them, start the x86-specific ones at 32. | 5 | * for more of them, start the x86-specific ones at 32. |
@@ -9,4 +9,4 @@ | |||
9 | #endif | 9 | #endif |
10 | #define AT_SYSINFO_EHDR 33 | 10 | #define AT_SYSINFO_EHDR 33 |
11 | 11 | ||
12 | #endif | 12 | #endif /* ASM_X86__AUXVEC_H */ |
diff --git a/include/asm-x86/mach-bigsmp/mach_apic.h b/include/asm-x86/bigsmp/apic.h index c3b9dc6970c9..0a9cd7c5ca0c 100644 --- a/include/asm-x86/mach-bigsmp/mach_apic.h +++ b/include/asm-x86/bigsmp/apic.h | |||
@@ -11,7 +11,7 @@ static inline int apic_id_registered(void) | |||
11 | 11 | ||
12 | /* Round robin the irqs amoung the online cpus */ | 12 | /* Round robin the irqs amoung the online cpus */ |
13 | static inline cpumask_t target_cpus(void) | 13 | static inline cpumask_t target_cpus(void) |
14 | { | 14 | { |
15 | static unsigned long cpu = NR_CPUS; | 15 | static unsigned long cpu = NR_CPUS; |
16 | do { | 16 | do { |
17 | if (cpu >= NR_CPUS) | 17 | if (cpu >= NR_CPUS) |
@@ -23,7 +23,7 @@ static inline cpumask_t target_cpus(void) | |||
23 | } | 23 | } |
24 | 24 | ||
25 | #undef APIC_DEST_LOGICAL | 25 | #undef APIC_DEST_LOGICAL |
26 | #define APIC_DEST_LOGICAL 0 | 26 | #define APIC_DEST_LOGICAL 0 |
27 | #define TARGET_CPUS (target_cpus()) | 27 | #define TARGET_CPUS (target_cpus()) |
28 | #define APIC_DFR_VALUE (APIC_DFR_FLAT) | 28 | #define APIC_DFR_VALUE (APIC_DFR_FLAT) |
29 | #define INT_DELIVERY_MODE (dest_Fixed) | 29 | #define INT_DELIVERY_MODE (dest_Fixed) |
diff --git a/include/asm-x86/mach-es7000/mach_apicdef.h b/include/asm-x86/bigsmp/apicdef.h index a58ab5a75c8c..392c3f5ef2fe 100644 --- a/include/asm-x86/mach-es7000/mach_apicdef.h +++ b/include/asm-x86/bigsmp/apicdef.h | |||
@@ -3,10 +3,10 @@ | |||
3 | 3 | ||
4 | #define APIC_ID_MASK (0xFF<<24) | 4 | #define APIC_ID_MASK (0xFF<<24) |
5 | 5 | ||
6 | static inline unsigned get_apic_id(unsigned long x) | 6 | static inline unsigned get_apic_id(unsigned long x) |
7 | { | 7 | { |
8 | return (((x)>>24)&0xFF); | 8 | return (((x)>>24)&0xFF); |
9 | } | 9 | } |
10 | 10 | ||
11 | #define GET_APIC_ID(x) get_apic_id(x) | 11 | #define GET_APIC_ID(x) get_apic_id(x) |
12 | 12 | ||
diff --git a/include/asm-x86/mach-bigsmp/mach_ipi.h b/include/asm-x86/bigsmp/ipi.h index 9404c535b7ec..9404c535b7ec 100644 --- a/include/asm-x86/mach-bigsmp/mach_ipi.h +++ b/include/asm-x86/bigsmp/ipi.h | |||
diff --git a/include/asm-x86/bios_ebda.h b/include/asm-x86/bios_ebda.h index 0033e50c13b2..79b4b88505d7 100644 --- a/include/asm-x86/bios_ebda.h +++ b/include/asm-x86/bios_ebda.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _MACH_BIOS_EBDA_H | 1 | #ifndef ASM_X86__BIOS_EBDA_H |
2 | #define _MACH_BIOS_EBDA_H | 2 | #define ASM_X86__BIOS_EBDA_H |
3 | 3 | ||
4 | #include <asm/io.h> | 4 | #include <asm/io.h> |
5 | 5 | ||
@@ -16,4 +16,21 @@ static inline unsigned int get_bios_ebda(void) | |||
16 | 16 | ||
17 | void reserve_ebda_region(void); | 17 | void reserve_ebda_region(void); |
18 | 18 | ||
19 | #endif /* _MACH_BIOS_EBDA_H */ | 19 | #ifdef CONFIG_X86_CHECK_BIOS_CORRUPTION |
20 | /* | ||
21 | * This is obviously not a great place for this, but we want to be | ||
22 | * able to scatter it around anywhere in the kernel. | ||
23 | */ | ||
24 | void check_for_bios_corruption(void); | ||
25 | void start_periodic_check_for_corruption(void); | ||
26 | #else | ||
27 | static inline void check_for_bios_corruption(void) | ||
28 | { | ||
29 | } | ||
30 | |||
31 | static inline void start_periodic_check_for_corruption(void) | ||
32 | { | ||
33 | } | ||
34 | #endif | ||
35 | |||
36 | #endif /* ASM_X86__BIOS_EBDA_H */ | ||
diff --git a/include/asm-x86/bitops.h b/include/asm-x86/bitops.h index cfb2b64f76e7..451a74762bd4 100644 --- a/include/asm-x86/bitops.h +++ b/include/asm-x86/bitops.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_BITOPS_H | 1 | #ifndef ASM_X86__BITOPS_H |
2 | #define _ASM_X86_BITOPS_H | 2 | #define ASM_X86__BITOPS_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * Copyright 1992, Linus Torvalds. | 5 | * Copyright 1992, Linus Torvalds. |
@@ -424,16 +424,6 @@ static inline int fls(int x) | |||
424 | 424 | ||
425 | #undef ADDR | 425 | #undef ADDR |
426 | 426 | ||
427 | static inline void set_bit_string(unsigned long *bitmap, | ||
428 | unsigned long i, int len) | ||
429 | { | ||
430 | unsigned long end = i + len; | ||
431 | while (i < end) { | ||
432 | __set_bit(i, bitmap); | ||
433 | i++; | ||
434 | } | ||
435 | } | ||
436 | |||
437 | #ifdef __KERNEL__ | 427 | #ifdef __KERNEL__ |
438 | 428 | ||
439 | #include <asm-generic/bitops/sched.h> | 429 | #include <asm-generic/bitops/sched.h> |
@@ -458,4 +448,4 @@ static inline void set_bit_string(unsigned long *bitmap, | |||
458 | #include <asm-generic/bitops/minix.h> | 448 | #include <asm-generic/bitops/minix.h> |
459 | 449 | ||
460 | #endif /* __KERNEL__ */ | 450 | #endif /* __KERNEL__ */ |
461 | #endif /* _ASM_X86_BITOPS_H */ | 451 | #endif /* ASM_X86__BITOPS_H */ |
diff --git a/include/asm-x86/boot.h b/include/asm-x86/boot.h index 2faed7ecb092..1d63bd5d5946 100644 --- a/include/asm-x86/boot.h +++ b/include/asm-x86/boot.h | |||
@@ -1,10 +1,8 @@ | |||
1 | #ifndef _ASM_BOOT_H | 1 | #ifndef ASM_X86__BOOT_H |
2 | #define _ASM_BOOT_H | 2 | #define ASM_X86__BOOT_H |
3 | 3 | ||
4 | /* Don't touch these, unless you really know what you're doing. */ | 4 | /* Don't touch these, unless you really know what you're doing. */ |
5 | #define DEF_INITSEG 0x9000 | ||
6 | #define DEF_SYSSEG 0x1000 | 5 | #define DEF_SYSSEG 0x1000 |
7 | #define DEF_SETUPSEG 0x9020 | ||
8 | #define DEF_SYSSIZE 0x7F00 | 6 | #define DEF_SYSSIZE 0x7F00 |
9 | 7 | ||
10 | /* Internal svga startup constants */ | 8 | /* Internal svga startup constants */ |
@@ -25,4 +23,4 @@ | |||
25 | #define BOOT_STACK_SIZE 0x1000 | 23 | #define BOOT_STACK_SIZE 0x1000 |
26 | #endif | 24 | #endif |
27 | 25 | ||
28 | #endif /* _ASM_BOOT_H */ | 26 | #endif /* ASM_X86__BOOT_H */ |
diff --git a/include/asm-x86/bootparam.h b/include/asm-x86/bootparam.h index ae22bdf0ab14..ccf027e2d97d 100644 --- a/include/asm-x86/bootparam.h +++ b/include/asm-x86/bootparam.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_BOOTPARAM_H | 1 | #ifndef ASM_X86__BOOTPARAM_H |
2 | #define _ASM_BOOTPARAM_H | 2 | #define ASM_X86__BOOTPARAM_H |
3 | 3 | ||
4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
5 | #include <linux/screen_info.h> | 5 | #include <linux/screen_info.h> |
@@ -108,4 +108,4 @@ struct boot_params { | |||
108 | __u8 _pad9[276]; /* 0xeec */ | 108 | __u8 _pad9[276]; /* 0xeec */ |
109 | } __attribute__((packed)); | 109 | } __attribute__((packed)); |
110 | 110 | ||
111 | #endif /* _ASM_BOOTPARAM_H */ | 111 | #endif /* ASM_X86__BOOTPARAM_H */ |
diff --git a/include/asm-x86/bug.h b/include/asm-x86/bug.h index b69aa64b82a4..91ad43a54c47 100644 --- a/include/asm-x86/bug.h +++ b/include/asm-x86/bug.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_BUG_H | 1 | #ifndef ASM_X86__BUG_H |
2 | #define _ASM_X86_BUG_H | 2 | #define ASM_X86__BUG_H |
3 | 3 | ||
4 | #ifdef CONFIG_BUG | 4 | #ifdef CONFIG_BUG |
5 | #define HAVE_ARCH_BUG | 5 | #define HAVE_ARCH_BUG |
@@ -36,4 +36,4 @@ do { \ | |||
36 | #endif /* !CONFIG_BUG */ | 36 | #endif /* !CONFIG_BUG */ |
37 | 37 | ||
38 | #include <asm-generic/bug.h> | 38 | #include <asm-generic/bug.h> |
39 | #endif | 39 | #endif /* ASM_X86__BUG_H */ |
diff --git a/include/asm-x86/bugs.h b/include/asm-x86/bugs.h index 021cbdd5f258..dc604985f2ad 100644 --- a/include/asm-x86/bugs.h +++ b/include/asm-x86/bugs.h | |||
@@ -1,7 +1,12 @@ | |||
1 | #ifndef _ASM_X86_BUGS_H | 1 | #ifndef ASM_X86__BUGS_H |
2 | #define _ASM_X86_BUGS_H | 2 | #define ASM_X86__BUGS_H |
3 | 3 | ||
4 | extern void check_bugs(void); | 4 | extern void check_bugs(void); |
5 | |||
6 | #if defined(CONFIG_CPU_SUP_INTEL) && defined(CONFIG_X86_32) | ||
5 | int ppro_with_ram_bug(void); | 7 | int ppro_with_ram_bug(void); |
8 | #else | ||
9 | static inline int ppro_with_ram_bug(void) { return 0; } | ||
10 | #endif | ||
6 | 11 | ||
7 | #endif /* _ASM_X86_BUGS_H */ | 12 | #endif /* ASM_X86__BUGS_H */ |
diff --git a/include/asm-x86/byteorder.h b/include/asm-x86/byteorder.h index e02ae2d89acf..722f27d68105 100644 --- a/include/asm-x86/byteorder.h +++ b/include/asm-x86/byteorder.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_BYTEORDER_H | 1 | #ifndef ASM_X86__BYTEORDER_H |
2 | #define _ASM_X86_BYTEORDER_H | 2 | #define ASM_X86__BYTEORDER_H |
3 | 3 | ||
4 | #include <asm/types.h> | 4 | #include <asm/types.h> |
5 | #include <linux/compiler.h> | 5 | #include <linux/compiler.h> |
@@ -78,4 +78,4 @@ static inline __attribute_const__ __u32 ___arch__swab32(__u32 x) | |||
78 | 78 | ||
79 | #include <linux/byteorder/little_endian.h> | 79 | #include <linux/byteorder/little_endian.h> |
80 | 80 | ||
81 | #endif /* _ASM_X86_BYTEORDER_H */ | 81 | #endif /* ASM_X86__BYTEORDER_H */ |
diff --git a/include/asm-x86/cache.h b/include/asm-x86/cache.h index 1e0bac86f38f..ea3f1cc06a97 100644 --- a/include/asm-x86/cache.h +++ b/include/asm-x86/cache.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ARCH_X86_CACHE_H | 1 | #ifndef ASM_X86__CACHE_H |
2 | #define _ARCH_X86_CACHE_H | 2 | #define ASM_X86__CACHE_H |
3 | 3 | ||
4 | /* L1 cache line size */ | 4 | /* L1 cache line size */ |
5 | #define L1_CACHE_SHIFT (CONFIG_X86_L1_CACHE_SHIFT) | 5 | #define L1_CACHE_SHIFT (CONFIG_X86_L1_CACHE_SHIFT) |
@@ -17,4 +17,4 @@ | |||
17 | #endif | 17 | #endif |
18 | #endif | 18 | #endif |
19 | 19 | ||
20 | #endif | 20 | #endif /* ASM_X86__CACHE_H */ |
diff --git a/include/asm-x86/cacheflush.h b/include/asm-x86/cacheflush.h index f4c0ab50d2c2..68840ef1b35a 100644 --- a/include/asm-x86/cacheflush.h +++ b/include/asm-x86/cacheflush.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_CACHEFLUSH_H | 1 | #ifndef ASM_X86__CACHEFLUSH_H |
2 | #define _ASM_X86_CACHEFLUSH_H | 2 | #define ASM_X86__CACHEFLUSH_H |
3 | 3 | ||
4 | /* Keep includes the same across arches. */ | 4 | /* Keep includes the same across arches. */ |
5 | #include <linux/mm.h> | 5 | #include <linux/mm.h> |
@@ -24,6 +24,8 @@ | |||
24 | #define copy_from_user_page(vma, page, vaddr, dst, src, len) \ | 24 | #define copy_from_user_page(vma, page, vaddr, dst, src, len) \ |
25 | memcpy((dst), (src), (len)) | 25 | memcpy((dst), (src), (len)) |
26 | 26 | ||
27 | #define PG_non_WB PG_arch_1 | ||
28 | PAGEFLAG(NonWB, non_WB) | ||
27 | 29 | ||
28 | /* | 30 | /* |
29 | * The set_memory_* API can be used to change various attributes of a virtual | 31 | * The set_memory_* API can be used to change various attributes of a virtual |
@@ -66,6 +68,9 @@ int set_memory_rw(unsigned long addr, int numpages); | |||
66 | int set_memory_np(unsigned long addr, int numpages); | 68 | int set_memory_np(unsigned long addr, int numpages); |
67 | int set_memory_4k(unsigned long addr, int numpages); | 69 | int set_memory_4k(unsigned long addr, int numpages); |
68 | 70 | ||
71 | int set_memory_array_uc(unsigned long *addr, int addrinarray); | ||
72 | int set_memory_array_wb(unsigned long *addr, int addrinarray); | ||
73 | |||
69 | /* | 74 | /* |
70 | * For legacy compatibility with the old APIs, a few functions | 75 | * For legacy compatibility with the old APIs, a few functions |
71 | * are provided that work on a "struct page". | 76 | * are provided that work on a "struct page". |
@@ -96,8 +101,6 @@ int set_pages_rw(struct page *page, int numpages); | |||
96 | 101 | ||
97 | void clflush_cache_range(void *addr, unsigned int size); | 102 | void clflush_cache_range(void *addr, unsigned int size); |
98 | 103 | ||
99 | void cpa_init(void); | ||
100 | |||
101 | #ifdef CONFIG_DEBUG_RODATA | 104 | #ifdef CONFIG_DEBUG_RODATA |
102 | void mark_rodata_ro(void); | 105 | void mark_rodata_ro(void); |
103 | extern const int rodata_test_data; | 106 | extern const int rodata_test_data; |
@@ -112,4 +115,4 @@ static inline int rodata_test(void) | |||
112 | } | 115 | } |
113 | #endif | 116 | #endif |
114 | 117 | ||
115 | #endif | 118 | #endif /* ASM_X86__CACHEFLUSH_H */ |
diff --git a/include/asm-x86/calgary.h b/include/asm-x86/calgary.h index 67f60406e2d8..933fd272f826 100644 --- a/include/asm-x86/calgary.h +++ b/include/asm-x86/calgary.h | |||
@@ -21,8 +21,8 @@ | |||
21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
22 | */ | 22 | */ |
23 | 23 | ||
24 | #ifndef _ASM_X86_64_CALGARY_H | 24 | #ifndef ASM_X86__CALGARY_H |
25 | #define _ASM_X86_64_CALGARY_H | 25 | #define ASM_X86__CALGARY_H |
26 | 26 | ||
27 | #include <linux/spinlock.h> | 27 | #include <linux/spinlock.h> |
28 | #include <linux/device.h> | 28 | #include <linux/device.h> |
@@ -69,4 +69,4 @@ static inline int calgary_iommu_init(void) { return 1; } | |||
69 | static inline void detect_calgary(void) { return; } | 69 | static inline void detect_calgary(void) { return; } |
70 | #endif | 70 | #endif |
71 | 71 | ||
72 | #endif /* _ASM_X86_64_CALGARY_H */ | 72 | #endif /* ASM_X86__CALGARY_H */ |
diff --git a/include/asm-x86/checksum_32.h b/include/asm-x86/checksum_32.h index 52bbb0d8c4c1..d041e8cda227 100644 --- a/include/asm-x86/checksum_32.h +++ b/include/asm-x86/checksum_32.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _I386_CHECKSUM_H | 1 | #ifndef ASM_X86__CHECKSUM_32_H |
2 | #define _I386_CHECKSUM_H | 2 | #define ASM_X86__CHECKSUM_32_H |
3 | 3 | ||
4 | #include <linux/in6.h> | 4 | #include <linux/in6.h> |
5 | 5 | ||
@@ -186,4 +186,4 @@ static inline __wsum csum_and_copy_to_user(const void *src, | |||
186 | return (__force __wsum)-1; /* invalid checksum */ | 186 | return (__force __wsum)-1; /* invalid checksum */ |
187 | } | 187 | } |
188 | 188 | ||
189 | #endif | 189 | #endif /* ASM_X86__CHECKSUM_32_H */ |
diff --git a/include/asm-x86/checksum_64.h b/include/asm-x86/checksum_64.h index 8bd861cc5267..110f403beb89 100644 --- a/include/asm-x86/checksum_64.h +++ b/include/asm-x86/checksum_64.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _X86_64_CHECKSUM_H | 1 | #ifndef ASM_X86__CHECKSUM_64_H |
2 | #define _X86_64_CHECKSUM_H | 2 | #define ASM_X86__CHECKSUM_64_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * Checksums for x86-64 | 5 | * Checksums for x86-64 |
@@ -188,4 +188,4 @@ static inline unsigned add32_with_carry(unsigned a, unsigned b) | |||
188 | return a; | 188 | return a; |
189 | } | 189 | } |
190 | 190 | ||
191 | #endif | 191 | #endif /* ASM_X86__CHECKSUM_64_H */ |
diff --git a/include/asm-x86/cmpxchg_32.h b/include/asm-x86/cmpxchg_32.h index bf5a69d1329e..0622e45cdf7c 100644 --- a/include/asm-x86/cmpxchg_32.h +++ b/include/asm-x86/cmpxchg_32.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_CMPXCHG_H | 1 | #ifndef ASM_X86__CMPXCHG_32_H |
2 | #define __ASM_CMPXCHG_H | 2 | #define ASM_X86__CMPXCHG_32_H |
3 | 3 | ||
4 | #include <linux/bitops.h> /* for LOCK_PREFIX */ | 4 | #include <linux/bitops.h> /* for LOCK_PREFIX */ |
5 | 5 | ||
@@ -341,4 +341,4 @@ extern unsigned long long cmpxchg_486_u64(volatile void *, u64, u64); | |||
341 | 341 | ||
342 | #endif | 342 | #endif |
343 | 343 | ||
344 | #endif | 344 | #endif /* ASM_X86__CMPXCHG_32_H */ |
diff --git a/include/asm-x86/cmpxchg_64.h b/include/asm-x86/cmpxchg_64.h index 17463ccf8166..63c1a5e61b99 100644 --- a/include/asm-x86/cmpxchg_64.h +++ b/include/asm-x86/cmpxchg_64.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_CMPXCHG_H | 1 | #ifndef ASM_X86__CMPXCHG_64_H |
2 | #define __ASM_CMPXCHG_H | 2 | #define ASM_X86__CMPXCHG_64_H |
3 | 3 | ||
4 | #include <asm/alternative.h> /* Provides LOCK_PREFIX */ | 4 | #include <asm/alternative.h> /* Provides LOCK_PREFIX */ |
5 | 5 | ||
@@ -182,4 +182,4 @@ static inline unsigned long __cmpxchg_local(volatile void *ptr, | |||
182 | cmpxchg_local((ptr), (o), (n)); \ | 182 | cmpxchg_local((ptr), (o), (n)); \ |
183 | }) | 183 | }) |
184 | 184 | ||
185 | #endif | 185 | #endif /* ASM_X86__CMPXCHG_64_H */ |
diff --git a/include/asm-x86/compat.h b/include/asm-x86/compat.h index 1793ac317a30..6732b150949e 100644 --- a/include/asm-x86/compat.h +++ b/include/asm-x86/compat.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_64_COMPAT_H | 1 | #ifndef ASM_X86__COMPAT_H |
2 | #define _ASM_X86_64_COMPAT_H | 2 | #define ASM_X86__COMPAT_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * Architecture specific compatibility types | 5 | * Architecture specific compatibility types |
@@ -215,4 +215,4 @@ static inline int is_compat_task(void) | |||
215 | return current_thread_info()->status & TS_COMPAT; | 215 | return current_thread_info()->status & TS_COMPAT; |
216 | } | 216 | } |
217 | 217 | ||
218 | #endif /* _ASM_X86_64_COMPAT_H */ | 218 | #endif /* ASM_X86__COMPAT_H */ |
diff --git a/include/asm-x86/cpu.h b/include/asm-x86/cpu.h index 73f2ea84fd74..83a115083f0d 100644 --- a/include/asm-x86/cpu.h +++ b/include/asm-x86/cpu.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_I386_CPU_H_ | 1 | #ifndef ASM_X86__CPU_H |
2 | #define _ASM_I386_CPU_H_ | 2 | #define ASM_X86__CPU_H |
3 | 3 | ||
4 | #include <linux/device.h> | 4 | #include <linux/device.h> |
5 | #include <linux/cpu.h> | 5 | #include <linux/cpu.h> |
@@ -17,4 +17,4 @@ extern void arch_unregister_cpu(int); | |||
17 | #endif | 17 | #endif |
18 | 18 | ||
19 | DECLARE_PER_CPU(int, cpu_state); | 19 | DECLARE_PER_CPU(int, cpu_state); |
20 | #endif /* _ASM_I386_CPU_H_ */ | 20 | #endif /* ASM_X86__CPU_H */ |
diff --git a/include/asm-x86/cpufeature.h b/include/asm-x86/cpufeature.h index 762f6a6bc707..adfeae6586e1 100644 --- a/include/asm-x86/cpufeature.h +++ b/include/asm-x86/cpufeature.h | |||
@@ -1,12 +1,18 @@ | |||
1 | /* | 1 | /* |
2 | * Defines x86 CPU feature bits | 2 | * Defines x86 CPU feature bits |
3 | */ | 3 | */ |
4 | #ifndef _ASM_X86_CPUFEATURE_H | 4 | #ifndef ASM_X86__CPUFEATURE_H |
5 | #define _ASM_X86_CPUFEATURE_H | 5 | #define ASM_X86__CPUFEATURE_H |
6 | 6 | ||
7 | #include <asm/required-features.h> | 7 | #include <asm/required-features.h> |
8 | 8 | ||
9 | #define NCAPINTS 8 /* N 32-bit words worth of info */ | 9 | #define NCAPINTS 9 /* N 32-bit words worth of info */ |
10 | |||
11 | /* | ||
12 | * Note: If the comment begins with a quoted string, that string is used | ||
13 | * in /proc/cpuinfo instead of the macro name. If the string is "", | ||
14 | * this feature bit is not displayed in /proc/cpuinfo at all. | ||
15 | */ | ||
10 | 16 | ||
11 | /* Intel-defined CPU features, CPUID level 0x00000001 (edx), word 0 */ | 17 | /* Intel-defined CPU features, CPUID level 0x00000001 (edx), word 0 */ |
12 | #define X86_FEATURE_FPU (0*32+ 0) /* Onboard FPU */ | 18 | #define X86_FEATURE_FPU (0*32+ 0) /* Onboard FPU */ |
@@ -14,7 +20,7 @@ | |||
14 | #define X86_FEATURE_DE (0*32+ 2) /* Debugging Extensions */ | 20 | #define X86_FEATURE_DE (0*32+ 2) /* Debugging Extensions */ |
15 | #define X86_FEATURE_PSE (0*32+ 3) /* Page Size Extensions */ | 21 | #define X86_FEATURE_PSE (0*32+ 3) /* Page Size Extensions */ |
16 | #define X86_FEATURE_TSC (0*32+ 4) /* Time Stamp Counter */ | 22 | #define X86_FEATURE_TSC (0*32+ 4) /* Time Stamp Counter */ |
17 | #define X86_FEATURE_MSR (0*32+ 5) /* Model-Specific Registers, RDMSR, WRMSR */ | 23 | #define X86_FEATURE_MSR (0*32+ 5) /* Model-Specific Registers */ |
18 | #define X86_FEATURE_PAE (0*32+ 6) /* Physical Address Extensions */ | 24 | #define X86_FEATURE_PAE (0*32+ 6) /* Physical Address Extensions */ |
19 | #define X86_FEATURE_MCE (0*32+ 7) /* Machine Check Architecture */ | 25 | #define X86_FEATURE_MCE (0*32+ 7) /* Machine Check Architecture */ |
20 | #define X86_FEATURE_CX8 (0*32+ 8) /* CMPXCHG8 instruction */ | 26 | #define X86_FEATURE_CX8 (0*32+ 8) /* CMPXCHG8 instruction */ |
@@ -23,22 +29,23 @@ | |||
23 | #define X86_FEATURE_MTRR (0*32+12) /* Memory Type Range Registers */ | 29 | #define X86_FEATURE_MTRR (0*32+12) /* Memory Type Range Registers */ |
24 | #define X86_FEATURE_PGE (0*32+13) /* Page Global Enable */ | 30 | #define X86_FEATURE_PGE (0*32+13) /* Page Global Enable */ |
25 | #define X86_FEATURE_MCA (0*32+14) /* Machine Check Architecture */ | 31 | #define X86_FEATURE_MCA (0*32+14) /* Machine Check Architecture */ |
26 | #define X86_FEATURE_CMOV (0*32+15) /* CMOV instruction (FCMOVCC and FCOMI too if FPU present) */ | 32 | #define X86_FEATURE_CMOV (0*32+15) /* CMOV instructions */ |
33 | /* (plus FCMOVcc, FCOMI with FPU) */ | ||
27 | #define X86_FEATURE_PAT (0*32+16) /* Page Attribute Table */ | 34 | #define X86_FEATURE_PAT (0*32+16) /* Page Attribute Table */ |
28 | #define X86_FEATURE_PSE36 (0*32+17) /* 36-bit PSEs */ | 35 | #define X86_FEATURE_PSE36 (0*32+17) /* 36-bit PSEs */ |
29 | #define X86_FEATURE_PN (0*32+18) /* Processor serial number */ | 36 | #define X86_FEATURE_PN (0*32+18) /* Processor serial number */ |
30 | #define X86_FEATURE_CLFLSH (0*32+19) /* Supports the CLFLUSH instruction */ | 37 | #define X86_FEATURE_CLFLSH (0*32+19) /* "clflush" CLFLUSH instruction */ |
31 | #define X86_FEATURE_DS (0*32+21) /* Debug Store */ | 38 | #define X86_FEATURE_DS (0*32+21) /* "dts" Debug Store */ |
32 | #define X86_FEATURE_ACPI (0*32+22) /* ACPI via MSR */ | 39 | #define X86_FEATURE_ACPI (0*32+22) /* ACPI via MSR */ |
33 | #define X86_FEATURE_MMX (0*32+23) /* Multimedia Extensions */ | 40 | #define X86_FEATURE_MMX (0*32+23) /* Multimedia Extensions */ |
34 | #define X86_FEATURE_FXSR (0*32+24) /* FXSAVE and FXRSTOR instructions (fast save and restore */ | 41 | #define X86_FEATURE_FXSR (0*32+24) /* FXSAVE/FXRSTOR, CR4.OSFXSR */ |
35 | /* of FPU context), and CR4.OSFXSR available */ | 42 | #define X86_FEATURE_XMM (0*32+25) /* "sse" */ |
36 | #define X86_FEATURE_XMM (0*32+25) /* Streaming SIMD Extensions */ | 43 | #define X86_FEATURE_XMM2 (0*32+26) /* "sse2" */ |
37 | #define X86_FEATURE_XMM2 (0*32+26) /* Streaming SIMD Extensions-2 */ | 44 | #define X86_FEATURE_SELFSNOOP (0*32+27) /* "ss" CPU self snoop */ |
38 | #define X86_FEATURE_SELFSNOOP (0*32+27) /* CPU self snoop */ | ||
39 | #define X86_FEATURE_HT (0*32+28) /* Hyper-Threading */ | 45 | #define X86_FEATURE_HT (0*32+28) /* Hyper-Threading */ |
40 | #define X86_FEATURE_ACC (0*32+29) /* Automatic clock control */ | 46 | #define X86_FEATURE_ACC (0*32+29) /* "tm" Automatic clock control */ |
41 | #define X86_FEATURE_IA64 (0*32+30) /* IA-64 processor */ | 47 | #define X86_FEATURE_IA64 (0*32+30) /* IA-64 processor */ |
48 | #define X86_FEATURE_PBE (0*32+31) /* Pending Break Enable */ | ||
42 | 49 | ||
43 | /* AMD-defined CPU features, CPUID level 0x80000001, word 1 */ | 50 | /* AMD-defined CPU features, CPUID level 0x80000001, word 1 */ |
44 | /* Don't duplicate feature flags which are redundant with Intel! */ | 51 | /* Don't duplicate feature flags which are redundant with Intel! */ |
@@ -46,7 +53,8 @@ | |||
46 | #define X86_FEATURE_MP (1*32+19) /* MP Capable. */ | 53 | #define X86_FEATURE_MP (1*32+19) /* MP Capable. */ |
47 | #define X86_FEATURE_NX (1*32+20) /* Execute Disable */ | 54 | #define X86_FEATURE_NX (1*32+20) /* Execute Disable */ |
48 | #define X86_FEATURE_MMXEXT (1*32+22) /* AMD MMX extensions */ | 55 | #define X86_FEATURE_MMXEXT (1*32+22) /* AMD MMX extensions */ |
49 | #define X86_FEATURE_GBPAGES (1*32+26) /* GB pages */ | 56 | #define X86_FEATURE_FXSR_OPT (1*32+25) /* FXSAVE/FXRSTOR optimizations */ |
57 | #define X86_FEATURE_GBPAGES (1*32+26) /* "pdpe1gb" GB pages */ | ||
50 | #define X86_FEATURE_RDTSCP (1*32+27) /* RDTSCP */ | 58 | #define X86_FEATURE_RDTSCP (1*32+27) /* RDTSCP */ |
51 | #define X86_FEATURE_LM (1*32+29) /* Long Mode (x86-64) */ | 59 | #define X86_FEATURE_LM (1*32+29) /* Long Mode (x86-64) */ |
52 | #define X86_FEATURE_3DNOWEXT (1*32+30) /* AMD 3DNow! extensions */ | 60 | #define X86_FEATURE_3DNOWEXT (1*32+30) /* AMD 3DNow! extensions */ |
@@ -64,51 +72,79 @@ | |||
64 | #define X86_FEATURE_CYRIX_ARR (3*32+ 2) /* Cyrix ARRs (= MTRRs) */ | 72 | #define X86_FEATURE_CYRIX_ARR (3*32+ 2) /* Cyrix ARRs (= MTRRs) */ |
65 | #define X86_FEATURE_CENTAUR_MCR (3*32+ 3) /* Centaur MCRs (= MTRRs) */ | 73 | #define X86_FEATURE_CENTAUR_MCR (3*32+ 3) /* Centaur MCRs (= MTRRs) */ |
66 | /* cpu types for specific tunings: */ | 74 | /* cpu types for specific tunings: */ |
67 | #define X86_FEATURE_K8 (3*32+ 4) /* Opteron, Athlon64 */ | 75 | #define X86_FEATURE_K8 (3*32+ 4) /* "" Opteron, Athlon64 */ |
68 | #define X86_FEATURE_K7 (3*32+ 5) /* Athlon */ | 76 | #define X86_FEATURE_K7 (3*32+ 5) /* "" Athlon */ |
69 | #define X86_FEATURE_P3 (3*32+ 6) /* P3 */ | 77 | #define X86_FEATURE_P3 (3*32+ 6) /* "" P3 */ |
70 | #define X86_FEATURE_P4 (3*32+ 7) /* P4 */ | 78 | #define X86_FEATURE_P4 (3*32+ 7) /* "" P4 */ |
71 | #define X86_FEATURE_CONSTANT_TSC (3*32+ 8) /* TSC ticks at a constant rate */ | 79 | #define X86_FEATURE_CONSTANT_TSC (3*32+ 8) /* TSC ticks at a constant rate */ |
72 | #define X86_FEATURE_UP (3*32+ 9) /* smp kernel running on up */ | 80 | #define X86_FEATURE_UP (3*32+ 9) /* smp kernel running on up */ |
73 | #define X86_FEATURE_FXSAVE_LEAK (3*32+10) /* FXSAVE leaks FOP/FIP/FOP */ | 81 | #define X86_FEATURE_FXSAVE_LEAK (3*32+10) /* "" FXSAVE leaks FOP/FIP/FOP */ |
74 | #define X86_FEATURE_ARCH_PERFMON (3*32+11) /* Intel Architectural PerfMon */ | 82 | #define X86_FEATURE_ARCH_PERFMON (3*32+11) /* Intel Architectural PerfMon */ |
75 | #define X86_FEATURE_PEBS (3*32+12) /* Precise-Event Based Sampling */ | 83 | #define X86_FEATURE_NOPL (3*32+20) /* The NOPL (0F 1F) instructions */ |
76 | #define X86_FEATURE_BTS (3*32+13) /* Branch Trace Store */ | 84 | #define X86_FEATURE_PEBS (3*32+12) /* Precise-Event Based Sampling */ |
77 | #define X86_FEATURE_SYSCALL32 (3*32+14) /* syscall in ia32 userspace */ | 85 | #define X86_FEATURE_BTS (3*32+13) /* Branch Trace Store */ |
78 | #define X86_FEATURE_SYSENTER32 (3*32+15) /* sysenter in ia32 userspace */ | 86 | #define X86_FEATURE_SYSCALL32 (3*32+14) /* "" syscall in ia32 userspace */ |
79 | #define X86_FEATURE_REP_GOOD (3*32+16) /* rep microcode works well on this CPU */ | 87 | #define X86_FEATURE_SYSENTER32 (3*32+15) /* "" sysenter in ia32 userspace */ |
80 | #define X86_FEATURE_MFENCE_RDTSC (3*32+17) /* Mfence synchronizes RDTSC */ | 88 | #define X86_FEATURE_REP_GOOD (3*32+16) /* rep microcode works well */ |
81 | #define X86_FEATURE_LFENCE_RDTSC (3*32+18) /* Lfence synchronizes RDTSC */ | 89 | #define X86_FEATURE_MFENCE_RDTSC (3*32+17) /* "" Mfence synchronizes RDTSC */ |
82 | #define X86_FEATURE_11AP (3*32+19) /* Bad local APIC aka 11AP */ | 90 | #define X86_FEATURE_LFENCE_RDTSC (3*32+18) /* "" Lfence synchronizes RDTSC */ |
91 | #define X86_FEATURE_11AP (3*32+19) /* "" Bad local APIC aka 11AP */ | ||
92 | #define X86_FEATURE_NOPL (3*32+20) /* The NOPL (0F 1F) instructions */ | ||
93 | #define X86_FEATURE_AMDC1E (3*32+21) /* AMD C1E detected */ | ||
94 | #define X86_FEATURE_XTOPOLOGY (3*32+21) /* cpu topology enum extensions */ | ||
83 | 95 | ||
84 | /* Intel-defined CPU features, CPUID level 0x00000001 (ecx), word 4 */ | 96 | /* Intel-defined CPU features, CPUID level 0x00000001 (ecx), word 4 */ |
85 | #define X86_FEATURE_XMM3 (4*32+ 0) /* Streaming SIMD Extensions-3 */ | 97 | #define X86_FEATURE_XMM3 (4*32+ 0) /* "pni" SSE-3 */ |
86 | #define X86_FEATURE_MWAIT (4*32+ 3) /* Monitor/Mwait support */ | 98 | #define X86_FEATURE_PCLMULQDQ (4*32+ 1) /* PCLMULQDQ instruction */ |
87 | #define X86_FEATURE_DSCPL (4*32+ 4) /* CPL Qualified Debug Store */ | 99 | #define X86_FEATURE_DTES64 (4*32+ 2) /* 64-bit Debug Store */ |
100 | #define X86_FEATURE_MWAIT (4*32+ 3) /* "monitor" Monitor/Mwait support */ | ||
101 | #define X86_FEATURE_DSCPL (4*32+ 4) /* "ds_cpl" CPL Qual. Debug Store */ | ||
102 | #define X86_FEATURE_VMX (4*32+ 5) /* Hardware virtualization */ | ||
103 | #define X86_FEATURE_SMX (4*32+ 6) /* Safer mode */ | ||
88 | #define X86_FEATURE_EST (4*32+ 7) /* Enhanced SpeedStep */ | 104 | #define X86_FEATURE_EST (4*32+ 7) /* Enhanced SpeedStep */ |
89 | #define X86_FEATURE_TM2 (4*32+ 8) /* Thermal Monitor 2 */ | 105 | #define X86_FEATURE_TM2 (4*32+ 8) /* Thermal Monitor 2 */ |
106 | #define X86_FEATURE_SSSE3 (4*32+ 9) /* Supplemental SSE-3 */ | ||
90 | #define X86_FEATURE_CID (4*32+10) /* Context ID */ | 107 | #define X86_FEATURE_CID (4*32+10) /* Context ID */ |
108 | #define X86_FEATURE_FMA (4*32+12) /* Fused multiply-add */ | ||
91 | #define X86_FEATURE_CX16 (4*32+13) /* CMPXCHG16B */ | 109 | #define X86_FEATURE_CX16 (4*32+13) /* CMPXCHG16B */ |
92 | #define X86_FEATURE_XTPR (4*32+14) /* Send Task Priority Messages */ | 110 | #define X86_FEATURE_XTPR (4*32+14) /* Send Task Priority Messages */ |
111 | #define X86_FEATURE_PDCM (4*32+15) /* Performance Capabilities */ | ||
93 | #define X86_FEATURE_DCA (4*32+18) /* Direct Cache Access */ | 112 | #define X86_FEATURE_DCA (4*32+18) /* Direct Cache Access */ |
94 | #define X86_FEATURE_XMM4_2 (4*32+20) /* Streaming SIMD Extensions-4.2 */ | 113 | #define X86_FEATURE_XMM4_1 (4*32+19) /* "sse4_1" SSE-4.1 */ |
114 | #define X86_FEATURE_XMM4_2 (4*32+20) /* "sse4_2" SSE-4.2 */ | ||
115 | #define X86_FEATURE_X2APIC (4*32+21) /* x2APIC */ | ||
116 | #define X86_FEATURE_AES (4*32+25) /* AES instructions */ | ||
117 | #define X86_FEATURE_XSAVE (4*32+26) /* XSAVE/XRSTOR/XSETBV/XGETBV */ | ||
118 | #define X86_FEATURE_OSXSAVE (4*32+27) /* "" XSAVE enabled in the OS */ | ||
119 | #define X86_FEATURE_AVX (4*32+28) /* Advanced Vector Extensions */ | ||
95 | 120 | ||
96 | /* VIA/Cyrix/Centaur-defined CPU features, CPUID level 0xC0000001, word 5 */ | 121 | /* VIA/Cyrix/Centaur-defined CPU features, CPUID level 0xC0000001, word 5 */ |
97 | #define X86_FEATURE_XSTORE (5*32+ 2) /* on-CPU RNG present (xstore insn) */ | 122 | #define X86_FEATURE_XSTORE (5*32+ 2) /* "rng" RNG present (xstore) */ |
98 | #define X86_FEATURE_XSTORE_EN (5*32+ 3) /* on-CPU RNG enabled */ | 123 | #define X86_FEATURE_XSTORE_EN (5*32+ 3) /* "rng_en" RNG enabled */ |
99 | #define X86_FEATURE_XCRYPT (5*32+ 6) /* on-CPU crypto (xcrypt insn) */ | 124 | #define X86_FEATURE_XCRYPT (5*32+ 6) /* "ace" on-CPU crypto (xcrypt) */ |
100 | #define X86_FEATURE_XCRYPT_EN (5*32+ 7) /* on-CPU crypto enabled */ | 125 | #define X86_FEATURE_XCRYPT_EN (5*32+ 7) /* "ace_en" on-CPU crypto enabled */ |
101 | #define X86_FEATURE_ACE2 (5*32+ 8) /* Advanced Cryptography Engine v2 */ | 126 | #define X86_FEATURE_ACE2 (5*32+ 8) /* Advanced Cryptography Engine v2 */ |
102 | #define X86_FEATURE_ACE2_EN (5*32+ 9) /* ACE v2 enabled */ | 127 | #define X86_FEATURE_ACE2_EN (5*32+ 9) /* ACE v2 enabled */ |
103 | #define X86_FEATURE_PHE (5*32+ 10) /* PadLock Hash Engine */ | 128 | #define X86_FEATURE_PHE (5*32+10) /* PadLock Hash Engine */ |
104 | #define X86_FEATURE_PHE_EN (5*32+ 11) /* PHE enabled */ | 129 | #define X86_FEATURE_PHE_EN (5*32+11) /* PHE enabled */ |
105 | #define X86_FEATURE_PMM (5*32+ 12) /* PadLock Montgomery Multiplier */ | 130 | #define X86_FEATURE_PMM (5*32+12) /* PadLock Montgomery Multiplier */ |
106 | #define X86_FEATURE_PMM_EN (5*32+ 13) /* PMM enabled */ | 131 | #define X86_FEATURE_PMM_EN (5*32+13) /* PMM enabled */ |
107 | 132 | ||
108 | /* More extended AMD flags: CPUID level 0x80000001, ecx, word 6 */ | 133 | /* More extended AMD flags: CPUID level 0x80000001, ecx, word 6 */ |
109 | #define X86_FEATURE_LAHF_LM (6*32+ 0) /* LAHF/SAHF in long mode */ | 134 | #define X86_FEATURE_LAHF_LM (6*32+ 0) /* LAHF/SAHF in long mode */ |
110 | #define X86_FEATURE_CMP_LEGACY (6*32+ 1) /* If yes HyperThreading not valid */ | 135 | #define X86_FEATURE_CMP_LEGACY (6*32+ 1) /* If yes HyperThreading not valid */ |
111 | #define X86_FEATURE_IBS (6*32+ 10) /* Instruction Based Sampling */ | 136 | #define X86_FEATURE_SVM (6*32+ 2) /* Secure virtual machine */ |
137 | #define X86_FEATURE_EXTAPIC (6*32+ 3) /* Extended APIC space */ | ||
138 | #define X86_FEATURE_CR8_LEGACY (6*32+ 4) /* CR8 in 32-bit mode */ | ||
139 | #define X86_FEATURE_ABM (6*32+ 5) /* Advanced bit manipulation */ | ||
140 | #define X86_FEATURE_SSE4A (6*32+ 6) /* SSE-4A */ | ||
141 | #define X86_FEATURE_MISALIGNSSE (6*32+ 7) /* Misaligned SSE mode */ | ||
142 | #define X86_FEATURE_3DNOWPREFETCH (6*32+ 8) /* 3DNow prefetch instructions */ | ||
143 | #define X86_FEATURE_OSVW (6*32+ 9) /* OS Visible Workaround */ | ||
144 | #define X86_FEATURE_IBS (6*32+10) /* Instruction Based Sampling */ | ||
145 | #define X86_FEATURE_SSE5 (6*32+11) /* SSE-5 */ | ||
146 | #define X86_FEATURE_SKINIT (6*32+12) /* SKINIT/STGI instructions */ | ||
147 | #define X86_FEATURE_WDT (6*32+13) /* Watchdog timer */ | ||
112 | 148 | ||
113 | /* | 149 | /* |
114 | * Auxiliary flags: Linux defined - For features scattered in various | 150 | * Auxiliary flags: Linux defined - For features scattered in various |
@@ -116,6 +152,13 @@ | |||
116 | */ | 152 | */ |
117 | #define X86_FEATURE_IDA (7*32+ 0) /* Intel Dynamic Acceleration */ | 153 | #define X86_FEATURE_IDA (7*32+ 0) /* Intel Dynamic Acceleration */ |
118 | 154 | ||
155 | /* Virtualization flags: Linux defined */ | ||
156 | #define X86_FEATURE_TPR_SHADOW (8*32+ 0) /* Intel TPR Shadow */ | ||
157 | #define X86_FEATURE_VNMI (8*32+ 1) /* Intel Virtual NMI */ | ||
158 | #define X86_FEATURE_FLEXPRIORITY (8*32+ 2) /* Intel FlexPriority */ | ||
159 | #define X86_FEATURE_EPT (8*32+ 3) /* Intel Extended Page Table */ | ||
160 | #define X86_FEATURE_VPID (8*32+ 4) /* Intel Virtual Processor ID */ | ||
161 | |||
119 | #if defined(__KERNEL__) && !defined(__ASSEMBLY__) | 162 | #if defined(__KERNEL__) && !defined(__ASSEMBLY__) |
120 | 163 | ||
121 | #include <linux/bitops.h> | 164 | #include <linux/bitops.h> |
@@ -149,7 +192,7 @@ extern const char * const x86_power_flags[32]; | |||
149 | } while (0) | 192 | } while (0) |
150 | #define setup_force_cpu_cap(bit) do { \ | 193 | #define setup_force_cpu_cap(bit) do { \ |
151 | set_cpu_cap(&boot_cpu_data, bit); \ | 194 | set_cpu_cap(&boot_cpu_data, bit); \ |
152 | clear_bit(bit, (unsigned long *)cleared_cpu_caps); \ | 195 | clear_bit(bit, (unsigned long *)cleared_cpu_caps); \ |
153 | } while (0) | 196 | } while (0) |
154 | 197 | ||
155 | #define cpu_has_fpu boot_cpu_has(X86_FEATURE_FPU) | 198 | #define cpu_has_fpu boot_cpu_has(X86_FEATURE_FPU) |
@@ -190,7 +233,10 @@ extern const char * const x86_power_flags[32]; | |||
190 | #define cpu_has_gbpages boot_cpu_has(X86_FEATURE_GBPAGES) | 233 | #define cpu_has_gbpages boot_cpu_has(X86_FEATURE_GBPAGES) |
191 | #define cpu_has_arch_perfmon boot_cpu_has(X86_FEATURE_ARCH_PERFMON) | 234 | #define cpu_has_arch_perfmon boot_cpu_has(X86_FEATURE_ARCH_PERFMON) |
192 | #define cpu_has_pat boot_cpu_has(X86_FEATURE_PAT) | 235 | #define cpu_has_pat boot_cpu_has(X86_FEATURE_PAT) |
236 | #define cpu_has_xmm4_1 boot_cpu_has(X86_FEATURE_XMM4_1) | ||
193 | #define cpu_has_xmm4_2 boot_cpu_has(X86_FEATURE_XMM4_2) | 237 | #define cpu_has_xmm4_2 boot_cpu_has(X86_FEATURE_XMM4_2) |
238 | #define cpu_has_x2apic boot_cpu_has(X86_FEATURE_X2APIC) | ||
239 | #define cpu_has_xsave boot_cpu_has(X86_FEATURE_XSAVE) | ||
194 | 240 | ||
195 | #if defined(CONFIG_X86_INVLPG) || defined(CONFIG_X86_64) | 241 | #if defined(CONFIG_X86_INVLPG) || defined(CONFIG_X86_64) |
196 | # define cpu_has_invlpg 1 | 242 | # define cpu_has_invlpg 1 |
@@ -222,4 +268,4 @@ extern const char * const x86_power_flags[32]; | |||
222 | 268 | ||
223 | #endif /* defined(__KERNEL__) && !defined(__ASSEMBLY__) */ | 269 | #endif /* defined(__KERNEL__) && !defined(__ASSEMBLY__) */ |
224 | 270 | ||
225 | #endif /* _ASM_X86_CPUFEATURE_H */ | 271 | #endif /* ASM_X86__CPUFEATURE_H */ |
diff --git a/include/asm-x86/current.h b/include/asm-x86/current.h index 7515c19d4988..a863ead856f3 100644 --- a/include/asm-x86/current.h +++ b/include/asm-x86/current.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _X86_CURRENT_H | 1 | #ifndef ASM_X86__CURRENT_H |
2 | #define _X86_CURRENT_H | 2 | #define ASM_X86__CURRENT_H |
3 | 3 | ||
4 | #ifdef CONFIG_X86_32 | 4 | #ifdef CONFIG_X86_32 |
5 | #include <linux/compiler.h> | 5 | #include <linux/compiler.h> |
@@ -36,4 +36,4 @@ static __always_inline struct task_struct *get_current(void) | |||
36 | 36 | ||
37 | #define current get_current() | 37 | #define current get_current() |
38 | 38 | ||
39 | #endif /* X86_CURRENT_H */ | 39 | #endif /* ASM_X86__CURRENT_H */ |
diff --git a/include/asm-x86/debugreg.h b/include/asm-x86/debugreg.h index c6344d572b03..ecb6907c3ea4 100644 --- a/include/asm-x86/debugreg.h +++ b/include/asm-x86/debugreg.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_DEBUGREG_H | 1 | #ifndef ASM_X86__DEBUGREG_H |
2 | #define _ASM_X86_DEBUGREG_H | 2 | #define ASM_X86__DEBUGREG_H |
3 | 3 | ||
4 | 4 | ||
5 | /* Indicate the register numbers for a number of the specific | 5 | /* Indicate the register numbers for a number of the specific |
@@ -67,4 +67,4 @@ | |||
67 | #define DR_LOCAL_SLOWDOWN (0x100) /* Local slow the pipeline */ | 67 | #define DR_LOCAL_SLOWDOWN (0x100) /* Local slow the pipeline */ |
68 | #define DR_GLOBAL_SLOWDOWN (0x200) /* Global slow the pipeline */ | 68 | #define DR_GLOBAL_SLOWDOWN (0x200) /* Global slow the pipeline */ |
69 | 69 | ||
70 | #endif | 70 | #endif /* ASM_X86__DEBUGREG_H */ |
diff --git a/include/asm-x86/delay.h b/include/asm-x86/delay.h index 409a649204aa..8a0da95b4fc5 100644 --- a/include/asm-x86/delay.h +++ b/include/asm-x86/delay.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_DELAY_H | 1 | #ifndef ASM_X86__DELAY_H |
2 | #define _ASM_X86_DELAY_H | 2 | #define ASM_X86__DELAY_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * Copyright (C) 1993 Linus Torvalds | 5 | * Copyright (C) 1993 Linus Torvalds |
@@ -28,4 +28,4 @@ extern void __delay(unsigned long loops); | |||
28 | 28 | ||
29 | void use_tsc_delay(void); | 29 | void use_tsc_delay(void); |
30 | 30 | ||
31 | #endif /* _ASM_X86_DELAY_H */ | 31 | #endif /* ASM_X86__DELAY_H */ |
diff --git a/include/asm-x86/desc.h b/include/asm-x86/desc.h index a44c4dc70590..f06adac7938c 100644 --- a/include/asm-x86/desc.h +++ b/include/asm-x86/desc.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_DESC_H_ | 1 | #ifndef ASM_X86__DESC_H |
2 | #define _ASM_DESC_H_ | 2 | #define ASM_X86__DESC_H |
3 | 3 | ||
4 | #ifndef __ASSEMBLY__ | 4 | #ifndef __ASSEMBLY__ |
5 | #include <asm/desc_defs.h> | 5 | #include <asm/desc_defs.h> |
@@ -24,6 +24,11 @@ static inline void fill_ldt(struct desc_struct *desc, | |||
24 | desc->d = info->seg_32bit; | 24 | desc->d = info->seg_32bit; |
25 | desc->g = info->limit_in_pages; | 25 | desc->g = info->limit_in_pages; |
26 | desc->base2 = (info->base_addr & 0xff000000) >> 24; | 26 | desc->base2 = (info->base_addr & 0xff000000) >> 24; |
27 | /* | ||
28 | * Don't allow setting of the lm bit. It is useless anyway | ||
29 | * because 64bit system calls require __USER_CS: | ||
30 | */ | ||
31 | desc->l = 0; | ||
27 | } | 32 | } |
28 | 33 | ||
29 | extern struct desc_ptr idt_descr; | 34 | extern struct desc_ptr idt_descr; |
@@ -97,7 +102,15 @@ static inline int desc_empty(const void *ptr) | |||
97 | native_write_gdt_entry(dt, entry, desc, type) | 102 | native_write_gdt_entry(dt, entry, desc, type) |
98 | #define write_idt_entry(dt, entry, g) \ | 103 | #define write_idt_entry(dt, entry, g) \ |
99 | native_write_idt_entry(dt, entry, g) | 104 | native_write_idt_entry(dt, entry, g) |
100 | #endif | 105 | |
106 | static inline void paravirt_alloc_ldt(struct desc_struct *ldt, unsigned entries) | ||
107 | { | ||
108 | } | ||
109 | |||
110 | static inline void paravirt_free_ldt(struct desc_struct *ldt, unsigned entries) | ||
111 | { | ||
112 | } | ||
113 | #endif /* CONFIG_PARAVIRT */ | ||
101 | 114 | ||
102 | static inline void native_write_idt_entry(gate_desc *idt, int entry, | 115 | static inline void native_write_idt_entry(gate_desc *idt, int entry, |
103 | const gate_desc *gate) | 116 | const gate_desc *gate) |
@@ -338,20 +351,16 @@ static inline void set_system_intr_gate(unsigned int n, void *addr) | |||
338 | _set_gate(n, GATE_INTERRUPT, addr, 0x3, 0, __KERNEL_CS); | 351 | _set_gate(n, GATE_INTERRUPT, addr, 0x3, 0, __KERNEL_CS); |
339 | } | 352 | } |
340 | 353 | ||
341 | static inline void set_trap_gate(unsigned int n, void *addr) | 354 | static inline void set_system_trap_gate(unsigned int n, void *addr) |
342 | { | 355 | { |
343 | BUG_ON((unsigned)n > 0xFF); | 356 | BUG_ON((unsigned)n > 0xFF); |
344 | _set_gate(n, GATE_TRAP, addr, 0, 0, __KERNEL_CS); | 357 | _set_gate(n, GATE_TRAP, addr, 0x3, 0, __KERNEL_CS); |
345 | } | 358 | } |
346 | 359 | ||
347 | static inline void set_system_gate(unsigned int n, void *addr) | 360 | static inline void set_trap_gate(unsigned int n, void *addr) |
348 | { | 361 | { |
349 | BUG_ON((unsigned)n > 0xFF); | 362 | BUG_ON((unsigned)n > 0xFF); |
350 | #ifdef CONFIG_X86_32 | 363 | _set_gate(n, GATE_TRAP, addr, 0, 0, __KERNEL_CS); |
351 | _set_gate(n, GATE_TRAP, addr, 0x3, 0, __KERNEL_CS); | ||
352 | #else | ||
353 | _set_gate(n, GATE_INTERRUPT, addr, 0x3, 0, __KERNEL_CS); | ||
354 | #endif | ||
355 | } | 364 | } |
356 | 365 | ||
357 | static inline void set_task_gate(unsigned int n, unsigned int gdt_entry) | 366 | static inline void set_task_gate(unsigned int n, unsigned int gdt_entry) |
@@ -366,7 +375,7 @@ static inline void set_intr_gate_ist(int n, void *addr, unsigned ist) | |||
366 | _set_gate(n, GATE_INTERRUPT, addr, 0, ist, __KERNEL_CS); | 375 | _set_gate(n, GATE_INTERRUPT, addr, 0, ist, __KERNEL_CS); |
367 | } | 376 | } |
368 | 377 | ||
369 | static inline void set_system_gate_ist(int n, void *addr, unsigned ist) | 378 | static inline void set_system_intr_gate_ist(int n, void *addr, unsigned ist) |
370 | { | 379 | { |
371 | BUG_ON((unsigned)n > 0xFF); | 380 | BUG_ON((unsigned)n > 0xFF); |
372 | _set_gate(n, GATE_INTERRUPT, addr, 0x3, ist, __KERNEL_CS); | 381 | _set_gate(n, GATE_INTERRUPT, addr, 0x3, ist, __KERNEL_CS); |
@@ -397,4 +406,4 @@ static inline void set_system_gate_ist(int n, void *addr, unsigned ist) | |||
397 | 406 | ||
398 | #endif /* __ASSEMBLY__ */ | 407 | #endif /* __ASSEMBLY__ */ |
399 | 408 | ||
400 | #endif | 409 | #endif /* ASM_X86__DESC_H */ |
diff --git a/include/asm-x86/desc_defs.h b/include/asm-x86/desc_defs.h index f7bacf357dac..b881db664b46 100644 --- a/include/asm-x86/desc_defs.h +++ b/include/asm-x86/desc_defs.h | |||
@@ -1,6 +1,6 @@ | |||
1 | /* Written 2000 by Andi Kleen */ | 1 | /* Written 2000 by Andi Kleen */ |
2 | #ifndef __ARCH_DESC_DEFS_H | 2 | #ifndef ASM_X86__DESC_DEFS_H |
3 | #define __ARCH_DESC_DEFS_H | 3 | #define ASM_X86__DESC_DEFS_H |
4 | 4 | ||
5 | /* | 5 | /* |
6 | * Segment descriptor structure definitions, usable from both x86_64 and i386 | 6 | * Segment descriptor structure definitions, usable from both x86_64 and i386 |
@@ -92,4 +92,4 @@ struct desc_ptr { | |||
92 | 92 | ||
93 | #endif /* !__ASSEMBLY__ */ | 93 | #endif /* !__ASSEMBLY__ */ |
94 | 94 | ||
95 | #endif | 95 | #endif /* ASM_X86__DESC_DEFS_H */ |
diff --git a/include/asm-x86/device.h b/include/asm-x86/device.h index 3c034f48fdb0..1bece04c7d9d 100644 --- a/include/asm-x86/device.h +++ b/include/asm-x86/device.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_DEVICE_H | 1 | #ifndef ASM_X86__DEVICE_H |
2 | #define _ASM_X86_DEVICE_H | 2 | #define ASM_X86__DEVICE_H |
3 | 3 | ||
4 | struct dev_archdata { | 4 | struct dev_archdata { |
5 | #ifdef CONFIG_ACPI | 5 | #ifdef CONFIG_ACPI |
@@ -13,4 +13,4 @@ struct dma_mapping_ops *dma_ops; | |||
13 | #endif | 13 | #endif |
14 | }; | 14 | }; |
15 | 15 | ||
16 | #endif /* _ASM_X86_DEVICE_H */ | 16 | #endif /* ASM_X86__DEVICE_H */ |
diff --git a/include/asm-x86/div64.h b/include/asm-x86/div64.h index 9a2d644c08ef..f9530f23f1d6 100644 --- a/include/asm-x86/div64.h +++ b/include/asm-x86/div64.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_DIV64_H | 1 | #ifndef ASM_X86__DIV64_H |
2 | #define _ASM_X86_DIV64_H | 2 | #define ASM_X86__DIV64_H |
3 | 3 | ||
4 | #ifdef CONFIG_X86_32 | 4 | #ifdef CONFIG_X86_32 |
5 | 5 | ||
@@ -57,4 +57,4 @@ static inline u64 div_u64_rem(u64 dividend, u32 divisor, u32 *remainder) | |||
57 | # include <asm-generic/div64.h> | 57 | # include <asm-generic/div64.h> |
58 | #endif /* CONFIG_X86_32 */ | 58 | #endif /* CONFIG_X86_32 */ |
59 | 59 | ||
60 | #endif /* _ASM_X86_DIV64_H */ | 60 | #endif /* ASM_X86__DIV64_H */ |
diff --git a/include/asm-x86/dma-mapping.h b/include/asm-x86/dma-mapping.h index ad9cd6d49bfc..219c33d6361c 100644 --- a/include/asm-x86/dma-mapping.h +++ b/include/asm-x86/dma-mapping.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_DMA_MAPPING_H_ | 1 | #ifndef ASM_X86__DMA_MAPPING_H |
2 | #define _ASM_DMA_MAPPING_H_ | 2 | #define ASM_X86__DMA_MAPPING_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * IOMMU interface. See Documentation/DMA-mapping.txt and DMA-API.txt for | 5 | * IOMMU interface. See Documentation/DMA-mapping.txt and DMA-API.txt for |
@@ -9,12 +9,12 @@ | |||
9 | #include <linux/scatterlist.h> | 9 | #include <linux/scatterlist.h> |
10 | #include <asm/io.h> | 10 | #include <asm/io.h> |
11 | #include <asm/swiotlb.h> | 11 | #include <asm/swiotlb.h> |
12 | #include <asm-generic/dma-coherent.h> | ||
12 | 13 | ||
13 | extern dma_addr_t bad_dma_address; | 14 | extern dma_addr_t bad_dma_address; |
14 | extern int iommu_merge; | 15 | extern int iommu_merge; |
15 | extern struct device fallback_dev; | 16 | extern struct device x86_dma_fallback_dev; |
16 | extern int panic_on_overflow; | 17 | extern int panic_on_overflow; |
17 | extern int force_iommu; | ||
18 | 18 | ||
19 | struct dma_mapping_ops { | 19 | struct dma_mapping_ops { |
20 | int (*mapping_error)(struct device *dev, | 20 | int (*mapping_error)(struct device *dev, |
@@ -25,9 +25,6 @@ struct dma_mapping_ops { | |||
25 | void *vaddr, dma_addr_t dma_handle); | 25 | void *vaddr, dma_addr_t dma_handle); |
26 | dma_addr_t (*map_single)(struct device *hwdev, phys_addr_t ptr, | 26 | dma_addr_t (*map_single)(struct device *hwdev, phys_addr_t ptr, |
27 | size_t size, int direction); | 27 | size_t size, int direction); |
28 | /* like map_single, but doesn't check the device mask */ | ||
29 | dma_addr_t (*map_simple)(struct device *hwdev, phys_addr_t ptr, | ||
30 | size_t size, int direction); | ||
31 | void (*unmap_single)(struct device *dev, dma_addr_t addr, | 28 | void (*unmap_single)(struct device *dev, dma_addr_t addr, |
32 | size_t size, int direction); | 29 | size_t size, int direction); |
33 | void (*sync_single_for_cpu)(struct device *hwdev, | 30 | void (*sync_single_for_cpu)(struct device *hwdev, |
@@ -68,7 +65,7 @@ static inline struct dma_mapping_ops *get_dma_ops(struct device *dev) | |||
68 | return dma_ops; | 65 | return dma_ops; |
69 | else | 66 | else |
70 | return dev->archdata.dma_ops; | 67 | return dev->archdata.dma_ops; |
71 | #endif | 68 | #endif /* ASM_X86__DMA_MAPPING_H */ |
72 | } | 69 | } |
73 | 70 | ||
74 | /* Make sure we keep the same behaviour */ | 71 | /* Make sure we keep the same behaviour */ |
@@ -87,17 +84,14 @@ static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr) | |||
87 | 84 | ||
88 | #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) | 85 | #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) |
89 | #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) | 86 | #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) |
90 | 87 | #define dma_is_consistent(d, h) (1) | |
91 | void *dma_alloc_coherent(struct device *dev, size_t size, | ||
92 | dma_addr_t *dma_handle, gfp_t flag); | ||
93 | |||
94 | void dma_free_coherent(struct device *dev, size_t size, | ||
95 | void *vaddr, dma_addr_t dma_handle); | ||
96 | |||
97 | 88 | ||
98 | extern int dma_supported(struct device *hwdev, u64 mask); | 89 | extern int dma_supported(struct device *hwdev, u64 mask); |
99 | extern int dma_set_mask(struct device *dev, u64 mask); | 90 | extern int dma_set_mask(struct device *dev, u64 mask); |
100 | 91 | ||
92 | extern void *dma_generic_alloc_coherent(struct device *dev, size_t size, | ||
93 | dma_addr_t *dma_addr, gfp_t flag); | ||
94 | |||
101 | static inline dma_addr_t | 95 | static inline dma_addr_t |
102 | dma_map_single(struct device *hwdev, void *ptr, size_t size, | 96 | dma_map_single(struct device *hwdev, void *ptr, size_t size, |
103 | int direction) | 97 | int direction) |
@@ -247,7 +241,68 @@ static inline int dma_get_cache_alignment(void) | |||
247 | return boot_cpu_data.x86_clflush_size; | 241 | return boot_cpu_data.x86_clflush_size; |
248 | } | 242 | } |
249 | 243 | ||
250 | #define dma_is_consistent(d, h) (1) | 244 | static inline unsigned long dma_alloc_coherent_mask(struct device *dev, |
245 | gfp_t gfp) | ||
246 | { | ||
247 | unsigned long dma_mask = 0; | ||
248 | |||
249 | dma_mask = dev->coherent_dma_mask; | ||
250 | if (!dma_mask) | ||
251 | dma_mask = (gfp & GFP_DMA) ? DMA_24BIT_MASK : DMA_32BIT_MASK; | ||
252 | |||
253 | return dma_mask; | ||
254 | } | ||
255 | |||
256 | static inline gfp_t dma_alloc_coherent_gfp_flags(struct device *dev, gfp_t gfp) | ||
257 | { | ||
258 | #ifdef CONFIG_X86_64 | ||
259 | unsigned long dma_mask = dma_alloc_coherent_mask(dev, gfp); | ||
260 | |||
261 | if (dma_mask <= DMA_32BIT_MASK && !(gfp & GFP_DMA)) | ||
262 | gfp |= GFP_DMA32; | ||
263 | #endif | ||
264 | return gfp; | ||
265 | } | ||
266 | |||
267 | static inline void * | ||
268 | dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, | ||
269 | gfp_t gfp) | ||
270 | { | ||
271 | struct dma_mapping_ops *ops = get_dma_ops(dev); | ||
272 | void *memory; | ||
273 | |||
274 | gfp &= ~(__GFP_DMA | __GFP_HIGHMEM | __GFP_DMA32); | ||
275 | |||
276 | if (dma_alloc_from_coherent(dev, size, dma_handle, &memory)) | ||
277 | return memory; | ||
278 | |||
279 | if (!dev) { | ||
280 | dev = &x86_dma_fallback_dev; | ||
281 | gfp |= GFP_DMA; | ||
282 | } | ||
283 | |||
284 | if (!is_device_dma_capable(dev)) | ||
285 | return NULL; | ||
286 | |||
287 | if (!ops->alloc_coherent) | ||
288 | return NULL; | ||
289 | |||
290 | return ops->alloc_coherent(dev, size, dma_handle, | ||
291 | dma_alloc_coherent_gfp_flags(dev, gfp)); | ||
292 | } | ||
293 | |||
294 | static inline void dma_free_coherent(struct device *dev, size_t size, | ||
295 | void *vaddr, dma_addr_t bus) | ||
296 | { | ||
297 | struct dma_mapping_ops *ops = get_dma_ops(dev); | ||
298 | |||
299 | WARN_ON(irqs_disabled()); /* for portability */ | ||
300 | |||
301 | if (dma_release_from_coherent(dev, get_order(size), vaddr)) | ||
302 | return; | ||
303 | |||
304 | if (ops->free_coherent) | ||
305 | ops->free_coherent(dev, size, vaddr, bus); | ||
306 | } | ||
251 | 307 | ||
252 | #include <asm-generic/dma-coherent.h> | ||
253 | #endif | 308 | #endif |
diff --git a/include/asm-x86/dma.h b/include/asm-x86/dma.h index ca1098a7e580..c9f7a4eec555 100644 --- a/include/asm-x86/dma.h +++ b/include/asm-x86/dma.h | |||
@@ -5,8 +5,8 @@ | |||
5 | * and John Boyd, Nov. 1992. | 5 | * and John Boyd, Nov. 1992. |
6 | */ | 6 | */ |
7 | 7 | ||
8 | #ifndef _ASM_X86_DMA_H | 8 | #ifndef ASM_X86__DMA_H |
9 | #define _ASM_X86_DMA_H | 9 | #define ASM_X86__DMA_H |
10 | 10 | ||
11 | #include <linux/spinlock.h> /* And spinlocks */ | 11 | #include <linux/spinlock.h> /* And spinlocks */ |
12 | #include <asm/io.h> /* need byte IO */ | 12 | #include <asm/io.h> /* need byte IO */ |
@@ -315,4 +315,4 @@ extern int isa_dma_bridge_buggy; | |||
315 | #define isa_dma_bridge_buggy (0) | 315 | #define isa_dma_bridge_buggy (0) |
316 | #endif | 316 | #endif |
317 | 317 | ||
318 | #endif /* _ASM_X86_DMA_H */ | 318 | #endif /* ASM_X86__DMA_H */ |
diff --git a/include/asm-x86/dmi.h b/include/asm-x86/dmi.h index 58a86571fe0f..1cff6fe81fa5 100644 --- a/include/asm-x86/dmi.h +++ b/include/asm-x86/dmi.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_DMI_H | 1 | #ifndef ASM_X86__DMI_H |
2 | #define _ASM_X86_DMI_H | 2 | #define ASM_X86__DMI_H |
3 | 3 | ||
4 | #include <asm/io.h> | 4 | #include <asm/io.h> |
5 | 5 | ||
@@ -23,4 +23,4 @@ static inline void *dmi_alloc(unsigned len) | |||
23 | #define dmi_ioremap early_ioremap | 23 | #define dmi_ioremap early_ioremap |
24 | #define dmi_iounmap early_iounmap | 24 | #define dmi_iounmap early_iounmap |
25 | 25 | ||
26 | #endif | 26 | #endif /* ASM_X86__DMI_H */ |
diff --git a/include/asm-x86/ds.h b/include/asm-x86/ds.h index 7881368142fa..c3c953a45b21 100644 --- a/include/asm-x86/ds.h +++ b/include/asm-x86/ds.h | |||
@@ -2,71 +2,237 @@ | |||
2 | * Debug Store (DS) support | 2 | * Debug Store (DS) support |
3 | * | 3 | * |
4 | * This provides a low-level interface to the hardware's Debug Store | 4 | * This provides a low-level interface to the hardware's Debug Store |
5 | * feature that is used for last branch recording (LBR) and | 5 | * feature that is used for branch trace store (BTS) and |
6 | * precise-event based sampling (PEBS). | 6 | * precise-event based sampling (PEBS). |
7 | * | 7 | * |
8 | * Different architectures use a different DS layout/pointer size. | 8 | * It manages: |
9 | * The below functions therefore work on a void*. | 9 | * - per-thread and per-cpu allocation of BTS and PEBS |
10 | * - buffer memory allocation (optional) | ||
11 | * - buffer overflow handling | ||
12 | * - buffer access | ||
10 | * | 13 | * |
14 | * It assumes: | ||
15 | * - get_task_struct on all parameter tasks | ||
16 | * - current is allowed to trace parameter tasks | ||
11 | * | 17 | * |
12 | * Since there is no user for PEBS, yet, only LBR (or branch | ||
13 | * trace store, BTS) is supported. | ||
14 | * | 18 | * |
15 | * | 19 | * Copyright (C) 2007-2008 Intel Corporation. |
16 | * Copyright (C) 2007 Intel Corporation. | 20 | * Markus Metzger <markus.t.metzger@intel.com>, 2007-2008 |
17 | * Markus Metzger <markus.t.metzger@intel.com>, Dec 2007 | ||
18 | */ | 21 | */ |
19 | 22 | ||
20 | #ifndef _ASM_X86_DS_H | 23 | #ifndef ASM_X86__DS_H |
21 | #define _ASM_X86_DS_H | 24 | #define ASM_X86__DS_H |
25 | |||
26 | #ifdef CONFIG_X86_DS | ||
22 | 27 | ||
23 | #include <linux/types.h> | 28 | #include <linux/types.h> |
24 | #include <linux/init.h> | 29 | #include <linux/init.h> |
25 | 30 | ||
26 | struct cpuinfo_x86; | ||
27 | 31 | ||
32 | struct task_struct; | ||
28 | 33 | ||
29 | /* a branch trace record entry | 34 | /* |
35 | * Request BTS or PEBS | ||
36 | * | ||
37 | * Due to alignement constraints, the actual buffer may be slightly | ||
38 | * smaller than the requested or provided buffer. | ||
30 | * | 39 | * |
31 | * In order to unify the interface between various processor versions, | 40 | * Returns 0 on success; -Eerrno otherwise |
32 | * we use the below data structure for all processors. | 41 | * |
42 | * task: the task to request recording for; | ||
43 | * NULL for per-cpu recording on the current cpu | ||
44 | * base: the base pointer for the (non-pageable) buffer; | ||
45 | * NULL if buffer allocation requested | ||
46 | * size: the size of the requested or provided buffer | ||
47 | * ovfl: pointer to a function to be called on buffer overflow; | ||
48 | * NULL if cyclic buffer requested | ||
33 | */ | 49 | */ |
34 | enum bts_qualifier { | 50 | typedef void (*ds_ovfl_callback_t)(struct task_struct *); |
35 | BTS_INVALID = 0, | 51 | extern int ds_request_bts(struct task_struct *task, void *base, size_t size, |
36 | BTS_BRANCH, | 52 | ds_ovfl_callback_t ovfl); |
37 | BTS_TASK_ARRIVES, | 53 | extern int ds_request_pebs(struct task_struct *task, void *base, size_t size, |
38 | BTS_TASK_DEPARTS | 54 | ds_ovfl_callback_t ovfl); |
39 | }; | ||
40 | 55 | ||
41 | struct bts_struct { | 56 | /* |
42 | u64 qualifier; | 57 | * Release BTS or PEBS resources |
43 | union { | 58 | * |
44 | /* BTS_BRANCH */ | 59 | * Frees buffers allocated on ds_request. |
45 | struct { | 60 | * |
46 | u64 from_ip; | 61 | * Returns 0 on success; -Eerrno otherwise |
47 | u64 to_ip; | 62 | * |
48 | } lbr; | 63 | * task: the task to release resources for; |
49 | /* BTS_TASK_ARRIVES or | 64 | * NULL to release resources for the current cpu |
50 | BTS_TASK_DEPARTS */ | 65 | */ |
51 | u64 jiffies; | 66 | extern int ds_release_bts(struct task_struct *task); |
52 | } variant; | 67 | extern int ds_release_pebs(struct task_struct *task); |
68 | |||
69 | /* | ||
70 | * Return the (array) index of the write pointer. | ||
71 | * (assuming an array of BTS/PEBS records) | ||
72 | * | ||
73 | * Returns -Eerrno on error | ||
74 | * | ||
75 | * task: the task to access; | ||
76 | * NULL to access the current cpu | ||
77 | * pos (out): if not NULL, will hold the result | ||
78 | */ | ||
79 | extern int ds_get_bts_index(struct task_struct *task, size_t *pos); | ||
80 | extern int ds_get_pebs_index(struct task_struct *task, size_t *pos); | ||
81 | |||
82 | /* | ||
83 | * Return the (array) index one record beyond the end of the array. | ||
84 | * (assuming an array of BTS/PEBS records) | ||
85 | * | ||
86 | * Returns -Eerrno on error | ||
87 | * | ||
88 | * task: the task to access; | ||
89 | * NULL to access the current cpu | ||
90 | * pos (out): if not NULL, will hold the result | ||
91 | */ | ||
92 | extern int ds_get_bts_end(struct task_struct *task, size_t *pos); | ||
93 | extern int ds_get_pebs_end(struct task_struct *task, size_t *pos); | ||
94 | |||
95 | /* | ||
96 | * Provide a pointer to the BTS/PEBS record at parameter index. | ||
97 | * (assuming an array of BTS/PEBS records) | ||
98 | * | ||
99 | * The pointer points directly into the buffer. The user is | ||
100 | * responsible for copying the record. | ||
101 | * | ||
102 | * Returns the size of a single record on success; -Eerrno on error | ||
103 | * | ||
104 | * task: the task to access; | ||
105 | * NULL to access the current cpu | ||
106 | * index: the index of the requested record | ||
107 | * record (out): pointer to the requested record | ||
108 | */ | ||
109 | extern int ds_access_bts(struct task_struct *task, | ||
110 | size_t index, const void **record); | ||
111 | extern int ds_access_pebs(struct task_struct *task, | ||
112 | size_t index, const void **record); | ||
113 | |||
114 | /* | ||
115 | * Write one or more BTS/PEBS records at the write pointer index and | ||
116 | * advance the write pointer. | ||
117 | * | ||
118 | * If size is not a multiple of the record size, trailing bytes are | ||
119 | * zeroed out. | ||
120 | * | ||
121 | * May result in one or more overflow notifications. | ||
122 | * | ||
123 | * If called during overflow handling, that is, with index >= | ||
124 | * interrupt threshold, the write will wrap around. | ||
125 | * | ||
126 | * An overflow notification is given if and when the interrupt | ||
127 | * threshold is reached during or after the write. | ||
128 | * | ||
129 | * Returns the number of bytes written or -Eerrno. | ||
130 | * | ||
131 | * task: the task to access; | ||
132 | * NULL to access the current cpu | ||
133 | * buffer: the buffer to write | ||
134 | * size: the size of the buffer | ||
135 | */ | ||
136 | extern int ds_write_bts(struct task_struct *task, | ||
137 | const void *buffer, size_t size); | ||
138 | extern int ds_write_pebs(struct task_struct *task, | ||
139 | const void *buffer, size_t size); | ||
140 | |||
141 | /* | ||
142 | * Same as ds_write_bts/pebs, but omit ownership checks. | ||
143 | * | ||
144 | * This is needed to have some other task than the owner of the | ||
145 | * BTS/PEBS buffer or the parameter task itself write into the | ||
146 | * respective buffer. | ||
147 | */ | ||
148 | extern int ds_unchecked_write_bts(struct task_struct *task, | ||
149 | const void *buffer, size_t size); | ||
150 | extern int ds_unchecked_write_pebs(struct task_struct *task, | ||
151 | const void *buffer, size_t size); | ||
152 | |||
153 | /* | ||
154 | * Reset the write pointer of the BTS/PEBS buffer. | ||
155 | * | ||
156 | * Returns 0 on success; -Eerrno on error | ||
157 | * | ||
158 | * task: the task to access; | ||
159 | * NULL to access the current cpu | ||
160 | */ | ||
161 | extern int ds_reset_bts(struct task_struct *task); | ||
162 | extern int ds_reset_pebs(struct task_struct *task); | ||
163 | |||
164 | /* | ||
165 | * Clear the BTS/PEBS buffer and reset the write pointer. | ||
166 | * The entire buffer will be zeroed out. | ||
167 | * | ||
168 | * Returns 0 on success; -Eerrno on error | ||
169 | * | ||
170 | * task: the task to access; | ||
171 | * NULL to access the current cpu | ||
172 | */ | ||
173 | extern int ds_clear_bts(struct task_struct *task); | ||
174 | extern int ds_clear_pebs(struct task_struct *task); | ||
175 | |||
176 | /* | ||
177 | * Provide the PEBS counter reset value. | ||
178 | * | ||
179 | * Returns 0 on success; -Eerrno on error | ||
180 | * | ||
181 | * task: the task to access; | ||
182 | * NULL to access the current cpu | ||
183 | * value (out): the counter reset value | ||
184 | */ | ||
185 | extern int ds_get_pebs_reset(struct task_struct *task, u64 *value); | ||
186 | |||
187 | /* | ||
188 | * Set the PEBS counter reset value. | ||
189 | * | ||
190 | * Returns 0 on success; -Eerrno on error | ||
191 | * | ||
192 | * task: the task to access; | ||
193 | * NULL to access the current cpu | ||
194 | * value: the new counter reset value | ||
195 | */ | ||
196 | extern int ds_set_pebs_reset(struct task_struct *task, u64 value); | ||
197 | |||
198 | /* | ||
199 | * Initialization | ||
200 | */ | ||
201 | struct cpuinfo_x86; | ||
202 | extern void __cpuinit ds_init_intel(struct cpuinfo_x86 *); | ||
203 | |||
204 | |||
205 | |||
206 | /* | ||
207 | * The DS context - part of struct thread_struct. | ||
208 | */ | ||
209 | struct ds_context { | ||
210 | /* pointer to the DS configuration; goes into MSR_IA32_DS_AREA */ | ||
211 | unsigned char *ds; | ||
212 | /* the owner of the BTS and PEBS configuration, respectively */ | ||
213 | struct task_struct *owner[2]; | ||
214 | /* buffer overflow notification function for BTS and PEBS */ | ||
215 | ds_ovfl_callback_t callback[2]; | ||
216 | /* the original buffer address */ | ||
217 | void *buffer[2]; | ||
218 | /* the number of allocated pages for on-request allocated buffers */ | ||
219 | unsigned int pages[2]; | ||
220 | /* use count */ | ||
221 | unsigned long count; | ||
222 | /* a pointer to the context location inside the thread_struct | ||
223 | * or the per_cpu context array */ | ||
224 | struct ds_context **this; | ||
225 | /* a pointer to the task owning this context, or NULL, if the | ||
226 | * context is owned by a cpu */ | ||
227 | struct task_struct *task; | ||
53 | }; | 228 | }; |
54 | 229 | ||
55 | /* Overflow handling mechanisms */ | 230 | /* called by exit_thread() to free leftover contexts */ |
56 | #define DS_O_SIGNAL 1 /* send overflow signal */ | 231 | extern void ds_free(struct ds_context *context); |
57 | #define DS_O_WRAP 2 /* wrap around */ | 232 | |
58 | 233 | #else /* CONFIG_X86_DS */ | |
59 | extern int ds_allocate(void **, size_t); | 234 | |
60 | extern int ds_free(void **); | 235 | #define ds_init_intel(config) do {} while (0) |
61 | extern int ds_get_bts_size(void *); | 236 | |
62 | extern int ds_get_bts_end(void *); | 237 | #endif /* CONFIG_X86_DS */ |
63 | extern int ds_get_bts_index(void *); | 238 | #endif /* ASM_X86__DS_H */ |
64 | extern int ds_set_overflow(void *, int); | ||
65 | extern int ds_get_overflow(void *); | ||
66 | extern int ds_clear(void *); | ||
67 | extern int ds_read_bts(void *, int, struct bts_struct *); | ||
68 | extern int ds_write_bts(void *, const struct bts_struct *); | ||
69 | extern unsigned long ds_debugctl_mask(void); | ||
70 | extern void __cpuinit ds_init_intel(struct cpuinfo_x86 *c); | ||
71 | |||
72 | #endif /* _ASM_X86_DS_H */ | ||
diff --git a/include/asm-x86/dwarf2.h b/include/asm-x86/dwarf2.h index 738bb9fb3e53..21d1bc32ad7c 100644 --- a/include/asm-x86/dwarf2.h +++ b/include/asm-x86/dwarf2.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _DWARF2_H | 1 | #ifndef ASM_X86__DWARF2_H |
2 | #define _DWARF2_H | 2 | #define ASM_X86__DWARF2_H |
3 | 3 | ||
4 | #ifndef __ASSEMBLY__ | 4 | #ifndef __ASSEMBLY__ |
5 | #warning "asm/dwarf2.h should be only included in pure assembly files" | 5 | #warning "asm/dwarf2.h should be only included in pure assembly files" |
@@ -58,4 +58,4 @@ | |||
58 | 58 | ||
59 | #endif | 59 | #endif |
60 | 60 | ||
61 | #endif | 61 | #endif /* ASM_X86__DWARF2_H */ |
diff --git a/include/asm-x86/e820.h b/include/asm-x86/e820.h index 16a31e2c7c57..5abbdec06bd2 100644 --- a/include/asm-x86/e820.h +++ b/include/asm-x86/e820.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_E820_H | 1 | #ifndef ASM_X86__E820_H |
2 | #define __ASM_E820_H | 2 | #define ASM_X86__E820_H |
3 | #define E820MAP 0x2d0 /* our map */ | 3 | #define E820MAP 0x2d0 /* our map */ |
4 | #define E820MAX 128 /* number of entries in E820MAP */ | 4 | #define E820MAX 128 /* number of entries in E820MAP */ |
5 | 5 | ||
@@ -43,6 +43,7 @@ | |||
43 | #define E820_RESERVED 2 | 43 | #define E820_RESERVED 2 |
44 | #define E820_ACPI 3 | 44 | #define E820_ACPI 3 |
45 | #define E820_NVS 4 | 45 | #define E820_NVS 4 |
46 | #define E820_UNUSABLE 5 | ||
46 | 47 | ||
47 | /* reserved RAM used by kernel itself */ | 48 | /* reserved RAM used by kernel itself */ |
48 | #define E820_RESERVED_KERN 128 | 49 | #define E820_RESERVED_KERN 128 |
@@ -64,6 +65,7 @@ struct e820map { | |||
64 | extern struct e820map e820; | 65 | extern struct e820map e820; |
65 | extern struct e820map e820_saved; | 66 | extern struct e820map e820_saved; |
66 | 67 | ||
68 | extern unsigned long pci_mem_start; | ||
67 | extern int e820_any_mapped(u64 start, u64 end, unsigned type); | 69 | extern int e820_any_mapped(u64 start, u64 end, unsigned type); |
68 | extern int e820_all_mapped(u64 start, u64 end, unsigned type); | 70 | extern int e820_all_mapped(u64 start, u64 end, unsigned type); |
69 | extern void e820_add_region(u64 start, u64 size, int type); | 71 | extern void e820_add_region(u64 start, u64 size, int type); |
@@ -120,6 +122,7 @@ extern void e820_register_active_regions(int nid, unsigned long start_pfn, | |||
120 | extern u64 e820_hole_size(u64 start, u64 end); | 122 | extern u64 e820_hole_size(u64 start, u64 end); |
121 | extern void finish_e820_parsing(void); | 123 | extern void finish_e820_parsing(void); |
122 | extern void e820_reserve_resources(void); | 124 | extern void e820_reserve_resources(void); |
125 | extern void e820_reserve_resources_late(void); | ||
123 | extern void setup_memory_map(void); | 126 | extern void setup_memory_map(void); |
124 | extern char *default_machine_specific_memory_setup(void); | 127 | extern char *default_machine_specific_memory_setup(void); |
125 | extern char *machine_specific_memory_setup(void); | 128 | extern char *machine_specific_memory_setup(void); |
@@ -140,4 +143,4 @@ extern char *memory_setup(void); | |||
140 | #define HIGH_MEMORY (1024*1024) | 143 | #define HIGH_MEMORY (1024*1024) |
141 | #endif /* __KERNEL__ */ | 144 | #endif /* __KERNEL__ */ |
142 | 145 | ||
143 | #endif /* __ASM_E820_H */ | 146 | #endif /* ASM_X86__E820_H */ |
diff --git a/include/asm-x86/edac.h b/include/asm-x86/edac.h index a8088f63a30e..9493c5b27bbd 100644 --- a/include/asm-x86/edac.h +++ b/include/asm-x86/edac.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_EDAC_H | 1 | #ifndef ASM_X86__EDAC_H |
2 | #define _ASM_X86_EDAC_H | 2 | #define ASM_X86__EDAC_H |
3 | 3 | ||
4 | /* ECC atomic, DMA, SMP and interrupt safe scrub function */ | 4 | /* ECC atomic, DMA, SMP and interrupt safe scrub function */ |
5 | 5 | ||
@@ -15,4 +15,4 @@ static inline void atomic_scrub(void *va, u32 size) | |||
15 | asm volatile("lock; addl $0, %0"::"m" (*virt_addr)); | 15 | asm volatile("lock; addl $0, %0"::"m" (*virt_addr)); |
16 | } | 16 | } |
17 | 17 | ||
18 | #endif | 18 | #endif /* ASM_X86__EDAC_H */ |
diff --git a/include/asm-x86/efi.h b/include/asm-x86/efi.h index d4f2b0abe929..ed2de22e8705 100644 --- a/include/asm-x86/efi.h +++ b/include/asm-x86/efi.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_EFI_H | 1 | #ifndef ASM_X86__EFI_H |
2 | #define _ASM_X86_EFI_H | 2 | #define ASM_X86__EFI_H |
3 | 3 | ||
4 | #ifdef CONFIG_X86_32 | 4 | #ifdef CONFIG_X86_32 |
5 | 5 | ||
@@ -94,4 +94,4 @@ extern void efi_reserve_early(void); | |||
94 | extern void efi_call_phys_prelog(void); | 94 | extern void efi_call_phys_prelog(void); |
95 | extern void efi_call_phys_epilog(void); | 95 | extern void efi_call_phys_epilog(void); |
96 | 96 | ||
97 | #endif | 97 | #endif /* ASM_X86__EFI_H */ |
diff --git a/include/asm-x86/elf.h b/include/asm-x86/elf.h index 7be4733c793e..26bc15f01e78 100644 --- a/include/asm-x86/elf.h +++ b/include/asm-x86/elf.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_ELF_H | 1 | #ifndef ASM_X86__ELF_H |
2 | #define _ASM_X86_ELF_H | 2 | #define ASM_X86__ELF_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * ELF register definitions.. | 5 | * ELF register definitions.. |
@@ -148,8 +148,9 @@ do { \ | |||
148 | 148 | ||
149 | static inline void start_ia32_thread(struct pt_regs *regs, u32 ip, u32 sp) | 149 | static inline void start_ia32_thread(struct pt_regs *regs, u32 ip, u32 sp) |
150 | { | 150 | { |
151 | asm volatile("movl %0,%%fs" :: "r" (0)); | 151 | loadsegment(fs, 0); |
152 | asm volatile("movl %0,%%es; movl %0,%%ds" : : "r" (__USER32_DS)); | 152 | loadsegment(ds, __USER32_DS); |
153 | loadsegment(es, __USER32_DS); | ||
153 | load_gs_index(0); | 154 | load_gs_index(0); |
154 | regs->ip = ip; | 155 | regs->ip = ip; |
155 | regs->sp = sp; | 156 | regs->sp = sp; |
@@ -185,7 +186,7 @@ do { \ | |||
185 | set_fs(USER_DS); \ | 186 | set_fs(USER_DS); \ |
186 | } while (0) | 187 | } while (0) |
187 | 188 | ||
188 | #define COMPAT_SET_PERSONALITY(ex, ibcs2) \ | 189 | #define COMPAT_SET_PERSONALITY(ex) \ |
189 | do { \ | 190 | do { \ |
190 | if (test_thread_flag(TIF_IA32)) \ | 191 | if (test_thread_flag(TIF_IA32)) \ |
191 | clear_thread_flag(TIF_ABI_PENDING); \ | 192 | clear_thread_flag(TIF_ABI_PENDING); \ |
@@ -266,7 +267,7 @@ extern int force_personality32; | |||
266 | For the moment, we have only optimizations for the Intel generations, | 267 | For the moment, we have only optimizations for the Intel generations, |
267 | but that could change... */ | 268 | but that could change... */ |
268 | 269 | ||
269 | #define SET_PERSONALITY(ex, ibcs2) set_personality_64bit() | 270 | #define SET_PERSONALITY(ex) set_personality_64bit() |
270 | 271 | ||
271 | /* | 272 | /* |
272 | * An executable for which elf_read_implies_exec() returns TRUE will | 273 | * An executable for which elf_read_implies_exec() returns TRUE will |
@@ -332,4 +333,4 @@ extern int syscall32_setup_pages(struct linux_binprm *, int exstack); | |||
332 | extern unsigned long arch_randomize_brk(struct mm_struct *mm); | 333 | extern unsigned long arch_randomize_brk(struct mm_struct *mm); |
333 | #define arch_randomize_brk arch_randomize_brk | 334 | #define arch_randomize_brk arch_randomize_brk |
334 | 335 | ||
335 | #endif | 336 | #endif /* ASM_X86__ELF_H */ |
diff --git a/include/asm-x86/emergency-restart.h b/include/asm-x86/emergency-restart.h index 8e6aef19f8f0..190d0d8b71e3 100644 --- a/include/asm-x86/emergency-restart.h +++ b/include/asm-x86/emergency-restart.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_EMERGENCY_RESTART_H | 1 | #ifndef ASM_X86__EMERGENCY_RESTART_H |
2 | #define _ASM_EMERGENCY_RESTART_H | 2 | #define ASM_X86__EMERGENCY_RESTART_H |
3 | 3 | ||
4 | enum reboot_type { | 4 | enum reboot_type { |
5 | BOOT_TRIPLE = 't', | 5 | BOOT_TRIPLE = 't', |
@@ -15,4 +15,4 @@ extern enum reboot_type reboot_type; | |||
15 | 15 | ||
16 | extern void machine_emergency_restart(void); | 16 | extern void machine_emergency_restart(void); |
17 | 17 | ||
18 | #endif /* _ASM_EMERGENCY_RESTART_H */ | 18 | #endif /* ASM_X86__EMERGENCY_RESTART_H */ |
diff --git a/include/asm-x86/mach-es7000/mach_apic.h b/include/asm-x86/es7000/apic.h index 0a3fdf930672..aae50c2fb303 100644 --- a/include/asm-x86/mach-es7000/mach_apic.h +++ b/include/asm-x86/es7000/apic.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_MACH_APIC_H | 1 | #ifndef __ASM_ES7000_APIC_H |
2 | #define __ASM_MACH_APIC_H | 2 | #define __ASM_ES7000_APIC_H |
3 | 3 | ||
4 | #define xapic_phys_to_log_apicid(cpu) per_cpu(x86_bios_cpu_apicid, cpu) | 4 | #define xapic_phys_to_log_apicid(cpu) per_cpu(x86_bios_cpu_apicid, cpu) |
5 | #define esr_disable (1) | 5 | #define esr_disable (1) |
@@ -10,7 +10,7 @@ static inline int apic_id_registered(void) | |||
10 | } | 10 | } |
11 | 11 | ||
12 | static inline cpumask_t target_cpus(void) | 12 | static inline cpumask_t target_cpus(void) |
13 | { | 13 | { |
14 | #if defined CONFIG_ES7000_CLUSTERED_APIC | 14 | #if defined CONFIG_ES7000_CLUSTERED_APIC |
15 | return CPU_MASK_ALL; | 15 | return CPU_MASK_ALL; |
16 | #else | 16 | #else |
@@ -23,24 +23,24 @@ static inline cpumask_t target_cpus(void) | |||
23 | #define APIC_DFR_VALUE (APIC_DFR_CLUSTER) | 23 | #define APIC_DFR_VALUE (APIC_DFR_CLUSTER) |
24 | #define INT_DELIVERY_MODE (dest_LowestPrio) | 24 | #define INT_DELIVERY_MODE (dest_LowestPrio) |
25 | #define INT_DEST_MODE (1) /* logical delivery broadcast to all procs */ | 25 | #define INT_DEST_MODE (1) /* logical delivery broadcast to all procs */ |
26 | #define NO_BALANCE_IRQ (1) | 26 | #define NO_BALANCE_IRQ (1) |
27 | #undef WAKE_SECONDARY_VIA_INIT | 27 | #undef WAKE_SECONDARY_VIA_INIT |
28 | #define WAKE_SECONDARY_VIA_MIP | 28 | #define WAKE_SECONDARY_VIA_MIP |
29 | #else | 29 | #else |
30 | #define APIC_DFR_VALUE (APIC_DFR_FLAT) | 30 | #define APIC_DFR_VALUE (APIC_DFR_FLAT) |
31 | #define INT_DELIVERY_MODE (dest_Fixed) | 31 | #define INT_DELIVERY_MODE (dest_Fixed) |
32 | #define INT_DEST_MODE (0) /* phys delivery to target procs */ | 32 | #define INT_DEST_MODE (0) /* phys delivery to target procs */ |
33 | #define NO_BALANCE_IRQ (0) | 33 | #define NO_BALANCE_IRQ (0) |
34 | #undef APIC_DEST_LOGICAL | 34 | #undef APIC_DEST_LOGICAL |
35 | #define APIC_DEST_LOGICAL 0x0 | 35 | #define APIC_DEST_LOGICAL 0x0 |
36 | #define WAKE_SECONDARY_VIA_INIT | 36 | #define WAKE_SECONDARY_VIA_INIT |
37 | #endif | 37 | #endif |
38 | 38 | ||
39 | static inline unsigned long check_apicid_used(physid_mask_t bitmap, int apicid) | 39 | static inline unsigned long check_apicid_used(physid_mask_t bitmap, int apicid) |
40 | { | 40 | { |
41 | return 0; | 41 | return 0; |
42 | } | 42 | } |
43 | static inline unsigned long check_apicid_present(int bit) | 43 | static inline unsigned long check_apicid_present(int bit) |
44 | { | 44 | { |
45 | return physid_isset(bit, phys_cpu_present_map); | 45 | return physid_isset(bit, phys_cpu_present_map); |
46 | } | 46 | } |
@@ -80,7 +80,7 @@ static inline void setup_apic_routing(void) | |||
80 | { | 80 | { |
81 | int apic = per_cpu(x86_bios_cpu_apicid, smp_processor_id()); | 81 | int apic = per_cpu(x86_bios_cpu_apicid, smp_processor_id()); |
82 | printk("Enabling APIC mode: %s. Using %d I/O APICs, target cpus %lx\n", | 82 | printk("Enabling APIC mode: %s. Using %d I/O APICs, target cpus %lx\n", |
83 | (apic_version[apic] == 0x14) ? | 83 | (apic_version[apic] == 0x14) ? |
84 | "Physical Cluster" : "Logical Cluster", nr_ioapics, cpus_addr(TARGET_CPUS)[0]); | 84 | "Physical Cluster" : "Logical Cluster", nr_ioapics, cpus_addr(TARGET_CPUS)[0]); |
85 | } | 85 | } |
86 | 86 | ||
@@ -141,7 +141,7 @@ static inline void setup_portio_remap(void) | |||
141 | extern unsigned int boot_cpu_physical_apicid; | 141 | extern unsigned int boot_cpu_physical_apicid; |
142 | static inline int check_phys_apicid_present(int cpu_physical_apicid) | 142 | static inline int check_phys_apicid_present(int cpu_physical_apicid) |
143 | { | 143 | { |
144 | boot_cpu_physical_apicid = GET_APIC_ID(read_apic_id()); | 144 | boot_cpu_physical_apicid = read_apic_id(); |
145 | return (1); | 145 | return (1); |
146 | } | 146 | } |
147 | 147 | ||
@@ -150,7 +150,7 @@ static inline unsigned int cpu_mask_to_apicid(cpumask_t cpumask) | |||
150 | int num_bits_set; | 150 | int num_bits_set; |
151 | int cpus_found = 0; | 151 | int cpus_found = 0; |
152 | int cpu; | 152 | int cpu; |
153 | int apicid; | 153 | int apicid; |
154 | 154 | ||
155 | num_bits_set = cpus_weight(cpumask); | 155 | num_bits_set = cpus_weight(cpumask); |
156 | /* Return id to all */ | 156 | /* Return id to all */ |
@@ -160,18 +160,18 @@ static inline unsigned int cpu_mask_to_apicid(cpumask_t cpumask) | |||
160 | #else | 160 | #else |
161 | return cpu_to_logical_apicid(0); | 161 | return cpu_to_logical_apicid(0); |
162 | #endif | 162 | #endif |
163 | /* | 163 | /* |
164 | * The cpus in the mask must all be on the apic cluster. If are not | 164 | * The cpus in the mask must all be on the apic cluster. If are not |
165 | * on the same apicid cluster return default value of TARGET_CPUS. | 165 | * on the same apicid cluster return default value of TARGET_CPUS. |
166 | */ | 166 | */ |
167 | cpu = first_cpu(cpumask); | 167 | cpu = first_cpu(cpumask); |
168 | apicid = cpu_to_logical_apicid(cpu); | 168 | apicid = cpu_to_logical_apicid(cpu); |
169 | while (cpus_found < num_bits_set) { | 169 | while (cpus_found < num_bits_set) { |
170 | if (cpu_isset(cpu, cpumask)) { | 170 | if (cpu_isset(cpu, cpumask)) { |
171 | int new_apicid = cpu_to_logical_apicid(cpu); | 171 | int new_apicid = cpu_to_logical_apicid(cpu); |
172 | if (apicid_cluster(apicid) != | 172 | if (apicid_cluster(apicid) != |
173 | apicid_cluster(new_apicid)){ | 173 | apicid_cluster(new_apicid)){ |
174 | printk ("%s: Not a valid mask!\n",__FUNCTION__); | 174 | printk ("%s: Not a valid mask!\n", __func__); |
175 | #if defined CONFIG_ES7000_CLUSTERED_APIC | 175 | #if defined CONFIG_ES7000_CLUSTERED_APIC |
176 | return 0xFF; | 176 | return 0xFF; |
177 | #else | 177 | #else |
@@ -191,4 +191,4 @@ static inline u32 phys_pkg_id(u32 cpuid_apic, int index_msb) | |||
191 | return cpuid_apic >> index_msb; | 191 | return cpuid_apic >> index_msb; |
192 | } | 192 | } |
193 | 193 | ||
194 | #endif /* __ASM_MACH_APIC_H */ | 194 | #endif /* __ASM_ES7000_APIC_H */ |
diff --git a/include/asm-x86/es7000/apicdef.h b/include/asm-x86/es7000/apicdef.h new file mode 100644 index 000000000000..8b234a3cb851 --- /dev/null +++ b/include/asm-x86/es7000/apicdef.h | |||
@@ -0,0 +1,13 @@ | |||
1 | #ifndef __ASM_ES7000_APICDEF_H | ||
2 | #define __ASM_ES7000_APICDEF_H | ||
3 | |||
4 | #define APIC_ID_MASK (0xFF<<24) | ||
5 | |||
6 | static inline unsigned get_apic_id(unsigned long x) | ||
7 | { | ||
8 | return (((x)>>24)&0xFF); | ||
9 | } | ||
10 | |||
11 | #define GET_APIC_ID(x) get_apic_id(x) | ||
12 | |||
13 | #endif | ||
diff --git a/include/asm-x86/mach-es7000/mach_ipi.h b/include/asm-x86/es7000/ipi.h index 5e61bd220b06..632a955fcc0a 100644 --- a/include/asm-x86/mach-es7000/mach_ipi.h +++ b/include/asm-x86/es7000/ipi.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_MACH_IPI_H | 1 | #ifndef __ASM_ES7000_IPI_H |
2 | #define __ASM_MACH_IPI_H | 2 | #define __ASM_ES7000_IPI_H |
3 | 3 | ||
4 | void send_IPI_mask_sequence(cpumask_t mask, int vector); | 4 | void send_IPI_mask_sequence(cpumask_t mask, int vector); |
5 | 5 | ||
@@ -21,4 +21,4 @@ static inline void send_IPI_all(int vector) | |||
21 | send_IPI_mask(cpu_online_map, vector); | 21 | send_IPI_mask(cpu_online_map, vector); |
22 | } | 22 | } |
23 | 23 | ||
24 | #endif /* __ASM_MACH_IPI_H */ | 24 | #endif /* __ASM_ES7000_IPI_H */ |
diff --git a/include/asm-x86/mach-es7000/mach_mpparse.h b/include/asm-x86/es7000/mpparse.h index ef26d3523625..ed5a3caae141 100644 --- a/include/asm-x86/mach-es7000/mach_mpparse.h +++ b/include/asm-x86/es7000/mpparse.h | |||
@@ -1,10 +1,11 @@ | |||
1 | #ifndef __ASM_MACH_MPPARSE_H | 1 | #ifndef __ASM_ES7000_MPPARSE_H |
2 | #define __ASM_MACH_MPPARSE_H | 2 | #define __ASM_ES7000_MPPARSE_H |
3 | 3 | ||
4 | #include <linux/acpi.h> | 4 | #include <linux/acpi.h> |
5 | 5 | ||
6 | extern int parse_unisys_oem (char *oemptr); | 6 | extern int parse_unisys_oem (char *oemptr); |
7 | extern int find_unisys_acpi_oem_table(unsigned long *oem_addr); | 7 | extern int find_unisys_acpi_oem_table(unsigned long *oem_addr); |
8 | extern void unmap_unisys_acpi_oem_table(unsigned long oem_addr); | ||
8 | extern void setup_unisys(void); | 9 | extern void setup_unisys(void); |
9 | 10 | ||
10 | #ifndef CONFIG_X86_GENERICARCH | 11 | #ifndef CONFIG_X86_GENERICARCH |
diff --git a/include/asm-x86/mach-es7000/mach_wakecpu.h b/include/asm-x86/es7000/wakecpu.h index 84ff58314501..3ffc5a7bf667 100644 --- a/include/asm-x86/mach-es7000/mach_wakecpu.h +++ b/include/asm-x86/es7000/wakecpu.h | |||
@@ -1,7 +1,7 @@ | |||
1 | #ifndef __ASM_MACH_WAKECPU_H | 1 | #ifndef __ASM_ES7000_WAKECPU_H |
2 | #define __ASM_MACH_WAKECPU_H | 2 | #define __ASM_ES7000_WAKECPU_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * This file copes with machines that wakeup secondary CPUs by the | 5 | * This file copes with machines that wakeup secondary CPUs by the |
6 | * INIT, INIT, STARTUP sequence. | 6 | * INIT, INIT, STARTUP sequence. |
7 | */ | 7 | */ |
diff --git a/include/asm-x86/fb.h b/include/asm-x86/fb.h index 53018464aea6..aca38dbd9a64 100644 --- a/include/asm-x86/fb.h +++ b/include/asm-x86/fb.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_FB_H | 1 | #ifndef ASM_X86__FB_H |
2 | #define _ASM_X86_FB_H | 2 | #define ASM_X86__FB_H |
3 | 3 | ||
4 | #include <linux/fb.h> | 4 | #include <linux/fb.h> |
5 | #include <linux/fs.h> | 5 | #include <linux/fs.h> |
@@ -18,4 +18,4 @@ extern int fb_is_primary_device(struct fb_info *info); | |||
18 | static inline int fb_is_primary_device(struct fb_info *info) { return 0; } | 18 | static inline int fb_is_primary_device(struct fb_info *info) { return 0; } |
19 | #endif | 19 | #endif |
20 | 20 | ||
21 | #endif /* _ASM_X86_FB_H */ | 21 | #endif /* ASM_X86__FB_H */ |
diff --git a/include/asm-x86/fixmap.h b/include/asm-x86/fixmap.h index 44d4f8217349..78e33a1bc591 100644 --- a/include/asm-x86/fixmap.h +++ b/include/asm-x86/fixmap.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_FIXMAP_H | 1 | #ifndef ASM_X86__FIXMAP_H |
2 | #define _ASM_FIXMAP_H | 2 | #define ASM_X86__FIXMAP_H |
3 | 3 | ||
4 | #ifdef CONFIG_X86_32 | 4 | #ifdef CONFIG_X86_32 |
5 | # include "fixmap_32.h" | 5 | # include "fixmap_32.h" |
@@ -65,4 +65,4 @@ static inline unsigned long virt_to_fix(const unsigned long vaddr) | |||
65 | BUG_ON(vaddr >= FIXADDR_TOP || vaddr < FIXADDR_START); | 65 | BUG_ON(vaddr >= FIXADDR_TOP || vaddr < FIXADDR_START); |
66 | return __virt_to_fix(vaddr); | 66 | return __virt_to_fix(vaddr); |
67 | } | 67 | } |
68 | #endif | 68 | #endif /* ASM_X86__FIXMAP_H */ |
diff --git a/include/asm-x86/fixmap_32.h b/include/asm-x86/fixmap_32.h index f1ac2b2167d7..8844002da0e0 100644 --- a/include/asm-x86/fixmap_32.h +++ b/include/asm-x86/fixmap_32.h | |||
@@ -10,8 +10,8 @@ | |||
10 | * Support of BIGMEM added by Gerhard Wichert, Siemens AG, July 1999 | 10 | * Support of BIGMEM added by Gerhard Wichert, Siemens AG, July 1999 |
11 | */ | 11 | */ |
12 | 12 | ||
13 | #ifndef _ASM_FIXMAP_32_H | 13 | #ifndef ASM_X86__FIXMAP_32_H |
14 | #define _ASM_FIXMAP_32_H | 14 | #define ASM_X86__FIXMAP_32_H |
15 | 15 | ||
16 | 16 | ||
17 | /* used by vmalloc.c, vsyscall.lds.S. | 17 | /* used by vmalloc.c, vsyscall.lds.S. |
@@ -94,10 +94,10 @@ enum fixed_addresses { | |||
94 | * can have a single pgd entry and a single pte table: | 94 | * can have a single pgd entry and a single pte table: |
95 | */ | 95 | */ |
96 | #define NR_FIX_BTMAPS 64 | 96 | #define NR_FIX_BTMAPS 64 |
97 | #define FIX_BTMAPS_NESTING 4 | 97 | #define FIX_BTMAPS_SLOTS 4 |
98 | FIX_BTMAP_END = __end_of_permanent_fixed_addresses + 256 - | 98 | FIX_BTMAP_END = __end_of_permanent_fixed_addresses + 256 - |
99 | (__end_of_permanent_fixed_addresses & 255), | 99 | (__end_of_permanent_fixed_addresses & 255), |
100 | FIX_BTMAP_BEGIN = FIX_BTMAP_END + NR_FIX_BTMAPS*FIX_BTMAPS_NESTING - 1, | 100 | FIX_BTMAP_BEGIN = FIX_BTMAP_END + NR_FIX_BTMAPS*FIX_BTMAPS_SLOTS - 1, |
101 | FIX_WP_TEST, | 101 | FIX_WP_TEST, |
102 | #ifdef CONFIG_ACPI | 102 | #ifdef CONFIG_ACPI |
103 | FIX_ACPI_BEGIN, | 103 | FIX_ACPI_BEGIN, |
@@ -120,4 +120,4 @@ extern void reserve_top_address(unsigned long reserve); | |||
120 | #define FIXADDR_BOOT_START (FIXADDR_TOP - __FIXADDR_BOOT_SIZE) | 120 | #define FIXADDR_BOOT_START (FIXADDR_TOP - __FIXADDR_BOOT_SIZE) |
121 | 121 | ||
122 | #endif /* !__ASSEMBLY__ */ | 122 | #endif /* !__ASSEMBLY__ */ |
123 | #endif | 123 | #endif /* ASM_X86__FIXMAP_32_H */ |
diff --git a/include/asm-x86/fixmap_64.h b/include/asm-x86/fixmap_64.h index 00f3d74a0524..dab4751d1307 100644 --- a/include/asm-x86/fixmap_64.h +++ b/include/asm-x86/fixmap_64.h | |||
@@ -8,8 +8,8 @@ | |||
8 | * Copyright (C) 1998 Ingo Molnar | 8 | * Copyright (C) 1998 Ingo Molnar |
9 | */ | 9 | */ |
10 | 10 | ||
11 | #ifndef _ASM_FIXMAP_64_H | 11 | #ifndef ASM_X86__FIXMAP_64_H |
12 | #define _ASM_FIXMAP_64_H | 12 | #define ASM_X86__FIXMAP_64_H |
13 | 13 | ||
14 | #include <linux/kernel.h> | 14 | #include <linux/kernel.h> |
15 | #include <asm/acpi.h> | 15 | #include <asm/acpi.h> |
@@ -49,6 +49,7 @@ enum fixed_addresses { | |||
49 | #ifdef CONFIG_PARAVIRT | 49 | #ifdef CONFIG_PARAVIRT |
50 | FIX_PARAVIRT_BOOTMAP, | 50 | FIX_PARAVIRT_BOOTMAP, |
51 | #endif | 51 | #endif |
52 | __end_of_permanent_fixed_addresses, | ||
52 | #ifdef CONFIG_ACPI | 53 | #ifdef CONFIG_ACPI |
53 | FIX_ACPI_BEGIN, | 54 | FIX_ACPI_BEGIN, |
54 | FIX_ACPI_END = FIX_ACPI_BEGIN + FIX_ACPI_PAGES - 1, | 55 | FIX_ACPI_END = FIX_ACPI_BEGIN + FIX_ACPI_PAGES - 1, |
@@ -56,19 +57,18 @@ enum fixed_addresses { | |||
56 | #ifdef CONFIG_PROVIDE_OHCI1394_DMA_INIT | 57 | #ifdef CONFIG_PROVIDE_OHCI1394_DMA_INIT |
57 | FIX_OHCI1394_BASE, | 58 | FIX_OHCI1394_BASE, |
58 | #endif | 59 | #endif |
59 | __end_of_permanent_fixed_addresses, | ||
60 | /* | 60 | /* |
61 | * 256 temporary boot-time mappings, used by early_ioremap(), | 61 | * 256 temporary boot-time mappings, used by early_ioremap(), |
62 | * before ioremap() is functional. | 62 | * before ioremap() is functional. |
63 | * | 63 | * |
64 | * We round it up to the next 512 pages boundary so that we | 64 | * We round it up to the next 256 pages boundary so that we |
65 | * can have a single pgd entry and a single pte table: | 65 | * can have a single pgd entry and a single pte table: |
66 | */ | 66 | */ |
67 | #define NR_FIX_BTMAPS 64 | 67 | #define NR_FIX_BTMAPS 64 |
68 | #define FIX_BTMAPS_NESTING 4 | 68 | #define FIX_BTMAPS_SLOTS 4 |
69 | FIX_BTMAP_END = __end_of_permanent_fixed_addresses + 512 - | 69 | FIX_BTMAP_END = __end_of_permanent_fixed_addresses + 256 - |
70 | (__end_of_permanent_fixed_addresses & 511), | 70 | (__end_of_permanent_fixed_addresses & 255), |
71 | FIX_BTMAP_BEGIN = FIX_BTMAP_END + NR_FIX_BTMAPS*FIX_BTMAPS_NESTING - 1, | 71 | FIX_BTMAP_BEGIN = FIX_BTMAP_END + NR_FIX_BTMAPS*FIX_BTMAPS_SLOTS - 1, |
72 | __end_of_fixed_addresses | 72 | __end_of_fixed_addresses |
73 | }; | 73 | }; |
74 | 74 | ||
@@ -80,4 +80,4 @@ enum fixed_addresses { | |||
80 | #define FIXADDR_USER_START ((unsigned long)VSYSCALL32_VSYSCALL) | 80 | #define FIXADDR_USER_START ((unsigned long)VSYSCALL32_VSYSCALL) |
81 | #define FIXADDR_USER_END (FIXADDR_USER_START + PAGE_SIZE) | 81 | #define FIXADDR_USER_END (FIXADDR_USER_START + PAGE_SIZE) |
82 | 82 | ||
83 | #endif | 83 | #endif /* ASM_X86__FIXMAP_64_H */ |
diff --git a/include/asm-x86/floppy.h b/include/asm-x86/floppy.h index dbe82a5c5eac..7d83a3a83e37 100644 --- a/include/asm-x86/floppy.h +++ b/include/asm-x86/floppy.h | |||
@@ -7,8 +7,8 @@ | |||
7 | * | 7 | * |
8 | * Copyright (C) 1995 | 8 | * Copyright (C) 1995 |
9 | */ | 9 | */ |
10 | #ifndef _ASM_X86_FLOPPY_H | 10 | #ifndef ASM_X86__FLOPPY_H |
11 | #define _ASM_X86_FLOPPY_H | 11 | #define ASM_X86__FLOPPY_H |
12 | 12 | ||
13 | #include <linux/vmalloc.h> | 13 | #include <linux/vmalloc.h> |
14 | 14 | ||
@@ -278,4 +278,4 @@ static int FDC2 = -1; | |||
278 | 278 | ||
279 | #define EXTRA_FLOPPY_PARAMS | 279 | #define EXTRA_FLOPPY_PARAMS |
280 | 280 | ||
281 | #endif /* _ASM_X86_FLOPPY_H */ | 281 | #endif /* ASM_X86__FLOPPY_H */ |
diff --git a/include/asm-x86/ftrace.h b/include/asm-x86/ftrace.h index 5c68b32ee1c8..be0e004ad148 100644 --- a/include/asm-x86/ftrace.h +++ b/include/asm-x86/ftrace.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_FTRACE | 1 | #ifndef ASM_X86__FTRACE_H |
2 | #define _ASM_X86_FTRACE | 2 | #define ASM_X86__FTRACE_H |
3 | 3 | ||
4 | #ifdef CONFIG_FTRACE | 4 | #ifdef CONFIG_FTRACE |
5 | #define MCOUNT_ADDR ((long)(mcount)) | 5 | #define MCOUNT_ADDR ((long)(mcount)) |
@@ -11,4 +11,4 @@ extern void mcount(void); | |||
11 | 11 | ||
12 | #endif /* CONFIG_FTRACE */ | 12 | #endif /* CONFIG_FTRACE */ |
13 | 13 | ||
14 | #endif /* _ASM_X86_FTRACE */ | 14 | #endif /* ASM_X86__FTRACE_H */ |
diff --git a/include/asm-x86/futex.h b/include/asm-x86/futex.h index e7a76b37b333..06b924ef6fa5 100644 --- a/include/asm-x86/futex.h +++ b/include/asm-x86/futex.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_FUTEX_H | 1 | #ifndef ASM_X86__FUTEX_H |
2 | #define _ASM_X86_FUTEX_H | 2 | #define ASM_X86__FUTEX_H |
3 | 3 | ||
4 | #ifdef __KERNEL__ | 4 | #ifdef __KERNEL__ |
5 | 5 | ||
@@ -25,7 +25,7 @@ | |||
25 | asm volatile("1:\tmovl %2, %0\n" \ | 25 | asm volatile("1:\tmovl %2, %0\n" \ |
26 | "\tmovl\t%0, %3\n" \ | 26 | "\tmovl\t%0, %3\n" \ |
27 | "\t" insn "\n" \ | 27 | "\t" insn "\n" \ |
28 | "2:\tlock; cmpxchgl %3, %2\n" \ | 28 | "2:\t" LOCK_PREFIX "cmpxchgl %3, %2\n" \ |
29 | "\tjnz\t1b\n" \ | 29 | "\tjnz\t1b\n" \ |
30 | "3:\t.section .fixup,\"ax\"\n" \ | 30 | "3:\t.section .fixup,\"ax\"\n" \ |
31 | "4:\tmov\t%5, %1\n" \ | 31 | "4:\tmov\t%5, %1\n" \ |
@@ -64,7 +64,7 @@ static inline int futex_atomic_op_inuser(int encoded_op, int __user *uaddr) | |||
64 | __futex_atomic_op1("xchgl %0, %2", ret, oldval, uaddr, oparg); | 64 | __futex_atomic_op1("xchgl %0, %2", ret, oldval, uaddr, oparg); |
65 | break; | 65 | break; |
66 | case FUTEX_OP_ADD: | 66 | case FUTEX_OP_ADD: |
67 | __futex_atomic_op1("lock; xaddl %0, %2", ret, oldval, | 67 | __futex_atomic_op1(LOCK_PREFIX "xaddl %0, %2", ret, oldval, |
68 | uaddr, oparg); | 68 | uaddr, oparg); |
69 | break; | 69 | break; |
70 | case FUTEX_OP_OR: | 70 | case FUTEX_OP_OR: |
@@ -122,7 +122,7 @@ static inline int futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, | |||
122 | if (!access_ok(VERIFY_WRITE, uaddr, sizeof(int))) | 122 | if (!access_ok(VERIFY_WRITE, uaddr, sizeof(int))) |
123 | return -EFAULT; | 123 | return -EFAULT; |
124 | 124 | ||
125 | asm volatile("1:\tlock; cmpxchgl %3, %1\n" | 125 | asm volatile("1:\t" LOCK_PREFIX "cmpxchgl %3, %1\n" |
126 | "2:\t.section .fixup, \"ax\"\n" | 126 | "2:\t.section .fixup, \"ax\"\n" |
127 | "3:\tmov %2, %0\n" | 127 | "3:\tmov %2, %0\n" |
128 | "\tjmp 2b\n" | 128 | "\tjmp 2b\n" |
@@ -137,4 +137,4 @@ static inline int futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, | |||
137 | } | 137 | } |
138 | 138 | ||
139 | #endif | 139 | #endif |
140 | #endif | 140 | #endif /* ASM_X86__FUTEX_H */ |
diff --git a/include/asm-x86/gart.h b/include/asm-x86/gart.h index 3f62a83887f3..605edb39ef9e 100644 --- a/include/asm-x86/gart.h +++ b/include/asm-x86/gart.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X8664_GART_H | 1 | #ifndef ASM_X86__GART_H |
2 | #define _ASM_X8664_GART_H 1 | 2 | #define ASM_X86__GART_H |
3 | 3 | ||
4 | #include <asm/e820.h> | 4 | #include <asm/e820.h> |
5 | 5 | ||
@@ -29,6 +29,8 @@ extern int fix_aperture; | |||
29 | #define AMD64_GARTCACHECTL 0x9c | 29 | #define AMD64_GARTCACHECTL 0x9c |
30 | #define AMD64_GARTEN (1<<0) | 30 | #define AMD64_GARTEN (1<<0) |
31 | 31 | ||
32 | extern int agp_amd64_init(void); | ||
33 | |||
32 | static inline void enable_gart_translation(struct pci_dev *dev, u64 addr) | 34 | static inline void enable_gart_translation(struct pci_dev *dev, u64 addr) |
33 | { | 35 | { |
34 | u32 tmp, ctl; | 36 | u32 tmp, ctl; |
@@ -52,15 +54,15 @@ static inline int aperture_valid(u64 aper_base, u32 aper_size, u32 min_size) | |||
52 | return 0; | 54 | return 0; |
53 | 55 | ||
54 | if (aper_base + aper_size > 0x100000000ULL) { | 56 | if (aper_base + aper_size > 0x100000000ULL) { |
55 | printk(KERN_ERR "Aperture beyond 4GB. Ignoring.\n"); | 57 | printk(KERN_INFO "Aperture beyond 4GB. Ignoring.\n"); |
56 | return 0; | 58 | return 0; |
57 | } | 59 | } |
58 | if (e820_any_mapped(aper_base, aper_base + aper_size, E820_RAM)) { | 60 | if (e820_any_mapped(aper_base, aper_base + aper_size, E820_RAM)) { |
59 | printk(KERN_ERR "Aperture pointing to e820 RAM. Ignoring.\n"); | 61 | printk(KERN_INFO "Aperture pointing to e820 RAM. Ignoring.\n"); |
60 | return 0; | 62 | return 0; |
61 | } | 63 | } |
62 | if (aper_size < min_size) { | 64 | if (aper_size < min_size) { |
63 | printk(KERN_ERR "Aperture too small (%d MB) than (%d MB)\n", | 65 | printk(KERN_INFO "Aperture too small (%d MB) than (%d MB)\n", |
64 | aper_size>>20, min_size>>20); | 66 | aper_size>>20, min_size>>20); |
65 | return 0; | 67 | return 0; |
66 | } | 68 | } |
@@ -68,4 +70,4 @@ static inline int aperture_valid(u64 aper_base, u32 aper_size, u32 min_size) | |||
68 | return 1; | 70 | return 1; |
69 | } | 71 | } |
70 | 72 | ||
71 | #endif | 73 | #endif /* ASM_X86__GART_H */ |
diff --git a/include/asm-x86/genapic_32.h b/include/asm-x86/genapic_32.h index 754d635f90ff..34280f027664 100644 --- a/include/asm-x86/genapic_32.h +++ b/include/asm-x86/genapic_32.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_GENAPIC_H | 1 | #ifndef ASM_X86__GENAPIC_32_H |
2 | #define _ASM_GENAPIC_H 1 | 2 | #define ASM_X86__GENAPIC_32_H |
3 | 3 | ||
4 | #include <asm/mpspec.h> | 4 | #include <asm/mpspec.h> |
5 | 5 | ||
@@ -121,4 +121,4 @@ enum uv_system_type {UV_NONE, UV_LEGACY_APIC, UV_X2APIC, UV_NON_UNIQUE_APIC}; | |||
121 | #define uv_system_init() do {} while (0) | 121 | #define uv_system_init() do {} while (0) |
122 | 122 | ||
123 | 123 | ||
124 | #endif | 124 | #endif /* ASM_X86__GENAPIC_32_H */ |
diff --git a/include/asm-x86/genapic_64.h b/include/asm-x86/genapic_64.h index a47d63129135..ed6a4886c082 100644 --- a/include/asm-x86/genapic_64.h +++ b/include/asm-x86/genapic_64.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_GENAPIC_H | 1 | #ifndef ASM_X86__GENAPIC_64_H |
2 | #define _ASM_GENAPIC_H 1 | 2 | #define ASM_X86__GENAPIC_64_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * Copyright 2004 James Cleverdon, IBM. | 5 | * Copyright 2004 James Cleverdon, IBM. |
@@ -14,6 +14,7 @@ | |||
14 | 14 | ||
15 | struct genapic { | 15 | struct genapic { |
16 | char *name; | 16 | char *name; |
17 | int (*acpi_madt_oem_check)(char *oem_id, char *oem_table_id); | ||
17 | u32 int_delivery_mode; | 18 | u32 int_delivery_mode; |
18 | u32 int_dest_mode; | 19 | u32 int_dest_mode; |
19 | int (*apic_id_registered)(void); | 20 | int (*apic_id_registered)(void); |
@@ -24,17 +25,24 @@ struct genapic { | |||
24 | void (*send_IPI_mask)(cpumask_t mask, int vector); | 25 | void (*send_IPI_mask)(cpumask_t mask, int vector); |
25 | void (*send_IPI_allbutself)(int vector); | 26 | void (*send_IPI_allbutself)(int vector); |
26 | void (*send_IPI_all)(int vector); | 27 | void (*send_IPI_all)(int vector); |
28 | void (*send_IPI_self)(int vector); | ||
27 | /* */ | 29 | /* */ |
28 | unsigned int (*cpu_mask_to_apicid)(cpumask_t cpumask); | 30 | unsigned int (*cpu_mask_to_apicid)(cpumask_t cpumask); |
29 | unsigned int (*phys_pkg_id)(int index_msb); | 31 | unsigned int (*phys_pkg_id)(int index_msb); |
32 | unsigned int (*get_apic_id)(unsigned long x); | ||
33 | unsigned long (*set_apic_id)(unsigned int id); | ||
34 | unsigned long apic_id_mask; | ||
30 | }; | 35 | }; |
31 | 36 | ||
32 | extern struct genapic *genapic; | 37 | extern struct genapic *genapic; |
33 | 38 | ||
34 | extern struct genapic apic_flat; | 39 | extern struct genapic apic_flat; |
35 | extern struct genapic apic_physflat; | 40 | extern struct genapic apic_physflat; |
41 | extern struct genapic apic_x2apic_cluster; | ||
42 | extern struct genapic apic_x2apic_phys; | ||
36 | extern int acpi_madt_oem_check(char *, char *); | 43 | extern int acpi_madt_oem_check(char *, char *); |
37 | 44 | ||
45 | extern void apic_send_IPI_self(int vector); | ||
38 | enum uv_system_type {UV_NONE, UV_LEGACY_APIC, UV_X2APIC, UV_NON_UNIQUE_APIC}; | 46 | enum uv_system_type {UV_NONE, UV_LEGACY_APIC, UV_X2APIC, UV_NON_UNIQUE_APIC}; |
39 | extern enum uv_system_type get_uv_system_type(void); | 47 | extern enum uv_system_type get_uv_system_type(void); |
40 | extern int is_uv_system(void); | 48 | extern int is_uv_system(void); |
@@ -47,4 +55,4 @@ extern int uv_wakeup_secondary(int phys_apicid, unsigned int start_rip); | |||
47 | 55 | ||
48 | extern void setup_apic_routing(void); | 56 | extern void setup_apic_routing(void); |
49 | 57 | ||
50 | #endif | 58 | #endif /* ASM_X86__GENAPIC_64_H */ |
diff --git a/include/asm-x86/geode.h b/include/asm-x86/geode.h index 2c1cda0b8a86..3f3444be2638 100644 --- a/include/asm-x86/geode.h +++ b/include/asm-x86/geode.h | |||
@@ -7,8 +7,8 @@ | |||
7 | * as published by the Free Software Foundation. | 7 | * as published by the Free Software Foundation. |
8 | */ | 8 | */ |
9 | 9 | ||
10 | #ifndef _ASM_GEODE_H_ | 10 | #ifndef ASM_X86__GEODE_H |
11 | #define _ASM_GEODE_H_ | 11 | #define ASM_X86__GEODE_H |
12 | 12 | ||
13 | #include <asm/processor.h> | 13 | #include <asm/processor.h> |
14 | #include <linux/io.h> | 14 | #include <linux/io.h> |
@@ -250,4 +250,4 @@ extern int __init mfgpt_timer_setup(void); | |||
250 | static inline int mfgpt_timer_setup(void) { return 0; } | 250 | static inline int mfgpt_timer_setup(void) { return 0; } |
251 | #endif | 251 | #endif |
252 | 252 | ||
253 | #endif | 253 | #endif /* ASM_X86__GEODE_H */ |
diff --git a/include/asm-x86/gpio.h b/include/asm-x86/gpio.h index c4c91b37c104..497fb980d962 100644 --- a/include/asm-x86/gpio.h +++ b/include/asm-x86/gpio.h | |||
@@ -53,4 +53,4 @@ static inline int irq_to_gpio(unsigned int irq) | |||
53 | 53 | ||
54 | #endif /* CONFIG_GPIOLIB */ | 54 | #endif /* CONFIG_GPIOLIB */ |
55 | 55 | ||
56 | #endif /* _ASM_I386_GPIO_H */ | 56 | #endif /* ASM_X86__GPIO_H */ |
diff --git a/include/asm-x86/hardirq_32.h b/include/asm-x86/hardirq_32.h index 4f85f0f4b563..700fe230d919 100644 --- a/include/asm-x86/hardirq_32.h +++ b/include/asm-x86/hardirq_32.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_HARDIRQ_H | 1 | #ifndef ASM_X86__HARDIRQ_32_H |
2 | #define __ASM_HARDIRQ_H | 2 | #define ASM_X86__HARDIRQ_32_H |
3 | 3 | ||
4 | #include <linux/threads.h> | 4 | #include <linux/threads.h> |
5 | #include <linux/irq.h> | 5 | #include <linux/irq.h> |
@@ -25,4 +25,4 @@ DECLARE_PER_CPU(irq_cpustat_t, irq_stat); | |||
25 | void ack_bad_irq(unsigned int irq); | 25 | void ack_bad_irq(unsigned int irq); |
26 | #include <linux/irq_cpustat.h> | 26 | #include <linux/irq_cpustat.h> |
27 | 27 | ||
28 | #endif /* __ASM_HARDIRQ_H */ | 28 | #endif /* ASM_X86__HARDIRQ_32_H */ |
diff --git a/include/asm-x86/hardirq_64.h b/include/asm-x86/hardirq_64.h index 95d5e090ed89..f8bd2919a8ce 100644 --- a/include/asm-x86/hardirq_64.h +++ b/include/asm-x86/hardirq_64.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_HARDIRQ_H | 1 | #ifndef ASM_X86__HARDIRQ_64_H |
2 | #define __ASM_HARDIRQ_H | 2 | #define ASM_X86__HARDIRQ_64_H |
3 | 3 | ||
4 | #include <linux/threads.h> | 4 | #include <linux/threads.h> |
5 | #include <linux/irq.h> | 5 | #include <linux/irq.h> |
@@ -20,4 +20,4 @@ | |||
20 | 20 | ||
21 | extern void ack_bad_irq(unsigned int irq); | 21 | extern void ack_bad_irq(unsigned int irq); |
22 | 22 | ||
23 | #endif /* __ASM_HARDIRQ_H */ | 23 | #endif /* ASM_X86__HARDIRQ_64_H */ |
diff --git a/include/asm-x86/highmem.h b/include/asm-x86/highmem.h index 4514b16cc723..bc3f6a280316 100644 --- a/include/asm-x86/highmem.h +++ b/include/asm-x86/highmem.h | |||
@@ -15,8 +15,8 @@ | |||
15 | * Copyright (C) 1999 Ingo Molnar <mingo@redhat.com> | 15 | * Copyright (C) 1999 Ingo Molnar <mingo@redhat.com> |
16 | */ | 16 | */ |
17 | 17 | ||
18 | #ifndef _ASM_HIGHMEM_H | 18 | #ifndef ASM_X86__HIGHMEM_H |
19 | #define _ASM_HIGHMEM_H | 19 | #define ASM_X86__HIGHMEM_H |
20 | 20 | ||
21 | #ifdef __KERNEL__ | 21 | #ifdef __KERNEL__ |
22 | 22 | ||
@@ -79,4 +79,4 @@ extern void add_highpages_with_active_regions(int nid, unsigned long start_pfn, | |||
79 | 79 | ||
80 | #endif /* __KERNEL__ */ | 80 | #endif /* __KERNEL__ */ |
81 | 81 | ||
82 | #endif /* _ASM_HIGHMEM_H */ | 82 | #endif /* ASM_X86__HIGHMEM_H */ |
diff --git a/include/asm-x86/hpet.h b/include/asm-x86/hpet.h index 82f1ac641bd7..cbbbb6d4dd32 100644 --- a/include/asm-x86/hpet.h +++ b/include/asm-x86/hpet.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef ASM_X86_HPET_H | 1 | #ifndef ASM_X86__HPET_H |
2 | #define ASM_X86_HPET_H | 2 | #define ASM_X86__HPET_H |
3 | 3 | ||
4 | #ifdef CONFIG_HPET_TIMER | 4 | #ifdef CONFIG_HPET_TIMER |
5 | 5 | ||
@@ -90,4 +90,4 @@ static inline int is_hpet_enabled(void) { return 0; } | |||
90 | #define hpet_readl(a) 0 | 90 | #define hpet_readl(a) 0 |
91 | 91 | ||
92 | #endif | 92 | #endif |
93 | #endif /* ASM_X86_HPET_H */ | 93 | #endif /* ASM_X86__HPET_H */ |
diff --git a/include/asm-x86/hugetlb.h b/include/asm-x86/hugetlb.h index 439a9acc132d..0b7ec5dc0884 100644 --- a/include/asm-x86/hugetlb.h +++ b/include/asm-x86/hugetlb.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_HUGETLB_H | 1 | #ifndef ASM_X86__HUGETLB_H |
2 | #define _ASM_X86_HUGETLB_H | 2 | #define ASM_X86__HUGETLB_H |
3 | 3 | ||
4 | #include <asm/page.h> | 4 | #include <asm/page.h> |
5 | 5 | ||
@@ -90,4 +90,4 @@ static inline void arch_release_hugepage(struct page *page) | |||
90 | { | 90 | { |
91 | } | 91 | } |
92 | 92 | ||
93 | #endif /* _ASM_X86_HUGETLB_H */ | 93 | #endif /* ASM_X86__HUGETLB_H */ |
diff --git a/include/asm-x86/hw_irq.h b/include/asm-x86/hw_irq.h index edd0b95f14d0..50f6e0316b50 100644 --- a/include/asm-x86/hw_irq.h +++ b/include/asm-x86/hw_irq.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_HW_IRQ_H | 1 | #ifndef ASM_X86__HW_IRQ_H |
2 | #define _ASM_HW_IRQ_H | 2 | #define ASM_X86__HW_IRQ_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * (C) 1992, 1993 Linus Torvalds, (C) 1997 Ingo Molnar | 5 | * (C) 1992, 1993 Linus Torvalds, (C) 1997 Ingo Molnar |
@@ -64,7 +64,6 @@ extern unsigned long io_apic_irqs; | |||
64 | extern void init_VISWS_APIC_irqs(void); | 64 | extern void init_VISWS_APIC_irqs(void); |
65 | extern void setup_IO_APIC(void); | 65 | extern void setup_IO_APIC(void); |
66 | extern void disable_IO_APIC(void); | 66 | extern void disable_IO_APIC(void); |
67 | extern void print_IO_APIC(void); | ||
68 | extern int IO_APIC_get_PCI_irq_vector(int bus, int slot, int fn); | 67 | extern int IO_APIC_get_PCI_irq_vector(int bus, int slot, int fn); |
69 | extern void setup_ioapic_dest(void); | 68 | extern void setup_ioapic_dest(void); |
70 | 69 | ||
@@ -73,7 +72,9 @@ extern void enable_IO_APIC(void); | |||
73 | #endif | 72 | #endif |
74 | 73 | ||
75 | /* IPI functions */ | 74 | /* IPI functions */ |
75 | #ifdef CONFIG_X86_32 | ||
76 | extern void send_IPI_self(int vector); | 76 | extern void send_IPI_self(int vector); |
77 | #endif | ||
77 | extern void send_IPI(int dest, int vector); | 78 | extern void send_IPI(int dest, int vector); |
78 | 79 | ||
79 | /* Statistics */ | 80 | /* Statistics */ |
@@ -93,6 +94,26 @@ extern asmlinkage void qic_reschedule_interrupt(void); | |||
93 | extern asmlinkage void qic_enable_irq_interrupt(void); | 94 | extern asmlinkage void qic_enable_irq_interrupt(void); |
94 | extern asmlinkage void qic_call_function_interrupt(void); | 95 | extern asmlinkage void qic_call_function_interrupt(void); |
95 | 96 | ||
97 | /* SMP */ | ||
98 | extern void smp_apic_timer_interrupt(struct pt_regs *); | ||
99 | #ifdef CONFIG_X86_32 | ||
100 | extern void smp_spurious_interrupt(struct pt_regs *); | ||
101 | extern void smp_error_interrupt(struct pt_regs *); | ||
102 | #else | ||
103 | extern asmlinkage void smp_spurious_interrupt(void); | ||
104 | extern asmlinkage void smp_error_interrupt(void); | ||
105 | #endif | ||
106 | #ifdef CONFIG_X86_SMP | ||
107 | extern void smp_reschedule_interrupt(struct pt_regs *); | ||
108 | extern void smp_call_function_interrupt(struct pt_regs *); | ||
109 | extern void smp_call_function_single_interrupt(struct pt_regs *); | ||
110 | #ifdef CONFIG_X86_32 | ||
111 | extern void smp_invalidate_interrupt(struct pt_regs *); | ||
112 | #else | ||
113 | extern asmlinkage void smp_invalidate_interrupt(struct pt_regs *); | ||
114 | #endif | ||
115 | #endif | ||
116 | |||
96 | #ifdef CONFIG_X86_32 | 117 | #ifdef CONFIG_X86_32 |
97 | extern void (*const interrupt[NR_IRQS])(void); | 118 | extern void (*const interrupt[NR_IRQS])(void); |
98 | #else | 119 | #else |
@@ -112,4 +133,4 @@ static inline void __setup_vector_irq(int cpu) {} | |||
112 | 133 | ||
113 | #endif /* !ASSEMBLY_ */ | 134 | #endif /* !ASSEMBLY_ */ |
114 | 135 | ||
115 | #endif | 136 | #endif /* ASM_X86__HW_IRQ_H */ |
diff --git a/include/asm-x86/hypertransport.h b/include/asm-x86/hypertransport.h index d2bbd238b3e1..cc011a3bc1c2 100644 --- a/include/asm-x86/hypertransport.h +++ b/include/asm-x86/hypertransport.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef ASM_HYPERTRANSPORT_H | 1 | #ifndef ASM_X86__HYPERTRANSPORT_H |
2 | #define ASM_HYPERTRANSPORT_H | 2 | #define ASM_X86__HYPERTRANSPORT_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * Constants for x86 Hypertransport Interrupts. | 5 | * Constants for x86 Hypertransport Interrupts. |
@@ -42,4 +42,4 @@ | |||
42 | #define HT_IRQ_HIGH_DEST_ID(v) \ | 42 | #define HT_IRQ_HIGH_DEST_ID(v) \ |
43 | ((((v) >> 8) << HT_IRQ_HIGH_DEST_ID_SHIFT) & HT_IRQ_HIGH_DEST_ID_MASK) | 43 | ((((v) >> 8) << HT_IRQ_HIGH_DEST_ID_SHIFT) & HT_IRQ_HIGH_DEST_ID_MASK) |
44 | 44 | ||
45 | #endif /* ASM_HYPERTRANSPORT_H */ | 45 | #endif /* ASM_X86__HYPERTRANSPORT_H */ |
diff --git a/include/asm-x86/i387.h b/include/asm-x86/i387.h index 56d00e31aec0..9ba862a4eac0 100644 --- a/include/asm-x86/i387.h +++ b/include/asm-x86/i387.h | |||
@@ -7,8 +7,8 @@ | |||
7 | * x86-64 work by Andi Kleen 2002 | 7 | * x86-64 work by Andi Kleen 2002 |
8 | */ | 8 | */ |
9 | 9 | ||
10 | #ifndef _ASM_X86_I387_H | 10 | #ifndef ASM_X86__I387_H |
11 | #define _ASM_X86_I387_H | 11 | #define ASM_X86__I387_H |
12 | 12 | ||
13 | #include <linux/sched.h> | 13 | #include <linux/sched.h> |
14 | #include <linux/kernel_stat.h> | 14 | #include <linux/kernel_stat.h> |
@@ -19,23 +19,32 @@ | |||
19 | #include <asm/sigcontext.h> | 19 | #include <asm/sigcontext.h> |
20 | #include <asm/user.h> | 20 | #include <asm/user.h> |
21 | #include <asm/uaccess.h> | 21 | #include <asm/uaccess.h> |
22 | #include <asm/xsave.h> | ||
22 | 23 | ||
24 | extern unsigned int sig_xstate_size; | ||
23 | extern void fpu_init(void); | 25 | extern void fpu_init(void); |
24 | extern void mxcsr_feature_mask_init(void); | 26 | extern void mxcsr_feature_mask_init(void); |
25 | extern int init_fpu(struct task_struct *child); | 27 | extern int init_fpu(struct task_struct *child); |
26 | extern asmlinkage void math_state_restore(void); | 28 | extern asmlinkage void math_state_restore(void); |
27 | extern void init_thread_xstate(void); | 29 | extern void init_thread_xstate(void); |
30 | extern int dump_fpu(struct pt_regs *, struct user_i387_struct *); | ||
28 | 31 | ||
29 | extern user_regset_active_fn fpregs_active, xfpregs_active; | 32 | extern user_regset_active_fn fpregs_active, xfpregs_active; |
30 | extern user_regset_get_fn fpregs_get, xfpregs_get, fpregs_soft_get; | 33 | extern user_regset_get_fn fpregs_get, xfpregs_get, fpregs_soft_get; |
31 | extern user_regset_set_fn fpregs_set, xfpregs_set, fpregs_soft_set; | 34 | extern user_regset_set_fn fpregs_set, xfpregs_set, fpregs_soft_set; |
32 | 35 | ||
36 | extern struct _fpx_sw_bytes fx_sw_reserved; | ||
33 | #ifdef CONFIG_IA32_EMULATION | 37 | #ifdef CONFIG_IA32_EMULATION |
38 | extern unsigned int sig_xstate_ia32_size; | ||
39 | extern struct _fpx_sw_bytes fx_sw_reserved_ia32; | ||
34 | struct _fpstate_ia32; | 40 | struct _fpstate_ia32; |
35 | extern int save_i387_ia32(struct _fpstate_ia32 __user *buf); | 41 | struct _xstate_ia32; |
36 | extern int restore_i387_ia32(struct _fpstate_ia32 __user *buf); | 42 | extern int save_i387_xstate_ia32(void __user *buf); |
43 | extern int restore_i387_xstate_ia32(void __user *buf); | ||
37 | #endif | 44 | #endif |
38 | 45 | ||
46 | #define X87_FSW_ES (1 << 7) /* Exception Summary */ | ||
47 | |||
39 | #ifdef CONFIG_X86_64 | 48 | #ifdef CONFIG_X86_64 |
40 | 49 | ||
41 | /* Ignore delayed exceptions from user space */ | 50 | /* Ignore delayed exceptions from user space */ |
@@ -46,7 +55,7 @@ static inline void tolerant_fwait(void) | |||
46 | _ASM_EXTABLE(1b, 2b)); | 55 | _ASM_EXTABLE(1b, 2b)); |
47 | } | 56 | } |
48 | 57 | ||
49 | static inline int restore_fpu_checking(struct i387_fxsave_struct *fx) | 58 | static inline int fxrstor_checking(struct i387_fxsave_struct *fx) |
50 | { | 59 | { |
51 | int err; | 60 | int err; |
52 | 61 | ||
@@ -66,15 +75,31 @@ static inline int restore_fpu_checking(struct i387_fxsave_struct *fx) | |||
66 | return err; | 75 | return err; |
67 | } | 76 | } |
68 | 77 | ||
69 | #define X87_FSW_ES (1 << 7) /* Exception Summary */ | 78 | static inline int restore_fpu_checking(struct task_struct *tsk) |
79 | { | ||
80 | if (task_thread_info(tsk)->status & TS_XSAVE) | ||
81 | return xrstor_checking(&tsk->thread.xstate->xsave); | ||
82 | else | ||
83 | return fxrstor_checking(&tsk->thread.xstate->fxsave); | ||
84 | } | ||
70 | 85 | ||
71 | /* AMD CPUs don't save/restore FDP/FIP/FOP unless an exception | 86 | /* AMD CPUs don't save/restore FDP/FIP/FOP unless an exception |
72 | is pending. Clear the x87 state here by setting it to fixed | 87 | is pending. Clear the x87 state here by setting it to fixed |
73 | values. The kernel data segment can be sometimes 0 and sometimes | 88 | values. The kernel data segment can be sometimes 0 and sometimes |
74 | new user value. Both should be ok. | 89 | new user value. Both should be ok. |
75 | Use the PDA as safe address because it should be already in L1. */ | 90 | Use the PDA as safe address because it should be already in L1. */ |
76 | static inline void clear_fpu_state(struct i387_fxsave_struct *fx) | 91 | static inline void clear_fpu_state(struct task_struct *tsk) |
77 | { | 92 | { |
93 | struct xsave_struct *xstate = &tsk->thread.xstate->xsave; | ||
94 | struct i387_fxsave_struct *fx = &tsk->thread.xstate->fxsave; | ||
95 | |||
96 | /* | ||
97 | * xsave header may indicate the init state of the FP. | ||
98 | */ | ||
99 | if ((task_thread_info(tsk)->status & TS_XSAVE) && | ||
100 | !(xstate->xsave_hdr.xstate_bv & XSTATE_FP)) | ||
101 | return; | ||
102 | |||
78 | if (unlikely(fx->swd & X87_FSW_ES)) | 103 | if (unlikely(fx->swd & X87_FSW_ES)) |
79 | asm volatile("fnclex"); | 104 | asm volatile("fnclex"); |
80 | alternative_input(ASM_NOP8 ASM_NOP2, | 105 | alternative_input(ASM_NOP8 ASM_NOP2, |
@@ -83,7 +108,7 @@ static inline void clear_fpu_state(struct i387_fxsave_struct *fx) | |||
83 | X86_FEATURE_FXSAVE_LEAK); | 108 | X86_FEATURE_FXSAVE_LEAK); |
84 | } | 109 | } |
85 | 110 | ||
86 | static inline int save_i387_checking(struct i387_fxsave_struct __user *fx) | 111 | static inline int fxsave_user(struct i387_fxsave_struct __user *fx) |
87 | { | 112 | { |
88 | int err; | 113 | int err; |
89 | 114 | ||
@@ -107,7 +132,7 @@ static inline int save_i387_checking(struct i387_fxsave_struct __user *fx) | |||
107 | return err; | 132 | return err; |
108 | } | 133 | } |
109 | 134 | ||
110 | static inline void __save_init_fpu(struct task_struct *tsk) | 135 | static inline void fxsave(struct task_struct *tsk) |
111 | { | 136 | { |
112 | /* Using "rex64; fxsave %0" is broken because, if the memory operand | 137 | /* Using "rex64; fxsave %0" is broken because, if the memory operand |
113 | uses any extended registers for addressing, a second REX prefix | 138 | uses any extended registers for addressing, a second REX prefix |
@@ -132,7 +157,16 @@ static inline void __save_init_fpu(struct task_struct *tsk) | |||
132 | : "=m" (tsk->thread.xstate->fxsave) | 157 | : "=m" (tsk->thread.xstate->fxsave) |
133 | : "cdaSDb" (&tsk->thread.xstate->fxsave)); | 158 | : "cdaSDb" (&tsk->thread.xstate->fxsave)); |
134 | #endif | 159 | #endif |
135 | clear_fpu_state(&tsk->thread.xstate->fxsave); | 160 | } |
161 | |||
162 | static inline void __save_init_fpu(struct task_struct *tsk) | ||
163 | { | ||
164 | if (task_thread_info(tsk)->status & TS_XSAVE) | ||
165 | xsave(tsk); | ||
166 | else | ||
167 | fxsave(tsk); | ||
168 | |||
169 | clear_fpu_state(tsk); | ||
136 | task_thread_info(tsk)->status &= ~TS_USEDFPU; | 170 | task_thread_info(tsk)->status &= ~TS_USEDFPU; |
137 | } | 171 | } |
138 | 172 | ||
@@ -147,6 +181,10 @@ static inline void tolerant_fwait(void) | |||
147 | 181 | ||
148 | static inline void restore_fpu(struct task_struct *tsk) | 182 | static inline void restore_fpu(struct task_struct *tsk) |
149 | { | 183 | { |
184 | if (task_thread_info(tsk)->status & TS_XSAVE) { | ||
185 | xrstor_checking(&tsk->thread.xstate->xsave); | ||
186 | return; | ||
187 | } | ||
150 | /* | 188 | /* |
151 | * The "nop" is needed to make the instructions the same | 189 | * The "nop" is needed to make the instructions the same |
152 | * length. | 190 | * length. |
@@ -172,6 +210,27 @@ static inline void restore_fpu(struct task_struct *tsk) | |||
172 | */ | 210 | */ |
173 | static inline void __save_init_fpu(struct task_struct *tsk) | 211 | static inline void __save_init_fpu(struct task_struct *tsk) |
174 | { | 212 | { |
213 | if (task_thread_info(tsk)->status & TS_XSAVE) { | ||
214 | struct xsave_struct *xstate = &tsk->thread.xstate->xsave; | ||
215 | struct i387_fxsave_struct *fx = &tsk->thread.xstate->fxsave; | ||
216 | |||
217 | xsave(tsk); | ||
218 | |||
219 | /* | ||
220 | * xsave header may indicate the init state of the FP. | ||
221 | */ | ||
222 | if (!(xstate->xsave_hdr.xstate_bv & XSTATE_FP)) | ||
223 | goto end; | ||
224 | |||
225 | if (unlikely(fx->swd & X87_FSW_ES)) | ||
226 | asm volatile("fnclex"); | ||
227 | |||
228 | /* | ||
229 | * we can do a simple return here or be paranoid :) | ||
230 | */ | ||
231 | goto clear_state; | ||
232 | } | ||
233 | |||
175 | /* Use more nops than strictly needed in case the compiler | 234 | /* Use more nops than strictly needed in case the compiler |
176 | varies code */ | 235 | varies code */ |
177 | alternative_input( | 236 | alternative_input( |
@@ -181,6 +240,7 @@ static inline void __save_init_fpu(struct task_struct *tsk) | |||
181 | X86_FEATURE_FXSR, | 240 | X86_FEATURE_FXSR, |
182 | [fx] "m" (tsk->thread.xstate->fxsave), | 241 | [fx] "m" (tsk->thread.xstate->fxsave), |
183 | [fsw] "m" (tsk->thread.xstate->fxsave.swd) : "memory"); | 242 | [fsw] "m" (tsk->thread.xstate->fxsave.swd) : "memory"); |
243 | clear_state: | ||
184 | /* AMD K7/K8 CPUs don't save/restore FDP/FIP/FOP unless an exception | 244 | /* AMD K7/K8 CPUs don't save/restore FDP/FIP/FOP unless an exception |
185 | is pending. Clear the x87 state here by setting it to fixed | 245 | is pending. Clear the x87 state here by setting it to fixed |
186 | values. safe_address is a random variable that should be in L1 */ | 246 | values. safe_address is a random variable that should be in L1 */ |
@@ -190,16 +250,17 @@ static inline void __save_init_fpu(struct task_struct *tsk) | |||
190 | "fildl %[addr]", /* set F?P to defined value */ | 250 | "fildl %[addr]", /* set F?P to defined value */ |
191 | X86_FEATURE_FXSAVE_LEAK, | 251 | X86_FEATURE_FXSAVE_LEAK, |
192 | [addr] "m" (safe_address)); | 252 | [addr] "m" (safe_address)); |
253 | end: | ||
193 | task_thread_info(tsk)->status &= ~TS_USEDFPU; | 254 | task_thread_info(tsk)->status &= ~TS_USEDFPU; |
194 | } | 255 | } |
195 | 256 | ||
257 | #endif /* CONFIG_X86_64 */ | ||
258 | |||
196 | /* | 259 | /* |
197 | * Signal frame handlers... | 260 | * Signal frame handlers... |
198 | */ | 261 | */ |
199 | extern int save_i387(struct _fpstate __user *buf); | 262 | extern int save_i387_xstate(void __user *buf); |
200 | extern int restore_i387(struct _fpstate __user *buf); | 263 | extern int restore_i387_xstate(void __user *buf); |
201 | |||
202 | #endif /* CONFIG_X86_64 */ | ||
203 | 264 | ||
204 | static inline void __unlazy_fpu(struct task_struct *tsk) | 265 | static inline void __unlazy_fpu(struct task_struct *tsk) |
205 | { | 266 | { |
@@ -336,4 +397,4 @@ static inline unsigned short get_fpu_mxcsr(struct task_struct *tsk) | |||
336 | } | 397 | } |
337 | } | 398 | } |
338 | 399 | ||
339 | #endif /* _ASM_X86_I387_H */ | 400 | #endif /* ASM_X86__I387_H */ |
diff --git a/include/asm-x86/i8253.h b/include/asm-x86/i8253.h index b51c0487fc41..15a5b530044e 100644 --- a/include/asm-x86/i8253.h +++ b/include/asm-x86/i8253.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_I8253_H__ | 1 | #ifndef ASM_X86__I8253_H |
2 | #define __ASM_I8253_H__ | 2 | #define ASM_X86__I8253_H |
3 | 3 | ||
4 | /* i8253A PIT registers */ | 4 | /* i8253A PIT registers */ |
5 | #define PIT_MODE 0x43 | 5 | #define PIT_MODE 0x43 |
@@ -15,4 +15,4 @@ extern void setup_pit_timer(void); | |||
15 | #define inb_pit inb_p | 15 | #define inb_pit inb_p |
16 | #define outb_pit outb_p | 16 | #define outb_pit outb_p |
17 | 17 | ||
18 | #endif /* __ASM_I8253_H__ */ | 18 | #endif /* ASM_X86__I8253_H */ |
diff --git a/include/asm-x86/i8259.h b/include/asm-x86/i8259.h index 2f98df91f1f2..23c1b3baaecd 100644 --- a/include/asm-x86/i8259.h +++ b/include/asm-x86/i8259.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_I8259_H__ | 1 | #ifndef ASM_X86__I8259_H |
2 | #define __ASM_I8259_H__ | 2 | #define ASM_X86__I8259_H |
3 | 3 | ||
4 | #include <linux/delay.h> | 4 | #include <linux/delay.h> |
5 | 5 | ||
@@ -57,4 +57,7 @@ static inline void outb_pic(unsigned char value, unsigned int port) | |||
57 | 57 | ||
58 | extern struct irq_chip i8259A_chip; | 58 | extern struct irq_chip i8259A_chip; |
59 | 59 | ||
60 | #endif /* __ASM_I8259_H__ */ | 60 | extern void mask_8259A(void); |
61 | extern void unmask_8259A(void); | ||
62 | |||
63 | #endif /* ASM_X86__I8259_H */ | ||
diff --git a/include/asm-x86/ia32.h b/include/asm-x86/ia32.h index 55d3abe5276f..f932f7ad51dd 100644 --- a/include/asm-x86/ia32.h +++ b/include/asm-x86/ia32.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_64_IA32_H | 1 | #ifndef ASM_X86__IA32_H |
2 | #define _ASM_X86_64_IA32_H | 2 | #define ASM_X86__IA32_H |
3 | 3 | ||
4 | 4 | ||
5 | #ifdef CONFIG_IA32_EMULATION | 5 | #ifdef CONFIG_IA32_EMULATION |
@@ -167,4 +167,4 @@ extern void ia32_pick_mmap_layout(struct mm_struct *mm); | |||
167 | 167 | ||
168 | #endif /* !CONFIG_IA32_SUPPORT */ | 168 | #endif /* !CONFIG_IA32_SUPPORT */ |
169 | 169 | ||
170 | #endif | 170 | #endif /* ASM_X86__IA32_H */ |
diff --git a/include/asm-x86/ia32_unistd.h b/include/asm-x86/ia32_unistd.h index 61cea9e7c5c1..dbd887d8a5a5 100644 --- a/include/asm-x86/ia32_unistd.h +++ b/include/asm-x86/ia32_unistd.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_64_IA32_UNISTD_H_ | 1 | #ifndef ASM_X86__IA32_UNISTD_H |
2 | #define _ASM_X86_64_IA32_UNISTD_H_ | 2 | #define ASM_X86__IA32_UNISTD_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * This file contains the system call numbers of the ia32 port, | 5 | * This file contains the system call numbers of the ia32 port, |
@@ -15,4 +15,4 @@ | |||
15 | #define __NR_ia32_sigreturn 119 | 15 | #define __NR_ia32_sigreturn 119 |
16 | #define __NR_ia32_rt_sigreturn 173 | 16 | #define __NR_ia32_rt_sigreturn 173 |
17 | 17 | ||
18 | #endif /* _ASM_X86_64_IA32_UNISTD_H_ */ | 18 | #endif /* ASM_X86__IA32_UNISTD_H */ |
diff --git a/include/asm-x86/idle.h b/include/asm-x86/idle.h index d240e5b30a45..baa3f783d27d 100644 --- a/include/asm-x86/idle.h +++ b/include/asm-x86/idle.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_64_IDLE_H | 1 | #ifndef ASM_X86__IDLE_H |
2 | #define _ASM_X86_64_IDLE_H 1 | 2 | #define ASM_X86__IDLE_H |
3 | 3 | ||
4 | #define IDLE_START 1 | 4 | #define IDLE_START 1 |
5 | #define IDLE_END 2 | 5 | #define IDLE_END 2 |
@@ -10,4 +10,6 @@ void idle_notifier_register(struct notifier_block *n); | |||
10 | void enter_idle(void); | 10 | void enter_idle(void); |
11 | void exit_idle(void); | 11 | void exit_idle(void); |
12 | 12 | ||
13 | #endif | 13 | void c1e_remove_cpu(int cpu); |
14 | |||
15 | #endif /* ASM_X86__IDLE_H */ | ||
diff --git a/include/asm-x86/intel_arch_perfmon.h b/include/asm-x86/intel_arch_perfmon.h index fa0fd068bc2e..07c03c6c9a16 100644 --- a/include/asm-x86/intel_arch_perfmon.h +++ b/include/asm-x86/intel_arch_perfmon.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_INTEL_ARCH_PERFMON_H | 1 | #ifndef ASM_X86__INTEL_ARCH_PERFMON_H |
2 | #define _ASM_X86_INTEL_ARCH_PERFMON_H | 2 | #define ASM_X86__INTEL_ARCH_PERFMON_H |
3 | 3 | ||
4 | #define MSR_ARCH_PERFMON_PERFCTR0 0xc1 | 4 | #define MSR_ARCH_PERFMON_PERFCTR0 0xc1 |
5 | #define MSR_ARCH_PERFMON_PERFCTR1 0xc2 | 5 | #define MSR_ARCH_PERFMON_PERFCTR1 0xc2 |
@@ -28,4 +28,4 @@ union cpuid10_eax { | |||
28 | unsigned int full; | 28 | unsigned int full; |
29 | }; | 29 | }; |
30 | 30 | ||
31 | #endif /* _ASM_X86_INTEL_ARCH_PERFMON_H */ | 31 | #endif /* ASM_X86__INTEL_ARCH_PERFMON_H */ |
diff --git a/include/asm-x86/io.h b/include/asm-x86/io.h index 0f954dc89cb3..a233f835e0b5 100644 --- a/include/asm-x86/io.h +++ b/include/asm-x86/io.h | |||
@@ -1,24 +1,10 @@ | |||
1 | #ifndef _ASM_X86_IO_H | 1 | #ifndef ASM_X86__IO_H |
2 | #define _ASM_X86_IO_H | 2 | #define ASM_X86__IO_H |
3 | 3 | ||
4 | #define ARCH_HAS_IOREMAP_WC | 4 | #define ARCH_HAS_IOREMAP_WC |
5 | 5 | ||
6 | #include <linux/compiler.h> | 6 | #include <linux/compiler.h> |
7 | 7 | ||
8 | /* | ||
9 | * early_ioremap() and early_iounmap() are for temporary early boot-time | ||
10 | * mappings, before the real ioremap() is functional. | ||
11 | * A boot-time mapping is currently limited to at most 16 pages. | ||
12 | */ | ||
13 | #ifndef __ASSEMBLY__ | ||
14 | extern void early_ioremap_init(void); | ||
15 | extern void early_ioremap_clear(void); | ||
16 | extern void early_ioremap_reset(void); | ||
17 | extern void *early_ioremap(unsigned long offset, unsigned long size); | ||
18 | extern void early_iounmap(void *addr, unsigned long size); | ||
19 | extern void __iomem *fix_ioremap(unsigned idx, unsigned long phys); | ||
20 | #endif | ||
21 | |||
22 | #define build_mmio_read(name, size, type, reg, barrier) \ | 8 | #define build_mmio_read(name, size, type, reg, barrier) \ |
23 | static inline type name(const volatile void __iomem *addr) \ | 9 | static inline type name(const volatile void __iomem *addr) \ |
24 | { type ret; asm volatile("mov" size " %1,%0":reg (ret) \ | 10 | { type ret; asm volatile("mov" size " %1,%0":reg (ret) \ |
@@ -73,6 +59,8 @@ build_mmio_write(__writeq, "q", unsigned long, "r", ) | |||
73 | #define writeq writeq | 59 | #define writeq writeq |
74 | #endif | 60 | #endif |
75 | 61 | ||
62 | extern int iommu_bio_merge; | ||
63 | |||
76 | #ifdef CONFIG_X86_32 | 64 | #ifdef CONFIG_X86_32 |
77 | # include "io_32.h" | 65 | # include "io_32.h" |
78 | #else | 66 | #else |
@@ -95,8 +83,9 @@ extern void early_ioremap_init(void); | |||
95 | extern void early_ioremap_clear(void); | 83 | extern void early_ioremap_clear(void); |
96 | extern void early_ioremap_reset(void); | 84 | extern void early_ioremap_reset(void); |
97 | extern void *early_ioremap(unsigned long offset, unsigned long size); | 85 | extern void *early_ioremap(unsigned long offset, unsigned long size); |
86 | extern void *early_memremap(unsigned long offset, unsigned long size); | ||
98 | extern void early_iounmap(void *addr, unsigned long size); | 87 | extern void early_iounmap(void *addr, unsigned long size); |
99 | extern void __iomem *fix_ioremap(unsigned idx, unsigned long phys); | 88 | extern void __iomem *fix_ioremap(unsigned idx, unsigned long phys); |
100 | 89 | ||
101 | 90 | ||
102 | #endif /* _ASM_X86_IO_H */ | 91 | #endif /* ASM_X86__IO_H */ |
diff --git a/include/asm-x86/io_32.h b/include/asm-x86/io_32.h index e876d89ac156..4f7d878bda18 100644 --- a/include/asm-x86/io_32.h +++ b/include/asm-x86/io_32.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_IO_H | 1 | #ifndef ASM_X86__IO_32_H |
2 | #define _ASM_IO_H | 2 | #define ASM_X86__IO_32_H |
3 | 3 | ||
4 | #include <linux/string.h> | 4 | #include <linux/string.h> |
5 | #include <linux/compiler.h> | 5 | #include <linux/compiler.h> |
@@ -281,4 +281,4 @@ BUILDIO(b, b, char) | |||
281 | BUILDIO(w, w, short) | 281 | BUILDIO(w, w, short) |
282 | BUILDIO(l, , int) | 282 | BUILDIO(l, , int) |
283 | 283 | ||
284 | #endif | 284 | #endif /* ASM_X86__IO_32_H */ |
diff --git a/include/asm-x86/io_64.h b/include/asm-x86/io_64.h index 22995c5c5adc..ee6e086b7dfe 100644 --- a/include/asm-x86/io_64.h +++ b/include/asm-x86/io_64.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_IO_H | 1 | #ifndef ASM_X86__IO_64_H |
2 | #define _ASM_IO_H | 2 | #define ASM_X86__IO_64_H |
3 | 3 | ||
4 | 4 | ||
5 | /* | 5 | /* |
@@ -165,9 +165,6 @@ static inline void *phys_to_virt(unsigned long address) | |||
165 | 165 | ||
166 | #include <asm-generic/iomap.h> | 166 | #include <asm-generic/iomap.h> |
167 | 167 | ||
168 | extern void *early_ioremap(unsigned long addr, unsigned long size); | ||
169 | extern void early_iounmap(void *addr, unsigned long size); | ||
170 | |||
171 | /* | 168 | /* |
172 | * This one maps high address device memory and turns off caching for that area. | 169 | * This one maps high address device memory and turns off caching for that area. |
173 | * it's useful if some control registers are in such an area and write combining | 170 | * it's useful if some control registers are in such an area and write combining |
@@ -235,7 +232,6 @@ void memset_io(volatile void __iomem *a, int b, size_t c); | |||
235 | 232 | ||
236 | #define flush_write_buffers() | 233 | #define flush_write_buffers() |
237 | 234 | ||
238 | extern int iommu_bio_merge; | ||
239 | #define BIO_VMERGE_BOUNDARY iommu_bio_merge | 235 | #define BIO_VMERGE_BOUNDARY iommu_bio_merge |
240 | 236 | ||
241 | /* | 237 | /* |
@@ -245,4 +241,4 @@ extern int iommu_bio_merge; | |||
245 | 241 | ||
246 | #endif /* __KERNEL__ */ | 242 | #endif /* __KERNEL__ */ |
247 | 243 | ||
248 | #endif | 244 | #endif /* ASM_X86__IO_64_H */ |
diff --git a/include/asm-x86/io_apic.h b/include/asm-x86/io_apic.h index 14f82bbcb5fd..8ec68a50cf10 100644 --- a/include/asm-x86/io_apic.h +++ b/include/asm-x86/io_apic.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_IO_APIC_H | 1 | #ifndef ASM_X86__IO_APIC_H |
2 | #define __ASM_IO_APIC_H | 2 | #define ASM_X86__IO_APIC_H |
3 | 3 | ||
4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
5 | #include <asm/mpspec.h> | 5 | #include <asm/mpspec.h> |
@@ -107,6 +107,20 @@ struct IO_APIC_route_entry { | |||
107 | 107 | ||
108 | } __attribute__ ((packed)); | 108 | } __attribute__ ((packed)); |
109 | 109 | ||
110 | struct IR_IO_APIC_route_entry { | ||
111 | __u64 vector : 8, | ||
112 | zero : 3, | ||
113 | index2 : 1, | ||
114 | delivery_status : 1, | ||
115 | polarity : 1, | ||
116 | irr : 1, | ||
117 | trigger : 1, | ||
118 | mask : 1, | ||
119 | reserved : 31, | ||
120 | format : 1, | ||
121 | index : 15; | ||
122 | } __attribute__ ((packed)); | ||
123 | |||
110 | #ifdef CONFIG_X86_IO_APIC | 124 | #ifdef CONFIG_X86_IO_APIC |
111 | 125 | ||
112 | /* | 126 | /* |
@@ -183,10 +197,16 @@ extern int io_apic_set_pci_routing(int ioapic, int pin, int irq, | |||
183 | extern int (*ioapic_renumber_irq)(int ioapic, int irq); | 197 | extern int (*ioapic_renumber_irq)(int ioapic, int irq); |
184 | extern void ioapic_init_mappings(void); | 198 | extern void ioapic_init_mappings(void); |
185 | 199 | ||
200 | #ifdef CONFIG_X86_64 | ||
201 | extern int save_mask_IO_APIC_setup(void); | ||
202 | extern void restore_IO_APIC_setup(void); | ||
203 | extern void reinit_intr_remapped_IO_APIC(int); | ||
204 | #endif | ||
205 | |||
186 | #else /* !CONFIG_X86_IO_APIC */ | 206 | #else /* !CONFIG_X86_IO_APIC */ |
187 | #define io_apic_assign_pci_irqs 0 | 207 | #define io_apic_assign_pci_irqs 0 |
188 | static const int timer_through_8259 = 0; | 208 | static const int timer_through_8259 = 0; |
189 | static inline void ioapic_init_mappings(void) { } | 209 | static inline void ioapic_init_mappings(void) { } |
190 | #endif | 210 | #endif |
191 | 211 | ||
192 | #endif | 212 | #endif /* ASM_X86__IO_APIC_H */ |
diff --git a/include/asm-x86/ioctls.h b/include/asm-x86/ioctls.h index c0c338bd4068..06752a649044 100644 --- a/include/asm-x86/ioctls.h +++ b/include/asm-x86/ioctls.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_IOCTLS_H | 1 | #ifndef ASM_X86__IOCTLS_H |
2 | #define _ASM_X86_IOCTLS_H | 2 | #define ASM_X86__IOCTLS_H |
3 | 3 | ||
4 | #include <asm/ioctl.h> | 4 | #include <asm/ioctl.h> |
5 | 5 | ||
@@ -51,9 +51,15 @@ | |||
51 | #define TCSETS2 _IOW('T', 0x2B, struct termios2) | 51 | #define TCSETS2 _IOW('T', 0x2B, struct termios2) |
52 | #define TCSETSW2 _IOW('T', 0x2C, struct termios2) | 52 | #define TCSETSW2 _IOW('T', 0x2C, struct termios2) |
53 | #define TCSETSF2 _IOW('T', 0x2D, struct termios2) | 53 | #define TCSETSF2 _IOW('T', 0x2D, struct termios2) |
54 | #define TIOCGRS485 0x542E | ||
55 | #define TIOCSRS485 0x542F | ||
54 | #define TIOCGPTN _IOR('T', 0x30, unsigned int) | 56 | #define TIOCGPTN _IOR('T', 0x30, unsigned int) |
55 | /* Get Pty Number (of pty-mux device) */ | 57 | /* Get Pty Number (of pty-mux device) */ |
56 | #define TIOCSPTLCK _IOW('T', 0x31, int) /* Lock/unlock Pty */ | 58 | #define TIOCSPTLCK _IOW('T', 0x31, int) /* Lock/unlock Pty */ |
59 | #define TCGETX 0x5432 /* SYS5 TCGETX compatibility */ | ||
60 | #define TCSETX 0x5433 | ||
61 | #define TCSETXF 0x5434 | ||
62 | #define TCSETXW 0x5435 | ||
57 | 63 | ||
58 | #define FIONCLEX 0x5450 | 64 | #define FIONCLEX 0x5450 |
59 | #define FIOCLEX 0x5451 | 65 | #define FIOCLEX 0x5451 |
@@ -85,4 +91,4 @@ | |||
85 | 91 | ||
86 | #define TIOCSER_TEMT 0x01 /* Transmitter physically empty */ | 92 | #define TIOCSER_TEMT 0x01 /* Transmitter physically empty */ |
87 | 93 | ||
88 | #endif | 94 | #endif /* ASM_X86__IOCTLS_H */ |
diff --git a/include/asm-x86/iommu.h b/include/asm-x86/iommu.h index 5f888cc5be49..961e746da977 100644 --- a/include/asm-x86/iommu.h +++ b/include/asm-x86/iommu.h | |||
@@ -1,13 +1,14 @@ | |||
1 | #ifndef _ASM_X8664_IOMMU_H | 1 | #ifndef ASM_X86__IOMMU_H |
2 | #define _ASM_X8664_IOMMU_H 1 | 2 | #define ASM_X86__IOMMU_H |
3 | 3 | ||
4 | extern void pci_iommu_shutdown(void); | 4 | extern void pci_iommu_shutdown(void); |
5 | extern void no_iommu_init(void); | 5 | extern void no_iommu_init(void); |
6 | extern struct dma_mapping_ops nommu_dma_ops; | 6 | extern struct dma_mapping_ops nommu_dma_ops; |
7 | extern int force_iommu, no_iommu; | 7 | extern int force_iommu, no_iommu; |
8 | extern int iommu_detected; | 8 | extern int iommu_detected; |
9 | extern int dmar_disabled; | ||
9 | 10 | ||
10 | extern unsigned long iommu_num_pages(unsigned long addr, unsigned long len); | 11 | extern unsigned long iommu_nr_pages(unsigned long addr, unsigned long len); |
11 | 12 | ||
12 | #ifdef CONFIG_GART_IOMMU | 13 | #ifdef CONFIG_GART_IOMMU |
13 | extern int gart_iommu_aperture; | 14 | extern int gart_iommu_aperture; |
@@ -42,4 +43,4 @@ static inline void gart_iommu_hole_init(void) | |||
42 | } | 43 | } |
43 | #endif | 44 | #endif |
44 | 45 | ||
45 | #endif | 46 | #endif /* ASM_X86__IOMMU_H */ |
diff --git a/include/asm-x86/ipcbuf.h b/include/asm-x86/ipcbuf.h index ee678fd51594..910304fbdc8f 100644 --- a/include/asm-x86/ipcbuf.h +++ b/include/asm-x86/ipcbuf.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_IPCBUF_H | 1 | #ifndef ASM_X86__IPCBUF_H |
2 | #define _ASM_X86_IPCBUF_H | 2 | #define ASM_X86__IPCBUF_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * The ipc64_perm structure for x86 architecture. | 5 | * The ipc64_perm structure for x86 architecture. |
@@ -25,4 +25,4 @@ struct ipc64_perm { | |||
25 | unsigned long __unused2; | 25 | unsigned long __unused2; |
26 | }; | 26 | }; |
27 | 27 | ||
28 | #endif /* _ASM_X86_IPCBUF_H */ | 28 | #endif /* ASM_X86__IPCBUF_H */ |
diff --git a/include/asm-x86/ipi.h b/include/asm-x86/ipi.h index bb1c09f7a76c..30a692cfaff8 100644 --- a/include/asm-x86/ipi.h +++ b/include/asm-x86/ipi.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_IPI_H | 1 | #ifndef ASM_X86__IPI_H |
2 | #define __ASM_IPI_H | 2 | #define ASM_X86__IPI_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * Copyright 2004 James Cleverdon, IBM. | 5 | * Copyright 2004 James Cleverdon, IBM. |
@@ -49,6 +49,12 @@ static inline int __prepare_ICR2(unsigned int mask) | |||
49 | return SET_APIC_DEST_FIELD(mask); | 49 | return SET_APIC_DEST_FIELD(mask); |
50 | } | 50 | } |
51 | 51 | ||
52 | static inline void __xapic_wait_icr_idle(void) | ||
53 | { | ||
54 | while (native_apic_mem_read(APIC_ICR) & APIC_ICR_BUSY) | ||
55 | cpu_relax(); | ||
56 | } | ||
57 | |||
52 | static inline void __send_IPI_shortcut(unsigned int shortcut, int vector, | 58 | static inline void __send_IPI_shortcut(unsigned int shortcut, int vector, |
53 | unsigned int dest) | 59 | unsigned int dest) |
54 | { | 60 | { |
@@ -64,7 +70,7 @@ static inline void __send_IPI_shortcut(unsigned int shortcut, int vector, | |||
64 | /* | 70 | /* |
65 | * Wait for idle. | 71 | * Wait for idle. |
66 | */ | 72 | */ |
67 | apic_wait_icr_idle(); | 73 | __xapic_wait_icr_idle(); |
68 | 74 | ||
69 | /* | 75 | /* |
70 | * No need to touch the target chip field | 76 | * No need to touch the target chip field |
@@ -74,7 +80,7 @@ static inline void __send_IPI_shortcut(unsigned int shortcut, int vector, | |||
74 | /* | 80 | /* |
75 | * Send the IPI. The write to APIC_ICR fires this off. | 81 | * Send the IPI. The write to APIC_ICR fires this off. |
76 | */ | 82 | */ |
77 | apic_write(APIC_ICR, cfg); | 83 | native_apic_mem_write(APIC_ICR, cfg); |
78 | } | 84 | } |
79 | 85 | ||
80 | /* | 86 | /* |
@@ -92,13 +98,13 @@ static inline void __send_IPI_dest_field(unsigned int mask, int vector, | |||
92 | if (unlikely(vector == NMI_VECTOR)) | 98 | if (unlikely(vector == NMI_VECTOR)) |
93 | safe_apic_wait_icr_idle(); | 99 | safe_apic_wait_icr_idle(); |
94 | else | 100 | else |
95 | apic_wait_icr_idle(); | 101 | __xapic_wait_icr_idle(); |
96 | 102 | ||
97 | /* | 103 | /* |
98 | * prepare target chip field | 104 | * prepare target chip field |
99 | */ | 105 | */ |
100 | cfg = __prepare_ICR2(mask); | 106 | cfg = __prepare_ICR2(mask); |
101 | apic_write(APIC_ICR2, cfg); | 107 | native_apic_mem_write(APIC_ICR2, cfg); |
102 | 108 | ||
103 | /* | 109 | /* |
104 | * program the ICR | 110 | * program the ICR |
@@ -108,7 +114,7 @@ static inline void __send_IPI_dest_field(unsigned int mask, int vector, | |||
108 | /* | 114 | /* |
109 | * Send the IPI. The write to APIC_ICR fires this off. | 115 | * Send the IPI. The write to APIC_ICR fires this off. |
110 | */ | 116 | */ |
111 | apic_write(APIC_ICR, cfg); | 117 | native_apic_mem_write(APIC_ICR, cfg); |
112 | } | 118 | } |
113 | 119 | ||
114 | static inline void send_IPI_mask_sequence(cpumask_t mask, int vector) | 120 | static inline void send_IPI_mask_sequence(cpumask_t mask, int vector) |
@@ -129,4 +135,4 @@ static inline void send_IPI_mask_sequence(cpumask_t mask, int vector) | |||
129 | local_irq_restore(flags); | 135 | local_irq_restore(flags); |
130 | } | 136 | } |
131 | 137 | ||
132 | #endif /* __ASM_IPI_H */ | 138 | #endif /* ASM_X86__IPI_H */ |
diff --git a/include/asm-x86/irq.h b/include/asm-x86/irq.h index 1a2925757317..1e5f2909c1db 100644 --- a/include/asm-x86/irq.h +++ b/include/asm-x86/irq.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_IRQ_H | 1 | #ifndef ASM_X86__IRQ_H |
2 | #define _ASM_IRQ_H | 2 | #define ASM_X86__IRQ_H |
3 | /* | 3 | /* |
4 | * (C) 1992, 1993 Linus Torvalds, (C) 1997 Ingo Molnar | 4 | * (C) 1992, 1993 Linus Torvalds, (C) 1997 Ingo Molnar |
5 | * | 5 | * |
@@ -47,4 +47,4 @@ extern void native_init_IRQ(void); | |||
47 | /* Interrupt vector management */ | 47 | /* Interrupt vector management */ |
48 | extern DECLARE_BITMAP(used_vectors, NR_VECTORS); | 48 | extern DECLARE_BITMAP(used_vectors, NR_VECTORS); |
49 | 49 | ||
50 | #endif /* _ASM_IRQ_H */ | 50 | #endif /* ASM_X86__IRQ_H */ |
diff --git a/include/asm-x86/irq_regs_32.h b/include/asm-x86/irq_regs_32.h index 3368b20c0b48..316a3b258871 100644 --- a/include/asm-x86/irq_regs_32.h +++ b/include/asm-x86/irq_regs_32.h | |||
@@ -4,8 +4,8 @@ | |||
4 | * | 4 | * |
5 | * Jeremy Fitzhardinge <jeremy@goop.org> | 5 | * Jeremy Fitzhardinge <jeremy@goop.org> |
6 | */ | 6 | */ |
7 | #ifndef _ASM_I386_IRQ_REGS_H | 7 | #ifndef ASM_X86__IRQ_REGS_32_H |
8 | #define _ASM_I386_IRQ_REGS_H | 8 | #define ASM_X86__IRQ_REGS_32_H |
9 | 9 | ||
10 | #include <asm/percpu.h> | 10 | #include <asm/percpu.h> |
11 | 11 | ||
@@ -26,4 +26,4 @@ static inline struct pt_regs *set_irq_regs(struct pt_regs *new_regs) | |||
26 | return old_regs; | 26 | return old_regs; |
27 | } | 27 | } |
28 | 28 | ||
29 | #endif /* _ASM_I386_IRQ_REGS_H */ | 29 | #endif /* ASM_X86__IRQ_REGS_32_H */ |
diff --git a/include/asm-x86/irq_remapping.h b/include/asm-x86/irq_remapping.h new file mode 100644 index 000000000000..78242c6ffa58 --- /dev/null +++ b/include/asm-x86/irq_remapping.h | |||
@@ -0,0 +1,8 @@ | |||
1 | #ifndef _ASM_IRQ_REMAPPING_H | ||
2 | #define _ASM_IRQ_REMAPPING_H | ||
3 | |||
4 | extern int x2apic; | ||
5 | |||
6 | #define IRTE_DEST(dest) ((x2apic) ? dest : dest << 8) | ||
7 | |||
8 | #endif | ||
diff --git a/include/asm-x86/irq_vectors.h b/include/asm-x86/irq_vectors.h index a48c7f2dbdc0..c5d2d767a1f3 100644 --- a/include/asm-x86/irq_vectors.h +++ b/include/asm-x86/irq_vectors.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_IRQ_VECTORS_H | 1 | #ifndef ASM_X86__IRQ_VECTORS_H |
2 | #define _ASM_IRQ_VECTORS_H | 2 | #define ASM_X86__IRQ_VECTORS_H |
3 | 3 | ||
4 | #include <linux/threads.h> | 4 | #include <linux/threads.h> |
5 | 5 | ||
@@ -179,4 +179,4 @@ | |||
179 | #define VIC_CPU_BOOT_ERRATA_CPI (VIC_CPI_LEVEL0 + 8) | 179 | #define VIC_CPU_BOOT_ERRATA_CPI (VIC_CPI_LEVEL0 + 8) |
180 | 180 | ||
181 | 181 | ||
182 | #endif /* _ASM_IRQ_VECTORS_H */ | 182 | #endif /* ASM_X86__IRQ_VECTORS_H */ |
diff --git a/include/asm-x86/irqflags.h b/include/asm-x86/irqflags.h index 424acb48cd61..2bdab21f0898 100644 --- a/include/asm-x86/irqflags.h +++ b/include/asm-x86/irqflags.h | |||
@@ -166,27 +166,6 @@ static inline int raw_irqs_disabled(void) | |||
166 | return raw_irqs_disabled_flags(flags); | 166 | return raw_irqs_disabled_flags(flags); |
167 | } | 167 | } |
168 | 168 | ||
169 | /* | ||
170 | * makes the traced hardirq state match with the machine state | ||
171 | * | ||
172 | * should be a rarely used function, only in places where its | ||
173 | * otherwise impossible to know the irq state, like in traps. | ||
174 | */ | ||
175 | static inline void trace_hardirqs_fixup_flags(unsigned long flags) | ||
176 | { | ||
177 | if (raw_irqs_disabled_flags(flags)) | ||
178 | trace_hardirqs_off(); | ||
179 | else | ||
180 | trace_hardirqs_on(); | ||
181 | } | ||
182 | |||
183 | static inline void trace_hardirqs_fixup(void) | ||
184 | { | ||
185 | unsigned long flags = __raw_local_save_flags(); | ||
186 | |||
187 | trace_hardirqs_fixup_flags(flags); | ||
188 | } | ||
189 | |||
190 | #else | 169 | #else |
191 | 170 | ||
192 | #ifdef CONFIG_X86_64 | 171 | #ifdef CONFIG_X86_64 |
diff --git a/include/asm-x86/ist.h b/include/asm-x86/ist.h index 6ec6ceed95a7..35a2fe9bc921 100644 --- a/include/asm-x86/ist.h +++ b/include/asm-x86/ist.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_IST_H | 1 | #ifndef ASM_X86__IST_H |
2 | #define _ASM_IST_H | 2 | #define ASM_X86__IST_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * Include file for the interface to IST BIOS | 5 | * Include file for the interface to IST BIOS |
@@ -31,4 +31,4 @@ struct ist_info { | |||
31 | extern struct ist_info ist_info; | 31 | extern struct ist_info ist_info; |
32 | 32 | ||
33 | #endif /* __KERNEL__ */ | 33 | #endif /* __KERNEL__ */ |
34 | #endif /* _ASM_IST_H */ | 34 | #endif /* ASM_X86__IST_H */ |
diff --git a/include/asm-x86/k8.h b/include/asm-x86/k8.h index 452e2b696ff4..2bbaf4370a55 100644 --- a/include/asm-x86/k8.h +++ b/include/asm-x86/k8.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_K8_H | 1 | #ifndef ASM_X86__K8_H |
2 | #define _ASM_K8_H 1 | 2 | #define ASM_X86__K8_H |
3 | 3 | ||
4 | #include <linux/pci.h> | 4 | #include <linux/pci.h> |
5 | 5 | ||
@@ -12,4 +12,4 @@ extern int cache_k8_northbridges(void); | |||
12 | extern void k8_flush_garts(void); | 12 | extern void k8_flush_garts(void); |
13 | extern int k8_scan_nodes(unsigned long start, unsigned long end); | 13 | extern int k8_scan_nodes(unsigned long start, unsigned long end); |
14 | 14 | ||
15 | #endif | 15 | #endif /* ASM_X86__K8_H */ |
diff --git a/include/asm-x86/kdebug.h b/include/asm-x86/kdebug.h index 96651bb59ba1..fbbab66ee9df 100644 --- a/include/asm-x86/kdebug.h +++ b/include/asm-x86/kdebug.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_KDEBUG_H | 1 | #ifndef ASM_X86__KDEBUG_H |
2 | #define _ASM_X86_KDEBUG_H | 2 | #define ASM_X86__KDEBUG_H |
3 | 3 | ||
4 | #include <linux/notifier.h> | 4 | #include <linux/notifier.h> |
5 | 5 | ||
@@ -27,12 +27,11 @@ extern void printk_address(unsigned long address, int reliable); | |||
27 | extern void die(const char *, struct pt_regs *,long); | 27 | extern void die(const char *, struct pt_regs *,long); |
28 | extern int __must_check __die(const char *, struct pt_regs *, long); | 28 | extern int __must_check __die(const char *, struct pt_regs *, long); |
29 | extern void show_registers(struct pt_regs *regs); | 29 | extern void show_registers(struct pt_regs *regs); |
30 | extern void __show_registers(struct pt_regs *, int all); | ||
31 | extern void show_trace(struct task_struct *t, struct pt_regs *regs, | 30 | extern void show_trace(struct task_struct *t, struct pt_regs *regs, |
32 | unsigned long *sp, unsigned long bp); | 31 | unsigned long *sp, unsigned long bp); |
33 | extern void __show_regs(struct pt_regs *regs); | 32 | extern void __show_regs(struct pt_regs *regs, int all); |
34 | extern void show_regs(struct pt_regs *regs); | 33 | extern void show_regs(struct pt_regs *regs); |
35 | extern unsigned long oops_begin(void); | 34 | extern unsigned long oops_begin(void); |
36 | extern void oops_end(unsigned long, struct pt_regs *, int signr); | 35 | extern void oops_end(unsigned long, struct pt_regs *, int signr); |
37 | 36 | ||
38 | #endif | 37 | #endif /* ASM_X86__KDEBUG_H */ |
diff --git a/include/asm-x86/kexec.h b/include/asm-x86/kexec.h index 4246ab7dc988..ea09600d6129 100644 --- a/include/asm-x86/kexec.h +++ b/include/asm-x86/kexec.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _KEXEC_H | 1 | #ifndef ASM_X86__KEXEC_H |
2 | #define _KEXEC_H | 2 | #define ASM_X86__KEXEC_H |
3 | 3 | ||
4 | #ifdef CONFIG_X86_32 | 4 | #ifdef CONFIG_X86_32 |
5 | # define PA_CONTROL_PAGE 0 | 5 | # define PA_CONTROL_PAGE 0 |
@@ -172,4 +172,4 @@ relocate_kernel(unsigned long indirection_page, | |||
172 | 172 | ||
173 | #endif /* __ASSEMBLY__ */ | 173 | #endif /* __ASSEMBLY__ */ |
174 | 174 | ||
175 | #endif /* _KEXEC_H */ | 175 | #endif /* ASM_X86__KEXEC_H */ |
diff --git a/include/asm-x86/kgdb.h b/include/asm-x86/kgdb.h index 484c47554f3b..d283863354de 100644 --- a/include/asm-x86/kgdb.h +++ b/include/asm-x86/kgdb.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_KGDB_H_ | 1 | #ifndef ASM_X86__KGDB_H |
2 | #define _ASM_KGDB_H_ | 2 | #define ASM_X86__KGDB_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * Copyright (C) 2001-2004 Amit S. Kale | 5 | * Copyright (C) 2001-2004 Amit S. Kale |
@@ -39,12 +39,13 @@ enum regnames { | |||
39 | GDB_FS, /* 14 */ | 39 | GDB_FS, /* 14 */ |
40 | GDB_GS, /* 15 */ | 40 | GDB_GS, /* 15 */ |
41 | }; | 41 | }; |
42 | #define NUMREGBYTES ((GDB_GS+1)*4) | ||
42 | #else /* ! CONFIG_X86_32 */ | 43 | #else /* ! CONFIG_X86_32 */ |
43 | enum regnames { | 44 | enum regnames64 { |
44 | GDB_AX, /* 0 */ | 45 | GDB_AX, /* 0 */ |
45 | GDB_DX, /* 1 */ | 46 | GDB_BX, /* 1 */ |
46 | GDB_CX, /* 2 */ | 47 | GDB_CX, /* 2 */ |
47 | GDB_BX, /* 3 */ | 48 | GDB_DX, /* 3 */ |
48 | GDB_SI, /* 4 */ | 49 | GDB_SI, /* 4 */ |
49 | GDB_DI, /* 5 */ | 50 | GDB_DI, /* 5 */ |
50 | GDB_BP, /* 6 */ | 51 | GDB_BP, /* 6 */ |
@@ -58,18 +59,15 @@ enum regnames { | |||
58 | GDB_R14, /* 14 */ | 59 | GDB_R14, /* 14 */ |
59 | GDB_R15, /* 15 */ | 60 | GDB_R15, /* 15 */ |
60 | GDB_PC, /* 16 */ | 61 | GDB_PC, /* 16 */ |
61 | GDB_PS, /* 17 */ | ||
62 | }; | 62 | }; |
63 | #endif /* CONFIG_X86_32 */ | ||
64 | 63 | ||
65 | /* | 64 | enum regnames32 { |
66 | * Number of bytes of registers: | 65 | GDB_PS = 34, |
67 | */ | 66 | GDB_CS, |
68 | #ifdef CONFIG_X86_32 | 67 | GDB_SS, |
69 | # define NUMREGBYTES 64 | 68 | }; |
70 | #else | 69 | #define NUMREGBYTES ((GDB_SS+1)*4) |
71 | # define NUMREGBYTES ((GDB_PS+1)*8) | 70 | #endif /* CONFIG_X86_32 */ |
72 | #endif | ||
73 | 71 | ||
74 | static inline void arch_kgdb_breakpoint(void) | 72 | static inline void arch_kgdb_breakpoint(void) |
75 | { | 73 | { |
@@ -78,4 +76,4 @@ static inline void arch_kgdb_breakpoint(void) | |||
78 | #define BREAK_INSTR_SIZE 1 | 76 | #define BREAK_INSTR_SIZE 1 |
79 | #define CACHE_FLUSH_IS_SAFE 1 | 77 | #define CACHE_FLUSH_IS_SAFE 1 |
80 | 78 | ||
81 | #endif /* _ASM_KGDB_H_ */ | 79 | #endif /* ASM_X86__KGDB_H */ |
diff --git a/include/asm-x86/kmap_types.h b/include/asm-x86/kmap_types.h index 5f4174132a22..89f44493e643 100644 --- a/include/asm-x86/kmap_types.h +++ b/include/asm-x86/kmap_types.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_KMAP_TYPES_H | 1 | #ifndef ASM_X86__KMAP_TYPES_H |
2 | #define _ASM_X86_KMAP_TYPES_H | 2 | #define ASM_X86__KMAP_TYPES_H |
3 | 3 | ||
4 | #if defined(CONFIG_X86_32) && defined(CONFIG_DEBUG_HIGHMEM) | 4 | #if defined(CONFIG_X86_32) && defined(CONFIG_DEBUG_HIGHMEM) |
5 | # define D(n) __KM_FENCE_##n , | 5 | # define D(n) __KM_FENCE_##n , |
@@ -26,4 +26,4 @@ D(13) KM_TYPE_NR | |||
26 | 26 | ||
27 | #undef D | 27 | #undef D |
28 | 28 | ||
29 | #endif | 29 | #endif /* ASM_X86__KMAP_TYPES_H */ |
diff --git a/include/asm-x86/kprobes.h b/include/asm-x86/kprobes.h index 54980b0b3892..8a0748d01036 100644 --- a/include/asm-x86/kprobes.h +++ b/include/asm-x86/kprobes.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_KPROBES_H | 1 | #ifndef ASM_X86__KPROBES_H |
2 | #define _ASM_KPROBES_H | 2 | #define ASM_X86__KPROBES_H |
3 | /* | 3 | /* |
4 | * Kernel Probes (KProbes) | 4 | * Kernel Probes (KProbes) |
5 | * | 5 | * |
@@ -82,16 +82,7 @@ struct kprobe_ctlblk { | |||
82 | struct prev_kprobe prev_kprobe; | 82 | struct prev_kprobe prev_kprobe; |
83 | }; | 83 | }; |
84 | 84 | ||
85 | /* trap3/1 are intr gates for kprobes. So, restore the status of IF, | ||
86 | * if necessary, before executing the original int3/1 (trap) handler. | ||
87 | */ | ||
88 | static inline void restore_interrupts(struct pt_regs *regs) | ||
89 | { | ||
90 | if (regs->flags & X86_EFLAGS_IF) | ||
91 | local_irq_enable(); | ||
92 | } | ||
93 | |||
94 | extern int kprobe_fault_handler(struct pt_regs *regs, int trapnr); | 85 | extern int kprobe_fault_handler(struct pt_regs *regs, int trapnr); |
95 | extern int kprobe_exceptions_notify(struct notifier_block *self, | 86 | extern int kprobe_exceptions_notify(struct notifier_block *self, |
96 | unsigned long val, void *data); | 87 | unsigned long val, void *data); |
97 | #endif /* _ASM_KPROBES_H */ | 88 | #endif /* ASM_X86__KPROBES_H */ |
diff --git a/include/asm-x86/kvm.h b/include/asm-x86/kvm.h index 6f1840812e59..ba0dd791fadf 100644 --- a/include/asm-x86/kvm.h +++ b/include/asm-x86/kvm.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __LINUX_KVM_X86_H | 1 | #ifndef ASM_X86__KVM_H |
2 | #define __LINUX_KVM_X86_H | 2 | #define ASM_X86__KVM_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * KVM x86 specific structures and definitions | 5 | * KVM x86 specific structures and definitions |
@@ -208,26 +208,4 @@ struct kvm_pit_channel_state { | |||
208 | struct kvm_pit_state { | 208 | struct kvm_pit_state { |
209 | struct kvm_pit_channel_state channels[3]; | 209 | struct kvm_pit_channel_state channels[3]; |
210 | }; | 210 | }; |
211 | 211 | #endif /* ASM_X86__KVM_H */ | |
212 | #define KVM_TRC_INJ_VIRQ (KVM_TRC_HANDLER + 0x02) | ||
213 | #define KVM_TRC_REDELIVER_EVT (KVM_TRC_HANDLER + 0x03) | ||
214 | #define KVM_TRC_PEND_INTR (KVM_TRC_HANDLER + 0x04) | ||
215 | #define KVM_TRC_IO_READ (KVM_TRC_HANDLER + 0x05) | ||
216 | #define KVM_TRC_IO_WRITE (KVM_TRC_HANDLER + 0x06) | ||
217 | #define KVM_TRC_CR_READ (KVM_TRC_HANDLER + 0x07) | ||
218 | #define KVM_TRC_CR_WRITE (KVM_TRC_HANDLER + 0x08) | ||
219 | #define KVM_TRC_DR_READ (KVM_TRC_HANDLER + 0x09) | ||
220 | #define KVM_TRC_DR_WRITE (KVM_TRC_HANDLER + 0x0A) | ||
221 | #define KVM_TRC_MSR_READ (KVM_TRC_HANDLER + 0x0B) | ||
222 | #define KVM_TRC_MSR_WRITE (KVM_TRC_HANDLER + 0x0C) | ||
223 | #define KVM_TRC_CPUID (KVM_TRC_HANDLER + 0x0D) | ||
224 | #define KVM_TRC_INTR (KVM_TRC_HANDLER + 0x0E) | ||
225 | #define KVM_TRC_NMI (KVM_TRC_HANDLER + 0x0F) | ||
226 | #define KVM_TRC_VMMCALL (KVM_TRC_HANDLER + 0x10) | ||
227 | #define KVM_TRC_HLT (KVM_TRC_HANDLER + 0x11) | ||
228 | #define KVM_TRC_CLTS (KVM_TRC_HANDLER + 0x12) | ||
229 | #define KVM_TRC_LMSW (KVM_TRC_HANDLER + 0x13) | ||
230 | #define KVM_TRC_APIC_ACCESS (KVM_TRC_HANDLER + 0x14) | ||
231 | #define KVM_TRC_TDP_FAULT (KVM_TRC_HANDLER + 0x15) | ||
232 | |||
233 | #endif | ||
diff --git a/include/asm-x86/kvm_host.h b/include/asm-x86/kvm_host.h index c2e34c275900..411fb8cfb24e 100644 --- a/include/asm-x86/kvm_host.h +++ b/include/asm-x86/kvm_host.h | |||
@@ -1,4 +1,4 @@ | |||
1 | #/* | 1 | /* |
2 | * Kernel-based Virtual Machine driver for Linux | 2 | * Kernel-based Virtual Machine driver for Linux |
3 | * | 3 | * |
4 | * This header defines architecture specific interfaces, x86 version | 4 | * This header defines architecture specific interfaces, x86 version |
@@ -8,8 +8,8 @@ | |||
8 | * | 8 | * |
9 | */ | 9 | */ |
10 | 10 | ||
11 | #ifndef ASM_KVM_HOST_H | 11 | #ifndef ASM_X86__KVM_HOST_H |
12 | #define ASM_KVM_HOST_H | 12 | #define ASM_X86__KVM_HOST_H |
13 | 13 | ||
14 | #include <linux/types.h> | 14 | #include <linux/types.h> |
15 | #include <linux/mm.h> | 15 | #include <linux/mm.h> |
@@ -57,6 +57,10 @@ | |||
57 | #define KVM_PAGES_PER_HPAGE (KVM_HPAGE_SIZE / PAGE_SIZE) | 57 | #define KVM_PAGES_PER_HPAGE (KVM_HPAGE_SIZE / PAGE_SIZE) |
58 | 58 | ||
59 | #define DE_VECTOR 0 | 59 | #define DE_VECTOR 0 |
60 | #define DB_VECTOR 1 | ||
61 | #define BP_VECTOR 3 | ||
62 | #define OF_VECTOR 4 | ||
63 | #define BR_VECTOR 5 | ||
60 | #define UD_VECTOR 6 | 64 | #define UD_VECTOR 6 |
61 | #define NM_VECTOR 7 | 65 | #define NM_VECTOR 7 |
62 | #define DF_VECTOR 8 | 66 | #define DF_VECTOR 8 |
@@ -65,6 +69,7 @@ | |||
65 | #define SS_VECTOR 12 | 69 | #define SS_VECTOR 12 |
66 | #define GP_VECTOR 13 | 70 | #define GP_VECTOR 13 |
67 | #define PF_VECTOR 14 | 71 | #define PF_VECTOR 14 |
72 | #define MF_VECTOR 16 | ||
68 | #define MC_VECTOR 18 | 73 | #define MC_VECTOR 18 |
69 | 74 | ||
70 | #define SELECTOR_TI_MASK (1 << 2) | 75 | #define SELECTOR_TI_MASK (1 << 2) |
@@ -89,7 +94,7 @@ extern struct list_head vm_list; | |||
89 | struct kvm_vcpu; | 94 | struct kvm_vcpu; |
90 | struct kvm; | 95 | struct kvm; |
91 | 96 | ||
92 | enum { | 97 | enum kvm_reg { |
93 | VCPU_REGS_RAX = 0, | 98 | VCPU_REGS_RAX = 0, |
94 | VCPU_REGS_RCX = 1, | 99 | VCPU_REGS_RCX = 1, |
95 | VCPU_REGS_RDX = 2, | 100 | VCPU_REGS_RDX = 2, |
@@ -108,6 +113,7 @@ enum { | |||
108 | VCPU_REGS_R14 = 14, | 113 | VCPU_REGS_R14 = 14, |
109 | VCPU_REGS_R15 = 15, | 114 | VCPU_REGS_R15 = 15, |
110 | #endif | 115 | #endif |
116 | VCPU_REGS_RIP, | ||
111 | NR_VCPU_REGS | 117 | NR_VCPU_REGS |
112 | }; | 118 | }; |
113 | 119 | ||
@@ -189,10 +195,20 @@ struct kvm_mmu_page { | |||
189 | */ | 195 | */ |
190 | int multimapped; /* More than one parent_pte? */ | 196 | int multimapped; /* More than one parent_pte? */ |
191 | int root_count; /* Currently serving as active root */ | 197 | int root_count; /* Currently serving as active root */ |
198 | bool unsync; | ||
199 | bool unsync_children; | ||
192 | union { | 200 | union { |
193 | u64 *parent_pte; /* !multimapped */ | 201 | u64 *parent_pte; /* !multimapped */ |
194 | struct hlist_head parent_ptes; /* multimapped, kvm_pte_chain */ | 202 | struct hlist_head parent_ptes; /* multimapped, kvm_pte_chain */ |
195 | }; | 203 | }; |
204 | DECLARE_BITMAP(unsync_child_bitmap, 512); | ||
205 | }; | ||
206 | |||
207 | struct kvm_pv_mmu_op_buffer { | ||
208 | void *ptr; | ||
209 | unsigned len; | ||
210 | unsigned processed; | ||
211 | char buf[512] __aligned(sizeof(long)); | ||
196 | }; | 212 | }; |
197 | 213 | ||
198 | /* | 214 | /* |
@@ -207,6 +223,9 @@ struct kvm_mmu { | |||
207 | gpa_t (*gva_to_gpa)(struct kvm_vcpu *vcpu, gva_t gva); | 223 | gpa_t (*gva_to_gpa)(struct kvm_vcpu *vcpu, gva_t gva); |
208 | void (*prefetch_page)(struct kvm_vcpu *vcpu, | 224 | void (*prefetch_page)(struct kvm_vcpu *vcpu, |
209 | struct kvm_mmu_page *page); | 225 | struct kvm_mmu_page *page); |
226 | int (*sync_page)(struct kvm_vcpu *vcpu, | ||
227 | struct kvm_mmu_page *sp); | ||
228 | void (*invlpg)(struct kvm_vcpu *vcpu, gva_t gva); | ||
210 | hpa_t root_hpa; | 229 | hpa_t root_hpa; |
211 | int root_level; | 230 | int root_level; |
212 | int shadow_root_level; | 231 | int shadow_root_level; |
@@ -219,8 +238,13 @@ struct kvm_vcpu_arch { | |||
219 | int interrupt_window_open; | 238 | int interrupt_window_open; |
220 | unsigned long irq_summary; /* bit vector: 1 per word in irq_pending */ | 239 | unsigned long irq_summary; /* bit vector: 1 per word in irq_pending */ |
221 | DECLARE_BITMAP(irq_pending, KVM_NR_INTERRUPTS); | 240 | DECLARE_BITMAP(irq_pending, KVM_NR_INTERRUPTS); |
222 | unsigned long regs[NR_VCPU_REGS]; /* for rsp: vcpu_load_rsp_rip() */ | 241 | /* |
223 | unsigned long rip; /* needs vcpu_load_rsp_rip() */ | 242 | * rip and regs accesses must go through |
243 | * kvm_{register,rip}_{read,write} functions. | ||
244 | */ | ||
245 | unsigned long regs[NR_VCPU_REGS]; | ||
246 | u32 regs_avail; | ||
247 | u32 regs_dirty; | ||
224 | 248 | ||
225 | unsigned long cr0; | 249 | unsigned long cr0; |
226 | unsigned long cr2; | 250 | unsigned long cr2; |
@@ -237,6 +261,9 @@ struct kvm_vcpu_arch { | |||
237 | bool tpr_access_reporting; | 261 | bool tpr_access_reporting; |
238 | 262 | ||
239 | struct kvm_mmu mmu; | 263 | struct kvm_mmu mmu; |
264 | /* only needed in kvm_pv_mmu_op() path, but it's hot so | ||
265 | * put it here to avoid allocation */ | ||
266 | struct kvm_pv_mmu_op_buffer mmu_op_buffer; | ||
240 | 267 | ||
241 | struct kvm_mmu_memory_cache mmu_pte_chain_cache; | 268 | struct kvm_mmu_memory_cache mmu_pte_chain_cache; |
242 | struct kvm_mmu_memory_cache mmu_rmap_desc_cache; | 269 | struct kvm_mmu_memory_cache mmu_rmap_desc_cache; |
@@ -269,6 +296,11 @@ struct kvm_vcpu_arch { | |||
269 | u32 error_code; | 296 | u32 error_code; |
270 | } exception; | 297 | } exception; |
271 | 298 | ||
299 | struct kvm_queued_interrupt { | ||
300 | bool pending; | ||
301 | u8 nr; | ||
302 | } interrupt; | ||
303 | |||
272 | struct { | 304 | struct { |
273 | int active; | 305 | int active; |
274 | u8 save_iopl; | 306 | u8 save_iopl; |
@@ -294,6 +326,7 @@ struct kvm_vcpu_arch { | |||
294 | struct page *time_page; | 326 | struct page *time_page; |
295 | 327 | ||
296 | bool nmi_pending; | 328 | bool nmi_pending; |
329 | bool nmi_injected; | ||
297 | 330 | ||
298 | u64 mtrr[0x100]; | 331 | u64 mtrr[0x100]; |
299 | }; | 332 | }; |
@@ -316,9 +349,12 @@ struct kvm_arch{ | |||
316 | * Hash table of struct kvm_mmu_page. | 349 | * Hash table of struct kvm_mmu_page. |
317 | */ | 350 | */ |
318 | struct list_head active_mmu_pages; | 351 | struct list_head active_mmu_pages; |
352 | struct list_head assigned_dev_head; | ||
353 | struct dmar_domain *intel_iommu_domain; | ||
319 | struct kvm_pic *vpic; | 354 | struct kvm_pic *vpic; |
320 | struct kvm_ioapic *vioapic; | 355 | struct kvm_ioapic *vioapic; |
321 | struct kvm_pit *vpit; | 356 | struct kvm_pit *vpit; |
357 | struct hlist_head irq_ack_notifier_list; | ||
322 | 358 | ||
323 | int round_robin_prev_vcpu; | 359 | int round_robin_prev_vcpu; |
324 | unsigned int tss_addr; | 360 | unsigned int tss_addr; |
@@ -338,6 +374,7 @@ struct kvm_vm_stat { | |||
338 | u32 mmu_flooded; | 374 | u32 mmu_flooded; |
339 | u32 mmu_recycled; | 375 | u32 mmu_recycled; |
340 | u32 mmu_cache_miss; | 376 | u32 mmu_cache_miss; |
377 | u32 mmu_unsync; | ||
341 | u32 remote_tlb_flush; | 378 | u32 remote_tlb_flush; |
342 | u32 lpages; | 379 | u32 lpages; |
343 | }; | 380 | }; |
@@ -364,6 +401,7 @@ struct kvm_vcpu_stat { | |||
364 | u32 insn_emulation; | 401 | u32 insn_emulation; |
365 | u32 insn_emulation_fail; | 402 | u32 insn_emulation_fail; |
366 | u32 hypercalls; | 403 | u32 hypercalls; |
404 | u32 irq_injections; | ||
367 | }; | 405 | }; |
368 | 406 | ||
369 | struct descriptor_table { | 407 | struct descriptor_table { |
@@ -414,8 +452,7 @@ struct kvm_x86_ops { | |||
414 | unsigned long (*get_dr)(struct kvm_vcpu *vcpu, int dr); | 452 | unsigned long (*get_dr)(struct kvm_vcpu *vcpu, int dr); |
415 | void (*set_dr)(struct kvm_vcpu *vcpu, int dr, unsigned long value, | 453 | void (*set_dr)(struct kvm_vcpu *vcpu, int dr, unsigned long value, |
416 | int *exception); | 454 | int *exception); |
417 | void (*cache_regs)(struct kvm_vcpu *vcpu); | 455 | void (*cache_reg)(struct kvm_vcpu *vcpu, enum kvm_reg reg); |
418 | void (*decache_regs)(struct kvm_vcpu *vcpu); | ||
419 | unsigned long (*get_rflags)(struct kvm_vcpu *vcpu); | 456 | unsigned long (*get_rflags)(struct kvm_vcpu *vcpu); |
420 | void (*set_rflags)(struct kvm_vcpu *vcpu, unsigned long rflags); | 457 | void (*set_rflags)(struct kvm_vcpu *vcpu, unsigned long rflags); |
421 | 458 | ||
@@ -528,6 +565,8 @@ void kvm_queue_exception_e(struct kvm_vcpu *vcpu, unsigned nr, u32 error_code); | |||
528 | void kvm_inject_page_fault(struct kvm_vcpu *vcpu, unsigned long cr2, | 565 | void kvm_inject_page_fault(struct kvm_vcpu *vcpu, unsigned long cr2, |
529 | u32 error_code); | 566 | u32 error_code); |
530 | 567 | ||
568 | void kvm_pic_set_irq(void *opaque, int irq, int level); | ||
569 | |||
531 | void kvm_inject_nmi(struct kvm_vcpu *vcpu); | 570 | void kvm_inject_nmi(struct kvm_vcpu *vcpu); |
532 | 571 | ||
533 | void fx_init(struct kvm_vcpu *vcpu); | 572 | void fx_init(struct kvm_vcpu *vcpu); |
@@ -550,12 +589,14 @@ int kvm_mmu_unprotect_page_virt(struct kvm_vcpu *vcpu, gva_t gva); | |||
550 | void __kvm_mmu_free_some_pages(struct kvm_vcpu *vcpu); | 589 | void __kvm_mmu_free_some_pages(struct kvm_vcpu *vcpu); |
551 | int kvm_mmu_load(struct kvm_vcpu *vcpu); | 590 | int kvm_mmu_load(struct kvm_vcpu *vcpu); |
552 | void kvm_mmu_unload(struct kvm_vcpu *vcpu); | 591 | void kvm_mmu_unload(struct kvm_vcpu *vcpu); |
592 | void kvm_mmu_sync_roots(struct kvm_vcpu *vcpu); | ||
553 | 593 | ||
554 | int kvm_emulate_hypercall(struct kvm_vcpu *vcpu); | 594 | int kvm_emulate_hypercall(struct kvm_vcpu *vcpu); |
555 | 595 | ||
556 | int kvm_fix_hypercall(struct kvm_vcpu *vcpu); | 596 | int kvm_fix_hypercall(struct kvm_vcpu *vcpu); |
557 | 597 | ||
558 | int kvm_mmu_page_fault(struct kvm_vcpu *vcpu, gva_t gva, u32 error_code); | 598 | int kvm_mmu_page_fault(struct kvm_vcpu *vcpu, gva_t gva, u32 error_code); |
599 | void kvm_mmu_invlpg(struct kvm_vcpu *vcpu, gva_t gva); | ||
559 | 600 | ||
560 | void kvm_enable_tdp(void); | 601 | void kvm_enable_tdp(void); |
561 | void kvm_disable_tdp(void); | 602 | void kvm_disable_tdp(void); |
@@ -686,33 +727,6 @@ enum { | |||
686 | TASK_SWITCH_GATE = 3, | 727 | TASK_SWITCH_GATE = 3, |
687 | }; | 728 | }; |
688 | 729 | ||
689 | #define KVMTRACE_5D(evt, vcpu, d1, d2, d3, d4, d5, name) \ | ||
690 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
691 | vcpu, 5, d1, d2, d3, d4, d5) | ||
692 | #define KVMTRACE_4D(evt, vcpu, d1, d2, d3, d4, name) \ | ||
693 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
694 | vcpu, 4, d1, d2, d3, d4, 0) | ||
695 | #define KVMTRACE_3D(evt, vcpu, d1, d2, d3, name) \ | ||
696 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
697 | vcpu, 3, d1, d2, d3, 0, 0) | ||
698 | #define KVMTRACE_2D(evt, vcpu, d1, d2, name) \ | ||
699 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
700 | vcpu, 2, d1, d2, 0, 0, 0) | ||
701 | #define KVMTRACE_1D(evt, vcpu, d1, name) \ | ||
702 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
703 | vcpu, 1, d1, 0, 0, 0, 0) | ||
704 | #define KVMTRACE_0D(evt, vcpu, name) \ | ||
705 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
706 | vcpu, 0, 0, 0, 0, 0, 0) | ||
707 | |||
708 | #ifdef CONFIG_64BIT | ||
709 | # define KVM_EX_ENTRY ".quad" | ||
710 | # define KVM_EX_PUSH "pushq" | ||
711 | #else | ||
712 | # define KVM_EX_ENTRY ".long" | ||
713 | # define KVM_EX_PUSH "pushl" | ||
714 | #endif | ||
715 | |||
716 | /* | 730 | /* |
717 | * Hardware virtualization extension instructions may fault if a | 731 | * Hardware virtualization extension instructions may fault if a |
718 | * reboot turns off virtualization while processes are running. | 732 | * reboot turns off virtualization while processes are running. |
@@ -724,15 +738,15 @@ asmlinkage void kvm_handle_fault_on_reboot(void); | |||
724 | "666: " insn "\n\t" \ | 738 | "666: " insn "\n\t" \ |
725 | ".pushsection .fixup, \"ax\" \n" \ | 739 | ".pushsection .fixup, \"ax\" \n" \ |
726 | "667: \n\t" \ | 740 | "667: \n\t" \ |
727 | KVM_EX_PUSH " $666b \n\t" \ | 741 | __ASM_SIZE(push) " $666b \n\t" \ |
728 | "jmp kvm_handle_fault_on_reboot \n\t" \ | 742 | "jmp kvm_handle_fault_on_reboot \n\t" \ |
729 | ".popsection \n\t" \ | 743 | ".popsection \n\t" \ |
730 | ".pushsection __ex_table, \"a\" \n\t" \ | 744 | ".pushsection __ex_table, \"a\" \n\t" \ |
731 | KVM_EX_ENTRY " 666b, 667b \n\t" \ | 745 | _ASM_PTR " 666b, 667b \n\t" \ |
732 | ".popsection" | 746 | ".popsection" |
733 | 747 | ||
734 | #define KVM_ARCH_WANT_MMU_NOTIFIER | 748 | #define KVM_ARCH_WANT_MMU_NOTIFIER |
735 | int kvm_unmap_hva(struct kvm *kvm, unsigned long hva); | 749 | int kvm_unmap_hva(struct kvm *kvm, unsigned long hva); |
736 | int kvm_age_hva(struct kvm *kvm, unsigned long hva); | 750 | int kvm_age_hva(struct kvm *kvm, unsigned long hva); |
737 | 751 | ||
738 | #endif | 752 | #endif /* ASM_X86__KVM_HOST_H */ |
diff --git a/include/asm-x86/kvm_para.h b/include/asm-x86/kvm_para.h index 76f392146daa..30054fded4fb 100644 --- a/include/asm-x86/kvm_para.h +++ b/include/asm-x86/kvm_para.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __X86_KVM_PARA_H | 1 | #ifndef ASM_X86__KVM_PARA_H |
2 | #define __X86_KVM_PARA_H | 2 | #define ASM_X86__KVM_PARA_H |
3 | 3 | ||
4 | /* This CPUID returns the signature 'KVMKVMKVM' in ebx, ecx, and edx. It | 4 | /* This CPUID returns the signature 'KVMKVMKVM' in ebx, ecx, and edx. It |
5 | * should be used to determine that a VM is running under KVM. | 5 | * should be used to determine that a VM is running under KVM. |
@@ -144,4 +144,4 @@ static inline unsigned int kvm_arch_para_features(void) | |||
144 | 144 | ||
145 | #endif | 145 | #endif |
146 | 146 | ||
147 | #endif | 147 | #endif /* ASM_X86__KVM_PARA_H */ |
diff --git a/include/asm-x86/kvm_x86_emulate.h b/include/asm-x86/kvm_x86_emulate.h index 4e8c1e48d91d..e2d9b030c1ac 100644 --- a/include/asm-x86/kvm_x86_emulate.h +++ b/include/asm-x86/kvm_x86_emulate.h | |||
@@ -8,8 +8,8 @@ | |||
8 | * From: xen-unstable 10676:af9809f51f81a3c43f276f00c81a52ef558afda4 | 8 | * From: xen-unstable 10676:af9809f51f81a3c43f276f00c81a52ef558afda4 |
9 | */ | 9 | */ |
10 | 10 | ||
11 | #ifndef __X86_EMULATE_H__ | 11 | #ifndef ASM_X86__KVM_X86_EMULATE_H |
12 | #define __X86_EMULATE_H__ | 12 | #define ASM_X86__KVM_X86_EMULATE_H |
13 | 13 | ||
14 | struct x86_emulate_ctxt; | 14 | struct x86_emulate_ctxt; |
15 | 15 | ||
@@ -181,4 +181,4 @@ int x86_decode_insn(struct x86_emulate_ctxt *ctxt, | |||
181 | int x86_emulate_insn(struct x86_emulate_ctxt *ctxt, | 181 | int x86_emulate_insn(struct x86_emulate_ctxt *ctxt, |
182 | struct x86_emulate_ops *ops); | 182 | struct x86_emulate_ops *ops); |
183 | 183 | ||
184 | #endif /* __X86_EMULATE_H__ */ | 184 | #endif /* ASM_X86__KVM_X86_EMULATE_H */ |
diff --git a/include/asm-x86/ldt.h b/include/asm-x86/ldt.h index 20c597242b53..a5228504d867 100644 --- a/include/asm-x86/ldt.h +++ b/include/asm-x86/ldt.h | |||
@@ -3,8 +3,8 @@ | |||
3 | * | 3 | * |
4 | * Definitions of structures used with the modify_ldt system call. | 4 | * Definitions of structures used with the modify_ldt system call. |
5 | */ | 5 | */ |
6 | #ifndef _ASM_X86_LDT_H | 6 | #ifndef ASM_X86__LDT_H |
7 | #define _ASM_X86_LDT_H | 7 | #define ASM_X86__LDT_H |
8 | 8 | ||
9 | /* Maximum number of LDT entries supported. */ | 9 | /* Maximum number of LDT entries supported. */ |
10 | #define LDT_ENTRIES 8192 | 10 | #define LDT_ENTRIES 8192 |
@@ -37,4 +37,4 @@ struct user_desc { | |||
37 | #define MODIFY_LDT_CONTENTS_CODE 2 | 37 | #define MODIFY_LDT_CONTENTS_CODE 2 |
38 | 38 | ||
39 | #endif /* !__ASSEMBLY__ */ | 39 | #endif /* !__ASSEMBLY__ */ |
40 | #endif | 40 | #endif /* ASM_X86__LDT_H */ |
diff --git a/include/asm-x86/lguest.h b/include/asm-x86/lguest.h index be4a7247fa2b..7505e947ed27 100644 --- a/include/asm-x86/lguest.h +++ b/include/asm-x86/lguest.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _X86_LGUEST_H | 1 | #ifndef ASM_X86__LGUEST_H |
2 | #define _X86_LGUEST_H | 2 | #define ASM_X86__LGUEST_H |
3 | 3 | ||
4 | #define GDT_ENTRY_LGUEST_CS 10 | 4 | #define GDT_ENTRY_LGUEST_CS 10 |
5 | #define GDT_ENTRY_LGUEST_DS 11 | 5 | #define GDT_ENTRY_LGUEST_DS 11 |
@@ -91,4 +91,4 @@ static inline void lguest_set_ts(void) | |||
91 | 91 | ||
92 | #endif /* __ASSEMBLY__ */ | 92 | #endif /* __ASSEMBLY__ */ |
93 | 93 | ||
94 | #endif | 94 | #endif /* ASM_X86__LGUEST_H */ |
diff --git a/include/asm-x86/lguest_hcall.h b/include/asm-x86/lguest_hcall.h index a3241f28e34a..8f034ba4b53e 100644 --- a/include/asm-x86/lguest_hcall.h +++ b/include/asm-x86/lguest_hcall.h | |||
@@ -1,6 +1,6 @@ | |||
1 | /* Architecture specific portion of the lguest hypercalls */ | 1 | /* Architecture specific portion of the lguest hypercalls */ |
2 | #ifndef _X86_LGUEST_HCALL_H | 2 | #ifndef ASM_X86__LGUEST_HCALL_H |
3 | #define _X86_LGUEST_HCALL_H | 3 | #define ASM_X86__LGUEST_HCALL_H |
4 | 4 | ||
5 | #define LHCALL_FLUSH_ASYNC 0 | 5 | #define LHCALL_FLUSH_ASYNC 0 |
6 | #define LHCALL_LGUEST_INIT 1 | 6 | #define LHCALL_LGUEST_INIT 1 |
@@ -68,4 +68,4 @@ struct hcall_args { | |||
68 | }; | 68 | }; |
69 | 69 | ||
70 | #endif /* !__ASSEMBLY__ */ | 70 | #endif /* !__ASSEMBLY__ */ |
71 | #endif /* _I386_LGUEST_HCALL_H */ | 71 | #endif /* ASM_X86__LGUEST_HCALL_H */ |
diff --git a/include/asm-x86/linkage.h b/include/asm-x86/linkage.h index 64e444f8e85b..42d8b62ee8ab 100644 --- a/include/asm-x86/linkage.h +++ b/include/asm-x86/linkage.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_LINKAGE_H | 1 | #ifndef ASM_X86__LINKAGE_H |
2 | #define __ASM_LINKAGE_H | 2 | #define ASM_X86__LINKAGE_H |
3 | 3 | ||
4 | #undef notrace | 4 | #undef notrace |
5 | #define notrace __attribute__((no_instrument_function)) | 5 | #define notrace __attribute__((no_instrument_function)) |
@@ -57,5 +57,5 @@ | |||
57 | #define __ALIGN_STR ".align 16,0x90" | 57 | #define __ALIGN_STR ".align 16,0x90" |
58 | #endif | 58 | #endif |
59 | 59 | ||
60 | #endif | 60 | #endif /* ASM_X86__LINKAGE_H */ |
61 | 61 | ||
diff --git a/include/asm-x86/local.h b/include/asm-x86/local.h index 330a72496abd..ae91994fd6c9 100644 --- a/include/asm-x86/local.h +++ b/include/asm-x86/local.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ARCH_LOCAL_H | 1 | #ifndef ASM_X86__LOCAL_H |
2 | #define _ARCH_LOCAL_H | 2 | #define ASM_X86__LOCAL_H |
3 | 3 | ||
4 | #include <linux/percpu.h> | 4 | #include <linux/percpu.h> |
5 | 5 | ||
@@ -232,4 +232,4 @@ static inline long local_sub_return(long i, local_t *l) | |||
232 | #define __cpu_local_add(i, l) cpu_local_add((i), (l)) | 232 | #define __cpu_local_add(i, l) cpu_local_add((i), (l)) |
233 | #define __cpu_local_sub(i, l) cpu_local_sub((i), (l)) | 233 | #define __cpu_local_sub(i, l) cpu_local_sub((i), (l)) |
234 | 234 | ||
235 | #endif /* _ARCH_LOCAL_H */ | 235 | #endif /* ASM_X86__LOCAL_H */ |
diff --git a/include/asm-x86/mach-bigsmp/mach_apicdef.h b/include/asm-x86/mach-bigsmp/mach_apicdef.h deleted file mode 100644 index a58ab5a75c8c..000000000000 --- a/include/asm-x86/mach-bigsmp/mach_apicdef.h +++ /dev/null | |||
@@ -1,13 +0,0 @@ | |||
1 | #ifndef __ASM_MACH_APICDEF_H | ||
2 | #define __ASM_MACH_APICDEF_H | ||
3 | |||
4 | #define APIC_ID_MASK (0xFF<<24) | ||
5 | |||
6 | static inline unsigned get_apic_id(unsigned long x) | ||
7 | { | ||
8 | return (((x)>>24)&0xFF); | ||
9 | } | ||
10 | |||
11 | #define GET_APIC_ID(x) get_apic_id(x) | ||
12 | |||
13 | #endif | ||
diff --git a/include/asm-x86/mach-default/apm.h b/include/asm-x86/mach-default/apm.h index 989f34c37d32..2aa61b54fbd5 100644 --- a/include/asm-x86/mach-default/apm.h +++ b/include/asm-x86/mach-default/apm.h | |||
@@ -3,8 +3,8 @@ | |||
3 | * Split out from apm.c by Osamu Tomita <tomita@cinet.co.jp> | 3 | * Split out from apm.c by Osamu Tomita <tomita@cinet.co.jp> |
4 | */ | 4 | */ |
5 | 5 | ||
6 | #ifndef _ASM_APM_H | 6 | #ifndef ASM_X86__MACH_DEFAULT__APM_H |
7 | #define _ASM_APM_H | 7 | #define ASM_X86__MACH_DEFAULT__APM_H |
8 | 8 | ||
9 | #ifdef APM_ZERO_SEGS | 9 | #ifdef APM_ZERO_SEGS |
10 | # define APM_DO_ZERO_SEGS \ | 10 | # define APM_DO_ZERO_SEGS \ |
@@ -70,4 +70,4 @@ static inline u8 apm_bios_call_simple_asm(u32 func, u32 ebx_in, | |||
70 | return error; | 70 | return error; |
71 | } | 71 | } |
72 | 72 | ||
73 | #endif /* _ASM_APM_H */ | 73 | #endif /* ASM_X86__MACH_DEFAULT__APM_H */ |
diff --git a/include/asm-x86/mach-default/mach_apic.h b/include/asm-x86/mach-default/mach_apic.h index f3226b9a6b82..2a330a41b3dd 100644 --- a/include/asm-x86/mach-default/mach_apic.h +++ b/include/asm-x86/mach-default/mach_apic.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_MACH_APIC_H | 1 | #ifndef ASM_X86__MACH_DEFAULT__MACH_APIC_H |
2 | #define __ASM_MACH_APIC_H | 2 | #define ASM_X86__MACH_DEFAULT__MACH_APIC_H |
3 | 3 | ||
4 | #ifdef CONFIG_X86_LOCAL_APIC | 4 | #ifdef CONFIG_X86_LOCAL_APIC |
5 | 5 | ||
@@ -30,6 +30,8 @@ static inline cpumask_t target_cpus(void) | |||
30 | #define cpu_mask_to_apicid (genapic->cpu_mask_to_apicid) | 30 | #define cpu_mask_to_apicid (genapic->cpu_mask_to_apicid) |
31 | #define phys_pkg_id (genapic->phys_pkg_id) | 31 | #define phys_pkg_id (genapic->phys_pkg_id) |
32 | #define vector_allocation_domain (genapic->vector_allocation_domain) | 32 | #define vector_allocation_domain (genapic->vector_allocation_domain) |
33 | #define read_apic_id() (GET_APIC_ID(apic_read(APIC_ID))) | ||
34 | #define send_IPI_self (genapic->send_IPI_self) | ||
33 | extern void setup_apic_routing(void); | 35 | extern void setup_apic_routing(void); |
34 | #else | 36 | #else |
35 | #define INT_DELIVERY_MODE dest_LowestPrio | 37 | #define INT_DELIVERY_MODE dest_LowestPrio |
@@ -54,7 +56,7 @@ static inline void init_apic_ldr(void) | |||
54 | 56 | ||
55 | static inline int apic_id_registered(void) | 57 | static inline int apic_id_registered(void) |
56 | { | 58 | { |
57 | return physid_isset(GET_APIC_ID(read_apic_id()), phys_cpu_present_map); | 59 | return physid_isset(read_apic_id(), phys_cpu_present_map); |
58 | } | 60 | } |
59 | 61 | ||
60 | static inline unsigned int cpu_mask_to_apicid(cpumask_t cpumask) | 62 | static inline unsigned int cpu_mask_to_apicid(cpumask_t cpumask) |
@@ -138,4 +140,4 @@ static inline void enable_apic_mode(void) | |||
138 | } | 140 | } |
139 | 141 | ||
140 | #endif /* CONFIG_X86_LOCAL_APIC */ | 142 | #endif /* CONFIG_X86_LOCAL_APIC */ |
141 | #endif /* __ASM_MACH_APIC_H */ | 143 | #endif /* ASM_X86__MACH_DEFAULT__MACH_APIC_H */ |
diff --git a/include/asm-x86/mach-default/mach_apicdef.h b/include/asm-x86/mach-default/mach_apicdef.h index e4b29ba37de6..0c2d41c41b20 100644 --- a/include/asm-x86/mach-default/mach_apicdef.h +++ b/include/asm-x86/mach-default/mach_apicdef.h | |||
@@ -1,12 +1,12 @@ | |||
1 | #ifndef __ASM_MACH_APICDEF_H | 1 | #ifndef ASM_X86__MACH_DEFAULT__MACH_APICDEF_H |
2 | #define __ASM_MACH_APICDEF_H | 2 | #define ASM_X86__MACH_DEFAULT__MACH_APICDEF_H |
3 | 3 | ||
4 | #include <asm/apic.h> | 4 | #include <asm/apic.h> |
5 | 5 | ||
6 | #ifdef CONFIG_X86_64 | 6 | #ifdef CONFIG_X86_64 |
7 | #define APIC_ID_MASK (0xFFu<<24) | 7 | #define APIC_ID_MASK (genapic->apic_id_mask) |
8 | #define GET_APIC_ID(x) (((x)>>24)&0xFFu) | 8 | #define GET_APIC_ID(x) (genapic->get_apic_id(x)) |
9 | #define SET_APIC_ID(x) (((x)<<24)) | 9 | #define SET_APIC_ID(x) (genapic->set_apic_id(x)) |
10 | #else | 10 | #else |
11 | #define APIC_ID_MASK (0xF<<24) | 11 | #define APIC_ID_MASK (0xF<<24) |
12 | static inline unsigned get_apic_id(unsigned long x) | 12 | static inline unsigned get_apic_id(unsigned long x) |
@@ -21,4 +21,4 @@ static inline unsigned get_apic_id(unsigned long x) | |||
21 | #define GET_APIC_ID(x) get_apic_id(x) | 21 | #define GET_APIC_ID(x) get_apic_id(x) |
22 | #endif | 22 | #endif |
23 | 23 | ||
24 | #endif | 24 | #endif /* ASM_X86__MACH_DEFAULT__MACH_APICDEF_H */ |
diff --git a/include/asm-x86/mach-default/mach_ipi.h b/include/asm-x86/mach-default/mach_ipi.h index be323364e68f..674bc7e50c35 100644 --- a/include/asm-x86/mach-default/mach_ipi.h +++ b/include/asm-x86/mach-default/mach_ipi.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_MACH_IPI_H | 1 | #ifndef ASM_X86__MACH_DEFAULT__MACH_IPI_H |
2 | #define __ASM_MACH_IPI_H | 2 | #define ASM_X86__MACH_DEFAULT__MACH_IPI_H |
3 | 3 | ||
4 | /* Avoid include hell */ | 4 | /* Avoid include hell */ |
5 | #define NMI_VECTOR 0x02 | 5 | #define NMI_VECTOR 0x02 |
@@ -61,4 +61,4 @@ static inline void send_IPI_all(int vector) | |||
61 | } | 61 | } |
62 | #endif | 62 | #endif |
63 | 63 | ||
64 | #endif /* __ASM_MACH_IPI_H */ | 64 | #endif /* ASM_X86__MACH_DEFAULT__MACH_IPI_H */ |
diff --git a/include/asm-x86/mach-default/mach_mpparse.h b/include/asm-x86/mach-default/mach_mpparse.h index d14108505bb8..9c381f2815ac 100644 --- a/include/asm-x86/mach-default/mach_mpparse.h +++ b/include/asm-x86/mach-default/mach_mpparse.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_MACH_MPPARSE_H | 1 | #ifndef ASM_X86__MACH_DEFAULT__MACH_MPPARSE_H |
2 | #define __ASM_MACH_MPPARSE_H | 2 | #define ASM_X86__MACH_DEFAULT__MACH_MPPARSE_H |
3 | 3 | ||
4 | static inline int mps_oem_check(struct mp_config_table *mpc, char *oem, | 4 | static inline int mps_oem_check(struct mp_config_table *mpc, char *oem, |
5 | char *productid) | 5 | char *productid) |
@@ -14,4 +14,4 @@ static inline int acpi_madt_oem_check(char *oem_id, char *oem_table_id) | |||
14 | } | 14 | } |
15 | 15 | ||
16 | 16 | ||
17 | #endif /* __ASM_MACH_MPPARSE_H */ | 17 | #endif /* ASM_X86__MACH_DEFAULT__MACH_MPPARSE_H */ |
diff --git a/include/asm-x86/mach-default/mach_mpspec.h b/include/asm-x86/mach-default/mach_mpspec.h index 51c9a9775932..d77646f011f1 100644 --- a/include/asm-x86/mach-default/mach_mpspec.h +++ b/include/asm-x86/mach-default/mach_mpspec.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_MACH_MPSPEC_H | 1 | #ifndef ASM_X86__MACH_DEFAULT__MACH_MPSPEC_H |
2 | #define __ASM_MACH_MPSPEC_H | 2 | #define ASM_X86__MACH_DEFAULT__MACH_MPSPEC_H |
3 | 3 | ||
4 | #define MAX_IRQ_SOURCES 256 | 4 | #define MAX_IRQ_SOURCES 256 |
5 | 5 | ||
@@ -9,4 +9,4 @@ | |||
9 | #define MAX_MP_BUSSES 32 | 9 | #define MAX_MP_BUSSES 32 |
10 | #endif | 10 | #endif |
11 | 11 | ||
12 | #endif /* __ASM_MACH_MPSPEC_H */ | 12 | #endif /* ASM_X86__MACH_DEFAULT__MACH_MPSPEC_H */ |
diff --git a/include/asm-x86/mach-default/mach_timer.h b/include/asm-x86/mach-default/mach_timer.h index 4b76e536cd98..990b15833834 100644 --- a/include/asm-x86/mach-default/mach_timer.h +++ b/include/asm-x86/mach-default/mach_timer.h | |||
@@ -10,8 +10,8 @@ | |||
10 | * directly because of the awkward 8-bit access mechanism of the 82C54 | 10 | * directly because of the awkward 8-bit access mechanism of the 82C54 |
11 | * device. | 11 | * device. |
12 | */ | 12 | */ |
13 | #ifndef _MACH_TIMER_H | 13 | #ifndef ASM_X86__MACH_DEFAULT__MACH_TIMER_H |
14 | #define _MACH_TIMER_H | 14 | #define ASM_X86__MACH_DEFAULT__MACH_TIMER_H |
15 | 15 | ||
16 | #define CALIBRATE_TIME_MSEC 30 /* 30 msecs */ | 16 | #define CALIBRATE_TIME_MSEC 30 /* 30 msecs */ |
17 | #define CALIBRATE_LATCH \ | 17 | #define CALIBRATE_LATCH \ |
@@ -45,4 +45,4 @@ static inline void mach_countup(unsigned long *count_p) | |||
45 | *count_p = count; | 45 | *count_p = count; |
46 | } | 46 | } |
47 | 47 | ||
48 | #endif /* !_MACH_TIMER_H */ | 48 | #endif /* ASM_X86__MACH_DEFAULT__MACH_TIMER_H */ |
diff --git a/include/asm-x86/mach-default/mach_traps.h b/include/asm-x86/mach-default/mach_traps.h index 2fe7705c0484..ff8778f26b84 100644 --- a/include/asm-x86/mach-default/mach_traps.h +++ b/include/asm-x86/mach-default/mach_traps.h | |||
@@ -2,17 +2,11 @@ | |||
2 | * Machine specific NMI handling for generic. | 2 | * Machine specific NMI handling for generic. |
3 | * Split out from traps.c by Osamu Tomita <tomita@cinet.co.jp> | 3 | * Split out from traps.c by Osamu Tomita <tomita@cinet.co.jp> |
4 | */ | 4 | */ |
5 | #ifndef _MACH_TRAPS_H | 5 | #ifndef ASM_X86__MACH_DEFAULT__MACH_TRAPS_H |
6 | #define _MACH_TRAPS_H | 6 | #define ASM_X86__MACH_DEFAULT__MACH_TRAPS_H |
7 | 7 | ||
8 | #include <asm/mc146818rtc.h> | 8 | #include <asm/mc146818rtc.h> |
9 | 9 | ||
10 | static inline void clear_mem_error(unsigned char reason) | ||
11 | { | ||
12 | reason = (reason & 0xf) | 4; | ||
13 | outb(reason, 0x61); | ||
14 | } | ||
15 | |||
16 | static inline unsigned char get_nmi_reason(void) | 10 | static inline unsigned char get_nmi_reason(void) |
17 | { | 11 | { |
18 | return inb(0x61); | 12 | return inb(0x61); |
@@ -36,4 +30,4 @@ static inline void reassert_nmi(void) | |||
36 | unlock_cmos(); | 30 | unlock_cmos(); |
37 | } | 31 | } |
38 | 32 | ||
39 | #endif /* !_MACH_TRAPS_H */ | 33 | #endif /* ASM_X86__MACH_DEFAULT__MACH_TRAPS_H */ |
diff --git a/include/asm-x86/mach-default/mach_wakecpu.h b/include/asm-x86/mach-default/mach_wakecpu.h index 3ebb17893aa5..361b810f5160 100644 --- a/include/asm-x86/mach-default/mach_wakecpu.h +++ b/include/asm-x86/mach-default/mach_wakecpu.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_MACH_WAKECPU_H | 1 | #ifndef ASM_X86__MACH_DEFAULT__MACH_WAKECPU_H |
2 | #define __ASM_MACH_WAKECPU_H | 2 | #define ASM_X86__MACH_DEFAULT__MACH_WAKECPU_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * This file copes with machines that wakeup secondary CPUs by the | 5 | * This file copes with machines that wakeup secondary CPUs by the |
@@ -39,4 +39,4 @@ static inline void restore_NMI_vector(unsigned short *high, unsigned short *low) | |||
39 | #define inquire_remote_apic(apicid) {} | 39 | #define inquire_remote_apic(apicid) {} |
40 | #endif | 40 | #endif |
41 | 41 | ||
42 | #endif /* __ASM_MACH_WAKECPU_H */ | 42 | #endif /* ASM_X86__MACH_DEFAULT__MACH_WAKECPU_H */ |
diff --git a/include/asm-x86/mach-generic/gpio.h b/include/asm-x86/mach-generic/gpio.h index 5305dcb96df2..6ce0f7786ef8 100644 --- a/include/asm-x86/mach-generic/gpio.h +++ b/include/asm-x86/mach-generic/gpio.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_MACH_GENERIC_GPIO_H | 1 | #ifndef ASM_X86__MACH_GENERIC__GPIO_H |
2 | #define __ASM_MACH_GENERIC_GPIO_H | 2 | #define ASM_X86__MACH_GENERIC__GPIO_H |
3 | 3 | ||
4 | int gpio_request(unsigned gpio, const char *label); | 4 | int gpio_request(unsigned gpio, const char *label); |
5 | void gpio_free(unsigned gpio); | 5 | void gpio_free(unsigned gpio); |
@@ -12,4 +12,4 @@ int irq_to_gpio(unsigned irq); | |||
12 | 12 | ||
13 | #include <asm-generic/gpio.h> /* cansleep wrappers */ | 13 | #include <asm-generic/gpio.h> /* cansleep wrappers */ |
14 | 14 | ||
15 | #endif /* __ASM_MACH_GENERIC_GPIO_H */ | 15 | #endif /* ASM_X86__MACH_GENERIC__GPIO_H */ |
diff --git a/include/asm-x86/mach-generic/irq_vectors_limits.h b/include/asm-x86/mach-generic/irq_vectors_limits.h index 890ce3f5e09a..f7870e1a220d 100644 --- a/include/asm-x86/mach-generic/irq_vectors_limits.h +++ b/include/asm-x86/mach-generic/irq_vectors_limits.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_IRQ_VECTORS_LIMITS_H | 1 | #ifndef ASM_X86__MACH_GENERIC__IRQ_VECTORS_LIMITS_H |
2 | #define _ASM_IRQ_VECTORS_LIMITS_H | 2 | #define ASM_X86__MACH_GENERIC__IRQ_VECTORS_LIMITS_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * For Summit or generic (i.e. installer) kernels, we have lots of I/O APICs, | 5 | * For Summit or generic (i.e. installer) kernels, we have lots of I/O APICs, |
@@ -11,4 +11,4 @@ | |||
11 | #define NR_IRQS 224 | 11 | #define NR_IRQS 224 |
12 | #define NR_IRQ_VECTORS 1024 | 12 | #define NR_IRQ_VECTORS 1024 |
13 | 13 | ||
14 | #endif /* _ASM_IRQ_VECTORS_LIMITS_H */ | 14 | #endif /* ASM_X86__MACH_GENERIC__IRQ_VECTORS_LIMITS_H */ |
diff --git a/include/asm-x86/mach-generic/mach_apic.h b/include/asm-x86/mach-generic/mach_apic.h index 6eff343e1233..5d010c6881dd 100644 --- a/include/asm-x86/mach-generic/mach_apic.h +++ b/include/asm-x86/mach-generic/mach_apic.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_MACH_APIC_H | 1 | #ifndef ASM_X86__MACH_GENERIC__MACH_APIC_H |
2 | #define __ASM_MACH_APIC_H | 2 | #define ASM_X86__MACH_GENERIC__MACH_APIC_H |
3 | 3 | ||
4 | #include <asm/genapic.h> | 4 | #include <asm/genapic.h> |
5 | 5 | ||
@@ -29,4 +29,4 @@ | |||
29 | 29 | ||
30 | extern void generic_bigsmp_probe(void); | 30 | extern void generic_bigsmp_probe(void); |
31 | 31 | ||
32 | #endif /* __ASM_MACH_APIC_H */ | 32 | #endif /* ASM_X86__MACH_GENERIC__MACH_APIC_H */ |
diff --git a/include/asm-x86/mach-generic/mach_apicdef.h b/include/asm-x86/mach-generic/mach_apicdef.h index 28ed98972ca8..1657f38b8f27 100644 --- a/include/asm-x86/mach-generic/mach_apicdef.h +++ b/include/asm-x86/mach-generic/mach_apicdef.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _GENAPIC_MACH_APICDEF_H | 1 | #ifndef ASM_X86__MACH_GENERIC__MACH_APICDEF_H |
2 | #define _GENAPIC_MACH_APICDEF_H 1 | 2 | #define ASM_X86__MACH_GENERIC__MACH_APICDEF_H |
3 | 3 | ||
4 | #ifndef APIC_DEFINITION | 4 | #ifndef APIC_DEFINITION |
5 | #include <asm/genapic.h> | 5 | #include <asm/genapic.h> |
@@ -8,4 +8,4 @@ | |||
8 | #define APIC_ID_MASK (genapic->apic_id_mask) | 8 | #define APIC_ID_MASK (genapic->apic_id_mask) |
9 | #endif | 9 | #endif |
10 | 10 | ||
11 | #endif | 11 | #endif /* ASM_X86__MACH_GENERIC__MACH_APICDEF_H */ |
diff --git a/include/asm-x86/mach-generic/mach_ipi.h b/include/asm-x86/mach-generic/mach_ipi.h index 441b0fe3ed1d..f67433dbd65f 100644 --- a/include/asm-x86/mach-generic/mach_ipi.h +++ b/include/asm-x86/mach-generic/mach_ipi.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _MACH_IPI_H | 1 | #ifndef ASM_X86__MACH_GENERIC__MACH_IPI_H |
2 | #define _MACH_IPI_H 1 | 2 | #define ASM_X86__MACH_GENERIC__MACH_IPI_H |
3 | 3 | ||
4 | #include <asm/genapic.h> | 4 | #include <asm/genapic.h> |
5 | 5 | ||
@@ -7,4 +7,4 @@ | |||
7 | #define send_IPI_allbutself (genapic->send_IPI_allbutself) | 7 | #define send_IPI_allbutself (genapic->send_IPI_allbutself) |
8 | #define send_IPI_all (genapic->send_IPI_all) | 8 | #define send_IPI_all (genapic->send_IPI_all) |
9 | 9 | ||
10 | #endif | 10 | #endif /* ASM_X86__MACH_GENERIC__MACH_IPI_H */ |
diff --git a/include/asm-x86/mach-generic/mach_mpparse.h b/include/asm-x86/mach-generic/mach_mpparse.h index 586cadbf3787..3115564e557c 100644 --- a/include/asm-x86/mach-generic/mach_mpparse.h +++ b/include/asm-x86/mach-generic/mach_mpparse.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _MACH_MPPARSE_H | 1 | #ifndef ASM_X86__MACH_GENERIC__MACH_MPPARSE_H |
2 | #define _MACH_MPPARSE_H 1 | 2 | #define ASM_X86__MACH_GENERIC__MACH_MPPARSE_H |
3 | 3 | ||
4 | 4 | ||
5 | extern int mps_oem_check(struct mp_config_table *mpc, char *oem, | 5 | extern int mps_oem_check(struct mp_config_table *mpc, char *oem, |
@@ -7,4 +7,4 @@ extern int mps_oem_check(struct mp_config_table *mpc, char *oem, | |||
7 | 7 | ||
8 | extern int acpi_madt_oem_check(char *oem_id, char *oem_table_id); | 8 | extern int acpi_madt_oem_check(char *oem_id, char *oem_table_id); |
9 | 9 | ||
10 | #endif | 10 | #endif /* ASM_X86__MACH_GENERIC__MACH_MPPARSE_H */ |
diff --git a/include/asm-x86/mach-generic/mach_mpspec.h b/include/asm-x86/mach-generic/mach_mpspec.h index c83c120be538..6061b153613e 100644 --- a/include/asm-x86/mach-generic/mach_mpspec.h +++ b/include/asm-x86/mach-generic/mach_mpspec.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_MACH_MPSPEC_H | 1 | #ifndef ASM_X86__MACH_GENERIC__MACH_MPSPEC_H |
2 | #define __ASM_MACH_MPSPEC_H | 2 | #define ASM_X86__MACH_GENERIC__MACH_MPSPEC_H |
3 | 3 | ||
4 | #define MAX_IRQ_SOURCES 256 | 4 | #define MAX_IRQ_SOURCES 256 |
5 | 5 | ||
@@ -9,4 +9,4 @@ | |||
9 | 9 | ||
10 | extern void numaq_mps_oem_check(struct mp_config_table *mpc, char *oem, | 10 | extern void numaq_mps_oem_check(struct mp_config_table *mpc, char *oem, |
11 | char *productid); | 11 | char *productid); |
12 | #endif /* __ASM_MACH_MPSPEC_H */ | 12 | #endif /* ASM_X86__MACH_GENERIC__MACH_MPSPEC_H */ |
diff --git a/include/asm-x86/mach-rdc321x/gpio.h b/include/asm-x86/mach-rdc321x/gpio.h index acce0b7d397b..94b6cdf532e2 100644 --- a/include/asm-x86/mach-rdc321x/gpio.h +++ b/include/asm-x86/mach-rdc321x/gpio.h | |||
@@ -1,5 +1,7 @@ | |||
1 | #ifndef _RDC321X_GPIO_H | 1 | #ifndef ASM_X86__MACH_RDC321X__GPIO_H |
2 | #define _RDC321X_GPIO_H | 2 | #define ASM_X86__MACH_RDC321X__GPIO_H |
3 | |||
4 | #include <linux/kernel.h> | ||
3 | 5 | ||
4 | extern int rdc_gpio_get_value(unsigned gpio); | 6 | extern int rdc_gpio_get_value(unsigned gpio); |
5 | extern void rdc_gpio_set_value(unsigned gpio, int value); | 7 | extern void rdc_gpio_set_value(unsigned gpio, int value); |
@@ -18,6 +20,7 @@ static inline int gpio_request(unsigned gpio, const char *label) | |||
18 | 20 | ||
19 | static inline void gpio_free(unsigned gpio) | 21 | static inline void gpio_free(unsigned gpio) |
20 | { | 22 | { |
23 | might_sleep(); | ||
21 | rdc_gpio_free(gpio); | 24 | rdc_gpio_free(gpio); |
22 | } | 25 | } |
23 | 26 | ||
@@ -54,4 +57,4 @@ static inline int irq_to_gpio(unsigned irq) | |||
54 | /* For cansleep */ | 57 | /* For cansleep */ |
55 | #include <asm-generic/gpio.h> | 58 | #include <asm-generic/gpio.h> |
56 | 59 | ||
57 | #endif /* _RDC321X_GPIO_H_ */ | 60 | #endif /* ASM_X86__MACH_RDC321X__GPIO_H */ |
diff --git a/include/asm-x86/mach-summit/mach_apicdef.h b/include/asm-x86/mach-summit/mach_apicdef.h deleted file mode 100644 index a58ab5a75c8c..000000000000 --- a/include/asm-x86/mach-summit/mach_apicdef.h +++ /dev/null | |||
@@ -1,13 +0,0 @@ | |||
1 | #ifndef __ASM_MACH_APICDEF_H | ||
2 | #define __ASM_MACH_APICDEF_H | ||
3 | |||
4 | #define APIC_ID_MASK (0xFF<<24) | ||
5 | |||
6 | static inline unsigned get_apic_id(unsigned long x) | ||
7 | { | ||
8 | return (((x)>>24)&0xFF); | ||
9 | } | ||
10 | |||
11 | #define GET_APIC_ID(x) get_apic_id(x) | ||
12 | |||
13 | #endif | ||
diff --git a/include/asm-x86/math_emu.h b/include/asm-x86/math_emu.h index 9bf4ae93ab10..5768d8e95c8c 100644 --- a/include/asm-x86/math_emu.h +++ b/include/asm-x86/math_emu.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _I386_MATH_EMU_H | 1 | #ifndef ASM_X86__MATH_EMU_H |
2 | #define _I386_MATH_EMU_H | 2 | #define ASM_X86__MATH_EMU_H |
3 | 3 | ||
4 | /* This structure matches the layout of the data saved to the stack | 4 | /* This structure matches the layout of the data saved to the stack |
5 | following a device-not-present interrupt, part of it saved | 5 | following a device-not-present interrupt, part of it saved |
@@ -28,4 +28,4 @@ struct info { | |||
28 | long ___vm86_fs; | 28 | long ___vm86_fs; |
29 | long ___vm86_gs; | 29 | long ___vm86_gs; |
30 | }; | 30 | }; |
31 | #endif | 31 | #endif /* ASM_X86__MATH_EMU_H */ |
diff --git a/include/asm-x86/mc146818rtc.h b/include/asm-x86/mc146818rtc.h index daf1ccde77af..a995f33176cd 100644 --- a/include/asm-x86/mc146818rtc.h +++ b/include/asm-x86/mc146818rtc.h | |||
@@ -1,8 +1,8 @@ | |||
1 | /* | 1 | /* |
2 | * Machine dependent access functions for RTC registers. | 2 | * Machine dependent access functions for RTC registers. |
3 | */ | 3 | */ |
4 | #ifndef _ASM_MC146818RTC_H | 4 | #ifndef ASM_X86__MC146818RTC_H |
5 | #define _ASM_MC146818RTC_H | 5 | #define ASM_X86__MC146818RTC_H |
6 | 6 | ||
7 | #include <asm/io.h> | 7 | #include <asm/io.h> |
8 | #include <asm/system.h> | 8 | #include <asm/system.h> |
@@ -101,4 +101,4 @@ extern unsigned long mach_get_cmos_time(void); | |||
101 | 101 | ||
102 | #define RTC_IRQ 8 | 102 | #define RTC_IRQ 8 |
103 | 103 | ||
104 | #endif /* _ASM_MC146818RTC_H */ | 104 | #endif /* ASM_X86__MC146818RTC_H */ |
diff --git a/include/asm-x86/mca.h b/include/asm-x86/mca.h index 09adf2eac4dc..60d1ed287b13 100644 --- a/include/asm-x86/mca.h +++ b/include/asm-x86/mca.h | |||
@@ -1,8 +1,8 @@ | |||
1 | /* -*- mode: c; c-basic-offset: 8 -*- */ | 1 | /* -*- mode: c; c-basic-offset: 8 -*- */ |
2 | 2 | ||
3 | /* Platform specific MCA defines */ | 3 | /* Platform specific MCA defines */ |
4 | #ifndef _ASM_MCA_H | 4 | #ifndef ASM_X86__MCA_H |
5 | #define _ASM_MCA_H | 5 | #define ASM_X86__MCA_H |
6 | 6 | ||
7 | /* Maximal number of MCA slots - actually, some machines have less, but | 7 | /* Maximal number of MCA slots - actually, some machines have less, but |
8 | * they all have sufficient number of POS registers to cover 8. | 8 | * they all have sufficient number of POS registers to cover 8. |
@@ -40,4 +40,4 @@ | |||
40 | */ | 40 | */ |
41 | #define MCA_NUMADAPTERS (MCA_MAX_SLOT_NR+3) | 41 | #define MCA_NUMADAPTERS (MCA_MAX_SLOT_NR+3) |
42 | 42 | ||
43 | #endif | 43 | #endif /* ASM_X86__MCA_H */ |
diff --git a/include/asm-x86/mca_dma.h b/include/asm-x86/mca_dma.h index c3dca6edc6b1..49f22be237d2 100644 --- a/include/asm-x86/mca_dma.h +++ b/include/asm-x86/mca_dma.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef MCA_DMA_H | 1 | #ifndef ASM_X86__MCA_DMA_H |
2 | #define MCA_DMA_H | 2 | #define ASM_X86__MCA_DMA_H |
3 | 3 | ||
4 | #include <asm/io.h> | 4 | #include <asm/io.h> |
5 | #include <linux/ioport.h> | 5 | #include <linux/ioport.h> |
@@ -198,4 +198,4 @@ static inline void mca_set_dma_mode(unsigned int dmanr, unsigned int mode) | |||
198 | outb(mode, MCA_DMA_REG_EXE); | 198 | outb(mode, MCA_DMA_REG_EXE); |
199 | } | 199 | } |
200 | 200 | ||
201 | #endif /* MCA_DMA_H */ | 201 | #endif /* ASM_X86__MCA_DMA_H */ |
diff --git a/include/asm-x86/mce.h b/include/asm-x86/mce.h index 531eaa587455..036133eaf744 100644 --- a/include/asm-x86/mce.h +++ b/include/asm-x86/mce.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_MCE_H | 1 | #ifndef ASM_X86__MCE_H |
2 | #define _ASM_X86_MCE_H | 2 | #define ASM_X86__MCE_H |
3 | 3 | ||
4 | #ifdef __x86_64__ | 4 | #ifdef __x86_64__ |
5 | 5 | ||
@@ -127,4 +127,4 @@ extern void restart_mce(void); | |||
127 | 127 | ||
128 | #endif /* __KERNEL__ */ | 128 | #endif /* __KERNEL__ */ |
129 | 129 | ||
130 | #endif | 130 | #endif /* ASM_X86__MCE_H */ |
diff --git a/include/asm-x86/microcode.h b/include/asm-x86/microcode.h new file mode 100644 index 000000000000..62c793bb70ca --- /dev/null +++ b/include/asm-x86/microcode.h | |||
@@ -0,0 +1,47 @@ | |||
1 | #ifndef ASM_X86__MICROCODE_H | ||
2 | #define ASM_X86__MICROCODE_H | ||
3 | |||
4 | struct cpu_signature { | ||
5 | unsigned int sig; | ||
6 | unsigned int pf; | ||
7 | unsigned int rev; | ||
8 | }; | ||
9 | |||
10 | struct device; | ||
11 | |||
12 | struct microcode_ops { | ||
13 | int (*request_microcode_user) (int cpu, const void __user *buf, size_t size); | ||
14 | int (*request_microcode_fw) (int cpu, struct device *device); | ||
15 | |||
16 | void (*apply_microcode) (int cpu); | ||
17 | |||
18 | int (*collect_cpu_info) (int cpu, struct cpu_signature *csig); | ||
19 | void (*microcode_fini_cpu) (int cpu); | ||
20 | }; | ||
21 | |||
22 | struct ucode_cpu_info { | ||
23 | struct cpu_signature cpu_sig; | ||
24 | int valid; | ||
25 | void *mc; | ||
26 | }; | ||
27 | extern struct ucode_cpu_info ucode_cpu_info[]; | ||
28 | |||
29 | #ifdef CONFIG_MICROCODE_INTEL | ||
30 | extern struct microcode_ops * __init init_intel_microcode(void); | ||
31 | #else | ||
32 | static inline struct microcode_ops * __init init_intel_microcode(void) | ||
33 | { | ||
34 | return NULL; | ||
35 | } | ||
36 | #endif /* CONFIG_MICROCODE_INTEL */ | ||
37 | |||
38 | #ifdef CONFIG_MICROCODE_AMD | ||
39 | extern struct microcode_ops * __init init_amd_microcode(void); | ||
40 | #else | ||
41 | static inline struct microcode_ops * __init init_amd_microcode(void) | ||
42 | { | ||
43 | return NULL; | ||
44 | } | ||
45 | #endif | ||
46 | |||
47 | #endif /* ASM_X86__MICROCODE_H */ | ||
diff --git a/include/asm-x86/mman.h b/include/asm-x86/mman.h index 90bc4108a4fd..4ef28e6de383 100644 --- a/include/asm-x86/mman.h +++ b/include/asm-x86/mman.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_MMAN_H | 1 | #ifndef ASM_X86__MMAN_H |
2 | #define _ASM_X86_MMAN_H | 2 | #define ASM_X86__MMAN_H |
3 | 3 | ||
4 | #include <asm-generic/mman.h> | 4 | #include <asm-generic/mman.h> |
5 | 5 | ||
@@ -17,4 +17,4 @@ | |||
17 | #define MCL_CURRENT 1 /* lock all current mappings */ | 17 | #define MCL_CURRENT 1 /* lock all current mappings */ |
18 | #define MCL_FUTURE 2 /* lock all future mappings */ | 18 | #define MCL_FUTURE 2 /* lock all future mappings */ |
19 | 19 | ||
20 | #endif /* _ASM_X86_MMAN_H */ | 20 | #endif /* ASM_X86__MMAN_H */ |
diff --git a/include/asm-x86/mmconfig.h b/include/asm-x86/mmconfig.h index e293ab81e850..fb79b1cf5d07 100644 --- a/include/asm-x86/mmconfig.h +++ b/include/asm-x86/mmconfig.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_MMCONFIG_H | 1 | #ifndef ASM_X86__MMCONFIG_H |
2 | #define _ASM_MMCONFIG_H | 2 | #define ASM_X86__MMCONFIG_H |
3 | 3 | ||
4 | #ifdef CONFIG_PCI_MMCONFIG | 4 | #ifdef CONFIG_PCI_MMCONFIG |
5 | extern void __cpuinit fam10h_check_enable_mmcfg(void); | 5 | extern void __cpuinit fam10h_check_enable_mmcfg(void); |
@@ -9,4 +9,4 @@ static inline void fam10h_check_enable_mmcfg(void) { } | |||
9 | static inline void check_enable_amd_mmconf_dmi(void) { } | 9 | static inline void check_enable_amd_mmconf_dmi(void) { } |
10 | #endif | 10 | #endif |
11 | 11 | ||
12 | #endif | 12 | #endif /* ASM_X86__MMCONFIG_H */ |
diff --git a/include/asm-x86/mmu.h b/include/asm-x86/mmu.h index 00e88679e11f..9d5aff14334a 100644 --- a/include/asm-x86/mmu.h +++ b/include/asm-x86/mmu.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_MMU_H | 1 | #ifndef ASM_X86__MMU_H |
2 | #define _ASM_X86_MMU_H | 2 | #define ASM_X86__MMU_H |
3 | 3 | ||
4 | #include <linux/spinlock.h> | 4 | #include <linux/spinlock.h> |
5 | #include <linux/mutex.h> | 5 | #include <linux/mutex.h> |
@@ -7,14 +7,9 @@ | |||
7 | /* | 7 | /* |
8 | * The x86 doesn't have a mmu context, but | 8 | * The x86 doesn't have a mmu context, but |
9 | * we put the segment information here. | 9 | * we put the segment information here. |
10 | * | ||
11 | * cpu_vm_mask is used to optimize ldt flushing. | ||
12 | */ | 10 | */ |
13 | typedef struct { | 11 | typedef struct { |
14 | void *ldt; | 12 | void *ldt; |
15 | #ifdef CONFIG_X86_64 | ||
16 | rwlock_t ldtlock; | ||
17 | #endif | ||
18 | int size; | 13 | int size; |
19 | struct mutex lock; | 14 | struct mutex lock; |
20 | void *vdso; | 15 | void *vdso; |
@@ -28,4 +23,4 @@ static inline void leave_mm(int cpu) | |||
28 | } | 23 | } |
29 | #endif | 24 | #endif |
30 | 25 | ||
31 | #endif /* _ASM_X86_MMU_H */ | 26 | #endif /* ASM_X86__MMU_H */ |
diff --git a/include/asm-x86/mmu_context.h b/include/asm-x86/mmu_context.h index fac57014e7c6..8ec940bfd079 100644 --- a/include/asm-x86/mmu_context.h +++ b/include/asm-x86/mmu_context.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_X86_MMU_CONTEXT_H | 1 | #ifndef ASM_X86__MMU_CONTEXT_H |
2 | #define __ASM_X86_MMU_CONTEXT_H | 2 | #define ASM_X86__MMU_CONTEXT_H |
3 | 3 | ||
4 | #include <asm/desc.h> | 4 | #include <asm/desc.h> |
5 | #include <asm/atomic.h> | 5 | #include <asm/atomic.h> |
@@ -34,4 +34,4 @@ do { \ | |||
34 | } while (0); | 34 | } while (0); |
35 | 35 | ||
36 | 36 | ||
37 | #endif /* __ASM_X86_MMU_CONTEXT_H */ | 37 | #endif /* ASM_X86__MMU_CONTEXT_H */ |
diff --git a/include/asm-x86/mmu_context_32.h b/include/asm-x86/mmu_context_32.h index 824fc575c6d8..cce6f6e4afd6 100644 --- a/include/asm-x86/mmu_context_32.h +++ b/include/asm-x86/mmu_context_32.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __I386_SCHED_H | 1 | #ifndef ASM_X86__MMU_CONTEXT_32_H |
2 | #define __I386_SCHED_H | 2 | #define ASM_X86__MMU_CONTEXT_32_H |
3 | 3 | ||
4 | static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk) | 4 | static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk) |
5 | { | 5 | { |
@@ -53,4 +53,4 @@ static inline void switch_mm(struct mm_struct *prev, | |||
53 | #define deactivate_mm(tsk, mm) \ | 53 | #define deactivate_mm(tsk, mm) \ |
54 | asm("movl %0,%%gs": :"r" (0)); | 54 | asm("movl %0,%%gs": :"r" (0)); |
55 | 55 | ||
56 | #endif | 56 | #endif /* ASM_X86__MMU_CONTEXT_32_H */ |
diff --git a/include/asm-x86/mmu_context_64.h b/include/asm-x86/mmu_context_64.h index c7000634ccae..26758673c828 100644 --- a/include/asm-x86/mmu_context_64.h +++ b/include/asm-x86/mmu_context_64.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __X86_64_MMU_CONTEXT_H | 1 | #ifndef ASM_X86__MMU_CONTEXT_64_H |
2 | #define __X86_64_MMU_CONTEXT_H | 2 | #define ASM_X86__MMU_CONTEXT_64_H |
3 | 3 | ||
4 | #include <asm/pda.h> | 4 | #include <asm/pda.h> |
5 | 5 | ||
@@ -51,4 +51,4 @@ do { \ | |||
51 | asm volatile("movl %0,%%fs"::"r"(0)); \ | 51 | asm volatile("movl %0,%%fs"::"r"(0)); \ |
52 | } while (0) | 52 | } while (0) |
53 | 53 | ||
54 | #endif | 54 | #endif /* ASM_X86__MMU_CONTEXT_64_H */ |
diff --git a/include/asm-x86/mmx.h b/include/asm-x86/mmx.h index 940881218ff8..2e7299bb3653 100644 --- a/include/asm-x86/mmx.h +++ b/include/asm-x86/mmx.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_MMX_H | 1 | #ifndef ASM_X86__MMX_H |
2 | #define _ASM_MMX_H | 2 | #define ASM_X86__MMX_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * MMX 3Dnow! helper operations | 5 | * MMX 3Dnow! helper operations |
@@ -11,4 +11,4 @@ extern void *_mmx_memcpy(void *to, const void *from, size_t size); | |||
11 | extern void mmx_clear_page(void *page); | 11 | extern void mmx_clear_page(void *page); |
12 | extern void mmx_copy_page(void *to, void *from); | 12 | extern void mmx_copy_page(void *to, void *from); |
13 | 13 | ||
14 | #endif | 14 | #endif /* ASM_X86__MMX_H */ |
diff --git a/include/asm-x86/mmzone_32.h b/include/asm-x86/mmzone_32.h index 5862e6460658..121b65d61d86 100644 --- a/include/asm-x86/mmzone_32.h +++ b/include/asm-x86/mmzone_32.h | |||
@@ -3,8 +3,8 @@ | |||
3 | * | 3 | * |
4 | */ | 4 | */ |
5 | 5 | ||
6 | #ifndef _ASM_MMZONE_H_ | 6 | #ifndef ASM_X86__MMZONE_32_H |
7 | #define _ASM_MMZONE_H_ | 7 | #define ASM_X86__MMZONE_32_H |
8 | 8 | ||
9 | #include <asm/smp.h> | 9 | #include <asm/smp.h> |
10 | 10 | ||
@@ -131,4 +131,4 @@ static inline int pfn_valid(int pfn) | |||
131 | }) | 131 | }) |
132 | #endif /* CONFIG_NEED_MULTIPLE_NODES */ | 132 | #endif /* CONFIG_NEED_MULTIPLE_NODES */ |
133 | 133 | ||
134 | #endif /* _ASM_MMZONE_H_ */ | 134 | #endif /* ASM_X86__MMZONE_32_H */ |
diff --git a/include/asm-x86/mmzone_64.h b/include/asm-x86/mmzone_64.h index 594bd0dc1d08..6480f3333b2a 100644 --- a/include/asm-x86/mmzone_64.h +++ b/include/asm-x86/mmzone_64.h | |||
@@ -1,13 +1,13 @@ | |||
1 | /* K8 NUMA support */ | 1 | /* K8 NUMA support */ |
2 | /* Copyright 2002,2003 by Andi Kleen, SuSE Labs */ | 2 | /* Copyright 2002,2003 by Andi Kleen, SuSE Labs */ |
3 | /* 2.5 Version loosely based on the NUMAQ Code by Pat Gaughen. */ | 3 | /* 2.5 Version loosely based on the NUMAQ Code by Pat Gaughen. */ |
4 | #ifndef _ASM_X86_64_MMZONE_H | 4 | #ifndef ASM_X86__MMZONE_64_H |
5 | #define _ASM_X86_64_MMZONE_H 1 | 5 | #define ASM_X86__MMZONE_64_H |
6 | 6 | ||
7 | 7 | ||
8 | #ifdef CONFIG_NUMA | 8 | #ifdef CONFIG_NUMA |
9 | 9 | ||
10 | #define VIRTUAL_BUG_ON(x) | 10 | #include <linux/mmdebug.h> |
11 | 11 | ||
12 | #include <asm/smp.h> | 12 | #include <asm/smp.h> |
13 | 13 | ||
@@ -29,7 +29,6 @@ static inline __attribute__((pure)) int phys_to_nid(unsigned long addr) | |||
29 | { | 29 | { |
30 | unsigned nid; | 30 | unsigned nid; |
31 | VIRTUAL_BUG_ON(!memnodemap); | 31 | VIRTUAL_BUG_ON(!memnodemap); |
32 | VIRTUAL_BUG_ON((addr >> memnode_shift) >= memnodemapsize); | ||
33 | nid = memnodemap[addr >> memnode_shift]; | 32 | nid = memnodemap[addr >> memnode_shift]; |
34 | VIRTUAL_BUG_ON(nid >= MAX_NUMNODES || !node_data[nid]); | 33 | VIRTUAL_BUG_ON(nid >= MAX_NUMNODES || !node_data[nid]); |
35 | return nid; | 34 | return nid; |
@@ -49,4 +48,4 @@ extern int early_pfn_to_nid(unsigned long pfn); | |||
49 | #endif | 48 | #endif |
50 | 49 | ||
51 | #endif | 50 | #endif |
52 | #endif | 51 | #endif /* ASM_X86__MMZONE_64_H */ |
diff --git a/include/asm-x86/module.h b/include/asm-x86/module.h index bfedb247871c..864f2005fc1d 100644 --- a/include/asm-x86/module.h +++ b/include/asm-x86/module.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_MODULE_H | 1 | #ifndef ASM_X86__MODULE_H |
2 | #define _ASM_MODULE_H | 2 | #define ASM_X86__MODULE_H |
3 | 3 | ||
4 | /* x86_32/64 are simple */ | 4 | /* x86_32/64 are simple */ |
5 | struct mod_arch_specific {}; | 5 | struct mod_arch_specific {}; |
@@ -52,8 +52,6 @@ struct mod_arch_specific {}; | |||
52 | #define MODULE_PROC_FAMILY "EFFICEON " | 52 | #define MODULE_PROC_FAMILY "EFFICEON " |
53 | #elif defined CONFIG_MWINCHIPC6 | 53 | #elif defined CONFIG_MWINCHIPC6 |
54 | #define MODULE_PROC_FAMILY "WINCHIPC6 " | 54 | #define MODULE_PROC_FAMILY "WINCHIPC6 " |
55 | #elif defined CONFIG_MWINCHIP2 | ||
56 | #define MODULE_PROC_FAMILY "WINCHIP2 " | ||
57 | #elif defined CONFIG_MWINCHIP3D | 55 | #elif defined CONFIG_MWINCHIP3D |
58 | #define MODULE_PROC_FAMILY "WINCHIP3D " | 56 | #define MODULE_PROC_FAMILY "WINCHIP3D " |
59 | #elif defined CONFIG_MCYRIXIII | 57 | #elif defined CONFIG_MCYRIXIII |
@@ -79,4 +77,4 @@ struct mod_arch_specific {}; | |||
79 | # define MODULE_ARCH_VERMAGIC MODULE_PROC_FAMILY MODULE_STACKSIZE | 77 | # define MODULE_ARCH_VERMAGIC MODULE_PROC_FAMILY MODULE_STACKSIZE |
80 | #endif | 78 | #endif |
81 | 79 | ||
82 | #endif /* _ASM_MODULE_H */ | 80 | #endif /* ASM_X86__MODULE_H */ |
diff --git a/include/asm-x86/mpspec.h b/include/asm-x86/mpspec.h index b6995e567fcc..be2241a818f1 100644 --- a/include/asm-x86/mpspec.h +++ b/include/asm-x86/mpspec.h | |||
@@ -1,15 +1,16 @@ | |||
1 | #ifndef _AM_X86_MPSPEC_H | 1 | #ifndef ASM_X86__MPSPEC_H |
2 | #define _AM_X86_MPSPEC_H | 2 | #define ASM_X86__MPSPEC_H |
3 | 3 | ||
4 | #include <linux/init.h> | 4 | #include <linux/init.h> |
5 | 5 | ||
6 | #include <asm/mpspec_def.h> | 6 | #include <asm/mpspec_def.h> |
7 | 7 | ||
8 | extern int apic_version[MAX_APICS]; | ||
9 | |||
8 | #ifdef CONFIG_X86_32 | 10 | #ifdef CONFIG_X86_32 |
9 | #include <mach_mpspec.h> | 11 | #include <mach_mpspec.h> |
10 | 12 | ||
11 | extern unsigned int def_to_bigsmp; | 13 | extern unsigned int def_to_bigsmp; |
12 | extern int apic_version[MAX_APICS]; | ||
13 | extern u8 apicid_2_node[]; | 14 | extern u8 apicid_2_node[]; |
14 | extern int pic_mode; | 15 | extern int pic_mode; |
15 | 16 | ||
@@ -141,4 +142,4 @@ static inline void physid_set_mask_of_physid(int physid, physid_mask_t *map) | |||
141 | 142 | ||
142 | extern physid_mask_t phys_cpu_present_map; | 143 | extern physid_mask_t phys_cpu_present_map; |
143 | 144 | ||
144 | #endif | 145 | #endif /* ASM_X86__MPSPEC_H */ |
diff --git a/include/asm-x86/mpspec_def.h b/include/asm-x86/mpspec_def.h index 38d1e73b49e4..79166b048012 100644 --- a/include/asm-x86/mpspec_def.h +++ b/include/asm-x86/mpspec_def.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_MPSPEC_DEF_H | 1 | #ifndef ASM_X86__MPSPEC_DEF_H |
2 | #define __ASM_MPSPEC_DEF_H | 2 | #define ASM_X86__MPSPEC_DEF_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * Structure definitions for SMP machines following the | 5 | * Structure definitions for SMP machines following the |
@@ -177,4 +177,4 @@ enum mp_bustype { | |||
177 | MP_BUS_PCI, | 177 | MP_BUS_PCI, |
178 | MP_BUS_MCA, | 178 | MP_BUS_MCA, |
179 | }; | 179 | }; |
180 | #endif | 180 | #endif /* ASM_X86__MPSPEC_DEF_H */ |
diff --git a/include/asm-x86/msgbuf.h b/include/asm-x86/msgbuf.h index 7e4e9481f51c..1b538c907a3d 100644 --- a/include/asm-x86/msgbuf.h +++ b/include/asm-x86/msgbuf.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_MSGBUF_H | 1 | #ifndef ASM_X86__MSGBUF_H |
2 | #define _ASM_X86_MSGBUF_H | 2 | #define ASM_X86__MSGBUF_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * The msqid64_ds structure for i386 architecture. | 5 | * The msqid64_ds structure for i386 architecture. |
@@ -36,4 +36,4 @@ struct msqid64_ds { | |||
36 | unsigned long __unused5; | 36 | unsigned long __unused5; |
37 | }; | 37 | }; |
38 | 38 | ||
39 | #endif /* _ASM_X86_MSGBUF_H */ | 39 | #endif /* ASM_X86__MSGBUF_H */ |
diff --git a/include/asm-x86/msidef.h b/include/asm-x86/msidef.h index 296f29ce426d..ed9190246876 100644 --- a/include/asm-x86/msidef.h +++ b/include/asm-x86/msidef.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef ASM_MSIDEF_H | 1 | #ifndef ASM_X86__MSIDEF_H |
2 | #define ASM_MSIDEF_H | 2 | #define ASM_X86__MSIDEF_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * Constants for Intel APIC based MSI messages. | 5 | * Constants for Intel APIC based MSI messages. |
@@ -48,4 +48,8 @@ | |||
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 | 50 | ||
51 | #endif /* ASM_MSIDEF_H */ | 51 | #define MSI_ADDR_IR_EXT_INT (1 << 4) |
52 | #define MSI_ADDR_IR_SHV (1 << 3) | ||
53 | #define MSI_ADDR_IR_INDEX1(index) ((index & 0x8000) >> 13) | ||
54 | #define MSI_ADDR_IR_INDEX2(index) ((index & 0x7fff) << 5) | ||
55 | #endif /* ASM_X86__MSIDEF_H */ | ||
diff --git a/include/asm-x86/msr-index.h b/include/asm-x86/msr-index.h index 44bce773012e..dabd10f0bbee 100644 --- a/include/asm-x86/msr-index.h +++ b/include/asm-x86/msr-index.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_MSR_INDEX_H | 1 | #ifndef ASM_X86__MSR_INDEX_H |
2 | #define __ASM_MSR_INDEX_H | 2 | #define ASM_X86__MSR_INDEX_H |
3 | 3 | ||
4 | /* CPU model specific register (MSR) numbers */ | 4 | /* CPU model specific register (MSR) numbers */ |
5 | 5 | ||
@@ -176,6 +176,10 @@ | |||
176 | #define MSR_IA32_TSC 0x00000010 | 176 | #define MSR_IA32_TSC 0x00000010 |
177 | #define MSR_IA32_PLATFORM_ID 0x00000017 | 177 | #define MSR_IA32_PLATFORM_ID 0x00000017 |
178 | #define MSR_IA32_EBL_CR_POWERON 0x0000002a | 178 | #define MSR_IA32_EBL_CR_POWERON 0x0000002a |
179 | #define MSR_IA32_FEATURE_CONTROL 0x0000003a | ||
180 | |||
181 | #define FEATURE_CONTROL_LOCKED (1<<0) | ||
182 | #define FEATURE_CONTROL_VMXON_ENABLED (1<<2) | ||
179 | 183 | ||
180 | #define MSR_IA32_APICBASE 0x0000001b | 184 | #define MSR_IA32_APICBASE 0x0000001b |
181 | #define MSR_IA32_APICBASE_BSP (1<<8) | 185 | #define MSR_IA32_APICBASE_BSP (1<<8) |
@@ -310,4 +314,19 @@ | |||
310 | /* Geode defined MSRs */ | 314 | /* Geode defined MSRs */ |
311 | #define MSR_GEODE_BUSCONT_CONF0 0x00001900 | 315 | #define MSR_GEODE_BUSCONT_CONF0 0x00001900 |
312 | 316 | ||
313 | #endif /* __ASM_MSR_INDEX_H */ | 317 | /* Intel VT MSRs */ |
318 | #define MSR_IA32_VMX_BASIC 0x00000480 | ||
319 | #define MSR_IA32_VMX_PINBASED_CTLS 0x00000481 | ||
320 | #define MSR_IA32_VMX_PROCBASED_CTLS 0x00000482 | ||
321 | #define MSR_IA32_VMX_EXIT_CTLS 0x00000483 | ||
322 | #define MSR_IA32_VMX_ENTRY_CTLS 0x00000484 | ||
323 | #define MSR_IA32_VMX_MISC 0x00000485 | ||
324 | #define MSR_IA32_VMX_CR0_FIXED0 0x00000486 | ||
325 | #define MSR_IA32_VMX_CR0_FIXED1 0x00000487 | ||
326 | #define MSR_IA32_VMX_CR4_FIXED0 0x00000488 | ||
327 | #define MSR_IA32_VMX_CR4_FIXED1 0x00000489 | ||
328 | #define MSR_IA32_VMX_VMCS_ENUM 0x0000048a | ||
329 | #define MSR_IA32_VMX_PROCBASED_CTLS2 0x0000048b | ||
330 | #define MSR_IA32_VMX_EPT_VPID_CAP 0x0000048c | ||
331 | |||
332 | #endif /* ASM_X86__MSR_INDEX_H */ | ||
diff --git a/include/asm-x86/msr.h b/include/asm-x86/msr.h index 2362cfda1fbc..530af1f6389e 100644 --- a/include/asm-x86/msr.h +++ b/include/asm-x86/msr.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_X86_MSR_H_ | 1 | #ifndef ASM_X86__MSR_H |
2 | #define __ASM_X86_MSR_H_ | 2 | #define ASM_X86__MSR_H |
3 | 3 | ||
4 | #include <asm/msr-index.h> | 4 | #include <asm/msr-index.h> |
5 | 5 | ||
@@ -63,6 +63,22 @@ static inline unsigned long long native_read_msr_safe(unsigned int msr, | |||
63 | return EAX_EDX_VAL(val, low, high); | 63 | return EAX_EDX_VAL(val, low, high); |
64 | } | 64 | } |
65 | 65 | ||
66 | static inline unsigned long long native_read_msr_amd_safe(unsigned int msr, | ||
67 | int *err) | ||
68 | { | ||
69 | DECLARE_ARGS(val, low, high); | ||
70 | |||
71 | asm volatile("2: rdmsr ; xor %0,%0\n" | ||
72 | "1:\n\t" | ||
73 | ".section .fixup,\"ax\"\n\t" | ||
74 | "3: mov %3,%0 ; jmp 1b\n\t" | ||
75 | ".previous\n\t" | ||
76 | _ASM_EXTABLE(2b, 3b) | ||
77 | : "=r" (*err), EAX_EDX_RET(val, low, high) | ||
78 | : "c" (msr), "D" (0x9c5a203a), "i" (-EFAULT)); | ||
79 | return EAX_EDX_VAL(val, low, high); | ||
80 | } | ||
81 | |||
66 | static inline void native_write_msr(unsigned int msr, | 82 | static inline void native_write_msr(unsigned int msr, |
67 | unsigned low, unsigned high) | 83 | unsigned low, unsigned high) |
68 | { | 84 | { |
@@ -158,6 +174,13 @@ static inline int rdmsrl_safe(unsigned msr, unsigned long long *p) | |||
158 | *p = native_read_msr_safe(msr, &err); | 174 | *p = native_read_msr_safe(msr, &err); |
159 | return err; | 175 | return err; |
160 | } | 176 | } |
177 | static inline int rdmsrl_amd_safe(unsigned msr, unsigned long long *p) | ||
178 | { | ||
179 | int err; | ||
180 | |||
181 | *p = native_read_msr_amd_safe(msr, &err); | ||
182 | return err; | ||
183 | } | ||
161 | 184 | ||
162 | #define rdtscl(low) \ | 185 | #define rdtscl(low) \ |
163 | ((low) = (u32)native_read_tsc()) | 186 | ((low) = (u32)native_read_tsc()) |
@@ -221,4 +244,4 @@ static inline int wrmsr_safe_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h) | |||
221 | #endif /* __KERNEL__ */ | 244 | #endif /* __KERNEL__ */ |
222 | 245 | ||
223 | 246 | ||
224 | #endif | 247 | #endif /* ASM_X86__MSR_H */ |
diff --git a/include/asm-x86/mtrr.h b/include/asm-x86/mtrr.h index a69a01a51729..23a7f83da953 100644 --- a/include/asm-x86/mtrr.h +++ b/include/asm-x86/mtrr.h | |||
@@ -20,8 +20,8 @@ | |||
20 | The postal address is: | 20 | The postal address is: |
21 | Richard Gooch, c/o ATNF, P. O. Box 76, Epping, N.S.W., 2121, Australia. | 21 | Richard Gooch, c/o ATNF, P. O. Box 76, Epping, N.S.W., 2121, Australia. |
22 | */ | 22 | */ |
23 | #ifndef _ASM_X86_MTRR_H | 23 | #ifndef ASM_X86__MTRR_H |
24 | #define _ASM_X86_MTRR_H | 24 | #define ASM_X86__MTRR_H |
25 | 25 | ||
26 | #include <linux/ioctl.h> | 26 | #include <linux/ioctl.h> |
27 | #include <linux/errno.h> | 27 | #include <linux/errno.h> |
@@ -170,4 +170,4 @@ struct mtrr_gentry32 { | |||
170 | 170 | ||
171 | #endif /* __KERNEL__ */ | 171 | #endif /* __KERNEL__ */ |
172 | 172 | ||
173 | #endif /* _ASM_X86_MTRR_H */ | 173 | #endif /* ASM_X86__MTRR_H */ |
diff --git a/include/asm-x86/mutex_32.h b/include/asm-x86/mutex_32.h index 73e928ef5f03..25c16d8ba3c7 100644 --- a/include/asm-x86/mutex_32.h +++ b/include/asm-x86/mutex_32.h | |||
@@ -6,8 +6,8 @@ | |||
6 | * | 6 | * |
7 | * Copyright (C) 2004, 2005, 2006 Red Hat, Inc., Ingo Molnar <mingo@redhat.com> | 7 | * Copyright (C) 2004, 2005, 2006 Red Hat, Inc., Ingo Molnar <mingo@redhat.com> |
8 | */ | 8 | */ |
9 | #ifndef _ASM_MUTEX_H | 9 | #ifndef ASM_X86__MUTEX_32_H |
10 | #define _ASM_MUTEX_H | 10 | #define ASM_X86__MUTEX_32_H |
11 | 11 | ||
12 | #include <asm/alternative.h> | 12 | #include <asm/alternative.h> |
13 | 13 | ||
@@ -122,4 +122,4 @@ static inline int __mutex_fastpath_trylock(atomic_t *count, | |||
122 | #endif | 122 | #endif |
123 | } | 123 | } |
124 | 124 | ||
125 | #endif | 125 | #endif /* ASM_X86__MUTEX_32_H */ |
diff --git a/include/asm-x86/mutex_64.h b/include/asm-x86/mutex_64.h index f3fae9becb38..918ba21ab9d9 100644 --- a/include/asm-x86/mutex_64.h +++ b/include/asm-x86/mutex_64.h | |||
@@ -6,8 +6,8 @@ | |||
6 | * | 6 | * |
7 | * Copyright (C) 2004, 2005, 2006 Red Hat, Inc., Ingo Molnar <mingo@redhat.com> | 7 | * Copyright (C) 2004, 2005, 2006 Red Hat, Inc., Ingo Molnar <mingo@redhat.com> |
8 | */ | 8 | */ |
9 | #ifndef _ASM_MUTEX_H | 9 | #ifndef ASM_X86__MUTEX_64_H |
10 | #define _ASM_MUTEX_H | 10 | #define ASM_X86__MUTEX_64_H |
11 | 11 | ||
12 | /** | 12 | /** |
13 | * __mutex_fastpath_lock - decrement and call function if negative | 13 | * __mutex_fastpath_lock - decrement and call function if negative |
@@ -97,4 +97,4 @@ static inline int __mutex_fastpath_trylock(atomic_t *count, | |||
97 | return 0; | 97 | return 0; |
98 | } | 98 | } |
99 | 99 | ||
100 | #endif | 100 | #endif /* ASM_X86__MUTEX_64_H */ |
diff --git a/include/asm-x86/nmi.h b/include/asm-x86/nmi.h index 21f8d0202a82..a53f829a97c5 100644 --- a/include/asm-x86/nmi.h +++ b/include/asm-x86/nmi.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_NMI_H_ | 1 | #ifndef ASM_X86__NMI_H |
2 | #define _ASM_X86_NMI_H_ | 2 | #define ASM_X86__NMI_H |
3 | 3 | ||
4 | #include <linux/pm.h> | 4 | #include <linux/pm.h> |
5 | #include <asm/irq.h> | 5 | #include <asm/irq.h> |
@@ -15,10 +15,6 @@ | |||
15 | */ | 15 | */ |
16 | int do_nmi_callback(struct pt_regs *regs, int cpu); | 16 | int do_nmi_callback(struct pt_regs *regs, int cpu); |
17 | 17 | ||
18 | #ifdef CONFIG_X86_64 | ||
19 | extern void default_do_nmi(struct pt_regs *); | ||
20 | #endif | ||
21 | |||
22 | extern void die_nmi(char *str, struct pt_regs *regs, int do_panic); | 18 | extern void die_nmi(char *str, struct pt_regs *regs, int do_panic); |
23 | extern int check_nmi_watchdog(void); | 19 | extern int check_nmi_watchdog(void); |
24 | extern int nmi_watchdog_enabled; | 20 | extern int nmi_watchdog_enabled; |
@@ -34,6 +30,7 @@ extern void stop_apic_nmi_watchdog(void *); | |||
34 | extern void disable_timer_nmi_watchdog(void); | 30 | extern void disable_timer_nmi_watchdog(void); |
35 | extern void enable_timer_nmi_watchdog(void); | 31 | extern void enable_timer_nmi_watchdog(void); |
36 | extern int nmi_watchdog_tick(struct pt_regs *regs, unsigned reason); | 32 | extern int nmi_watchdog_tick(struct pt_regs *regs, unsigned reason); |
33 | extern void cpu_nmi_set_wd_enabled(void); | ||
37 | 34 | ||
38 | extern atomic_t nmi_active; | 35 | extern atomic_t nmi_active; |
39 | extern unsigned int nmi_watchdog; | 36 | extern unsigned int nmi_watchdog; |
@@ -81,4 +78,4 @@ void enable_lapic_nmi_watchdog(void); | |||
81 | void stop_nmi(void); | 78 | void stop_nmi(void); |
82 | void restart_nmi(void); | 79 | void restart_nmi(void); |
83 | 80 | ||
84 | #endif | 81 | #endif /* ASM_X86__NMI_H */ |
diff --git a/include/asm-x86/nops.h b/include/asm-x86/nops.h index ad0bedd10b89..ae742721ae73 100644 --- a/include/asm-x86/nops.h +++ b/include/asm-x86/nops.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_NOPS_H | 1 | #ifndef ASM_X86__NOPS_H |
2 | #define _ASM_NOPS_H 1 | 2 | #define ASM_X86__NOPS_H |
3 | 3 | ||
4 | /* Define nops for use with alternative() */ | 4 | /* Define nops for use with alternative() */ |
5 | 5 | ||
@@ -115,4 +115,4 @@ | |||
115 | 115 | ||
116 | #define ASM_NOP_MAX 8 | 116 | #define ASM_NOP_MAX 8 |
117 | 117 | ||
118 | #endif | 118 | #endif /* ASM_X86__NOPS_H */ |
diff --git a/include/asm-x86/numa_32.h b/include/asm-x86/numa_32.h index 220d7b7707a0..44cb07855c5b 100644 --- a/include/asm-x86/numa_32.h +++ b/include/asm-x86/numa_32.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_32_NUMA_H | 1 | #ifndef ASM_X86__NUMA_32_H |
2 | #define _ASM_X86_32_NUMA_H 1 | 2 | #define ASM_X86__NUMA_32_H |
3 | 3 | ||
4 | extern int pxm_to_nid(int pxm); | 4 | extern int pxm_to_nid(int pxm); |
5 | extern void numa_remove_cpu(int cpu); | 5 | extern void numa_remove_cpu(int cpu); |
@@ -8,4 +8,4 @@ extern void numa_remove_cpu(int cpu); | |||
8 | extern void set_highmem_pages_init(void); | 8 | extern void set_highmem_pages_init(void); |
9 | #endif | 9 | #endif |
10 | 10 | ||
11 | #endif /* _ASM_X86_32_NUMA_H */ | 11 | #endif /* ASM_X86__NUMA_32_H */ |
diff --git a/include/asm-x86/numa_64.h b/include/asm-x86/numa_64.h index 3830094434a9..15c990395b02 100644 --- a/include/asm-x86/numa_64.h +++ b/include/asm-x86/numa_64.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X8664_NUMA_H | 1 | #ifndef ASM_X86__NUMA_64_H |
2 | #define _ASM_X8664_NUMA_H 1 | 2 | #define ASM_X86__NUMA_64_H |
3 | 3 | ||
4 | #include <linux/nodemask.h> | 4 | #include <linux/nodemask.h> |
5 | #include <asm/apicdef.h> | 5 | #include <asm/apicdef.h> |
@@ -40,4 +40,4 @@ static inline void numa_add_cpu(int cpu, int node) { } | |||
40 | static inline void numa_remove_cpu(int cpu) { } | 40 | static inline void numa_remove_cpu(int cpu) { } |
41 | #endif | 41 | #endif |
42 | 42 | ||
43 | #endif | 43 | #endif /* ASM_X86__NUMA_64_H */ |
diff --git a/include/asm-x86/numaq.h b/include/asm-x86/numaq.h index 34b92d581fa3..124bf7d4b70a 100644 --- a/include/asm-x86/numaq.h +++ b/include/asm-x86/numaq.h | |||
@@ -23,8 +23,8 @@ | |||
23 | * Send feedback to <gone@us.ibm.com> | 23 | * Send feedback to <gone@us.ibm.com> |
24 | */ | 24 | */ |
25 | 25 | ||
26 | #ifndef NUMAQ_H | 26 | #ifndef ASM_X86__NUMAQ_H |
27 | #define NUMAQ_H | 27 | #define ASM_X86__NUMAQ_H |
28 | 28 | ||
29 | #ifdef CONFIG_X86_NUMAQ | 29 | #ifdef CONFIG_X86_NUMAQ |
30 | 30 | ||
@@ -165,5 +165,5 @@ static inline int get_memcfg_numaq(void) | |||
165 | return 0; | 165 | return 0; |
166 | } | 166 | } |
167 | #endif /* CONFIG_X86_NUMAQ */ | 167 | #endif /* CONFIG_X86_NUMAQ */ |
168 | #endif /* NUMAQ_H */ | 168 | #endif /* ASM_X86__NUMAQ_H */ |
169 | 169 | ||
diff --git a/include/asm-x86/mach-numaq/mach_apic.h b/include/asm-x86/numaq/apic.h index d802465e026a..a8344ba6ea15 100644 --- a/include/asm-x86/mach-numaq/mach_apic.h +++ b/include/asm-x86/numaq/apic.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_MACH_APIC_H | 1 | #ifndef __ASM_NUMAQ_APIC_H |
2 | #define __ASM_MACH_APIC_H | 2 | #define __ASM_NUMAQ_APIC_H |
3 | 3 | ||
4 | #include <asm/io.h> | 4 | #include <asm/io.h> |
5 | #include <linux/mmzone.h> | 5 | #include <linux/mmzone.h> |
@@ -135,4 +135,4 @@ static inline u32 phys_pkg_id(u32 cpuid_apic, int index_msb) | |||
135 | return cpuid_apic >> index_msb; | 135 | return cpuid_apic >> index_msb; |
136 | } | 136 | } |
137 | 137 | ||
138 | #endif /* __ASM_MACH_APIC_H */ | 138 | #endif /* __ASM_NUMAQ_APIC_H */ |
diff --git a/include/asm-x86/mach-numaq/mach_apicdef.h b/include/asm-x86/numaq/apicdef.h index bf439d0690f5..e012a46cc22a 100644 --- a/include/asm-x86/mach-numaq/mach_apicdef.h +++ b/include/asm-x86/numaq/apicdef.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_MACH_APICDEF_H | 1 | #ifndef __ASM_NUMAQ_APICDEF_H |
2 | #define __ASM_MACH_APICDEF_H | 2 | #define __ASM_NUMAQ_APICDEF_H |
3 | 3 | ||
4 | 4 | ||
5 | #define APIC_ID_MASK (0xF<<24) | 5 | #define APIC_ID_MASK (0xF<<24) |
diff --git a/include/asm-x86/mach-numaq/mach_ipi.h b/include/asm-x86/numaq/ipi.h index c6044488e9e6..935588d286cf 100644 --- a/include/asm-x86/mach-numaq/mach_ipi.h +++ b/include/asm-x86/numaq/ipi.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_MACH_IPI_H | 1 | #ifndef __ASM_NUMAQ_IPI_H |
2 | #define __ASM_MACH_IPI_H | 2 | #define __ASM_NUMAQ_IPI_H |
3 | 3 | ||
4 | void send_IPI_mask_sequence(cpumask_t, int vector); | 4 | void send_IPI_mask_sequence(cpumask_t, int vector); |
5 | 5 | ||
@@ -22,4 +22,4 @@ static inline void send_IPI_all(int vector) | |||
22 | send_IPI_mask(cpu_online_map, vector); | 22 | send_IPI_mask(cpu_online_map, vector); |
23 | } | 23 | } |
24 | 24 | ||
25 | #endif /* __ASM_MACH_IPI_H */ | 25 | #endif /* __ASM_NUMAQ_IPI_H */ |
diff --git a/include/asm-x86/mach-numaq/mach_mpparse.h b/include/asm-x86/numaq/mpparse.h index 626aef6b155f..252292e077b6 100644 --- a/include/asm-x86/mach-numaq/mach_mpparse.h +++ b/include/asm-x86/numaq/mpparse.h | |||
@@ -1,7 +1,7 @@ | |||
1 | #ifndef __ASM_MACH_MPPARSE_H | 1 | #ifndef __ASM_NUMAQ_MPPARSE_H |
2 | #define __ASM_MACH_MPPARSE_H | 2 | #define __ASM_NUMAQ_MPPARSE_H |
3 | 3 | ||
4 | extern void numaq_mps_oem_check(struct mp_config_table *mpc, char *oem, | 4 | extern void numaq_mps_oem_check(struct mp_config_table *mpc, char *oem, |
5 | char *productid); | 5 | char *productid); |
6 | 6 | ||
7 | #endif /* __ASM_MACH_MPPARSE_H */ | 7 | #endif /* __ASM_NUMAQ_MPPARSE_H */ |
diff --git a/include/asm-x86/mach-numaq/mach_wakecpu.h b/include/asm-x86/numaq/wakecpu.h index 00530041a991..c577bda5b1c5 100644 --- a/include/asm-x86/mach-numaq/mach_wakecpu.h +++ b/include/asm-x86/numaq/wakecpu.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_MACH_WAKECPU_H | 1 | #ifndef __ASM_NUMAQ_WAKECPU_H |
2 | #define __ASM_MACH_WAKECPU_H | 2 | #define __ASM_NUMAQ_WAKECPU_H |
3 | 3 | ||
4 | /* This file copes with machines that wakeup secondary CPUs by NMIs */ | 4 | /* This file copes with machines that wakeup secondary CPUs by NMIs */ |
5 | 5 | ||
@@ -40,4 +40,4 @@ static inline void restore_NMI_vector(unsigned short *high, unsigned short *low) | |||
40 | 40 | ||
41 | #define inquire_remote_apic(apicid) {} | 41 | #define inquire_remote_apic(apicid) {} |
42 | 42 | ||
43 | #endif /* __ASM_MACH_WAKECPU_H */ | 43 | #endif /* __ASM_NUMAQ_WAKECPU_H */ |
diff --git a/include/asm-x86/olpc.h b/include/asm-x86/olpc.h index 97d47133486f..d7328b1a05c1 100644 --- a/include/asm-x86/olpc.h +++ b/include/asm-x86/olpc.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /* OLPC machine specific definitions */ | 1 | /* OLPC machine specific definitions */ |
2 | 2 | ||
3 | #ifndef ASM_OLPC_H_ | 3 | #ifndef ASM_X86__OLPC_H |
4 | #define ASM_OLPC_H_ | 4 | #define ASM_X86__OLPC_H |
5 | 5 | ||
6 | #include <asm/geode.h> | 6 | #include <asm/geode.h> |
7 | 7 | ||
@@ -129,4 +129,4 @@ extern int olpc_ec_mask_unset(uint8_t bits); | |||
129 | #define OLPC_GPIO_LID geode_gpio(26) | 129 | #define OLPC_GPIO_LID geode_gpio(26) |
130 | #define OLPC_GPIO_ECSCI geode_gpio(27) | 130 | #define OLPC_GPIO_ECSCI geode_gpio(27) |
131 | 131 | ||
132 | #endif | 132 | #endif /* ASM_X86__OLPC_H */ |
diff --git a/include/asm-x86/page.h b/include/asm-x86/page.h index 49982110e4d9..d4f1d5791fc1 100644 --- a/include/asm-x86/page.h +++ b/include/asm-x86/page.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_PAGE_H | 1 | #ifndef ASM_X86__PAGE_H |
2 | #define _ASM_X86_PAGE_H | 2 | #define ASM_X86__PAGE_H |
3 | 3 | ||
4 | #include <linux/const.h> | 4 | #include <linux/const.h> |
5 | 5 | ||
@@ -57,6 +57,7 @@ typedef struct { pgdval_t pgd; } pgd_t; | |||
57 | typedef struct { pgprotval_t pgprot; } pgprot_t; | 57 | typedef struct { pgprotval_t pgprot; } pgprot_t; |
58 | 58 | ||
59 | extern int page_is_ram(unsigned long pagenr); | 59 | extern int page_is_ram(unsigned long pagenr); |
60 | extern int pagerange_is_ram(unsigned long start, unsigned long end); | ||
60 | extern int devmem_is_allowed(unsigned long pagenr); | 61 | extern int devmem_is_allowed(unsigned long pagenr); |
61 | extern void map_devmem(unsigned long pfn, unsigned long size, | 62 | extern void map_devmem(unsigned long pfn, unsigned long size, |
62 | pgprot_t vma_prot); | 63 | pgprot_t vma_prot); |
@@ -178,6 +179,7 @@ static inline pteval_t native_pte_flags(pte_t pte) | |||
178 | #endif /* CONFIG_PARAVIRT */ | 179 | #endif /* CONFIG_PARAVIRT */ |
179 | 180 | ||
180 | #define __pa(x) __phys_addr((unsigned long)(x)) | 181 | #define __pa(x) __phys_addr((unsigned long)(x)) |
182 | #define __pa_nodebug(x) __phys_addr_nodebug((unsigned long)(x)) | ||
181 | /* __pa_symbol should be used for C visible symbols. | 183 | /* __pa_symbol should be used for C visible symbols. |
182 | This seems to be the official gcc blessed way to do such arithmetic. */ | 184 | This seems to be the official gcc blessed way to do such arithmetic. */ |
183 | #define __pa_symbol(x) __pa(__phys_reloc_hide((unsigned long)(x))) | 185 | #define __pa_symbol(x) __pa(__phys_reloc_hide((unsigned long)(x))) |
@@ -187,9 +189,14 @@ static inline pteval_t native_pte_flags(pte_t pte) | |||
187 | #define __boot_va(x) __va(x) | 189 | #define __boot_va(x) __va(x) |
188 | #define __boot_pa(x) __pa(x) | 190 | #define __boot_pa(x) __pa(x) |
189 | 191 | ||
192 | /* | ||
193 | * virt_to_page(kaddr) returns a valid pointer if and only if | ||
194 | * virt_addr_valid(kaddr) returns true. | ||
195 | */ | ||
190 | #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) | 196 | #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) |
191 | #define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) | 197 | #define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) |
192 | #define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT) | 198 | extern bool __virt_addr_valid(unsigned long kaddr); |
199 | #define virt_addr_valid(kaddr) __virt_addr_valid((unsigned long) (kaddr)) | ||
193 | 200 | ||
194 | #endif /* __ASSEMBLY__ */ | 201 | #endif /* __ASSEMBLY__ */ |
195 | 202 | ||
@@ -199,4 +206,4 @@ static inline pteval_t native_pte_flags(pte_t pte) | |||
199 | #define __HAVE_ARCH_GATE_AREA 1 | 206 | #define __HAVE_ARCH_GATE_AREA 1 |
200 | 207 | ||
201 | #endif /* __KERNEL__ */ | 208 | #endif /* __KERNEL__ */ |
202 | #endif /* _ASM_X86_PAGE_H */ | 209 | #endif /* ASM_X86__PAGE_H */ |
diff --git a/include/asm-x86/page_32.h b/include/asm-x86/page_32.h index ab8528793f08..bdf5dba4cfb0 100644 --- a/include/asm-x86/page_32.h +++ b/include/asm-x86/page_32.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_PAGE_32_H | 1 | #ifndef ASM_X86__PAGE_32_H |
2 | #define _ASM_X86_PAGE_32_H | 2 | #define ASM_X86__PAGE_32_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * This handles the memory map. | 5 | * This handles the memory map. |
@@ -20,6 +20,12 @@ | |||
20 | #endif | 20 | #endif |
21 | #define THREAD_SIZE (PAGE_SIZE << THREAD_ORDER) | 21 | #define THREAD_SIZE (PAGE_SIZE << THREAD_ORDER) |
22 | 22 | ||
23 | #define STACKFAULT_STACK 0 | ||
24 | #define DOUBLEFAULT_STACK 1 | ||
25 | #define NMI_STACK 0 | ||
26 | #define DEBUG_STACK 0 | ||
27 | #define MCE_STACK 0 | ||
28 | #define N_EXCEPTION_STACKS 1 | ||
23 | 29 | ||
24 | #ifdef CONFIG_X86_PAE | 30 | #ifdef CONFIG_X86_PAE |
25 | /* 44=32+12, the limit we can fit into an unsigned long pfn */ | 31 | /* 44=32+12, the limit we can fit into an unsigned long pfn */ |
@@ -33,7 +39,6 @@ typedef u64 pmdval_t; | |||
33 | typedef u64 pudval_t; | 39 | typedef u64 pudval_t; |
34 | typedef u64 pgdval_t; | 40 | typedef u64 pgdval_t; |
35 | typedef u64 pgprotval_t; | 41 | typedef u64 pgprotval_t; |
36 | typedef u64 phys_addr_t; | ||
37 | 42 | ||
38 | typedef union { | 43 | typedef union { |
39 | struct { | 44 | struct { |
@@ -54,7 +59,6 @@ typedef unsigned long pmdval_t; | |||
54 | typedef unsigned long pudval_t; | 59 | typedef unsigned long pudval_t; |
55 | typedef unsigned long pgdval_t; | 60 | typedef unsigned long pgdval_t; |
56 | typedef unsigned long pgprotval_t; | 61 | typedef unsigned long pgprotval_t; |
57 | typedef unsigned long phys_addr_t; | ||
58 | 62 | ||
59 | typedef union { | 63 | typedef union { |
60 | pteval_t pte; | 64 | pteval_t pte; |
@@ -73,7 +77,12 @@ typedef struct page *pgtable_t; | |||
73 | #endif | 77 | #endif |
74 | 78 | ||
75 | #ifndef __ASSEMBLY__ | 79 | #ifndef __ASSEMBLY__ |
76 | #define __phys_addr(x) ((x) - PAGE_OFFSET) | 80 | #define __phys_addr_nodebug(x) ((x) - PAGE_OFFSET) |
81 | #ifdef CONFIG_DEBUG_VIRTUAL | ||
82 | extern unsigned long __phys_addr(unsigned long); | ||
83 | #else | ||
84 | #define __phys_addr(x) __phys_addr_nodebug(x) | ||
85 | #endif | ||
77 | #define __phys_reloc_hide(x) RELOC_HIDE((x), 0) | 86 | #define __phys_reloc_hide(x) RELOC_HIDE((x), 0) |
78 | 87 | ||
79 | #ifdef CONFIG_FLATMEM | 88 | #ifdef CONFIG_FLATMEM |
@@ -89,13 +98,11 @@ extern int nx_enabled; | |||
89 | extern unsigned int __VMALLOC_RESERVE; | 98 | extern unsigned int __VMALLOC_RESERVE; |
90 | extern int sysctl_legacy_va_layout; | 99 | extern int sysctl_legacy_va_layout; |
91 | 100 | ||
92 | #define VMALLOC_RESERVE ((unsigned long)__VMALLOC_RESERVE) | ||
93 | #define MAXMEM (-__PAGE_OFFSET - __VMALLOC_RESERVE) | ||
94 | |||
95 | extern void find_low_pfn_range(void); | 101 | extern void find_low_pfn_range(void); |
96 | extern unsigned long init_memory_mapping(unsigned long start, | 102 | extern unsigned long init_memory_mapping(unsigned long start, |
97 | unsigned long end); | 103 | unsigned long end); |
98 | extern void initmem_init(unsigned long, unsigned long); | 104 | extern void initmem_init(unsigned long, unsigned long); |
105 | extern void free_initmem(void); | ||
99 | extern void setup_bootmem_allocator(void); | 106 | extern void setup_bootmem_allocator(void); |
100 | 107 | ||
101 | 108 | ||
@@ -126,4 +133,4 @@ static inline void copy_page(void *to, void *from) | |||
126 | #endif /* CONFIG_X86_3DNOW */ | 133 | #endif /* CONFIG_X86_3DNOW */ |
127 | #endif /* !__ASSEMBLY__ */ | 134 | #endif /* !__ASSEMBLY__ */ |
128 | 135 | ||
129 | #endif /* _ASM_X86_PAGE_32_H */ | 136 | #endif /* ASM_X86__PAGE_32_H */ |
diff --git a/include/asm-x86/page_64.h b/include/asm-x86/page_64.h index c6916c83e6b1..49380b8c7e25 100644 --- a/include/asm-x86/page_64.h +++ b/include/asm-x86/page_64.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _X86_64_PAGE_H | 1 | #ifndef ASM_X86__PAGE_64_H |
2 | #define _X86_64_PAGE_H | 2 | #define ASM_X86__PAGE_64_H |
3 | 3 | ||
4 | #define PAGETABLE_LEVELS 4 | 4 | #define PAGETABLE_LEVELS 4 |
5 | 5 | ||
@@ -79,7 +79,6 @@ typedef unsigned long pmdval_t; | |||
79 | typedef unsigned long pudval_t; | 79 | typedef unsigned long pudval_t; |
80 | typedef unsigned long pgdval_t; | 80 | typedef unsigned long pgdval_t; |
81 | typedef unsigned long pgprotval_t; | 81 | typedef unsigned long pgprotval_t; |
82 | typedef unsigned long phys_addr_t; | ||
83 | 82 | ||
84 | typedef struct page *pgtable_t; | 83 | typedef struct page *pgtable_t; |
85 | 84 | ||
@@ -91,6 +90,7 @@ extern unsigned long init_memory_mapping(unsigned long start, | |||
91 | unsigned long end); | 90 | unsigned long end); |
92 | 91 | ||
93 | extern void initmem_init(unsigned long start_pfn, unsigned long end_pfn); | 92 | extern void initmem_init(unsigned long start_pfn, unsigned long end_pfn); |
93 | extern void free_initmem(void); | ||
94 | 94 | ||
95 | extern void init_extra_mapping_uc(unsigned long phys, unsigned long size); | 95 | extern void init_extra_mapping_uc(unsigned long phys, unsigned long size); |
96 | extern void init_extra_mapping_wb(unsigned long phys, unsigned long size); | 96 | extern void init_extra_mapping_wb(unsigned long phys, unsigned long size); |
@@ -102,4 +102,4 @@ extern void init_extra_mapping_wb(unsigned long phys, unsigned long size); | |||
102 | #endif | 102 | #endif |
103 | 103 | ||
104 | 104 | ||
105 | #endif /* _X86_64_PAGE_H */ | 105 | #endif /* ASM_X86__PAGE_64_H */ |
diff --git a/include/asm-x86/param.h b/include/asm-x86/param.h index 6f0d0422f4ca..0009cfb11a5f 100644 --- a/include/asm-x86/param.h +++ b/include/asm-x86/param.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_PARAM_H | 1 | #ifndef ASM_X86__PARAM_H |
2 | #define _ASM_X86_PARAM_H | 2 | #define ASM_X86__PARAM_H |
3 | 3 | ||
4 | #ifdef __KERNEL__ | 4 | #ifdef __KERNEL__ |
5 | # define HZ CONFIG_HZ /* Internal kernel timer frequency */ | 5 | # define HZ CONFIG_HZ /* Internal kernel timer frequency */ |
@@ -19,4 +19,4 @@ | |||
19 | 19 | ||
20 | #define MAXHOSTNAMELEN 64 /* max length of hostname */ | 20 | #define MAXHOSTNAMELEN 64 /* max length of hostname */ |
21 | 21 | ||
22 | #endif /* _ASM_X86_PARAM_H */ | 22 | #endif /* ASM_X86__PARAM_H */ |
diff --git a/include/asm-x86/paravirt.h b/include/asm-x86/paravirt.h index fbbde93f12d6..8d6ae2f760d0 100644 --- a/include/asm-x86/paravirt.h +++ b/include/asm-x86/paravirt.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_PARAVIRT_H | 1 | #ifndef ASM_X86__PARAVIRT_H |
2 | #define __ASM_PARAVIRT_H | 2 | #define ASM_X86__PARAVIRT_H |
3 | /* Various instructions on x86 need to be replaced for | 3 | /* Various instructions on x86 need to be replaced for |
4 | * para-virtualization: those hooks are defined here. */ | 4 | * para-virtualization: those hooks are defined here. */ |
5 | 5 | ||
@@ -124,6 +124,9 @@ struct pv_cpu_ops { | |||
124 | int entrynum, const void *desc, int size); | 124 | int entrynum, const void *desc, int size); |
125 | void (*write_idt_entry)(gate_desc *, | 125 | void (*write_idt_entry)(gate_desc *, |
126 | int entrynum, const gate_desc *gate); | 126 | int entrynum, const gate_desc *gate); |
127 | void (*alloc_ldt)(struct desc_struct *ldt, unsigned entries); | ||
128 | void (*free_ldt)(struct desc_struct *ldt, unsigned entries); | ||
129 | |||
127 | void (*load_sp0)(struct tss_struct *tss, struct thread_struct *t); | 130 | void (*load_sp0)(struct tss_struct *tss, struct thread_struct *t); |
128 | 131 | ||
129 | void (*set_iopl_mask)(unsigned mask); | 132 | void (*set_iopl_mask)(unsigned mask); |
@@ -137,6 +140,7 @@ struct pv_cpu_ops { | |||
137 | 140 | ||
138 | /* MSR, PMC and TSR operations. | 141 | /* MSR, PMC and TSR operations. |
139 | err = 0/-EFAULT. wrmsr returns 0/-EFAULT. */ | 142 | err = 0/-EFAULT. wrmsr returns 0/-EFAULT. */ |
143 | u64 (*read_msr_amd)(unsigned int msr, int *err); | ||
140 | u64 (*read_msr)(unsigned int msr, int *err); | 144 | u64 (*read_msr)(unsigned int msr, int *err); |
141 | int (*write_msr)(unsigned int msr, unsigned low, unsigned high); | 145 | int (*write_msr)(unsigned int msr, unsigned low, unsigned high); |
142 | 146 | ||
@@ -200,12 +204,6 @@ struct pv_irq_ops { | |||
200 | 204 | ||
201 | struct pv_apic_ops { | 205 | struct pv_apic_ops { |
202 | #ifdef CONFIG_X86_LOCAL_APIC | 206 | #ifdef CONFIG_X86_LOCAL_APIC |
203 | /* | ||
204 | * Direct APIC operations, principally for VMI. Ideally | ||
205 | * these shouldn't be in this interface. | ||
206 | */ | ||
207 | void (*apic_write)(unsigned long reg, u32 v); | ||
208 | u32 (*apic_read)(unsigned long reg); | ||
209 | void (*setup_boot_clock)(void); | 207 | void (*setup_boot_clock)(void); |
210 | void (*setup_secondary_clock)(void); | 208 | void (*setup_secondary_clock)(void); |
211 | 209 | ||
@@ -257,13 +255,13 @@ struct pv_mmu_ops { | |||
257 | * Hooks for allocating/releasing pagetable pages when they're | 255 | * Hooks for allocating/releasing pagetable pages when they're |
258 | * attached to a pagetable | 256 | * attached to a pagetable |
259 | */ | 257 | */ |
260 | void (*alloc_pte)(struct mm_struct *mm, u32 pfn); | 258 | void (*alloc_pte)(struct mm_struct *mm, unsigned long pfn); |
261 | void (*alloc_pmd)(struct mm_struct *mm, u32 pfn); | 259 | void (*alloc_pmd)(struct mm_struct *mm, unsigned long pfn); |
262 | void (*alloc_pmd_clone)(u32 pfn, u32 clonepfn, u32 start, u32 count); | 260 | void (*alloc_pmd_clone)(unsigned long pfn, unsigned long clonepfn, unsigned long start, unsigned long count); |
263 | void (*alloc_pud)(struct mm_struct *mm, u32 pfn); | 261 | void (*alloc_pud)(struct mm_struct *mm, unsigned long pfn); |
264 | void (*release_pte)(u32 pfn); | 262 | void (*release_pte)(unsigned long pfn); |
265 | void (*release_pmd)(u32 pfn); | 263 | void (*release_pmd)(unsigned long pfn); |
266 | void (*release_pud)(u32 pfn); | 264 | void (*release_pud)(unsigned long pfn); |
267 | 265 | ||
268 | /* Pagetable manipulation functions */ | 266 | /* Pagetable manipulation functions */ |
269 | void (*set_pte)(pte_t *ptep, pte_t pteval); | 267 | void (*set_pte)(pte_t *ptep, pte_t pteval); |
@@ -330,6 +328,7 @@ struct pv_lock_ops { | |||
330 | int (*spin_is_locked)(struct raw_spinlock *lock); | 328 | int (*spin_is_locked)(struct raw_spinlock *lock); |
331 | int (*spin_is_contended)(struct raw_spinlock *lock); | 329 | int (*spin_is_contended)(struct raw_spinlock *lock); |
332 | void (*spin_lock)(struct raw_spinlock *lock); | 330 | void (*spin_lock)(struct raw_spinlock *lock); |
331 | void (*spin_lock_flags)(struct raw_spinlock *lock, unsigned long flags); | ||
333 | int (*spin_trylock)(struct raw_spinlock *lock); | 332 | int (*spin_trylock)(struct raw_spinlock *lock); |
334 | void (*spin_unlock)(struct raw_spinlock *lock); | 333 | void (*spin_unlock)(struct raw_spinlock *lock); |
335 | }; | 334 | }; |
@@ -726,6 +725,10 @@ static inline u64 paravirt_read_msr(unsigned msr, int *err) | |||
726 | { | 725 | { |
727 | return PVOP_CALL2(u64, pv_cpu_ops.read_msr, msr, err); | 726 | return PVOP_CALL2(u64, pv_cpu_ops.read_msr, msr, err); |
728 | } | 727 | } |
728 | static inline u64 paravirt_read_msr_amd(unsigned msr, int *err) | ||
729 | { | ||
730 | return PVOP_CALL2(u64, pv_cpu_ops.read_msr_amd, msr, err); | ||
731 | } | ||
729 | static inline int paravirt_write_msr(unsigned msr, unsigned low, unsigned high) | 732 | static inline int paravirt_write_msr(unsigned msr, unsigned low, unsigned high) |
730 | { | 733 | { |
731 | return PVOP_CALL3(int, pv_cpu_ops.write_msr, msr, low, high); | 734 | return PVOP_CALL3(int, pv_cpu_ops.write_msr, msr, low, high); |
@@ -771,6 +774,13 @@ static inline int rdmsrl_safe(unsigned msr, unsigned long long *p) | |||
771 | *p = paravirt_read_msr(msr, &err); | 774 | *p = paravirt_read_msr(msr, &err); |
772 | return err; | 775 | return err; |
773 | } | 776 | } |
777 | static inline int rdmsrl_amd_safe(unsigned msr, unsigned long long *p) | ||
778 | { | ||
779 | int err; | ||
780 | |||
781 | *p = paravirt_read_msr_amd(msr, &err); | ||
782 | return err; | ||
783 | } | ||
774 | 784 | ||
775 | static inline u64 paravirt_read_tsc(void) | 785 | static inline u64 paravirt_read_tsc(void) |
776 | { | 786 | { |
@@ -824,6 +834,16 @@ do { \ | |||
824 | (aux) = __aux; \ | 834 | (aux) = __aux; \ |
825 | } while (0) | 835 | } while (0) |
826 | 836 | ||
837 | static inline void paravirt_alloc_ldt(struct desc_struct *ldt, unsigned entries) | ||
838 | { | ||
839 | PVOP_VCALL2(pv_cpu_ops.alloc_ldt, ldt, entries); | ||
840 | } | ||
841 | |||
842 | static inline void paravirt_free_ldt(struct desc_struct *ldt, unsigned entries) | ||
843 | { | ||
844 | PVOP_VCALL2(pv_cpu_ops.free_ldt, ldt, entries); | ||
845 | } | ||
846 | |||
827 | static inline void load_TR_desc(void) | 847 | static inline void load_TR_desc(void) |
828 | { | 848 | { |
829 | PVOP_VCALL0(pv_cpu_ops.load_tr_desc); | 849 | PVOP_VCALL0(pv_cpu_ops.load_tr_desc); |
@@ -898,19 +918,6 @@ static inline void slow_down_io(void) | |||
898 | } | 918 | } |
899 | 919 | ||
900 | #ifdef CONFIG_X86_LOCAL_APIC | 920 | #ifdef CONFIG_X86_LOCAL_APIC |
901 | /* | ||
902 | * Basic functions accessing APICs. | ||
903 | */ | ||
904 | static inline void apic_write(unsigned long reg, u32 v) | ||
905 | { | ||
906 | PVOP_VCALL2(pv_apic_ops.apic_write, reg, v); | ||
907 | } | ||
908 | |||
909 | static inline u32 apic_read(unsigned long reg) | ||
910 | { | ||
911 | return PVOP_CALL1(unsigned long, pv_apic_ops.apic_read, reg); | ||
912 | } | ||
913 | |||
914 | static inline void setup_boot_clock(void) | 921 | static inline void setup_boot_clock(void) |
915 | { | 922 | { |
916 | PVOP_VCALL0(pv_apic_ops.setup_boot_clock); | 923 | PVOP_VCALL0(pv_apic_ops.setup_boot_clock); |
@@ -993,35 +1000,35 @@ static inline void paravirt_pgd_free(struct mm_struct *mm, pgd_t *pgd) | |||
993 | PVOP_VCALL2(pv_mmu_ops.pgd_free, mm, pgd); | 1000 | PVOP_VCALL2(pv_mmu_ops.pgd_free, mm, pgd); |
994 | } | 1001 | } |
995 | 1002 | ||
996 | static inline void paravirt_alloc_pte(struct mm_struct *mm, unsigned pfn) | 1003 | static inline void paravirt_alloc_pte(struct mm_struct *mm, unsigned long pfn) |
997 | { | 1004 | { |
998 | PVOP_VCALL2(pv_mmu_ops.alloc_pte, mm, pfn); | 1005 | PVOP_VCALL2(pv_mmu_ops.alloc_pte, mm, pfn); |
999 | } | 1006 | } |
1000 | static inline void paravirt_release_pte(unsigned pfn) | 1007 | static inline void paravirt_release_pte(unsigned long pfn) |
1001 | { | 1008 | { |
1002 | PVOP_VCALL1(pv_mmu_ops.release_pte, pfn); | 1009 | PVOP_VCALL1(pv_mmu_ops.release_pte, pfn); |
1003 | } | 1010 | } |
1004 | 1011 | ||
1005 | static inline void paravirt_alloc_pmd(struct mm_struct *mm, unsigned pfn) | 1012 | static inline void paravirt_alloc_pmd(struct mm_struct *mm, unsigned long pfn) |
1006 | { | 1013 | { |
1007 | PVOP_VCALL2(pv_mmu_ops.alloc_pmd, mm, pfn); | 1014 | PVOP_VCALL2(pv_mmu_ops.alloc_pmd, mm, pfn); |
1008 | } | 1015 | } |
1009 | 1016 | ||
1010 | static inline void paravirt_alloc_pmd_clone(unsigned pfn, unsigned clonepfn, | 1017 | static inline void paravirt_alloc_pmd_clone(unsigned long pfn, unsigned long clonepfn, |
1011 | unsigned start, unsigned count) | 1018 | unsigned long start, unsigned long count) |
1012 | { | 1019 | { |
1013 | PVOP_VCALL4(pv_mmu_ops.alloc_pmd_clone, pfn, clonepfn, start, count); | 1020 | PVOP_VCALL4(pv_mmu_ops.alloc_pmd_clone, pfn, clonepfn, start, count); |
1014 | } | 1021 | } |
1015 | static inline void paravirt_release_pmd(unsigned pfn) | 1022 | static inline void paravirt_release_pmd(unsigned long pfn) |
1016 | { | 1023 | { |
1017 | PVOP_VCALL1(pv_mmu_ops.release_pmd, pfn); | 1024 | PVOP_VCALL1(pv_mmu_ops.release_pmd, pfn); |
1018 | } | 1025 | } |
1019 | 1026 | ||
1020 | static inline void paravirt_alloc_pud(struct mm_struct *mm, unsigned pfn) | 1027 | static inline void paravirt_alloc_pud(struct mm_struct *mm, unsigned long pfn) |
1021 | { | 1028 | { |
1022 | PVOP_VCALL2(pv_mmu_ops.alloc_pud, mm, pfn); | 1029 | PVOP_VCALL2(pv_mmu_ops.alloc_pud, mm, pfn); |
1023 | } | 1030 | } |
1024 | static inline void paravirt_release_pud(unsigned pfn) | 1031 | static inline void paravirt_release_pud(unsigned long pfn) |
1025 | { | 1032 | { |
1026 | PVOP_VCALL1(pv_mmu_ops.release_pud, pfn); | 1033 | PVOP_VCALL1(pv_mmu_ops.release_pud, pfn); |
1027 | } | 1034 | } |
@@ -1401,6 +1408,12 @@ static __always_inline void __raw_spin_lock(struct raw_spinlock *lock) | |||
1401 | PVOP_VCALL1(pv_lock_ops.spin_lock, lock); | 1408 | PVOP_VCALL1(pv_lock_ops.spin_lock, lock); |
1402 | } | 1409 | } |
1403 | 1410 | ||
1411 | static __always_inline void __raw_spin_lock_flags(struct raw_spinlock *lock, | ||
1412 | unsigned long flags) | ||
1413 | { | ||
1414 | PVOP_VCALL2(pv_lock_ops.spin_lock_flags, lock, flags); | ||
1415 | } | ||
1416 | |||
1404 | static __always_inline int __raw_spin_trylock(struct raw_spinlock *lock) | 1417 | static __always_inline int __raw_spin_trylock(struct raw_spinlock *lock) |
1405 | { | 1418 | { |
1406 | return PVOP_CALL1(int, pv_lock_ops.spin_trylock, lock); | 1419 | return PVOP_CALL1(int, pv_lock_ops.spin_trylock, lock); |
@@ -1634,4 +1647,4 @@ static inline unsigned long __raw_local_irq_save(void) | |||
1634 | 1647 | ||
1635 | #endif /* __ASSEMBLY__ */ | 1648 | #endif /* __ASSEMBLY__ */ |
1636 | #endif /* CONFIG_PARAVIRT */ | 1649 | #endif /* CONFIG_PARAVIRT */ |
1637 | #endif /* __ASM_PARAVIRT_H */ | 1650 | #endif /* ASM_X86__PARAVIRT_H */ |
diff --git a/include/asm-x86/parport.h b/include/asm-x86/parport.h index 3c4ffeb467e9..2e3dda4dc3d9 100644 --- a/include/asm-x86/parport.h +++ b/include/asm-x86/parport.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_PARPORT_H | 1 | #ifndef ASM_X86__PARPORT_H |
2 | #define _ASM_X86_PARPORT_H | 2 | #define ASM_X86__PARPORT_H |
3 | 3 | ||
4 | static int __devinit parport_pc_find_isa_ports(int autoirq, int autodma); | 4 | static int __devinit parport_pc_find_isa_ports(int autoirq, int autodma); |
5 | static int __devinit parport_pc_find_nonpci_ports(int autoirq, int autodma) | 5 | static int __devinit parport_pc_find_nonpci_ports(int autoirq, int autodma) |
@@ -7,4 +7,4 @@ static int __devinit parport_pc_find_nonpci_ports(int autoirq, int autodma) | |||
7 | return parport_pc_find_isa_ports(autoirq, autodma); | 7 | return parport_pc_find_isa_ports(autoirq, autodma); |
8 | } | 8 | } |
9 | 9 | ||
10 | #endif /* _ASM_X86_PARPORT_H */ | 10 | #endif /* ASM_X86__PARPORT_H */ |
diff --git a/include/asm-x86/pat.h b/include/asm-x86/pat.h index 7edc47307217..482c3e3f9879 100644 --- a/include/asm-x86/pat.h +++ b/include/asm-x86/pat.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_PAT_H | 1 | #ifndef ASM_X86__PAT_H |
2 | #define _ASM_PAT_H | 2 | #define ASM_X86__PAT_H |
3 | 3 | ||
4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
5 | 5 | ||
@@ -19,4 +19,4 @@ extern int free_memtype(u64 start, u64 end); | |||
19 | 19 | ||
20 | extern void pat_disable(char *reason); | 20 | extern void pat_disable(char *reason); |
21 | 21 | ||
22 | #endif | 22 | #endif /* ASM_X86__PAT_H */ |
diff --git a/include/asm-x86/pci-direct.h b/include/asm-x86/pci-direct.h index 80c775d9fe20..da42be07b690 100644 --- a/include/asm-x86/pci-direct.h +++ b/include/asm-x86/pci-direct.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef ASM_PCI_DIRECT_H | 1 | #ifndef ASM_X86__PCI_DIRECT_H |
2 | #define ASM_PCI_DIRECT_H 1 | 2 | #define ASM_X86__PCI_DIRECT_H |
3 | 3 | ||
4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
5 | 5 | ||
@@ -18,4 +18,4 @@ extern int early_pci_allowed(void); | |||
18 | extern unsigned int pci_early_dump_regs; | 18 | extern unsigned int pci_early_dump_regs; |
19 | extern void early_dump_pci_device(u8 bus, u8 slot, u8 func); | 19 | extern void early_dump_pci_device(u8 bus, u8 slot, u8 func); |
20 | extern void early_dump_pci_devices(void); | 20 | extern void early_dump_pci_devices(void); |
21 | #endif | 21 | #endif /* ASM_X86__PCI_DIRECT_H */ |
diff --git a/include/asm-x86/pci.h b/include/asm-x86/pci.h index 2db14cf17db8..602583192991 100644 --- a/include/asm-x86/pci.h +++ b/include/asm-x86/pci.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __x86_PCI_H | 1 | #ifndef ASM_X86__PCI_H |
2 | #define __x86_PCI_H | 2 | #define ASM_X86__PCI_H |
3 | 3 | ||
4 | #include <linux/mm.h> /* for struct page */ | 4 | #include <linux/mm.h> /* for struct page */ |
5 | #include <linux/types.h> | 5 | #include <linux/types.h> |
@@ -111,4 +111,4 @@ static inline cpumask_t __pcibus_to_cpumask(struct pci_bus *bus) | |||
111 | } | 111 | } |
112 | #endif | 112 | #endif |
113 | 113 | ||
114 | #endif | 114 | #endif /* ASM_X86__PCI_H */ |
diff --git a/include/asm-x86/pci_32.h b/include/asm-x86/pci_32.h index a50d46851285..3f2288207c0c 100644 --- a/include/asm-x86/pci_32.h +++ b/include/asm-x86/pci_32.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __i386_PCI_H | 1 | #ifndef ASM_X86__PCI_32_H |
2 | #define __i386_PCI_H | 2 | #define ASM_X86__PCI_32_H |
3 | 3 | ||
4 | 4 | ||
5 | #ifdef __KERNEL__ | 5 | #ifdef __KERNEL__ |
@@ -31,4 +31,4 @@ struct pci_dev; | |||
31 | #endif /* __KERNEL__ */ | 31 | #endif /* __KERNEL__ */ |
32 | 32 | ||
33 | 33 | ||
34 | #endif /* __i386_PCI_H */ | 34 | #endif /* ASM_X86__PCI_32_H */ |
diff --git a/include/asm-x86/pci_64.h b/include/asm-x86/pci_64.h index f330234ffa5c..f72e12d5770e 100644 --- a/include/asm-x86/pci_64.h +++ b/include/asm-x86/pci_64.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __x8664_PCI_H | 1 | #ifndef ASM_X86__PCI_64_H |
2 | #define __x8664_PCI_H | 2 | #define ASM_X86__PCI_64_H |
3 | 3 | ||
4 | #ifdef __KERNEL__ | 4 | #ifdef __KERNEL__ |
5 | 5 | ||
@@ -63,4 +63,4 @@ extern void pci_iommu_alloc(void); | |||
63 | 63 | ||
64 | #endif /* __KERNEL__ */ | 64 | #endif /* __KERNEL__ */ |
65 | 65 | ||
66 | #endif /* __x8664_PCI_H */ | 66 | #endif /* ASM_X86__PCI_64_H */ |
diff --git a/include/asm-x86/pda.h b/include/asm-x86/pda.h index b34e9a7cc80b..80860afffbdb 100644 --- a/include/asm-x86/pda.h +++ b/include/asm-x86/pda.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef X86_64_PDA_H | 1 | #ifndef ASM_X86__PDA_H |
2 | #define X86_64_PDA_H | 2 | #define ASM_X86__PDA_H |
3 | 3 | ||
4 | #ifndef __ASSEMBLY__ | 4 | #ifndef __ASSEMBLY__ |
5 | #include <linux/stddef.h> | 5 | #include <linux/stddef.h> |
@@ -134,4 +134,4 @@ do { \ | |||
134 | 134 | ||
135 | #define PDA_STACKOFFSET (5*8) | 135 | #define PDA_STACKOFFSET (5*8) |
136 | 136 | ||
137 | #endif | 137 | #endif /* ASM_X86__PDA_H */ |
diff --git a/include/asm-x86/percpu.h b/include/asm-x86/percpu.h index f643a3a92da0..e10a1d0678cf 100644 --- a/include/asm-x86/percpu.h +++ b/include/asm-x86/percpu.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_PERCPU_H_ | 1 | #ifndef ASM_X86__PERCPU_H |
2 | #define _ASM_X86_PERCPU_H_ | 2 | #define ASM_X86__PERCPU_H |
3 | 3 | ||
4 | #ifdef CONFIG_X86_64 | 4 | #ifdef CONFIG_X86_64 |
5 | #include <linux/compiler.h> | 5 | #include <linux/compiler.h> |
@@ -215,4 +215,4 @@ do { \ | |||
215 | 215 | ||
216 | #endif /* !CONFIG_SMP */ | 216 | #endif /* !CONFIG_SMP */ |
217 | 217 | ||
218 | #endif /* _ASM_X86_PERCPU_H_ */ | 218 | #endif /* ASM_X86__PERCPU_H */ |
diff --git a/include/asm-x86/pgalloc.h b/include/asm-x86/pgalloc.h index d63ea431cb3b..3cd23adedae8 100644 --- a/include/asm-x86/pgalloc.h +++ b/include/asm-x86/pgalloc.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_PGALLOC_H | 1 | #ifndef ASM_X86__PGALLOC_H |
2 | #define _ASM_X86_PGALLOC_H | 2 | #define ASM_X86__PGALLOC_H |
3 | 3 | ||
4 | #include <linux/threads.h> | 4 | #include <linux/threads.h> |
5 | #include <linux/mm.h> /* for struct page */ | 5 | #include <linux/mm.h> /* for struct page */ |
@@ -111,4 +111,4 @@ extern void __pud_free_tlb(struct mmu_gather *tlb, pud_t *pud); | |||
111 | #endif /* PAGETABLE_LEVELS > 3 */ | 111 | #endif /* PAGETABLE_LEVELS > 3 */ |
112 | #endif /* PAGETABLE_LEVELS > 2 */ | 112 | #endif /* PAGETABLE_LEVELS > 2 */ |
113 | 113 | ||
114 | #endif /* _ASM_X86_PGALLOC_H */ | 114 | #endif /* ASM_X86__PGALLOC_H */ |
diff --git a/include/asm-x86/pgtable-2level-defs.h b/include/asm-x86/pgtable-2level-defs.h index 0f71c9f13da4..7ec48f4e5347 100644 --- a/include/asm-x86/pgtable-2level-defs.h +++ b/include/asm-x86/pgtable-2level-defs.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _I386_PGTABLE_2LEVEL_DEFS_H | 1 | #ifndef ASM_X86__PGTABLE_2LEVEL_DEFS_H |
2 | #define _I386_PGTABLE_2LEVEL_DEFS_H | 2 | #define ASM_X86__PGTABLE_2LEVEL_DEFS_H |
3 | 3 | ||
4 | #define SHARED_KERNEL_PMD 0 | 4 | #define SHARED_KERNEL_PMD 0 |
5 | 5 | ||
@@ -17,4 +17,4 @@ | |||
17 | 17 | ||
18 | #define PTRS_PER_PTE 1024 | 18 | #define PTRS_PER_PTE 1024 |
19 | 19 | ||
20 | #endif /* _I386_PGTABLE_2LEVEL_DEFS_H */ | 20 | #endif /* ASM_X86__PGTABLE_2LEVEL_DEFS_H */ |
diff --git a/include/asm-x86/pgtable-2level.h b/include/asm-x86/pgtable-2level.h index 46bc52c0eae1..81762081dcd8 100644 --- a/include/asm-x86/pgtable-2level.h +++ b/include/asm-x86/pgtable-2level.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _I386_PGTABLE_2LEVEL_H | 1 | #ifndef ASM_X86__PGTABLE_2LEVEL_H |
2 | #define _I386_PGTABLE_2LEVEL_H | 2 | #define ASM_X86__PGTABLE_2LEVEL_H |
3 | 3 | ||
4 | #define pte_ERROR(e) \ | 4 | #define pte_ERROR(e) \ |
5 | printk("%s:%d: bad pte %08lx.\n", __FILE__, __LINE__, (e).pte_low) | 5 | printk("%s:%d: bad pte %08lx.\n", __FILE__, __LINE__, (e).pte_low) |
@@ -53,9 +53,7 @@ static inline pte_t native_ptep_get_and_clear(pte_t *xp) | |||
53 | #define native_ptep_get_and_clear(xp) native_local_ptep_get_and_clear(xp) | 53 | #define native_ptep_get_and_clear(xp) native_local_ptep_get_and_clear(xp) |
54 | #endif | 54 | #endif |
55 | 55 | ||
56 | #define pte_page(x) pfn_to_page(pte_pfn(x)) | ||
57 | #define pte_none(x) (!(x).pte_low) | 56 | #define pte_none(x) (!(x).pte_low) |
58 | #define pte_pfn(x) (pte_val(x) >> PAGE_SHIFT) | ||
59 | 57 | ||
60 | /* | 58 | /* |
61 | * Bits 0, 6 and 7 are taken, split up the 29 bits of offset | 59 | * Bits 0, 6 and 7 are taken, split up the 29 bits of offset |
@@ -78,4 +76,4 @@ static inline pte_t native_ptep_get_and_clear(pte_t *xp) | |||
78 | #define __pte_to_swp_entry(pte) ((swp_entry_t) { (pte).pte_low }) | 76 | #define __pte_to_swp_entry(pte) ((swp_entry_t) { (pte).pte_low }) |
79 | #define __swp_entry_to_pte(x) ((pte_t) { .pte = (x).val }) | 77 | #define __swp_entry_to_pte(x) ((pte_t) { .pte = (x).val }) |
80 | 78 | ||
81 | #endif /* _I386_PGTABLE_2LEVEL_H */ | 79 | #endif /* ASM_X86__PGTABLE_2LEVEL_H */ |
diff --git a/include/asm-x86/pgtable-3level-defs.h b/include/asm-x86/pgtable-3level-defs.h index 448ac9516314..c05fe6ff3720 100644 --- a/include/asm-x86/pgtable-3level-defs.h +++ b/include/asm-x86/pgtable-3level-defs.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _I386_PGTABLE_3LEVEL_DEFS_H | 1 | #ifndef ASM_X86__PGTABLE_3LEVEL_DEFS_H |
2 | #define _I386_PGTABLE_3LEVEL_DEFS_H | 2 | #define ASM_X86__PGTABLE_3LEVEL_DEFS_H |
3 | 3 | ||
4 | #ifdef CONFIG_PARAVIRT | 4 | #ifdef CONFIG_PARAVIRT |
5 | #define SHARED_KERNEL_PMD (pv_info.shared_kernel_pmd) | 5 | #define SHARED_KERNEL_PMD (pv_info.shared_kernel_pmd) |
@@ -25,4 +25,4 @@ | |||
25 | */ | 25 | */ |
26 | #define PTRS_PER_PTE 512 | 26 | #define PTRS_PER_PTE 512 |
27 | 27 | ||
28 | #endif /* _I386_PGTABLE_3LEVEL_DEFS_H */ | 28 | #endif /* ASM_X86__PGTABLE_3LEVEL_DEFS_H */ |
diff --git a/include/asm-x86/pgtable-3level.h b/include/asm-x86/pgtable-3level.h index 105057f34032..75f4276b5ddb 100644 --- a/include/asm-x86/pgtable-3level.h +++ b/include/asm-x86/pgtable-3level.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _I386_PGTABLE_3LEVEL_H | 1 | #ifndef ASM_X86__PGTABLE_3LEVEL_H |
2 | #define _I386_PGTABLE_3LEVEL_H | 2 | #define ASM_X86__PGTABLE_3LEVEL_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * Intel Physical Address Extension (PAE) Mode - three-level page | 5 | * Intel Physical Address Extension (PAE) Mode - three-level page |
@@ -151,18 +151,11 @@ static inline int pte_same(pte_t a, pte_t b) | |||
151 | return a.pte_low == b.pte_low && a.pte_high == b.pte_high; | 151 | return a.pte_low == b.pte_low && a.pte_high == b.pte_high; |
152 | } | 152 | } |
153 | 153 | ||
154 | #define pte_page(x) pfn_to_page(pte_pfn(x)) | ||
155 | |||
156 | static inline int pte_none(pte_t pte) | 154 | static inline int pte_none(pte_t pte) |
157 | { | 155 | { |
158 | return !pte.pte_low && !pte.pte_high; | 156 | return !pte.pte_low && !pte.pte_high; |
159 | } | 157 | } |
160 | 158 | ||
161 | static inline unsigned long pte_pfn(pte_t pte) | ||
162 | { | ||
163 | return (pte_val(pte) & PTE_PFN_MASK) >> PAGE_SHIFT; | ||
164 | } | ||
165 | |||
166 | /* | 159 | /* |
167 | * Bits 0, 6 and 7 are taken in the low part of the pte, | 160 | * Bits 0, 6 and 7 are taken in the low part of the pte, |
168 | * put the 32 bits of offset into the high part. | 161 | * put the 32 bits of offset into the high part. |
@@ -179,4 +172,4 @@ static inline unsigned long pte_pfn(pte_t pte) | |||
179 | #define __pte_to_swp_entry(pte) ((swp_entry_t){ (pte).pte_high }) | 172 | #define __pte_to_swp_entry(pte) ((swp_entry_t){ (pte).pte_high }) |
180 | #define __swp_entry_to_pte(x) ((pte_t){ { .pte_high = (x).val } }) | 173 | #define __swp_entry_to_pte(x) ((pte_t){ { .pte_high = (x).val } }) |
181 | 174 | ||
182 | #endif /* _I386_PGTABLE_3LEVEL_H */ | 175 | #endif /* ASM_X86__PGTABLE_3LEVEL_H */ |
diff --git a/include/asm-x86/pgtable.h b/include/asm-x86/pgtable.h index 04caa2f544df..88a53b1a17f0 100644 --- a/include/asm-x86/pgtable.h +++ b/include/asm-x86/pgtable.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_PGTABLE_H | 1 | #ifndef ASM_X86__PGTABLE_H |
2 | #define _ASM_X86_PGTABLE_H | 2 | #define ASM_X86__PGTABLE_H |
3 | 3 | ||
4 | #define FIRST_USER_ADDRESS 0 | 4 | #define FIRST_USER_ADDRESS 0 |
5 | 5 | ||
@@ -15,10 +15,11 @@ | |||
15 | #define _PAGE_BIT_PAT 7 /* on 4KB pages */ | 15 | #define _PAGE_BIT_PAT 7 /* on 4KB pages */ |
16 | #define _PAGE_BIT_GLOBAL 8 /* Global TLB entry PPro+ */ | 16 | #define _PAGE_BIT_GLOBAL 8 /* Global TLB entry PPro+ */ |
17 | #define _PAGE_BIT_UNUSED1 9 /* available for programmer */ | 17 | #define _PAGE_BIT_UNUSED1 9 /* available for programmer */ |
18 | #define _PAGE_BIT_UNUSED2 10 | 18 | #define _PAGE_BIT_IOMAP 10 /* flag used to indicate IO mapping */ |
19 | #define _PAGE_BIT_UNUSED3 11 | 19 | #define _PAGE_BIT_UNUSED3 11 |
20 | #define _PAGE_BIT_PAT_LARGE 12 /* On 2MB or 1GB pages */ | 20 | #define _PAGE_BIT_PAT_LARGE 12 /* On 2MB or 1GB pages */ |
21 | #define _PAGE_BIT_SPECIAL _PAGE_BIT_UNUSED1 | 21 | #define _PAGE_BIT_SPECIAL _PAGE_BIT_UNUSED1 |
22 | #define _PAGE_BIT_CPA_TEST _PAGE_BIT_UNUSED1 | ||
22 | #define _PAGE_BIT_NX 63 /* No execute: only valid after cpuid check */ | 23 | #define _PAGE_BIT_NX 63 /* No execute: only valid after cpuid check */ |
23 | 24 | ||
24 | #define _PAGE_PRESENT (_AT(pteval_t, 1) << _PAGE_BIT_PRESENT) | 25 | #define _PAGE_PRESENT (_AT(pteval_t, 1) << _PAGE_BIT_PRESENT) |
@@ -31,11 +32,12 @@ | |||
31 | #define _PAGE_PSE (_AT(pteval_t, 1) << _PAGE_BIT_PSE) | 32 | #define _PAGE_PSE (_AT(pteval_t, 1) << _PAGE_BIT_PSE) |
32 | #define _PAGE_GLOBAL (_AT(pteval_t, 1) << _PAGE_BIT_GLOBAL) | 33 | #define _PAGE_GLOBAL (_AT(pteval_t, 1) << _PAGE_BIT_GLOBAL) |
33 | #define _PAGE_UNUSED1 (_AT(pteval_t, 1) << _PAGE_BIT_UNUSED1) | 34 | #define _PAGE_UNUSED1 (_AT(pteval_t, 1) << _PAGE_BIT_UNUSED1) |
34 | #define _PAGE_UNUSED2 (_AT(pteval_t, 1) << _PAGE_BIT_UNUSED2) | 35 | #define _PAGE_IOMAP (_AT(pteval_t, 1) << _PAGE_BIT_IOMAP) |
35 | #define _PAGE_UNUSED3 (_AT(pteval_t, 1) << _PAGE_BIT_UNUSED3) | 36 | #define _PAGE_UNUSED3 (_AT(pteval_t, 1) << _PAGE_BIT_UNUSED3) |
36 | #define _PAGE_PAT (_AT(pteval_t, 1) << _PAGE_BIT_PAT) | 37 | #define _PAGE_PAT (_AT(pteval_t, 1) << _PAGE_BIT_PAT) |
37 | #define _PAGE_PAT_LARGE (_AT(pteval_t, 1) << _PAGE_BIT_PAT_LARGE) | 38 | #define _PAGE_PAT_LARGE (_AT(pteval_t, 1) << _PAGE_BIT_PAT_LARGE) |
38 | #define _PAGE_SPECIAL (_AT(pteval_t, 1) << _PAGE_BIT_SPECIAL) | 39 | #define _PAGE_SPECIAL (_AT(pteval_t, 1) << _PAGE_BIT_SPECIAL) |
40 | #define _PAGE_CPA_TEST (_AT(pteval_t, 1) << _PAGE_BIT_CPA_TEST) | ||
39 | #define __HAVE_ARCH_PTE_SPECIAL | 41 | #define __HAVE_ARCH_PTE_SPECIAL |
40 | 42 | ||
41 | #if defined(CONFIG_X86_64) || defined(CONFIG_X86_PAE) | 43 | #if defined(CONFIG_X86_64) || defined(CONFIG_X86_PAE) |
@@ -97,6 +99,11 @@ | |||
97 | #define __PAGE_KERNEL_LARGE_NOCACHE (__PAGE_KERNEL | _PAGE_CACHE_UC | _PAGE_PSE) | 99 | #define __PAGE_KERNEL_LARGE_NOCACHE (__PAGE_KERNEL | _PAGE_CACHE_UC | _PAGE_PSE) |
98 | #define __PAGE_KERNEL_LARGE_EXEC (__PAGE_KERNEL_EXEC | _PAGE_PSE) | 100 | #define __PAGE_KERNEL_LARGE_EXEC (__PAGE_KERNEL_EXEC | _PAGE_PSE) |
99 | 101 | ||
102 | #define __PAGE_KERNEL_IO (__PAGE_KERNEL | _PAGE_IOMAP) | ||
103 | #define __PAGE_KERNEL_IO_NOCACHE (__PAGE_KERNEL_NOCACHE | _PAGE_IOMAP) | ||
104 | #define __PAGE_KERNEL_IO_UC_MINUS (__PAGE_KERNEL_UC_MINUS | _PAGE_IOMAP) | ||
105 | #define __PAGE_KERNEL_IO_WC (__PAGE_KERNEL_WC | _PAGE_IOMAP) | ||
106 | |||
100 | #define PAGE_KERNEL __pgprot(__PAGE_KERNEL) | 107 | #define PAGE_KERNEL __pgprot(__PAGE_KERNEL) |
101 | #define PAGE_KERNEL_RO __pgprot(__PAGE_KERNEL_RO) | 108 | #define PAGE_KERNEL_RO __pgprot(__PAGE_KERNEL_RO) |
102 | #define PAGE_KERNEL_EXEC __pgprot(__PAGE_KERNEL_EXEC) | 109 | #define PAGE_KERNEL_EXEC __pgprot(__PAGE_KERNEL_EXEC) |
@@ -111,6 +118,11 @@ | |||
111 | #define PAGE_KERNEL_VSYSCALL __pgprot(__PAGE_KERNEL_VSYSCALL) | 118 | #define PAGE_KERNEL_VSYSCALL __pgprot(__PAGE_KERNEL_VSYSCALL) |
112 | #define PAGE_KERNEL_VSYSCALL_NOCACHE __pgprot(__PAGE_KERNEL_VSYSCALL_NOCACHE) | 119 | #define PAGE_KERNEL_VSYSCALL_NOCACHE __pgprot(__PAGE_KERNEL_VSYSCALL_NOCACHE) |
113 | 120 | ||
121 | #define PAGE_KERNEL_IO __pgprot(__PAGE_KERNEL_IO) | ||
122 | #define PAGE_KERNEL_IO_NOCACHE __pgprot(__PAGE_KERNEL_IO_NOCACHE) | ||
123 | #define PAGE_KERNEL_IO_UC_MINUS __pgprot(__PAGE_KERNEL_IO_UC_MINUS) | ||
124 | #define PAGE_KERNEL_IO_WC __pgprot(__PAGE_KERNEL_IO_WC) | ||
125 | |||
114 | /* xwr */ | 126 | /* xwr */ |
115 | #define __P000 PAGE_NONE | 127 | #define __P000 PAGE_NONE |
116 | #define __P001 PAGE_READONLY | 128 | #define __P001 PAGE_READONLY |
@@ -130,6 +142,22 @@ | |||
130 | #define __S110 PAGE_SHARED_EXEC | 142 | #define __S110 PAGE_SHARED_EXEC |
131 | #define __S111 PAGE_SHARED_EXEC | 143 | #define __S111 PAGE_SHARED_EXEC |
132 | 144 | ||
145 | /* | ||
146 | * early identity mapping pte attrib macros. | ||
147 | */ | ||
148 | #ifdef CONFIG_X86_64 | ||
149 | #define __PAGE_KERNEL_IDENT_LARGE_EXEC __PAGE_KERNEL_LARGE_EXEC | ||
150 | #else | ||
151 | /* | ||
152 | * For PDE_IDENT_ATTR include USER bit. As the PDE and PTE protection | ||
153 | * bits are combined, this will alow user to access the high address mapped | ||
154 | * VDSO in the presence of CONFIG_COMPAT_VDSO | ||
155 | */ | ||
156 | #define PTE_IDENT_ATTR 0x003 /* PRESENT+RW */ | ||
157 | #define PDE_IDENT_ATTR 0x067 /* PRESENT+RW+USER+DIRTY+ACCESSED */ | ||
158 | #define PGD_IDENT_ATTR 0x001 /* PRESENT (no other attributes) */ | ||
159 | #endif | ||
160 | |||
133 | #ifndef __ASSEMBLY__ | 161 | #ifndef __ASSEMBLY__ |
134 | 162 | ||
135 | /* | 163 | /* |
@@ -183,9 +211,16 @@ static inline int pte_exec(pte_t pte) | |||
183 | 211 | ||
184 | static inline int pte_special(pte_t pte) | 212 | static inline int pte_special(pte_t pte) |
185 | { | 213 | { |
186 | return pte_val(pte) & _PAGE_SPECIAL; | 214 | return pte_flags(pte) & _PAGE_SPECIAL; |
187 | } | 215 | } |
188 | 216 | ||
217 | static inline unsigned long pte_pfn(pte_t pte) | ||
218 | { | ||
219 | return (pte_val(pte) & PTE_PFN_MASK) >> PAGE_SHIFT; | ||
220 | } | ||
221 | |||
222 | #define pte_page(pte) pfn_to_page(pte_pfn(pte)) | ||
223 | |||
189 | static inline int pmd_large(pmd_t pte) | 224 | static inline int pmd_large(pmd_t pte) |
190 | { | 225 | { |
191 | return (pmd_val(pte) & (_PAGE_PSE | _PAGE_PRESENT)) == | 226 | return (pmd_val(pte) & (_PAGE_PSE | _PAGE_PRESENT)) == |
@@ -313,6 +348,8 @@ static inline void native_pagetable_setup_start(pgd_t *base) {} | |||
313 | static inline void native_pagetable_setup_done(pgd_t *base) {} | 348 | static inline void native_pagetable_setup_done(pgd_t *base) {} |
314 | #endif | 349 | #endif |
315 | 350 | ||
351 | extern int arch_report_meminfo(char *page); | ||
352 | |||
316 | #ifdef CONFIG_PARAVIRT | 353 | #ifdef CONFIG_PARAVIRT |
317 | #include <asm/paravirt.h> | 354 | #include <asm/paravirt.h> |
318 | #else /* !CONFIG_PARAVIRT */ | 355 | #else /* !CONFIG_PARAVIRT */ |
@@ -521,4 +558,4 @@ static inline void clone_pgd_range(pgd_t *dst, pgd_t *src, int count) | |||
521 | #include <asm-generic/pgtable.h> | 558 | #include <asm-generic/pgtable.h> |
522 | #endif /* __ASSEMBLY__ */ | 559 | #endif /* __ASSEMBLY__ */ |
523 | 560 | ||
524 | #endif /* _ASM_X86_PGTABLE_H */ | 561 | #endif /* ASM_X86__PGTABLE_H */ |
diff --git a/include/asm-x86/pgtable_32.h b/include/asm-x86/pgtable_32.h index 5c3b26567a95..8de702dc7d62 100644 --- a/include/asm-x86/pgtable_32.h +++ b/include/asm-x86/pgtable_32.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _I386_PGTABLE_H | 1 | #ifndef ASM_X86__PGTABLE_32_H |
2 | #define _I386_PGTABLE_H | 2 | #define ASM_X86__PGTABLE_32_H |
3 | 3 | ||
4 | 4 | ||
5 | /* | 5 | /* |
@@ -31,6 +31,7 @@ static inline void pgtable_cache_init(void) { } | |||
31 | static inline void check_pgt_cache(void) { } | 31 | static inline void check_pgt_cache(void) { } |
32 | void paging_init(void); | 32 | void paging_init(void); |
33 | 33 | ||
34 | extern void set_pmd_pfn(unsigned long, unsigned long, pgprot_t); | ||
34 | 35 | ||
35 | /* | 36 | /* |
36 | * The Linux x86 paging architecture is 'compile-time dual-mode', it | 37 | * The Linux x86 paging architecture is 'compile-time dual-mode', it |
@@ -56,8 +57,7 @@ void paging_init(void); | |||
56 | * area for the same reason. ;) | 57 | * area for the same reason. ;) |
57 | */ | 58 | */ |
58 | #define VMALLOC_OFFSET (8 * 1024 * 1024) | 59 | #define VMALLOC_OFFSET (8 * 1024 * 1024) |
59 | #define VMALLOC_START (((unsigned long)high_memory + 2 * VMALLOC_OFFSET - 1) \ | 60 | #define VMALLOC_START ((unsigned long)high_memory + VMALLOC_OFFSET) |
60 | & ~(VMALLOC_OFFSET - 1)) | ||
61 | #ifdef CONFIG_X86_PAE | 61 | #ifdef CONFIG_X86_PAE |
62 | #define LAST_PKMAP 512 | 62 | #define LAST_PKMAP 512 |
63 | #else | 63 | #else |
@@ -73,6 +73,8 @@ void paging_init(void); | |||
73 | # define VMALLOC_END (FIXADDR_START - 2 * PAGE_SIZE) | 73 | # define VMALLOC_END (FIXADDR_START - 2 * PAGE_SIZE) |
74 | #endif | 74 | #endif |
75 | 75 | ||
76 | #define MAXMEM (VMALLOC_END - PAGE_OFFSET - __VMALLOC_RESERVE) | ||
77 | |||
76 | /* | 78 | /* |
77 | * Define this if things work differently on an i386 and an i486: | 79 | * Define this if things work differently on an i386 and an i486: |
78 | * it will (on an i486) warn about kernel memory accesses that are | 80 | * it will (on an i486) warn about kernel memory accesses that are |
@@ -186,4 +188,4 @@ do { \ | |||
186 | #define io_remap_pfn_range(vma, vaddr, pfn, size, prot) \ | 188 | #define io_remap_pfn_range(vma, vaddr, pfn, size, prot) \ |
187 | remap_pfn_range(vma, vaddr, pfn, size, prot) | 189 | remap_pfn_range(vma, vaddr, pfn, size, prot) |
188 | 190 | ||
189 | #endif /* _I386_PGTABLE_H */ | 191 | #endif /* ASM_X86__PGTABLE_32_H */ |
diff --git a/include/asm-x86/pgtable_64.h b/include/asm-x86/pgtable_64.h index 549144d03d99..fde9770e53d1 100644 --- a/include/asm-x86/pgtable_64.h +++ b/include/asm-x86/pgtable_64.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _X86_64_PGTABLE_H | 1 | #ifndef ASM_X86__PGTABLE_64_H |
2 | #define _X86_64_PGTABLE_H | 2 | #define ASM_X86__PGTABLE_64_H |
3 | 3 | ||
4 | #include <linux/const.h> | 4 | #include <linux/const.h> |
5 | #ifndef __ASSEMBLY__ | 5 | #ifndef __ASSEMBLY__ |
@@ -175,8 +175,6 @@ static inline int pmd_bad(pmd_t pmd) | |||
175 | #define pte_present(x) (pte_val((x)) & (_PAGE_PRESENT | _PAGE_PROTNONE)) | 175 | #define pte_present(x) (pte_val((x)) & (_PAGE_PRESENT | _PAGE_PROTNONE)) |
176 | 176 | ||
177 | #define pages_to_mb(x) ((x) >> (20 - PAGE_SHIFT)) /* FIXME: is this right? */ | 177 | #define pages_to_mb(x) ((x) >> (20 - PAGE_SHIFT)) /* FIXME: is this right? */ |
178 | #define pte_page(x) pfn_to_page(pte_pfn((x))) | ||
179 | #define pte_pfn(x) ((pte_val((x)) & __PHYSICAL_MASK) >> PAGE_SHIFT) | ||
180 | 178 | ||
181 | /* | 179 | /* |
182 | * Macro to mark a page protection value as "uncacheable". | 180 | * Macro to mark a page protection value as "uncacheable". |
@@ -284,4 +282,4 @@ extern void cleanup_highmap(void); | |||
284 | #define __HAVE_ARCH_PTE_SAME | 282 | #define __HAVE_ARCH_PTE_SAME |
285 | #endif /* !__ASSEMBLY__ */ | 283 | #endif /* !__ASSEMBLY__ */ |
286 | 284 | ||
287 | #endif /* _X86_64_PGTABLE_H */ | 285 | #endif /* ASM_X86__PGTABLE_64_H */ |
diff --git a/include/asm-x86/posix_types_32.h b/include/asm-x86/posix_types_32.h index b031efda37ec..70cf2bb05939 100644 --- a/include/asm-x86/posix_types_32.h +++ b/include/asm-x86/posix_types_32.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ARCH_I386_POSIX_TYPES_H | 1 | #ifndef ASM_X86__POSIX_TYPES_32_H |
2 | #define __ARCH_I386_POSIX_TYPES_H | 2 | #define ASM_X86__POSIX_TYPES_32_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * This file is generally used by user-level software, so you need to | 5 | * This file is generally used by user-level software, so you need to |
@@ -82,4 +82,4 @@ do { \ | |||
82 | 82 | ||
83 | #endif /* defined(__KERNEL__) */ | 83 | #endif /* defined(__KERNEL__) */ |
84 | 84 | ||
85 | #endif | 85 | #endif /* ASM_X86__POSIX_TYPES_32_H */ |
diff --git a/include/asm-x86/posix_types_64.h b/include/asm-x86/posix_types_64.h index d6624c95854a..388b4e7f4a44 100644 --- a/include/asm-x86/posix_types_64.h +++ b/include/asm-x86/posix_types_64.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_64_POSIX_TYPES_H | 1 | #ifndef ASM_X86__POSIX_TYPES_64_H |
2 | #define _ASM_X86_64_POSIX_TYPES_H | 2 | #define ASM_X86__POSIX_TYPES_64_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * This file is generally used by user-level software, so you need to | 5 | * This file is generally used by user-level software, so you need to |
@@ -116,4 +116,4 @@ static inline void __FD_ZERO(__kernel_fd_set *p) | |||
116 | 116 | ||
117 | #endif /* defined(__KERNEL__) */ | 117 | #endif /* defined(__KERNEL__) */ |
118 | 118 | ||
119 | #endif | 119 | #endif /* ASM_X86__POSIX_TYPES_64_H */ |
diff --git a/include/asm-x86/prctl.h b/include/asm-x86/prctl.h index 52952adef1ca..e7ae34eb4103 100644 --- a/include/asm-x86/prctl.h +++ b/include/asm-x86/prctl.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef X86_64_PRCTL_H | 1 | #ifndef ASM_X86__PRCTL_H |
2 | #define X86_64_PRCTL_H 1 | 2 | #define ASM_X86__PRCTL_H |
3 | 3 | ||
4 | #define ARCH_SET_GS 0x1001 | 4 | #define ARCH_SET_GS 0x1001 |
5 | #define ARCH_SET_FS 0x1002 | 5 | #define ARCH_SET_FS 0x1002 |
@@ -7,4 +7,4 @@ | |||
7 | #define ARCH_GET_GS 0x1004 | 7 | #define ARCH_GET_GS 0x1004 |
8 | 8 | ||
9 | 9 | ||
10 | #endif | 10 | #endif /* ASM_X86__PRCTL_H */ |
diff --git a/include/asm-x86/processor-cyrix.h b/include/asm-x86/processor-cyrix.h index 97568ada1f97..1198f2a0e42c 100644 --- a/include/asm-x86/processor-cyrix.h +++ b/include/asm-x86/processor-cyrix.h | |||
@@ -28,3 +28,11 @@ static inline void setCx86(u8 reg, u8 data) | |||
28 | outb(reg, 0x22); | 28 | outb(reg, 0x22); |
29 | outb(data, 0x23); | 29 | outb(data, 0x23); |
30 | } | 30 | } |
31 | |||
32 | #define getCx86_old(reg) ({ outb((reg), 0x22); inb(0x23); }) | ||
33 | |||
34 | #define setCx86_old(reg, data) do { \ | ||
35 | outb((reg), 0x22); \ | ||
36 | outb((data), 0x23); \ | ||
37 | } while (0) | ||
38 | |||
diff --git a/include/asm-x86/processor-flags.h b/include/asm-x86/processor-flags.h index eff2ecd7fff0..dc5f0712f9fa 100644 --- a/include/asm-x86/processor-flags.h +++ b/include/asm-x86/processor-flags.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_I386_PROCESSOR_FLAGS_H | 1 | #ifndef ASM_X86__PROCESSOR_FLAGS_H |
2 | #define __ASM_I386_PROCESSOR_FLAGS_H | 2 | #define ASM_X86__PROCESSOR_FLAGS_H |
3 | /* Various flags defined: can be included from assembler. */ | 3 | /* Various flags defined: can be included from assembler. */ |
4 | 4 | ||
5 | /* | 5 | /* |
@@ -59,6 +59,7 @@ | |||
59 | #define X86_CR4_OSFXSR 0x00000200 /* enable fast FPU save and restore */ | 59 | #define X86_CR4_OSFXSR 0x00000200 /* enable fast FPU save and restore */ |
60 | #define X86_CR4_OSXMMEXCPT 0x00000400 /* enable unmasked SSE exceptions */ | 60 | #define X86_CR4_OSXMMEXCPT 0x00000400 /* enable unmasked SSE exceptions */ |
61 | #define X86_CR4_VMXE 0x00002000 /* enable VMX virtualization */ | 61 | #define X86_CR4_VMXE 0x00002000 /* enable VMX virtualization */ |
62 | #define X86_CR4_OSXSAVE 0x00040000 /* enable xsave and xrestore */ | ||
62 | 63 | ||
63 | /* | 64 | /* |
64 | * x86-64 Task Priority Register, CR8 | 65 | * x86-64 Task Priority Register, CR8 |
@@ -96,4 +97,4 @@ | |||
96 | #endif | 97 | #endif |
97 | #endif | 98 | #endif |
98 | 99 | ||
99 | #endif /* __ASM_I386_PROCESSOR_FLAGS_H */ | 100 | #endif /* ASM_X86__PROCESSOR_FLAGS_H */ |
diff --git a/include/asm-x86/processor.h b/include/asm-x86/processor.h index 4df3e2f6fb56..ee7cbb30773a 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> |
@@ -75,11 +76,11 @@ struct cpuinfo_x86 { | |||
75 | int x86_tlbsize; | 76 | int x86_tlbsize; |
76 | __u8 x86_virt_bits; | 77 | __u8 x86_virt_bits; |
77 | __u8 x86_phys_bits; | 78 | __u8 x86_phys_bits; |
79 | #endif | ||
78 | /* CPUID returned core id bits: */ | 80 | /* CPUID returned core id bits: */ |
79 | __u8 x86_coreid_bits; | 81 | __u8 x86_coreid_bits; |
80 | /* Max extended CPUID function supported: */ | 82 | /* Max extended CPUID function supported: */ |
81 | __u32 extended_cpuid_level; | 83 | __u32 extended_cpuid_level; |
82 | #endif | ||
83 | /* Maximum supported CPUID level, -1=no CPUID: */ | 84 | /* Maximum supported CPUID level, -1=no CPUID: */ |
84 | int cpuid_level; | 85 | int cpuid_level; |
85 | __u32 x86_capability[NCAPINTS]; | 86 | __u32 x86_capability[NCAPINTS]; |
@@ -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 *); |
@@ -161,11 +166,8 @@ extern void init_scattered_cpuid_features(struct cpuinfo_x86 *c); | |||
161 | extern unsigned int init_intel_cacheinfo(struct cpuinfo_x86 *c); | 166 | extern unsigned int init_intel_cacheinfo(struct cpuinfo_x86 *c); |
162 | extern unsigned short num_cache_leaves; | 167 | extern unsigned short num_cache_leaves; |
163 | 168 | ||
164 | #if defined(CONFIG_X86_HT) || defined(CONFIG_X86_64) | 169 | extern void detect_extended_topology(struct cpuinfo_x86 *c); |
165 | extern void detect_ht(struct cpuinfo_x86 *c); | 170 | extern void detect_ht(struct cpuinfo_x86 *c); |
166 | #else | ||
167 | static inline void detect_ht(struct cpuinfo_x86 *c) {} | ||
168 | #endif | ||
169 | 171 | ||
170 | static inline void native_cpuid(unsigned int *eax, unsigned int *ebx, | 172 | static inline void native_cpuid(unsigned int *eax, unsigned int *ebx, |
171 | unsigned int *ecx, unsigned int *edx) | 173 | unsigned int *ecx, unsigned int *edx) |
@@ -322,7 +324,12 @@ struct i387_fxsave_struct { | |||
322 | /* 16*16 bytes for each XMM-reg = 256 bytes: */ | 324 | /* 16*16 bytes for each XMM-reg = 256 bytes: */ |
323 | u32 xmm_space[64]; | 325 | u32 xmm_space[64]; |
324 | 326 | ||
325 | u32 padding[24]; | 327 | u32 padding[12]; |
328 | |||
329 | union { | ||
330 | u32 padding1[12]; | ||
331 | u32 sw_reserved[12]; | ||
332 | }; | ||
326 | 333 | ||
327 | } __attribute__((aligned(16))); | 334 | } __attribute__((aligned(16))); |
328 | 335 | ||
@@ -346,10 +353,23 @@ struct i387_soft_struct { | |||
346 | u32 entry_eip; | 353 | u32 entry_eip; |
347 | }; | 354 | }; |
348 | 355 | ||
356 | struct xsave_hdr_struct { | ||
357 | u64 xstate_bv; | ||
358 | u64 reserved1[2]; | ||
359 | u64 reserved2[5]; | ||
360 | } __attribute__((packed)); | ||
361 | |||
362 | struct xsave_struct { | ||
363 | struct i387_fxsave_struct i387; | ||
364 | struct xsave_hdr_struct xsave_hdr; | ||
365 | /* new processor state extensions will go here */ | ||
366 | } __attribute__ ((packed, aligned (64))); | ||
367 | |||
349 | union thread_xstate { | 368 | union thread_xstate { |
350 | struct i387_fsave_struct fsave; | 369 | struct i387_fsave_struct fsave; |
351 | struct i387_fxsave_struct fxsave; | 370 | struct i387_fxsave_struct fxsave; |
352 | struct i387_soft_struct soft; | 371 | struct i387_soft_struct soft; |
372 | struct xsave_struct xsave; | ||
353 | }; | 373 | }; |
354 | 374 | ||
355 | #ifdef CONFIG_X86_64 | 375 | #ifdef CONFIG_X86_64 |
@@ -411,9 +431,14 @@ struct thread_struct { | |||
411 | unsigned io_bitmap_max; | 431 | unsigned io_bitmap_max; |
412 | /* MSR_IA32_DEBUGCTLMSR value to switch in if TIF_DEBUGCTLMSR is set. */ | 432 | /* MSR_IA32_DEBUGCTLMSR value to switch in if TIF_DEBUGCTLMSR is set. */ |
413 | unsigned long debugctlmsr; | 433 | unsigned long debugctlmsr; |
414 | /* Debug Store - if not 0 points to a DS Save Area configuration; | 434 | #ifdef CONFIG_X86_DS |
415 | * goes into MSR_IA32_DS_AREA */ | 435 | /* Debug Store context; see include/asm-x86/ds.h; goes into MSR_IA32_DS_AREA */ |
416 | unsigned long ds_area_msr; | 436 | struct ds_context *ds_ctx; |
437 | #endif /* CONFIG_X86_DS */ | ||
438 | #ifdef CONFIG_X86_PTRACE_BTS | ||
439 | /* the signal to send on a bts buffer overflow */ | ||
440 | unsigned int bts_ovfl_signal; | ||
441 | #endif /* CONFIG_X86_PTRACE_BTS */ | ||
417 | }; | 442 | }; |
418 | 443 | ||
419 | static inline unsigned long native_get_debugreg(int regno) | 444 | static inline unsigned long native_get_debugreg(int regno) |
@@ -561,41 +586,6 @@ static inline void clear_in_cr4(unsigned long mask) | |||
561 | write_cr4(cr4); | 586 | write_cr4(cr4); |
562 | } | 587 | } |
563 | 588 | ||
564 | struct microcode_header { | ||
565 | unsigned int hdrver; | ||
566 | unsigned int rev; | ||
567 | unsigned int date; | ||
568 | unsigned int sig; | ||
569 | unsigned int cksum; | ||
570 | unsigned int ldrver; | ||
571 | unsigned int pf; | ||
572 | unsigned int datasize; | ||
573 | unsigned int totalsize; | ||
574 | unsigned int reserved[3]; | ||
575 | }; | ||
576 | |||
577 | struct microcode { | ||
578 | struct microcode_header hdr; | ||
579 | unsigned int bits[0]; | ||
580 | }; | ||
581 | |||
582 | typedef struct microcode microcode_t; | ||
583 | typedef struct microcode_header microcode_header_t; | ||
584 | |||
585 | /* microcode format is extended from prescott processors */ | ||
586 | struct extended_signature { | ||
587 | unsigned int sig; | ||
588 | unsigned int pf; | ||
589 | unsigned int cksum; | ||
590 | }; | ||
591 | |||
592 | struct extended_sigtable { | ||
593 | unsigned int count; | ||
594 | unsigned int cksum; | ||
595 | unsigned int reserved[3]; | ||
596 | struct extended_signature sigs[0]; | ||
597 | }; | ||
598 | |||
599 | typedef struct { | 589 | typedef struct { |
600 | unsigned long seg; | 590 | unsigned long seg; |
601 | } mm_segment_t; | 591 | } mm_segment_t; |
@@ -943,4 +933,4 @@ extern void start_thread(struct pt_regs *regs, unsigned long new_ip, | |||
943 | extern int get_tsc_mode(unsigned long adr); | 933 | extern int get_tsc_mode(unsigned long adr); |
944 | extern int set_tsc_mode(unsigned int val); | 934 | extern int set_tsc_mode(unsigned int val); |
945 | 935 | ||
946 | #endif | 936 | #endif /* ASM_X86__PROCESSOR_H */ |
diff --git a/include/asm-x86/proto.h b/include/asm-x86/proto.h index 3dd458c385c0..6e89e8b4de0e 100644 --- a/include/asm-x86/proto.h +++ b/include/asm-x86/proto.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X8664_PROTO_H | 1 | #ifndef ASM_X86__PROTO_H |
2 | #define _ASM_X8664_PROTO_H 1 | 2 | #define ASM_X86__PROTO_H |
3 | 3 | ||
4 | #include <asm/ldt.h> | 4 | #include <asm/ldt.h> |
5 | 5 | ||
@@ -29,4 +29,4 @@ long do_arch_prctl(struct task_struct *task, int code, unsigned long addr); | |||
29 | #define round_up(x, y) (((x) + (y) - 1) & ~((y) - 1)) | 29 | #define round_up(x, y) (((x) + (y) - 1) & ~((y) - 1)) |
30 | #define round_down(x, y) ((x) & ~((y) - 1)) | 30 | #define round_down(x, y) ((x) & ~((y) - 1)) |
31 | 31 | ||
32 | #endif | 32 | #endif /* ASM_X86__PROTO_H */ |
diff --git a/include/asm-x86/ptrace-abi.h b/include/asm-x86/ptrace-abi.h index 72e7b9db29bb..4298b8882a78 100644 --- a/include/asm-x86/ptrace-abi.h +++ b/include/asm-x86/ptrace-abi.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_PTRACE_ABI_H | 1 | #ifndef ASM_X86__PTRACE_ABI_H |
2 | #define _ASM_X86_PTRACE_ABI_H | 2 | #define ASM_X86__PTRACE_ABI_H |
3 | 3 | ||
4 | #ifdef __i386__ | 4 | #ifdef __i386__ |
5 | 5 | ||
@@ -80,8 +80,9 @@ | |||
80 | 80 | ||
81 | #define PTRACE_SINGLEBLOCK 33 /* resume execution until next branch */ | 81 | #define PTRACE_SINGLEBLOCK 33 /* resume execution until next branch */ |
82 | 82 | ||
83 | #ifndef __ASSEMBLY__ | 83 | #ifdef CONFIG_X86_PTRACE_BTS |
84 | 84 | ||
85 | #ifndef __ASSEMBLY__ | ||
85 | #include <asm/types.h> | 86 | #include <asm/types.h> |
86 | 87 | ||
87 | /* configuration/status structure used in PTRACE_BTS_CONFIG and | 88 | /* configuration/status structure used in PTRACE_BTS_CONFIG and |
@@ -97,20 +98,20 @@ struct ptrace_bts_config { | |||
97 | /* actual size of bts_struct in bytes */ | 98 | /* actual size of bts_struct in bytes */ |
98 | __u32 bts_size; | 99 | __u32 bts_size; |
99 | }; | 100 | }; |
100 | #endif | 101 | #endif /* __ASSEMBLY__ */ |
101 | 102 | ||
102 | #define PTRACE_BTS_O_TRACE 0x1 /* branch trace */ | 103 | #define PTRACE_BTS_O_TRACE 0x1 /* branch trace */ |
103 | #define PTRACE_BTS_O_SCHED 0x2 /* scheduling events w/ jiffies */ | 104 | #define PTRACE_BTS_O_SCHED 0x2 /* scheduling events w/ jiffies */ |
104 | #define PTRACE_BTS_O_SIGNAL 0x4 /* send SIG<signal> on buffer overflow | 105 | #define PTRACE_BTS_O_SIGNAL 0x4 /* send SIG<signal> on buffer overflow |
105 | instead of wrapping around */ | 106 | instead of wrapping around */ |
106 | #define PTRACE_BTS_O_CUT_SIZE 0x8 /* cut requested size to max available | 107 | #define PTRACE_BTS_O_ALLOC 0x8 /* (re)allocate buffer */ |
107 | instead of failing */ | ||
108 | 108 | ||
109 | #define PTRACE_BTS_CONFIG 40 | 109 | #define PTRACE_BTS_CONFIG 40 |
110 | /* Configure branch trace recording. | 110 | /* Configure branch trace recording. |
111 | ADDR points to a struct ptrace_bts_config. | 111 | ADDR points to a struct ptrace_bts_config. |
112 | DATA gives the size of that buffer. | 112 | DATA gives the size of that buffer. |
113 | A new buffer is allocated, iff the size changes. | 113 | A new buffer is allocated, if requested in the flags. |
114 | An overflow signal may only be requested for new buffers. | ||
114 | Returns the number of bytes read. | 115 | Returns the number of bytes read. |
115 | */ | 116 | */ |
116 | #define PTRACE_BTS_STATUS 41 | 117 | #define PTRACE_BTS_STATUS 41 |
@@ -119,7 +120,7 @@ struct ptrace_bts_config { | |||
119 | Returns the number of bytes written. | 120 | Returns the number of bytes written. |
120 | */ | 121 | */ |
121 | #define PTRACE_BTS_SIZE 42 | 122 | #define PTRACE_BTS_SIZE 42 |
122 | /* Return the number of available BTS records. | 123 | /* Return the number of available BTS records for draining. |
123 | DATA and ADDR are ignored. | 124 | DATA and ADDR are ignored. |
124 | */ | 125 | */ |
125 | #define PTRACE_BTS_GET 43 | 126 | #define PTRACE_BTS_GET 43 |
@@ -139,5 +140,6 @@ struct ptrace_bts_config { | |||
139 | BTS records are read from oldest to newest. | 140 | BTS records are read from oldest to newest. |
140 | Returns number of BTS records drained. | 141 | Returns number of BTS records drained. |
141 | */ | 142 | */ |
143 | #endif /* CONFIG_X86_PTRACE_BTS */ | ||
142 | 144 | ||
143 | #endif | 145 | #endif /* ASM_X86__PTRACE_ABI_H */ |
diff --git a/include/asm-x86/ptrace.h b/include/asm-x86/ptrace.h index 8a71db803da6..a2025525a15a 100644 --- a/include/asm-x86/ptrace.h +++ b/include/asm-x86/ptrace.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_PTRACE_H | 1 | #ifndef ASM_X86__PTRACE_H |
2 | #define _ASM_X86_PTRACE_H | 2 | #define ASM_X86__PTRACE_H |
3 | 3 | ||
4 | #include <linux/compiler.h> /* For __user */ | 4 | #include <linux/compiler.h> /* For __user */ |
5 | #include <asm/ptrace-abi.h> | 5 | #include <asm/ptrace-abi.h> |
@@ -127,26 +127,59 @@ struct pt_regs { | |||
127 | #endif /* __KERNEL__ */ | 127 | #endif /* __KERNEL__ */ |
128 | #endif /* !__i386__ */ | 128 | #endif /* !__i386__ */ |
129 | 129 | ||
130 | |||
131 | #ifdef CONFIG_X86_PTRACE_BTS | ||
132 | /* a branch trace record entry | ||
133 | * | ||
134 | * In order to unify the interface between various processor versions, | ||
135 | * we use the below data structure for all processors. | ||
136 | */ | ||
137 | enum bts_qualifier { | ||
138 | BTS_INVALID = 0, | ||
139 | BTS_BRANCH, | ||
140 | BTS_TASK_ARRIVES, | ||
141 | BTS_TASK_DEPARTS | ||
142 | }; | ||
143 | |||
144 | struct bts_struct { | ||
145 | __u64 qualifier; | ||
146 | union { | ||
147 | /* BTS_BRANCH */ | ||
148 | struct { | ||
149 | __u64 from_ip; | ||
150 | __u64 to_ip; | ||
151 | } lbr; | ||
152 | /* BTS_TASK_ARRIVES or | ||
153 | BTS_TASK_DEPARTS */ | ||
154 | __u64 jiffies; | ||
155 | } variant; | ||
156 | }; | ||
157 | #endif /* CONFIG_X86_PTRACE_BTS */ | ||
158 | |||
130 | #ifdef __KERNEL__ | 159 | #ifdef __KERNEL__ |
131 | 160 | ||
132 | /* the DS BTS struct is used for ptrace as well */ | 161 | #include <linux/init.h> |
133 | #include <asm/ds.h> | ||
134 | 162 | ||
163 | struct cpuinfo_x86; | ||
135 | struct task_struct; | 164 | struct task_struct; |
136 | 165 | ||
166 | #ifdef CONFIG_X86_PTRACE_BTS | ||
167 | extern void __cpuinit ptrace_bts_init_intel(struct cpuinfo_x86 *); | ||
137 | extern void ptrace_bts_take_timestamp(struct task_struct *, enum bts_qualifier); | 168 | extern void ptrace_bts_take_timestamp(struct task_struct *, enum bts_qualifier); |
169 | #else | ||
170 | #define ptrace_bts_init_intel(config) do {} while (0) | ||
171 | #endif /* CONFIG_X86_PTRACE_BTS */ | ||
138 | 172 | ||
139 | extern unsigned long profile_pc(struct pt_regs *regs); | 173 | extern unsigned long profile_pc(struct pt_regs *regs); |
140 | 174 | ||
141 | extern unsigned long | 175 | extern unsigned long |
142 | convert_ip_to_linear(struct task_struct *child, struct pt_regs *regs); | 176 | convert_ip_to_linear(struct task_struct *child, struct pt_regs *regs); |
143 | |||
144 | #ifdef CONFIG_X86_32 | ||
145 | extern void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs, | 177 | extern void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs, |
146 | int error_code); | 178 | int error_code, int si_code); |
147 | #else | ||
148 | void signal_fault(struct pt_regs *regs, void __user *frame, char *where); | 179 | void signal_fault(struct pt_regs *regs, void __user *frame, char *where); |
149 | #endif | 180 | |
181 | extern long syscall_trace_enter(struct pt_regs *); | ||
182 | extern void syscall_trace_leave(struct pt_regs *); | ||
150 | 183 | ||
151 | static inline unsigned long regs_return_value(struct pt_regs *regs) | 184 | static inline unsigned long regs_return_value(struct pt_regs *regs) |
152 | { | 185 | { |
@@ -213,6 +246,11 @@ static inline unsigned long frame_pointer(struct pt_regs *regs) | |||
213 | return regs->bp; | 246 | return regs->bp; |
214 | } | 247 | } |
215 | 248 | ||
249 | static inline unsigned long user_stack_pointer(struct pt_regs *regs) | ||
250 | { | ||
251 | return regs->sp; | ||
252 | } | ||
253 | |||
216 | /* | 254 | /* |
217 | * These are defined as per linux/ptrace.h, which see. | 255 | * These are defined as per linux/ptrace.h, which see. |
218 | */ | 256 | */ |
@@ -239,4 +277,4 @@ extern int do_set_thread_area(struct task_struct *p, int idx, | |||
239 | 277 | ||
240 | #endif /* !__ASSEMBLY__ */ | 278 | #endif /* !__ASSEMBLY__ */ |
241 | 279 | ||
242 | #endif | 280 | #endif /* ASM_X86__PTRACE_H */ |
diff --git a/include/asm-x86/pvclock-abi.h b/include/asm-x86/pvclock-abi.h index 6857f840b243..edb3b4ecfc81 100644 --- a/include/asm-x86/pvclock-abi.h +++ b/include/asm-x86/pvclock-abi.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_PVCLOCK_ABI_H_ | 1 | #ifndef ASM_X86__PVCLOCK_ABI_H |
2 | #define _ASM_X86_PVCLOCK_ABI_H_ | 2 | #define ASM_X86__PVCLOCK_ABI_H |
3 | #ifndef __ASSEMBLY__ | 3 | #ifndef __ASSEMBLY__ |
4 | 4 | ||
5 | /* | 5 | /* |
@@ -39,4 +39,4 @@ struct pvclock_wall_clock { | |||
39 | } __attribute__((__packed__)); | 39 | } __attribute__((__packed__)); |
40 | 40 | ||
41 | #endif /* __ASSEMBLY__ */ | 41 | #endif /* __ASSEMBLY__ */ |
42 | #endif /* _ASM_X86_PVCLOCK_ABI_H_ */ | 42 | #endif /* ASM_X86__PVCLOCK_ABI_H */ |
diff --git a/include/asm-x86/pvclock.h b/include/asm-x86/pvclock.h index 85b1bba8e0a3..ad29e277fd6d 100644 --- a/include/asm-x86/pvclock.h +++ b/include/asm-x86/pvclock.h | |||
@@ -1,13 +1,14 @@ | |||
1 | #ifndef _ASM_X86_PVCLOCK_H_ | 1 | #ifndef ASM_X86__PVCLOCK_H |
2 | #define _ASM_X86_PVCLOCK_H_ | 2 | #define ASM_X86__PVCLOCK_H |
3 | 3 | ||
4 | #include <linux/clocksource.h> | 4 | #include <linux/clocksource.h> |
5 | #include <asm/pvclock-abi.h> | 5 | #include <asm/pvclock-abi.h> |
6 | 6 | ||
7 | /* some helper functions for xen and kvm pv clock sources */ | 7 | /* some helper functions for xen and kvm pv clock sources */ |
8 | cycle_t pvclock_clocksource_read(struct pvclock_vcpu_time_info *src); | 8 | cycle_t pvclock_clocksource_read(struct pvclock_vcpu_time_info *src); |
9 | unsigned long pvclock_tsc_khz(struct pvclock_vcpu_time_info *src); | ||
9 | void pvclock_read_wallclock(struct pvclock_wall_clock *wall, | 10 | void pvclock_read_wallclock(struct pvclock_wall_clock *wall, |
10 | struct pvclock_vcpu_time_info *vcpu, | 11 | struct pvclock_vcpu_time_info *vcpu, |
11 | struct timespec *ts); | 12 | struct timespec *ts); |
12 | 13 | ||
13 | #endif /* _ASM_X86_PVCLOCK_H_ */ | 14 | #endif /* ASM_X86__PVCLOCK_H */ |
diff --git a/include/asm-x86/reboot.h b/include/asm-x86/reboot.h index 206f355786dc..1c2f0ce9e31e 100644 --- a/include/asm-x86/reboot.h +++ b/include/asm-x86/reboot.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_REBOOT_H | 1 | #ifndef ASM_X86__REBOOT_H |
2 | #define _ASM_REBOOT_H | 2 | #define ASM_X86__REBOOT_H |
3 | 3 | ||
4 | struct pt_regs; | 4 | struct pt_regs; |
5 | 5 | ||
@@ -18,4 +18,4 @@ void native_machine_crash_shutdown(struct pt_regs *regs); | |||
18 | void native_machine_shutdown(void); | 18 | void native_machine_shutdown(void); |
19 | void machine_real_restart(const unsigned char *code, int length); | 19 | void machine_real_restart(const unsigned char *code, int length); |
20 | 20 | ||
21 | #endif /* _ASM_REBOOT_H */ | 21 | #endif /* ASM_X86__REBOOT_H */ |
diff --git a/include/asm-x86/reboot_fixups.h b/include/asm-x86/reboot_fixups.h index 0cb7d87c2b68..2c2987d97570 100644 --- a/include/asm-x86/reboot_fixups.h +++ b/include/asm-x86/reboot_fixups.h | |||
@@ -1,6 +1,6 @@ | |||
1 | #ifndef _LINUX_REBOOT_FIXUPS_H | 1 | #ifndef ASM_X86__REBOOT_FIXUPS_H |
2 | #define _LINUX_REBOOT_FIXUPS_H | 2 | #define ASM_X86__REBOOT_FIXUPS_H |
3 | 3 | ||
4 | extern void mach_reboot_fixups(void); | 4 | extern void mach_reboot_fixups(void); |
5 | 5 | ||
6 | #endif /* _LINUX_REBOOT_FIXUPS_H */ | 6 | #endif /* ASM_X86__REBOOT_FIXUPS_H */ |
diff --git a/include/asm-x86/required-features.h b/include/asm-x86/required-features.h index adec887dd7cd..a01c4e376331 100644 --- a/include/asm-x86/required-features.h +++ b/include/asm-x86/required-features.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_REQUIRED_FEATURES_H | 1 | #ifndef ASM_X86__REQUIRED_FEATURES_H |
2 | #define _ASM_REQUIRED_FEATURES_H 1 | 2 | #define ASM_X86__REQUIRED_FEATURES_H |
3 | 3 | ||
4 | /* Define minimum CPUID feature set for kernel These bits are checked | 4 | /* Define minimum CPUID feature set for kernel These bits are checked |
5 | really early to actually display a visible error message before the | 5 | really early to actually display a visible error message before the |
@@ -41,6 +41,12 @@ | |||
41 | # define NEED_3DNOW 0 | 41 | # define NEED_3DNOW 0 |
42 | #endif | 42 | #endif |
43 | 43 | ||
44 | #if defined(CONFIG_X86_P6_NOP) || defined(CONFIG_X86_64) | ||
45 | # define NEED_NOPL (1<<(X86_FEATURE_NOPL & 31)) | ||
46 | #else | ||
47 | # define NEED_NOPL 0 | ||
48 | #endif | ||
49 | |||
44 | #ifdef CONFIG_X86_64 | 50 | #ifdef CONFIG_X86_64 |
45 | #define NEED_PSE 0 | 51 | #define NEED_PSE 0 |
46 | #define NEED_MSR (1<<(X86_FEATURE_MSR & 31)) | 52 | #define NEED_MSR (1<<(X86_FEATURE_MSR & 31)) |
@@ -67,10 +73,10 @@ | |||
67 | #define REQUIRED_MASK1 (NEED_LM|NEED_3DNOW) | 73 | #define REQUIRED_MASK1 (NEED_LM|NEED_3DNOW) |
68 | 74 | ||
69 | #define REQUIRED_MASK2 0 | 75 | #define REQUIRED_MASK2 0 |
70 | #define REQUIRED_MASK3 0 | 76 | #define REQUIRED_MASK3 (NEED_NOPL) |
71 | #define REQUIRED_MASK4 0 | 77 | #define REQUIRED_MASK4 0 |
72 | #define REQUIRED_MASK5 0 | 78 | #define REQUIRED_MASK5 0 |
73 | #define REQUIRED_MASK6 0 | 79 | #define REQUIRED_MASK6 0 |
74 | #define REQUIRED_MASK7 0 | 80 | #define REQUIRED_MASK7 0 |
75 | 81 | ||
76 | #endif | 82 | #endif /* ASM_X86__REQUIRED_FEATURES_H */ |
diff --git a/include/asm-x86/resume-trace.h b/include/asm-x86/resume-trace.h index 8d9f0b41ee86..e39376d7de50 100644 --- a/include/asm-x86/resume-trace.h +++ b/include/asm-x86/resume-trace.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_RESUME_TRACE_H | 1 | #ifndef ASM_X86__RESUME_TRACE_H |
2 | #define _ASM_X86_RESUME_TRACE_H | 2 | #define ASM_X86__RESUME_TRACE_H |
3 | 3 | ||
4 | #include <asm/asm.h> | 4 | #include <asm/asm.h> |
5 | 5 | ||
@@ -7,7 +7,7 @@ | |||
7 | do { \ | 7 | do { \ |
8 | if (pm_trace_enabled) { \ | 8 | if (pm_trace_enabled) { \ |
9 | const void *tracedata; \ | 9 | const void *tracedata; \ |
10 | asm volatile(_ASM_MOV_UL " $1f,%0\n" \ | 10 | asm volatile(_ASM_MOV " $1f,%0\n" \ |
11 | ".section .tracedata,\"a\"\n" \ | 11 | ".section .tracedata,\"a\"\n" \ |
12 | "1:\t.word %c1\n\t" \ | 12 | "1:\t.word %c1\n\t" \ |
13 | _ASM_PTR " %c2\n" \ | 13 | _ASM_PTR " %c2\n" \ |
@@ -18,4 +18,4 @@ do { \ | |||
18 | } \ | 18 | } \ |
19 | } while (0) | 19 | } while (0) |
20 | 20 | ||
21 | #endif | 21 | #endif /* ASM_X86__RESUME_TRACE_H */ |
diff --git a/include/asm-x86/rio.h b/include/asm-x86/rio.h index c9448bd8968f..5e1256bdee83 100644 --- a/include/asm-x86/rio.h +++ b/include/asm-x86/rio.h | |||
@@ -5,8 +5,8 @@ | |||
5 | * Author: Laurent Vivier <Laurent.Vivier@bull.net> | 5 | * Author: Laurent Vivier <Laurent.Vivier@bull.net> |
6 | */ | 6 | */ |
7 | 7 | ||
8 | #ifndef __ASM_RIO_H | 8 | #ifndef ASM_X86__RIO_H |
9 | #define __ASM_RIO_H | 9 | #define ASM_X86__RIO_H |
10 | 10 | ||
11 | #define RIO_TABLE_VERSION 3 | 11 | #define RIO_TABLE_VERSION 3 |
12 | 12 | ||
@@ -60,4 +60,4 @@ enum { | |||
60 | ALT_CALGARY = 5, /* Second Planar Calgary */ | 60 | ALT_CALGARY = 5, /* Second Planar Calgary */ |
61 | }; | 61 | }; |
62 | 62 | ||
63 | #endif /* __ASM_RIO_H */ | 63 | #endif /* ASM_X86__RIO_H */ |
diff --git a/include/asm-x86/rwlock.h b/include/asm-x86/rwlock.h index 6a8c0d645108..48a3109e1a7d 100644 --- a/include/asm-x86/rwlock.h +++ b/include/asm-x86/rwlock.h | |||
@@ -1,8 +1,8 @@ | |||
1 | #ifndef _ASM_X86_RWLOCK_H | 1 | #ifndef ASM_X86__RWLOCK_H |
2 | #define _ASM_X86_RWLOCK_H | 2 | #define ASM_X86__RWLOCK_H |
3 | 3 | ||
4 | #define RW_LOCK_BIAS 0x01000000 | 4 | #define RW_LOCK_BIAS 0x01000000 |
5 | 5 | ||
6 | /* Actual code is in asm/spinlock.h or in arch/x86/lib/rwlock.S */ | 6 | /* Actual code is in asm/spinlock.h or in arch/x86/lib/rwlock.S */ |
7 | 7 | ||
8 | #endif /* _ASM_X86_RWLOCK_H */ | 8 | #endif /* ASM_X86__RWLOCK_H */ |
diff --git a/include/asm-x86/rwsem.h b/include/asm-x86/rwsem.h index 750f2a3542b3..3ff3015b71a8 100644 --- a/include/asm-x86/rwsem.h +++ b/include/asm-x86/rwsem.h | |||
@@ -29,8 +29,8 @@ | |||
29 | * front, then they'll all be woken up, but no other readers will be. | 29 | * front, then they'll all be woken up, but no other readers will be. |
30 | */ | 30 | */ |
31 | 31 | ||
32 | #ifndef _I386_RWSEM_H | 32 | #ifndef ASM_X86__RWSEM_H |
33 | #define _I386_RWSEM_H | 33 | #define ASM_X86__RWSEM_H |
34 | 34 | ||
35 | #ifndef _LINUX_RWSEM_H | 35 | #ifndef _LINUX_RWSEM_H |
36 | #error "please don't include asm/rwsem.h directly, use linux/rwsem.h instead" | 36 | #error "please don't include asm/rwsem.h directly, use linux/rwsem.h instead" |
@@ -262,4 +262,4 @@ static inline int rwsem_is_locked(struct rw_semaphore *sem) | |||
262 | } | 262 | } |
263 | 263 | ||
264 | #endif /* __KERNEL__ */ | 264 | #endif /* __KERNEL__ */ |
265 | #endif /* _I386_RWSEM_H */ | 265 | #endif /* ASM_X86__RWSEM_H */ |
diff --git a/include/asm-x86/scatterlist.h b/include/asm-x86/scatterlist.h index c0432061f81a..ee48f880005d 100644 --- a/include/asm-x86/scatterlist.h +++ b/include/asm-x86/scatterlist.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_SCATTERLIST_H | 1 | #ifndef ASM_X86__SCATTERLIST_H |
2 | #define _ASM_X86_SCATTERLIST_H | 2 | #define ASM_X86__SCATTERLIST_H |
3 | 3 | ||
4 | #include <asm/types.h> | 4 | #include <asm/types.h> |
5 | 5 | ||
@@ -30,4 +30,4 @@ struct scatterlist { | |||
30 | # define sg_dma_len(sg) ((sg)->dma_length) | 30 | # define sg_dma_len(sg) ((sg)->dma_length) |
31 | #endif | 31 | #endif |
32 | 32 | ||
33 | #endif | 33 | #endif /* ASM_X86__SCATTERLIST_H */ |
diff --git a/include/asm-x86/seccomp_32.h b/include/asm-x86/seccomp_32.h index 36e71c5f306f..cf9ab2dbcef1 100644 --- a/include/asm-x86/seccomp_32.h +++ b/include/asm-x86/seccomp_32.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_SECCOMP_H | 1 | #ifndef ASM_X86__SECCOMP_32_H |
2 | #define _ASM_SECCOMP_H | 2 | #define ASM_X86__SECCOMP_32_H |
3 | 3 | ||
4 | #include <linux/thread_info.h> | 4 | #include <linux/thread_info.h> |
5 | 5 | ||
@@ -14,4 +14,4 @@ | |||
14 | #define __NR_seccomp_exit __NR_exit | 14 | #define __NR_seccomp_exit __NR_exit |
15 | #define __NR_seccomp_sigreturn __NR_sigreturn | 15 | #define __NR_seccomp_sigreturn __NR_sigreturn |
16 | 16 | ||
17 | #endif /* _ASM_SECCOMP_H */ | 17 | #endif /* ASM_X86__SECCOMP_32_H */ |
diff --git a/include/asm-x86/seccomp_64.h b/include/asm-x86/seccomp_64.h index 76cfe69aa63c..03274cea751f 100644 --- a/include/asm-x86/seccomp_64.h +++ b/include/asm-x86/seccomp_64.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_SECCOMP_H | 1 | #ifndef ASM_X86__SECCOMP_64_H |
2 | #define _ASM_SECCOMP_H | 2 | #define ASM_X86__SECCOMP_64_H |
3 | 3 | ||
4 | #include <linux/thread_info.h> | 4 | #include <linux/thread_info.h> |
5 | 5 | ||
@@ -22,4 +22,4 @@ | |||
22 | #define __NR_seccomp_exit_32 __NR_ia32_exit | 22 | #define __NR_seccomp_exit_32 __NR_ia32_exit |
23 | #define __NR_seccomp_sigreturn_32 __NR_ia32_sigreturn | 23 | #define __NR_seccomp_sigreturn_32 __NR_ia32_sigreturn |
24 | 24 | ||
25 | #endif /* _ASM_SECCOMP_H */ | 25 | #endif /* ASM_X86__SECCOMP_64_H */ |
diff --git a/include/asm-x86/segment.h b/include/asm-x86/segment.h index 646452ea9ea3..5d6e69454891 100644 --- a/include/asm-x86/segment.h +++ b/include/asm-x86/segment.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_SEGMENT_H_ | 1 | #ifndef ASM_X86__SEGMENT_H |
2 | #define _ASM_X86_SEGMENT_H_ | 2 | #define ASM_X86__SEGMENT_H |
3 | 3 | ||
4 | /* Constructor for a conventional segment GDT (or LDT) entry */ | 4 | /* Constructor for a conventional segment GDT (or LDT) entry */ |
5 | /* This is a macro so it can be used in initializers */ | 5 | /* This is a macro so it can be used in initializers */ |
@@ -131,12 +131,6 @@ | |||
131 | * Matching rules for certain types of segments. | 131 | * Matching rules for certain types of segments. |
132 | */ | 132 | */ |
133 | 133 | ||
134 | /* Matches only __KERNEL_CS, ignoring PnP / USER / APM segments */ | ||
135 | #define SEGMENT_IS_KERNEL_CODE(x) (((x) & 0xfc) == GDT_ENTRY_KERNEL_CS * 8) | ||
136 | |||
137 | /* Matches __KERNEL_CS and __USER_CS (they must be 2 entries apart) */ | ||
138 | #define SEGMENT_IS_FLAT_CODE(x) (((x) & 0xec) == GDT_ENTRY_KERNEL_CS * 8) | ||
139 | |||
140 | /* Matches PNP_CS32 and PNP_CS16 (they must be consecutive) */ | 134 | /* Matches PNP_CS32 and PNP_CS16 (they must be consecutive) */ |
141 | #define SEGMENT_IS_PNP_CODE(x) (((x) & 0xf4) == GDT_ENTRY_PNPBIOS_BASE * 8) | 135 | #define SEGMENT_IS_PNP_CODE(x) (((x) & 0xf4) == GDT_ENTRY_PNPBIOS_BASE * 8) |
142 | 136 | ||
@@ -212,4 +206,4 @@ extern const char early_idt_handlers[NUM_EXCEPTION_VECTORS][10]; | |||
212 | #endif | 206 | #endif |
213 | #endif | 207 | #endif |
214 | 208 | ||
215 | #endif | 209 | #endif /* ASM_X86__SEGMENT_H */ |
diff --git a/include/asm-x86/sembuf.h b/include/asm-x86/sembuf.h index ee50c801f7b7..81f06b7e5a3f 100644 --- a/include/asm-x86/sembuf.h +++ b/include/asm-x86/sembuf.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_SEMBUF_H | 1 | #ifndef ASM_X86__SEMBUF_H |
2 | #define _ASM_X86_SEMBUF_H | 2 | #define ASM_X86__SEMBUF_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * The semid64_ds structure for x86 architecture. | 5 | * The semid64_ds structure for x86 architecture. |
@@ -21,4 +21,4 @@ struct semid64_ds { | |||
21 | unsigned long __unused4; | 21 | unsigned long __unused4; |
22 | }; | 22 | }; |
23 | 23 | ||
24 | #endif /* _ASM_X86_SEMBUF_H */ | 24 | #endif /* ASM_X86__SEMBUF_H */ |
diff --git a/include/asm-x86/serial.h b/include/asm-x86/serial.h index 628c801535ea..303660b671e5 100644 --- a/include/asm-x86/serial.h +++ b/include/asm-x86/serial.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_SERIAL_H | 1 | #ifndef ASM_X86__SERIAL_H |
2 | #define _ASM_X86_SERIAL_H | 2 | #define ASM_X86__SERIAL_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * This assumes you have a 1.8432 MHz clock for your UART. | 5 | * This assumes you have a 1.8432 MHz clock for your UART. |
@@ -26,4 +26,4 @@ | |||
26 | { 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS }, /* ttyS2 */ \ | 26 | { 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS }, /* ttyS2 */ \ |
27 | { 0, BASE_BAUD, 0x2E8, 3, STD_COM4_FLAGS }, /* ttyS3 */ | 27 | { 0, BASE_BAUD, 0x2E8, 3, STD_COM4_FLAGS }, /* ttyS3 */ |
28 | 28 | ||
29 | #endif /* _ASM_X86_SERIAL_H */ | 29 | #endif /* ASM_X86__SERIAL_H */ |
diff --git a/include/asm-x86/setup.h b/include/asm-x86/setup.h index a07c6f1c01e1..11b6cc14b289 100644 --- a/include/asm-x86/setup.h +++ b/include/asm-x86/setup.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_SETUP_H | 1 | #ifndef ASM_X86__SETUP_H |
2 | #define _ASM_X86_SETUP_H | 2 | #define ASM_X86__SETUP_H |
3 | 3 | ||
4 | #define COMMAND_LINE_SIZE 2048 | 4 | #define COMMAND_LINE_SIZE 2048 |
5 | 5 | ||
@@ -38,9 +38,11 @@ struct x86_quirks { | |||
38 | void (*mpc_oem_pci_bus)(struct mpc_config_bus *m); | 38 | void (*mpc_oem_pci_bus)(struct mpc_config_bus *m); |
39 | void (*smp_read_mpc_oem)(struct mp_config_oemtable *oemtable, | 39 | void (*smp_read_mpc_oem)(struct mp_config_oemtable *oemtable, |
40 | unsigned short oemsize); | 40 | unsigned short oemsize); |
41 | int (*setup_ioapic_ids)(void); | ||
41 | }; | 42 | }; |
42 | 43 | ||
43 | extern struct x86_quirks *x86_quirks; | 44 | extern struct x86_quirks *x86_quirks; |
45 | extern unsigned long saved_video_mode; | ||
44 | 46 | ||
45 | #ifndef CONFIG_PARAVIRT | 47 | #ifndef CONFIG_PARAVIRT |
46 | #define paravirt_post_allocator_init() do {} while (0) | 48 | #define paravirt_post_allocator_init() do {} while (0) |
@@ -100,4 +102,4 @@ void __init x86_64_start_reservations(char *real_mode_data); | |||
100 | #endif /* __ASSEMBLY__ */ | 102 | #endif /* __ASSEMBLY__ */ |
101 | #endif /* __KERNEL__ */ | 103 | #endif /* __KERNEL__ */ |
102 | 104 | ||
103 | #endif /* _ASM_X86_SETUP_H */ | 105 | #endif /* ASM_X86__SETUP_H */ |
diff --git a/include/asm-x86/shmbuf.h b/include/asm-x86/shmbuf.h index b51413b74971..f51aec2298e9 100644 --- a/include/asm-x86/shmbuf.h +++ b/include/asm-x86/shmbuf.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_SHMBUF_H | 1 | #ifndef ASM_X86__SHMBUF_H |
2 | #define _ASM_X86_SHMBUF_H | 2 | #define ASM_X86__SHMBUF_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * The shmid64_ds structure for x86 architecture. | 5 | * The shmid64_ds structure for x86 architecture. |
@@ -48,4 +48,4 @@ struct shminfo64 { | |||
48 | unsigned long __unused4; | 48 | unsigned long __unused4; |
49 | }; | 49 | }; |
50 | 50 | ||
51 | #endif /* _ASM_X86_SHMBUF_H */ | 51 | #endif /* ASM_X86__SHMBUF_H */ |
diff --git a/include/asm-x86/shmparam.h b/include/asm-x86/shmparam.h index 0880cf0917b9..a83a1fd96a0e 100644 --- a/include/asm-x86/shmparam.h +++ b/include/asm-x86/shmparam.h | |||
@@ -1,6 +1,6 @@ | |||
1 | #ifndef _ASM_X86_SHMPARAM_H | 1 | #ifndef ASM_X86__SHMPARAM_H |
2 | #define _ASM_X86_SHMPARAM_H | 2 | #define ASM_X86__SHMPARAM_H |
3 | 3 | ||
4 | #define SHMLBA PAGE_SIZE /* attach addr a multiple of this */ | 4 | #define SHMLBA PAGE_SIZE /* attach addr a multiple of this */ |
5 | 5 | ||
6 | #endif /* _ASM_X86_SHMPARAM_H */ | 6 | #endif /* ASM_X86__SHMPARAM_H */ |
diff --git a/include/asm-x86/sigcontext.h b/include/asm-x86/sigcontext.h index 2f9c884d2c0f..ee813f4fe5d5 100644 --- a/include/asm-x86/sigcontext.h +++ b/include/asm-x86/sigcontext.h | |||
@@ -1,9 +1,43 @@ | |||
1 | #ifndef _ASM_X86_SIGCONTEXT_H | 1 | #ifndef ASM_X86__SIGCONTEXT_H |
2 | #define _ASM_X86_SIGCONTEXT_H | 2 | #define ASM_X86__SIGCONTEXT_H |
3 | 3 | ||
4 | #include <linux/compiler.h> | 4 | #include <linux/compiler.h> |
5 | #include <asm/types.h> | 5 | #include <asm/types.h> |
6 | 6 | ||
7 | #define FP_XSTATE_MAGIC1 0x46505853U | ||
8 | #define FP_XSTATE_MAGIC2 0x46505845U | ||
9 | #define FP_XSTATE_MAGIC2_SIZE sizeof(FP_XSTATE_MAGIC2) | ||
10 | |||
11 | /* | ||
12 | * bytes 464..511 in the current 512byte layout of fxsave/fxrstor frame | ||
13 | * are reserved for SW usage. On cpu's supporting xsave/xrstor, these bytes | ||
14 | * are used to extended the fpstate pointer in the sigcontext, which now | ||
15 | * includes the extended state information along with fpstate information. | ||
16 | * | ||
17 | * Presence of FP_XSTATE_MAGIC1 at the beginning of this SW reserved | ||
18 | * area and FP_XSTATE_MAGIC2 at the end of memory layout | ||
19 | * (extended_size - FP_XSTATE_MAGIC2_SIZE) indicates the presence of the | ||
20 | * extended state information in the memory layout pointed by the fpstate | ||
21 | * pointer in sigcontext. | ||
22 | */ | ||
23 | struct _fpx_sw_bytes { | ||
24 | __u32 magic1; /* FP_XSTATE_MAGIC1 */ | ||
25 | __u32 extended_size; /* total size of the layout referred by | ||
26 | * fpstate pointer in the sigcontext. | ||
27 | */ | ||
28 | __u64 xstate_bv; | ||
29 | /* feature bit mask (including fp/sse/extended | ||
30 | * state) that is present in the memory | ||
31 | * layout. | ||
32 | */ | ||
33 | __u32 xstate_size; /* actual xsave state size, based on the | ||
34 | * features saved in the layout. | ||
35 | * 'extended_size' will be greater than | ||
36 | * 'xstate_size'. | ||
37 | */ | ||
38 | __u32 padding[7]; /* for future use. */ | ||
39 | }; | ||
40 | |||
7 | #ifdef __i386__ | 41 | #ifdef __i386__ |
8 | /* | 42 | /* |
9 | * As documented in the iBCS2 standard.. | 43 | * As documented in the iBCS2 standard.. |
@@ -53,7 +87,13 @@ struct _fpstate { | |||
53 | unsigned long reserved; | 87 | unsigned long reserved; |
54 | struct _fpxreg _fxsr_st[8]; /* FXSR FPU reg data is ignored */ | 88 | struct _fpxreg _fxsr_st[8]; /* FXSR FPU reg data is ignored */ |
55 | struct _xmmreg _xmm[8]; | 89 | struct _xmmreg _xmm[8]; |
56 | unsigned long padding[56]; | 90 | unsigned long padding1[44]; |
91 | |||
92 | union { | ||
93 | unsigned long padding2[12]; | ||
94 | struct _fpx_sw_bytes sw_reserved; /* represents the extended | ||
95 | * state info */ | ||
96 | }; | ||
57 | }; | 97 | }; |
58 | 98 | ||
59 | #define X86_FXSR_MAGIC 0x0000 | 99 | #define X86_FXSR_MAGIC 0x0000 |
@@ -79,7 +119,15 @@ struct sigcontext { | |||
79 | unsigned long flags; | 119 | unsigned long flags; |
80 | unsigned long sp_at_signal; | 120 | unsigned long sp_at_signal; |
81 | unsigned short ss, __ssh; | 121 | unsigned short ss, __ssh; |
82 | struct _fpstate __user *fpstate; | 122 | |
123 | /* | ||
124 | * fpstate is really (struct _fpstate *) or (struct _xstate *) | ||
125 | * depending on the FP_XSTATE_MAGIC1 encoded in the SW reserved | ||
126 | * bytes of (struct _fpstate) and FP_XSTATE_MAGIC2 present at the end | ||
127 | * of extended memory layout. See comments at the defintion of | ||
128 | * (struct _fpx_sw_bytes) | ||
129 | */ | ||
130 | void __user *fpstate; /* zero when no FPU/extended context */ | ||
83 | unsigned long oldmask; | 131 | unsigned long oldmask; |
84 | unsigned long cr2; | 132 | unsigned long cr2; |
85 | }; | 133 | }; |
@@ -130,7 +178,12 @@ struct _fpstate { | |||
130 | __u32 mxcsr_mask; | 178 | __u32 mxcsr_mask; |
131 | __u32 st_space[32]; /* 8*16 bytes for each FP-reg */ | 179 | __u32 st_space[32]; /* 8*16 bytes for each FP-reg */ |
132 | __u32 xmm_space[64]; /* 16*16 bytes for each XMM-reg */ | 180 | __u32 xmm_space[64]; /* 16*16 bytes for each XMM-reg */ |
133 | __u32 reserved2[24]; | 181 | __u32 reserved2[12]; |
182 | union { | ||
183 | __u32 reserved3[12]; | ||
184 | struct _fpx_sw_bytes sw_reserved; /* represents the extended | ||
185 | * state information */ | ||
186 | }; | ||
134 | }; | 187 | }; |
135 | 188 | ||
136 | #ifdef __KERNEL__ | 189 | #ifdef __KERNEL__ |
@@ -161,7 +214,15 @@ struct sigcontext { | |||
161 | unsigned long trapno; | 214 | unsigned long trapno; |
162 | unsigned long oldmask; | 215 | unsigned long oldmask; |
163 | unsigned long cr2; | 216 | unsigned long cr2; |
164 | struct _fpstate __user *fpstate; /* zero when no FPU context */ | 217 | |
218 | /* | ||
219 | * fpstate is really (struct _fpstate *) or (struct _xstate *) | ||
220 | * depending on the FP_XSTATE_MAGIC1 encoded in the SW reserved | ||
221 | * bytes of (struct _fpstate) and FP_XSTATE_MAGIC2 present at the end | ||
222 | * of extended memory layout. See comments at the defintion of | ||
223 | * (struct _fpx_sw_bytes) | ||
224 | */ | ||
225 | void __user *fpstate; /* zero when no FPU/extended context */ | ||
165 | unsigned long reserved1[8]; | 226 | unsigned long reserved1[8]; |
166 | }; | 227 | }; |
167 | #else /* __KERNEL__ */ | 228 | #else /* __KERNEL__ */ |
@@ -202,4 +263,22 @@ struct sigcontext { | |||
202 | 263 | ||
203 | #endif /* !__i386__ */ | 264 | #endif /* !__i386__ */ |
204 | 265 | ||
205 | #endif | 266 | struct _xsave_hdr { |
267 | __u64 xstate_bv; | ||
268 | __u64 reserved1[2]; | ||
269 | __u64 reserved2[5]; | ||
270 | }; | ||
271 | |||
272 | /* | ||
273 | * Extended state pointed by the fpstate pointer in the sigcontext. | ||
274 | * In addition to the fpstate, information encoded in the xstate_hdr | ||
275 | * indicates the presence of other extended state information | ||
276 | * supported by the processor and OS. | ||
277 | */ | ||
278 | struct _xstate { | ||
279 | struct _fpstate fpstate; | ||
280 | struct _xsave_hdr xstate_hdr; | ||
281 | /* new processor state extensions go here */ | ||
282 | }; | ||
283 | |||
284 | #endif /* ASM_X86__SIGCONTEXT_H */ | ||
diff --git a/include/asm-x86/sigcontext32.h b/include/asm-x86/sigcontext32.h index 57a9686fb491..8c347032c2f2 100644 --- a/include/asm-x86/sigcontext32.h +++ b/include/asm-x86/sigcontext32.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _SIGCONTEXT32_H | 1 | #ifndef ASM_X86__SIGCONTEXT32_H |
2 | #define _SIGCONTEXT32_H 1 | 2 | #define ASM_X86__SIGCONTEXT32_H |
3 | 3 | ||
4 | /* signal context for 32bit programs. */ | 4 | /* signal context for 32bit programs. */ |
5 | 5 | ||
@@ -40,7 +40,11 @@ struct _fpstate_ia32 { | |||
40 | __u32 reserved; | 40 | __u32 reserved; |
41 | struct _fpxreg _fxsr_st[8]; | 41 | struct _fpxreg _fxsr_st[8]; |
42 | struct _xmmreg _xmm[8]; /* It's actually 16 */ | 42 | struct _xmmreg _xmm[8]; /* It's actually 16 */ |
43 | __u32 padding[56]; | 43 | __u32 padding[44]; |
44 | union { | ||
45 | __u32 padding2[12]; | ||
46 | struct _fpx_sw_bytes sw_reserved; | ||
47 | }; | ||
44 | }; | 48 | }; |
45 | 49 | ||
46 | struct sigcontext_ia32 { | 50 | struct sigcontext_ia32 { |
@@ -68,4 +72,4 @@ struct sigcontext_ia32 { | |||
68 | unsigned int cr2; | 72 | unsigned int cr2; |
69 | }; | 73 | }; |
70 | 74 | ||
71 | #endif | 75 | #endif /* ASM_X86__SIGCONTEXT32_H */ |
diff --git a/include/asm-x86/siginfo.h b/include/asm-x86/siginfo.h index a477bea0c2a1..808bdfb2958c 100644 --- a/include/asm-x86/siginfo.h +++ b/include/asm-x86/siginfo.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_SIGINFO_H | 1 | #ifndef ASM_X86__SIGINFO_H |
2 | #define _ASM_X86_SIGINFO_H | 2 | #define ASM_X86__SIGINFO_H |
3 | 3 | ||
4 | #ifdef __x86_64__ | 4 | #ifdef __x86_64__ |
5 | # define __ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int)) | 5 | # define __ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int)) |
@@ -7,4 +7,4 @@ | |||
7 | 7 | ||
8 | #include <asm-generic/siginfo.h> | 8 | #include <asm-generic/siginfo.h> |
9 | 9 | ||
10 | #endif | 10 | #endif /* ASM_X86__SIGINFO_H */ |
diff --git a/include/asm-x86/signal.h b/include/asm-x86/signal.h index 6dac49364e95..65acc82d267a 100644 --- a/include/asm-x86/signal.h +++ b/include/asm-x86/signal.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_SIGNAL_H | 1 | #ifndef ASM_X86__SIGNAL_H |
2 | #define _ASM_X86_SIGNAL_H | 2 | #define ASM_X86__SIGNAL_H |
3 | 3 | ||
4 | #ifndef __ASSEMBLY__ | 4 | #ifndef __ASSEMBLY__ |
5 | #include <linux/types.h> | 5 | #include <linux/types.h> |
@@ -140,6 +140,9 @@ struct sigaction { | |||
140 | struct k_sigaction { | 140 | struct k_sigaction { |
141 | struct sigaction sa; | 141 | struct sigaction sa; |
142 | }; | 142 | }; |
143 | |||
144 | extern void do_notify_resume(struct pt_regs *, void *, __u32); | ||
145 | |||
143 | # else /* __KERNEL__ */ | 146 | # else /* __KERNEL__ */ |
144 | /* Here we must cater to libcs that poke about in kernel headers. */ | 147 | /* Here we must cater to libcs that poke about in kernel headers. */ |
145 | 148 | ||
@@ -256,4 +259,4 @@ struct pt_regs; | |||
256 | #endif /* __KERNEL__ */ | 259 | #endif /* __KERNEL__ */ |
257 | #endif /* __ASSEMBLY__ */ | 260 | #endif /* __ASSEMBLY__ */ |
258 | 261 | ||
259 | #endif | 262 | #endif /* ASM_X86__SIGNAL_H */ |
diff --git a/include/asm-x86/smp.h b/include/asm-x86/smp.h index 3c877f74f279..a6afc29f2dd9 100644 --- a/include/asm-x86/smp.h +++ b/include/asm-x86/smp.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_SMP_H_ | 1 | #ifndef ASM_X86__SMP_H |
2 | #define _ASM_X86_SMP_H_ | 2 | #define ASM_X86__SMP_H |
3 | #ifndef __ASSEMBLY__ | 3 | #ifndef __ASSEMBLY__ |
4 | #include <linux/cpumask.h> | 4 | #include <linux/cpumask.h> |
5 | #include <linux/init.h> | 5 | #include <linux/init.h> |
@@ -34,6 +34,9 @@ extern cpumask_t cpu_initialized; | |||
34 | DECLARE_PER_CPU(cpumask_t, cpu_sibling_map); | 34 | DECLARE_PER_CPU(cpumask_t, cpu_sibling_map); |
35 | DECLARE_PER_CPU(cpumask_t, cpu_core_map); | 35 | DECLARE_PER_CPU(cpumask_t, cpu_core_map); |
36 | DECLARE_PER_CPU(u16, cpu_llc_id); | 36 | DECLARE_PER_CPU(u16, cpu_llc_id); |
37 | #ifdef CONFIG_X86_32 | ||
38 | DECLARE_PER_CPU(int, cpu_number); | ||
39 | #endif | ||
37 | 40 | ||
38 | DECLARE_EARLY_PER_CPU(u16, x86_cpu_to_apicid); | 41 | DECLARE_EARLY_PER_CPU(u16, x86_cpu_to_apicid); |
39 | DECLARE_EARLY_PER_CPU(u16, x86_bios_cpu_apicid); | 42 | DECLARE_EARLY_PER_CPU(u16, x86_bios_cpu_apicid); |
@@ -47,12 +50,16 @@ extern struct { | |||
47 | struct smp_ops { | 50 | struct smp_ops { |
48 | void (*smp_prepare_boot_cpu)(void); | 51 | void (*smp_prepare_boot_cpu)(void); |
49 | void (*smp_prepare_cpus)(unsigned max_cpus); | 52 | void (*smp_prepare_cpus)(unsigned max_cpus); |
50 | int (*cpu_up)(unsigned cpu); | ||
51 | void (*smp_cpus_done)(unsigned max_cpus); | 53 | void (*smp_cpus_done)(unsigned max_cpus); |
52 | 54 | ||
53 | void (*smp_send_stop)(void); | 55 | void (*smp_send_stop)(void); |
54 | void (*smp_send_reschedule)(int cpu); | 56 | void (*smp_send_reschedule)(int cpu); |
55 | 57 | ||
58 | int (*cpu_up)(unsigned cpu); | ||
59 | int (*cpu_disable)(void); | ||
60 | void (*cpu_die)(unsigned int cpu); | ||
61 | void (*play_dead)(void); | ||
62 | |||
56 | void (*send_call_func_ipi)(cpumask_t mask); | 63 | void (*send_call_func_ipi)(cpumask_t mask); |
57 | void (*send_call_func_single_ipi)(int cpu); | 64 | void (*send_call_func_single_ipi)(int cpu); |
58 | }; | 65 | }; |
@@ -91,6 +98,21 @@ static inline int __cpu_up(unsigned int cpu) | |||
91 | return smp_ops.cpu_up(cpu); | 98 | return smp_ops.cpu_up(cpu); |
92 | } | 99 | } |
93 | 100 | ||
101 | static inline int __cpu_disable(void) | ||
102 | { | ||
103 | return smp_ops.cpu_disable(); | ||
104 | } | ||
105 | |||
106 | static inline void __cpu_die(unsigned int cpu) | ||
107 | { | ||
108 | smp_ops.cpu_die(cpu); | ||
109 | } | ||
110 | |||
111 | static inline void play_dead(void) | ||
112 | { | ||
113 | smp_ops.play_dead(); | ||
114 | } | ||
115 | |||
94 | static inline void smp_send_reschedule(int cpu) | 116 | static inline void smp_send_reschedule(int cpu) |
95 | { | 117 | { |
96 | smp_ops.smp_send_reschedule(cpu); | 118 | smp_ops.smp_send_reschedule(cpu); |
@@ -106,15 +128,20 @@ static inline void arch_send_call_function_ipi(cpumask_t mask) | |||
106 | smp_ops.send_call_func_ipi(mask); | 128 | smp_ops.send_call_func_ipi(mask); |
107 | } | 129 | } |
108 | 130 | ||
131 | void cpu_disable_common(void); | ||
109 | void native_smp_prepare_boot_cpu(void); | 132 | void native_smp_prepare_boot_cpu(void); |
110 | void native_smp_prepare_cpus(unsigned int max_cpus); | 133 | void native_smp_prepare_cpus(unsigned int max_cpus); |
111 | void native_smp_cpus_done(unsigned int max_cpus); | 134 | void native_smp_cpus_done(unsigned int max_cpus); |
112 | int native_cpu_up(unsigned int cpunum); | 135 | int native_cpu_up(unsigned int cpunum); |
136 | int native_cpu_disable(void); | ||
137 | void native_cpu_die(unsigned int cpu); | ||
138 | void native_play_dead(void); | ||
139 | void play_dead_common(void); | ||
140 | |||
113 | void native_send_call_func_ipi(cpumask_t mask); | 141 | void native_send_call_func_ipi(cpumask_t mask); |
114 | void native_send_call_func_single_ipi(int cpu); | 142 | void native_send_call_func_single_ipi(int cpu); |
115 | 143 | ||
116 | extern int __cpu_disable(void); | 144 | extern void prefill_possible_map(void); |
117 | extern void __cpu_die(unsigned int cpu); | ||
118 | 145 | ||
119 | void smp_store_cpu_info(int id); | 146 | void smp_store_cpu_info(int id); |
120 | #define cpu_physical_id(cpu) per_cpu(x86_cpu_to_apicid, cpu) | 147 | #define cpu_physical_id(cpu) per_cpu(x86_cpu_to_apicid, cpu) |
@@ -124,15 +151,11 @@ static inline int num_booting_cpus(void) | |||
124 | { | 151 | { |
125 | return cpus_weight(cpu_callout_map); | 152 | return cpus_weight(cpu_callout_map); |
126 | } | 153 | } |
127 | #endif /* CONFIG_SMP */ | ||
128 | |||
129 | #if defined(CONFIG_SMP) && defined(CONFIG_HOTPLUG_CPU) | ||
130 | extern void prefill_possible_map(void); | ||
131 | #else | 154 | #else |
132 | static inline void prefill_possible_map(void) | 155 | static inline void prefill_possible_map(void) |
133 | { | 156 | { |
134 | } | 157 | } |
135 | #endif | 158 | #endif /* CONFIG_SMP */ |
136 | 159 | ||
137 | extern unsigned disabled_cpus __cpuinitdata; | 160 | extern unsigned disabled_cpus __cpuinitdata; |
138 | 161 | ||
@@ -142,7 +165,6 @@ extern unsigned disabled_cpus __cpuinitdata; | |||
142 | * from the initial startup. We map APIC_BASE very early in page_setup(), | 165 | * from the initial startup. We map APIC_BASE very early in page_setup(), |
143 | * so this is correct in the x86 case. | 166 | * so this is correct in the x86 case. |
144 | */ | 167 | */ |
145 | DECLARE_PER_CPU(int, cpu_number); | ||
146 | #define raw_smp_processor_id() (x86_read_percpu(cpu_number)) | 168 | #define raw_smp_processor_id() (x86_read_percpu(cpu_number)) |
147 | extern int safe_smp_processor_id(void); | 169 | extern int safe_smp_processor_id(void); |
148 | 170 | ||
@@ -165,30 +187,33 @@ extern int safe_smp_processor_id(void); | |||
165 | 187 | ||
166 | #ifdef CONFIG_X86_LOCAL_APIC | 188 | #ifdef CONFIG_X86_LOCAL_APIC |
167 | 189 | ||
190 | #ifndef CONFIG_X86_64 | ||
168 | static inline int logical_smp_processor_id(void) | 191 | static inline int logical_smp_processor_id(void) |
169 | { | 192 | { |
170 | /* we don't want to mark this access volatile - bad code generation */ | 193 | /* we don't want to mark this access volatile - bad code generation */ |
171 | return GET_APIC_LOGICAL_ID(*(u32 *)(APIC_BASE + APIC_LDR)); | 194 | return GET_APIC_LOGICAL_ID(*(u32 *)(APIC_BASE + APIC_LDR)); |
172 | } | 195 | } |
173 | 196 | ||
174 | #ifndef CONFIG_X86_64 | 197 | #include <mach_apicdef.h> |
175 | static inline unsigned int read_apic_id(void) | 198 | static inline unsigned int read_apic_id(void) |
176 | { | 199 | { |
177 | return *(u32 *)(APIC_BASE + APIC_ID); | 200 | unsigned int reg; |
201 | |||
202 | reg = *(u32 *)(APIC_BASE + APIC_ID); | ||
203 | |||
204 | return GET_APIC_ID(reg); | ||
178 | } | 205 | } |
179 | #else | ||
180 | extern unsigned int read_apic_id(void); | ||
181 | #endif | 206 | #endif |
182 | 207 | ||
183 | 208 | ||
184 | # ifdef APIC_DEFINITION | 209 | # if defined(APIC_DEFINITION) || defined(CONFIG_X86_64) |
185 | extern int hard_smp_processor_id(void); | 210 | extern int hard_smp_processor_id(void); |
186 | # else | 211 | # else |
187 | # include <mach_apicdef.h> | 212 | #include <mach_apicdef.h> |
188 | static inline int hard_smp_processor_id(void) | 213 | static inline int hard_smp_processor_id(void) |
189 | { | 214 | { |
190 | /* we don't want to mark this access volatile - bad code generation */ | 215 | /* we don't want to mark this access volatile - bad code generation */ |
191 | return GET_APIC_ID(read_apic_id()); | 216 | return read_apic_id(); |
192 | } | 217 | } |
193 | # endif /* APIC_DEFINITION */ | 218 | # endif /* APIC_DEFINITION */ |
194 | 219 | ||
@@ -200,9 +225,5 @@ static inline int hard_smp_processor_id(void) | |||
200 | 225 | ||
201 | #endif /* CONFIG_X86_LOCAL_APIC */ | 226 | #endif /* CONFIG_X86_LOCAL_APIC */ |
202 | 227 | ||
203 | #ifdef CONFIG_HOTPLUG_CPU | ||
204 | extern void cpu_uninit(void); | ||
205 | #endif | ||
206 | |||
207 | #endif /* __ASSEMBLY__ */ | 228 | #endif /* __ASSEMBLY__ */ |
208 | #endif | 229 | #endif /* ASM_X86__SMP_H */ |
diff --git a/include/asm-x86/socket.h b/include/asm-x86/socket.h index 80af9c4ccad7..db73274c83c3 100644 --- a/include/asm-x86/socket.h +++ b/include/asm-x86/socket.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_SOCKET_H | 1 | #ifndef ASM_X86__SOCKET_H |
2 | #define _ASM_SOCKET_H | 2 | #define ASM_X86__SOCKET_H |
3 | 3 | ||
4 | #include <asm/sockios.h> | 4 | #include <asm/sockios.h> |
5 | 5 | ||
@@ -54,4 +54,4 @@ | |||
54 | 54 | ||
55 | #define SO_MARK 36 | 55 | #define SO_MARK 36 |
56 | 56 | ||
57 | #endif /* _ASM_SOCKET_H */ | 57 | #endif /* ASM_X86__SOCKET_H */ |
diff --git a/include/asm-x86/sockios.h b/include/asm-x86/sockios.h index 49cc72b5d3c9..a006704fdc84 100644 --- a/include/asm-x86/sockios.h +++ b/include/asm-x86/sockios.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_SOCKIOS_H | 1 | #ifndef ASM_X86__SOCKIOS_H |
2 | #define _ASM_X86_SOCKIOS_H | 2 | #define ASM_X86__SOCKIOS_H |
3 | 3 | ||
4 | /* Socket-level I/O control calls. */ | 4 | /* Socket-level I/O control calls. */ |
5 | #define FIOSETOWN 0x8901 | 5 | #define FIOSETOWN 0x8901 |
@@ -10,4 +10,4 @@ | |||
10 | #define SIOCGSTAMP 0x8906 /* Get stamp (timeval) */ | 10 | #define SIOCGSTAMP 0x8906 /* Get stamp (timeval) */ |
11 | #define SIOCGSTAMPNS 0x8907 /* Get stamp (timespec) */ | 11 | #define SIOCGSTAMPNS 0x8907 /* Get stamp (timespec) */ |
12 | 12 | ||
13 | #endif /* _ASM_X86_SOCKIOS_H */ | 13 | #endif /* ASM_X86__SOCKIOS_H */ |
diff --git a/include/asm-x86/sparsemem.h b/include/asm-x86/sparsemem.h index 9bd48b0a534b..38f8e6bc3186 100644 --- a/include/asm-x86/sparsemem.h +++ b/include/asm-x86/sparsemem.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_SPARSEMEM_H | 1 | #ifndef ASM_X86__SPARSEMEM_H |
2 | #define _ASM_X86_SPARSEMEM_H | 2 | #define ASM_X86__SPARSEMEM_H |
3 | 3 | ||
4 | #ifdef CONFIG_SPARSEMEM | 4 | #ifdef CONFIG_SPARSEMEM |
5 | /* | 5 | /* |
@@ -31,4 +31,4 @@ | |||
31 | #endif | 31 | #endif |
32 | 32 | ||
33 | #endif /* CONFIG_SPARSEMEM */ | 33 | #endif /* CONFIG_SPARSEMEM */ |
34 | #endif | 34 | #endif /* ASM_X86__SPARSEMEM_H */ |
diff --git a/include/asm-x86/spinlock.h b/include/asm-x86/spinlock.h index e39c790dbfd2..157ff7fab97a 100644 --- a/include/asm-x86/spinlock.h +++ b/include/asm-x86/spinlock.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _X86_SPINLOCK_H_ | 1 | #ifndef ASM_X86__SPINLOCK_H |
2 | #define _X86_SPINLOCK_H_ | 2 | #define ASM_X86__SPINLOCK_H |
3 | 3 | ||
4 | #include <asm/atomic.h> | 4 | #include <asm/atomic.h> |
5 | #include <asm/rwlock.h> | 5 | #include <asm/rwlock.h> |
@@ -21,8 +21,10 @@ | |||
21 | 21 | ||
22 | #ifdef CONFIG_X86_32 | 22 | #ifdef CONFIG_X86_32 |
23 | # define LOCK_PTR_REG "a" | 23 | # define LOCK_PTR_REG "a" |
24 | # define REG_PTR_MODE "k" | ||
24 | #else | 25 | #else |
25 | # define LOCK_PTR_REG "D" | 26 | # define LOCK_PTR_REG "D" |
27 | # define REG_PTR_MODE "q" | ||
26 | #endif | 28 | #endif |
27 | 29 | ||
28 | #if defined(CONFIG_X86_32) && \ | 30 | #if defined(CONFIG_X86_32) && \ |
@@ -54,19 +56,7 @@ | |||
54 | * much between them in performance though, especially as locks are out of line. | 56 | * much between them in performance though, especially as locks are out of line. |
55 | */ | 57 | */ |
56 | #if (NR_CPUS < 256) | 58 | #if (NR_CPUS < 256) |
57 | static inline int __ticket_spin_is_locked(raw_spinlock_t *lock) | 59 | #define TICKET_SHIFT 8 |
58 | { | ||
59 | int tmp = ACCESS_ONCE(lock->slock); | ||
60 | |||
61 | return (((tmp >> 8) & 0xff) != (tmp & 0xff)); | ||
62 | } | ||
63 | |||
64 | static inline int __ticket_spin_is_contended(raw_spinlock_t *lock) | ||
65 | { | ||
66 | int tmp = ACCESS_ONCE(lock->slock); | ||
67 | |||
68 | return (((tmp >> 8) - tmp) & 0xff) > 1; | ||
69 | } | ||
70 | 60 | ||
71 | static __always_inline void __ticket_spin_lock(raw_spinlock_t *lock) | 61 | static __always_inline void __ticket_spin_lock(raw_spinlock_t *lock) |
72 | { | 62 | { |
@@ -89,19 +79,17 @@ static __always_inline void __ticket_spin_lock(raw_spinlock_t *lock) | |||
89 | 79 | ||
90 | static __always_inline int __ticket_spin_trylock(raw_spinlock_t *lock) | 80 | static __always_inline int __ticket_spin_trylock(raw_spinlock_t *lock) |
91 | { | 81 | { |
92 | int tmp; | 82 | int tmp, new; |
93 | short new; | ||
94 | 83 | ||
95 | asm volatile("movw %2,%w0\n\t" | 84 | asm volatile("movzwl %2, %0\n\t" |
96 | "cmpb %h0,%b0\n\t" | 85 | "cmpb %h0,%b0\n\t" |
86 | "leal 0x100(%" REG_PTR_MODE "0), %1\n\t" | ||
97 | "jne 1f\n\t" | 87 | "jne 1f\n\t" |
98 | "movw %w0,%w1\n\t" | 88 | LOCK_PREFIX "cmpxchgw %w1,%2\n\t" |
99 | "incb %h1\n\t" | ||
100 | "lock ; cmpxchgw %w1,%2\n\t" | ||
101 | "1:" | 89 | "1:" |
102 | "sete %b1\n\t" | 90 | "sete %b1\n\t" |
103 | "movzbl %b1,%0\n\t" | 91 | "movzbl %b1,%0\n\t" |
104 | : "=&a" (tmp), "=Q" (new), "+m" (lock->slock) | 92 | : "=&a" (tmp), "=&q" (new), "+m" (lock->slock) |
105 | : | 93 | : |
106 | : "memory", "cc"); | 94 | : "memory", "cc"); |
107 | 95 | ||
@@ -116,26 +104,14 @@ static __always_inline void __ticket_spin_unlock(raw_spinlock_t *lock) | |||
116 | : "memory", "cc"); | 104 | : "memory", "cc"); |
117 | } | 105 | } |
118 | #else | 106 | #else |
119 | static inline int __ticket_spin_is_locked(raw_spinlock_t *lock) | 107 | #define TICKET_SHIFT 16 |
120 | { | ||
121 | int tmp = ACCESS_ONCE(lock->slock); | ||
122 | |||
123 | return (((tmp >> 16) & 0xffff) != (tmp & 0xffff)); | ||
124 | } | ||
125 | |||
126 | static inline int __ticket_spin_is_contended(raw_spinlock_t *lock) | ||
127 | { | ||
128 | int tmp = ACCESS_ONCE(lock->slock); | ||
129 | |||
130 | return (((tmp >> 16) - tmp) & 0xffff) > 1; | ||
131 | } | ||
132 | 108 | ||
133 | static __always_inline void __ticket_spin_lock(raw_spinlock_t *lock) | 109 | static __always_inline void __ticket_spin_lock(raw_spinlock_t *lock) |
134 | { | 110 | { |
135 | int inc = 0x00010000; | 111 | int inc = 0x00010000; |
136 | int tmp; | 112 | int tmp; |
137 | 113 | ||
138 | asm volatile("lock ; xaddl %0, %1\n" | 114 | asm volatile(LOCK_PREFIX "xaddl %0, %1\n" |
139 | "movzwl %w0, %2\n\t" | 115 | "movzwl %w0, %2\n\t" |
140 | "shrl $16, %0\n\t" | 116 | "shrl $16, %0\n\t" |
141 | "1:\t" | 117 | "1:\t" |
@@ -146,7 +122,7 @@ static __always_inline void __ticket_spin_lock(raw_spinlock_t *lock) | |||
146 | /* don't need lfence here, because loads are in-order */ | 122 | /* don't need lfence here, because loads are in-order */ |
147 | "jmp 1b\n" | 123 | "jmp 1b\n" |
148 | "2:" | 124 | "2:" |
149 | : "+Q" (inc), "+m" (lock->slock), "=r" (tmp) | 125 | : "+r" (inc), "+m" (lock->slock), "=&r" (tmp) |
150 | : | 126 | : |
151 | : "memory", "cc"); | 127 | : "memory", "cc"); |
152 | } | 128 | } |
@@ -160,13 +136,13 @@ static __always_inline int __ticket_spin_trylock(raw_spinlock_t *lock) | |||
160 | "movl %0,%1\n\t" | 136 | "movl %0,%1\n\t" |
161 | "roll $16, %0\n\t" | 137 | "roll $16, %0\n\t" |
162 | "cmpl %0,%1\n\t" | 138 | "cmpl %0,%1\n\t" |
139 | "leal 0x00010000(%" REG_PTR_MODE "0), %1\n\t" | ||
163 | "jne 1f\n\t" | 140 | "jne 1f\n\t" |
164 | "addl $0x00010000, %1\n\t" | 141 | LOCK_PREFIX "cmpxchgl %1,%2\n\t" |
165 | "lock ; cmpxchgl %1,%2\n\t" | ||
166 | "1:" | 142 | "1:" |
167 | "sete %b1\n\t" | 143 | "sete %b1\n\t" |
168 | "movzbl %b1,%0\n\t" | 144 | "movzbl %b1,%0\n\t" |
169 | : "=&a" (tmp), "=r" (new), "+m" (lock->slock) | 145 | : "=&a" (tmp), "=&q" (new), "+m" (lock->slock) |
170 | : | 146 | : |
171 | : "memory", "cc"); | 147 | : "memory", "cc"); |
172 | 148 | ||
@@ -182,7 +158,19 @@ static __always_inline void __ticket_spin_unlock(raw_spinlock_t *lock) | |||
182 | } | 158 | } |
183 | #endif | 159 | #endif |
184 | 160 | ||
185 | #define __raw_spin_lock_flags(lock, flags) __raw_spin_lock(lock) | 161 | static inline int __ticket_spin_is_locked(raw_spinlock_t *lock) |
162 | { | ||
163 | int tmp = ACCESS_ONCE(lock->slock); | ||
164 | |||
165 | return !!(((tmp >> TICKET_SHIFT) ^ tmp) & ((1 << TICKET_SHIFT) - 1)); | ||
166 | } | ||
167 | |||
168 | static inline int __ticket_spin_is_contended(raw_spinlock_t *lock) | ||
169 | { | ||
170 | int tmp = ACCESS_ONCE(lock->slock); | ||
171 | |||
172 | return (((tmp >> TICKET_SHIFT) - tmp) & ((1 << TICKET_SHIFT) - 1)) > 1; | ||
173 | } | ||
186 | 174 | ||
187 | #ifdef CONFIG_PARAVIRT | 175 | #ifdef CONFIG_PARAVIRT |
188 | /* | 176 | /* |
@@ -272,6 +260,13 @@ static __always_inline void __raw_spin_unlock(raw_spinlock_t *lock) | |||
272 | { | 260 | { |
273 | __ticket_spin_unlock(lock); | 261 | __ticket_spin_unlock(lock); |
274 | } | 262 | } |
263 | |||
264 | static __always_inline void __raw_spin_lock_flags(raw_spinlock_t *lock, | ||
265 | unsigned long flags) | ||
266 | { | ||
267 | __raw_spin_lock(lock); | ||
268 | } | ||
269 | |||
275 | #endif /* CONFIG_PARAVIRT */ | 270 | #endif /* CONFIG_PARAVIRT */ |
276 | 271 | ||
277 | static inline void __raw_spin_unlock_wait(raw_spinlock_t *lock) | 272 | static inline void __raw_spin_unlock_wait(raw_spinlock_t *lock) |
@@ -366,4 +361,4 @@ static inline void __raw_write_unlock(raw_rwlock_t *rw) | |||
366 | #define _raw_read_relax(lock) cpu_relax() | 361 | #define _raw_read_relax(lock) cpu_relax() |
367 | #define _raw_write_relax(lock) cpu_relax() | 362 | #define _raw_write_relax(lock) cpu_relax() |
368 | 363 | ||
369 | #endif | 364 | #endif /* ASM_X86__SPINLOCK_H */ |
diff --git a/include/asm-x86/spinlock_types.h b/include/asm-x86/spinlock_types.h index 06c071c9eee9..6aa9b562c508 100644 --- a/include/asm-x86/spinlock_types.h +++ b/include/asm-x86/spinlock_types.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_SPINLOCK_TYPES_H | 1 | #ifndef ASM_X86__SPINLOCK_TYPES_H |
2 | #define __ASM_SPINLOCK_TYPES_H | 2 | #define ASM_X86__SPINLOCK_TYPES_H |
3 | 3 | ||
4 | #ifndef __LINUX_SPINLOCK_TYPES_H | 4 | #ifndef __LINUX_SPINLOCK_TYPES_H |
5 | # error "please don't include this file directly" | 5 | # error "please don't include this file directly" |
@@ -17,4 +17,4 @@ typedef struct { | |||
17 | 17 | ||
18 | #define __RAW_RW_LOCK_UNLOCKED { RW_LOCK_BIAS } | 18 | #define __RAW_RW_LOCK_UNLOCKED { RW_LOCK_BIAS } |
19 | 19 | ||
20 | #endif | 20 | #endif /* ASM_X86__SPINLOCK_TYPES_H */ |
diff --git a/include/asm-x86/srat.h b/include/asm-x86/srat.h index 774c919dc232..5363e4f7e1cd 100644 --- a/include/asm-x86/srat.h +++ b/include/asm-x86/srat.h | |||
@@ -24,8 +24,8 @@ | |||
24 | * Send feedback to Pat Gaughen <gone@us.ibm.com> | 24 | * Send feedback to Pat Gaughen <gone@us.ibm.com> |
25 | */ | 25 | */ |
26 | 26 | ||
27 | #ifndef _ASM_SRAT_H_ | 27 | #ifndef ASM_X86__SRAT_H |
28 | #define _ASM_SRAT_H_ | 28 | #define ASM_X86__SRAT_H |
29 | 29 | ||
30 | #ifdef CONFIG_ACPI_NUMA | 30 | #ifdef CONFIG_ACPI_NUMA |
31 | extern int get_memcfg_from_srat(void); | 31 | extern int get_memcfg_from_srat(void); |
@@ -36,4 +36,4 @@ static inline int get_memcfg_from_srat(void) | |||
36 | } | 36 | } |
37 | #endif | 37 | #endif |
38 | 38 | ||
39 | #endif /* _ASM_SRAT_H_ */ | 39 | #endif /* ASM_X86__SRAT_H */ |
diff --git a/include/asm-x86/stacktrace.h b/include/asm-x86/stacktrace.h index 30f82526a8e2..f43517e28532 100644 --- a/include/asm-x86/stacktrace.h +++ b/include/asm-x86/stacktrace.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_STACKTRACE_H | 1 | #ifndef ASM_X86__STACKTRACE_H |
2 | #define _ASM_STACKTRACE_H 1 | 2 | #define ASM_X86__STACKTRACE_H |
3 | 3 | ||
4 | extern int kstack_depth_to_print; | 4 | extern int kstack_depth_to_print; |
5 | 5 | ||
@@ -18,4 +18,4 @@ void dump_trace(struct task_struct *tsk, struct pt_regs *regs, | |||
18 | unsigned long *stack, unsigned long bp, | 18 | unsigned long *stack, unsigned long bp, |
19 | const struct stacktrace_ops *ops, void *data); | 19 | const struct stacktrace_ops *ops, void *data); |
20 | 20 | ||
21 | #endif | 21 | #endif /* ASM_X86__STACKTRACE_H */ |
diff --git a/include/asm-x86/stat.h b/include/asm-x86/stat.h index 5c22dcb5d17e..1e120f628905 100644 --- a/include/asm-x86/stat.h +++ b/include/asm-x86/stat.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_STAT_H | 1 | #ifndef ASM_X86__STAT_H |
2 | #define _ASM_X86_STAT_H | 2 | #define ASM_X86__STAT_H |
3 | 3 | ||
4 | #define STAT_HAVE_NSEC 1 | 4 | #define STAT_HAVE_NSEC 1 |
5 | 5 | ||
@@ -111,4 +111,4 @@ struct __old_kernel_stat { | |||
111 | #endif | 111 | #endif |
112 | }; | 112 | }; |
113 | 113 | ||
114 | #endif | 114 | #endif /* ASM_X86__STAT_H */ |
diff --git a/include/asm-x86/statfs.h b/include/asm-x86/statfs.h index 7c651aa97252..ca5dc19dd461 100644 --- a/include/asm-x86/statfs.h +++ b/include/asm-x86/statfs.h | |||
@@ -1,63 +1,12 @@ | |||
1 | #ifndef _ASM_X86_STATFS_H | 1 | #ifndef ASM_X86__STATFS_H |
2 | #define _ASM_X86_STATFS_H | 2 | #define ASM_X86__STATFS_H |
3 | |||
4 | #ifdef __i386__ | ||
5 | #include <asm-generic/statfs.h> | ||
6 | #else | ||
7 | |||
8 | #ifndef __KERNEL_STRICT_NAMES | ||
9 | |||
10 | #include <linux/types.h> | ||
11 | |||
12 | typedef __kernel_fsid_t fsid_t; | ||
13 | |||
14 | #endif | ||
15 | 3 | ||
16 | /* | 4 | /* |
17 | * This is ugly -- we're already 64-bit clean, so just duplicate the | 5 | * We need compat_statfs64 to be packed, because the i386 ABI won't |
18 | * definitions. | 6 | * add padding at the end to bring it to a multiple of 8 bytes, but |
7 | * the x86_64 ABI will. | ||
19 | */ | 8 | */ |
20 | struct statfs { | 9 | #define ARCH_PACK_COMPAT_STATFS64 __attribute__((packed,aligned(4))) |
21 | long f_type; | ||
22 | long f_bsize; | ||
23 | long f_blocks; | ||
24 | long f_bfree; | ||
25 | long f_bavail; | ||
26 | long f_files; | ||
27 | long f_ffree; | ||
28 | __kernel_fsid_t f_fsid; | ||
29 | long f_namelen; | ||
30 | long f_frsize; | ||
31 | long f_spare[5]; | ||
32 | }; | ||
33 | |||
34 | struct statfs64 { | ||
35 | long f_type; | ||
36 | long f_bsize; | ||
37 | long f_blocks; | ||
38 | long f_bfree; | ||
39 | long f_bavail; | ||
40 | long f_files; | ||
41 | long f_ffree; | ||
42 | __kernel_fsid_t f_fsid; | ||
43 | long f_namelen; | ||
44 | long f_frsize; | ||
45 | long f_spare[5]; | ||
46 | }; | ||
47 | 10 | ||
48 | struct compat_statfs64 { | 11 | #include <asm-generic/statfs.h> |
49 | __u32 f_type; | 12 | #endif /* ASM_X86__STATFS_H */ |
50 | __u32 f_bsize; | ||
51 | __u64 f_blocks; | ||
52 | __u64 f_bfree; | ||
53 | __u64 f_bavail; | ||
54 | __u64 f_files; | ||
55 | __u64 f_ffree; | ||
56 | __kernel_fsid_t f_fsid; | ||
57 | __u32 f_namelen; | ||
58 | __u32 f_frsize; | ||
59 | __u32 f_spare[5]; | ||
60 | } __attribute__((packed)); | ||
61 | |||
62 | #endif /* !__i386__ */ | ||
63 | #endif | ||
diff --git a/include/asm-x86/string_32.h b/include/asm-x86/string_32.h index 193578cd1fd9..487843ed245a 100644 --- a/include/asm-x86/string_32.h +++ b/include/asm-x86/string_32.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _I386_STRING_H_ | 1 | #ifndef ASM_X86__STRING_32_H |
2 | #define _I386_STRING_H_ | 2 | #define ASM_X86__STRING_32_H |
3 | 3 | ||
4 | #ifdef __KERNEL__ | 4 | #ifdef __KERNEL__ |
5 | 5 | ||
@@ -323,4 +323,4 @@ extern void *memscan(void *addr, int c, size_t size); | |||
323 | 323 | ||
324 | #endif /* __KERNEL__ */ | 324 | #endif /* __KERNEL__ */ |
325 | 325 | ||
326 | #endif | 326 | #endif /* ASM_X86__STRING_32_H */ |
diff --git a/include/asm-x86/string_64.h b/include/asm-x86/string_64.h index 52b5ab383395..a2add11d3b66 100644 --- a/include/asm-x86/string_64.h +++ b/include/asm-x86/string_64.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _X86_64_STRING_H_ | 1 | #ifndef ASM_X86__STRING_64_H |
2 | #define _X86_64_STRING_H_ | 2 | #define ASM_X86__STRING_64_H |
3 | 3 | ||
4 | #ifdef __KERNEL__ | 4 | #ifdef __KERNEL__ |
5 | 5 | ||
@@ -57,4 +57,4 @@ int strcmp(const char *cs, const char *ct); | |||
57 | 57 | ||
58 | #endif /* __KERNEL__ */ | 58 | #endif /* __KERNEL__ */ |
59 | 59 | ||
60 | #endif | 60 | #endif /* ASM_X86__STRING_64_H */ |
diff --git a/include/asm-x86/mach-summit/mach_apic.h b/include/asm-x86/summit/apic.h index c47e2ab5c5ca..394b00bb5e72 100644 --- a/include/asm-x86/mach-summit/mach_apic.h +++ b/include/asm-x86/summit/apic.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_MACH_APIC_H | 1 | #ifndef __ASM_SUMMIT_APIC_H |
2 | #define __ASM_MACH_APIC_H | 2 | #define __ASM_SUMMIT_APIC_H |
3 | 3 | ||
4 | #include <asm/smp.h> | 4 | #include <asm/smp.h> |
5 | 5 | ||
@@ -21,7 +21,7 @@ static inline cpumask_t target_cpus(void) | |||
21 | * Just start on cpu 0. IRQ balancing will spread load | 21 | * Just start on cpu 0. IRQ balancing will spread load |
22 | */ | 22 | */ |
23 | return cpumask_of_cpu(0); | 23 | return cpumask_of_cpu(0); |
24 | } | 24 | } |
25 | #define TARGET_CPUS (target_cpus()) | 25 | #define TARGET_CPUS (target_cpus()) |
26 | 26 | ||
27 | #define INT_DELIVERY_MODE (dest_LowestPrio) | 27 | #define INT_DELIVERY_MODE (dest_LowestPrio) |
@@ -30,10 +30,10 @@ static inline cpumask_t target_cpus(void) | |||
30 | static inline unsigned long check_apicid_used(physid_mask_t bitmap, int apicid) | 30 | static inline unsigned long check_apicid_used(physid_mask_t bitmap, int apicid) |
31 | { | 31 | { |
32 | return 0; | 32 | return 0; |
33 | } | 33 | } |
34 | 34 | ||
35 | /* we don't use the phys_cpu_present_map to indicate apicid presence */ | 35 | /* we don't use the phys_cpu_present_map to indicate apicid presence */ |
36 | static inline unsigned long check_apicid_present(int bit) | 36 | static inline unsigned long check_apicid_present(int bit) |
37 | { | 37 | { |
38 | return 1; | 38 | return 1; |
39 | } | 39 | } |
@@ -122,7 +122,7 @@ static inline physid_mask_t ioapic_phys_id_map(physid_mask_t phys_id_map) | |||
122 | 122 | ||
123 | static inline physid_mask_t apicid_to_cpu_present(int apicid) | 123 | static inline physid_mask_t apicid_to_cpu_present(int apicid) |
124 | { | 124 | { |
125 | return physid_mask_of_physid(apicid); | 125 | return physid_mask_of_physid(0); |
126 | } | 126 | } |
127 | 127 | ||
128 | static inline void setup_portio_remap(void) | 128 | static inline void setup_portio_remap(void) |
@@ -143,24 +143,24 @@ static inline unsigned int cpu_mask_to_apicid(cpumask_t cpumask) | |||
143 | int num_bits_set; | 143 | int num_bits_set; |
144 | int cpus_found = 0; | 144 | int cpus_found = 0; |
145 | int cpu; | 145 | int cpu; |
146 | int apicid; | 146 | int apicid; |
147 | 147 | ||
148 | num_bits_set = cpus_weight(cpumask); | 148 | num_bits_set = cpus_weight(cpumask); |
149 | /* Return id to all */ | 149 | /* Return id to all */ |
150 | if (num_bits_set == NR_CPUS) | 150 | if (num_bits_set == NR_CPUS) |
151 | return (int) 0xFF; | 151 | return (int) 0xFF; |
152 | /* | 152 | /* |
153 | * The cpus in the mask must all be on the apic cluster. If are not | 153 | * The cpus in the mask must all be on the apic cluster. If are not |
154 | * on the same apicid cluster return default value of TARGET_CPUS. | 154 | * on the same apicid cluster return default value of TARGET_CPUS. |
155 | */ | 155 | */ |
156 | cpu = first_cpu(cpumask); | 156 | cpu = first_cpu(cpumask); |
157 | apicid = cpu_to_logical_apicid(cpu); | 157 | apicid = cpu_to_logical_apicid(cpu); |
158 | while (cpus_found < num_bits_set) { | 158 | while (cpus_found < num_bits_set) { |
159 | if (cpu_isset(cpu, cpumask)) { | 159 | if (cpu_isset(cpu, cpumask)) { |
160 | int new_apicid = cpu_to_logical_apicid(cpu); | 160 | int new_apicid = cpu_to_logical_apicid(cpu); |
161 | if (apicid_cluster(apicid) != | 161 | if (apicid_cluster(apicid) != |
162 | apicid_cluster(new_apicid)){ | 162 | apicid_cluster(new_apicid)){ |
163 | printk ("%s: Not a valid mask!\n",__FUNCTION__); | 163 | printk ("%s: Not a valid mask!\n", __func__); |
164 | return 0xFF; | 164 | return 0xFF; |
165 | } | 165 | } |
166 | apicid = apicid | new_apicid; | 166 | apicid = apicid | new_apicid; |
@@ -182,4 +182,4 @@ static inline u32 phys_pkg_id(u32 cpuid_apic, int index_msb) | |||
182 | return hard_smp_processor_id() >> index_msb; | 182 | return hard_smp_processor_id() >> index_msb; |
183 | } | 183 | } |
184 | 184 | ||
185 | #endif /* __ASM_MACH_APIC_H */ | 185 | #endif /* __ASM_SUMMIT_APIC_H */ |
diff --git a/include/asm-x86/summit/apicdef.h b/include/asm-x86/summit/apicdef.h new file mode 100644 index 000000000000..f3fbca1f61c1 --- /dev/null +++ b/include/asm-x86/summit/apicdef.h | |||
@@ -0,0 +1,13 @@ | |||
1 | #ifndef __ASM_SUMMIT_APICDEF_H | ||
2 | #define __ASM_SUMMIT_APICDEF_H | ||
3 | |||
4 | #define APIC_ID_MASK (0xFF<<24) | ||
5 | |||
6 | static inline unsigned get_apic_id(unsigned long x) | ||
7 | { | ||
8 | return (x>>24)&0xFF; | ||
9 | } | ||
10 | |||
11 | #define GET_APIC_ID(x) get_apic_id(x) | ||
12 | |||
13 | #endif | ||
diff --git a/include/asm-x86/mach-summit/mach_ipi.h b/include/asm-x86/summit/ipi.h index 9404c535b7ec..53bd1e7bd7b4 100644 --- a/include/asm-x86/mach-summit/mach_ipi.h +++ b/include/asm-x86/summit/ipi.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_MACH_IPI_H | 1 | #ifndef __ASM_SUMMIT_IPI_H |
2 | #define __ASM_MACH_IPI_H | 2 | #define __ASM_SUMMIT_IPI_H |
3 | 3 | ||
4 | void send_IPI_mask_sequence(cpumask_t mask, int vector); | 4 | void send_IPI_mask_sequence(cpumask_t mask, int vector); |
5 | 5 | ||
@@ -22,4 +22,4 @@ static inline void send_IPI_all(int vector) | |||
22 | send_IPI_mask(cpu_online_map, vector); | 22 | send_IPI_mask(cpu_online_map, vector); |
23 | } | 23 | } |
24 | 24 | ||
25 | #endif /* __ASM_MACH_IPI_H */ | 25 | #endif /* __ASM_SUMMIT_IPI_H */ |
diff --git a/include/asm-x86/mach-summit/irq_vectors_limits.h b/include/asm-x86/summit/irq_vectors_limits.h index 890ce3f5e09a..890ce3f5e09a 100644 --- a/include/asm-x86/mach-summit/irq_vectors_limits.h +++ b/include/asm-x86/summit/irq_vectors_limits.h | |||
diff --git a/include/asm-x86/mach-summit/mach_mpparse.h b/include/asm-x86/summit/mpparse.h index fdf591701339..013ce6fab2d5 100644 --- a/include/asm-x86/mach-summit/mach_mpparse.h +++ b/include/asm-x86/summit/mpparse.h | |||
@@ -1,7 +1,6 @@ | |||
1 | #ifndef __ASM_MACH_MPPARSE_H | 1 | #ifndef __ASM_SUMMIT_MPPARSE_H |
2 | #define __ASM_MACH_MPPARSE_H | 2 | #define __ASM_SUMMIT_MPPARSE_H |
3 | 3 | ||
4 | #include <mach_apic.h> | ||
5 | #include <asm/tsc.h> | 4 | #include <asm/tsc.h> |
6 | 5 | ||
7 | extern int use_cyclone; | 6 | extern int use_cyclone; |
@@ -12,11 +11,11 @@ extern void setup_summit(void); | |||
12 | #define setup_summit() {} | 11 | #define setup_summit() {} |
13 | #endif | 12 | #endif |
14 | 13 | ||
15 | static inline int mps_oem_check(struct mp_config_table *mpc, char *oem, | 14 | static inline int mps_oem_check(struct mp_config_table *mpc, char *oem, |
16 | char *productid) | 15 | char *productid) |
17 | { | 16 | { |
18 | if (!strncmp(oem, "IBM ENSW", 8) && | 17 | if (!strncmp(oem, "IBM ENSW", 8) && |
19 | (!strncmp(productid, "VIGIL SMP", 9) | 18 | (!strncmp(productid, "VIGIL SMP", 9) |
20 | || !strncmp(productid, "EXA", 3) | 19 | || !strncmp(productid, "EXA", 3) |
21 | || !strncmp(productid, "RUTHLESS SMP", 12))){ | 20 | || !strncmp(productid, "RUTHLESS SMP", 12))){ |
22 | mark_tsc_unstable("Summit based system"); | 21 | mark_tsc_unstable("Summit based system"); |
@@ -107,4 +106,4 @@ static inline int is_WPEG(struct rio_detail *rio){ | |||
107 | rio->type == LookOutAWPEG || rio->type == LookOutBWPEG); | 106 | rio->type == LookOutAWPEG || rio->type == LookOutBWPEG); |
108 | } | 107 | } |
109 | 108 | ||
110 | #endif /* __ASM_MACH_MPPARSE_H */ | 109 | #endif /* __ASM_SUMMIT_MPPARSE_H */ |
diff --git a/include/asm-x86/suspend_32.h b/include/asm-x86/suspend_32.h index 8675c6782a7d..acb6d4d491f4 100644 --- a/include/asm-x86/suspend_32.h +++ b/include/asm-x86/suspend_32.h | |||
@@ -3,8 +3,8 @@ | |||
3 | * Based on code | 3 | * Based on code |
4 | * Copyright 2001 Patrick Mochel <mochel@osdl.org> | 4 | * Copyright 2001 Patrick Mochel <mochel@osdl.org> |
5 | */ | 5 | */ |
6 | #ifndef __ASM_X86_32_SUSPEND_H | 6 | #ifndef ASM_X86__SUSPEND_32_H |
7 | #define __ASM_X86_32_SUSPEND_H | 7 | #define ASM_X86__SUSPEND_32_H |
8 | 8 | ||
9 | #include <asm/desc.h> | 9 | #include <asm/desc.h> |
10 | #include <asm/i387.h> | 10 | #include <asm/i387.h> |
@@ -48,4 +48,4 @@ static inline void acpi_save_register_state(unsigned long return_point) | |||
48 | extern int acpi_save_state_mem(void); | 48 | extern int acpi_save_state_mem(void); |
49 | #endif | 49 | #endif |
50 | 50 | ||
51 | #endif /* __ASM_X86_32_SUSPEND_H */ | 51 | #endif /* ASM_X86__SUSPEND_32_H */ |
diff --git a/include/asm-x86/suspend_64.h b/include/asm-x86/suspend_64.h index dc3262b43072..cf821dd310e8 100644 --- a/include/asm-x86/suspend_64.h +++ b/include/asm-x86/suspend_64.h | |||
@@ -3,8 +3,8 @@ | |||
3 | * Based on code | 3 | * Based on code |
4 | * Copyright 2001 Patrick Mochel <mochel@osdl.org> | 4 | * Copyright 2001 Patrick Mochel <mochel@osdl.org> |
5 | */ | 5 | */ |
6 | #ifndef __ASM_X86_64_SUSPEND_H | 6 | #ifndef ASM_X86__SUSPEND_64_H |
7 | #define __ASM_X86_64_SUSPEND_H | 7 | #define ASM_X86__SUSPEND_64_H |
8 | 8 | ||
9 | #include <asm/desc.h> | 9 | #include <asm/desc.h> |
10 | #include <asm/i387.h> | 10 | #include <asm/i387.h> |
@@ -49,4 +49,4 @@ extern int acpi_save_state_mem(void); | |||
49 | extern char core_restore_code; | 49 | extern char core_restore_code; |
50 | extern char restore_registers; | 50 | extern char restore_registers; |
51 | 51 | ||
52 | #endif /* __ASM_X86_64_SUSPEND_H */ | 52 | #endif /* ASM_X86__SUSPEND_64_H */ |
diff --git a/include/asm-x86/swiotlb.h b/include/asm-x86/swiotlb.h index 2730b351afcf..1e20adbcad4b 100644 --- a/include/asm-x86/swiotlb.h +++ b/include/asm-x86/swiotlb.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_SWIOTLB_H | 1 | #ifndef ASM_X86__SWIOTLB_H |
2 | #define _ASM_SWIOTLB_H 1 | 2 | #define ASM_X86__SWIOTLB_H |
3 | 3 | ||
4 | #include <asm/dma-mapping.h> | 4 | #include <asm/dma-mapping.h> |
5 | 5 | ||
@@ -55,4 +55,4 @@ static inline void pci_swiotlb_init(void) | |||
55 | 55 | ||
56 | static inline void dma_mark_clean(void *addr, size_t size) {} | 56 | static inline void dma_mark_clean(void *addr, size_t size) {} |
57 | 57 | ||
58 | #endif /* _ASM_SWIOTLB_H */ | 58 | #endif /* ASM_X86__SWIOTLB_H */ |
diff --git a/include/asm-x86/sync_bitops.h b/include/asm-x86/sync_bitops.h index b47a1d0b8a83..b689bee71104 100644 --- a/include/asm-x86/sync_bitops.h +++ b/include/asm-x86/sync_bitops.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _I386_SYNC_BITOPS_H | 1 | #ifndef ASM_X86__SYNC_BITOPS_H |
2 | #define _I386_SYNC_BITOPS_H | 2 | #define ASM_X86__SYNC_BITOPS_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * Copyright 1992, Linus Torvalds. | 5 | * Copyright 1992, Linus Torvalds. |
@@ -127,4 +127,4 @@ static inline int sync_test_and_change_bit(int nr, volatile unsigned long *addr) | |||
127 | 127 | ||
128 | #undef ADDR | 128 | #undef ADDR |
129 | 129 | ||
130 | #endif /* _I386_SYNC_BITOPS_H */ | 130 | #endif /* ASM_X86__SYNC_BITOPS_H */ |
diff --git a/include/asm-x86/syscall.h b/include/asm-x86/syscall.h new file mode 100644 index 000000000000..04c47dc5597c --- /dev/null +++ b/include/asm-x86/syscall.h | |||
@@ -0,0 +1,211 @@ | |||
1 | /* | ||
2 | * Access to user system call parameters and results | ||
3 | * | ||
4 | * Copyright (C) 2008 Red Hat, Inc. All rights reserved. | ||
5 | * | ||
6 | * This copyrighted material is made available to anyone wishing to use, | ||
7 | * modify, copy, or redistribute it subject to the terms and conditions | ||
8 | * of the GNU General Public License v.2. | ||
9 | * | ||
10 | * See asm-generic/syscall.h for descriptions of what we must do here. | ||
11 | */ | ||
12 | |||
13 | #ifndef _ASM_SYSCALL_H | ||
14 | #define _ASM_SYSCALL_H 1 | ||
15 | |||
16 | #include <linux/sched.h> | ||
17 | #include <linux/err.h> | ||
18 | |||
19 | static inline long syscall_get_nr(struct task_struct *task, | ||
20 | struct pt_regs *regs) | ||
21 | { | ||
22 | /* | ||
23 | * We always sign-extend a -1 value being set here, | ||
24 | * so this is always either -1L or a syscall number. | ||
25 | */ | ||
26 | return regs->orig_ax; | ||
27 | } | ||
28 | |||
29 | static inline void syscall_rollback(struct task_struct *task, | ||
30 | struct pt_regs *regs) | ||
31 | { | ||
32 | regs->ax = regs->orig_ax; | ||
33 | } | ||
34 | |||
35 | static inline long syscall_get_error(struct task_struct *task, | ||
36 | struct pt_regs *regs) | ||
37 | { | ||
38 | unsigned long error = regs->ax; | ||
39 | #ifdef CONFIG_IA32_EMULATION | ||
40 | /* | ||
41 | * TS_COMPAT is set for 32-bit syscall entries and then | ||
42 | * remains set until we return to user mode. | ||
43 | */ | ||
44 | if (task_thread_info(task)->status & TS_COMPAT) | ||
45 | /* | ||
46 | * Sign-extend the value so (int)-EFOO becomes (long)-EFOO | ||
47 | * and will match correctly in comparisons. | ||
48 | */ | ||
49 | error = (long) (int) error; | ||
50 | #endif | ||
51 | return IS_ERR_VALUE(error) ? error : 0; | ||
52 | } | ||
53 | |||
54 | static inline long syscall_get_return_value(struct task_struct *task, | ||
55 | struct pt_regs *regs) | ||
56 | { | ||
57 | return regs->ax; | ||
58 | } | ||
59 | |||
60 | static inline void syscall_set_return_value(struct task_struct *task, | ||
61 | struct pt_regs *regs, | ||
62 | int error, long val) | ||
63 | { | ||
64 | regs->ax = (long) error ?: val; | ||
65 | } | ||
66 | |||
67 | #ifdef CONFIG_X86_32 | ||
68 | |||
69 | static inline void syscall_get_arguments(struct task_struct *task, | ||
70 | struct pt_regs *regs, | ||
71 | unsigned int i, unsigned int n, | ||
72 | unsigned long *args) | ||
73 | { | ||
74 | BUG_ON(i + n > 6); | ||
75 | memcpy(args, ®s->bx + i, n * sizeof(args[0])); | ||
76 | } | ||
77 | |||
78 | static inline void syscall_set_arguments(struct task_struct *task, | ||
79 | struct pt_regs *regs, | ||
80 | unsigned int i, unsigned int n, | ||
81 | const unsigned long *args) | ||
82 | { | ||
83 | BUG_ON(i + n > 6); | ||
84 | memcpy(®s->bx + i, args, n * sizeof(args[0])); | ||
85 | } | ||
86 | |||
87 | #else /* CONFIG_X86_64 */ | ||
88 | |||
89 | static inline void syscall_get_arguments(struct task_struct *task, | ||
90 | struct pt_regs *regs, | ||
91 | unsigned int i, unsigned int n, | ||
92 | unsigned long *args) | ||
93 | { | ||
94 | # ifdef CONFIG_IA32_EMULATION | ||
95 | if (task_thread_info(task)->status & TS_COMPAT) | ||
96 | switch (i + n) { | ||
97 | case 6: | ||
98 | if (!n--) break; | ||
99 | *args++ = regs->bp; | ||
100 | case 5: | ||
101 | if (!n--) break; | ||
102 | *args++ = regs->di; | ||
103 | case 4: | ||
104 | if (!n--) break; | ||
105 | *args++ = regs->si; | ||
106 | case 3: | ||
107 | if (!n--) break; | ||
108 | *args++ = regs->dx; | ||
109 | case 2: | ||
110 | if (!n--) break; | ||
111 | *args++ = regs->cx; | ||
112 | case 1: | ||
113 | if (!n--) break; | ||
114 | *args++ = regs->bx; | ||
115 | case 0: | ||
116 | if (!n--) break; | ||
117 | default: | ||
118 | BUG(); | ||
119 | break; | ||
120 | } | ||
121 | else | ||
122 | # endif | ||
123 | switch (i + n) { | ||
124 | case 6: | ||
125 | if (!n--) break; | ||
126 | *args++ = regs->r9; | ||
127 | case 5: | ||
128 | if (!n--) break; | ||
129 | *args++ = regs->r8; | ||
130 | case 4: | ||
131 | if (!n--) break; | ||
132 | *args++ = regs->r10; | ||
133 | case 3: | ||
134 | if (!n--) break; | ||
135 | *args++ = regs->dx; | ||
136 | case 2: | ||
137 | if (!n--) break; | ||
138 | *args++ = regs->si; | ||
139 | case 1: | ||
140 | if (!n--) break; | ||
141 | *args++ = regs->di; | ||
142 | case 0: | ||
143 | if (!n--) break; | ||
144 | default: | ||
145 | BUG(); | ||
146 | break; | ||
147 | } | ||
148 | } | ||
149 | |||
150 | static inline void syscall_set_arguments(struct task_struct *task, | ||
151 | struct pt_regs *regs, | ||
152 | unsigned int i, unsigned int n, | ||
153 | const unsigned long *args) | ||
154 | { | ||
155 | # ifdef CONFIG_IA32_EMULATION | ||
156 | if (task_thread_info(task)->status & TS_COMPAT) | ||
157 | switch (i + n) { | ||
158 | case 6: | ||
159 | if (!n--) break; | ||
160 | regs->bp = *args++; | ||
161 | case 5: | ||
162 | if (!n--) break; | ||
163 | regs->di = *args++; | ||
164 | case 4: | ||
165 | if (!n--) break; | ||
166 | regs->si = *args++; | ||
167 | case 3: | ||
168 | if (!n--) break; | ||
169 | regs->dx = *args++; | ||
170 | case 2: | ||
171 | if (!n--) break; | ||
172 | regs->cx = *args++; | ||
173 | case 1: | ||
174 | if (!n--) break; | ||
175 | regs->bx = *args++; | ||
176 | case 0: | ||
177 | if (!n--) break; | ||
178 | default: | ||
179 | BUG(); | ||
180 | } | ||
181 | else | ||
182 | # endif | ||
183 | switch (i + n) { | ||
184 | case 6: | ||
185 | if (!n--) break; | ||
186 | regs->r9 = *args++; | ||
187 | case 5: | ||
188 | if (!n--) break; | ||
189 | regs->r8 = *args++; | ||
190 | case 4: | ||
191 | if (!n--) break; | ||
192 | regs->r10 = *args++; | ||
193 | case 3: | ||
194 | if (!n--) break; | ||
195 | regs->dx = *args++; | ||
196 | case 2: | ||
197 | if (!n--) break; | ||
198 | regs->si = *args++; | ||
199 | case 1: | ||
200 | if (!n--) break; | ||
201 | regs->di = *args++; | ||
202 | case 0: | ||
203 | if (!n--) break; | ||
204 | default: | ||
205 | BUG(); | ||
206 | } | ||
207 | } | ||
208 | |||
209 | #endif /* CONFIG_X86_32 */ | ||
210 | |||
211 | #endif /* _ASM_SYSCALL_H */ | ||
diff --git a/include/asm-x86/syscalls.h b/include/asm-x86/syscalls.h new file mode 100644 index 000000000000..87803da44010 --- /dev/null +++ b/include/asm-x86/syscalls.h | |||
@@ -0,0 +1,93 @@ | |||
1 | /* | ||
2 | * syscalls.h - Linux syscall interfaces (arch-specific) | ||
3 | * | ||
4 | * Copyright (c) 2008 Jaswinder Singh | ||
5 | * | ||
6 | * This file is released under the GPLv2. | ||
7 | * See the file COPYING for more details. | ||
8 | */ | ||
9 | |||
10 | #ifndef _ASM_X86_SYSCALLS_H | ||
11 | #define _ASM_X86_SYSCALLS_H | ||
12 | |||
13 | #include <linux/compiler.h> | ||
14 | #include <linux/linkage.h> | ||
15 | #include <linux/types.h> | ||
16 | #include <linux/signal.h> | ||
17 | |||
18 | /* Common in X86_32 and X86_64 */ | ||
19 | /* kernel/ioport.c */ | ||
20 | asmlinkage long sys_ioperm(unsigned long, unsigned long, int); | ||
21 | |||
22 | /* X86_32 only */ | ||
23 | #ifdef CONFIG_X86_32 | ||
24 | /* kernel/process_32.c */ | ||
25 | asmlinkage int sys_fork(struct pt_regs); | ||
26 | asmlinkage int sys_clone(struct pt_regs); | ||
27 | asmlinkage int sys_vfork(struct pt_regs); | ||
28 | asmlinkage int sys_execve(struct pt_regs); | ||
29 | |||
30 | /* kernel/signal_32.c */ | ||
31 | asmlinkage int sys_sigsuspend(int, int, old_sigset_t); | ||
32 | asmlinkage int sys_sigaction(int, const struct old_sigaction __user *, | ||
33 | struct old_sigaction __user *); | ||
34 | asmlinkage int sys_sigaltstack(unsigned long); | ||
35 | asmlinkage unsigned long sys_sigreturn(unsigned long); | ||
36 | asmlinkage int sys_rt_sigreturn(unsigned long); | ||
37 | |||
38 | /* kernel/ioport.c */ | ||
39 | asmlinkage long sys_iopl(unsigned long); | ||
40 | |||
41 | /* kernel/ldt.c */ | ||
42 | asmlinkage int sys_modify_ldt(int, void __user *, unsigned long); | ||
43 | |||
44 | /* kernel/sys_i386_32.c */ | ||
45 | asmlinkage long sys_mmap2(unsigned long, unsigned long, unsigned long, | ||
46 | unsigned long, unsigned long, unsigned long); | ||
47 | struct mmap_arg_struct; | ||
48 | asmlinkage int old_mmap(struct mmap_arg_struct __user *); | ||
49 | struct sel_arg_struct; | ||
50 | asmlinkage int old_select(struct sel_arg_struct __user *); | ||
51 | asmlinkage int sys_ipc(uint, int, int, int, void __user *, long); | ||
52 | struct old_utsname; | ||
53 | asmlinkage int sys_uname(struct old_utsname __user *); | ||
54 | struct oldold_utsname; | ||
55 | asmlinkage int sys_olduname(struct oldold_utsname __user *); | ||
56 | |||
57 | /* kernel/tls.c */ | ||
58 | asmlinkage int sys_set_thread_area(struct user_desc __user *); | ||
59 | asmlinkage int sys_get_thread_area(struct user_desc __user *); | ||
60 | |||
61 | /* kernel/vm86_32.c */ | ||
62 | asmlinkage int sys_vm86old(struct pt_regs); | ||
63 | asmlinkage int sys_vm86(struct pt_regs); | ||
64 | |||
65 | #else /* CONFIG_X86_32 */ | ||
66 | |||
67 | /* X86_64 only */ | ||
68 | /* kernel/process_64.c */ | ||
69 | asmlinkage long sys_fork(struct pt_regs *); | ||
70 | asmlinkage long sys_clone(unsigned long, unsigned long, | ||
71 | void __user *, void __user *, | ||
72 | struct pt_regs *); | ||
73 | asmlinkage long sys_vfork(struct pt_regs *); | ||
74 | asmlinkage long sys_execve(char __user *, char __user * __user *, | ||
75 | char __user * __user *, | ||
76 | struct pt_regs *); | ||
77 | |||
78 | /* kernel/ioport.c */ | ||
79 | asmlinkage long sys_iopl(unsigned int, struct pt_regs *); | ||
80 | |||
81 | /* kernel/signal_64.c */ | ||
82 | asmlinkage long sys_sigaltstack(const stack_t __user *, stack_t __user *, | ||
83 | struct pt_regs *); | ||
84 | asmlinkage long sys_rt_sigreturn(struct pt_regs *); | ||
85 | |||
86 | /* kernel/sys_x86_64.c */ | ||
87 | asmlinkage long sys_mmap(unsigned long, unsigned long, unsigned long, | ||
88 | unsigned long, unsigned long, unsigned long); | ||
89 | struct new_utsname; | ||
90 | asmlinkage long sys_uname(struct new_utsname __user *); | ||
91 | |||
92 | #endif /* CONFIG_X86_32 */ | ||
93 | #endif /* _ASM_X86_SYSCALLS_H */ | ||
diff --git a/include/asm-x86/system.h b/include/asm-x86/system.h index 983ce37c491f..b20c894660f9 100644 --- a/include/asm-x86/system.h +++ b/include/asm-x86/system.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_SYSTEM_H_ | 1 | #ifndef ASM_X86__SYSTEM_H |
2 | #define _ASM_X86_SYSTEM_H_ | 2 | #define ASM_X86__SYSTEM_H |
3 | 3 | ||
4 | #include <asm/asm.h> | 4 | #include <asm/asm.h> |
5 | #include <asm/segment.h> | 5 | #include <asm/segment.h> |
@@ -64,7 +64,10 @@ do { \ | |||
64 | \ | 64 | \ |
65 | /* regparm parameters for __switch_to(): */ \ | 65 | /* regparm parameters for __switch_to(): */ \ |
66 | [prev] "a" (prev), \ | 66 | [prev] "a" (prev), \ |
67 | [next] "d" (next)); \ | 67 | [next] "d" (next) \ |
68 | \ | ||
69 | : /* reloaded segment registers */ \ | ||
70 | "memory"); \ | ||
68 | } while (0) | 71 | } while (0) |
69 | 72 | ||
70 | /* | 73 | /* |
@@ -419,4 +422,4 @@ static inline void rdtsc_barrier(void) | |||
419 | alternative(ASM_NOP3, "lfence", X86_FEATURE_LFENCE_RDTSC); | 422 | alternative(ASM_NOP3, "lfence", X86_FEATURE_LFENCE_RDTSC); |
420 | } | 423 | } |
421 | 424 | ||
422 | #endif | 425 | #endif /* ASM_X86__SYSTEM_H */ |
diff --git a/include/asm-x86/system_64.h b/include/asm-x86/system_64.h index 97fa251ccb2b..5aedb8bffc5a 100644 --- a/include/asm-x86/system_64.h +++ b/include/asm-x86/system_64.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_SYSTEM_H | 1 | #ifndef ASM_X86__SYSTEM_64_H |
2 | #define __ASM_SYSTEM_H | 2 | #define ASM_X86__SYSTEM_64_H |
3 | 3 | ||
4 | #include <asm/segment.h> | 4 | #include <asm/segment.h> |
5 | #include <asm/cmpxchg.h> | 5 | #include <asm/cmpxchg.h> |
@@ -19,4 +19,4 @@ static inline void write_cr8(unsigned long val) | |||
19 | 19 | ||
20 | #include <linux/irqflags.h> | 20 | #include <linux/irqflags.h> |
21 | 21 | ||
22 | #endif | 22 | #endif /* ASM_X86__SYSTEM_64_H */ |
diff --git a/include/asm-x86/tce.h b/include/asm-x86/tce.h index b1a4ea00df78..e7932d7fbbab 100644 --- a/include/asm-x86/tce.h +++ b/include/asm-x86/tce.h | |||
@@ -21,8 +21,8 @@ | |||
21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
22 | */ | 22 | */ |
23 | 23 | ||
24 | #ifndef _ASM_X86_64_TCE_H | 24 | #ifndef ASM_X86__TCE_H |
25 | #define _ASM_X86_64_TCE_H | 25 | #define ASM_X86__TCE_H |
26 | 26 | ||
27 | extern unsigned int specified_table_size; | 27 | extern unsigned int specified_table_size; |
28 | struct iommu_table; | 28 | struct iommu_table; |
@@ -45,4 +45,4 @@ extern void * __init alloc_tce_table(void); | |||
45 | extern void __init free_tce_table(void *tbl); | 45 | extern void __init free_tce_table(void *tbl); |
46 | extern int __init build_tce_table(struct pci_dev *dev, void __iomem *bbar); | 46 | extern int __init build_tce_table(struct pci_dev *dev, void __iomem *bbar); |
47 | 47 | ||
48 | #endif /* _ASM_X86_64_TCE_H */ | 48 | #endif /* ASM_X86__TCE_H */ |
diff --git a/include/asm-x86/termbits.h b/include/asm-x86/termbits.h index af1b70ea440f..3d00dc5e0c71 100644 --- a/include/asm-x86/termbits.h +++ b/include/asm-x86/termbits.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_TERMBITS_H | 1 | #ifndef ASM_X86__TERMBITS_H |
2 | #define _ASM_X86_TERMBITS_H | 2 | #define ASM_X86__TERMBITS_H |
3 | 3 | ||
4 | #include <linux/posix_types.h> | 4 | #include <linux/posix_types.h> |
5 | 5 | ||
@@ -195,4 +195,4 @@ struct ktermios { | |||
195 | #define TCSADRAIN 1 | 195 | #define TCSADRAIN 1 |
196 | #define TCSAFLUSH 2 | 196 | #define TCSAFLUSH 2 |
197 | 197 | ||
198 | #endif /* _ASM_X86_TERMBITS_H */ | 198 | #endif /* ASM_X86__TERMBITS_H */ |
diff --git a/include/asm-x86/termios.h b/include/asm-x86/termios.h index f72956331c49..e235db248071 100644 --- a/include/asm-x86/termios.h +++ b/include/asm-x86/termios.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_TERMIOS_H | 1 | #ifndef ASM_X86__TERMIOS_H |
2 | #define _ASM_X86_TERMIOS_H | 2 | #define ASM_X86__TERMIOS_H |
3 | 3 | ||
4 | #include <asm/termbits.h> | 4 | #include <asm/termbits.h> |
5 | #include <asm/ioctls.h> | 5 | #include <asm/ioctls.h> |
@@ -110,4 +110,4 @@ static inline int kernel_termios_to_user_termios_1(struct termios __user *u, | |||
110 | 110 | ||
111 | #endif /* __KERNEL__ */ | 111 | #endif /* __KERNEL__ */ |
112 | 112 | ||
113 | #endif /* _ASM_X86_TERMIOS_H */ | 113 | #endif /* ASM_X86__TERMIOS_H */ |
diff --git a/include/asm-x86/therm_throt.h b/include/asm-x86/therm_throt.h index 399bf6026b16..1c7f57b6b66e 100644 --- a/include/asm-x86/therm_throt.h +++ b/include/asm-x86/therm_throt.h | |||
@@ -1,9 +1,9 @@ | |||
1 | #ifndef __ASM_I386_THERM_THROT_H__ | 1 | #ifndef ASM_X86__THERM_THROT_H |
2 | #define __ASM_I386_THERM_THROT_H__ 1 | 2 | #define ASM_X86__THERM_THROT_H |
3 | 3 | ||
4 | #include <asm/atomic.h> | 4 | #include <asm/atomic.h> |
5 | 5 | ||
6 | extern atomic_t therm_throt_en; | 6 | extern atomic_t therm_throt_en; |
7 | int therm_throt_process(int curr); | 7 | int therm_throt_process(int curr); |
8 | 8 | ||
9 | #endif /* __ASM_I386_THERM_THROT_H__ */ | 9 | #endif /* ASM_X86__THERM_THROT_H */ |
diff --git a/include/asm-x86/thread_info.h b/include/asm-x86/thread_info.h index da0a675adf94..3f4e52bb77f5 100644 --- a/include/asm-x86/thread_info.h +++ b/include/asm-x86/thread_info.h | |||
@@ -4,8 +4,8 @@ | |||
4 | * - Incorporating suggestions made by Linus Torvalds and Dave Miller | 4 | * - Incorporating suggestions made by Linus Torvalds and Dave Miller |
5 | */ | 5 | */ |
6 | 6 | ||
7 | #ifndef _ASM_X86_THREAD_INFO_H | 7 | #ifndef ASM_X86__THREAD_INFO_H |
8 | #define _ASM_X86_THREAD_INFO_H | 8 | #define ASM_X86__THREAD_INFO_H |
9 | 9 | ||
10 | #include <linux/compiler.h> | 10 | #include <linux/compiler.h> |
11 | #include <asm/page.h> | 11 | #include <asm/page.h> |
@@ -71,6 +71,7 @@ struct thread_info { | |||
71 | * Warning: layout of LSW is hardcoded in entry.S | 71 | * Warning: layout of LSW is hardcoded in entry.S |
72 | */ | 72 | */ |
73 | #define TIF_SYSCALL_TRACE 0 /* syscall trace active */ | 73 | #define TIF_SYSCALL_TRACE 0 /* syscall trace active */ |
74 | #define TIF_NOTIFY_RESUME 1 /* callback before returning to user */ | ||
74 | #define TIF_SIGPENDING 2 /* signal pending */ | 75 | #define TIF_SIGPENDING 2 /* signal pending */ |
75 | #define TIF_NEED_RESCHED 3 /* rescheduling necessary */ | 76 | #define TIF_NEED_RESCHED 3 /* rescheduling necessary */ |
76 | #define TIF_SINGLESTEP 4 /* reenable singlestep on user return*/ | 77 | #define TIF_SINGLESTEP 4 /* reenable singlestep on user return*/ |
@@ -93,6 +94,7 @@ struct thread_info { | |||
93 | #define TIF_BTS_TRACE_TS 27 /* record scheduling event timestamps */ | 94 | #define TIF_BTS_TRACE_TS 27 /* record scheduling event timestamps */ |
94 | 95 | ||
95 | #define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE) | 96 | #define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE) |
97 | #define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME) | ||
96 | #define _TIF_SIGPENDING (1 << TIF_SIGPENDING) | 98 | #define _TIF_SIGPENDING (1 << TIF_SIGPENDING) |
97 | #define _TIF_SINGLESTEP (1 << TIF_SINGLESTEP) | 99 | #define _TIF_SINGLESTEP (1 << TIF_SINGLESTEP) |
98 | #define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED) | 100 | #define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED) |
@@ -133,7 +135,7 @@ struct thread_info { | |||
133 | 135 | ||
134 | /* Only used for 64 bit */ | 136 | /* Only used for 64 bit */ |
135 | #define _TIF_DO_NOTIFY_MASK \ | 137 | #define _TIF_DO_NOTIFY_MASK \ |
136 | (_TIF_SIGPENDING|_TIF_MCE_NOTIFY) | 138 | (_TIF_SIGPENDING|_TIF_MCE_NOTIFY|_TIF_NOTIFY_RESUME) |
137 | 139 | ||
138 | /* flags to check in __switch_to() */ | 140 | /* flags to check in __switch_to() */ |
139 | #define _TIF_WORK_CTXSW \ | 141 | #define _TIF_WORK_CTXSW \ |
@@ -239,6 +241,7 @@ static inline struct thread_info *stack_thread_info(void) | |||
239 | #define TS_POLLING 0x0004 /* true if in idle loop | 241 | #define TS_POLLING 0x0004 /* true if in idle loop |
240 | and not sleeping */ | 242 | and not sleeping */ |
241 | #define TS_RESTORE_SIGMASK 0x0008 /* restore signal mask in do_signal() */ | 243 | #define TS_RESTORE_SIGMASK 0x0008 /* restore signal mask in do_signal() */ |
244 | #define TS_XSAVE 0x0010 /* Use xsave/xrstor */ | ||
242 | 245 | ||
243 | #define tsk_is_polling(t) (task_thread_info(t)->status & TS_POLLING) | 246 | #define tsk_is_polling(t) (task_thread_info(t)->status & TS_POLLING) |
244 | 247 | ||
@@ -258,4 +261,4 @@ extern void free_thread_info(struct thread_info *ti); | |||
258 | extern int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src); | 261 | extern int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src); |
259 | #define arch_task_cache_init arch_task_cache_init | 262 | #define arch_task_cache_init arch_task_cache_init |
260 | #endif | 263 | #endif |
261 | #endif /* _ASM_X86_THREAD_INFO_H */ | 264 | #endif /* ASM_X86__THREAD_INFO_H */ |
diff --git a/include/asm-x86/time.h b/include/asm-x86/time.h index a17fa473e91d..3e724eef7ac4 100644 --- a/include/asm-x86/time.h +++ b/include/asm-x86/time.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASMX86_TIME_H | 1 | #ifndef ASM_X86__TIME_H |
2 | #define _ASMX86_TIME_H | 2 | #define ASM_X86__TIME_H |
3 | 3 | ||
4 | extern void hpet_time_init(void); | 4 | extern void hpet_time_init(void); |
5 | 5 | ||
@@ -46,6 +46,8 @@ static inline int native_set_wallclock(unsigned long nowtime) | |||
46 | 46 | ||
47 | #endif | 47 | #endif |
48 | 48 | ||
49 | extern void time_init(void); | ||
50 | |||
49 | #ifdef CONFIG_PARAVIRT | 51 | #ifdef CONFIG_PARAVIRT |
50 | #include <asm/paravirt.h> | 52 | #include <asm/paravirt.h> |
51 | #else /* !CONFIG_PARAVIRT */ | 53 | #else /* !CONFIG_PARAVIRT */ |
@@ -58,4 +60,4 @@ static inline int native_set_wallclock(unsigned long nowtime) | |||
58 | 60 | ||
59 | extern unsigned long __init calibrate_cpu(void); | 61 | extern unsigned long __init calibrate_cpu(void); |
60 | 62 | ||
61 | #endif | 63 | #endif /* ASM_X86__TIME_H */ |
diff --git a/include/asm-x86/timer.h b/include/asm-x86/timer.h index fb2a4ddddf3d..d0babce4b47a 100644 --- a/include/asm-x86/timer.h +++ b/include/asm-x86/timer.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASMi386_TIMER_H | 1 | #ifndef ASM_X86__TIMER_H |
2 | #define _ASMi386_TIMER_H | 2 | #define ASM_X86__TIMER_H |
3 | #include <linux/init.h> | 3 | #include <linux/init.h> |
4 | #include <linux/pm.h> | 4 | #include <linux/pm.h> |
5 | #include <linux/percpu.h> | 5 | #include <linux/percpu.h> |
@@ -9,9 +9,12 @@ | |||
9 | unsigned long long native_sched_clock(void); | 9 | unsigned long long native_sched_clock(void); |
10 | unsigned long native_calibrate_tsc(void); | 10 | unsigned long native_calibrate_tsc(void); |
11 | 11 | ||
12 | #ifdef CONFIG_X86_32 | ||
12 | extern int timer_ack; | 13 | extern int timer_ack; |
13 | extern int no_timer_check; | ||
14 | extern int recalibrate_cpu_khz(void); | 14 | extern int recalibrate_cpu_khz(void); |
15 | #endif /* CONFIG_X86_32 */ | ||
16 | |||
17 | extern int no_timer_check; | ||
15 | 18 | ||
16 | #ifndef CONFIG_PARAVIRT | 19 | #ifndef CONFIG_PARAVIRT |
17 | #define calibrate_tsc() native_calibrate_tsc() | 20 | #define calibrate_tsc() native_calibrate_tsc() |
@@ -60,4 +63,4 @@ static inline unsigned long long cycles_2_ns(unsigned long long cyc) | |||
60 | return ns; | 63 | return ns; |
61 | } | 64 | } |
62 | 65 | ||
63 | #endif | 66 | #endif /* ASM_X86__TIMER_H */ |
diff --git a/include/asm-x86/timex.h b/include/asm-x86/timex.h index 43e5a78500c5..d1ce2416a5da 100644 --- a/include/asm-x86/timex.h +++ b/include/asm-x86/timex.h | |||
@@ -1,6 +1,6 @@ | |||
1 | /* x86 architecture timex specifications */ | 1 | /* x86 architecture timex specifications */ |
2 | #ifndef _ASM_X86_TIMEX_H | 2 | #ifndef ASM_X86__TIMEX_H |
3 | #define _ASM_X86_TIMEX_H | 3 | #define ASM_X86__TIMEX_H |
4 | 4 | ||
5 | #include <asm/processor.h> | 5 | #include <asm/processor.h> |
6 | #include <asm/tsc.h> | 6 | #include <asm/tsc.h> |
@@ -16,4 +16,4 @@ | |||
16 | 16 | ||
17 | #define ARCH_HAS_READ_CURRENT_TIMER | 17 | #define ARCH_HAS_READ_CURRENT_TIMER |
18 | 18 | ||
19 | #endif | 19 | #endif /* ASM_X86__TIMEX_H */ |
diff --git a/include/asm-x86/tlb.h b/include/asm-x86/tlb.h index e4e9e2d07a93..db36e9e89e87 100644 --- a/include/asm-x86/tlb.h +++ b/include/asm-x86/tlb.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_TLB_H | 1 | #ifndef ASM_X86__TLB_H |
2 | #define _ASM_X86_TLB_H | 2 | #define ASM_X86__TLB_H |
3 | 3 | ||
4 | #define tlb_start_vma(tlb, vma) do { } while (0) | 4 | #define tlb_start_vma(tlb, vma) do { } while (0) |
5 | #define tlb_end_vma(tlb, vma) do { } while (0) | 5 | #define tlb_end_vma(tlb, vma) do { } while (0) |
@@ -8,4 +8,4 @@ | |||
8 | 8 | ||
9 | #include <asm-generic/tlb.h> | 9 | #include <asm-generic/tlb.h> |
10 | 10 | ||
11 | #endif | 11 | #endif /* ASM_X86__TLB_H */ |
diff --git a/include/asm-x86/tlbflush.h b/include/asm-x86/tlbflush.h index 35c76ceb9f40..3cdd08b5bdb7 100644 --- a/include/asm-x86/tlbflush.h +++ b/include/asm-x86/tlbflush.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_TLBFLUSH_H | 1 | #ifndef ASM_X86__TLBFLUSH_H |
2 | #define _ASM_X86_TLBFLUSH_H | 2 | #define ASM_X86__TLBFLUSH_H |
3 | 3 | ||
4 | #include <linux/mm.h> | 4 | #include <linux/mm.h> |
5 | #include <linux/sched.h> | 5 | #include <linux/sched.h> |
@@ -119,6 +119,10 @@ static inline void native_flush_tlb_others(const cpumask_t *cpumask, | |||
119 | { | 119 | { |
120 | } | 120 | } |
121 | 121 | ||
122 | static inline void reset_lazy_tlbstate(void) | ||
123 | { | ||
124 | } | ||
125 | |||
122 | #else /* SMP */ | 126 | #else /* SMP */ |
123 | 127 | ||
124 | #include <asm/smp.h> | 128 | #include <asm/smp.h> |
@@ -151,6 +155,12 @@ struct tlb_state { | |||
151 | char __cacheline_padding[L1_CACHE_BYTES-8]; | 155 | char __cacheline_padding[L1_CACHE_BYTES-8]; |
152 | }; | 156 | }; |
153 | DECLARE_PER_CPU(struct tlb_state, cpu_tlbstate); | 157 | DECLARE_PER_CPU(struct tlb_state, cpu_tlbstate); |
158 | |||
159 | void reset_lazy_tlbstate(void); | ||
160 | #else | ||
161 | static inline void reset_lazy_tlbstate(void) | ||
162 | { | ||
163 | } | ||
154 | #endif | 164 | #endif |
155 | 165 | ||
156 | #endif /* SMP */ | 166 | #endif /* SMP */ |
@@ -165,4 +175,4 @@ static inline void flush_tlb_kernel_range(unsigned long start, | |||
165 | flush_tlb_all(); | 175 | flush_tlb_all(); |
166 | } | 176 | } |
167 | 177 | ||
168 | #endif /* _ASM_X86_TLBFLUSH_H */ | 178 | #endif /* ASM_X86__TLBFLUSH_H */ |
diff --git a/include/asm-x86/topology.h b/include/asm-x86/topology.h index 90ac7718469a..7eca9bc022b2 100644 --- a/include/asm-x86/topology.h +++ b/include/asm-x86/topology.h | |||
@@ -22,8 +22,8 @@ | |||
22 | * | 22 | * |
23 | * Send feedback to <colpatch@us.ibm.com> | 23 | * Send feedback to <colpatch@us.ibm.com> |
24 | */ | 24 | */ |
25 | #ifndef _ASM_X86_TOPOLOGY_H | 25 | #ifndef ASM_X86__TOPOLOGY_H |
26 | #define _ASM_X86_TOPOLOGY_H | 26 | #define ASM_X86__TOPOLOGY_H |
27 | 27 | ||
28 | #ifdef CONFIG_X86_32 | 28 | #ifdef CONFIG_X86_32 |
29 | # ifdef CONFIG_X86_HT | 29 | # ifdef CONFIG_X86_HT |
@@ -255,4 +255,4 @@ static inline void set_mp_bus_to_node(int busnum, int node) | |||
255 | } | 255 | } |
256 | #endif | 256 | #endif |
257 | 257 | ||
258 | #endif /* _ASM_X86_TOPOLOGY_H */ | 258 | #endif /* ASM_X86__TOPOLOGY_H */ |
diff --git a/include/asm-x86/trampoline.h b/include/asm-x86/trampoline.h index b156b08d0131..0406bbd898a9 100644 --- a/include/asm-x86/trampoline.h +++ b/include/asm-x86/trampoline.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __TRAMPOLINE_HEADER | 1 | #ifndef ASM_X86__TRAMPOLINE_H |
2 | #define __TRAMPOLINE_HEADER | 2 | #define ASM_X86__TRAMPOLINE_H |
3 | 3 | ||
4 | #ifndef __ASSEMBLY__ | 4 | #ifndef __ASSEMBLY__ |
5 | 5 | ||
@@ -18,4 +18,4 @@ extern unsigned long setup_trampoline(void); | |||
18 | 18 | ||
19 | #endif /* __ASSEMBLY__ */ | 19 | #endif /* __ASSEMBLY__ */ |
20 | 20 | ||
21 | #endif /* __TRAMPOLINE_HEADER */ | 21 | #endif /* ASM_X86__TRAMPOLINE_H */ |
diff --git a/include/asm-x86/traps.h b/include/asm-x86/traps.h index a4b65a71bd66..6c3dc2c65751 100644 --- a/include/asm-x86/traps.h +++ b/include/asm-x86/traps.h | |||
@@ -1,7 +1,14 @@ | |||
1 | #ifndef _ASM_X86_TRAPS_H | 1 | #ifndef ASM_X86__TRAPS_H |
2 | #define _ASM_X86_TRAPS_H | 2 | #define ASM_X86__TRAPS_H |
3 | |||
4 | #include <asm/debugreg.h> | ||
5 | |||
6 | #ifdef CONFIG_X86_32 | ||
7 | #define dotraplinkage | ||
8 | #else | ||
9 | #define dotraplinkage asmlinkage | ||
10 | #endif | ||
3 | 11 | ||
4 | /* Common in X86_32 and X86_64 */ | ||
5 | asmlinkage void divide_error(void); | 12 | asmlinkage void divide_error(void); |
6 | asmlinkage void debug(void); | 13 | asmlinkage void debug(void); |
7 | asmlinkage void nmi(void); | 14 | asmlinkage void nmi(void); |
@@ -10,57 +17,65 @@ asmlinkage void overflow(void); | |||
10 | asmlinkage void bounds(void); | 17 | asmlinkage void bounds(void); |
11 | asmlinkage void invalid_op(void); | 18 | asmlinkage void invalid_op(void); |
12 | asmlinkage void device_not_available(void); | 19 | asmlinkage void device_not_available(void); |
20 | #ifdef CONFIG_X86_64 | ||
21 | asmlinkage void double_fault(void); | ||
22 | #endif | ||
13 | asmlinkage void coprocessor_segment_overrun(void); | 23 | asmlinkage void coprocessor_segment_overrun(void); |
14 | asmlinkage void invalid_TSS(void); | 24 | asmlinkage void invalid_TSS(void); |
15 | asmlinkage void segment_not_present(void); | 25 | asmlinkage void segment_not_present(void); |
16 | asmlinkage void stack_segment(void); | 26 | asmlinkage void stack_segment(void); |
17 | asmlinkage void general_protection(void); | 27 | asmlinkage void general_protection(void); |
18 | asmlinkage void page_fault(void); | 28 | asmlinkage void page_fault(void); |
29 | asmlinkage void spurious_interrupt_bug(void); | ||
19 | asmlinkage void coprocessor_error(void); | 30 | asmlinkage void coprocessor_error(void); |
20 | asmlinkage void simd_coprocessor_error(void); | ||
21 | asmlinkage void alignment_check(void); | 31 | asmlinkage void alignment_check(void); |
22 | asmlinkage void spurious_interrupt_bug(void); | ||
23 | #ifdef CONFIG_X86_MCE | 32 | #ifdef CONFIG_X86_MCE |
24 | asmlinkage void machine_check(void); | 33 | asmlinkage void machine_check(void); |
25 | #endif /* CONFIG_X86_MCE */ | 34 | #endif /* CONFIG_X86_MCE */ |
35 | asmlinkage void simd_coprocessor_error(void); | ||
26 | 36 | ||
27 | void do_divide_error(struct pt_regs *, long); | 37 | dotraplinkage void do_divide_error(struct pt_regs *, long); |
28 | void do_overflow(struct pt_regs *, long); | 38 | dotraplinkage void do_debug(struct pt_regs *, long); |
29 | void do_bounds(struct pt_regs *, long); | 39 | dotraplinkage void do_nmi(struct pt_regs *, long); |
30 | void do_coprocessor_segment_overrun(struct pt_regs *, long); | 40 | dotraplinkage void do_int3(struct pt_regs *, long); |
31 | void do_invalid_TSS(struct pt_regs *, long); | 41 | dotraplinkage void do_overflow(struct pt_regs *, long); |
32 | void do_segment_not_present(struct pt_regs *, long); | 42 | dotraplinkage void do_bounds(struct pt_regs *, long); |
33 | void do_stack_segment(struct pt_regs *, long); | 43 | dotraplinkage void do_invalid_op(struct pt_regs *, long); |
34 | void do_alignment_check(struct pt_regs *, long); | 44 | dotraplinkage void do_device_not_available(struct pt_regs *, long); |
35 | void do_invalid_op(struct pt_regs *, long); | 45 | dotraplinkage void do_coprocessor_segment_overrun(struct pt_regs *, long); |
36 | void do_general_protection(struct pt_regs *, long); | 46 | dotraplinkage void do_invalid_TSS(struct pt_regs *, long); |
37 | void do_nmi(struct pt_regs *, long); | 47 | dotraplinkage void do_segment_not_present(struct pt_regs *, long); |
48 | dotraplinkage void do_stack_segment(struct pt_regs *, long); | ||
49 | dotraplinkage void do_general_protection(struct pt_regs *, long); | ||
50 | dotraplinkage void do_page_fault(struct pt_regs *, unsigned long); | ||
51 | dotraplinkage void do_spurious_interrupt_bug(struct pt_regs *, long); | ||
52 | dotraplinkage void do_coprocessor_error(struct pt_regs *, long); | ||
53 | dotraplinkage void do_alignment_check(struct pt_regs *, long); | ||
54 | #ifdef CONFIG_X86_MCE | ||
55 | dotraplinkage void do_machine_check(struct pt_regs *, long); | ||
56 | #endif | ||
57 | dotraplinkage void do_simd_coprocessor_error(struct pt_regs *, long); | ||
58 | #ifdef CONFIG_X86_32 | ||
59 | dotraplinkage void do_iret_error(struct pt_regs *, long); | ||
60 | #endif | ||
61 | |||
62 | static inline int get_si_code(unsigned long condition) | ||
63 | { | ||
64 | if (condition & DR_STEP) | ||
65 | return TRAP_TRACE; | ||
66 | else if (condition & (DR_TRAP0|DR_TRAP1|DR_TRAP2|DR_TRAP3)) | ||
67 | return TRAP_HWBKPT; | ||
68 | else | ||
69 | return TRAP_BRKPT; | ||
70 | } | ||
38 | 71 | ||
39 | extern int panic_on_unrecovered_nmi; | 72 | extern int panic_on_unrecovered_nmi; |
40 | extern int kstack_depth_to_print; | 73 | extern int kstack_depth_to_print; |
41 | 74 | ||
42 | #ifdef CONFIG_X86_32 | 75 | #ifdef CONFIG_X86_32 |
43 | |||
44 | void do_iret_error(struct pt_regs *, long); | ||
45 | void do_int3(struct pt_regs *, long); | ||
46 | void do_debug(struct pt_regs *, long); | ||
47 | void math_error(void __user *); | 76 | void math_error(void __user *); |
48 | void do_coprocessor_error(struct pt_regs *, long); | ||
49 | void do_simd_coprocessor_error(struct pt_regs *, long); | ||
50 | void do_spurious_interrupt_bug(struct pt_regs *, long); | ||
51 | unsigned long patch_espfix_desc(unsigned long, unsigned long); | 77 | unsigned long patch_espfix_desc(unsigned long, unsigned long); |
52 | asmlinkage void math_emulate(long); | 78 | asmlinkage void math_emulate(long); |
79 | #endif | ||
53 | 80 | ||
54 | #else /* CONFIG_X86_32 */ | 81 | #endif /* ASM_X86__TRAPS_H */ |
55 | |||
56 | asmlinkage void double_fault(void); | ||
57 | |||
58 | asmlinkage void do_int3(struct pt_regs *, long); | ||
59 | asmlinkage void do_stack_segment(struct pt_regs *, long); | ||
60 | asmlinkage void do_debug(struct pt_regs *, unsigned long); | ||
61 | asmlinkage void do_coprocessor_error(struct pt_regs *); | ||
62 | asmlinkage void do_simd_coprocessor_error(struct pt_regs *); | ||
63 | asmlinkage void do_spurious_interrupt_bug(struct pt_regs *); | ||
64 | |||
65 | #endif /* CONFIG_X86_32 */ | ||
66 | #endif /* _ASM_X86_TRAPS_H */ | ||
diff --git a/include/asm-x86/tsc.h b/include/asm-x86/tsc.h index cb6f6ee45b8f..ad0f5c41e78c 100644 --- a/include/asm-x86/tsc.h +++ b/include/asm-x86/tsc.h | |||
@@ -1,8 +1,8 @@ | |||
1 | /* | 1 | /* |
2 | * x86 TSC related functions | 2 | * x86 TSC related functions |
3 | */ | 3 | */ |
4 | #ifndef _ASM_X86_TSC_H | 4 | #ifndef ASM_X86__TSC_H |
5 | #define _ASM_X86_TSC_H | 5 | #define ASM_X86__TSC_H |
6 | 6 | ||
7 | #include <asm/processor.h> | 7 | #include <asm/processor.h> |
8 | 8 | ||
@@ -59,4 +59,4 @@ extern void check_tsc_sync_target(void); | |||
59 | 59 | ||
60 | extern int notsc_setup(char *); | 60 | extern int notsc_setup(char *); |
61 | 61 | ||
62 | #endif | 62 | #endif /* ASM_X86__TSC_H */ |
diff --git a/include/asm-x86/types.h b/include/asm-x86/types.h index 1ac80cd9acf8..e78b52e17444 100644 --- a/include/asm-x86/types.h +++ b/include/asm-x86/types.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_TYPES_H | 1 | #ifndef ASM_X86__TYPES_H |
2 | #define _ASM_X86_TYPES_H | 2 | #define ASM_X86__TYPES_H |
3 | 3 | ||
4 | #include <asm-generic/int-ll64.h> | 4 | #include <asm-generic/int-ll64.h> |
5 | 5 | ||
@@ -33,4 +33,4 @@ typedef u32 dma_addr_t; | |||
33 | #endif /* __ASSEMBLY__ */ | 33 | #endif /* __ASSEMBLY__ */ |
34 | #endif /* __KERNEL__ */ | 34 | #endif /* __KERNEL__ */ |
35 | 35 | ||
36 | #endif | 36 | #endif /* ASM_X86__TYPES_H */ |
diff --git a/include/asm-x86/uaccess.h b/include/asm-x86/uaccess.h index 5f702d1d5218..48ebc0ad40ec 100644 --- a/include/asm-x86/uaccess.h +++ b/include/asm-x86/uaccess.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_UACCES_H_ | 1 | #ifndef ASM_X86__UACCESS_H |
2 | #define _ASM_UACCES_H_ | 2 | #define ASM_X86__UACCESS_H |
3 | /* | 3 | /* |
4 | * User space memory access functions | 4 | * User space memory access functions |
5 | */ | 5 | */ |
@@ -450,5 +450,5 @@ extern struct movsl_mask { | |||
450 | # include "uaccess_64.h" | 450 | # include "uaccess_64.h" |
451 | #endif | 451 | #endif |
452 | 452 | ||
453 | #endif | 453 | #endif /* ASM_X86__UACCESS_H */ |
454 | 454 | ||
diff --git a/include/asm-x86/uaccess_32.h b/include/asm-x86/uaccess_32.h index 6fdef39a0bcb..6b5b57d9c6d1 100644 --- a/include/asm-x86/uaccess_32.h +++ b/include/asm-x86/uaccess_32.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __i386_UACCESS_H | 1 | #ifndef ASM_X86__UACCESS_32_H |
2 | #define __i386_UACCESS_H | 2 | #define ASM_X86__UACCESS_32_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * User space memory access functions | 5 | * User space memory access functions |
@@ -215,4 +215,4 @@ long strnlen_user(const char __user *str, long n); | |||
215 | unsigned long __must_check clear_user(void __user *mem, unsigned long len); | 215 | unsigned long __must_check clear_user(void __user *mem, unsigned long len); |
216 | unsigned long __must_check __clear_user(void __user *mem, unsigned long len); | 216 | unsigned long __must_check __clear_user(void __user *mem, unsigned long len); |
217 | 217 | ||
218 | #endif /* __i386_UACCESS_H */ | 218 | #endif /* ASM_X86__UACCESS_32_H */ |
diff --git a/include/asm-x86/uaccess_64.h b/include/asm-x86/uaccess_64.h index 515d4dce96b5..c96c1f5d07a2 100644 --- a/include/asm-x86/uaccess_64.h +++ b/include/asm-x86/uaccess_64.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __X86_64_UACCESS_H | 1 | #ifndef ASM_X86__UACCESS_64_H |
2 | #define __X86_64_UACCESS_H | 2 | #define ASM_X86__UACCESS_64_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * User space memory access functions | 5 | * User space memory access functions |
@@ -7,6 +7,7 @@ | |||
7 | #include <linux/compiler.h> | 7 | #include <linux/compiler.h> |
8 | #include <linux/errno.h> | 8 | #include <linux/errno.h> |
9 | #include <linux/prefetch.h> | 9 | #include <linux/prefetch.h> |
10 | #include <linux/lockdep.h> | ||
10 | #include <asm/page.h> | 11 | #include <asm/page.h> |
11 | 12 | ||
12 | /* | 13 | /* |
@@ -198,4 +199,4 @@ static inline int __copy_from_user_inatomic_nocache(void *dst, | |||
198 | unsigned long | 199 | unsigned long |
199 | copy_user_handle_tail(char *to, char *from, unsigned len, unsigned zerorest); | 200 | copy_user_handle_tail(char *to, char *from, unsigned len, unsigned zerorest); |
200 | 201 | ||
201 | #endif /* __X86_64_UACCESS_H */ | 202 | #endif /* ASM_X86__UACCESS_64_H */ |
diff --git a/include/asm-x86/ucontext.h b/include/asm-x86/ucontext.h index 50a79f7fcde9..89eaa5456a7e 100644 --- a/include/asm-x86/ucontext.h +++ b/include/asm-x86/ucontext.h | |||
@@ -1,5 +1,11 @@ | |||
1 | #ifndef _ASM_X86_UCONTEXT_H | 1 | #ifndef ASM_X86__UCONTEXT_H |
2 | #define _ASM_X86_UCONTEXT_H | 2 | #define ASM_X86__UCONTEXT_H |
3 | |||
4 | #define UC_FP_XSTATE 0x1 /* indicates the presence of extended state | ||
5 | * information in the memory layout pointed | ||
6 | * by the fpstate pointer in the ucontext's | ||
7 | * sigcontext struct (uc_mcontext). | ||
8 | */ | ||
3 | 9 | ||
4 | struct ucontext { | 10 | struct ucontext { |
5 | unsigned long uc_flags; | 11 | unsigned long uc_flags; |
@@ -9,4 +15,4 @@ struct ucontext { | |||
9 | sigset_t uc_sigmask; /* mask last for extensibility */ | 15 | sigset_t uc_sigmask; /* mask last for extensibility */ |
10 | }; | 16 | }; |
11 | 17 | ||
12 | #endif /* _ASM_X86_UCONTEXT_H */ | 18 | #endif /* ASM_X86__UCONTEXT_H */ |
diff --git a/include/asm-x86/unaligned.h b/include/asm-x86/unaligned.h index a7bd416b4763..59dcdec37160 100644 --- a/include/asm-x86/unaligned.h +++ b/include/asm-x86/unaligned.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_UNALIGNED_H | 1 | #ifndef ASM_X86__UNALIGNED_H |
2 | #define _ASM_X86_UNALIGNED_H | 2 | #define ASM_X86__UNALIGNED_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * The x86 can do unaligned accesses itself. | 5 | * The x86 can do unaligned accesses itself. |
@@ -11,4 +11,4 @@ | |||
11 | #define get_unaligned __get_unaligned_le | 11 | #define get_unaligned __get_unaligned_le |
12 | #define put_unaligned __put_unaligned_le | 12 | #define put_unaligned __put_unaligned_le |
13 | 13 | ||
14 | #endif /* _ASM_X86_UNALIGNED_H */ | 14 | #endif /* ASM_X86__UNALIGNED_H */ |
diff --git a/include/asm-x86/unistd_32.h b/include/asm-x86/unistd_32.h index d7394673b772..017f4a87c913 100644 --- a/include/asm-x86/unistd_32.h +++ b/include/asm-x86/unistd_32.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_I386_UNISTD_H_ | 1 | #ifndef ASM_X86__UNISTD_32_H |
2 | #define _ASM_I386_UNISTD_H_ | 2 | #define ASM_X86__UNISTD_32_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * This file contains the system call numbers. | 5 | * This file contains the system call numbers. |
@@ -376,4 +376,4 @@ | |||
376 | #endif | 376 | #endif |
377 | 377 | ||
378 | #endif /* __KERNEL__ */ | 378 | #endif /* __KERNEL__ */ |
379 | #endif /* _ASM_I386_UNISTD_H_ */ | 379 | #endif /* ASM_X86__UNISTD_32_H */ |
diff --git a/include/asm-x86/unistd_64.h b/include/asm-x86/unistd_64.h index 3a341d791792..ace83f1f6787 100644 --- a/include/asm-x86/unistd_64.h +++ b/include/asm-x86/unistd_64.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_64_UNISTD_H_ | 1 | #ifndef ASM_X86__UNISTD_64_H |
2 | #define _ASM_X86_64_UNISTD_H_ | 2 | #define ASM_X86__UNISTD_64_H |
3 | 3 | ||
4 | #ifndef __SYSCALL | 4 | #ifndef __SYSCALL |
5 | #define __SYSCALL(a, b) | 5 | #define __SYSCALL(a, b) |
@@ -690,4 +690,4 @@ __SYSCALL(__NR_inotify_init1, sys_inotify_init1) | |||
690 | #define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall") | 690 | #define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall") |
691 | #endif /* __KERNEL__ */ | 691 | #endif /* __KERNEL__ */ |
692 | 692 | ||
693 | #endif /* _ASM_X86_64_UNISTD_H_ */ | 693 | #endif /* ASM_X86__UNISTD_64_H */ |
diff --git a/include/asm-x86/unwind.h b/include/asm-x86/unwind.h index 8b064bd9c553..a2151567db44 100644 --- a/include/asm-x86/unwind.h +++ b/include/asm-x86/unwind.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_UNWIND_H | 1 | #ifndef ASM_X86__UNWIND_H |
2 | #define _ASM_X86_UNWIND_H | 2 | #define ASM_X86__UNWIND_H |
3 | 3 | ||
4 | #define UNW_PC(frame) ((void)(frame), 0UL) | 4 | #define UNW_PC(frame) ((void)(frame), 0UL) |
5 | #define UNW_SP(frame) ((void)(frame), 0UL) | 5 | #define UNW_SP(frame) ((void)(frame), 0UL) |
@@ -10,4 +10,4 @@ static inline int arch_unw_user_mode(const void *info) | |||
10 | return 0; | 10 | return 0; |
11 | } | 11 | } |
12 | 12 | ||
13 | #endif /* _ASM_X86_UNWIND_H */ | 13 | #endif /* ASM_X86__UNWIND_H */ |
diff --git a/include/asm-x86/user32.h b/include/asm-x86/user32.h index a3d910047879..aa66c1857f06 100644 --- a/include/asm-x86/user32.h +++ b/include/asm-x86/user32.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef USER32_H | 1 | #ifndef ASM_X86__USER32_H |
2 | #define USER32_H 1 | 2 | #define ASM_X86__USER32_H |
3 | 3 | ||
4 | /* IA32 compatible user structures for ptrace. | 4 | /* IA32 compatible user structures for ptrace. |
5 | * These should be used for 32bit coredumps too. */ | 5 | * These should be used for 32bit coredumps too. */ |
@@ -67,4 +67,4 @@ struct user32 { | |||
67 | }; | 67 | }; |
68 | 68 | ||
69 | 69 | ||
70 | #endif | 70 | #endif /* ASM_X86__USER32_H */ |
diff --git a/include/asm-x86/user_32.h b/include/asm-x86/user_32.h index d6e51edc259d..e0fe2f55f1a6 100644 --- a/include/asm-x86/user_32.h +++ b/include/asm-x86/user_32.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _I386_USER_H | 1 | #ifndef ASM_X86__USER_32_H |
2 | #define _I386_USER_H | 2 | #define ASM_X86__USER_32_H |
3 | 3 | ||
4 | #include <asm/page.h> | 4 | #include <asm/page.h> |
5 | /* Core file format: The core file is written in such a way that gdb | 5 | /* Core file format: The core file is written in such a way that gdb |
@@ -128,4 +128,4 @@ struct user{ | |||
128 | #define HOST_TEXT_START_ADDR (u.start_code) | 128 | #define HOST_TEXT_START_ADDR (u.start_code) |
129 | #define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG) | 129 | #define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG) |
130 | 130 | ||
131 | #endif /* _I386_USER_H */ | 131 | #endif /* ASM_X86__USER_32_H */ |
diff --git a/include/asm-x86/user_64.h b/include/asm-x86/user_64.h index 6037b634c77f..38b5799863b4 100644 --- a/include/asm-x86/user_64.h +++ b/include/asm-x86/user_64.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _X86_64_USER_H | 1 | #ifndef ASM_X86__USER_64_H |
2 | #define _X86_64_USER_H | 2 | #define ASM_X86__USER_64_H |
3 | 3 | ||
4 | #include <asm/types.h> | 4 | #include <asm/types.h> |
5 | #include <asm/page.h> | 5 | #include <asm/page.h> |
@@ -134,4 +134,4 @@ struct user { | |||
134 | #define HOST_TEXT_START_ADDR (u.start_code) | 134 | #define HOST_TEXT_START_ADDR (u.start_code) |
135 | #define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG) | 135 | #define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG) |
136 | 136 | ||
137 | #endif /* _X86_64_USER_H */ | 137 | #endif /* ASM_X86__USER_64_H */ |
diff --git a/include/asm-x86/uv/bios.h b/include/asm-x86/uv/bios.h index aa73362ff5df..7cd6d7ec1308 100644 --- a/include/asm-x86/uv/bios.h +++ b/include/asm-x86/uv/bios.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_BIOS_H | 1 | #ifndef ASM_X86__UV__BIOS_H |
2 | #define _ASM_X86_BIOS_H | 2 | #define ASM_X86__UV__BIOS_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * BIOS layer definitions. | 5 | * BIOS layer definitions. |
@@ -65,4 +65,4 @@ x86_bios_freq_base(unsigned long which, unsigned long *ticks_per_second, | |||
65 | unsigned long *drift_info); | 65 | unsigned long *drift_info); |
66 | extern const char *x86_bios_strerror(long status); | 66 | extern const char *x86_bios_strerror(long status); |
67 | 67 | ||
68 | #endif /* _ASM_X86_BIOS_H */ | 68 | #endif /* ASM_X86__UV__BIOS_H */ |
diff --git a/include/asm-x86/uv/uv_bau.h b/include/asm-x86/uv/uv_bau.h index 610b6b308e93..77153fb18f5e 100644 --- a/include/asm-x86/uv/uv_bau.h +++ b/include/asm-x86/uv/uv_bau.h | |||
@@ -8,8 +8,8 @@ | |||
8 | * Copyright (C) 2008 Silicon Graphics, Inc. All rights reserved. | 8 | * Copyright (C) 2008 Silicon Graphics, Inc. All rights reserved. |
9 | */ | 9 | */ |
10 | 10 | ||
11 | #ifndef __ASM_X86_UV_BAU__ | 11 | #ifndef ASM_X86__UV__UV_BAU_H |
12 | #define __ASM_X86_UV_BAU__ | 12 | #define ASM_X86__UV__UV_BAU_H |
13 | 13 | ||
14 | #include <linux/bitmap.h> | 14 | #include <linux/bitmap.h> |
15 | #define BITSPERBYTE 8 | 15 | #define BITSPERBYTE 8 |
@@ -329,4 +329,4 @@ extern int uv_flush_tlb_others(cpumask_t *, struct mm_struct *, unsigned long); | |||
329 | extern void uv_bau_message_intr1(void); | 329 | extern void uv_bau_message_intr1(void); |
330 | extern void uv_bau_timeout_intr1(void); | 330 | extern void uv_bau_timeout_intr1(void); |
331 | 331 | ||
332 | #endif /* __ASM_X86_UV_BAU__ */ | 332 | #endif /* ASM_X86__UV__UV_BAU_H */ |
diff --git a/include/asm-x86/uv/uv_hub.h b/include/asm-x86/uv/uv_hub.h index a4ef26e5850b..bdb5b01afbf5 100644 --- a/include/asm-x86/uv/uv_hub.h +++ b/include/asm-x86/uv/uv_hub.h | |||
@@ -8,8 +8,8 @@ | |||
8 | * Copyright (C) 2007-2008 Silicon Graphics, Inc. All rights reserved. | 8 | * Copyright (C) 2007-2008 Silicon Graphics, Inc. All rights reserved. |
9 | */ | 9 | */ |
10 | 10 | ||
11 | #ifndef __ASM_X86_UV_HUB_H__ | 11 | #ifndef ASM_X86__UV__UV_HUB_H |
12 | #define __ASM_X86_UV_HUB_H__ | 12 | #define ASM_X86__UV__UV_HUB_H |
13 | 13 | ||
14 | #include <linux/numa.h> | 14 | #include <linux/numa.h> |
15 | #include <linux/percpu.h> | 15 | #include <linux/percpu.h> |
@@ -350,5 +350,5 @@ static inline int uv_num_possible_blades(void) | |||
350 | return uv_possible_blades; | 350 | return uv_possible_blades; |
351 | } | 351 | } |
352 | 352 | ||
353 | #endif /* __ASM_X86_UV_HUB__ */ | 353 | #endif /* ASM_X86__UV__UV_HUB_H */ |
354 | 354 | ||
diff --git a/include/asm-x86/uv/uv_mmrs.h b/include/asm-x86/uv/uv_mmrs.h index 151fd7fcb809..8b03d89d2459 100644 --- a/include/asm-x86/uv/uv_mmrs.h +++ b/include/asm-x86/uv/uv_mmrs.h | |||
@@ -8,8 +8,8 @@ | |||
8 | * Copyright (C) 2007-2008 Silicon Graphics, Inc. All rights reserved. | 8 | * Copyright (C) 2007-2008 Silicon Graphics, Inc. All rights reserved. |
9 | */ | 9 | */ |
10 | 10 | ||
11 | #ifndef __ASM_X86_UV_MMRS__ | 11 | #ifndef ASM_X86__UV__UV_MMRS_H |
12 | #define __ASM_X86_UV_MMRS__ | 12 | #define ASM_X86__UV__UV_MMRS_H |
13 | 13 | ||
14 | #define UV_MMR_ENABLE (1UL << 63) | 14 | #define UV_MMR_ENABLE (1UL << 63) |
15 | 15 | ||
@@ -1292,4 +1292,4 @@ union uvh_si_alias2_overlay_config_u { | |||
1292 | }; | 1292 | }; |
1293 | 1293 | ||
1294 | 1294 | ||
1295 | #endif /* __ASM_X86_UV_MMRS__ */ | 1295 | #endif /* ASM_X86__UV__UV_MMRS_H */ |
diff --git a/include/asm-x86/vdso.h b/include/asm-x86/vdso.h index 8e18fb80f5e6..4ab320913ea3 100644 --- a/include/asm-x86/vdso.h +++ b/include/asm-x86/vdso.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_VDSO_H | 1 | #ifndef ASM_X86__VDSO_H |
2 | #define _ASM_X86_VDSO_H 1 | 2 | #define ASM_X86__VDSO_H |
3 | 3 | ||
4 | #ifdef CONFIG_X86_64 | 4 | #ifdef CONFIG_X86_64 |
5 | extern const char VDSO64_PRELINK[]; | 5 | extern const char VDSO64_PRELINK[]; |
@@ -44,4 +44,4 @@ extern const char vdso32_int80_start, vdso32_int80_end; | |||
44 | extern const char vdso32_syscall_start, vdso32_syscall_end; | 44 | extern const char vdso32_syscall_start, vdso32_syscall_end; |
45 | extern const char vdso32_sysenter_start, vdso32_sysenter_end; | 45 | extern const char vdso32_sysenter_start, vdso32_sysenter_end; |
46 | 46 | ||
47 | #endif /* asm-x86/vdso.h */ | 47 | #endif /* ASM_X86__VDSO_H */ |
diff --git a/include/asm-x86/vga.h b/include/asm-x86/vga.h index 0ccf804377e6..b9e493d07d07 100644 --- a/include/asm-x86/vga.h +++ b/include/asm-x86/vga.h | |||
@@ -4,8 +4,8 @@ | |||
4 | * (c) 1998 Martin Mares <mj@ucw.cz> | 4 | * (c) 1998 Martin Mares <mj@ucw.cz> |
5 | */ | 5 | */ |
6 | 6 | ||
7 | #ifndef _LINUX_ASM_VGA_H_ | 7 | #ifndef ASM_X86__VGA_H |
8 | #define _LINUX_ASM_VGA_H_ | 8 | #define ASM_X86__VGA_H |
9 | 9 | ||
10 | /* | 10 | /* |
11 | * On the PC, we can just recalculate addresses and then | 11 | * On the PC, we can just recalculate addresses and then |
@@ -17,4 +17,4 @@ | |||
17 | #define vga_readb(x) (*(x)) | 17 | #define vga_readb(x) (*(x)) |
18 | #define vga_writeb(x, y) (*(y) = (x)) | 18 | #define vga_writeb(x, y) (*(y) = (x)) |
19 | 19 | ||
20 | #endif | 20 | #endif /* ASM_X86__VGA_H */ |
diff --git a/include/asm-x86/vgtod.h b/include/asm-x86/vgtod.h index 3301f0929342..38fd13364021 100644 --- a/include/asm-x86/vgtod.h +++ b/include/asm-x86/vgtod.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_VGTOD_H | 1 | #ifndef ASM_X86__VGTOD_H |
2 | #define _ASM_VGTOD_H 1 | 2 | #define ASM_X86__VGTOD_H |
3 | 3 | ||
4 | #include <asm/vsyscall.h> | 4 | #include <asm/vsyscall.h> |
5 | #include <linux/clocksource.h> | 5 | #include <linux/clocksource.h> |
@@ -26,4 +26,4 @@ extern struct vsyscall_gtod_data __vsyscall_gtod_data | |||
26 | __section_vsyscall_gtod_data; | 26 | __section_vsyscall_gtod_data; |
27 | extern struct vsyscall_gtod_data vsyscall_gtod_data; | 27 | extern struct vsyscall_gtod_data vsyscall_gtod_data; |
28 | 28 | ||
29 | #endif | 29 | #endif /* ASM_X86__VGTOD_H */ |
diff --git a/include/asm-x86/visws/cobalt.h b/include/asm-x86/visws/cobalt.h index 995258831b7f..9627a8fe84e9 100644 --- a/include/asm-x86/visws/cobalt.h +++ b/include/asm-x86/visws/cobalt.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __I386_SGI_COBALT_H | 1 | #ifndef ASM_X86__VISWS__COBALT_H |
2 | #define __I386_SGI_COBALT_H | 2 | #define ASM_X86__VISWS__COBALT_H |
3 | 3 | ||
4 | #include <asm/fixmap.h> | 4 | #include <asm/fixmap.h> |
5 | 5 | ||
@@ -122,4 +122,4 @@ extern char visws_board_type; | |||
122 | 122 | ||
123 | extern char visws_board_rev; | 123 | extern char visws_board_rev; |
124 | 124 | ||
125 | #endif /* __I386_SGI_COBALT_H */ | 125 | #endif /* ASM_X86__VISWS__COBALT_H */ |
diff --git a/include/asm-x86/visws/lithium.h b/include/asm-x86/visws/lithium.h index dfcd4f07ab85..b36d3b378c63 100644 --- a/include/asm-x86/visws/lithium.h +++ b/include/asm-x86/visws/lithium.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __I386_SGI_LITHIUM_H | 1 | #ifndef ASM_X86__VISWS__LITHIUM_H |
2 | #define __I386_SGI_LITHIUM_H | 2 | #define ASM_X86__VISWS__LITHIUM_H |
3 | 3 | ||
4 | #include <asm/fixmap.h> | 4 | #include <asm/fixmap.h> |
5 | 5 | ||
@@ -49,5 +49,5 @@ static inline unsigned short li_pcib_read16(unsigned long reg) | |||
49 | return *((volatile unsigned short *)(LI_PCIB_VADDR+reg)); | 49 | return *((volatile unsigned short *)(LI_PCIB_VADDR+reg)); |
50 | } | 50 | } |
51 | 51 | ||
52 | #endif | 52 | #endif /* ASM_X86__VISWS__LITHIUM_H */ |
53 | 53 | ||
diff --git a/include/asm-x86/visws/piix4.h b/include/asm-x86/visws/piix4.h index 83ea4f46e419..61c938045ec9 100644 --- a/include/asm-x86/visws/piix4.h +++ b/include/asm-x86/visws/piix4.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __I386_SGI_PIIX_H | 1 | #ifndef ASM_X86__VISWS__PIIX4_H |
2 | #define __I386_SGI_PIIX_H | 2 | #define ASM_X86__VISWS__PIIX4_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * PIIX4 as used on SGI Visual Workstations | 5 | * PIIX4 as used on SGI Visual Workstations |
@@ -104,4 +104,4 @@ | |||
104 | */ | 104 | */ |
105 | #define PIIX_GPI_STPCLK 0x4 // STPCLK signal routed back in | 105 | #define PIIX_GPI_STPCLK 0x4 // STPCLK signal routed back in |
106 | 106 | ||
107 | #endif | 107 | #endif /* ASM_X86__VISWS__PIIX4_H */ |
diff --git a/include/asm-x86/vm86.h b/include/asm-x86/vm86.h index 5ce351325e01..998bd18eb737 100644 --- a/include/asm-x86/vm86.h +++ b/include/asm-x86/vm86.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _LINUX_VM86_H | 1 | #ifndef ASM_X86__VM86_H |
2 | #define _LINUX_VM86_H | 2 | #define ASM_X86__VM86_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * I'm guessing at the VIF/VIP flag usage, but hope that this is how | 5 | * I'm guessing at the VIF/VIP flag usage, but hope that this is how |
@@ -205,4 +205,4 @@ static inline int handle_vm86_trap(struct kernel_vm86_regs *a, long b, int c) | |||
205 | 205 | ||
206 | #endif /* __KERNEL__ */ | 206 | #endif /* __KERNEL__ */ |
207 | 207 | ||
208 | #endif | 208 | #endif /* ASM_X86__VM86_H */ |
diff --git a/include/asm-x86/vmi_time.h b/include/asm-x86/vmi_time.h index c3118c385156..b2d39e6a08b7 100644 --- a/include/asm-x86/vmi_time.h +++ b/include/asm-x86/vmi_time.h | |||
@@ -22,8 +22,8 @@ | |||
22 | * | 22 | * |
23 | */ | 23 | */ |
24 | 24 | ||
25 | #ifndef __VMI_TIME_H | 25 | #ifndef ASM_X86__VMI_TIME_H |
26 | #define __VMI_TIME_H | 26 | #define ASM_X86__VMI_TIME_H |
27 | 27 | ||
28 | /* | 28 | /* |
29 | * Raw VMI call indices for timer functions | 29 | * Raw VMI call indices for timer functions |
@@ -95,4 +95,4 @@ extern void __devinit vmi_time_ap_init(void); | |||
95 | 95 | ||
96 | #define CONFIG_VMI_ALARM_HZ 100 | 96 | #define CONFIG_VMI_ALARM_HZ 100 |
97 | 97 | ||
98 | #endif | 98 | #endif /* ASM_X86__VMI_TIME_H */ |
diff --git a/include/asm-x86/vsyscall.h b/include/asm-x86/vsyscall.h index 6b66ff905af0..dcd4682413de 100644 --- a/include/asm-x86/vsyscall.h +++ b/include/asm-x86/vsyscall.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _ASM_X86_64_VSYSCALL_H_ | 1 | #ifndef ASM_X86__VSYSCALL_H |
2 | #define _ASM_X86_64_VSYSCALL_H_ | 2 | #define ASM_X86__VSYSCALL_H |
3 | 3 | ||
4 | enum vsyscall_num { | 4 | enum vsyscall_num { |
5 | __NR_vgettimeofday, | 5 | __NR_vgettimeofday, |
@@ -41,4 +41,4 @@ extern void map_vsyscall(void); | |||
41 | 41 | ||
42 | #endif /* __KERNEL__ */ | 42 | #endif /* __KERNEL__ */ |
43 | 43 | ||
44 | #endif /* _ASM_X86_64_VSYSCALL_H_ */ | 44 | #endif /* ASM_X86__VSYSCALL_H */ |
diff --git a/include/asm-x86/xcr.h b/include/asm-x86/xcr.h new file mode 100644 index 000000000000..f2cba4e79a23 --- /dev/null +++ b/include/asm-x86/xcr.h | |||
@@ -0,0 +1,49 @@ | |||
1 | /* -*- linux-c -*- ------------------------------------------------------- * | ||
2 | * | ||
3 | * Copyright 2008 rPath, Inc. - All Rights Reserved | ||
4 | * | ||
5 | * This file is part of the Linux kernel, and is made available under | ||
6 | * the terms of the GNU General Public License version 2 or (at your | ||
7 | * option) any later version; incorporated herein by reference. | ||
8 | * | ||
9 | * ----------------------------------------------------------------------- */ | ||
10 | |||
11 | /* | ||
12 | * asm-x86/xcr.h | ||
13 | * | ||
14 | * Definitions for the eXtended Control Register instructions | ||
15 | */ | ||
16 | |||
17 | #ifndef _ASM_X86_XCR_H | ||
18 | #define _ASM_X86_XCR_H | ||
19 | |||
20 | #define XCR_XFEATURE_ENABLED_MASK 0x00000000 | ||
21 | |||
22 | #ifdef __KERNEL__ | ||
23 | # ifndef __ASSEMBLY__ | ||
24 | |||
25 | #include <linux/types.h> | ||
26 | |||
27 | static inline u64 xgetbv(u32 index) | ||
28 | { | ||
29 | u32 eax, edx; | ||
30 | |||
31 | asm volatile(".byte 0x0f,0x01,0xd0" /* xgetbv */ | ||
32 | : "=a" (eax), "=d" (edx) | ||
33 | : "c" (index)); | ||
34 | return eax + ((u64)edx << 32); | ||
35 | } | ||
36 | |||
37 | static inline void xsetbv(u32 index, u64 value) | ||
38 | { | ||
39 | u32 eax = value; | ||
40 | u32 edx = value >> 32; | ||
41 | |||
42 | asm volatile(".byte 0x0f,0x01,0xd1" /* xsetbv */ | ||
43 | : : "a" (eax), "d" (edx), "c" (index)); | ||
44 | } | ||
45 | |||
46 | # endif /* __ASSEMBLY__ */ | ||
47 | #endif /* __KERNEL__ */ | ||
48 | |||
49 | #endif /* _ASM_X86_XCR_H */ | ||
diff --git a/include/asm-x86/xen/events.h b/include/asm-x86/xen/events.h index 8ded74720024..8151f5b8b6cb 100644 --- a/include/asm-x86/xen/events.h +++ b/include/asm-x86/xen/events.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __XEN_EVENTS_H | 1 | #ifndef ASM_X86__XEN__EVENTS_H |
2 | #define __XEN_EVENTS_H | 2 | #define ASM_X86__XEN__EVENTS_H |
3 | 3 | ||
4 | enum ipi_vector { | 4 | enum ipi_vector { |
5 | XEN_RESCHEDULE_VECTOR, | 5 | XEN_RESCHEDULE_VECTOR, |
@@ -21,4 +21,4 @@ static inline void xen_do_IRQ(int irq, struct pt_regs *regs) | |||
21 | do_IRQ(regs); | 21 | do_IRQ(regs); |
22 | } | 22 | } |
23 | 23 | ||
24 | #endif /* __XEN_EVENTS_H */ | 24 | #endif /* ASM_X86__XEN__EVENTS_H */ |
diff --git a/include/asm-x86/xen/grant_table.h b/include/asm-x86/xen/grant_table.h index 2444d4593a3b..c4baab4d2b68 100644 --- a/include/asm-x86/xen/grant_table.h +++ b/include/asm-x86/xen/grant_table.h | |||
@@ -1,7 +1,7 @@ | |||
1 | #ifndef __XEN_GRANT_TABLE_H | 1 | #ifndef ASM_X86__XEN__GRANT_TABLE_H |
2 | #define __XEN_GRANT_TABLE_H | 2 | #define ASM_X86__XEN__GRANT_TABLE_H |
3 | 3 | ||
4 | #define xen_alloc_vm_area(size) alloc_vm_area(size) | 4 | #define xen_alloc_vm_area(size) alloc_vm_area(size) |
5 | #define xen_free_vm_area(area) free_vm_area(area) | 5 | #define xen_free_vm_area(area) free_vm_area(area) |
6 | 6 | ||
7 | #endif /* __XEN_GRANT_TABLE_H */ | 7 | #endif /* ASM_X86__XEN__GRANT_TABLE_H */ |
diff --git a/include/asm-x86/xen/hypercall.h b/include/asm-x86/xen/hypercall.h index 91cb7fd5c123..44f4259bee3f 100644 --- a/include/asm-x86/xen/hypercall.h +++ b/include/asm-x86/xen/hypercall.h | |||
@@ -30,8 +30,8 @@ | |||
30 | * IN THE SOFTWARE. | 30 | * IN THE SOFTWARE. |
31 | */ | 31 | */ |
32 | 32 | ||
33 | #ifndef __HYPERCALL_H__ | 33 | #ifndef ASM_X86__XEN__HYPERCALL_H |
34 | #define __HYPERCALL_H__ | 34 | #define ASM_X86__XEN__HYPERCALL_H |
35 | 35 | ||
36 | #include <linux/errno.h> | 36 | #include <linux/errno.h> |
37 | #include <linux/string.h> | 37 | #include <linux/string.h> |
@@ -524,4 +524,4 @@ MULTI_stack_switch(struct multicall_entry *mcl, | |||
524 | mcl->args[1] = esp; | 524 | mcl->args[1] = esp; |
525 | } | 525 | } |
526 | 526 | ||
527 | #endif /* __HYPERCALL_H__ */ | 527 | #endif /* ASM_X86__XEN__HYPERCALL_H */ |
diff --git a/include/asm-x86/xen/hypervisor.h b/include/asm-x86/xen/hypervisor.h index 04ee0610014a..445a24759560 100644 --- a/include/asm-x86/xen/hypervisor.h +++ b/include/asm-x86/xen/hypervisor.h | |||
@@ -30,8 +30,8 @@ | |||
30 | * IN THE SOFTWARE. | 30 | * IN THE SOFTWARE. |
31 | */ | 31 | */ |
32 | 32 | ||
33 | #ifndef __HYPERVISOR_H__ | 33 | #ifndef ASM_X86__XEN__HYPERVISOR_H |
34 | #define __HYPERVISOR_H__ | 34 | #define ASM_X86__XEN__HYPERVISOR_H |
35 | 35 | ||
36 | #include <linux/types.h> | 36 | #include <linux/types.h> |
37 | #include <linux/kernel.h> | 37 | #include <linux/kernel.h> |
@@ -54,7 +54,6 @@ | |||
54 | /* arch/i386/kernel/setup.c */ | 54 | /* arch/i386/kernel/setup.c */ |
55 | extern struct shared_info *HYPERVISOR_shared_info; | 55 | extern struct shared_info *HYPERVISOR_shared_info; |
56 | extern struct start_info *xen_start_info; | 56 | extern struct start_info *xen_start_info; |
57 | #define is_initial_xendomain() (xen_start_info->flags & SIF_INITDOMAIN) | ||
58 | 57 | ||
59 | /* arch/i386/mach-xen/evtchn.c */ | 58 | /* arch/i386/mach-xen/evtchn.c */ |
60 | /* Force a proper event-channel callback from Xen. */ | 59 | /* Force a proper event-channel callback from Xen. */ |
@@ -67,6 +66,17 @@ u64 jiffies_to_st(unsigned long jiffies); | |||
67 | #define MULTI_UVMFLAGS_INDEX 3 | 66 | #define MULTI_UVMFLAGS_INDEX 3 |
68 | #define MULTI_UVMDOMID_INDEX 4 | 67 | #define MULTI_UVMDOMID_INDEX 4 |
69 | 68 | ||
70 | #define is_running_on_xen() (xen_start_info ? 1 : 0) | 69 | enum xen_domain_type { |
70 | XEN_NATIVE, | ||
71 | XEN_PV_DOMAIN, | ||
72 | XEN_HVM_DOMAIN, | ||
73 | }; | ||
71 | 74 | ||
72 | #endif /* __HYPERVISOR_H__ */ | 75 | extern enum xen_domain_type xen_domain_type; |
76 | |||
77 | #define xen_domain() (xen_domain_type != XEN_NATIVE) | ||
78 | #define xen_pv_domain() (xen_domain_type == XEN_PV_DOMAIN) | ||
79 | #define xen_initial_domain() (xen_pv_domain() && xen_start_info->flags & SIF_INITDOMAIN) | ||
80 | #define xen_hvm_domain() (xen_domain_type == XEN_HVM_DOMAIN) | ||
81 | |||
82 | #endif /* ASM_X86__XEN__HYPERVISOR_H */ | ||
diff --git a/include/asm-x86/xen/interface.h b/include/asm-x86/xen/interface.h index 9d810f2538a2..d077bba96da9 100644 --- a/include/asm-x86/xen/interface.h +++ b/include/asm-x86/xen/interface.h | |||
@@ -6,8 +6,8 @@ | |||
6 | * Copyright (c) 2004, K A Fraser | 6 | * Copyright (c) 2004, K A Fraser |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #ifndef __ASM_X86_XEN_INTERFACE_H | 9 | #ifndef ASM_X86__XEN__INTERFACE_H |
10 | #define __ASM_X86_XEN_INTERFACE_H | 10 | #define ASM_X86__XEN__INTERFACE_H |
11 | 11 | ||
12 | #ifdef __XEN__ | 12 | #ifdef __XEN__ |
13 | #define __DEFINE_GUEST_HANDLE(name, type) \ | 13 | #define __DEFINE_GUEST_HANDLE(name, type) \ |
@@ -172,4 +172,4 @@ DEFINE_GUEST_HANDLE_STRUCT(vcpu_guest_context); | |||
172 | #define XEN_CPUID XEN_EMULATE_PREFIX "cpuid" | 172 | #define XEN_CPUID XEN_EMULATE_PREFIX "cpuid" |
173 | #endif | 173 | #endif |
174 | 174 | ||
175 | #endif /* __ASM_X86_XEN_INTERFACE_H */ | 175 | #endif /* ASM_X86__XEN__INTERFACE_H */ |
diff --git a/include/asm-x86/xen/interface_32.h b/include/asm-x86/xen/interface_32.h index d8ac41d5db86..08167e19fc66 100644 --- a/include/asm-x86/xen/interface_32.h +++ b/include/asm-x86/xen/interface_32.h | |||
@@ -6,8 +6,8 @@ | |||
6 | * Copyright (c) 2004, K A Fraser | 6 | * Copyright (c) 2004, K A Fraser |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #ifndef __ASM_X86_XEN_INTERFACE_32_H | 9 | #ifndef ASM_X86__XEN__INTERFACE_32_H |
10 | #define __ASM_X86_XEN_INTERFACE_32_H | 10 | #define ASM_X86__XEN__INTERFACE_32_H |
11 | 11 | ||
12 | 12 | ||
13 | /* | 13 | /* |
@@ -94,4 +94,4 @@ typedef struct xen_callback xen_callback_t; | |||
94 | #define xen_pfn_to_cr3(pfn) (((unsigned)(pfn) << 12) | ((unsigned)(pfn) >> 20)) | 94 | #define xen_pfn_to_cr3(pfn) (((unsigned)(pfn) << 12) | ((unsigned)(pfn) >> 20)) |
95 | #define xen_cr3_to_pfn(cr3) (((unsigned)(cr3) >> 12) | ((unsigned)(cr3) << 20)) | 95 | #define xen_cr3_to_pfn(cr3) (((unsigned)(cr3) >> 12) | ((unsigned)(cr3) << 20)) |
96 | 96 | ||
97 | #endif /* __ASM_X86_XEN_INTERFACE_32_H */ | 97 | #endif /* ASM_X86__XEN__INTERFACE_32_H */ |
diff --git a/include/asm-x86/xen/interface_64.h b/include/asm-x86/xen/interface_64.h index 842266ce96e6..046c0f1e01d4 100644 --- a/include/asm-x86/xen/interface_64.h +++ b/include/asm-x86/xen/interface_64.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_X86_XEN_INTERFACE_64_H | 1 | #ifndef ASM_X86__XEN__INTERFACE_64_H |
2 | #define __ASM_X86_XEN_INTERFACE_64_H | 2 | #define ASM_X86__XEN__INTERFACE_64_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * 64-bit segment selectors | 5 | * 64-bit segment selectors |
@@ -156,4 +156,4 @@ typedef unsigned long xen_callback_t; | |||
156 | #endif /* !__ASSEMBLY__ */ | 156 | #endif /* !__ASSEMBLY__ */ |
157 | 157 | ||
158 | 158 | ||
159 | #endif /* __ASM_X86_XEN_INTERFACE_64_H */ | 159 | #endif /* ASM_X86__XEN__INTERFACE_64_H */ |
diff --git a/include/asm-x86/xen/page.h b/include/asm-x86/xen/page.h index 7b3835d3b77d..d5eada0a48d9 100644 --- a/include/asm-x86/xen/page.h +++ b/include/asm-x86/xen/page.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __XEN_PAGE_H | 1 | #ifndef ASM_X86__XEN__PAGE_H |
2 | #define __XEN_PAGE_H | 2 | #define ASM_X86__XEN__PAGE_H |
3 | 3 | ||
4 | #include <linux/pfn.h> | 4 | #include <linux/pfn.h> |
5 | 5 | ||
@@ -76,13 +76,13 @@ static inline unsigned long mfn_to_pfn(unsigned long mfn) | |||
76 | static inline xmaddr_t phys_to_machine(xpaddr_t phys) | 76 | static inline xmaddr_t phys_to_machine(xpaddr_t phys) |
77 | { | 77 | { |
78 | unsigned offset = phys.paddr & ~PAGE_MASK; | 78 | unsigned offset = phys.paddr & ~PAGE_MASK; |
79 | return XMADDR(PFN_PHYS((u64)pfn_to_mfn(PFN_DOWN(phys.paddr))) | offset); | 79 | return XMADDR(PFN_PHYS(pfn_to_mfn(PFN_DOWN(phys.paddr))) | offset); |
80 | } | 80 | } |
81 | 81 | ||
82 | static inline xpaddr_t machine_to_phys(xmaddr_t machine) | 82 | static inline xpaddr_t machine_to_phys(xmaddr_t machine) |
83 | { | 83 | { |
84 | unsigned offset = machine.maddr & ~PAGE_MASK; | 84 | unsigned offset = machine.maddr & ~PAGE_MASK; |
85 | return XPADDR(PFN_PHYS((u64)mfn_to_pfn(PFN_DOWN(machine.maddr))) | offset); | 85 | return XPADDR(PFN_PHYS(mfn_to_pfn(PFN_DOWN(machine.maddr))) | offset); |
86 | } | 86 | } |
87 | 87 | ||
88 | /* | 88 | /* |
@@ -162,4 +162,4 @@ xmaddr_t arbitrary_virt_to_machine(void *address); | |||
162 | void make_lowmem_page_readonly(void *vaddr); | 162 | void make_lowmem_page_readonly(void *vaddr); |
163 | void make_lowmem_page_readwrite(void *vaddr); | 163 | void make_lowmem_page_readwrite(void *vaddr); |
164 | 164 | ||
165 | #endif /* __XEN_PAGE_H */ | 165 | #endif /* ASM_X86__XEN__PAGE_H */ |
diff --git a/include/asm-x86/xsave.h b/include/asm-x86/xsave.h new file mode 100644 index 000000000000..08e9a1ac07a9 --- /dev/null +++ b/include/asm-x86/xsave.h | |||
@@ -0,0 +1,118 @@ | |||
1 | #ifndef __ASM_X86_XSAVE_H | ||
2 | #define __ASM_X86_XSAVE_H | ||
3 | |||
4 | #include <linux/types.h> | ||
5 | #include <asm/processor.h> | ||
6 | #include <asm/i387.h> | ||
7 | |||
8 | #define XSTATE_FP 0x1 | ||
9 | #define XSTATE_SSE 0x2 | ||
10 | |||
11 | #define XSTATE_FPSSE (XSTATE_FP | XSTATE_SSE) | ||
12 | |||
13 | #define FXSAVE_SIZE 512 | ||
14 | |||
15 | /* | ||
16 | * These are the features that the OS can handle currently. | ||
17 | */ | ||
18 | #define XCNTXT_MASK (XSTATE_FP | XSTATE_SSE) | ||
19 | |||
20 | #ifdef CONFIG_X86_64 | ||
21 | #define REX_PREFIX "0x48, " | ||
22 | #else | ||
23 | #define REX_PREFIX | ||
24 | #endif | ||
25 | |||
26 | extern unsigned int xstate_size; | ||
27 | extern u64 pcntxt_mask; | ||
28 | extern struct xsave_struct *init_xstate_buf; | ||
29 | |||
30 | extern void xsave_cntxt_init(void); | ||
31 | extern void xsave_init(void); | ||
32 | extern int init_fpu(struct task_struct *child); | ||
33 | extern int check_for_xstate(struct i387_fxsave_struct __user *buf, | ||
34 | void __user *fpstate, | ||
35 | struct _fpx_sw_bytes *sw); | ||
36 | |||
37 | static inline int xrstor_checking(struct xsave_struct *fx) | ||
38 | { | ||
39 | int err; | ||
40 | |||
41 | asm volatile("1: .byte " REX_PREFIX "0x0f,0xae,0x2f\n\t" | ||
42 | "2:\n" | ||
43 | ".section .fixup,\"ax\"\n" | ||
44 | "3: movl $-1,%[err]\n" | ||
45 | " jmp 2b\n" | ||
46 | ".previous\n" | ||
47 | _ASM_EXTABLE(1b, 3b) | ||
48 | : [err] "=r" (err) | ||
49 | : "D" (fx), "m" (*fx), "a" (-1), "d" (-1), "0" (0) | ||
50 | : "memory"); | ||
51 | |||
52 | return err; | ||
53 | } | ||
54 | |||
55 | static inline int xsave_user(struct xsave_struct __user *buf) | ||
56 | { | ||
57 | int err; | ||
58 | __asm__ __volatile__("1: .byte " REX_PREFIX "0x0f,0xae,0x27\n" | ||
59 | "2:\n" | ||
60 | ".section .fixup,\"ax\"\n" | ||
61 | "3: movl $-1,%[err]\n" | ||
62 | " jmp 2b\n" | ||
63 | ".previous\n" | ||
64 | ".section __ex_table,\"a\"\n" | ||
65 | _ASM_ALIGN "\n" | ||
66 | _ASM_PTR "1b,3b\n" | ||
67 | ".previous" | ||
68 | : [err] "=r" (err) | ||
69 | : "D" (buf), "a" (-1), "d" (-1), "0" (0) | ||
70 | : "memory"); | ||
71 | if (unlikely(err) && __clear_user(buf, xstate_size)) | ||
72 | err = -EFAULT; | ||
73 | /* No need to clear here because the caller clears USED_MATH */ | ||
74 | return err; | ||
75 | } | ||
76 | |||
77 | static inline int xrestore_user(struct xsave_struct __user *buf, u64 mask) | ||
78 | { | ||
79 | int err; | ||
80 | struct xsave_struct *xstate = ((__force struct xsave_struct *)buf); | ||
81 | u32 lmask = mask; | ||
82 | u32 hmask = mask >> 32; | ||
83 | |||
84 | __asm__ __volatile__("1: .byte " REX_PREFIX "0x0f,0xae,0x2f\n" | ||
85 | "2:\n" | ||
86 | ".section .fixup,\"ax\"\n" | ||
87 | "3: movl $-1,%[err]\n" | ||
88 | " jmp 2b\n" | ||
89 | ".previous\n" | ||
90 | ".section __ex_table,\"a\"\n" | ||
91 | _ASM_ALIGN "\n" | ||
92 | _ASM_PTR "1b,3b\n" | ||
93 | ".previous" | ||
94 | : [err] "=r" (err) | ||
95 | : "D" (xstate), "a" (lmask), "d" (hmask), "0" (0) | ||
96 | : "memory"); /* memory required? */ | ||
97 | return err; | ||
98 | } | ||
99 | |||
100 | static inline void xrstor_state(struct xsave_struct *fx, u64 mask) | ||
101 | { | ||
102 | u32 lmask = mask; | ||
103 | u32 hmask = mask >> 32; | ||
104 | |||
105 | asm volatile(".byte " REX_PREFIX "0x0f,0xae,0x2f\n\t" | ||
106 | : : "D" (fx), "m" (*fx), "a" (lmask), "d" (hmask) | ||
107 | : "memory"); | ||
108 | } | ||
109 | |||
110 | static inline void xsave(struct task_struct *tsk) | ||
111 | { | ||
112 | /* This, however, we can work around by forcing the compiler to select | ||
113 | an addressing mode that doesn't require extended registers. */ | ||
114 | __asm__ __volatile__(".byte " REX_PREFIX "0x0f,0xae,0x27" | ||
115 | : : "D" (&(tsk->thread.xstate->xsave)), | ||
116 | "a" (-1), "d"(-1) : "memory"); | ||
117 | } | ||
118 | #endif | ||