All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Roger Pau Monné" <roger.pau@citrix.com>
To: xen-devel <xen-devel@lists.xenproject.org>
Cc: Elena Ufimtseva <elena.ufimtseva@oracle.com>,
	Ian Campbell <ian.campbell@citrix.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	Stefano Stabellini <stefano.stabellini@eu.citrix.com>,
	Tim Deegan <tim@xen.org>, Jan Beulich <JBeulich@suse.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>
Subject: [Draft A] Boot ABI for HVM guests without a device-model
Date: Wed, 10 Jun 2015 14:34:00 +0200	[thread overview]
Message-ID: <55782EB8.1060708@citrix.com> (raw)

Hello,

The discussion in [1] lead to an agreement of the missing pieces in PVH 
(or HVM without a device-model) in order to progress with it's 
implementation.

One of the missing pieces is a new boot ABI, that replaces the PV boot 
ABI. The aim of this new boot ABI is to remove the limitations of the 
PV boot ABI, that are no longer present when using auto-translated 
guests. The new boot protocol should allow to use the same entry point 
for both 32bit and 64bit guests, and let the guest choose it's bitness 
at run time without the domain builder knowing in advance.

Roger.

[1] http://lists.xen.org/archives/html/xen-devel/2015-06/msg00258.html

---
HVM direct boot ABI

Since the Xen entry point into the kernel can be different from the 
native entry point, ELFNOTES are used in order to tell the domain 
builder how to load and jump into the kernel entry point. At least the 
following ELFNOTES are required in order to use this boot ABI:

ELFNOTE(Xen, XEN_ELFNOTE_GUEST_OS,       .asciz, "FreeBSD")
ELFNOTE(Xen, XEN_ELFNOTE_GUEST_VERSION,  .asciz, __XSTRING(__FreeBSD_version))
ELFNOTE(Xen, XEN_ELFNOTE_XEN_VERSION,    .asciz, "xen-3.0")
ELFNOTE(Xen, XEN_ELFNOTE_PADDR_OFFSET,   .quad,  KERNBASE)
ELFNOTE(Xen, XEN_ELFNOTE_PADDR_ENTRY,    .quad,  xen_start32)
ELFNOTE(Xen, XEN_ELFNOTE_FEATURES,       .asciz, "writable_descriptor_tables|auto_translated_physmap|supervisor_mode_kernel|hvm_callback_vector")
ELFNOTE(Xen, XEN_ELFNOTE_LOADER,         .asciz, "generic")

The first three notes contain information about the guest kernel and 
the Xen hypercall ABI version. The following notes are of special 
interest:

 * XEN_ELFNOTE_PADDR_OFFSET: the offset of the ELF paddr field from the
   actual required physical address.
 * XEN_ELFNOTE_PADDR_ENTRY: the 32bit entry point into the kernel.
 * XEN_ELFNOTE_FEATURES: features required by the guest kernel in order
   to run.

The presence of the XEN_ELFNOTE_PADDR_ENTRY note indicates that the 
kernel supports the boot ABI described in this document.

The domain builder will load the kernel into the guest memory space and 
jump into the entry point defined at XEN_ELFNOTE_PADDR_ENTRY with the 
following machine state:

 * esi: contains the physical memory address were the loader has placed
   the start_info page.

 * eax: contains the magic value 0xFF6BC1E2.

 * cr0: bit 31 (PG) must be cleared. Bit 0 (PE) must be set. Other bits
   are all undefined. 

 * cs: must be a 32-bit read/execute code segment with an offset of ‘0’
   and a limit of ‘0xFFFFFFFF’. The exact value is undefined.

 * ds, es, fs, gs, ss: must be a 32-bit read/write data segment with an
   offset of ‘0’ and a limit of ‘0xFFFFFFFF’. The exact values are all
   undefined. 

 * eflags: bit 17 (VM) must be cleared. Bit 9 (IF) must be cleared. 
   Other bits are all undefined.

 * A20 gate: must be enabled.

All other processor registers and flag bits are undefined. The OS is in 
charge of setting up it's own stack, GDT and IDT.

Note that the boot protocol resembles the multiboot1 specification, 
this is done so OSes with multiboot1 entry points can reuse those if 
desired. Also note that the processor starts with paging disabled, 
which means that all the memory addresses in the start_info page will 
be physical memory addresses.

---
Comments for further discussion:

Do we want to keep using the start_info page? Most of the fields there 
are not relevant for auto-translated guests, but without it we have to 
figure out how to pass the following information to the guest:

 - Flags: SIF_xxx flags, this could probably be done with cpuid instead.
 - cmd_line: ?
 - console mfn: ?
 - console evtchn: ?
 - console_info address: ?

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

             reply	other threads:[~2015-06-10 12:34 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-10 12:34 Roger Pau Monné [this message]
2015-06-10 13:15 ` [Draft A] Boot ABI for HVM guests without a device-model Jan Beulich
2015-06-10 14:53   ` Roger Pau Monné
2015-06-10 15:53     ` Jan Beulich
2015-06-10 15:42   ` Roger Pau Monné
2015-06-11 11:01   ` Tim Deegan
2015-06-10 13:18 ` Andrew Cooper
2015-06-10 15:38   ` Roger Pau Monné
2015-06-10 15:57     ` Andrew Cooper
2015-06-11  8:23       ` Roger Pau Monné
2015-06-10 18:55 ` Konrad Rzeszutek Wilk
2015-06-10 21:31   ` Andrew Cooper
2015-06-11  8:31     ` Roger Pau Monné
2015-06-11  7:18   ` Jan Beulich
2015-06-12 13:30     ` Konrad Rzeszutek Wilk
2015-06-11  8:43   ` Roger Pau Monné
2015-06-12 13:23     ` 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=55782EB8.1060708@citrix.com \
    --to=roger.pau@citrix.com \
    --cc=JBeulich@suse.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=boris.ostrovsky@oracle.com \
    --cc=elena.ufimtseva@oracle.com \
    --cc=ian.campbell@citrix.com \
    --cc=stefano.stabellini@eu.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 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.