From: "Roger Pau Monné" <roger.pau@citrix.com>
To: Jan Beulich <JBeulich@suse.com>
Cc: Ian Campbell <ian.campbell@citrix.com>,
Andrew Cooper <andrew.cooper3@citrix.com>,
David Vrabel <david.vrabel@citrix.com>,
xen-devel@lists.xenproject.org,
Boris Ostrovsky <boris.ostrovsky@oracle.com>
Subject: Re: [PATCH v3 07/32] xen/x86: fix arch_set_info_guest for HVM guests
Date: Fri, 24 Jul 2015 17:26:57 +0200 [thread overview]
Message-ID: <55B25941.9@citrix.com> (raw)
In-Reply-To: <55B24F4A02000078000952CC@prv-mh.provo.novell.com>
El 24/07/15 a les 14.44, Jan Beulich ha escrit:
>>>> On 24.07.15 at 14:11, <roger.pau@citrix.com> wrote:
>> It seems kind of pointless IMHO, the reason to have the union is to be
>> able to access the registers using the native nomenclature, but if a
>> register doesn't exist in a specific bitness I don't see the point of
>> adding such "invalid" names.
>
> No - put side by side an item valid in only a subset modes and an
> item only valid outside of that subset.
OK, let me see if I got that right.
>> Or your idea was to put all the bitness specific registers inside of
>> another separate structure and then unionize them? AFAICT the 16 and
>> 32bit structures are going to be empty.
>
> How that? 64-bit mode e.g. doesn't need full descriptor data for
> many of the segment registers.
Please bear with me, but AFAIK cs, ds, es and ss still need to point to
a GDT entry with a 0 base and a limit of 2^64.
What about the following layout:
#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
/* Anonymous union includes 16-, 32- and 64-bit names (e.g., bp/ebp/rbp). */
# define __DECL_REG(n64, n32, n16) union { \
uint64_t n64; \
uint32_t n32; \
uint16_t n16; \
}
#else
/* Non-gcc sources must always use the proper 64-bit name (e.g., rbp). */
#define __DECL_REG(n64, n32, n16) uint64_t n64
#endif
#define __DECL_GP_REG(n) __DECL_REG(r##n, e##n, n)
struct cpu_x86_16 {
/* Control registers. */
uint32_t cr[8];
/* Debug registers. */
uint32_t dr[8];
/* GDT descriptor address. */
uint16_t gdtr;
};
struct cpu_x86_32 {
/* Control registers. */
uint32_t cr[8];
/* Debug registers. */
uint32_t dr[8];
/* GDT descriptor address. */
uint32_t gdtr;
};
struct cpu_x86_64 {
/* Additional amd64 general purpose registers. */
uint64_t r8, r9, r10, r11, r12, r13, r14, r15;
/* Control registers. */
uint64_t cr[9];
/* Debug registers. */
uint64_t dr[8];
/* Extended Feature Enable Register. */
uint64_t efer;
/* GDT descriptor address. */
uint64_t gdtr;
};
struct cpu_hvm_regs {
/* General purpose registers. */
__DECL_GP_REG(ax);
__DECL_GP_REG(bx);
__DECL_GP_REG(cx);
__DECL_GP_REG(dx);
/* Index registers. */
__DECL_GP_REG(di);
__DECL_GP_REG(si);
/* Pointer registers. */
__DECL_GP_REG(bp);
__DECL_GP_REG(sp);
/* Instruction pointer. */
__DECL_GP_REG(ip);
/* Status register. */
__DECL_GP_REG(flags);
/* Segment registers. */
uint16_t cs;
uint16_t ds;
uint16_t es;
uint16_t ss;
uint16_t fs;
uint16_t gs;
/* Task state segment. */
uint16_t ts;
/* Bitness specific registers. */
union {
struct cpu_x86_16 x86_16;
struct cpu_x86_32 x86_32;
struct cpu_x86_64 x86_64;
};
};
struct vcpu_hvm_context {
/* 16bit fields of the strucutre will be used. */
#define _VCPUHVM_MODE_16B 0
#define VCPUHVM_MODE_16B (1<<_VCPUHVM_MODE_16B)
/* 32bit fields of the structure will be used. */
#define _VCPUHVM_MODE_32B 1
#define VCPUHVM_MODE_32B (1<<_VCPUHVM_MODE_32B)
/* 64bit fields of the structure will be used. */
#define _VCPUHVM_MODE_64B 2
#define VCPUHVM_MODE_64B (1<<_VCPUHVM_MODE_64B)
uint32_t flags; /* VCPUHVM_* flags. */
struct cpu_hvm_regs user_regs; /* CPU registers. */
};
#undef __DECL_GP_REG
#undef __DECL_REG
next prev parent reply other threads:[~2015-07-24 15:27 UTC|newest]
Thread overview: 121+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-03 11:34 [PATCH v3 00/32] Introduce HVM without dm and new boot ABI Roger Pau Monne
2015-07-03 11:34 ` [PATCH v3 01/32] libxc: split x86 HVM setup_guest into smaller logical functions Roger Pau Monne
2015-07-06 10:45 ` Andrew Cooper
2015-07-28 11:22 ` Wei Liu
2015-07-03 11:34 ` [PATCH v3 02/32] libxc: unify xc_dom_p2m_{host/guest} Roger Pau Monne
2015-07-06 10:49 ` Andrew Cooper
2015-07-28 11:22 ` Wei Liu
2015-07-03 11:34 ` [PATCH v3 03/32] libxc: introduce the notion of a container type Roger Pau Monne
2015-07-06 12:01 ` Andrew Cooper
2015-07-28 11:22 ` Wei Liu
2015-07-03 11:34 ` [PATCH v3 04/32] libxc: introduce a domain loader for HVM guest firmware Roger Pau Monne
2015-07-06 12:11 ` Andrew Cooper
2015-07-28 11:22 ` Wei Liu
2015-07-03 11:34 ` [PATCH v3 05/32] libxc: make arch_setup_meminit a xc_dom_arch hook Roger Pau Monne
2015-07-06 12:23 ` Andrew Cooper
2015-07-27 10:40 ` Roger Pau Monné
2015-07-28 11:22 ` Wei Liu
2015-07-03 11:34 ` [PATCH v3 06/32] libxc: make arch_setup_boot{init/late} xc_dom_arch hooks Roger Pau Monne
2015-07-06 12:27 ` Andrew Cooper
2015-07-28 11:22 ` Wei Liu
2015-07-03 11:34 ` [PATCH v3 07/32] xen/x86: fix arch_set_info_guest for HVM guests Roger Pau Monne
2015-07-06 12:58 ` Andrew Cooper
2015-07-23 10:14 ` Roger Pau Monné
2015-07-10 18:39 ` Konrad Rzeszutek Wilk
2015-07-10 18:47 ` Konrad Rzeszutek Wilk
2015-07-23 10:17 ` Roger Pau Monné
2015-07-13 14:01 ` Jan Beulich
2015-07-23 10:25 ` Roger Pau Monné
2015-07-23 11:29 ` Jan Beulich
2015-07-23 11:41 ` Ian Campbell
2015-07-23 15:10 ` Roger Pau Monné
2015-07-23 15:32 ` Jan Beulich
2015-07-23 15:48 ` Roger Pau Monné
2015-07-23 15:58 ` Jan Beulich
2015-07-23 16:00 ` Ian Campbell
2015-07-23 16:15 ` Andrew Cooper
2015-07-23 16:19 ` Jan Beulich
2015-07-23 16:49 ` Andrew Cooper
2015-07-23 17:06 ` Roger Pau Monné
2015-07-23 16:56 ` Roger Pau Monné
2015-07-23 17:12 ` Andrew Cooper
2015-07-24 8:22 ` Jan Beulich
2015-07-24 9:59 ` Roger Pau Monné
2015-07-24 10:46 ` Jan Beulich
2015-07-24 12:11 ` Roger Pau Monné
2015-07-24 12:44 ` Jan Beulich
2015-07-24 15:26 ` Roger Pau Monné [this message]
2015-07-24 15:49 ` Jan Beulich
2015-07-24 16:54 ` Roger Pau Monné
2015-07-24 17:36 ` Konrad Rzeszutek Wilk
2015-07-27 11:55 ` Roger Pau Monné
2015-08-03 16:55 ` Andrew Cooper
2015-08-03 17:31 ` Roger Pau Monné
2015-08-04 18:08 ` Andrew Cooper
2015-08-05 9:53 ` Roger Pau Monné
2015-08-05 15:39 ` Andrew Cooper
2015-08-05 16:40 ` Roger Pau Monné
2015-08-05 16:46 ` Andrew Cooper
2015-08-05 17:11 ` Roger Pau Monné
2015-08-05 19:00 ` Andrew Cooper
2015-08-07 12:15 ` Tim Deegan
2015-08-11 7:26 ` Jan Beulich
2015-07-24 11:11 ` Andrew Cooper
2015-07-24 11:28 ` Ian Campbell
2015-07-24 11:49 ` Jan Beulich
2015-07-24 11:46 ` Jan Beulich
2015-07-24 11:49 ` Roger Pau Monné
2015-07-24 12:41 ` Jan Beulich
2015-07-24 15:28 ` Roger Pau Monné
2015-07-03 11:34 ` [PATCH v3 08/32] libxc: introduce a xc_dom_arch for hvm-3.0-x86_32 guests Roger Pau Monne
2015-07-06 13:40 ` Andrew Cooper
2015-07-03 11:34 ` [PATCH v3 09/32] libxl: switch HVM domain building to use xc_dom_* helpers Roger Pau Monne
2015-07-28 11:22 ` Wei Liu
2015-07-28 14:26 ` Roger Pau Monné
2015-07-28 14:29 ` Wei Liu
2015-07-03 11:34 ` [PATCH v3 10/32] libxc: remove dead HVM building code Roger Pau Monne
2015-07-06 13:46 ` Andrew Cooper
2015-07-23 10:27 ` Roger Pau Monné
2015-07-03 11:34 ` [PATCH v3 11/32] xen/x86: add bitmap of enabled emulated devices Roger Pau Monne
2015-07-06 14:10 ` Andrew Cooper
2015-07-07 7:26 ` Jan Beulich
2015-07-23 10:29 ` Roger Pau Monné
2015-07-03 11:34 ` [PATCH v3 12/32] xen/x86: allow disabling the emulated local apic Roger Pau Monne
2015-07-03 11:34 ` [PATCH v3 13/32] xen/x86: allow disabling the emulated HPET Roger Pau Monne
2015-07-03 11:34 ` [PATCH v3 14/32] xen/x86: allow disabling the pmtimer Roger Pau Monne
2015-07-03 11:34 ` [PATCH v3 15/32] xen/x86: allow disabling the emulated RTC Roger Pau Monne
2015-07-03 11:34 ` [PATCH v3 16/32] xen/x86: allow disabling the emulated IO APIC Roger Pau Monne
2015-07-03 11:34 ` [PATCH v3 17/32] xen/x86: allow disabling the emulated PIC Roger Pau Monne
2015-07-03 11:34 ` [PATCH v3 18/32] xen/x86: allow disabling the emulated pmu Roger Pau Monne
2015-07-03 11:34 ` [PATCH v3 19/32] xen/x86: allow disabling the emulated VGA Roger Pau Monne
2015-07-03 11:34 ` [PATCH v3 20/32] xen/x86: allow disabling the emulated IOMMU Roger Pau Monne
2015-07-03 11:34 ` [PATCH v3 21/32] xen/x86: allow disabling all emulated devices inside of Xen Roger Pau Monne
2015-07-03 11:35 ` [PATCH v3 22/32] elfnotes: intorduce a new PHYS_ENTRY elfnote Roger Pau Monne
2015-07-03 11:35 ` [PATCH v3 23/32] libxc: allow creating domains without emulated devices Roger Pau Monne
2015-07-28 11:22 ` Wei Liu
2015-07-03 11:35 ` [PATCH v3 24/32] xen: allow HVM guests to use XENMEM_memory_map Roger Pau Monne
2015-07-03 11:35 ` [PATCH v3 25/32] xen/x86: allow HVM guests to use hypercalls to bring up vCPUs Roger Pau Monne
2015-07-03 11:35 ` [PATCH v3 26/32] xenconsole: try to attach to PV console if HVM fails Roger Pau Monne
2015-07-14 13:46 ` Stefano Stabellini
2015-07-23 10:30 ` Roger Pau Monné
2015-07-03 11:35 ` [PATCH v3 27/32] libxc: change the position of the special pages Roger Pau Monne
2015-07-03 15:36 ` Roger Pau Monné
2015-07-10 19:06 ` Konrad Rzeszutek Wilk
2015-07-23 10:42 ` Roger Pau Monné
2015-07-03 11:35 ` [PATCH v3 28/32] libxc/xen: introduce HVM_PARAM_CMDLINE_PFN Roger Pau Monne
2015-07-03 11:35 ` [PATCH v3 29/32] libxc/xen: introduce HVM_PARAM_FIRST_FREE_PFN Roger Pau Monne
2015-07-10 19:05 ` Konrad Rzeszutek Wilk
2015-07-23 10:46 ` Roger Pau Monné
2015-07-03 11:35 ` [PATCH v3 30/32] libxc/xen: introduce HVM_PARAM_MODLIST_PFN Roger Pau Monne
2015-07-03 11:35 ` [PATCH v3 31/32] libxc: switch xc_dom_elfloader to be used with HVMlite domains Roger Pau Monne
2015-07-10 19:07 ` Konrad Rzeszutek Wilk
2015-07-23 10:48 ` Roger Pau Monné
2015-07-03 11:35 ` [PATCH v3 32/32] libxl: allow the creation of HVM domains without a device model Roger Pau Monne
2015-07-28 11:22 ` Wei Liu
2015-07-29 14:43 ` Roger Pau Monné
2015-07-29 14:50 ` Wei Liu
2015-07-29 14:58 ` Andrew Cooper
2015-07-03 16:19 ` [PATCH v3 00/32] Introduce HVM without dm and new boot ABI David Vrabel
2015-07-03 16:36 ` Roger Pau Monné
2015-07-10 17:44 ` Konrad Rzeszutek Wilk
2015-07-10 18:01 ` Konrad Rzeszutek Wilk
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=55B25941.9@citrix.com \
--to=roger.pau@citrix.com \
--cc=JBeulich@suse.com \
--cc=andrew.cooper3@citrix.com \
--cc=boris.ostrovsky@oracle.com \
--cc=david.vrabel@citrix.com \
--cc=ian.campbell@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.