]> xenbits.xensource.com Git - xen.git/commit
x86: vcpu_destroy_pagetables() must not return -EINTR
authorKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Tue, 3 Feb 2015 14:28:58 +0000 (15:28 +0100)
committerJan Beulich <jbeulich@suse.com>
Tue, 3 Feb 2015 14:28:58 +0000 (15:28 +0100)
commit22d7558fbd22d68221234f0d03c2a042e554ed28
treed25d61928b11de7ea42d8ef3de13d2b637d3f074
parent1c81b665b5bb7b57abeeea0e004fdc2c80c97608
x86: vcpu_destroy_pagetables() must not return -EINTR

.. otherwise it has the side effect that: domain_relinquish_resources
will stop and will return to user-space with -EINTR which it is not
equipped to deal with that error code; or vcpu_reset - which will
ignore it and convert the error to -ENOMEM..

The preemption mechanism we have for domain destruction is to return
-EAGAIN (and then user-space calls the hypercall again) and as such we need
to catch the case of:

domain_relinquish_resources
  ->vcpu_destroy_pagetables
    -> put_page_and_type_preemptible
       -> __put_page_type
           returns -EINTR

and convert it to the proper type. For:

XEN_DOMCTL_setvcpucontext
 -> vcpu_reset
   -> vcpu_destroy_pagetables

we need to return -ERESTART otherwise we end up returning -ENOMEM.

There are also other callers of vcpu_destroy_pagetables: arch_vcpu_reset
(vcpu_reset) are:
 - hvm_s3_suspend (asserts on any return code),
 - vlapic_init_sipi_one (asserts on any return code),

Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: Jan Beulich <jbeulich@suse.com>
master commit: de4f284b3d7b47d3b9807f354552ecf3e0fff56b
master date: 2015-01-26 12:51:09 +0100
xen/arch/x86/mm.c