__arg; \
})
-void hypercall_cancel_continuation(void)
-{
- current->hcall_preempted = false;
-}
-
unsigned long hypercall_create_continuation(
unsigned int op, const char *format, ...)
{
__arg; \
})
-void hypercall_cancel_continuation(void)
-{
- current->hcall_preempted = false;
-}
-
unsigned long hypercall_create_continuation(
unsigned int op, const char *format, ...)
{
if ( __copy_to_guest(arg, &cmp, 1) )
{
if ( rc == __HYPERVISOR_memory_op )
- hypercall_cancel_continuation();
+ hypercall_cancel_continuation(current);
rc = -EFAULT;
}
do_multicall(
XEN_GUEST_HANDLE_PARAM(multicall_entry_t) call_list, uint32_t nr_calls)
{
- struct mc_state *mcs = ¤t->mc_state;
+ struct vcpu *curr = current;
+ struct mc_state *mcs = &curr->mc_state;
uint32_t i;
int rc = 0;
enum mc_disposition disp = mc_continue;
else if ( unlikely(__copy_field_to_guest(call_list, &mcs->call,
result)) )
rc = -EFAULT;
- else if ( current->hcall_preempted )
+ else if ( curr->hcall_preempted )
{
/* Translate sub-call continuation to guest layout */
xlat_multicall_entry(mcs);
if ( likely(!__copy_to_guest(call_list, &mcs->call, 1)) )
goto preempted;
else
- hypercall_cancel_continuation();
+ hypercall_cancel_continuation(curr);
rc = -EFAULT;
}
else
*/
unsigned long hypercall_create_continuation(
unsigned int op, const char *format, ...);
-void hypercall_cancel_continuation(void);
+
+static inline void hypercall_cancel_continuation(struct vcpu *v)
+{
+ v->hcall_preempted = false;
+}
/*
* For long-running operations that must be in hypercall context, check