From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Jan Beulich <JBeulich@suse.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
xen-devel@lists.xenproject.org
Subject: Re: -EINTR return in domain_relinquish_resources
Date: Fri, 23 Jan 2015 12:21:35 -0500 [thread overview]
Message-ID: <20150123172135.GA4888@l.oracle.com> (raw)
In-Reply-To: <54C27EFB0200007800058F83@mail.emea.novell.com>
On Fri, Jan 23, 2015 at 04:03:55PM +0000, Jan Beulich wrote:
> >>> On 23.01.15 at 16:46, <konrad.wilk@oracle.com> wrote:
> > Subject: [PATCH] domain: In vcpu_destroy_pagetables we can return -ERESTART
> > instead of -EINTR
> >
> > which has the side effect that domain_relinquish_resources will stop
> > and return to user-space -EINTR - which it is not equipped to deal with.
>
> The title read wrong, especially on its own, as it appears to
> state the inverse thing of what you do in the patch. Perhaps
>
> x86: vcpu_destroy_pagetables() must not return -EINTR
>
> with the initial part of the description adjusted accordingly?
>
> > + /*
> > + * The put_page_and_type_preemptible is liable to return -EINTR. Other
> > + * callers of it filter the -EINTR to whatever they deem applicable - in
> > + * this case we MUST do it as the caller of this function will return the
> > + * error code to userspace. And userspace for domain destruction expects
> > + * -EAGAIN (domain_relinquish_resources converts ERESTART to -EAGAIN).
> > + */
>
> This is still misleading, as it kind of implies that the function has only
> that one caller. Don't talk about domain_relinquish_resources() and
> EAGAIN at all.
Right. I somehow managed to miss the other caller of vcpu_destroy_pagetables.
Please see following patch:
>From 3ace309c61805bae546378e37553913231e43cec Mon Sep 17 00:00:00 2001
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Date: Thu, 22 Jan 2015 11:34:21 -0500
Subject: [PATCH] domain: 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>
---
v2: Add comment and s/ERESTART/EAGAIN/
v3: Also include the hypercall.
---
xen/arch/x86/mm.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c
index 6e9c2c0..badbeab 100644
--- a/xen/arch/x86/mm.c
+++ b/xen/arch/x86/mm.c
@@ -2677,6 +2677,13 @@ int vcpu_destroy_pagetables(struct vcpu *v)
v->arch.cr3 = 0;
+ /*
+ * The put_page_and_type_preemptible is liable to return -EINTR. The
+ * callers of us expect -ERESTART so convert it over.
+ */
+ if ( rc == -EINTR )
+ rc = -ERESTART;
+
return rc;
}
--
2.1.0
>
> Jan
>
next prev parent reply other threads:[~2015-01-23 17:21 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-21 21:27 -EINTR return in domain_relinquish_resources Konrad Rzeszutek Wilk
2015-01-21 21:39 ` Andrew Cooper
2015-01-21 22:57 ` Andrew Cooper
2015-01-22 16:37 ` Konrad Rzeszutek Wilk
2015-01-22 10:00 ` Jan Beulich
2015-01-22 16:38 ` Konrad Rzeszutek Wilk
2015-01-23 9:11 ` Jan Beulich
2015-01-23 14:32 ` Konrad Rzeszutek Wilk
2015-01-23 14:46 ` Andrew Cooper
2015-01-23 15:34 ` Jan Beulich
2015-01-23 15:46 ` Konrad Rzeszutek Wilk
2015-01-23 16:03 ` Jan Beulich
2015-01-23 17:21 ` Konrad Rzeszutek Wilk [this message]
2015-01-26 9:36 ` Jan Beulich
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150123172135.GA4888@l.oracle.com \
--to=konrad.wilk@oracle.com \
--cc=JBeulich@suse.com \
--cc=andrew.cooper3@citrix.com \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.