From: "Roger Pau Monné" <roger.pau@citrix.com>
To: Jan Beulich <JBeulich@suse.com>
Cc: Ian Campbell <ian.campbell@citrix.com>,
George Dunlap <George.Dunlap@eu.citrix.com>,
Andrew Cooper <andrew.cooper3@citrix.com>,
Tim Deegan <tim@xen.org>,
Stefano Stabellini <stefano.stabellini@citrix.com>,
xen-devel@lists.xenproject.org
Subject: Re: [PATCH v6 24/29] xen/x86: allow HVM guests to use hypercalls to bring up vCPUs
Date: Tue, 29 Sep 2015 18:49:45 +0200 [thread overview]
Message-ID: <560AC129.1040309@citrix.com> (raw)
In-Reply-To: <560AD65F02000078000A6CF6@prv-mh.provo.novell.com>
El 29/09/15 a les 18.20, Jan Beulich ha escrit:
>>>> On 29.09.15 at 18:01, <roger.pau@citrix.com> wrote:
>> El 29/09/15 a les 17.29, Jan Beulich ha escrit:
>>>>>> On 29.09.15 at 16:01, <roger.pau@citrix.com> wrote:
>>>> Ok thanks, so we seem to have a consensus. Before posting a new
>>>> revision, does the following vcpu_hvm_context look fine to both of you:
>>>>
>>>> struct vcpu_hvm_x86_32 {
>>>> uint32_t eax;
>>>> uint32_t ecx;
>>>> uint32_t edx;
>>>> uint32_t ebx;
>>>> uint32_t esp;
>>>> uint32_t ebp;
>>>> uint32_t esi;
>>>> uint32_t edi;
>>>> uint32_t eip;
>>>> uint32_t eflags;
>>>>
>>>> uint32_t cr0;
>>>> uint32_t cr3;
>>>> uint32_t cr4;
>>>>
>>>> /*
>>>> * EFER should only be used to set the NXE bit (if required)
>>>> * when starting a vCPU in 32bit mode with paging enabled.
>>>> */
>>>> uint64_t efer;
>>>>
>>>> uint32_t cs_base;
>>>> uint32_t ds_base;
>>>> uint32_t ss_base;
>>>> uint32_t es_base;
>>>> uint32_t tr_base;
>>>> uint32_t cs_limit;
>>>> uint32_t ds_limit;
>>>> uint32_t ss_limit;
>>>> uint32_t es_limit;
>>>> uint32_t tr_limit;
>>>> uint16_t cs_ar;
>>>> uint16_t ds_ar;
>>>> uint16_t ss_ar;
>>>> uint16_t es_ar;
>>>> uint16_t tr_ar;
>>>> };
>>>>
>>>> struct vcpu_hvm_x86_64 {
>>>> uint64_t rax;
>>>> uint64_t rcx;
>>>> uint64_t rdx;
>>>> uint64_t rbx;
>>>> uint64_t rsp;
>>>> uint64_t rbp;
>>>> uint64_t rsi;
>>>> uint64_t rdi;
>>>> uint64_t rip;
>>>> uint64_t rflags;
>>>>
>>>> uint64_t cr0;
>>>> uint64_t cr3;
>>>> uint64_t cr4;
>>>> uint64_t efer;
>>>>
>>>> /*
>>>> * Setting the CS attributes field is allowed in order to
>>>> * start in compatibility mode.
>>>> */
>>>
>>> Hmm, as said before it would seem to me that this would better
>>> (or also) be allowed to work by specifying a suitable 32-bit register
>>> state. Remember that in compatibility mode base and limit matter
>>> again, and I think you also can't start with a nul SS.
>>
>> Yes, I should add back all the registers here, so it looks like:
>>
>> uint32_t cs_base;
>> uint32_t ds_base;
>> uint32_t ss_base;
>> uint32_t es_base;
>> uint32_t cs_limit;
>> uint32_t ds_limit;
>> uint32_t ss_limit;
>> uint32_t es_limit;
>> uint16_t cs_ar;
>> uint16_t ds_ar;
>> uint16_t ss_ar;
>> uint16_t es_ar;
>
> Or specify that compat mode entry is via using 32-bit register state.
Yes, that should also work. If that's the preference then I guess we
can remove all the selectors stuff from the 64bit structure.
>>>> uint16_t cs_ar;
>>>> };
>>>
>>> No tr_* here?
>>
>> Is it necessary? for long or compatibility mode tr is always going to be:
>>
>> tr_base = 0;
>> tr_limit = 0x67;
>> tr_ar = 0x8b;
>>
>> The attributes field is always going to be 0x8b for compat or long mode,
>> the base and the limit might be different, but the guest should change
>> that by itself.
>
> Please explain why you have it in the 32-bit register state, but not
> in the 64-bit one.
Because the 32bit register state can be used to start a CPU in real
mode, and the TS type in real mode is different from the ones in
protected mode and long mode.
> I said before that we should aim at being as
> consistent as possible. (And btw I do not think that tr_base being
> zero makes any sense.)
We don't actually have a TSS anywhere, does it really matter if base is
set to 0?
In fact allowing the user to set tr_base and tr_limit is kind of
pointless, it's impossible to load a TSS from this interface. So AFAICT
what really matters is tr_ar only.
>>> Also, what are the selector values going to be? Do you intend to
>>> pass zero there?
>>
>> Do you mean the visible part of the selectors? With the current
>> implementation the value of the "sel" field in the segment_register
>> struct is left uninitialized, so it's undefined. I could set them to 0,
>> but what's the point in doing it?
>
> We should never leave things uninitialized; leaving things
> unspecified may be okay, but I don't see why we shouldn't
> spell out what we intend to do, unless we foresee it to change
> later on.
Ack, I don't see a problem in setting them to 0, but anyway there's no
GDT loaded, so the selector value itself is pointless (the cached part
is what really matters).
Roger.
next prev parent reply other threads:[~2015-09-29 16:49 UTC|newest]
Thread overview: 99+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-04 12:08 [PATCH v6 00/29] Introduce HVM without dm and new boot ABI Roger Pau Monne
2015-09-04 12:08 ` [PATCH v6 01/29] libxc: split x86 HVM setup_guest into smaller logical functions Roger Pau Monne
2015-09-04 12:08 ` [PATCH v6 02/29] libxc: unify xc_dom_p2m_{host/guest} Roger Pau Monne
2015-09-04 12:08 ` [PATCH v6 03/29] libxc: introduce the notion of a container type Roger Pau Monne
2015-09-04 12:08 ` [PATCH v6 04/29] libxc: introduce a domain loader for HVM guest firmware Roger Pau Monne
2015-09-04 12:08 ` [PATCH v6 05/29] libxc: make arch_setup_meminit a xc_dom_arch hook Roger Pau Monne
2015-09-04 12:08 ` [PATCH v6 06/29] libxc: make arch_setup_boot{init/late} xc_dom_arch hooks Roger Pau Monne
2015-09-04 12:08 ` [PATCH v6 07/29] libxc: rework BSP initialization Roger Pau Monne
2015-09-04 12:08 ` [PATCH v6 08/29] libxc: introduce a xc_dom_arch for hvm-3.0-x86_32 guests Roger Pau Monne
2015-09-18 15:53 ` Anthony PERARD
2015-09-23 10:32 ` Roger Pau Monné
2015-09-04 12:08 ` [PATCH v6 09/29] libxl: switch HVM domain building to use xc_dom_* helpers Roger Pau Monne
2015-09-18 15:53 ` Anthony PERARD
2015-09-23 10:38 ` Roger Pau Monné
2015-09-04 12:08 ` [PATCH v6 10/29] libxc: remove dead HVM building code Roger Pau Monne
2015-09-04 12:08 ` [PATCH v6 11/29] xen/x86: add bitmap of enabled emulated devices Roger Pau Monne
2015-09-04 12:25 ` Wei Liu
2015-09-04 13:51 ` Roger Pau Monné
2015-09-04 13:55 ` Jan Beulich
2015-09-04 22:41 ` Andrew Cooper
2015-09-23 11:43 ` Roger Pau Monné
2015-09-04 13:56 ` Wei Liu
2015-09-09 14:27 ` Wei Liu
2015-09-16 9:50 ` Jan Beulich
2015-09-23 12:35 ` Roger Pau Monné
2015-09-23 13:24 ` Jan Beulich
2015-09-23 15:02 ` Roger Pau Monné
2015-09-16 10:10 ` Jan Beulich
2015-09-23 12:42 ` Roger Pau Monné
2015-09-23 12:46 ` Andrew Cooper
2015-09-04 12:08 ` [PATCH v6 12/29] xen/x86: allow disabling the emulated local apic Roger Pau Monne
2015-09-16 10:05 ` Jan Beulich
2015-09-23 15:45 ` Roger Pau Monné
2015-09-24 7:57 ` Jan Beulich
2015-09-25 9:00 ` Roger Pau Monné
2015-09-04 12:08 ` [PATCH v6 13/29] xen/x86: allow disabling the emulated HPET Roger Pau Monne
2015-09-04 12:08 ` [PATCH v6 14/29] xen/x86: allow disabling the pmtimer Roger Pau Monne
2015-09-04 12:08 ` [PATCH v6 15/29] xen/x86: allow disabling the emulated RTC Roger Pau Monne
2015-09-04 12:08 ` [PATCH v6 16/29] xen/x86: allow disabling the emulated IO APIC Roger Pau Monne
2015-09-04 12:08 ` [PATCH v6 17/29] xen/x86: allow disabling the emulated PIC Roger Pau Monne
2015-09-21 14:34 ` Jan Beulich
2015-09-25 15:01 ` Roger Pau Monné
2015-09-04 12:08 ` [PATCH v6 18/29] xen/x86: allow disabling the emulated pmu Roger Pau Monne
2015-09-21 14:36 ` Jan Beulich
2015-09-21 14:48 ` Boris Ostrovsky
2015-09-25 15:07 ` Roger Pau Monné
2015-09-25 15:13 ` Jan Beulich
2015-09-25 15:22 ` Roger Pau Monné
2015-09-25 15:41 ` Boris Ostrovsky
2015-09-04 12:08 ` [PATCH v6 19/29] xen/x86: allow disabling the emulated VGA Roger Pau Monne
2015-09-04 12:08 ` [PATCH v6 20/29] xen/x86: allow disabling the emulated IOMMU Roger Pau Monne
2015-09-28 13:58 ` Aravind Gopalakrishnan
2015-09-04 12:09 ` [PATCH v6 21/29] xen/x86: allow disabling all emulated devices inside of Xen Roger Pau Monne
2015-09-04 12:09 ` [PATCH v6 22/29] elfnotes: intorduce a new PHYS_ENTRY elfnote Roger Pau Monne
2015-09-21 14:47 ` Jan Beulich
2015-09-28 10:35 ` Roger Pau Monné
2015-09-28 10:56 ` Jan Beulich
2015-09-28 10:59 ` Andrew Cooper
2015-09-04 12:09 ` [PATCH v6 23/29] libxc: allow creating domains without emulated devices Roger Pau Monne
2015-09-04 12:09 ` [PATCH v6 24/29] xen/x86: allow HVM guests to use hypercalls to bring up vCPUs Roger Pau Monne
2015-09-21 15:44 ` Jan Beulich
2015-09-25 15:16 ` Andrew Cooper
2015-09-25 15:52 ` Jan Beulich
2015-09-28 16:09 ` Roger Pau Monné
2015-09-29 7:09 ` Jan Beulich
2015-09-29 8:53 ` Tim Deegan
2015-09-29 10:00 ` Andrew Cooper
2015-09-29 10:07 ` Jan Beulich
2015-09-29 10:25 ` Andrew Cooper
2015-09-29 10:33 ` Jan Beulich
2015-09-29 10:37 ` Andrew Cooper
2015-09-29 10:48 ` Jan Beulich
2015-09-29 14:01 ` Roger Pau Monné
2015-09-29 15:29 ` Jan Beulich
2015-09-29 16:01 ` Roger Pau Monné
2015-09-29 16:20 ` Jan Beulich
2015-09-29 16:49 ` Roger Pau Monné [this message]
2015-09-29 16:58 ` Roger Pau Monné
2015-09-30 10:03 ` Jan Beulich
2015-09-30 11:37 ` Roger Pau Monné
2015-09-30 11:49 ` Andrew Cooper
2015-09-30 11:54 ` Jan Beulich
2015-09-30 12:19 ` Roger Pau Monné
2015-09-30 12:35 ` Jan Beulich
2015-09-30 12:50 ` Andrew Cooper
2015-09-30 15:33 ` Roger Pau Monné
2015-09-30 14:23 ` Roger Pau Monné
2015-09-30 15:41 ` Jan Beulich
2015-09-04 12:09 ` [PATCH v6 25/29] xenconsole: try to attach to PV console if HVM fails Roger Pau Monne
2015-09-04 12:09 ` [PATCH v6 26/29] libxc/xen: introduce a start info structure for HVMlite guests Roger Pau Monne
2015-09-10 16:00 ` Wei Liu
2015-09-21 15:53 ` Jan Beulich
2015-09-28 16:51 ` Roger Pau Monné
2015-09-04 12:09 ` [PATCH v6 27/29] libxc: switch xc_dom_elfloader to be used with HVMlite domains Roger Pau Monne
2015-09-04 12:09 ` [PATCH v6 28/29] libxl: allow the creation of HVM domains without a device model Roger Pau Monne
2015-09-04 12:09 ` [PATCH v6 29/29] libxl: add support for migrating HVM guests " Roger Pau Monne
2015-09-10 16:00 ` Wei Liu
2015-09-10 16:30 ` Andrew Cooper
2015-09-11 13:04 ` [PATCH v6 00/29] Introduce HVM without dm and new boot ABI Ian Campbell
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=560AC129.1040309@citrix.com \
--to=roger.pau@citrix.com \
--cc=George.Dunlap@eu.citrix.com \
--cc=JBeulich@suse.com \
--cc=andrew.cooper3@citrix.com \
--cc=ian.campbell@citrix.com \
--cc=stefano.stabellini@citrix.com \
--cc=tim@xen.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).