/* Avoid deadlock if more than one vcpu tries this at the same time. */
if ( !spin_trylock(&d->hypercall_deadlock_mutex) )
- return -EAGAIN;
+ return -ERESTART;
/* Pause all other vcpus. */
for_each_vcpu ( d, v )
* All foreign updates to guest state must synchronise on
* the domctl_lock.
*/
- rc = -EAGAIN;
+ rc = -ERESTART;
if ( !domctl_lock_acquire() )
break;
if ( a.nr > ++start_iter && !(start_iter & HVMOP_op_mask) &&
hypercall_preempt_check() )
{
- rc = -EAGAIN;
+ rc = -ERESTART;
break;
}
}
{
put_gfn(d, pfn);
p2m_mem_paging_populate(d, pfn);
- rc = -EINVAL; /* XXX EAGAIN */
+ rc = -EAGAIN;
goto param_fail4;
}
if ( p2m_is_shared(t) )
{
put_gfn(d, pfn);
- rc = -EINVAL; /* XXX EAGAIN */
+ rc = -EAGAIN;
goto param_fail4;
}
if ( !p2m_is_ram(t) &&
if ( a.nr > ++start_iter && !(start_iter & HVMOP_op_mask) &&
hypercall_preempt_check() )
{
- rc = -EAGAIN;
+ rc = -ERESTART;
goto param_fail4;
}
}
}
}
- if ( rc == -EAGAIN )
+ if ( rc == -ERESTART )
{
ASSERT(!(start_iter & HVMOP_op_mask));
rc = hypercall_create_continuation(__HYPERVISOR_hvm_op, "lh",
&& hypercall_preempt_check() )
{
page->nr_validated_ptes = i;
- rc = -EAGAIN;
+ rc = -ERESTART;
break;
}
(rc = get_page_from_l3e(pl3e[i], pfn, d, partial)) > 0 )
continue;
- if ( rc == -EAGAIN )
+ if ( rc == -ERESTART )
{
page->nr_validated_ptes = i;
page->partial_pte = partial ?: 1;
{
page->nr_validated_ptes = i;
page->partial_pte = 0;
- rc = -EAGAIN;
+ rc = -ERESTART;
}
if ( rc < 0 )
break;
if ( rc >= 0 && !create_pae_xen_mappings(d, pl3e) )
rc = -EINVAL;
- if ( rc < 0 && rc != -EAGAIN && rc != -EINTR )
+ if ( rc < 0 && rc != -ERESTART && rc != -EINTR )
{
MEM_LOG("Failure in alloc_l3_table: entry %d", i);
if ( i )
(rc = get_page_from_l4e(pl4e[i], pfn, d, partial)) > 0 )
continue;
- if ( rc == -EAGAIN )
+ if ( rc == -ERESTART )
{
page->nr_validated_ptes = i;
page->partial_pte = partial ?: 1;
page->nr_validated_ptes = i;
page->partial_pte = 0;
if ( rc == -EINTR )
- rc = -EAGAIN;
+ rc = -ERESTART;
else
{
if ( current->arch.old_guest_table )
preemptible && i && hypercall_preempt_check() )
{
page->nr_validated_ptes = i;
- err = -EAGAIN;
+ err = -ERESTART;
}
} while ( !err && i-- );
unmap_domain_page(pl3e);
- if ( rc == -EAGAIN )
+ if ( rc == -ERESTART )
{
page->nr_validated_ptes = i;
page->partial_pte = partial ?: -1;
{
page->nr_validated_ptes = i + 1;
page->partial_pte = 0;
- rc = -EAGAIN;
+ rc = -ERESTART;
}
return rc > 0 ? 0 : rc;
}
partial = 0;
} while ( i-- );
- if ( rc == -EAGAIN )
+ if ( rc == -ERESTART )
{
page->nr_validated_ptes = i;
page->partial_pte = partial ?: -1;
{
page->nr_validated_ptes = i + 1;
page->partial_pte = 0;
- rc = -EAGAIN;
+ rc = -ERESTART;
}
unmap_domain_page(pl4e);
{
ASSERT((page->u.inuse.type_info &
(PGT_count_mask | PGT_validated)) == 1);
- case -EAGAIN:
+ case -ERESTART:
get_page_light(page);
page->u.inuse.type_info |= PGT_partial;
}
}
else
{
- BUG_ON(rc != -EAGAIN);
+ BUG_ON(rc != -ERESTART);
wmb();
get_page_light(page);
page->u.inuse.type_info |= PGT_partial;
int rc = __get_page_type(page, type, 0);
if ( likely(rc == 0) )
return 1;
- ASSERT(rc != -EINTR && rc != -EAGAIN);
+ ASSERT(rc != -EINTR && rc != -ERESTART);
return 0;
}
switch ( rc = put_page_and_type_preemptible(v->arch.old_guest_table) )
{
case -EINTR:
- case -EAGAIN:
- return -EAGAIN;
+ case -ERESTART:
+ return -ERESTART;
}
v->arch.old_guest_table = NULL;
case 0:
break;
case -EINTR:
- case -EAGAIN:
- return -EAGAIN;
+ case -ERESTART:
+ return -ERESTART;
default:
MEM_LOG("Error while installing new compat baseptr %lx", mfn);
return rc;
case 0:
break;
case -EINTR:
- case -EAGAIN:
- return -EAGAIN;
+ case -ERESTART:
+ return -ERESTART;
default:
MEM_LOG("Error while installing new baseptr %lx", mfn);
return rc;
switch ( rc = put_page_and_type_preemptible(page) )
{
case -EINTR:
- rc = -EAGAIN;
- case -EAGAIN:
+ rc = -ERESTART;
+ case -ERESTART:
curr->arch.old_guest_table = page;
break;
default:
if ( unlikely(rc) )
{
- if ( likely(rc == -EAGAIN) )
+ if ( likely(rc == -ERESTART) )
rc = hypercall_create_continuation(
__HYPERVISOR_mmuext_op, "hihi", uops, count, pdone,
foreigndom);
{
if ( curr->arch.old_guest_table || (i && hypercall_preempt_check()) )
{
- rc = -EAGAIN;
+ rc = -ERESTART;
break;
}
if ( unlikely(!okay) )
{
if ( rc == -EINTR )
- rc = -EAGAIN;
- else if ( rc != -EAGAIN )
+ rc = -ERESTART;
+ else if ( rc != -ERESTART )
MEM_LOG("Error while pinning mfn %lx", page_to_mfn(page));
if ( page != curr->arch.old_guest_table )
put_page(page);
switch ( rc = put_page_and_type_preemptible(page) )
{
case -EINTR:
- case -EAGAIN:
+ case -ERESTART:
curr->arch.old_guest_table = page;
rc = 0;
break;
if ( unlikely(!okay) )
{
if ( rc == -EINTR )
- rc = -EAGAIN;
- else if ( rc != -EAGAIN )
+ rc = -ERESTART;
+ else if ( rc != -ERESTART )
MEM_LOG("Error while installing new mfn %lx",
op.arg1.mfn);
break;
switch ( rc = put_page_and_type_preemptible(page) )
{
case -EINTR:
- rc = -EAGAIN;
- case -EAGAIN:
+ rc = -ERESTART;
+ case -ERESTART:
curr->arch.old_guest_table = page;
okay = 0;
break;
guest_handle_add_offset(uops, 1);
}
- if ( rc == -EAGAIN )
+ if ( rc == -ERESTART )
{
ASSERT(i < count);
rc = hypercall_create_continuation(
if ( unlikely(rc) )
{
- if ( likely(rc == -EAGAIN) )
+ if ( likely(rc == -ERESTART) )
rc = hypercall_create_continuation(
__HYPERVISOR_mmu_update, "hihi", ureqs, count, pdone,
foreigndom);
{
if ( curr->arch.old_guest_table || (i && hypercall_preempt_check()) )
{
- rc = -EAGAIN;
+ rc = -ERESTART;
break;
}
}
page_unlock(page);
if ( rc == -EINTR )
- rc = -EAGAIN;
+ rc = -ERESTART;
}
else if ( get_page_type(page, PGT_writable_page) )
{
guest_handle_add_offset(ureqs, 1);
}
- if ( rc == -EAGAIN )
+ if ( rc == -ERESTART )
{
ASSERT(i < count);
rc = hypercall_create_continuation(
rc = p2m_pod_set_mem_target(d, target.target_pages);
}
- if ( rc == -EAGAIN )
+ if ( rc == -ERESTART )
{
rc = hypercall_create_continuation(
__HYPERVISOR_memory_op, "lh", op, arg);