@@ -225,15 +225,8 @@ static void guest_code(void)
225
225
226
226
/* Our turn. Deliver event channel (to ourselves) with
227
227
* EVTCHNOP_send hypercall. */
228
- unsigned long rax ;
229
228
struct evtchn_send s = { .port = 127 };
230
- __asm__ __volatile__ ("vmcall" :
231
- "=a" (rax ) :
232
- "a" (__HYPERVISOR_event_channel_op ),
233
- "D" (EVTCHNOP_send ),
234
- "S" (& s ));
235
-
236
- GUEST_ASSERT (rax == 0 );
229
+ xen_hypercall (__HYPERVISOR_event_channel_op , EVTCHNOP_send , & s );
237
230
238
231
guest_wait_for_irq ();
239
232
@@ -242,24 +235,15 @@ static void guest_code(void)
242
235
/* Deliver "outbound" event channel to an eventfd which
243
236
* happens to be one of our own irqfds. */
244
237
s .port = 197 ;
245
- __asm__ __volatile__ ("vmcall" :
246
- "=a" (rax ) :
247
- "a" (__HYPERVISOR_event_channel_op ),
248
- "D" (EVTCHNOP_send ),
249
- "S" (& s ));
250
-
251
- GUEST_ASSERT (rax == 0 );
238
+ xen_hypercall (__HYPERVISOR_event_channel_op , EVTCHNOP_send , & s );
252
239
253
240
guest_wait_for_irq ();
254
241
255
242
GUEST_SYNC (13 );
256
243
257
244
/* Set a timer 100ms in the future. */
258
- __asm__ __volatile__ ("vmcall" :
259
- "=a" (rax ) :
260
- "a" (__HYPERVISOR_set_timer_op ),
261
- "D" (rs -> state_entry_time + 100000000 ));
262
- GUEST_ASSERT (rax == 0 );
245
+ xen_hypercall (__HYPERVISOR_set_timer_op ,
246
+ rs -> state_entry_time + 100000000 , NULL );
263
247
264
248
GUEST_SYNC (14 );
265
249
@@ -281,51 +265,27 @@ static void guest_code(void)
281
265
.timeout = 0 ,
282
266
};
283
267
284
- __asm__ __volatile__ ("vmcall" :
285
- "=a" (rax ) :
286
- "a" (__HYPERVISOR_sched_op ),
287
- "D" (SCHEDOP_poll ),
288
- "S" (& p ));
289
-
290
- GUEST_ASSERT (rax == 0 );
268
+ xen_hypercall (__HYPERVISOR_sched_op , SCHEDOP_poll , & p );
291
269
292
270
GUEST_SYNC (17 );
293
271
294
272
/* Poll for an unset port and wait for the timeout. */
295
273
p .timeout = 100000000 ;
296
- __asm__ __volatile__ ("vmcall" :
297
- "=a" (rax ) :
298
- "a" (__HYPERVISOR_sched_op ),
299
- "D" (SCHEDOP_poll ),
300
- "S" (& p ));
301
-
302
- GUEST_ASSERT (rax == 0 );
274
+ xen_hypercall (__HYPERVISOR_sched_op , SCHEDOP_poll , & p );
303
275
304
276
GUEST_SYNC (18 );
305
277
306
278
/* A timer will wake the masked port we're waiting on, while we poll */
307
279
p .timeout = 0 ;
308
- __asm__ __volatile__ ("vmcall" :
309
- "=a" (rax ) :
310
- "a" (__HYPERVISOR_sched_op ),
311
- "D" (SCHEDOP_poll ),
312
- "S" (& p ));
313
-
314
- GUEST_ASSERT (rax == 0 );
280
+ xen_hypercall (__HYPERVISOR_sched_op , SCHEDOP_poll , & p );
315
281
316
282
GUEST_SYNC (19 );
317
283
318
284
/* A timer wake an *unmasked* port which should wake us with an
319
285
* actual interrupt, while we're polling on a different port. */
320
286
ports [0 ]++ ;
321
287
p .timeout = 0 ;
322
- __asm__ __volatile__ ("vmcall" :
323
- "=a" (rax ) :
324
- "a" (__HYPERVISOR_sched_op ),
325
- "D" (SCHEDOP_poll ),
326
- "S" (& p ));
327
-
328
- GUEST_ASSERT (rax == 0 );
288
+ xen_hypercall (__HYPERVISOR_sched_op , SCHEDOP_poll , & p );
329
289
330
290
guest_wait_for_irq ();
331
291
@@ -360,12 +320,7 @@ static void guest_code(void)
360
320
* timer IRQ is dropped due to an invalid event channel.
361
321
*/
362
322
for (i = 0 ; i < 100 && !guest_saw_irq ; i ++ )
363
- asm volatile ("vmcall"
364
- : "=a" (rax )
365
- : "a" (__HYPERVISOR_sched_op ),
366
- "D" (SCHEDOP_poll ),
367
- "S" (& p )
368
- : "memory" );
323
+ __xen_hypercall (__HYPERVISOR_sched_op , SCHEDOP_poll , & p );
369
324
370
325
/*
371
326
* Re-send the timer IRQ if it was (likely) dropped due to the timer
0 commit comments