diff options
-rw-r--r-- | arch/x86/include/asm/alternative.h | 7 | ||||
-rw-r--r-- | arch/x86/include/asm/cpufeature.h | 14 | ||||
-rw-r--r-- | arch/x86/kernel/entry_32.S | 2 | ||||
-rw-r--r-- | arch/x86/lib/clear_page_64.S | 2 | ||||
-rw-r--r-- | arch/x86/lib/copy_page_64.S | 2 | ||||
-rw-r--r-- | arch/x86/lib/memcpy_64.S | 2 | ||||
-rw-r--r-- | arch/x86/lib/memset_64.S | 2 |
7 files changed, 17 insertions, 14 deletions
diff --git a/arch/x86/include/asm/alternative.h b/arch/x86/include/asm/alternative.h index 03b6bb5394a0..bc6abb7bc7ee 100644 --- a/arch/x86/include/asm/alternative.h +++ b/arch/x86/include/asm/alternative.h | |||
@@ -45,10 +45,9 @@ | |||
45 | struct alt_instr { | 45 | struct alt_instr { |
46 | u8 *instr; /* original instruction */ | 46 | u8 *instr; /* original instruction */ |
47 | u8 *replacement; | 47 | u8 *replacement; |
48 | u8 cpuid; /* cpuid bit set for replacement */ | 48 | u16 cpuid; /* cpuid bit set for replacement */ |
49 | u8 instrlen; /* length of original instruction */ | 49 | u8 instrlen; /* length of original instruction */ |
50 | u8 replacementlen; /* length of new instruction, <= instrlen */ | 50 | u8 replacementlen; /* length of new instruction, <= instrlen */ |
51 | u8 pad1; | ||
52 | #ifdef CONFIG_X86_64 | 51 | #ifdef CONFIG_X86_64 |
53 | u32 pad2; | 52 | u32 pad2; |
54 | #endif | 53 | #endif |
@@ -86,9 +85,11 @@ static inline int alternatives_text_reserved(void *start, void *end) | |||
86 | _ASM_ALIGN "\n" \ | 85 | _ASM_ALIGN "\n" \ |
87 | _ASM_PTR "661b\n" /* label */ \ | 86 | _ASM_PTR "661b\n" /* label */ \ |
88 | _ASM_PTR "663f\n" /* new instruction */ \ | 87 | _ASM_PTR "663f\n" /* new instruction */ \ |
89 | " .byte " __stringify(feature) "\n" /* feature bit */ \ | 88 | " .word " __stringify(feature) "\n" /* feature bit */ \ |
90 | " .byte 662b-661b\n" /* sourcelen */ \ | 89 | " .byte 662b-661b\n" /* sourcelen */ \ |
91 | " .byte 664f-663f\n" /* replacementlen */ \ | 90 | " .byte 664f-663f\n" /* replacementlen */ \ |
91 | ".previous\n" \ | ||
92 | ".section .discard,\"aw\",@progbits\n" \ | ||
92 | " .byte 0xff + (664f-663f) - (662b-661b)\n" /* rlen <= slen */ \ | 93 | " .byte 0xff + (664f-663f) - (662b-661b)\n" /* rlen <= slen */ \ |
93 | ".previous\n" \ | 94 | ".previous\n" \ |
94 | ".section .altinstr_replacement, \"ax\"\n" \ | 95 | ".section .altinstr_replacement, \"ax\"\n" \ |
diff --git a/arch/x86/include/asm/cpufeature.h b/arch/x86/include/asm/cpufeature.h index 468145914389..e8b88967de35 100644 --- a/arch/x86/include/asm/cpufeature.h +++ b/arch/x86/include/asm/cpufeature.h | |||
@@ -291,7 +291,7 @@ extern const char * const x86_power_flags[32]; | |||
291 | * patch the target code for additional performance. | 291 | * patch the target code for additional performance. |
292 | * | 292 | * |
293 | */ | 293 | */ |
294 | static __always_inline __pure bool __static_cpu_has(u8 bit) | 294 | static __always_inline __pure bool __static_cpu_has(u16 bit) |
295 | { | 295 | { |
296 | #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) | 296 | #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) |
297 | asm goto("1: jmp %l[t_no]\n" | 297 | asm goto("1: jmp %l[t_no]\n" |
@@ -300,11 +300,11 @@ static __always_inline __pure bool __static_cpu_has(u8 bit) | |||
300 | _ASM_ALIGN "\n" | 300 | _ASM_ALIGN "\n" |
301 | _ASM_PTR "1b\n" | 301 | _ASM_PTR "1b\n" |
302 | _ASM_PTR "0\n" /* no replacement */ | 302 | _ASM_PTR "0\n" /* no replacement */ |
303 | " .byte %P0\n" /* feature bit */ | 303 | " .word %P0\n" /* feature bit */ |
304 | " .byte 2b - 1b\n" /* source len */ | 304 | " .byte 2b - 1b\n" /* source len */ |
305 | " .byte 0\n" /* replacement len */ | 305 | " .byte 0\n" /* replacement len */ |
306 | " .byte 0xff + 0 - (2b-1b)\n" /* padding */ | ||
307 | ".previous\n" | 306 | ".previous\n" |
307 | /* skipping size check since replacement size = 0 */ | ||
308 | : : "i" (bit) : : t_no); | 308 | : : "i" (bit) : : t_no); |
309 | return true; | 309 | return true; |
310 | t_no: | 310 | t_no: |
@@ -318,10 +318,12 @@ static __always_inline __pure bool __static_cpu_has(u8 bit) | |||
318 | _ASM_ALIGN "\n" | 318 | _ASM_ALIGN "\n" |
319 | _ASM_PTR "1b\n" | 319 | _ASM_PTR "1b\n" |
320 | _ASM_PTR "3f\n" | 320 | _ASM_PTR "3f\n" |
321 | " .byte %P1\n" /* feature bit */ | 321 | " .word %P1\n" /* feature bit */ |
322 | " .byte 2b - 1b\n" /* source len */ | 322 | " .byte 2b - 1b\n" /* source len */ |
323 | " .byte 4f - 3f\n" /* replacement len */ | 323 | " .byte 4f - 3f\n" /* replacement len */ |
324 | " .byte 0xff + (4f-3f) - (2b-1b)\n" /* padding */ | 324 | ".previous\n" |
325 | ".section .discard,\"aw\",@progbits\n" | ||
326 | " .byte 0xff + (4f-3f) - (2b-1b)\n" /* size check */ | ||
325 | ".previous\n" | 327 | ".previous\n" |
326 | ".section .altinstr_replacement,\"ax\"\n" | 328 | ".section .altinstr_replacement,\"ax\"\n" |
327 | "3: movb $1,%0\n" | 329 | "3: movb $1,%0\n" |
@@ -337,7 +339,7 @@ static __always_inline __pure bool __static_cpu_has(u8 bit) | |||
337 | ( \ | 339 | ( \ |
338 | __builtin_constant_p(boot_cpu_has(bit)) ? \ | 340 | __builtin_constant_p(boot_cpu_has(bit)) ? \ |
339 | boot_cpu_has(bit) : \ | 341 | boot_cpu_has(bit) : \ |
340 | (__builtin_constant_p(bit) && !((bit) & ~0xff)) ? \ | 342 | __builtin_constant_p(bit) ? \ |
341 | __static_cpu_has(bit) : \ | 343 | __static_cpu_has(bit) : \ |
342 | boot_cpu_has(bit) \ | 344 | boot_cpu_has(bit) \ |
343 | ) | 345 | ) |
diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S index cd49141cf153..7862cf510ea9 100644 --- a/arch/x86/kernel/entry_32.S +++ b/arch/x86/kernel/entry_32.S | |||
@@ -914,7 +914,7 @@ ENTRY(simd_coprocessor_error) | |||
914 | .balign 4 | 914 | .balign 4 |
915 | .long 661b | 915 | .long 661b |
916 | .long 663f | 916 | .long 663f |
917 | .byte X86_FEATURE_XMM | 917 | .word X86_FEATURE_XMM |
918 | .byte 662b-661b | 918 | .byte 662b-661b |
919 | .byte 664f-663f | 919 | .byte 664f-663f |
920 | .previous | 920 | .previous |
diff --git a/arch/x86/lib/clear_page_64.S b/arch/x86/lib/clear_page_64.S index ebeafcce04a9..aa4326bfb24a 100644 --- a/arch/x86/lib/clear_page_64.S +++ b/arch/x86/lib/clear_page_64.S | |||
@@ -52,7 +52,7 @@ ENDPROC(clear_page) | |||
52 | .align 8 | 52 | .align 8 |
53 | .quad clear_page | 53 | .quad clear_page |
54 | .quad 1b | 54 | .quad 1b |
55 | .byte X86_FEATURE_REP_GOOD | 55 | .word X86_FEATURE_REP_GOOD |
56 | .byte .Lclear_page_end - clear_page | 56 | .byte .Lclear_page_end - clear_page |
57 | .byte 2b - 1b | 57 | .byte 2b - 1b |
58 | .previous | 58 | .previous |
diff --git a/arch/x86/lib/copy_page_64.S b/arch/x86/lib/copy_page_64.S index 727a5d46d2fc..6fec2d1cebe1 100644 --- a/arch/x86/lib/copy_page_64.S +++ b/arch/x86/lib/copy_page_64.S | |||
@@ -113,7 +113,7 @@ ENDPROC(copy_page) | |||
113 | .align 8 | 113 | .align 8 |
114 | .quad copy_page | 114 | .quad copy_page |
115 | .quad 1b | 115 | .quad 1b |
116 | .byte X86_FEATURE_REP_GOOD | 116 | .word X86_FEATURE_REP_GOOD |
117 | .byte .Lcopy_page_end - copy_page | 117 | .byte .Lcopy_page_end - copy_page |
118 | .byte 2b - 1b | 118 | .byte 2b - 1b |
119 | .previous | 119 | .previous |
diff --git a/arch/x86/lib/memcpy_64.S b/arch/x86/lib/memcpy_64.S index f82e884928af..bcbcd1e0f7d5 100644 --- a/arch/x86/lib/memcpy_64.S +++ b/arch/x86/lib/memcpy_64.S | |||
@@ -131,7 +131,7 @@ ENDPROC(__memcpy) | |||
131 | .align 8 | 131 | .align 8 |
132 | .quad memcpy | 132 | .quad memcpy |
133 | .quad .Lmemcpy_c | 133 | .quad .Lmemcpy_c |
134 | .byte X86_FEATURE_REP_GOOD | 134 | .word X86_FEATURE_REP_GOOD |
135 | 135 | ||
136 | /* | 136 | /* |
137 | * Replace only beginning, memcpy is used to apply alternatives, | 137 | * Replace only beginning, memcpy is used to apply alternatives, |
diff --git a/arch/x86/lib/memset_64.S b/arch/x86/lib/memset_64.S index e88d3b81644a..09d344269652 100644 --- a/arch/x86/lib/memset_64.S +++ b/arch/x86/lib/memset_64.S | |||
@@ -121,7 +121,7 @@ ENDPROC(__memset) | |||
121 | .align 8 | 121 | .align 8 |
122 | .quad memset | 122 | .quad memset |
123 | .quad .Lmemset_c | 123 | .quad .Lmemset_c |
124 | .byte X86_FEATURE_REP_GOOD | 124 | .word X86_FEATURE_REP_GOOD |
125 | .byte .Lfinal - memset | 125 | .byte .Lfinal - memset |
126 | .byte .Lmemset_e - .Lmemset_c | 126 | .byte .Lmemset_e - .Lmemset_c |
127 | .previous | 127 | .previous |