From: Boris Ostrovsky <boris.ostrovsky@oracle.com>
To: Jan Beulich <JBeulich@suse.com>
Cc: elena.ufimtseva@oracle.com, tim@xen.org, wei.liu2@citrix.com,
ian.campbell@citrix.com, stefano.stabellini@eu.citrix.com,
andrew.cooper3@citrix.com, ian.jackson@eu.citrix.com,
xen-devel@lists.xen.org, roger.pau@citrix.com
Subject: Re: [PATCH v2 1/4] x86/compat: Test whether guest has 32b shinfo instead of being a PV 32b domain
Date: Wed, 08 Jul 2015 09:59:52 -0400 [thread overview]
Message-ID: <559D2CD8.7050807@oracle.com> (raw)
In-Reply-To: <559CE3DD020000780008DEAA@mail.emea.novell.com>
On 07/08/2015 02:48 AM, Jan Beulich wrote:
>>>> On 07.07.15 at 19:13, <boris.ostrovsky@oracle.com> wrote:
>> On 07/07/2015 12:15 PM, Jan Beulich wrote:
>>>>>> On 07.07.15 at 17:46, <boris.ostrovsky@oracle.com> wrote:
>>>> On 07/07/2015 05:11 AM, Jan Beulich wrote:
>>>>>>>> On 29.06.15 at 22:21, <boris.ostrovsky@oracle.com> wrote:
>>>>>> @@ -737,7 +737,7 @@ int arch_set_info_guest(
>>>>>>
>>>>>> /* The context is a compat-mode one if the target domain is compat-mode;
>>>>>> * we expect the tools to DTRT even in compat-mode callers. */
>>>>>> - compat = is_pv_32on64_domain(d);
>>>>>> + compat = has_32bit_shinfo(d);
>>>>> Furthermore, looking at uses like this, tying such decisions to the
>>>>> shared info layout looks kind of odd. I think for documentation
>>>>> purposes we may need a differently named alias.
>>>> Yes, it does look odd, which is why I was asking in another thread about
>>>> having another field in domain structure (well, I was asking about
>>>> replacing has_32bit_shinfo but I think I can see now that wouldn't be
>>>> right).
>>>>
>>>> Are you suggesting a new macro, e.g.
>>>> #define is_32b_mode(d) ((d)->arch.has_32bit_shinfo)
>>>>
>>>> or would it better to add new field? Or get_mode() hvm op, similar to
>>>> set_mode(), which can look, say, at EFER?
>>> If looking at EFER (plus perhaps CS) is right in all the cases you
>>> care about, then yes. And remember we already have
>>> hvm_guest_x86_mode().
>> Can't use hvm_guest_x86_mode(), it asserts on 'v != current'. But adding
>> new op just because of that seems to be an overkill since it would
>> essentially do what .guest_x86_mode() does. How about
>> hvm_guest_x86_mode_unsafe() (with a better name) and wrap
>> hvm_guest_x86_mode() with the ASSERT around it?
> svm_guest_x86_mode() doesn't depend on v == current, but
> vmx_guest_x86_mode() would first need to be made safe (or
> get an "unsafe" sibling implementation). With that, the ASSERT()
> could then check for current or non-running vCPU.
By checking for non-running you mean v->is_running? I am not sure it's
safe to do since is_running is set in context switch before VMCS is
loaded later, in vmx_do_resume().
OTOH, current itself is set before VMCS is loaded so I am not sure
whether the ASSERT in hvm_guest_x86_mode() is completely effective in
catching "bad" invocations anyway.
I think we need vmx_vmcs_enter/exit in vmx_guest_x86_mode() regardless
of what current is. And drop the ASSERT.
>
>>>>>> --- a/xen/common/domctl.c
>>>>>> +++ b/xen/common/domctl.c
>>>>>> @@ -496,7 +496,7 @@ long do_domctl(XEN_GUEST_HANDLE_PARAM(xen_domctl_t)
>> u_domctl)
>>>>>> break;
>>>>>>
>>>>>> #ifdef CONFIG_COMPAT
>>>>>> - if ( !is_pv_32on64_domain(d) )
>>>>>> + if ( !has_32bit_shinfo(d) )
>>>>>> ret = copy_from_guest(c.nat, op->u.vcpucontext.ctxt, 1);
>>>>>> else
>>>>>> ret = copy_from_guest(c.cmp,
>>>>>> @@ -902,7 +902,7 @@ long do_domctl(XEN_GUEST_HANDLE_PARAM(xen_domctl_t)
>> u_domctl)
>>>>>> vcpu_unpause(v);
>>>>>>
>>>>>> #ifdef CONFIG_COMPAT
>>>>>> - if ( !is_pv_32on64_domain(d) )
>>>>>> + if ( !has_32bit_shinfo(d) )
>>>>>> ret = copy_to_guest(op->u.vcpucontext.ctxt, c.nat, 1);
>>>>>> else
>>>>>> ret = copy_to_guest(guest_handle_cast(op->u.vcpucontext.ctxt,
>>>>> Where is it written down what format 32-bit PVH guests' vCPU
>>>>> contexts get passed in? It would seem to me that it would be
>>>>> rather more natural for them to use the 64-bit layout. Or else
>>>>> how do you intend to suppress them being able to enter 64-bit
>>>>> mode?
>>>> So why do we use the 'else' clause for 32b PV guests when they also use
>>>> the same vcpu_guest_context_x86_32_t in libxc/xc_dom_x86.c:vcpu_x86_32()?
>>> 32bit PV guests use the if() branch afaict (as they use the 32-bit
>>> shared info layout).
>> No, they use the 'else' part, I just confirmed it. 'd' in
>> is_pv_32on64_domain() is domain for which domctl is being called, not
>> domain that is making the call (which is what I suspect the original
>> intent was).
> Oh, yes, of course they do - how did I overlook the "!" ? Yet
> that doesn't help me understand the question: Isn't it obvious
> that if libxc expects vcpu_guest_context_x86_32_t, then the
> hypervisor also needs to supply that one (and not the 64-bit
> counterpart)? Or are you asking why the format matches the
> subject domain's word width, not the calling domain's?
Yes, this was the question.
> This has
> historical reasons: A 32-bit domain saved on a 64-bit hypervisor
> needed to be restorable by a 32-bit hypervisor when that still
> existed. This could likely be changed nowadays; ARM and the
> HVM case must be dealt with in the tools somehow anyway.
OK, then I don't need those two changes in do_domctl().
-boris
next prev parent reply other threads:[~2015-07-08 13:59 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-29 20:21 [PATCH v2 0/4] 32-bit domU PVH support Boris Ostrovsky
2015-06-29 20:21 ` [PATCH v2 1/4] x86/compat: Test whether guest has 32b shinfo instead of being a PV 32b domain Boris Ostrovsky
2015-07-07 9:11 ` Jan Beulich
2015-07-07 15:46 ` Boris Ostrovsky
2015-07-07 16:15 ` Jan Beulich
2015-07-07 17:13 ` Boris Ostrovsky
2015-07-08 6:48 ` Jan Beulich
2015-07-08 13:59 ` Boris Ostrovsky [this message]
2015-07-08 14:08 ` Jan Beulich
2015-07-08 14:40 ` Boris Ostrovsky
2015-07-08 14:50 ` Jan Beulich
2015-07-08 20:57 ` Boris Ostrovsky
2015-07-09 7:02 ` Jan Beulich
2015-07-09 14:10 ` Boris Ostrovsky
2015-07-09 14:17 ` Jan Beulich
2015-07-09 14:30 ` Boris Ostrovsky
2015-07-09 16:05 ` Boris Ostrovsky
2015-07-09 16:15 ` Jan Beulich
2015-06-29 20:21 ` [PATCH v2 2/4] x86/pvh: Set 32b PVH guest mode in XEN_DOMCTL_set_address_size Boris Ostrovsky
2015-07-07 9:15 ` Jan Beulich
2015-07-07 15:53 ` Boris Ostrovsky
2015-07-07 16:16 ` Jan Beulich
2015-06-29 20:21 ` [PATCH v2 3/4] x86/pvh: Handle hypercalls for 32b PVH guests Boris Ostrovsky
2015-07-07 9:20 ` Jan Beulich
2015-07-07 15:54 ` Boris Ostrovsky
2015-06-29 20:21 ` [PATCH v2 4/4] libxc/x86/pvh: Allow creation of " Boris Ostrovsky
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=559D2CD8.7050807@oracle.com \
--to=boris.ostrovsky@oracle.com \
--cc=JBeulich@suse.com \
--cc=andrew.cooper3@citrix.com \
--cc=elena.ufimtseva@oracle.com \
--cc=ian.campbell@citrix.com \
--cc=ian.jackson@eu.citrix.com \
--cc=roger.pau@citrix.com \
--cc=stefano.stabellini@eu.citrix.com \
--cc=tim@xen.org \
--cc=wei.liu2@citrix.com \
--cc=xen-devel@lists.xen.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.