xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Maran Wilson <maran.wilson@oracle.com>
To: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	Daniel Kiper <daniel.kiper@oracle.com>
Cc: andrew.cooper3@citrix.com, jbeulich@suse.com, xen-devel@lists.xen.org
Subject: Re: [PATCH 1/1] x86/PVHv2: Add memory map pointer to hvm_start_info struct
Date: Fri, 2 Mar 2018 14:29:29 -0800	[thread overview]
Message-ID: <b12ce545-85e5-d3b0-dc2c-1acad8474e97@oracle.com> (raw)
In-Reply-To: <20180302212052.GP3336@char.us.oracle.com>

On 3/2/2018 1:20 PM, Konrad Rzeszutek Wilk wrote:
> On Fri, Mar 02, 2018 at 12:54:29PM -0800, Maran Wilson wrote:
>> The start info structure that is defined as part of the x86/HVM direct boot
>> ABI and used for starting Xen PVH guests would be more versatile if it also
>> included a way to pass information about the memory map to the guest. This
>> would allow KVM guests to share the same entry point.
> Would it be better if there was an tag/length as well? And maybe more dynamic
> so that if you want to add more structures you can identify them tags?
> Like what Multiboot2 has?

That sounds like a decent idea if we expect this structure to continue 
to grow and expand in the future. But I'd be hesitant to make it part of 
this patch series. Mostly because it doesn't add value to the existing 
use case(s) and there's a risk we end up going down a less than ideal 
path trying to design for anticipated (but presently unknown) use cases.

I don't think the currently proposed changes would prevent us from doing 
something like you describe in the future, so I guess I'd prefer to 
leave that discussion for if/when we run into additional use cases that 
require new structures. But if there is overwhelming support for the 
idea, I can work on drafting up a proposal for what that would look like.

Thanks,
-Maran

>> Signed-off-by: Maran Wilson <maran.wilson@oracle.com>
>> ---
>>   xen/include/public/arch-x86/hvm/start_info.h | 51 +++++++++++++++++++++++++++-
>>   1 file changed, 50 insertions(+), 1 deletion(-)
>>
>> diff --git a/xen/include/public/arch-x86/hvm/start_info.h b/xen/include/public/arch-x86/hvm/start_info.h
>> index 6484159..ae8dac8 100644
>> --- a/xen/include/public/arch-x86/hvm/start_info.h
>> +++ b/xen/include/public/arch-x86/hvm/start_info.h
>> @@ -33,8 +33,9 @@
>>    *    | magic          | Contains the magic value XEN_HVM_START_MAGIC_VALUE
>>    *    |                | ("xEn3" with the 0x80 bit of the "E" set).
>>    *  4 +----------------+
>> - *    | version        | Version of this structure. Current version is 0. New
>> + *    | version        | Version of this structure. Current version is 1. New
>>    *    |                | versions are guaranteed to be backwards-compatible.
>> + *    |                | For PV guests only 0 allowed, for PVH 0 or 1 allowed.
>>    *  8 +----------------+
>>    *    | flags          | SIF_xxx flags.
>>    * 12 +----------------+
>> @@ -48,6 +49,15 @@
>>    * 32 +----------------+
>>    *    | rsdp_paddr     | Physical address of the RSDP ACPI data structure.
>>    * 40 +----------------+
>> + *    | memmap_paddr   | Physical address of the (optional) memory map. Only
>> + *    |                | present in version 1 and newer of the structure.
>> + * 48 +----------------+
>> + *    | memmap_entries | Number of entries in the memory map table. Only
>> + *    |                | present in version 1 and newer of the structure.
>> + *    |                | Zero if there is no memory map being provided.
>> + * 52 +----------------+
>> + *    | reserved       | Version 1 and newer only.
>> + * 56 +----------------+
>>    *
>>    * The layout of each entry in the module structure is the following:
>>    *
>> @@ -62,10 +72,34 @@
>>    *    | reserved       |
>>    * 32 +----------------+
>>    *
>> + * The layout of each entry in the memory map table is as follows:
>> + *
>> + *  0 +----------------+
>> + *    | addr           | Base address
>> + *  8 +----------------+
>> + *    | size           | Size of mapping in bytes
>> + * 16 +----------------+
>> + *    | type           | Type of mapping as defined between the hypervisor
>> + *    |                | and guest it's starting. E820_TYPE_xxx, for example.
>> + * 20 +----------------|
>> + *    | reserved       |
>> + * 24 +----------------+
>> + *
>>    * The address and sizes are always a 64bit little endian unsigned integer.
>>    *
>>    * NB: Xen on x86 will always try to place all the data below the 4GiB
>>    * boundary.
>> + *
>> + * Version numbers of the hvm_start_info structure have evolved like this:
>> + *
>> + * Version 0:
>> + *
>> + * Version 1:	Added the memmap_paddr/memmap_entries fields (plus 4 bytes of
>> + *		padding) to the end of the hvm_start_info struct. These new
>> + *		fields can be used to pass a memory map to the guest. The
>> + *		memory map is optional and so guests that understand version 1
>> + *		of the structure must check that memmap_entries is non-zero
>> + *		before trying to read the memory map.
>>    */
>>   #define XEN_HVM_START_MAGIC_VALUE 0x336ec578
>>   
>> @@ -86,6 +120,14 @@ struct hvm_start_info {
>>       uint64_t cmdline_paddr;     /* Physical address of the command line.     */
>>       uint64_t rsdp_paddr;        /* Physical address of the RSDP ACPI data    */
>>                                   /* structure.                                */
>> +    uint64_t memmap_paddr;	/* Physical address of an array of           */
>> +				/* hvm_memmap_table_entry. Only present in   */
>> +				/* version 1 and newer of the structure      */
>> +    uint32_t memmap_entries;	/* Number of entries in the memmap table.    */
>> +				/* Only present in version 1 and newer of    */
>> +				/* the structure. Value will be zero if      */
>> +				/* there is no memory map being provided.    */
>> +    uint32_t reserved;
>>   };
>>   
>>   struct hvm_modlist_entry {
>> @@ -95,4 +137,11 @@ struct hvm_modlist_entry {
>>       uint64_t reserved;
>>   };
>>   
>> +struct hvm_memmap_table_entry {
>> +    uint64_t addr;		/* Base address of the memory region         */
>> +    uint64_t size;		/* Size of the memory region in bytes        */
>> +    uint32_t type;		/* Mapping type                              */
>> +    uint32_t reserved;
>> +};
>> +
>>   #endif /* __XEN_PUBLIC_ARCH_X86_HVM_START_INFO_H__ */
>> -- 
>> 1.8.3.1
>>
>>
>> _______________________________________________
>> Xen-devel mailing list
>> Xen-devel@lists.xenproject.org
>> https://lists.xenproject.org/mailman/listinfo/xen-devel


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

  reply	other threads:[~2018-03-02 22:29 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-02 20:54 [PATCH 0/1] x86/PVHv2: Add memory map pointer to hvm_start_info struct Maran Wilson
2018-03-02 20:54 ` [PATCH 1/1] " Maran Wilson
2018-03-02 21:20   ` Konrad Rzeszutek Wilk
2018-03-02 22:29     ` Maran Wilson [this message]
2018-03-06 19:08       ` Daniel Kiper
2018-03-05  9:16   ` Jan Beulich
2018-03-13 10:50   ` Roger Pau Monné
2018-03-13 16:20     ` Maran Wilson
2018-03-13 16:34       ` Jan Beulich
2018-03-13 16:55         ` Maran Wilson
2018-03-13 17:16           ` Roger Pau Monné
2018-03-13 18:09             ` Maran Wilson
2018-03-14  7:43           ` Jan Beulich
2018-03-13 16:38       ` Roger Pau Monné

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=b12ce545-85e5-d3b0-dc2c-1acad8474e97@oracle.com \
    --to=maran.wilson@oracle.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=daniel.kiper@oracle.com \
    --cc=jbeulich@suse.com \
    --cc=konrad.wilk@oracle.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 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).