7
7
#include <linux/nmi.h>
8
8
#include <asm/io.h>
9
9
#include <asm/hyperv.h>
10
+ #include <asm/nospec-branch.h>
10
11
11
12
/*
12
13
* The below CPUID leaves are present if VersionAndFeatures.HypervisorPresent
@@ -186,10 +187,11 @@ static inline u64 hv_do_hypercall(u64 control, void *input, void *output)
186
187
return U64_MAX ;
187
188
188
189
__asm__ __volatile__("mov %4, %%r8\n"
189
- "call *%5"
190
+ CALL_NOSPEC
190
191
: "=a" (hv_status ), ASM_CALL_CONSTRAINT ,
191
192
"+c" (control ), "+d" (input_address )
192
- : "r" (output_address ), "m" (hv_hypercall_pg )
193
+ : "r" (output_address ),
194
+ THUNK_TARGET (hv_hypercall_pg )
193
195
: "cc" , "memory" , "r8" , "r9" , "r10" , "r11" );
194
196
#else
195
197
u32 input_address_hi = upper_32_bits (input_address );
@@ -200,13 +202,13 @@ static inline u64 hv_do_hypercall(u64 control, void *input, void *output)
200
202
if (!hv_hypercall_pg )
201
203
return U64_MAX ;
202
204
203
- __asm__ __volatile__("call *%7"
205
+ __asm__ __volatile__(CALL_NOSPEC
204
206
: "=A" (hv_status ),
205
207
"+c" (input_address_lo ), ASM_CALL_CONSTRAINT
206
208
: "A" (control ),
207
209
"b" (input_address_hi ),
208
210
"D" (output_address_hi ), "S" (output_address_lo ),
209
- "m" (hv_hypercall_pg )
211
+ THUNK_TARGET (hv_hypercall_pg )
210
212
: "cc" , "memory" );
211
213
#endif /* !x86_64 */
212
214
return hv_status ;
@@ -227,24 +229,24 @@ static inline u64 hv_do_fast_hypercall8(u16 code, u64 input1)
227
229
228
230
#ifdef CONFIG_X86_64
229
231
{
230
- __asm__ __volatile__("call *%4"
232
+ __asm__ __volatile__(CALL_NOSPEC
231
233
: "=a" (hv_status ), ASM_CALL_CONSTRAINT ,
232
234
"+c" (control ), "+d" (input1 )
233
- : "m" (hv_hypercall_pg )
235
+ : THUNK_TARGET (hv_hypercall_pg )
234
236
: "cc" , "r8" , "r9" , "r10" , "r11" );
235
237
}
236
238
#else
237
239
{
238
240
u32 input1_hi = upper_32_bits (input1 );
239
241
u32 input1_lo = lower_32_bits (input1 );
240
242
241
- __asm__ __volatile__ ("call *%5"
243
+ __asm__ __volatile__ (CALL_NOSPEC
242
244
: "=A" (hv_status ),
243
245
"+c" (input1_lo ),
244
246
ASM_CALL_CONSTRAINT
245
247
: "A" (control ),
246
248
"b" (input1_hi ),
247
- "m" (hv_hypercall_pg )
249
+ THUNK_TARGET (hv_hypercall_pg )
248
250
: "cc" , "edi" , "esi" );
249
251
}
250
252
#endif
0 commit comments