[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH 1/1] x86/PVHv2: Add memory map pointer to hvm_start_info struct



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@xxxxxxxxxx>
---
  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@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel


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

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.