From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: [PATCH v4 1/4] x86/HVM: update the start info structure layout Date: Tue, 16 Feb 2016 15:06:16 -0500 Message-ID: <20160216200616.GC17937@char.us.oracle.com> References: <1455644269-40358-1-git-send-email-roger.pau@citrix.com> <1455644269-40358-2-git-send-email-roger.pau@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1aVltR-0003iH-3B for xen-devel@lists.xenproject.org; Tue, 16 Feb 2016 20:06:41 +0000 Content-Disposition: inline In-Reply-To: <1455644269-40358-2-git-send-email-roger.pau@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Roger Pau Monne , boris.ostrovsky@oracle.com Cc: Wei Liu , Ian Campbell , Andrew Cooper , Ian Jackson , Jan Beulich , Samuel Thibault , xen-devel@lists.xenproject.org List-Id: xen-devel@lists.xenproject.org On Tue, Feb 16, 2016 at 06:37:46PM +0100, Roger Pau Monne wrote: > After some discussion around the new boot ABI consensus has been reached > about the layout and contents of the start info. The following patch upda= tes > the layout to what has been agreed. .. It would be good to have an URL to the discussion? > = > Also, the new layout is described in binary terms in order to avoid issues > with alignments when using C structs. Should the title say more about HVMLite/PVH instead of just 'HVM'? > = > Signed-off-by: Roger Pau Monn=E9 > --- > Cc: Samuel Thibault > Cc: Ian Jackson > Cc: Ian Campbell > Cc: Wei Liu > Cc: Jan Beulich > Cc: Andrew Cooper You forgot Boris who is working on the Linux side. CC-ing him. Actually please CC him on _ALL_ PVH related work. > --- > tools/libxc/include/xc_dom.h | 31 +++++++++++++++++++++++++ > xen/include/public/xen.h | 55 ++++++++++++++++++++++++++++++--------= ------ > 2 files changed, 69 insertions(+), 17 deletions(-) > = > diff --git a/tools/libxc/include/xc_dom.h b/tools/libxc/include/xc_dom.h > index cac4698..6ebe946 100644 > --- a/tools/libxc/include/xc_dom.h > +++ b/tools/libxc/include/xc_dom.h > @@ -216,6 +216,37 @@ struct xc_dom_image { > struct xc_hvm_firmware_module smbios_module; > }; > = > +#if defined(__i386__) || defined(__x86_64__) > +/* C representation of the x86/HVM start info layout. > + * > + * The canonical definition of this layout resides in public/xen.h, this > + * is just a way to represent the layout described there using C types. > + * > + * NB: the packed attribute is not really needed, but it helps us enforce > + * the fact this this is just a representation, and it might indeed > + * be required in the future if there are alignment changes. > + */ > +struct hvm_start_info { > + uint32_t magic; /* Contains the magic value 0x336ec578 = */ > + /* ("xEn3" with the 0x80 bit of the "E" = set).*/ > + uint32_t version; /* Version of this structure. = */ > + uint32_t flags; /* SIF_xxx flags. = */ > + uint32_t cmdline_paddr; /* Physical address of the command line.= */ > + uint32_t nr_modules; /* Number of modules passed to the kerne= l. */ > + uint32_t modlist_paddr; /* Physical address of an array of = */ > + /* hvm_modlist_entry. = */ > + uint32_t rsdp_paddr; /* Physical address of the RSDP ACPI dat= a */ > + /* structure. = */ > +} __attribute__((packed)); > + > +struct hvm_modlist_entry { > + uint64_t paddr; /* Physical address of the module. = */ > + uint64_t size; /* Size of the module in bytes. = */ > + uint64_t cmdline_paddr; /* Physical address of the command line.= */ > + uint64_t reserved; > +} __attribute__((packed)); > +#endif /* x86 */ > + > /* --- pluggable kernel loader ------------------------------------- */ > = > struct xc_dom_loader { > diff --git a/xen/include/public/xen.h b/xen/include/public/xen.h > index 7b629b1..6ba060f 100644 > --- a/xen/include/public/xen.h > +++ b/xen/include/public/xen.h > @@ -787,25 +787,46 @@ typedef struct start_info start_info_t; > /* > * Start of day structure passed to PVH guests in %ebx. > * > - * NOTE: nothing will be loaded at physical address 0, so > - * a 0 value in any of the address fields should be treated > - * as not present. > + * NOTE: nothing will be loaded at physical address 0, so a 0 value in a= ny > + * of the address fields should be treated as not present. > + * > + * 0 +----------------+ > + * | magic | Contains the magic value HVM_START_MAGIC_VALUE > + * | | ("xEn3" with the 0x80 bit of the "E" set). > + * 4 +----------------+ > + * | version | Version of this structure. Current version is 0= . New > + * | | versions are guaranteed to be backwards-compati= ble. > + * 8 +----------------+ > + * | flags | SIF_xxx flags. > + * 12 +----------------+ > + * | cmdline_paddr | Physical address of the command line, > + * | | a zero-terminated ASCII string. > + * 16 +----------------+ > + * | nr_modules | Number of modules passed to the kernel. > + * 20 +----------------+ > + * | modlist_paddr | Physical address of an array of modules > + * | | (layout of the structure below). > + * 24 +----------------+ > + * | rsdp_paddr | Physical address of the RSDP ACPI data structur= e. > + * 28 +----------------+ > + * > + * The layout of each entry in the module structure is the following: > + * > + * 0 +----------------+ > + * | paddr | Physical address of the module. > + * 8 +----------------+ > + * | size | Size of the module in bytes. > + * 16 +----------------+ > + * | cmdline_paddr | Physical address of the command line, > + * | | a zero-terminated ASCII string. > + * 24 +----------------+ > + * | reserved | > + * 32 +----------------+ > + * > + * The address and size of the modules is a 64bit unsigned integer. Howe= ver > + * Xen will always try to place all modules below the 4GiB boundary. > */ > -struct hvm_start_info { > #define HVM_START_MAGIC_VALUE 0x336ec578 > - uint32_t magic; /* Contains the magic value 0x336ec578 = */ > - /* ("xEn3" with the 0x80 bit of the "E" = set).*/ > - uint32_t flags; /* SIF_xxx flags. = */ > - uint32_t cmdline_paddr; /* Physical address of the command line.= */ > - uint32_t nr_modules; /* Number of modules passed to the kerne= l. */ > - uint32_t modlist_paddr; /* Physical address of an array of = */ > - /* hvm_modlist_entry. = */ > -}; > - > -struct hvm_modlist_entry { > - uint32_t paddr; /* Physical address of the module. = */ > - uint32_t size; /* Size of the module in bytes. = */ > -}; > = > /* New console union for dom0 introduced in 0x00030203. */ > #if __XEN_INTERFACE_VERSION__ < 0x00030203 > -- = > 2.5.4 (Apple Git-61) > = > = > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xen.org > http://lists.xen.org/xen-devel