diff options
-rw-r--r-- | arch/x86/include/asm/system.h | 85 | ||||
-rw-r--r-- | arch/x86/kernel/apic/apic.c | 41 | ||||
-rw-r--r-- | arch/x86/kernel/mpparse.c | 4 | ||||
-rw-r--r-- | arch/x86/lib/memcpy_64.S | 2 | ||||
-rw-r--r-- | arch/x86/platform/mrst/mrst.c | 4 |
5 files changed, 101 insertions, 35 deletions
diff --git a/arch/x86/include/asm/system.h b/arch/x86/include/asm/system.h index 12569e691ce3..c2ff2a1d845e 100644 --- a/arch/x86/include/asm/system.h +++ b/arch/x86/include/asm/system.h | |||
@@ -303,24 +303,81 @@ static inline void native_wbinvd(void) | |||
303 | #ifdef CONFIG_PARAVIRT | 303 | #ifdef CONFIG_PARAVIRT |
304 | #include <asm/paravirt.h> | 304 | #include <asm/paravirt.h> |
305 | #else | 305 | #else |
306 | #define read_cr0() (native_read_cr0()) | 306 | |
307 | #define write_cr0(x) (native_write_cr0(x)) | 307 | static inline unsigned long read_cr0(void) |
308 | #define read_cr2() (native_read_cr2()) | 308 | { |
309 | #define write_cr2(x) (native_write_cr2(x)) | 309 | return native_read_cr0(); |
310 | #define read_cr3() (native_read_cr3()) | 310 | } |
311 | #define write_cr3(x) (native_write_cr3(x)) | 311 | |
312 | #define read_cr4() (native_read_cr4()) | 312 | static inline void write_cr0(unsigned long x) |
313 | #define read_cr4_safe() (native_read_cr4_safe()) | 313 | { |
314 | #define write_cr4(x) (native_write_cr4(x)) | 314 | native_write_cr0(x); |
315 | #define wbinvd() (native_wbinvd()) | 315 | } |
316 | |||
317 | static inline unsigned long read_cr2(void) | ||
318 | { | ||
319 | return native_read_cr2(); | ||
320 | } | ||
321 | |||
322 | static inline void write_cr2(unsigned long x) | ||
323 | { | ||
324 | native_write_cr2(x); | ||
325 | } | ||
326 | |||
327 | static inline unsigned long read_cr3(void) | ||
328 | { | ||
329 | return native_read_cr3(); | ||
330 | } | ||
331 | |||
332 | static inline void write_cr3(unsigned long x) | ||
333 | { | ||
334 | native_write_cr3(x); | ||
335 | } | ||
336 | |||
337 | static inline unsigned long read_cr4(void) | ||
338 | { | ||
339 | return native_read_cr4(); | ||
340 | } | ||
341 | |||
342 | static inline unsigned long read_cr4_safe(void) | ||
343 | { | ||
344 | return native_read_cr4_safe(); | ||
345 | } | ||
346 | |||
347 | static inline void write_cr4(unsigned long x) | ||
348 | { | ||
349 | native_write_cr4(x); | ||
350 | } | ||
351 | |||
352 | static inline void wbinvd(void) | ||
353 | { | ||
354 | native_wbinvd(); | ||
355 | } | ||
356 | |||
316 | #ifdef CONFIG_X86_64 | 357 | #ifdef CONFIG_X86_64 |
317 | #define read_cr8() (native_read_cr8()) | 358 | |
318 | #define write_cr8(x) (native_write_cr8(x)) | 359 | static inline unsigned long read_cr8(void) |
319 | #define load_gs_index native_load_gs_index | 360 | { |
361 | return native_read_cr8(); | ||
362 | } | ||
363 | |||
364 | static inline void write_cr8(unsigned long x) | ||
365 | { | ||
366 | native_write_cr8(x); | ||
367 | } | ||
368 | |||
369 | static inline void load_gs_index(unsigned selector) | ||
370 | { | ||
371 | native_load_gs_index(selector); | ||
372 | } | ||
373 | |||
320 | #endif | 374 | #endif |
321 | 375 | ||
322 | /* Clear the 'TS' bit */ | 376 | /* Clear the 'TS' bit */ |
323 | #define clts() (native_clts()) | 377 | static inline void clts(void) |
378 | { | ||
379 | native_clts(); | ||
380 | } | ||
324 | 381 | ||
325 | #endif/* CONFIG_PARAVIRT */ | 382 | #endif/* CONFIG_PARAVIRT */ |
326 | 383 | ||
diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c index fabf01eff771..ae147126b7b7 100644 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c | |||
@@ -1812,30 +1812,41 @@ void smp_spurious_interrupt(struct pt_regs *regs) | |||
1812 | */ | 1812 | */ |
1813 | void smp_error_interrupt(struct pt_regs *regs) | 1813 | void smp_error_interrupt(struct pt_regs *regs) |
1814 | { | 1814 | { |
1815 | u32 v, v1; | 1815 | u32 v0, v1; |
1816 | u32 i = 0; | ||
1817 | static const char * const error_interrupt_reason[] = { | ||
1818 | "Send CS error", /* APIC Error Bit 0 */ | ||
1819 | "Receive CS error", /* APIC Error Bit 1 */ | ||
1820 | "Send accept error", /* APIC Error Bit 2 */ | ||
1821 | "Receive accept error", /* APIC Error Bit 3 */ | ||
1822 | "Redirectable IPI", /* APIC Error Bit 4 */ | ||
1823 | "Send illegal vector", /* APIC Error Bit 5 */ | ||
1824 | "Received illegal vector", /* APIC Error Bit 6 */ | ||
1825 | "Illegal register address", /* APIC Error Bit 7 */ | ||
1826 | }; | ||
1816 | 1827 | ||
1817 | exit_idle(); | 1828 | exit_idle(); |
1818 | irq_enter(); | 1829 | irq_enter(); |
1819 | /* First tickle the hardware, only then report what went on. -- REW */ | 1830 | /* First tickle the hardware, only then report what went on. -- REW */ |
1820 | v = apic_read(APIC_ESR); | 1831 | v0 = apic_read(APIC_ESR); |
1821 | apic_write(APIC_ESR, 0); | 1832 | apic_write(APIC_ESR, 0); |
1822 | v1 = apic_read(APIC_ESR); | 1833 | v1 = apic_read(APIC_ESR); |
1823 | ack_APIC_irq(); | 1834 | ack_APIC_irq(); |
1824 | atomic_inc(&irq_err_count); | 1835 | atomic_inc(&irq_err_count); |
1825 | 1836 | ||
1826 | /* | 1837 | apic_printk(APIC_DEBUG, KERN_DEBUG "APIC error on CPU%d: %02x(%02x)", |
1827 | * Here is what the APIC error bits mean: | 1838 | smp_processor_id(), v0 , v1); |
1828 | * 0: Send CS error | 1839 | |
1829 | * 1: Receive CS error | 1840 | v1 = v1 & 0xff; |
1830 | * 2: Send accept error | 1841 | while (v1) { |
1831 | * 3: Receive accept error | 1842 | if (v1 & 0x1) |
1832 | * 4: Reserved | 1843 | apic_printk(APIC_DEBUG, KERN_CONT " : %s", error_interrupt_reason[i]); |
1833 | * 5: Send illegal vector | 1844 | i++; |
1834 | * 6: Received illegal vector | 1845 | v1 >>= 1; |
1835 | * 7: Illegal register address | 1846 | }; |
1836 | */ | 1847 | |
1837 | pr_debug("APIC error on CPU%d: %02x(%02x)\n", | 1848 | apic_printk(APIC_DEBUG, KERN_CONT "\n"); |
1838 | smp_processor_id(), v , v1); | 1849 | |
1839 | irq_exit(); | 1850 | irq_exit(); |
1840 | } | 1851 | } |
1841 | 1852 | ||
diff --git a/arch/x86/kernel/mpparse.c b/arch/x86/kernel/mpparse.c index 5a532ce646bf..ef59817357fc 100644 --- a/arch/x86/kernel/mpparse.c +++ b/arch/x86/kernel/mpparse.c | |||
@@ -718,14 +718,12 @@ static void __init check_irq_src(struct mpc_intsrc *m, int *nr_m_spare) | |||
718 | static int | 718 | static int |
719 | check_slot(unsigned long mpc_new_phys, unsigned long mpc_new_length, int count) | 719 | check_slot(unsigned long mpc_new_phys, unsigned long mpc_new_length, int count) |
720 | { | 720 | { |
721 | int ret = 0; | ||
722 | |||
723 | if (!mpc_new_phys || count <= mpc_new_length) { | 721 | if (!mpc_new_phys || count <= mpc_new_length) { |
724 | WARN(1, "update_mptable: No spare slots (length: %x)\n", count); | 722 | WARN(1, "update_mptable: No spare slots (length: %x)\n", count); |
725 | return -1; | 723 | return -1; |
726 | } | 724 | } |
727 | 725 | ||
728 | return ret; | 726 | return 0; |
729 | } | 727 | } |
730 | #else /* CONFIG_X86_IO_APIC */ | 728 | #else /* CONFIG_X86_IO_APIC */ |
731 | static | 729 | static |
diff --git a/arch/x86/lib/memcpy_64.S b/arch/x86/lib/memcpy_64.S index daab21dae2d1..efbf2a0ecdea 100644 --- a/arch/x86/lib/memcpy_64.S +++ b/arch/x86/lib/memcpy_64.S | |||
@@ -67,7 +67,7 @@ ENTRY(memcpy) | |||
67 | jb .Lhandle_tail | 67 | jb .Lhandle_tail |
68 | 68 | ||
69 | /* | 69 | /* |
70 | * We check whether memory false dependece could occur, | 70 | * We check whether memory false dependence could occur, |
71 | * then jump to corresponding copy mode. | 71 | * then jump to corresponding copy mode. |
72 | */ | 72 | */ |
73 | cmp %dil, %sil | 73 | cmp %dil, %sil |
diff --git a/arch/x86/platform/mrst/mrst.c b/arch/x86/platform/mrst/mrst.c index 275dbc19e2cf..7000e74b3087 100644 --- a/arch/x86/platform/mrst/mrst.c +++ b/arch/x86/platform/mrst/mrst.c | |||
@@ -194,7 +194,7 @@ static unsigned long __init mrst_calibrate_tsc(void) | |||
194 | return 0; | 194 | return 0; |
195 | } | 195 | } |
196 | 196 | ||
197 | void __init mrst_time_init(void) | 197 | static void __init mrst_time_init(void) |
198 | { | 198 | { |
199 | sfi_table_parse(SFI_SIG_MTMR, NULL, NULL, sfi_parse_mtmr); | 199 | sfi_table_parse(SFI_SIG_MTMR, NULL, NULL, sfi_parse_mtmr); |
200 | switch (mrst_timer_options) { | 200 | switch (mrst_timer_options) { |
@@ -216,7 +216,7 @@ void __init mrst_time_init(void) | |||
216 | apbt_time_init(); | 216 | apbt_time_init(); |
217 | } | 217 | } |
218 | 218 | ||
219 | void __cpuinit mrst_arch_setup(void) | 219 | static void __cpuinit mrst_arch_setup(void) |
220 | { | 220 | { |
221 | if (boot_cpu_data.x86 == 6 && boot_cpu_data.x86_model == 0x27) | 221 | if (boot_cpu_data.x86 == 6 && boot_cpu_data.x86_model == 0x27) |
222 | __mrst_cpu_chip = MRST_CPU_CHIP_PENWELL; | 222 | __mrst_cpu_chip = MRST_CPU_CHIP_PENWELL; |