diff options
Diffstat (limited to 'include/asm-x86')
33 files changed, 344 insertions, 88 deletions
diff --git a/include/asm-x86/amd_iommu_types.h b/include/asm-x86/amd_iommu_types.h index 7bfcb47cc452..22aa58ca1991 100644 --- a/include/asm-x86/amd_iommu_types.h +++ b/include/asm-x86/amd_iommu_types.h | |||
@@ -27,13 +27,12 @@ | |||
27 | /* | 27 | /* |
28 | * some size calculation constants | 28 | * some size calculation constants |
29 | */ | 29 | */ |
30 | #define DEV_TABLE_ENTRY_SIZE 256 | 30 | #define DEV_TABLE_ENTRY_SIZE 32 |
31 | #define ALIAS_TABLE_ENTRY_SIZE 2 | 31 | #define ALIAS_TABLE_ENTRY_SIZE 2 |
32 | #define RLOOKUP_TABLE_ENTRY_SIZE (sizeof(void *)) | 32 | #define RLOOKUP_TABLE_ENTRY_SIZE (sizeof(void *)) |
33 | 33 | ||
34 | /* helper macros */ | 34 | /* helper macros */ |
35 | #define LOW_U32(x) ((x) & ((1ULL << 32)-1)) | 35 | #define LOW_U32(x) ((x) & ((1ULL << 32)-1)) |
36 | #define HIGH_U32(x) (LOW_U32((x) >> 32)) | ||
37 | 36 | ||
38 | /* Length of the MMIO region for the AMD IOMMU */ | 37 | /* Length of the MMIO region for the AMD IOMMU */ |
39 | #define MMIO_REGION_LENGTH 0x4000 | 38 | #define MMIO_REGION_LENGTH 0x4000 |
@@ -158,78 +157,170 @@ | |||
158 | 157 | ||
159 | #define MAX_DOMAIN_ID 65536 | 158 | #define MAX_DOMAIN_ID 65536 |
160 | 159 | ||
160 | /* | ||
161 | * This structure contains generic data for IOMMU protection domains | ||
162 | * independent of their use. | ||
163 | */ | ||
161 | struct protection_domain { | 164 | struct protection_domain { |
162 | spinlock_t lock; | 165 | spinlock_t lock; /* mostly used to lock the page table*/ |
163 | u16 id; | 166 | u16 id; /* the domain id written to the device table */ |
164 | int mode; | 167 | int mode; /* paging mode (0-6 levels) */ |
165 | u64 *pt_root; | 168 | u64 *pt_root; /* page table root pointer */ |
166 | void *priv; | 169 | void *priv; /* private data */ |
167 | }; | 170 | }; |
168 | 171 | ||
172 | /* | ||
173 | * Data container for a dma_ops specific protection domain | ||
174 | */ | ||
169 | struct dma_ops_domain { | 175 | struct dma_ops_domain { |
170 | struct list_head list; | 176 | struct list_head list; |
177 | |||
178 | /* generic protection domain information */ | ||
171 | struct protection_domain domain; | 179 | struct protection_domain domain; |
180 | |||
181 | /* size of the aperture for the mappings */ | ||
172 | unsigned long aperture_size; | 182 | unsigned long aperture_size; |
183 | |||
184 | /* address we start to search for free addresses */ | ||
173 | unsigned long next_bit; | 185 | unsigned long next_bit; |
186 | |||
187 | /* address allocation bitmap */ | ||
174 | unsigned long *bitmap; | 188 | unsigned long *bitmap; |
189 | |||
190 | /* | ||
191 | * Array of PTE pages for the aperture. In this array we save all the | ||
192 | * leaf pages of the domain page table used for the aperture. This way | ||
193 | * we don't need to walk the page table to find a specific PTE. We can | ||
194 | * just calculate its address in constant time. | ||
195 | */ | ||
175 | u64 **pte_pages; | 196 | u64 **pte_pages; |
176 | }; | 197 | }; |
177 | 198 | ||
199 | /* | ||
200 | * Structure where we save information about one hardware AMD IOMMU in the | ||
201 | * system. | ||
202 | */ | ||
178 | struct amd_iommu { | 203 | struct amd_iommu { |
179 | struct list_head list; | 204 | struct list_head list; |
205 | |||
206 | /* locks the accesses to the hardware */ | ||
180 | spinlock_t lock; | 207 | spinlock_t lock; |
181 | 208 | ||
209 | /* device id of this IOMMU */ | ||
182 | u16 devid; | 210 | u16 devid; |
211 | /* | ||
212 | * Capability pointer. There could be more than one IOMMU per PCI | ||
213 | * device function if there are more than one AMD IOMMU capability | ||
214 | * pointers. | ||
215 | */ | ||
183 | u16 cap_ptr; | 216 | u16 cap_ptr; |
184 | 217 | ||
218 | /* physical address of MMIO space */ | ||
185 | u64 mmio_phys; | 219 | u64 mmio_phys; |
220 | /* virtual address of MMIO space */ | ||
186 | u8 *mmio_base; | 221 | u8 *mmio_base; |
222 | |||
223 | /* capabilities of that IOMMU read from ACPI */ | ||
187 | u32 cap; | 224 | u32 cap; |
225 | |||
226 | /* first device this IOMMU handles. read from PCI */ | ||
188 | u16 first_device; | 227 | u16 first_device; |
228 | /* last device this IOMMU handles. read from PCI */ | ||
189 | u16 last_device; | 229 | u16 last_device; |
230 | |||
231 | /* start of exclusion range of that IOMMU */ | ||
190 | u64 exclusion_start; | 232 | u64 exclusion_start; |
233 | /* length of exclusion range of that IOMMU */ | ||
191 | u64 exclusion_length; | 234 | u64 exclusion_length; |
192 | 235 | ||
236 | /* command buffer virtual address */ | ||
193 | u8 *cmd_buf; | 237 | u8 *cmd_buf; |
238 | /* size of command buffer */ | ||
194 | u32 cmd_buf_size; | 239 | u32 cmd_buf_size; |
195 | 240 | ||
241 | /* if one, we need to send a completion wait command */ | ||
196 | int need_sync; | 242 | int need_sync; |
197 | 243 | ||
244 | /* default dma_ops domain for that IOMMU */ | ||
198 | struct dma_ops_domain *default_dom; | 245 | struct dma_ops_domain *default_dom; |
199 | }; | 246 | }; |
200 | 247 | ||
248 | /* | ||
249 | * List with all IOMMUs in the system. This list is not locked because it is | ||
250 | * only written and read at driver initialization or suspend time | ||
251 | */ | ||
201 | extern struct list_head amd_iommu_list; | 252 | extern struct list_head amd_iommu_list; |
202 | 253 | ||
254 | /* | ||
255 | * Structure defining one entry in the device table | ||
256 | */ | ||
203 | struct dev_table_entry { | 257 | struct dev_table_entry { |
204 | u32 data[8]; | 258 | u32 data[8]; |
205 | }; | 259 | }; |
206 | 260 | ||
261 | /* | ||
262 | * One entry for unity mappings parsed out of the ACPI table. | ||
263 | */ | ||
207 | struct unity_map_entry { | 264 | struct unity_map_entry { |
208 | struct list_head list; | 265 | struct list_head list; |
266 | |||
267 | /* starting device id this entry is used for (including) */ | ||
209 | u16 devid_start; | 268 | u16 devid_start; |
269 | /* end device id this entry is used for (including) */ | ||
210 | u16 devid_end; | 270 | u16 devid_end; |
271 | |||
272 | /* start address to unity map (including) */ | ||
211 | u64 address_start; | 273 | u64 address_start; |
274 | /* end address to unity map (including) */ | ||
212 | u64 address_end; | 275 | u64 address_end; |
276 | |||
277 | /* required protection */ | ||
213 | int prot; | 278 | int prot; |
214 | }; | 279 | }; |
215 | 280 | ||
281 | /* | ||
282 | * List of all unity mappings. It is not locked because as runtime it is only | ||
283 | * read. It is created at ACPI table parsing time. | ||
284 | */ | ||
216 | extern struct list_head amd_iommu_unity_map; | 285 | extern struct list_head amd_iommu_unity_map; |
217 | 286 | ||
218 | /* data structures for device handling */ | 287 | /* |
288 | * Data structures for device handling | ||
289 | */ | ||
290 | |||
291 | /* | ||
292 | * Device table used by hardware. Read and write accesses by software are | ||
293 | * locked with the amd_iommu_pd_table lock. | ||
294 | */ | ||
219 | extern struct dev_table_entry *amd_iommu_dev_table; | 295 | extern struct dev_table_entry *amd_iommu_dev_table; |
296 | |||
297 | /* | ||
298 | * Alias table to find requestor ids to device ids. Not locked because only | ||
299 | * read on runtime. | ||
300 | */ | ||
220 | extern u16 *amd_iommu_alias_table; | 301 | extern u16 *amd_iommu_alias_table; |
302 | |||
303 | /* | ||
304 | * Reverse lookup table to find the IOMMU which translates a specific device. | ||
305 | */ | ||
221 | extern struct amd_iommu **amd_iommu_rlookup_table; | 306 | extern struct amd_iommu **amd_iommu_rlookup_table; |
222 | 307 | ||
308 | /* size of the dma_ops aperture as power of 2 */ | ||
223 | extern unsigned amd_iommu_aperture_order; | 309 | extern unsigned amd_iommu_aperture_order; |
224 | 310 | ||
311 | /* largest PCI device id we expect translation requests for */ | ||
225 | extern u16 amd_iommu_last_bdf; | 312 | extern u16 amd_iommu_last_bdf; |
226 | 313 | ||
227 | /* data structures for protection domain handling */ | 314 | /* data structures for protection domain handling */ |
228 | extern struct protection_domain **amd_iommu_pd_table; | 315 | extern struct protection_domain **amd_iommu_pd_table; |
316 | |||
317 | /* allocation bitmap for domain ids */ | ||
229 | extern unsigned long *amd_iommu_pd_alloc_bitmap; | 318 | extern unsigned long *amd_iommu_pd_alloc_bitmap; |
230 | 319 | ||
320 | /* will be 1 if device isolation is enabled */ | ||
231 | extern int amd_iommu_isolate; | 321 | extern int amd_iommu_isolate; |
232 | 322 | ||
323 | /* takes a PCI device id and prints it out in a readable form */ | ||
233 | static inline void print_devid(u16 devid, int nl) | 324 | static inline void print_devid(u16 devid, int nl) |
234 | { | 325 | { |
235 | int bus = devid >> 8; | 326 | int bus = devid >> 8; |
@@ -241,4 +332,11 @@ static inline void print_devid(u16 devid, int nl) | |||
241 | printk("\n"); | 332 | printk("\n"); |
242 | } | 333 | } |
243 | 334 | ||
335 | /* takes bus and device/function and returns the device id | ||
336 | * FIXME: should that be in generic PCI code? */ | ||
337 | static inline u16 calc_devid(u8 bus, u8 devfn) | ||
338 | { | ||
339 | return (((u16)bus) << 8) | devfn; | ||
340 | } | ||
341 | |||
244 | #endif | 342 | #endif |
diff --git a/include/asm-x86/apic.h b/include/asm-x86/apic.h index 4e2c1e517f06..b96460a7190d 100644 --- a/include/asm-x86/apic.h +++ b/include/asm-x86/apic.h | |||
@@ -3,6 +3,8 @@ | |||
3 | 3 | ||
4 | #include <linux/pm.h> | 4 | #include <linux/pm.h> |
5 | #include <linux/delay.h> | 5 | #include <linux/delay.h> |
6 | |||
7 | #include <asm/alternative.h> | ||
6 | #include <asm/fixmap.h> | 8 | #include <asm/fixmap.h> |
7 | #include <asm/apicdef.h> | 9 | #include <asm/apicdef.h> |
8 | #include <asm/processor.h> | 10 | #include <asm/processor.h> |
@@ -10,7 +12,7 @@ | |||
10 | 12 | ||
11 | #define ARCH_APICTIMER_STOPS_ON_C3 1 | 13 | #define ARCH_APICTIMER_STOPS_ON_C3 1 |
12 | 14 | ||
13 | #define Dprintk(x...) | 15 | #define Dprintk printk |
14 | 16 | ||
15 | /* | 17 | /* |
16 | * Debugging macros | 18 | * Debugging macros |
@@ -35,7 +37,7 @@ extern void generic_apic_probe(void); | |||
35 | 37 | ||
36 | #ifdef CONFIG_X86_LOCAL_APIC | 38 | #ifdef CONFIG_X86_LOCAL_APIC |
37 | 39 | ||
38 | extern int apic_verbosity; | 40 | extern unsigned int apic_verbosity; |
39 | extern int local_apic_timer_c2_ok; | 41 | extern int local_apic_timer_c2_ok; |
40 | 42 | ||
41 | extern int ioapic_force; | 43 | extern int ioapic_force; |
@@ -48,7 +50,6 @@ extern int disable_apic; | |||
48 | #include <asm/paravirt.h> | 50 | #include <asm/paravirt.h> |
49 | #else | 51 | #else |
50 | #define apic_write native_apic_write | 52 | #define apic_write native_apic_write |
51 | #define apic_write_atomic native_apic_write_atomic | ||
52 | #define apic_read native_apic_read | 53 | #define apic_read native_apic_read |
53 | #define setup_boot_clock setup_boot_APIC_clock | 54 | #define setup_boot_clock setup_boot_APIC_clock |
54 | #define setup_secondary_clock setup_secondary_APIC_clock | 55 | #define setup_secondary_clock setup_secondary_APIC_clock |
@@ -58,12 +59,11 @@ extern int is_vsmp_box(void); | |||
58 | 59 | ||
59 | static inline void native_apic_write(unsigned long reg, u32 v) | 60 | static inline void native_apic_write(unsigned long reg, u32 v) |
60 | { | 61 | { |
61 | *((volatile u32 *)(APIC_BASE + reg)) = v; | 62 | volatile u32 *addr = (volatile u32 *)(APIC_BASE + reg); |
62 | } | ||
63 | 63 | ||
64 | static inline void native_apic_write_atomic(unsigned long reg, u32 v) | 64 | alternative_io("movl %0, %1", "xchgl %0, %1", X86_FEATURE_11AP, |
65 | { | 65 | ASM_OUTPUT2("=r" (v), "=m" (*addr)), |
66 | (void)xchg((u32 *)(APIC_BASE + reg), v); | 66 | ASM_OUTPUT2("0" (v), "m" (*addr))); |
67 | } | 67 | } |
68 | 68 | ||
69 | static inline u32 native_apic_read(unsigned long reg) | 69 | static inline u32 native_apic_read(unsigned long reg) |
@@ -75,16 +75,6 @@ extern void apic_wait_icr_idle(void); | |||
75 | extern u32 safe_apic_wait_icr_idle(void); | 75 | extern u32 safe_apic_wait_icr_idle(void); |
76 | extern int get_physical_broadcast(void); | 76 | extern int get_physical_broadcast(void); |
77 | 77 | ||
78 | #ifdef CONFIG_X86_GOOD_APIC | ||
79 | # define FORCE_READ_AROUND_WRITE 0 | ||
80 | # define apic_read_around(x) | ||
81 | # define apic_write_around(x, y) apic_write((x), (y)) | ||
82 | #else | ||
83 | # define FORCE_READ_AROUND_WRITE 1 | ||
84 | # define apic_read_around(x) apic_read(x) | ||
85 | # define apic_write_around(x, y) apic_write_atomic((x), (y)) | ||
86 | #endif | ||
87 | |||
88 | static inline void ack_APIC_irq(void) | 78 | static inline void ack_APIC_irq(void) |
89 | { | 79 | { |
90 | /* | 80 | /* |
@@ -95,7 +85,7 @@ static inline void ack_APIC_irq(void) | |||
95 | */ | 85 | */ |
96 | 86 | ||
97 | /* Docs say use 0 for future compatibility */ | 87 | /* Docs say use 0 for future compatibility */ |
98 | apic_write_around(APIC_EOI, 0); | 88 | apic_write(APIC_EOI, 0); |
99 | } | 89 | } |
100 | 90 | ||
101 | extern int lapic_get_maxlvt(void); | 91 | extern int lapic_get_maxlvt(void); |
diff --git a/include/asm-x86/arch_hooks.h b/include/asm-x86/arch_hooks.h index 768aee8a04ef..8411750ceb63 100644 --- a/include/asm-x86/arch_hooks.h +++ b/include/asm-x86/arch_hooks.h | |||
@@ -21,6 +21,7 @@ extern void intr_init_hook(void); | |||
21 | extern void pre_intr_init_hook(void); | 21 | extern void pre_intr_init_hook(void); |
22 | extern void pre_setup_arch_hook(void); | 22 | extern void pre_setup_arch_hook(void); |
23 | extern void trap_init_hook(void); | 23 | extern void trap_init_hook(void); |
24 | extern void pre_time_init_hook(void); | ||
24 | extern void time_init_hook(void); | 25 | extern void time_init_hook(void); |
25 | extern void mca_nmi_hook(void); | 26 | extern void mca_nmi_hook(void); |
26 | 27 | ||
diff --git a/include/asm-x86/bitops.h b/include/asm-x86/bitops.h index 96b1829cea15..cfb2b64f76e7 100644 --- a/include/asm-x86/bitops.h +++ b/include/asm-x86/bitops.h | |||
@@ -356,7 +356,7 @@ static inline unsigned long ffz(unsigned long word) | |||
356 | * __fls: find last set bit in word | 356 | * __fls: find last set bit in word |
357 | * @word: The word to search | 357 | * @word: The word to search |
358 | * | 358 | * |
359 | * Undefined if no zero exists, so code should check against ~0UL first. | 359 | * Undefined if no set bit exists, so code should check against 0 first. |
360 | */ | 360 | */ |
361 | static inline unsigned long __fls(unsigned long word) | 361 | static inline unsigned long __fls(unsigned long word) |
362 | { | 362 | { |
diff --git a/include/asm-x86/calling.h b/include/asm-x86/calling.h index f13e62e2cb3e..2bc162e0ec6e 100644 --- a/include/asm-x86/calling.h +++ b/include/asm-x86/calling.h | |||
@@ -104,7 +104,7 @@ | |||
104 | .endif | 104 | .endif |
105 | .endm | 105 | .endm |
106 | 106 | ||
107 | .macro LOAD_ARGS offset | 107 | .macro LOAD_ARGS offset, skiprax=0 |
108 | movq \offset(%rsp), %r11 | 108 | movq \offset(%rsp), %r11 |
109 | movq \offset+8(%rsp), %r10 | 109 | movq \offset+8(%rsp), %r10 |
110 | movq \offset+16(%rsp), %r9 | 110 | movq \offset+16(%rsp), %r9 |
@@ -113,7 +113,10 @@ | |||
113 | movq \offset+48(%rsp), %rdx | 113 | movq \offset+48(%rsp), %rdx |
114 | movq \offset+56(%rsp), %rsi | 114 | movq \offset+56(%rsp), %rsi |
115 | movq \offset+64(%rsp), %rdi | 115 | movq \offset+64(%rsp), %rdi |
116 | .if \skiprax | ||
117 | .else | ||
116 | movq \offset+72(%rsp), %rax | 118 | movq \offset+72(%rsp), %rax |
119 | .endif | ||
117 | .endm | 120 | .endm |
118 | 121 | ||
119 | #define REST_SKIP 6*8 | 122 | #define REST_SKIP 6*8 |
@@ -165,4 +168,3 @@ | |||
165 | .macro icebp | 168 | .macro icebp |
166 | .byte 0xf1 | 169 | .byte 0xf1 |
167 | .endm | 170 | .endm |
168 | |||
diff --git a/include/asm-x86/cpufeature.h b/include/asm-x86/cpufeature.h index 75ef959db329..2f5a792b0acc 100644 --- a/include/asm-x86/cpufeature.h +++ b/include/asm-x86/cpufeature.h | |||
@@ -79,6 +79,7 @@ | |||
79 | #define X86_FEATURE_REP_GOOD (3*32+16) /* rep microcode works well on this CPU */ | 79 | #define X86_FEATURE_REP_GOOD (3*32+16) /* rep microcode works well on this CPU */ |
80 | #define X86_FEATURE_MFENCE_RDTSC (3*32+17) /* Mfence synchronizes RDTSC */ | 80 | #define X86_FEATURE_MFENCE_RDTSC (3*32+17) /* Mfence synchronizes RDTSC */ |
81 | #define X86_FEATURE_LFENCE_RDTSC (3*32+18) /* Lfence synchronizes RDTSC */ | 81 | #define X86_FEATURE_LFENCE_RDTSC (3*32+18) /* Lfence synchronizes RDTSC */ |
82 | #define X86_FEATURE_11AP (3*32+19) /* Bad local APIC aka 11AP */ | ||
82 | 83 | ||
83 | /* Intel-defined CPU features, CPUID level 0x00000001 (ecx), word 4 */ | 84 | /* Intel-defined CPU features, CPUID level 0x00000001 (ecx), word 4 */ |
84 | #define X86_FEATURE_XMM3 (4*32+ 0) /* Streaming SIMD Extensions-3 */ | 85 | #define X86_FEATURE_XMM3 (4*32+ 0) /* Streaming SIMD Extensions-3 */ |
diff --git a/include/asm-x86/dma-mapping.h b/include/asm-x86/dma-mapping.h index a1a4dc7fe6ec..c2ddd3d1b883 100644 --- a/include/asm-x86/dma-mapping.h +++ b/include/asm-x86/dma-mapping.h | |||
@@ -14,7 +14,6 @@ extern dma_addr_t bad_dma_address; | |||
14 | extern int iommu_merge; | 14 | extern int iommu_merge; |
15 | extern struct device fallback_dev; | 15 | extern struct device fallback_dev; |
16 | extern int panic_on_overflow; | 16 | extern int panic_on_overflow; |
17 | extern int forbid_dac; | ||
18 | extern int force_iommu; | 17 | extern int force_iommu; |
19 | 18 | ||
20 | struct dma_mapping_ops { | 19 | struct dma_mapping_ops { |
diff --git a/include/asm-x86/e820.h b/include/asm-x86/e820.h index 06633b01dd5b..16a31e2c7c57 100644 --- a/include/asm-x86/e820.h +++ b/include/asm-x86/e820.h | |||
@@ -90,6 +90,14 @@ static inline void e820_mark_nosave_regions(unsigned long limit_pfn) | |||
90 | } | 90 | } |
91 | #endif | 91 | #endif |
92 | 92 | ||
93 | #ifdef CONFIG_MEMTEST | ||
94 | extern void early_memtest(unsigned long start, unsigned long end); | ||
95 | #else | ||
96 | static inline void early_memtest(unsigned long start, unsigned long end) | ||
97 | { | ||
98 | } | ||
99 | #endif | ||
100 | |||
93 | extern unsigned long end_user_pfn; | 101 | extern unsigned long end_user_pfn; |
94 | 102 | ||
95 | extern u64 find_e820_area(u64 start, u64 end, u64 size, u64 align); | 103 | extern u64 find_e820_area(u64 start, u64 end, u64 size, u64 align); |
diff --git a/include/asm-x86/fixmap_32.h b/include/asm-x86/fixmap_32.h index aae2f0501a40..f1ac2b2167d7 100644 --- a/include/asm-x86/fixmap_32.h +++ b/include/asm-x86/fixmap_32.h | |||
@@ -90,13 +90,13 @@ enum fixed_addresses { | |||
90 | * 256 temporary boot-time mappings, used by early_ioremap(), | 90 | * 256 temporary boot-time mappings, used by early_ioremap(), |
91 | * before ioremap() is functional. | 91 | * before ioremap() is functional. |
92 | * | 92 | * |
93 | * We round it up to the next 512 pages boundary so that we | 93 | * We round it up to the next 256 pages boundary so that we |
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_NESTING 4 |
98 | FIX_BTMAP_END = __end_of_permanent_fixed_addresses + 512 - | 98 | FIX_BTMAP_END = __end_of_permanent_fixed_addresses + 256 - |
99 | (__end_of_permanent_fixed_addresses & 511), | 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_NESTING - 1, |
101 | FIX_WP_TEST, | 101 | FIX_WP_TEST, |
102 | #ifdef CONFIG_ACPI | 102 | #ifdef CONFIG_ACPI |
diff --git a/include/asm-x86/ftrace.h b/include/asm-x86/ftrace.h index c184441133f2..5c68b32ee1c8 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 |
2 | #define _ASM_SPARC64_FTRACE | 2 | #define _ASM_X86_FTRACE |
3 | 3 | ||
4 | #ifdef CONFIG_FTRACE | 4 | #ifdef CONFIG_FTRACE |
5 | #define MCOUNT_ADDR ((long)(mcount)) | 5 | #define MCOUNT_ADDR ((long)(mcount)) |
diff --git a/include/asm-x86/gart.h b/include/asm-x86/gart.h index 33b9aeeb35a2..3f62a83887f3 100644 --- a/include/asm-x86/gart.h +++ b/include/asm-x86/gart.h | |||
@@ -2,7 +2,6 @@ | |||
2 | #define _ASM_X8664_GART_H 1 | 2 | #define _ASM_X8664_GART_H 1 |
3 | 3 | ||
4 | #include <asm/e820.h> | 4 | #include <asm/e820.h> |
5 | #include <asm/iommu.h> | ||
6 | 5 | ||
7 | extern void set_up_gart_resume(u32, u32); | 6 | extern void set_up_gart_resume(u32, u32); |
8 | 7 | ||
diff --git a/include/asm-x86/iommu.h b/include/asm-x86/iommu.h index 068c9a40aa5b..d63166fb3ab7 100644 --- a/include/asm-x86/iommu.h +++ b/include/asm-x86/iommu.h | |||
@@ -25,10 +25,18 @@ extern void gart_iommu_hole_init(void); | |||
25 | static inline void early_gart_iommu_check(void) | 25 | static inline void early_gart_iommu_check(void) |
26 | { | 26 | { |
27 | } | 27 | } |
28 | 28 | static inline void gart_iommu_init(void) | |
29 | { | ||
30 | } | ||
29 | static inline void gart_iommu_shutdown(void) | 31 | static inline void gart_iommu_shutdown(void) |
30 | { | 32 | { |
31 | } | 33 | } |
34 | static inline void gart_parse_options(char *options) | ||
35 | { | ||
36 | } | ||
37 | static inline void gart_iommu_hole_init(void) | ||
38 | { | ||
39 | } | ||
32 | #endif | 40 | #endif |
33 | 41 | ||
34 | #endif | 42 | #endif |
diff --git a/include/asm-x86/kvm_host.h b/include/asm-x86/kvm_host.h index f995783b1fdb..fdde0bedaa90 100644 --- a/include/asm-x86/kvm_host.h +++ b/include/asm-x86/kvm_host.h | |||
@@ -703,9 +703,11 @@ enum { | |||
703 | vcpu, 0, 0, 0, 0, 0, 0) | 703 | vcpu, 0, 0, 0, 0, 0, 0) |
704 | 704 | ||
705 | #ifdef CONFIG_64BIT | 705 | #ifdef CONFIG_64BIT |
706 | #define KVM_EX_ENTRY ".quad" | 706 | # define KVM_EX_ENTRY ".quad" |
707 | # define KVM_EX_PUSH "pushq" | ||
707 | #else | 708 | #else |
708 | #define KVM_EX_ENTRY ".long" | 709 | # define KVM_EX_ENTRY ".long" |
710 | # define KVM_EX_PUSH "pushl" | ||
709 | #endif | 711 | #endif |
710 | 712 | ||
711 | /* | 713 | /* |
@@ -719,7 +721,7 @@ asmlinkage void kvm_handle_fault_on_reboot(void); | |||
719 | "666: " insn "\n\t" \ | 721 | "666: " insn "\n\t" \ |
720 | ".pushsection .text.fixup, \"ax\" \n" \ | 722 | ".pushsection .text.fixup, \"ax\" \n" \ |
721 | "667: \n\t" \ | 723 | "667: \n\t" \ |
722 | "push $666b \n\t" \ | 724 | KVM_EX_PUSH " $666b \n\t" \ |
723 | "jmp kvm_handle_fault_on_reboot \n\t" \ | 725 | "jmp kvm_handle_fault_on_reboot \n\t" \ |
724 | ".popsection \n\t" \ | 726 | ".popsection \n\t" \ |
725 | ".pushsection __ex_table, \"a\" \n\t" \ | 727 | ".pushsection __ex_table, \"a\" \n\t" \ |
diff --git a/include/asm-x86/mach-bigsmp/mach_apic.h b/include/asm-x86/mach-bigsmp/mach_apic.h index 017c8c19ad8f..c3b9dc6970c9 100644 --- a/include/asm-x86/mach-bigsmp/mach_apic.h +++ b/include/asm-x86/mach-bigsmp/mach_apic.h | |||
@@ -63,9 +63,9 @@ static inline void init_apic_ldr(void) | |||
63 | unsigned long val; | 63 | unsigned long val; |
64 | int cpu = smp_processor_id(); | 64 | int cpu = smp_processor_id(); |
65 | 65 | ||
66 | apic_write_around(APIC_DFR, APIC_DFR_VALUE); | 66 | apic_write(APIC_DFR, APIC_DFR_VALUE); |
67 | val = calculate_ldr(cpu); | 67 | val = calculate_ldr(cpu); |
68 | apic_write_around(APIC_LDR, val); | 68 | apic_write(APIC_LDR, val); |
69 | } | 69 | } |
70 | 70 | ||
71 | static inline void setup_apic_routing(void) | 71 | static inline void setup_apic_routing(void) |
diff --git a/include/asm-x86/mach-default/mach_apic.h b/include/asm-x86/mach-default/mach_apic.h index 0b2cde5e1b74..f3226b9a6b82 100644 --- a/include/asm-x86/mach-default/mach_apic.h +++ b/include/asm-x86/mach-default/mach_apic.h | |||
@@ -46,10 +46,10 @@ static inline void init_apic_ldr(void) | |||
46 | { | 46 | { |
47 | unsigned long val; | 47 | unsigned long val; |
48 | 48 | ||
49 | apic_write_around(APIC_DFR, APIC_DFR_VALUE); | 49 | apic_write(APIC_DFR, APIC_DFR_VALUE); |
50 | val = apic_read(APIC_LDR) & ~APIC_LDR_MASK; | 50 | val = apic_read(APIC_LDR) & ~APIC_LDR_MASK; |
51 | val |= SET_APIC_LOGICAL_ID(1UL << smp_processor_id()); | 51 | val |= SET_APIC_LOGICAL_ID(1UL << smp_processor_id()); |
52 | apic_write_around(APIC_LDR, val); | 52 | apic_write(APIC_LDR, val); |
53 | } | 53 | } |
54 | 54 | ||
55 | static inline int apic_id_registered(void) | 55 | static inline int apic_id_registered(void) |
diff --git a/include/asm-x86/mach-es7000/mach_apic.h b/include/asm-x86/mach-es7000/mach_apic.h index fbc8ad256f5a..0a3fdf930672 100644 --- a/include/asm-x86/mach-es7000/mach_apic.h +++ b/include/asm-x86/mach-es7000/mach_apic.h | |||
@@ -66,9 +66,9 @@ static inline void init_apic_ldr(void) | |||
66 | unsigned long val; | 66 | unsigned long val; |
67 | int cpu = smp_processor_id(); | 67 | int cpu = smp_processor_id(); |
68 | 68 | ||
69 | apic_write_around(APIC_DFR, APIC_DFR_VALUE); | 69 | apic_write(APIC_DFR, APIC_DFR_VALUE); |
70 | val = calculate_ldr(cpu); | 70 | val = calculate_ldr(cpu); |
71 | apic_write_around(APIC_LDR, val); | 71 | apic_write(APIC_LDR, val); |
72 | } | 72 | } |
73 | 73 | ||
74 | #ifndef CONFIG_X86_GENERICARCH | 74 | #ifndef CONFIG_X86_GENERICARCH |
diff --git a/include/asm-x86/mach-generic/mach_mpspec.h b/include/asm-x86/mach-generic/mach_mpspec.h index 9ef0b941bb22..c83c120be538 100644 --- a/include/asm-x86/mach-generic/mach_mpspec.h +++ b/include/asm-x86/mach-generic/mach_mpspec.h | |||
@@ -7,4 +7,6 @@ | |||
7 | /* Maximum 256 PCI busses, plus 1 ISA bus in each of 4 cabinets. */ | 7 | /* Maximum 256 PCI busses, plus 1 ISA bus in each of 4 cabinets. */ |
8 | #define MAX_MP_BUSSES 260 | 8 | #define MAX_MP_BUSSES 260 |
9 | 9 | ||
10 | extern void numaq_mps_oem_check(struct mp_config_table *mpc, char *oem, | ||
11 | char *productid); | ||
10 | #endif /* __ASM_MACH_MPSPEC_H */ | 12 | #endif /* __ASM_MACH_MPSPEC_H */ |
diff --git a/include/asm-x86/mach-summit/mach_apic.h b/include/asm-x86/mach-summit/mach_apic.h index 1f76c2e70232..75d2c95005d7 100644 --- a/include/asm-x86/mach-summit/mach_apic.h +++ b/include/asm-x86/mach-summit/mach_apic.h | |||
@@ -63,10 +63,10 @@ static inline void init_apic_ldr(void) | |||
63 | * BIOS puts 5 CPUs in one APIC cluster, we're hosed. */ | 63 | * BIOS puts 5 CPUs in one APIC cluster, we're hosed. */ |
64 | BUG_ON(count >= XAPIC_DEST_CPUS_SHIFT); | 64 | BUG_ON(count >= XAPIC_DEST_CPUS_SHIFT); |
65 | id = my_cluster | (1UL << count); | 65 | id = my_cluster | (1UL << count); |
66 | apic_write_around(APIC_DFR, APIC_DFR_VALUE); | 66 | apic_write(APIC_DFR, APIC_DFR_VALUE); |
67 | val = apic_read(APIC_LDR) & ~APIC_LDR_MASK; | 67 | val = apic_read(APIC_LDR) & ~APIC_LDR_MASK; |
68 | val |= SET_APIC_LOGICAL_ID(id); | 68 | val |= SET_APIC_LOGICAL_ID(id); |
69 | apic_write_around(APIC_LDR, val); | 69 | apic_write(APIC_LDR, val); |
70 | } | 70 | } |
71 | 71 | ||
72 | static inline int multi_timer_check(int apic, int irq) | 72 | static inline int multi_timer_check(int apic, int irq) |
diff --git a/include/asm-x86/mach-visws/entry_arch.h b/include/asm-x86/mach-visws/entry_arch.h deleted file mode 100644 index 86be554342d4..000000000000 --- a/include/asm-x86/mach-visws/entry_arch.h +++ /dev/null | |||
@@ -1,5 +0,0 @@ | |||
1 | /* | ||
2 | * VISWS uses the standard Linux entry points: | ||
3 | */ | ||
4 | |||
5 | #include "../mach-default/entry_arch.h" | ||
diff --git a/include/asm-x86/mach-visws/mach_apic.h b/include/asm-x86/mach-visws/mach_apic.h deleted file mode 100644 index 6943e7a1d0e6..000000000000 --- a/include/asm-x86/mach-visws/mach_apic.h +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | #include "../mach-default/mach_apic.h" | ||
diff --git a/include/asm-x86/mach-visws/mach_apicdef.h b/include/asm-x86/mach-visws/mach_apicdef.h deleted file mode 100644 index 42711d152a93..000000000000 --- a/include/asm-x86/mach-visws/mach_apicdef.h +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | #include "../mach-default/mach_apicdef.h" | ||
diff --git a/include/asm-x86/mach-visws/setup_arch.h b/include/asm-x86/mach-visws/setup_arch.h deleted file mode 100644 index fa4766ca2d10..000000000000 --- a/include/asm-x86/mach-visws/setup_arch.h +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | #include "../mach-default/setup_arch.h" | ||
diff --git a/include/asm-x86/mach-visws/smpboot_hooks.h b/include/asm-x86/mach-visws/smpboot_hooks.h deleted file mode 100644 index e4433ca88715..000000000000 --- a/include/asm-x86/mach-visws/smpboot_hooks.h +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | #include "../mach-default/smpboot_hooks.h" | ||
diff --git a/include/asm-x86/paravirt.h b/include/asm-x86/paravirt.h index 27c9f22ba095..aec9767836b6 100644 --- a/include/asm-x86/paravirt.h +++ b/include/asm-x86/paravirt.h | |||
@@ -205,7 +205,6 @@ struct pv_apic_ops { | |||
205 | * these shouldn't be in this interface. | 205 | * these shouldn't be in this interface. |
206 | */ | 206 | */ |
207 | void (*apic_write)(unsigned long reg, u32 v); | 207 | void (*apic_write)(unsigned long reg, u32 v); |
208 | void (*apic_write_atomic)(unsigned long reg, u32 v); | ||
209 | u32 (*apic_read)(unsigned long reg); | 208 | u32 (*apic_read)(unsigned long reg); |
210 | void (*setup_boot_clock)(void); | 209 | void (*setup_boot_clock)(void); |
211 | void (*setup_secondary_clock)(void); | 210 | void (*setup_secondary_clock)(void); |
@@ -907,11 +906,6 @@ static inline void apic_write(unsigned long reg, u32 v) | |||
907 | PVOP_VCALL2(pv_apic_ops.apic_write, reg, v); | 906 | PVOP_VCALL2(pv_apic_ops.apic_write, reg, v); |
908 | } | 907 | } |
909 | 908 | ||
910 | static inline void apic_write_atomic(unsigned long reg, u32 v) | ||
911 | { | ||
912 | PVOP_VCALL2(pv_apic_ops.apic_write_atomic, reg, v); | ||
913 | } | ||
914 | |||
915 | static inline u32 apic_read(unsigned long reg) | 909 | static inline u32 apic_read(unsigned long reg) |
916 | { | 910 | { |
917 | return PVOP_CALL1(unsigned long, pv_apic_ops.apic_read, reg); | 911 | return PVOP_CALL1(unsigned long, pv_apic_ops.apic_read, reg); |
diff --git a/include/asm-x86/processor.h b/include/asm-x86/processor.h index 55402d2ab938..15cb82a44e89 100644 --- a/include/asm-x86/processor.h +++ b/include/asm-x86/processor.h | |||
@@ -722,8 +722,6 @@ static inline void __sti_mwait(unsigned long eax, unsigned long ecx) | |||
722 | 722 | ||
723 | extern void mwait_idle_with_hints(unsigned long eax, unsigned long ecx); | 723 | extern void mwait_idle_with_hints(unsigned long eax, unsigned long ecx); |
724 | 724 | ||
725 | extern int force_mwait; | ||
726 | |||
727 | extern void select_idle_routine(const struct cpuinfo_x86 *c); | 725 | extern void select_idle_routine(const struct cpuinfo_x86 *c); |
728 | 726 | ||
729 | extern unsigned long boot_option_idle_override; | 727 | extern unsigned long boot_option_idle_override; |
diff --git a/include/asm-x86/ptrace-abi.h b/include/asm-x86/ptrace-abi.h index f224eb3c3157..72e7b9db29bb 100644 --- a/include/asm-x86/ptrace-abi.h +++ b/include/asm-x86/ptrace-abi.h | |||
@@ -73,11 +73,11 @@ | |||
73 | 73 | ||
74 | #ifdef __x86_64__ | 74 | #ifdef __x86_64__ |
75 | # define PTRACE_ARCH_PRCTL 30 | 75 | # define PTRACE_ARCH_PRCTL 30 |
76 | #else | ||
77 | # define PTRACE_SYSEMU 31 | ||
78 | # define PTRACE_SYSEMU_SINGLESTEP 32 | ||
79 | #endif | 76 | #endif |
80 | 77 | ||
78 | #define PTRACE_SYSEMU 31 | ||
79 | #define PTRACE_SYSEMU_SINGLESTEP 32 | ||
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 | #ifndef __ASSEMBLY__ |
diff --git a/include/asm-x86/segment.h b/include/asm-x86/segment.h index dfc8601c0892..646452ea9ea3 100644 --- a/include/asm-x86/segment.h +++ b/include/asm-x86/segment.h | |||
@@ -1,6 +1,15 @@ | |||
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 */ | ||
5 | /* This is a macro so it can be used in initializers */ | ||
6 | #define GDT_ENTRY(flags, base, limit) \ | ||
7 | ((((base) & 0xff000000ULL) << (56-24)) | \ | ||
8 | (((flags) & 0x0000f0ffULL) << 40) | \ | ||
9 | (((limit) & 0x000f0000ULL) << (48-16)) | \ | ||
10 | (((base) & 0x00ffffffULL) << 16) | \ | ||
11 | (((limit) & 0x0000ffffULL))) | ||
12 | |||
4 | /* Simple and small GDT entries for booting only */ | 13 | /* Simple and small GDT entries for booting only */ |
5 | 14 | ||
6 | #define GDT_ENTRY_BOOT_CS 2 | 15 | #define GDT_ENTRY_BOOT_CS 2 |
diff --git a/include/asm-x86/setup.h b/include/asm-x86/setup.h index 659492624e74..a07c6f1c01e1 100644 --- a/include/asm-x86/setup.h +++ b/include/asm-x86/setup.h | |||
@@ -19,13 +19,28 @@ static inline int is_visws_box(void) { return 0; } | |||
19 | /* | 19 | /* |
20 | * Any setup quirks to be performed? | 20 | * Any setup quirks to be performed? |
21 | */ | 21 | */ |
22 | extern int (*arch_time_init_quirk)(void); | 22 | struct mpc_config_processor; |
23 | extern int (*arch_pre_intr_init_quirk)(void); | 23 | struct mpc_config_bus; |
24 | extern int (*arch_intr_init_quirk)(void); | 24 | struct mp_config_oemtable; |
25 | extern int (*arch_trap_init_quirk)(void); | 25 | struct x86_quirks { |
26 | extern char * (*arch_memory_setup_quirk)(void); | 26 | int (*arch_pre_time_init)(void); |
27 | extern int (*mach_get_smp_config_quirk)(unsigned int early); | 27 | int (*arch_time_init)(void); |
28 | extern int (*mach_find_smp_config_quirk)(unsigned int reserve); | 28 | int (*arch_pre_intr_init)(void); |
29 | int (*arch_intr_init)(void); | ||
30 | int (*arch_trap_init)(void); | ||
31 | char * (*arch_memory_setup)(void); | ||
32 | int (*mach_get_smp_config)(unsigned int early); | ||
33 | int (*mach_find_smp_config)(unsigned int reserve); | ||
34 | |||
35 | int *mpc_record; | ||
36 | int (*mpc_apic_id)(struct mpc_config_processor *m); | ||
37 | void (*mpc_oem_bus_info)(struct mpc_config_bus *m, char *name); | ||
38 | void (*mpc_oem_pci_bus)(struct mpc_config_bus *m); | ||
39 | void (*smp_read_mpc_oem)(struct mp_config_oemtable *oemtable, | ||
40 | unsigned short oemsize); | ||
41 | }; | ||
42 | |||
43 | extern struct x86_quirks *x86_quirks; | ||
29 | 44 | ||
30 | #ifndef CONFIG_PARAVIRT | 45 | #ifndef CONFIG_PARAVIRT |
31 | #define paravirt_post_allocator_init() do {} while (0) | 46 | #define paravirt_post_allocator_init() do {} while (0) |
diff --git a/include/asm-x86/signal.h b/include/asm-x86/signal.h index f15186d39c69..6dac49364e95 100644 --- a/include/asm-x86/signal.h +++ b/include/asm-x86/signal.h | |||
@@ -181,12 +181,12 @@ typedef struct sigaltstack { | |||
181 | #ifdef __KERNEL__ | 181 | #ifdef __KERNEL__ |
182 | #include <asm/sigcontext.h> | 182 | #include <asm/sigcontext.h> |
183 | 183 | ||
184 | #ifdef __386__ | 184 | #ifdef __i386__ |
185 | 185 | ||
186 | #define __HAVE_ARCH_SIG_BITOPS | 186 | #define __HAVE_ARCH_SIG_BITOPS |
187 | 187 | ||
188 | #define sigaddset(set,sig) \ | 188 | #define sigaddset(set,sig) \ |
189 | (__builtin_constantp(sig) \ | 189 | (__builtin_constant_p(sig) \ |
190 | ? __const_sigaddset((set), (sig)) \ | 190 | ? __const_sigaddset((set), (sig)) \ |
191 | : __gen_sigaddset((set), (sig))) | 191 | : __gen_sigaddset((set), (sig))) |
192 | 192 | ||
diff --git a/include/asm-x86/swiotlb.h b/include/asm-x86/swiotlb.h index f5d9e74b1e4a..c706a7442633 100644 --- a/include/asm-x86/swiotlb.h +++ b/include/asm-x86/swiotlb.h | |||
@@ -45,12 +45,14 @@ extern int swiotlb_force; | |||
45 | 45 | ||
46 | #ifdef CONFIG_SWIOTLB | 46 | #ifdef CONFIG_SWIOTLB |
47 | extern int swiotlb; | 47 | extern int swiotlb; |
48 | extern void pci_swiotlb_init(void); | ||
48 | #else | 49 | #else |
49 | #define swiotlb 0 | 50 | #define swiotlb 0 |
51 | static inline void pci_swiotlb_init(void) | ||
52 | { | ||
53 | } | ||
50 | #endif | 54 | #endif |
51 | 55 | ||
52 | extern void pci_swiotlb_init(void); | ||
53 | |||
54 | static inline void dma_mark_clean(void *addr, size_t size) {} | 56 | static inline void dma_mark_clean(void *addr, size_t size) {} |
55 | 57 | ||
56 | #endif /* _ASM_SWIOTLB_H */ | 58 | #endif /* _ASM_SWIOTLB_H */ |
diff --git a/include/asm-x86/thread_info.h b/include/asm-x86/thread_info.h index 895339d2bc0b..0a8f27d31d0d 100644 --- a/include/asm-x86/thread_info.h +++ b/include/asm-x86/thread_info.h | |||
@@ -75,9 +75,7 @@ struct thread_info { | |||
75 | #define TIF_NEED_RESCHED 3 /* rescheduling necessary */ | 75 | #define TIF_NEED_RESCHED 3 /* rescheduling necessary */ |
76 | #define TIF_SINGLESTEP 4 /* reenable singlestep on user return*/ | 76 | #define TIF_SINGLESTEP 4 /* reenable singlestep on user return*/ |
77 | #define TIF_IRET 5 /* force IRET */ | 77 | #define TIF_IRET 5 /* force IRET */ |
78 | #ifdef CONFIG_X86_32 | ||
79 | #define TIF_SYSCALL_EMU 6 /* syscall emulation active */ | 78 | #define TIF_SYSCALL_EMU 6 /* syscall emulation active */ |
80 | #endif | ||
81 | #define TIF_SYSCALL_AUDIT 7 /* syscall auditing active */ | 79 | #define TIF_SYSCALL_AUDIT 7 /* syscall auditing active */ |
82 | #define TIF_SECCOMP 8 /* secure computing */ | 80 | #define TIF_SECCOMP 8 /* secure computing */ |
83 | #define TIF_MCE_NOTIFY 10 /* notify userspace of an MCE */ | 81 | #define TIF_MCE_NOTIFY 10 /* notify userspace of an MCE */ |
@@ -100,11 +98,7 @@ struct thread_info { | |||
100 | #define _TIF_SINGLESTEP (1 << TIF_SINGLESTEP) | 98 | #define _TIF_SINGLESTEP (1 << TIF_SINGLESTEP) |
101 | #define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED) | 99 | #define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED) |
102 | #define _TIF_IRET (1 << TIF_IRET) | 100 | #define _TIF_IRET (1 << TIF_IRET) |
103 | #ifdef CONFIG_X86_32 | ||
104 | #define _TIF_SYSCALL_EMU (1 << TIF_SYSCALL_EMU) | 101 | #define _TIF_SYSCALL_EMU (1 << TIF_SYSCALL_EMU) |
105 | #else | ||
106 | #define _TIF_SYSCALL_EMU 0 | ||
107 | #endif | ||
108 | #define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT) | 102 | #define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT) |
109 | #define _TIF_SECCOMP (1 << TIF_SECCOMP) | 103 | #define _TIF_SECCOMP (1 << TIF_SECCOMP) |
110 | #define _TIF_MCE_NOTIFY (1 << TIF_MCE_NOTIFY) | 104 | #define _TIF_MCE_NOTIFY (1 << TIF_MCE_NOTIFY) |
@@ -121,18 +115,27 @@ struct thread_info { | |||
121 | #define _TIF_DS_AREA_MSR (1 << TIF_DS_AREA_MSR) | 115 | #define _TIF_DS_AREA_MSR (1 << TIF_DS_AREA_MSR) |
122 | #define _TIF_BTS_TRACE_TS (1 << TIF_BTS_TRACE_TS) | 116 | #define _TIF_BTS_TRACE_TS (1 << TIF_BTS_TRACE_TS) |
123 | 117 | ||
118 | /* work to do in syscall_trace_enter() */ | ||
119 | #define _TIF_WORK_SYSCALL_ENTRY \ | ||
120 | (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_EMU | \ | ||
121 | _TIF_SYSCALL_AUDIT | _TIF_SECCOMP | _TIF_SINGLESTEP) | ||
122 | |||
123 | /* work to do in syscall_trace_leave() */ | ||
124 | #define _TIF_WORK_SYSCALL_EXIT \ | ||
125 | (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT | _TIF_SINGLESTEP) | ||
126 | |||
124 | /* work to do on interrupt/exception return */ | 127 | /* work to do on interrupt/exception return */ |
125 | #define _TIF_WORK_MASK \ | 128 | #define _TIF_WORK_MASK \ |
126 | (0x0000FFFF & \ | 129 | (0x0000FFFF & \ |
127 | ~(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SINGLESTEP| \ | 130 | ~(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT| \ |
128 | _TIF_SECCOMP|_TIF_SYSCALL_EMU)) | 131 | _TIF_SINGLESTEP|_TIF_SECCOMP|_TIF_SYSCALL_EMU)) |
129 | 132 | ||
130 | /* work to do on any return to user space */ | 133 | /* work to do on any return to user space */ |
131 | #define _TIF_ALLWORK_MASK (0x0000FFFF & ~_TIF_SECCOMP) | 134 | #define _TIF_ALLWORK_MASK (0x0000FFFF & ~_TIF_SECCOMP) |
132 | 135 | ||
133 | /* Only used for 64 bit */ | 136 | /* Only used for 64 bit */ |
134 | #define _TIF_DO_NOTIFY_MASK \ | 137 | #define _TIF_DO_NOTIFY_MASK \ |
135 | (_TIF_SIGPENDING|_TIF_SINGLESTEP|_TIF_MCE_NOTIFY|_TIF_HRTICK_RESCHED) | 138 | (_TIF_SIGPENDING|_TIF_MCE_NOTIFY|_TIF_HRTICK_RESCHED) |
136 | 139 | ||
137 | /* flags to check in __switch_to() */ | 140 | /* flags to check in __switch_to() */ |
138 | #define _TIF_WORK_CTXSW \ | 141 | #define _TIF_WORK_CTXSW \ |
diff --git a/include/asm-x86/traps.h b/include/asm-x86/traps.h new file mode 100644 index 000000000000..a4b65a71bd66 --- /dev/null +++ b/include/asm-x86/traps.h | |||
@@ -0,0 +1,66 @@ | |||
1 | #ifndef _ASM_X86_TRAPS_H | ||
2 | #define _ASM_X86_TRAPS_H | ||
3 | |||
4 | /* Common in X86_32 and X86_64 */ | ||
5 | asmlinkage void divide_error(void); | ||
6 | asmlinkage void debug(void); | ||
7 | asmlinkage void nmi(void); | ||
8 | asmlinkage void int3(void); | ||
9 | asmlinkage void overflow(void); | ||
10 | asmlinkage void bounds(void); | ||
11 | asmlinkage void invalid_op(void); | ||
12 | asmlinkage void device_not_available(void); | ||
13 | asmlinkage void coprocessor_segment_overrun(void); | ||
14 | asmlinkage void invalid_TSS(void); | ||
15 | asmlinkage void segment_not_present(void); | ||
16 | asmlinkage void stack_segment(void); | ||
17 | asmlinkage void general_protection(void); | ||
18 | asmlinkage void page_fault(void); | ||
19 | asmlinkage void coprocessor_error(void); | ||
20 | asmlinkage void simd_coprocessor_error(void); | ||
21 | asmlinkage void alignment_check(void); | ||
22 | asmlinkage void spurious_interrupt_bug(void); | ||
23 | #ifdef CONFIG_X86_MCE | ||
24 | asmlinkage void machine_check(void); | ||
25 | #endif /* CONFIG_X86_MCE */ | ||
26 | |||
27 | void do_divide_error(struct pt_regs *, long); | ||
28 | void do_overflow(struct pt_regs *, long); | ||
29 | void do_bounds(struct pt_regs *, long); | ||
30 | void do_coprocessor_segment_overrun(struct pt_regs *, long); | ||
31 | void do_invalid_TSS(struct pt_regs *, long); | ||
32 | void do_segment_not_present(struct pt_regs *, long); | ||
33 | void do_stack_segment(struct pt_regs *, long); | ||
34 | void do_alignment_check(struct pt_regs *, long); | ||
35 | void do_invalid_op(struct pt_regs *, long); | ||
36 | void do_general_protection(struct pt_regs *, long); | ||
37 | void do_nmi(struct pt_regs *, long); | ||
38 | |||
39 | extern int panic_on_unrecovered_nmi; | ||
40 | extern int kstack_depth_to_print; | ||
41 | |||
42 | #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 *); | ||
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); | ||
52 | asmlinkage void math_emulate(long); | ||
53 | |||
54 | #else /* CONFIG_X86_32 */ | ||
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/uv/bios.h b/include/asm-x86/uv/bios.h new file mode 100644 index 000000000000..aa73362ff5df --- /dev/null +++ b/include/asm-x86/uv/bios.h | |||
@@ -0,0 +1,68 @@ | |||
1 | #ifndef _ASM_X86_BIOS_H | ||
2 | #define _ASM_X86_BIOS_H | ||
3 | |||
4 | /* | ||
5 | * BIOS layer definitions. | ||
6 | * | ||
7 | * Copyright (c) 2008 Silicon Graphics, Inc. All Rights Reserved. | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License as published by | ||
11 | * the Free Software Foundation; either version 2 of the License, or | ||
12 | * (at your option) any later version. | ||
13 | * | ||
14 | * This program is distributed in the hope that it will be useful, | ||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
17 | * GNU General Public License for more details. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public License | ||
20 | * along with this program; if not, write to the Free Software | ||
21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
22 | */ | ||
23 | |||
24 | #include <linux/rtc.h> | ||
25 | |||
26 | #define BIOS_FREQ_BASE 0x01000001 | ||
27 | |||
28 | enum { | ||
29 | BIOS_FREQ_BASE_PLATFORM = 0, | ||
30 | BIOS_FREQ_BASE_INTERVAL_TIMER = 1, | ||
31 | BIOS_FREQ_BASE_REALTIME_CLOCK = 2 | ||
32 | }; | ||
33 | |||
34 | # define BIOS_CALL(result, a0, a1, a2, a3, a4, a5, a6, a7) \ | ||
35 | do { \ | ||
36 | /* XXX - the real call goes here */ \ | ||
37 | result.status = BIOS_STATUS_UNIMPLEMENTED; \ | ||
38 | isrv.v0 = 0; \ | ||
39 | isrv.v1 = 0; \ | ||
40 | } while (0) | ||
41 | |||
42 | enum { | ||
43 | BIOS_STATUS_SUCCESS = 0, | ||
44 | BIOS_STATUS_UNIMPLEMENTED = -1, | ||
45 | BIOS_STATUS_EINVAL = -2, | ||
46 | BIOS_STATUS_ERROR = -3 | ||
47 | }; | ||
48 | |||
49 | struct uv_bios_retval { | ||
50 | /* | ||
51 | * A zero status value indicates call completed without error. | ||
52 | * A negative status value indicates reason of call failure. | ||
53 | * A positive status value indicates success but an | ||
54 | * informational value should be printed (e.g., "reboot for | ||
55 | * change to take effect"). | ||
56 | */ | ||
57 | s64 status; | ||
58 | u64 v0; | ||
59 | u64 v1; | ||
60 | u64 v2; | ||
61 | }; | ||
62 | |||
63 | extern long | ||
64 | x86_bios_freq_base(unsigned long which, unsigned long *ticks_per_second, | ||
65 | unsigned long *drift_info); | ||
66 | extern const char *x86_bios_strerror(long status); | ||
67 | |||
68 | #endif /* _ASM_X86_BIOS_H */ | ||