All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] stubdom: add xenstore pvh stubdom support
@ 2020-09-23  6:45 Juergen Gross
  2020-09-23  6:45 ` [PATCH 1/3] tools/init-xenstore-domain: add logging Juergen Gross
                   ` (3 more replies)
  0 siblings, 4 replies; 12+ messages in thread
From: Juergen Gross @ 2020-09-23  6:45 UTC (permalink / raw)
  To: xen-devel
  Cc: Juergen Gross, Ian Jackson, Wei Liu, Andrew Cooper,
	George Dunlap, Jan Beulich, Julien Grall, Stefano Stabellini,
	Samuel Thibault

Add support for creating a PVH Xenstore stub-domain.

This includes building the stubdom and loading it at system boot.

It should be noted that currently this stubdom is not in a working
state as there is some support in Mini-OS missing. I'm working on
adding this support.

Juergen Gross (3):
  tools/init-xenstore-domain: add logging
  tools/init-xenstore-domain: support xenstore pvh stubdom
  stubdom: add xenstore pvh stubdom

 .gitignore                           |   1 +
 stubdom/Makefile                     |  31 ++++-
 stubdom/configure                    |  47 ++++++++
 stubdom/configure.ac                 |   1 +
 stubdom/xenstorepvh-minios.cfg       |  10 ++
 tools/helpers/init-xenstore-domain.c | 170 ++++++++++++++++++++-------
 6 files changed, 213 insertions(+), 47 deletions(-)
 create mode 100644 stubdom/xenstorepvh-minios.cfg

-- 
2.26.2



^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH 1/3] tools/init-xenstore-domain: add logging
  2020-09-23  6:45 [PATCH 0/3] stubdom: add xenstore pvh stubdom support Juergen Gross
@ 2020-09-23  6:45 ` Juergen Gross
  2020-09-30 15:40   ` Wei Liu
  2020-09-23  6:45 ` [PATCH 2/3] tools/init-xenstore-domain: support xenstore pvh stubdom Juergen Gross
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 12+ messages in thread
From: Juergen Gross @ 2020-09-23  6:45 UTC (permalink / raw)
  To: xen-devel; +Cc: Juergen Gross, Ian Jackson, Wei Liu

Add a possibility to do logging in init-xenstore-domain: use -v[...]
for selecting the log-level as in xl, log to stderr.

Signed-off-by: Juergen Gross <jgross@suse.com>
---
 tools/helpers/init-xenstore-domain.c | 51 ++++++++++++++++++++++------
 1 file changed, 40 insertions(+), 11 deletions(-)

diff --git a/tools/helpers/init-xenstore-domain.c b/tools/helpers/init-xenstore-domain.c
index 5bdb48dc80..22c4be6a3f 100644
--- a/tools/helpers/init-xenstore-domain.c
+++ b/tools/helpers/init-xenstore-domain.c
@@ -10,6 +10,7 @@
 #include <xenctrl.h>
 #include <xenctrl_dom.h>
 #include <xenstore.h>
+#include <xentoollog.h>
 #include <xen/sys/xenbus_dev.h>
 #include <xen-xsm/flask/flask.h>
 #include <xen/io/xenbus.h>
@@ -36,6 +37,7 @@ static struct option options[] = {
     { "param", 1, NULL, 'p' },
     { "name", 1, NULL, 'n' },
     { "maxmem", 1, NULL, 'M' },
+    { "verbose", 0, NULL, 'v' },
     { NULL, 0, NULL, 0 }
 };
 
@@ -57,7 +59,8 @@ static void usage(void)
 "  --maxmem <max size>        maximum memory size in the format:\n"
 "                             <MB val>|<a>/<b>|<MB val>:<a>/<b>\n"
 "                             (an absolute value in MB, a fraction a/b of\n"
-"                             the host memory, or the maximum of both)\n");
+"                             the host memory, or the maximum of both)\n"
+"  -v[v[v]]                   verbosity of domain building\n");
 }
 
 static int build(xc_interface *xch)
@@ -349,8 +352,10 @@ int main(int argc, char** argv)
     char buf[16], be_path[64], fe_path[64];
     int rv, fd;
     char *maxmem_str = NULL;
+    xentoollog_level minmsglevel = XTL_PROGRESS;
+    xentoollog_logger *logger = NULL;
 
-    while ( (opt = getopt_long(argc, argv, "", options, NULL)) != -1 )
+    while ( (opt = getopt_long(argc, argv, "v", options, NULL)) != -1 )
     {
         switch ( opt )
         {
@@ -375,6 +380,10 @@ int main(int argc, char** argv)
         case 'M':
             maxmem_str = optarg;
             break;
+        case 'v':
+            if ( minmsglevel )
+                minmsglevel--;
+            break;
         default:
             usage();
             return 2;
@@ -387,11 +396,15 @@ int main(int argc, char** argv)
         return 2;
     }
 
-    xch = xc_interface_open(NULL, NULL, 0);
+    logger = (xentoollog_logger *)xtl_createlogger_stdiostream(stderr,
+                                                               minmsglevel, 0);
+
+    xch = xc_interface_open(logger, logger, 0);
     if ( !xch )
     {
         fprintf(stderr, "xc_interface_open() failed\n");
-        return 1;
+        rv = 1;
+        goto out;
     }
 
     if ( maxmem_str )
@@ -400,7 +413,8 @@ int main(int argc, char** argv)
         if ( maxmem < 0 )
         {
             xc_interface_close(xch);
-            return 1;
+            rv = 1;
+            goto out;
         }
     }
 
@@ -414,17 +428,24 @@ int main(int argc, char** argv)
     xc_interface_close(xch);
 
     if ( rv )
-        return 1;
+    {
+        rv = 1;
+        goto out;
+    }
 
     rv = gen_stub_json_config(domid, NULL);
     if ( rv )
-        return 3;
+    {
+        rv = 3;
+        goto out;
+    }
 
     xsh = xs_open(0);
     if ( !xsh )
     {
         fprintf(stderr, "xs_open() failed.\n");
-        return 3;
+        rv = 3;
+        goto out;
     }
     snprintf(buf, 16, "%d", domid);
     do_xs_write(xsh, "/tool/xenstored/domid", buf);
@@ -460,7 +481,8 @@ int main(int argc, char** argv)
     if ( fd < 0 )
     {
         fprintf(stderr, "Creating " XEN_RUN_DIR "/xenstored.pid failed\n");
-        return 3;
+        rv = 3;
+        goto out;
     }
     rv = snprintf(buf, 16, "domid:%d\n", domid);
     rv = write(fd, buf, rv);
@@ -469,10 +491,17 @@ int main(int argc, char** argv)
     {
         fprintf(stderr,
                 "Writing domid to " XEN_RUN_DIR "/xenstored.pid failed\n");
-        return 3;
+        rv = 3;
+        goto out;
     }
 
-    return 0;
+    rv = 0;
+
+ out:
+    if ( logger )
+        xtl_logger_destroy(logger);
+
+    return rv;
 }
 
 /*
-- 
2.26.2



^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 2/3] tools/init-xenstore-domain: support xenstore pvh stubdom
  2020-09-23  6:45 [PATCH 0/3] stubdom: add xenstore pvh stubdom support Juergen Gross
  2020-09-23  6:45 ` [PATCH 1/3] tools/init-xenstore-domain: add logging Juergen Gross
@ 2020-09-23  6:45 ` Juergen Gross
  2020-09-30 15:46   ` Wei Liu
  2020-09-23  6:45 ` [PATCH 3/3] stubdom: add " Juergen Gross
  2020-10-14 12:44 ` [PATCH 0/3] stubdom: add xenstore pvh stubdom support Jürgen Groß
  3 siblings, 1 reply; 12+ messages in thread
From: Juergen Gross @ 2020-09-23  6:45 UTC (permalink / raw)
  To: xen-devel; +Cc: Juergen Gross, Ian Jackson, Wei Liu

Instead of creating the xenstore-stubdom domain first and parsing the
kernel later do it the other way round. This enables to probe for the
domain type supported by the xenstore-stubdom and to support both, pv
and pvh type stubdoms.

Try to parse the stubdom image first for PV support, if this fails use
HVM. Then create the domain with the appropriate type selected.

Signed-off-by: Juergen Gross <jgross@suse.com>
---
 tools/helpers/init-xenstore-domain.c | 119 +++++++++++++++++++--------
 1 file changed, 85 insertions(+), 34 deletions(-)

diff --git a/tools/helpers/init-xenstore-domain.c b/tools/helpers/init-xenstore-domain.c
index 22c4be6a3f..c174357c0e 100644
--- a/tools/helpers/init-xenstore-domain.c
+++ b/tools/helpers/init-xenstore-domain.c
@@ -18,6 +18,10 @@
 #include "init-dom-json.h"
 #include "_paths.h"
 
+#define LAPIC_BASE_ADDRESS  0xfee00000UL
+#define MB(x)               ((uint64_t)x << 20)
+#define GB(x)               ((uint64_t)x << 30)
+
 static uint32_t domid = ~0;
 static char *kernel;
 static char *ramdisk;
@@ -69,6 +73,8 @@ static int build(xc_interface *xch)
     int rv, xs_fd;
     struct xc_dom_image *dom = NULL;
     int limit_kb = (maxmem ? : (memory + 1)) * 1024;
+    uint64_t mem_size = MB(memory);
+    struct e820entry e820[3];
     struct xen_domctl_createdomain config = {
         .ssidref = SECINITSID_DOMU,
         .flags = XEN_DOMCTL_CDF_xs_domain,
@@ -101,6 +107,66 @@ static int build(xc_interface *xch)
         }
     }
 
+    dom = xc_dom_allocate(xch, NULL, NULL);
+    if ( !dom )
+    {
+        fprintf(stderr, "xc_dom_allocate failed\n");
+        rv = -1;
+        goto err;
+    }
+
+    rv = xc_dom_kernel_file(dom, kernel);
+    if ( rv )
+    {
+        fprintf(stderr, "xc_dom_kernel_file failed\n");
+        goto err;
+    }
+
+    if ( ramdisk )
+    {
+        rv = xc_dom_module_file(dom, ramdisk, NULL);
+        if ( rv )
+        {
+            fprintf(stderr, "xc_dom_module_file failed\n");
+            goto err;
+        }
+    }
+
+    dom->container_type = XC_DOM_HVM_CONTAINER;
+    rv = xc_dom_parse_image(dom);
+    if ( rv )
+    {
+        dom->container_type = XC_DOM_PV_CONTAINER;
+        rv = xc_dom_parse_image(dom);
+        if ( rv )
+        {
+            fprintf(stderr, "xc_dom_parse_image failed\n");
+            goto err;
+        }
+    }
+    else
+    {
+        config.flags |= XEN_DOMCTL_CDF_hvm | XEN_DOMCTL_CDF_hap;
+        config.arch.emulation_flags = XEN_X86_EMU_LAPIC;
+        dom->target_pages = mem_size >> XC_PAGE_SHIFT;
+        dom->mmio_size = GB(4) - LAPIC_BASE_ADDRESS;
+        dom->lowmem_end = (mem_size > LAPIC_BASE_ADDRESS) ?
+                          LAPIC_BASE_ADDRESS : mem_size;
+        dom->highmem_end = (mem_size > LAPIC_BASE_ADDRESS) ?
+                           GB(4) + mem_size - LAPIC_BASE_ADDRESS : 0;
+        dom->mmio_start = LAPIC_BASE_ADDRESS;
+        dom->max_vcpus = 1;
+        e820[0].addr = 0;
+        e820[0].size = dom->lowmem_end;
+        e820[0].type = E820_RAM;
+        e820[1].addr = LAPIC_BASE_ADDRESS;
+        e820[1].size = dom->mmio_size;
+        e820[1].type = E820_RESERVED;
+        e820[2].addr = GB(4);
+        e820[2].size = dom->highmem_end - GB(4);
+        e820[2].type = E820_RAM;
+    }
+
     rv = xc_domain_create(xch, &domid, &config);
     if ( rv )
     {
@@ -125,11 +191,15 @@ static int build(xc_interface *xch)
         fprintf(stderr, "xc_evtchn_alloc_unbound failed\n");
         goto err;
     }
-    rv = xc_domain_set_memmap_limit(xch, domid, limit_kb);
-    if ( rv )
+
+    if ( dom->container_type == XC_DOM_PV_CONTAINER )
     {
-        fprintf(stderr, "xc_domain_set_memmap_limit failed\n");
-        goto err;
+        rv = xc_domain_set_memmap_limit(xch, domid, limit_kb);
+        if ( rv )
+        {
+            fprintf(stderr, "xc_domain_set_memmap_limit failed\n");
+            goto err;
+        }
     }
 
     rv = ioctl(xs_fd, IOCTL_XENBUS_BACKEND_SETUP, domid);
@@ -144,45 +214,16 @@ static int build(xc_interface *xch)
     else
         snprintf(cmdline, 512, "--event %d --internal-db", rv);
 
-    dom = xc_dom_allocate(xch, cmdline, NULL);
-    if ( !dom )
-    {
-        fprintf(stderr, "xc_dom_allocate failed\n");
-        goto err;
-    }
-    dom->container_type = XC_DOM_PV_CONTAINER;
+    dom->cmdline = xc_dom_strdup(dom, cmdline);
     dom->xenstore_domid = domid;
     dom->console_evtchn = console_evtchn;
 
-    rv = xc_dom_kernel_file(dom, kernel);
-    if ( rv )
-    {
-        fprintf(stderr, "xc_dom_kernel_file failed\n");
-        goto err;
-    }
-
-    if ( ramdisk )
-    {
-        rv = xc_dom_module_file(dom, ramdisk, NULL);
-        if ( rv )
-        {
-            fprintf(stderr, "xc_dom_module_file failed\n");
-            goto err;
-        }
-    }
-
     rv = xc_dom_boot_xen_init(dom, xch, domid);
     if ( rv )
     {
         fprintf(stderr, "xc_dom_boot_xen_init failed\n");
         goto err;
     }
-    rv = xc_dom_parse_image(dom);
-    if ( rv )
-    {
-        fprintf(stderr, "xc_dom_parse_image failed\n");
-        goto err;
-    }
     rv = xc_dom_mem_init(dom, memory);
     if ( rv )
     {
@@ -195,6 +236,16 @@ static int build(xc_interface *xch)
         fprintf(stderr, "xc_dom_boot_mem_init failed\n");
         goto err;
     }
+    if ( dom->container_type == XC_DOM_HVM_CONTAINER )
+    {
+        rv = xc_domain_set_memory_map(xch, domid, e820,
+                                      dom->highmem_end ? 3 : 2);
+        if ( rv )
+        {
+            fprintf(stderr, "xc_domain_set_memory_map failed\n");
+            goto err;
+        }
+    }
     rv = xc_dom_build_image(dom);
     if ( rv )
     {
-- 
2.26.2



^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 3/3] stubdom: add xenstore pvh stubdom
  2020-09-23  6:45 [PATCH 0/3] stubdom: add xenstore pvh stubdom support Juergen Gross
  2020-09-23  6:45 ` [PATCH 1/3] tools/init-xenstore-domain: add logging Juergen Gross
  2020-09-23  6:45 ` [PATCH 2/3] tools/init-xenstore-domain: support xenstore pvh stubdom Juergen Gross
@ 2020-09-23  6:45 ` Juergen Gross
  2020-09-27 16:17   ` Samuel Thibault
  2020-09-30 15:46   ` Wei Liu
  2020-10-14 12:44 ` [PATCH 0/3] stubdom: add xenstore pvh stubdom support Jürgen Groß
  3 siblings, 2 replies; 12+ messages in thread
From: Juergen Gross @ 2020-09-23  6:45 UTC (permalink / raw)
  To: xen-devel
  Cc: Juergen Gross, Andrew Cooper, George Dunlap, Ian Jackson,
	Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu,
	Samuel Thibault

Add a PVH xenstore stubdom in order to support a Xenstore stubdom on
a hypervisor built without PV-support.

Signed-off-by: Juergen Gross <jgross@suse.com>
---
 .gitignore                     |  1 +
 stubdom/Makefile               | 31 ++++++++++++++++++++--
 stubdom/configure              | 47 ++++++++++++++++++++++++++++++++++
 stubdom/configure.ac           |  1 +
 stubdom/xenstorepvh-minios.cfg | 10 ++++++++
 5 files changed, 88 insertions(+), 2 deletions(-)
 create mode 100644 stubdom/xenstorepvh-minios.cfg

diff --git a/.gitignore b/.gitignore
index 5e8c47e2db..e7b388e31b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -91,6 +91,7 @@ stubdom/stubdompath.sh
 stubdom/tpm_emulator-*
 stubdom/vtpm/vtpm_manager.h
 stubdom/xenstore
+stubdom/xenstorepvh
 stubdom/zlib-*
 tools/*/build/lib*/*.py
 tools/autom4te.cache/
diff --git a/stubdom/Makefile b/stubdom/Makefile
index fb9617fa14..90d9ffcd9f 100644
--- a/stubdom/Makefile
+++ b/stubdom/Makefile
@@ -367,7 +367,10 @@ $(foreach lib,$(STUB_LIBS),$(eval $(call BUILD_lib,$(lib))))
 xenstore/stamp: $(XEN_ROOT)/tools/xenstore/Makefile
 	$(do_links)
 
-LINK_DIRS := xenstore $(foreach dir,$(STUB_LIBS),libs-$(XEN_TARGET_ARCH)/$(dir))
+xenstorepvh/stamp: $(XEN_ROOT)/tools/xenstore/Makefile
+	$(do_links)
+
+LINK_DIRS := xenstore xenstorepvh $(foreach dir,$(STUB_LIBS),libs-$(XEN_TARGET_ARCH)/$(dir))
 LINK_STAMPS := $(foreach dir,$(LINK_DIRS),$(dir)/stamp)
 
 mk-headers-$(XEN_TARGET_ARCH): $(IOEMU_LINKFARM_TARGET) $(LINK_STAMPS)
@@ -486,6 +489,17 @@ xenstore-minios-config.mk: $(CURDIR)/xenstore-minios.cfg
 xenstore: $(CROSS_ROOT) xenstore-minios-config.mk
 	CPPFLAGS="$(TARGET_CPPFLAGS) $(shell cat xenstore-minios-config.mk)" CFLAGS="$(TARGET_CFLAGS)" $(MAKE) DESTDIR= -C $@ xenstored.a CONFIG_STUBDOM=y
 
+#############
+# xenstorepvh
+#############
+
+xenstorepvh-minios-config.mk: $(CURDIR)/xenstorepvh-minios.cfg
+	MINIOS_CONFIG="$<" CONFIG_FILE="$(CURDIR)/$@" $(MAKE) DESTDIR= -C $(MINI_OS) config
+
+.PHONY: xenstorepvh
+xenstorepvh: $(CROSS_ROOT) xenstorepvh-minios-config.mk
+	CPPFLAGS="$(TARGET_CPPFLAGS) $(shell cat xenstorepvh-minios-config.mk)" CFLAGS="$(TARGET_CFLAGS)" $(MAKE) DESTDIR= -C $@ xenstored.a CONFIG_STUBDOM=y
+
 ########
 # minios
 ########
@@ -519,6 +533,10 @@ pv-grub: mini-os-$(XEN_TARGET_ARCH)-grub libxenguest grub
 xenstore-stubdom: mini-os-$(XEN_TARGET_ARCH)-xenstore libxenguest xenstore
 	DEF_CPPFLAGS="$(TARGET_CPPFLAGS)" DEF_CFLAGS="$(TARGET_CFLAGS)" DEF_LDFLAGS="$(TARGET_LDFLAGS)" MINIOS_CONFIG="$(CURDIR)/xenstore-minios.cfg" $(MAKE) DESTDIR= -C $(MINI_OS) OBJ_DIR=$(CURDIR)/$< APP_OBJS=$(CURDIR)/xenstore/xenstored.a
 
+.PHONY: xenstorepvh-stubdom
+xenstorepvh-stubdom: mini-os-$(XEN_TARGET_ARCH)-xenstorepvh libxenguest xenstorepvh
+	DEF_CPPFLAGS="$(TARGET_CPPFLAGS)" DEF_CFLAGS="$(TARGET_CFLAGS)" DEF_LDFLAGS="$(TARGET_LDFLAGS)" MINIOS_CONFIG="$(CURDIR)/xenstorepvh-minios.cfg" $(MAKE) DESTDIR= -C $(MINI_OS) OBJ_DIR=$(CURDIR)/$< APP_OBJS=$(CURDIR)/xenstorepvh/xenstored.a
+
 #########
 # install
 #########
@@ -548,6 +566,10 @@ install-xenstore: xenstore-stubdom
 	$(INSTALL_DIR) "$(DESTDIR)$(XENFIRMWAREDIR)"
 	$(INSTALL_DATA) mini-os-$(XEN_TARGET_ARCH)-xenstore/mini-os.gz "$(DESTDIR)$(XENFIRMWAREDIR)/xenstore-stubdom.gz"
 
+install-xenstorepvh: xenstorepvh-stubdom
+	$(INSTALL_DIR) "$(DESTDIR)$(XENFIRMWAREDIR)"
+	$(INSTALL_DATA) mini-os-$(XEN_TARGET_ARCH)-xenstorepvh/mini-os.gz "$(DESTDIR)$(XENFIRMWAREDIR)/xenstorepvh-stubdom.gz"
+
 install-vtpm: vtpm-stubdom
 	$(INSTALL_DIR) "$(DESTDIR)$(XENFIRMWAREDIR)"
 	$(INSTALL_DATA) mini-os-$(XEN_TARGET_ARCH)-vtpm/mini-os.gz "$(DESTDIR)$(XENFIRMWAREDIR)/vtpm-stubdom.gz"
@@ -581,6 +603,9 @@ uninstall-grub:
 uninstall-xenstore:
 	rm -f $(DESTDIR)$(XENFIRMWAREDIR)/xenstore-stubdom.gz
 
+uninstall-xenstorepvh:
+	rm -f $(DESTDIR)$(XENFIRMWAREDIR)/xenstorepvh-stubdom.gz
+
 uninstall-vtpm:
 	rm -f $(DESTDIR)$(XENFIRMWAREDIR)/vtpm-stubdom.gz
 
@@ -600,6 +625,7 @@ clean:
 	rm -fr mini-os-$(XEN_TARGET_ARCH)-caml
 	rm -fr mini-os-$(XEN_TARGET_ARCH)-grub
 	rm -fr mini-os-$(XEN_TARGET_ARCH)-xenstore
+	rm -fr mini-os-$(XEN_TARGET_ARCH)-xenstorepvh
 	rm -fr mini-os-$(XEN_TARGET_ARCH)-vtpm
 	rm -fr mini-os-$(XEN_TARGET_ARCH)-vtpmmgr
 	$(MAKE) DESTDIR= -C caml clean
@@ -612,6 +638,7 @@ clean:
 	rm -fr pkg-config
 	-[ ! -d ioemu ] || $(MAKE) DESTDIR= -C ioemu clean
 	-[ ! -d xenstore ] || $(MAKE) DESTDIR= -C xenstore clean
+	-[ ! -d xenstorepvh ] || $(MAKE) DESTDIR= -C xenstorepvh clean
 
 # clean the cross-compilation result
 .PHONY: crossclean
@@ -620,7 +647,7 @@ crossclean: clean
 	rm -fr newlib-$(XEN_TARGET_ARCH)
 	rm -fr zlib-$(XEN_TARGET_ARCH) pciutils-$(XEN_TARGET_ARCH)
 	rm -fr libs-$(XEN_TARGET_ARCH)
-	rm -fr ioemu xenstore
+	rm -fr ioemu xenstore xenstorepvh
 	rm -fr gmp-$(XEN_TARGET_ARCH)
 	rm -fr polarssl-$(XEN_TARGET_ARCH)
 	rm -fr openssl-$(XEN_TARGET_ARCH)
diff --git a/stubdom/configure b/stubdom/configure
index 3668203db8..903414589b 100755
--- a/stubdom/configure
+++ b/stubdom/configure
@@ -630,6 +630,7 @@ WGET
 CMAKE
 extfiles
 debug
+xenstorepvh
 xenstore
 grub
 caml
@@ -689,6 +690,7 @@ enable_c_stubdom
 enable_caml_stubdom
 enable_pv_grub
 enable_xenstore_stubdom
+enable_xenstore_pvh_stubdom
 enable_vtpm_stubdom
 enable_vtpmmgr_stubdom
 enable_qemu_traditional
@@ -1344,6 +1346,9 @@ Optional Features:
   --disable-xenstore-stubdom
                           Build and install xenstore-stubdom (default is
                           ENABLED)
+  --disable-xenstorepvh-stubdom
+                          Build and install xenstorepvh-stubdom (default is
+                          ENABLED)
   --enable-vtpm-stubdom   Build and install vtpm-stubdom
   --enable-vtpmmgr-stubdom
                           Build and install vtpmmgr-stubdom
@@ -2178,6 +2183,48 @@ fi
 
 
 
+# Check whether --enable-xenstorepvh-stubdom was given.
+if test "${enable_xenstore_pvh_stubdom+set}" = set; then :
+  enableval=$enable_xenstore_pvh_stubdom;
+
+if test "x$enableval" = "xyes"; then :
+
+
+xenstorepvh=y
+STUBDOM_TARGETS="$STUBDOM_TARGETS xenstorepvh"
+STUBDOM_BUILD="$STUBDOM_BUILD xenstorepvh-stubdom"
+STUBDOM_INSTALL="$STUBDOM_INSTALL install-xenstorepvh"
+STUBDOM_UNINSTALL="$STUBDOM_UNINSTALL install-xenstorepvh"
+
+
+else
+
+if test "x$enableval" = "xno"; then :
+
+
+xenstorepvh=n
+
+
+fi
+
+fi
+
+
+else
+
+
+xenstorepvh=y
+STUBDOM_TARGETS="$STUBDOM_TARGETS xenstorepvh"
+STUBDOM_BUILD="$STUBDOM_BUILD xenstorepvh-stubdom"
+STUBDOM_INSTALL="$STUBDOM_INSTALL install-xenstorepvh"
+STUBDOM_UNINSTALL="$STUBDOM_UNINSTALL install-xenstorepvh"
+
+
+fi
+
+
+
+
 # Check whether --enable-vtpm-stubdom was given.
 if test "${enable_vtpm_stubdom+set}" = set; then :
   enableval=$enable_vtpm_stubdom;
diff --git a/stubdom/configure.ac b/stubdom/configure.ac
index a2d514c021..bd6f765929 100644
--- a/stubdom/configure.ac
+++ b/stubdom/configure.ac
@@ -23,6 +23,7 @@ AX_STUBDOM_DEFAULT_DISABLE([c-stubdom], [c])
 AX_STUBDOM_DEFAULT_DISABLE([caml-stubdom], [caml])
 AX_STUBDOM_DEFAULT_ENABLE([pv-grub], [grub])
 AX_STUBDOM_DEFAULT_ENABLE([xenstore-stubdom], [xenstore])
+AX_STUBDOM_DEFAULT_ENABLE([xenstorepvh-stubdom], [xenstorepvh])
 AX_STUBDOM_CONDITIONAL([vtpm-stubdom], [vtpm])
 AX_STUBDOM_CONDITIONAL([vtpmmgr-stubdom], [vtpmmgr])
 
diff --git a/stubdom/xenstorepvh-minios.cfg b/stubdom/xenstorepvh-minios.cfg
new file mode 100644
index 0000000000..6af51f5753
--- /dev/null
+++ b/stubdom/xenstorepvh-minios.cfg
@@ -0,0 +1,10 @@
+CONFIG_PARAVIRT=n
+CONFIG_BLKFRONT=n
+CONFIG_NETFRONT=n
+CONFIG_FBFRONT=n
+CONFIG_KBDFRONT=n
+CONFIG_CONSFRONT=n
+CONFIG_XENBUS=n
+CONFIG_LWIP=n
+CONFIG_BALLOON=y
+XEN_INTERFACE_VERSION=__XEN_LATEST_INTERFACE_VERSION__
-- 
2.26.2



^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH 3/3] stubdom: add xenstore pvh stubdom
  2020-09-23  6:45 ` [PATCH 3/3] stubdom: add " Juergen Gross
@ 2020-09-27 16:17   ` Samuel Thibault
  2020-09-30 15:46   ` Wei Liu
  1 sibling, 0 replies; 12+ messages in thread
From: Samuel Thibault @ 2020-09-27 16:17 UTC (permalink / raw)
  To: Juergen Gross
  Cc: xen-devel, Andrew Cooper, George Dunlap, Ian Jackson,
	Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu

Juergen Gross, le mer. 23 sept. 2020 08:45:41 +0200, a ecrit:
> Add a PVH xenstore stubdom in order to support a Xenstore stubdom on
> a hypervisor built without PV-support.
> 
> Signed-off-by: Juergen Gross <jgross@suse.com>

Reviewed-by: Samuel Thibault <samuel.thibault@ens-lyon.org>

> ---
>  .gitignore                     |  1 +
>  stubdom/Makefile               | 31 ++++++++++++++++++++--
>  stubdom/configure              | 47 ++++++++++++++++++++++++++++++++++
>  stubdom/configure.ac           |  1 +
>  stubdom/xenstorepvh-minios.cfg | 10 ++++++++
>  5 files changed, 88 insertions(+), 2 deletions(-)
>  create mode 100644 stubdom/xenstorepvh-minios.cfg
> 
> diff --git a/.gitignore b/.gitignore
> index 5e8c47e2db..e7b388e31b 100644
> --- a/.gitignore
> +++ b/.gitignore
> @@ -91,6 +91,7 @@ stubdom/stubdompath.sh
>  stubdom/tpm_emulator-*
>  stubdom/vtpm/vtpm_manager.h
>  stubdom/xenstore
> +stubdom/xenstorepvh
>  stubdom/zlib-*
>  tools/*/build/lib*/*.py
>  tools/autom4te.cache/
> diff --git a/stubdom/Makefile b/stubdom/Makefile
> index fb9617fa14..90d9ffcd9f 100644
> --- a/stubdom/Makefile
> +++ b/stubdom/Makefile
> @@ -367,7 +367,10 @@ $(foreach lib,$(STUB_LIBS),$(eval $(call BUILD_lib,$(lib))))
>  xenstore/stamp: $(XEN_ROOT)/tools/xenstore/Makefile
>  	$(do_links)
>  
> -LINK_DIRS := xenstore $(foreach dir,$(STUB_LIBS),libs-$(XEN_TARGET_ARCH)/$(dir))
> +xenstorepvh/stamp: $(XEN_ROOT)/tools/xenstore/Makefile
> +	$(do_links)
> +
> +LINK_DIRS := xenstore xenstorepvh $(foreach dir,$(STUB_LIBS),libs-$(XEN_TARGET_ARCH)/$(dir))
>  LINK_STAMPS := $(foreach dir,$(LINK_DIRS),$(dir)/stamp)
>  
>  mk-headers-$(XEN_TARGET_ARCH): $(IOEMU_LINKFARM_TARGET) $(LINK_STAMPS)
> @@ -486,6 +489,17 @@ xenstore-minios-config.mk: $(CURDIR)/xenstore-minios.cfg
>  xenstore: $(CROSS_ROOT) xenstore-minios-config.mk
>  	CPPFLAGS="$(TARGET_CPPFLAGS) $(shell cat xenstore-minios-config.mk)" CFLAGS="$(TARGET_CFLAGS)" $(MAKE) DESTDIR= -C $@ xenstored.a CONFIG_STUBDOM=y
>  
> +#############
> +# xenstorepvh
> +#############
> +
> +xenstorepvh-minios-config.mk: $(CURDIR)/xenstorepvh-minios.cfg
> +	MINIOS_CONFIG="$<" CONFIG_FILE="$(CURDIR)/$@" $(MAKE) DESTDIR= -C $(MINI_OS) config
> +
> +.PHONY: xenstorepvh
> +xenstorepvh: $(CROSS_ROOT) xenstorepvh-minios-config.mk
> +	CPPFLAGS="$(TARGET_CPPFLAGS) $(shell cat xenstorepvh-minios-config.mk)" CFLAGS="$(TARGET_CFLAGS)" $(MAKE) DESTDIR= -C $@ xenstored.a CONFIG_STUBDOM=y
> +
>  ########
>  # minios
>  ########
> @@ -519,6 +533,10 @@ pv-grub: mini-os-$(XEN_TARGET_ARCH)-grub libxenguest grub
>  xenstore-stubdom: mini-os-$(XEN_TARGET_ARCH)-xenstore libxenguest xenstore
>  	DEF_CPPFLAGS="$(TARGET_CPPFLAGS)" DEF_CFLAGS="$(TARGET_CFLAGS)" DEF_LDFLAGS="$(TARGET_LDFLAGS)" MINIOS_CONFIG="$(CURDIR)/xenstore-minios.cfg" $(MAKE) DESTDIR= -C $(MINI_OS) OBJ_DIR=$(CURDIR)/$< APP_OBJS=$(CURDIR)/xenstore/xenstored.a
>  
> +.PHONY: xenstorepvh-stubdom
> +xenstorepvh-stubdom: mini-os-$(XEN_TARGET_ARCH)-xenstorepvh libxenguest xenstorepvh
> +	DEF_CPPFLAGS="$(TARGET_CPPFLAGS)" DEF_CFLAGS="$(TARGET_CFLAGS)" DEF_LDFLAGS="$(TARGET_LDFLAGS)" MINIOS_CONFIG="$(CURDIR)/xenstorepvh-minios.cfg" $(MAKE) DESTDIR= -C $(MINI_OS) OBJ_DIR=$(CURDIR)/$< APP_OBJS=$(CURDIR)/xenstorepvh/xenstored.a
> +
>  #########
>  # install
>  #########
> @@ -548,6 +566,10 @@ install-xenstore: xenstore-stubdom
>  	$(INSTALL_DIR) "$(DESTDIR)$(XENFIRMWAREDIR)"
>  	$(INSTALL_DATA) mini-os-$(XEN_TARGET_ARCH)-xenstore/mini-os.gz "$(DESTDIR)$(XENFIRMWAREDIR)/xenstore-stubdom.gz"
>  
> +install-xenstorepvh: xenstorepvh-stubdom
> +	$(INSTALL_DIR) "$(DESTDIR)$(XENFIRMWAREDIR)"
> +	$(INSTALL_DATA) mini-os-$(XEN_TARGET_ARCH)-xenstorepvh/mini-os.gz "$(DESTDIR)$(XENFIRMWAREDIR)/xenstorepvh-stubdom.gz"
> +
>  install-vtpm: vtpm-stubdom
>  	$(INSTALL_DIR) "$(DESTDIR)$(XENFIRMWAREDIR)"
>  	$(INSTALL_DATA) mini-os-$(XEN_TARGET_ARCH)-vtpm/mini-os.gz "$(DESTDIR)$(XENFIRMWAREDIR)/vtpm-stubdom.gz"
> @@ -581,6 +603,9 @@ uninstall-grub:
>  uninstall-xenstore:
>  	rm -f $(DESTDIR)$(XENFIRMWAREDIR)/xenstore-stubdom.gz
>  
> +uninstall-xenstorepvh:
> +	rm -f $(DESTDIR)$(XENFIRMWAREDIR)/xenstorepvh-stubdom.gz
> +
>  uninstall-vtpm:
>  	rm -f $(DESTDIR)$(XENFIRMWAREDIR)/vtpm-stubdom.gz
>  
> @@ -600,6 +625,7 @@ clean:
>  	rm -fr mini-os-$(XEN_TARGET_ARCH)-caml
>  	rm -fr mini-os-$(XEN_TARGET_ARCH)-grub
>  	rm -fr mini-os-$(XEN_TARGET_ARCH)-xenstore
> +	rm -fr mini-os-$(XEN_TARGET_ARCH)-xenstorepvh
>  	rm -fr mini-os-$(XEN_TARGET_ARCH)-vtpm
>  	rm -fr mini-os-$(XEN_TARGET_ARCH)-vtpmmgr
>  	$(MAKE) DESTDIR= -C caml clean
> @@ -612,6 +638,7 @@ clean:
>  	rm -fr pkg-config
>  	-[ ! -d ioemu ] || $(MAKE) DESTDIR= -C ioemu clean
>  	-[ ! -d xenstore ] || $(MAKE) DESTDIR= -C xenstore clean
> +	-[ ! -d xenstorepvh ] || $(MAKE) DESTDIR= -C xenstorepvh clean
>  
>  # clean the cross-compilation result
>  .PHONY: crossclean
> @@ -620,7 +647,7 @@ crossclean: clean
>  	rm -fr newlib-$(XEN_TARGET_ARCH)
>  	rm -fr zlib-$(XEN_TARGET_ARCH) pciutils-$(XEN_TARGET_ARCH)
>  	rm -fr libs-$(XEN_TARGET_ARCH)
> -	rm -fr ioemu xenstore
> +	rm -fr ioemu xenstore xenstorepvh
>  	rm -fr gmp-$(XEN_TARGET_ARCH)
>  	rm -fr polarssl-$(XEN_TARGET_ARCH)
>  	rm -fr openssl-$(XEN_TARGET_ARCH)
> diff --git a/stubdom/configure b/stubdom/configure
> index 3668203db8..903414589b 100755
> --- a/stubdom/configure
> +++ b/stubdom/configure
> @@ -630,6 +630,7 @@ WGET
>  CMAKE
>  extfiles
>  debug
> +xenstorepvh
>  xenstore
>  grub
>  caml
> @@ -689,6 +690,7 @@ enable_c_stubdom
>  enable_caml_stubdom
>  enable_pv_grub
>  enable_xenstore_stubdom
> +enable_xenstore_pvh_stubdom
>  enable_vtpm_stubdom
>  enable_vtpmmgr_stubdom
>  enable_qemu_traditional
> @@ -1344,6 +1346,9 @@ Optional Features:
>    --disable-xenstore-stubdom
>                            Build and install xenstore-stubdom (default is
>                            ENABLED)
> +  --disable-xenstorepvh-stubdom
> +                          Build and install xenstorepvh-stubdom (default is
> +                          ENABLED)
>    --enable-vtpm-stubdom   Build and install vtpm-stubdom
>    --enable-vtpmmgr-stubdom
>                            Build and install vtpmmgr-stubdom
> @@ -2178,6 +2183,48 @@ fi
>  
>  
>  
> +# Check whether --enable-xenstorepvh-stubdom was given.
> +if test "${enable_xenstore_pvh_stubdom+set}" = set; then :
> +  enableval=$enable_xenstore_pvh_stubdom;
> +
> +if test "x$enableval" = "xyes"; then :
> +
> +
> +xenstorepvh=y
> +STUBDOM_TARGETS="$STUBDOM_TARGETS xenstorepvh"
> +STUBDOM_BUILD="$STUBDOM_BUILD xenstorepvh-stubdom"
> +STUBDOM_INSTALL="$STUBDOM_INSTALL install-xenstorepvh"
> +STUBDOM_UNINSTALL="$STUBDOM_UNINSTALL install-xenstorepvh"
> +
> +
> +else
> +
> +if test "x$enableval" = "xno"; then :
> +
> +
> +xenstorepvh=n
> +
> +
> +fi
> +
> +fi
> +
> +
> +else
> +
> +
> +xenstorepvh=y
> +STUBDOM_TARGETS="$STUBDOM_TARGETS xenstorepvh"
> +STUBDOM_BUILD="$STUBDOM_BUILD xenstorepvh-stubdom"
> +STUBDOM_INSTALL="$STUBDOM_INSTALL install-xenstorepvh"
> +STUBDOM_UNINSTALL="$STUBDOM_UNINSTALL install-xenstorepvh"
> +
> +
> +fi
> +
> +
> +
> +
>  # Check whether --enable-vtpm-stubdom was given.
>  if test "${enable_vtpm_stubdom+set}" = set; then :
>    enableval=$enable_vtpm_stubdom;
> diff --git a/stubdom/configure.ac b/stubdom/configure.ac
> index a2d514c021..bd6f765929 100644
> --- a/stubdom/configure.ac
> +++ b/stubdom/configure.ac
> @@ -23,6 +23,7 @@ AX_STUBDOM_DEFAULT_DISABLE([c-stubdom], [c])
>  AX_STUBDOM_DEFAULT_DISABLE([caml-stubdom], [caml])
>  AX_STUBDOM_DEFAULT_ENABLE([pv-grub], [grub])
>  AX_STUBDOM_DEFAULT_ENABLE([xenstore-stubdom], [xenstore])
> +AX_STUBDOM_DEFAULT_ENABLE([xenstorepvh-stubdom], [xenstorepvh])
>  AX_STUBDOM_CONDITIONAL([vtpm-stubdom], [vtpm])
>  AX_STUBDOM_CONDITIONAL([vtpmmgr-stubdom], [vtpmmgr])
>  
> diff --git a/stubdom/xenstorepvh-minios.cfg b/stubdom/xenstorepvh-minios.cfg
> new file mode 100644
> index 0000000000..6af51f5753
> --- /dev/null
> +++ b/stubdom/xenstorepvh-minios.cfg
> @@ -0,0 +1,10 @@
> +CONFIG_PARAVIRT=n
> +CONFIG_BLKFRONT=n
> +CONFIG_NETFRONT=n
> +CONFIG_FBFRONT=n
> +CONFIG_KBDFRONT=n
> +CONFIG_CONSFRONT=n
> +CONFIG_XENBUS=n
> +CONFIG_LWIP=n
> +CONFIG_BALLOON=y
> +XEN_INTERFACE_VERSION=__XEN_LATEST_INTERFACE_VERSION__
> -- 
> 2.26.2
> 


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/3] tools/init-xenstore-domain: add logging
  2020-09-23  6:45 ` [PATCH 1/3] tools/init-xenstore-domain: add logging Juergen Gross
@ 2020-09-30 15:40   ` Wei Liu
  0 siblings, 0 replies; 12+ messages in thread
From: Wei Liu @ 2020-09-30 15:40 UTC (permalink / raw)
  To: Juergen Gross; +Cc: xen-devel, Ian Jackson, Wei Liu

On Wed, Sep 23, 2020 at 08:45:39AM +0200, Juergen Gross wrote:
> Add a possibility to do logging in init-xenstore-domain: use -v[...]
> for selecting the log-level as in xl, log to stderr.
> 
> Signed-off-by: Juergen Gross <jgross@suse.com>

Acked-by: Wei Liu <wl@xen.org>


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 2/3] tools/init-xenstore-domain: support xenstore pvh stubdom
  2020-09-23  6:45 ` [PATCH 2/3] tools/init-xenstore-domain: support xenstore pvh stubdom Juergen Gross
@ 2020-09-30 15:46   ` Wei Liu
  2020-10-01 10:40     ` Jürgen Groß
  2020-10-07  6:54     ` Jürgen Groß
  0 siblings, 2 replies; 12+ messages in thread
From: Wei Liu @ 2020-09-30 15:46 UTC (permalink / raw)
  To: Juergen Gross; +Cc: xen-devel, Ian Jackson, Wei Liu

On Wed, Sep 23, 2020 at 08:45:40AM +0200, Juergen Gross wrote:
> Instead of creating the xenstore-stubdom domain first and parsing the
> kernel later do it the other way round. This enables to probe for the
> domain type supported by the xenstore-stubdom and to support both, pv
> and pvh type stubdoms.
> 
> Try to parse the stubdom image first for PV support, if this fails use
> HVM. Then create the domain with the appropriate type selected.
> 
> Signed-off-by: Juergen Gross <jgross@suse.com>
[...]
> +    dom->container_type = XC_DOM_HVM_CONTAINER;
> +    rv = xc_dom_parse_image(dom);
> +    if ( rv )
> +    {
> +        dom->container_type = XC_DOM_PV_CONTAINER;
> +        rv = xc_dom_parse_image(dom);
> +        if ( rv )
> +        {
> +            fprintf(stderr, "xc_dom_parse_image failed\n");
> +            goto err;
> +        }
> +    }
> +    else
> +    {
> +        config.flags |= XEN_DOMCTL_CDF_hvm | XEN_DOMCTL_CDF_hap;
> +        config.arch.emulation_flags = XEN_X86_EMU_LAPIC;
> +        dom->target_pages = mem_size >> XC_PAGE_SHIFT;
> +        dom->mmio_size = GB(4) - LAPIC_BASE_ADDRESS;
> +        dom->lowmem_end = (mem_size > LAPIC_BASE_ADDRESS) ?
> +                          LAPIC_BASE_ADDRESS : mem_size;
> +        dom->highmem_end = (mem_size > LAPIC_BASE_ADDRESS) ?
> +                           GB(4) + mem_size - LAPIC_BASE_ADDRESS : 0;
> +        dom->mmio_start = LAPIC_BASE_ADDRESS;
> +        dom->max_vcpus = 1;
> +        e820[0].addr = 0;
> +        e820[0].size = dom->lowmem_end;
> +        e820[0].type = E820_RAM;
> +        e820[1].addr = LAPIC_BASE_ADDRESS;
> +        e820[1].size = dom->mmio_size;
> +        e820[1].type = E820_RESERVED;
> +        e820[2].addr = GB(4);
> +        e820[2].size = dom->highmem_end - GB(4);

Do you not want to check if highmem_end is larger than GB(4) before
putting in this region?

> +        e820[2].type = E820_RAM;
> +    }

This hardcoded e820 map doesn't seem very flexible, but we
control the guest kernel anyway so I think this should be fine.

The rest of this patch looks okay to me.

Wei.


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 3/3] stubdom: add xenstore pvh stubdom
  2020-09-23  6:45 ` [PATCH 3/3] stubdom: add " Juergen Gross
  2020-09-27 16:17   ` Samuel Thibault
@ 2020-09-30 15:46   ` Wei Liu
  1 sibling, 0 replies; 12+ messages in thread
From: Wei Liu @ 2020-09-30 15:46 UTC (permalink / raw)
  To: Juergen Gross
  Cc: xen-devel, Andrew Cooper, George Dunlap, Ian Jackson,
	Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu,
	Samuel Thibault

On Wed, Sep 23, 2020 at 08:45:41AM +0200, Juergen Gross wrote:
> Add a PVH xenstore stubdom in order to support a Xenstore stubdom on
> a hypervisor built without PV-support.
> 
> Signed-off-by: Juergen Gross <jgross@suse.com>

Acked-by: Wei Liu <wl@xen.org>

Note to self: may need to regenerate stubdom/configure.


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 2/3] tools/init-xenstore-domain: support xenstore pvh stubdom
  2020-09-30 15:46   ` Wei Liu
@ 2020-10-01 10:40     ` Jürgen Groß
  2020-10-07  6:54     ` Jürgen Groß
  1 sibling, 0 replies; 12+ messages in thread
From: Jürgen Groß @ 2020-10-01 10:40 UTC (permalink / raw)
  To: Wei Liu; +Cc: xen-devel, Ian Jackson

On 30.09.20 17:46, Wei Liu wrote:
> On Wed, Sep 23, 2020 at 08:45:40AM +0200, Juergen Gross wrote:
>> Instead of creating the xenstore-stubdom domain first and parsing the
>> kernel later do it the other way round. This enables to probe for the
>> domain type supported by the xenstore-stubdom and to support both, pv
>> and pvh type stubdoms.
>>
>> Try to parse the stubdom image first for PV support, if this fails use
>> HVM. Then create the domain with the appropriate type selected.
>>
>> Signed-off-by: Juergen Gross <jgross@suse.com>
> [...]
>> +    dom->container_type = XC_DOM_HVM_CONTAINER;
>> +    rv = xc_dom_parse_image(dom);
>> +    if ( rv )
>> +    {
>> +        dom->container_type = XC_DOM_PV_CONTAINER;
>> +        rv = xc_dom_parse_image(dom);
>> +        if ( rv )
>> +        {
>> +            fprintf(stderr, "xc_dom_parse_image failed\n");
>> +            goto err;
>> +        }
>> +    }
>> +    else
>> +    {
>> +        config.flags |= XEN_DOMCTL_CDF_hvm | XEN_DOMCTL_CDF_hap;
>> +        config.arch.emulation_flags = XEN_X86_EMU_LAPIC;
>> +        dom->target_pages = mem_size >> XC_PAGE_SHIFT;
>> +        dom->mmio_size = GB(4) - LAPIC_BASE_ADDRESS;
>> +        dom->lowmem_end = (mem_size > LAPIC_BASE_ADDRESS) ?
>> +                          LAPIC_BASE_ADDRESS : mem_size;
>> +        dom->highmem_end = (mem_size > LAPIC_BASE_ADDRESS) ?
>> +                           GB(4) + mem_size - LAPIC_BASE_ADDRESS : 0;
>> +        dom->mmio_start = LAPIC_BASE_ADDRESS;
>> +        dom->max_vcpus = 1;
>> +        e820[0].addr = 0;
>> +        e820[0].size = dom->lowmem_end;
>> +        e820[0].type = E820_RAM;
>> +        e820[1].addr = LAPIC_BASE_ADDRESS;
>> +        e820[1].size = dom->mmio_size;
>> +        e820[1].type = E820_RESERVED;
>> +        e820[2].addr = GB(4);
>> +        e820[2].size = dom->highmem_end - GB(4);
> 
> Do you not want to check if highmem_end is larger than GB(4) before
> putting in this region?

Oh, indeed I should.

> 
>> +        e820[2].type = E820_RAM;
>> +    }
> 
> This hardcoded e820 map doesn't seem very flexible, but we
> control the guest kernel anyway so I think this should be fine.
> 
> The rest of this patch looks okay to me.

Thanks.


Juergen



^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 2/3] tools/init-xenstore-domain: support xenstore pvh stubdom
  2020-09-30 15:46   ` Wei Liu
  2020-10-01 10:40     ` Jürgen Groß
@ 2020-10-07  6:54     ` Jürgen Groß
  2020-10-07 10:34       ` Wei Liu
  1 sibling, 1 reply; 12+ messages in thread
From: Jürgen Groß @ 2020-10-07  6:54 UTC (permalink / raw)
  To: Wei Liu; +Cc: xen-devel, Ian Jackson

On 30.09.20 17:46, Wei Liu wrote:
> On Wed, Sep 23, 2020 at 08:45:40AM +0200, Juergen Gross wrote:
>> Instead of creating the xenstore-stubdom domain first and parsing the
>> kernel later do it the other way round. This enables to probe for the
>> domain type supported by the xenstore-stubdom and to support both, pv
>> and pvh type stubdoms.
>>
>> Try to parse the stubdom image first for PV support, if this fails use
>> HVM. Then create the domain with the appropriate type selected.
>>
>> Signed-off-by: Juergen Gross <jgross@suse.com>
> [...]
>> +    dom->container_type = XC_DOM_HVM_CONTAINER;
>> +    rv = xc_dom_parse_image(dom);
>> +    if ( rv )
>> +    {
>> +        dom->container_type = XC_DOM_PV_CONTAINER;
>> +        rv = xc_dom_parse_image(dom);
>> +        if ( rv )
>> +        {
>> +            fprintf(stderr, "xc_dom_parse_image failed\n");
>> +            goto err;
>> +        }
>> +    }
>> +    else
>> +    {
>> +        config.flags |= XEN_DOMCTL_CDF_hvm | XEN_DOMCTL_CDF_hap;
>> +        config.arch.emulation_flags = XEN_X86_EMU_LAPIC;
>> +        dom->target_pages = mem_size >> XC_PAGE_SHIFT;
>> +        dom->mmio_size = GB(4) - LAPIC_BASE_ADDRESS;
>> +        dom->lowmem_end = (mem_size > LAPIC_BASE_ADDRESS) ?
>> +                          LAPIC_BASE_ADDRESS : mem_size;
>> +        dom->highmem_end = (mem_size > LAPIC_BASE_ADDRESS) ?
>> +                           GB(4) + mem_size - LAPIC_BASE_ADDRESS : 0;
>> +        dom->mmio_start = LAPIC_BASE_ADDRESS;
>> +        dom->max_vcpus = 1;
>> +        e820[0].addr = 0;
>> +        e820[0].size = dom->lowmem_end;
>> +        e820[0].type = E820_RAM;
>> +        e820[1].addr = LAPIC_BASE_ADDRESS;
>> +        e820[1].size = dom->mmio_size;
>> +        e820[1].type = E820_RESERVED;
>> +        e820[2].addr = GB(4);
>> +        e820[2].size = dom->highmem_end - GB(4);
> 
> Do you not want to check if highmem_end is larger than GB(4) before
> putting in this region?

Oh, just realized: further down I'm setting the guest's map with either
2 or 3 entries depending on dom->highmem_end value.

So I think this is fine.


Juergen



^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 2/3] tools/init-xenstore-domain: support xenstore pvh stubdom
  2020-10-07  6:54     ` Jürgen Groß
@ 2020-10-07 10:34       ` Wei Liu
  0 siblings, 0 replies; 12+ messages in thread
From: Wei Liu @ 2020-10-07 10:34 UTC (permalink / raw)
  To: Jürgen Groß; +Cc: Wei Liu, xen-devel, Ian Jackson

On Wed, Oct 07, 2020 at 08:54:43AM +0200, Jürgen Groß wrote:
> On 30.09.20 17:46, Wei Liu wrote:
> > On Wed, Sep 23, 2020 at 08:45:40AM +0200, Juergen Gross wrote:
> > > Instead of creating the xenstore-stubdom domain first and parsing the
> > > kernel later do it the other way round. This enables to probe for the
> > > domain type supported by the xenstore-stubdom and to support both, pv
> > > and pvh type stubdoms.
> > > 
> > > Try to parse the stubdom image first for PV support, if this fails use
> > > HVM. Then create the domain with the appropriate type selected.
> > > 
> > > Signed-off-by: Juergen Gross <jgross@suse.com>
> > [...]
> > > +    dom->container_type = XC_DOM_HVM_CONTAINER;
> > > +    rv = xc_dom_parse_image(dom);
> > > +    if ( rv )
> > > +    {
> > > +        dom->container_type = XC_DOM_PV_CONTAINER;
> > > +        rv = xc_dom_parse_image(dom);
> > > +        if ( rv )
> > > +        {
> > > +            fprintf(stderr, "xc_dom_parse_image failed\n");
> > > +            goto err;
> > > +        }
> > > +    }
> > > +    else
> > > +    {
> > > +        config.flags |= XEN_DOMCTL_CDF_hvm | XEN_DOMCTL_CDF_hap;
> > > +        config.arch.emulation_flags = XEN_X86_EMU_LAPIC;
> > > +        dom->target_pages = mem_size >> XC_PAGE_SHIFT;
> > > +        dom->mmio_size = GB(4) - LAPIC_BASE_ADDRESS;
> > > +        dom->lowmem_end = (mem_size > LAPIC_BASE_ADDRESS) ?
> > > +                          LAPIC_BASE_ADDRESS : mem_size;
> > > +        dom->highmem_end = (mem_size > LAPIC_BASE_ADDRESS) ?
> > > +                           GB(4) + mem_size - LAPIC_BASE_ADDRESS : 0;
> > > +        dom->mmio_start = LAPIC_BASE_ADDRESS;
> > > +        dom->max_vcpus = 1;
> > > +        e820[0].addr = 0;
> > > +        e820[0].size = dom->lowmem_end;
> > > +        e820[0].type = E820_RAM;
> > > +        e820[1].addr = LAPIC_BASE_ADDRESS;
> > > +        e820[1].size = dom->mmio_size;
> > > +        e820[1].type = E820_RESERVED;
> > > +        e820[2].addr = GB(4);
> > > +        e820[2].size = dom->highmem_end - GB(4);
> > 
> > Do you not want to check if highmem_end is larger than GB(4) before
> > putting in this region?
> 
> Oh, just realized: further down I'm setting the guest's map with either
> 2 or 3 entries depending on dom->highmem_end value.
> 
> So I think this is fine.
> 

Fair enough.

Acked-by: Wei Liu <wl@xen.org>

Wei.

> 
> Juergen
> 


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 0/3] stubdom: add xenstore pvh stubdom support
  2020-09-23  6:45 [PATCH 0/3] stubdom: add xenstore pvh stubdom support Juergen Gross
                   ` (2 preceding siblings ...)
  2020-09-23  6:45 ` [PATCH 3/3] stubdom: add " Juergen Gross
@ 2020-10-14 12:44 ` Jürgen Groß
  3 siblings, 0 replies; 12+ messages in thread
From: Jürgen Groß @ 2020-10-14 12:44 UTC (permalink / raw)
  To: xen-devel
  Cc: Ian Jackson, Wei Liu, Andrew Cooper, George Dunlap, Jan Beulich,
	Julien Grall, Stefano Stabellini, Samuel Thibault

On 23.09.20 08:45, Juergen Gross wrote:
> Add support for creating a PVH Xenstore stub-domain.
> 
> This includes building the stubdom and loading it at system boot.
> 
> It should be noted that currently this stubdom is not in a working
> state as there is some support in Mini-OS missing. I'm working on
> adding this support.
> 
> Juergen Gross (3):
>    tools/init-xenstore-domain: add logging
>    tools/init-xenstore-domain: support xenstore pvh stubdom
>    stubdom: add xenstore pvh stubdom
> 
>   .gitignore                           |   1 +
>   stubdom/Makefile                     |  31 ++++-
>   stubdom/configure                    |  47 ++++++++
>   stubdom/configure.ac                 |   1 +
>   stubdom/xenstorepvh-minios.cfg       |  10 ++
>   tools/helpers/init-xenstore-domain.c | 170 ++++++++++++++++++++-------
>   6 files changed, 213 insertions(+), 47 deletions(-)
>   create mode 100644 stubdom/xenstorepvh-minios.cfg
> 

Anything missing for this series to be committed?


Juergen


^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2020-10-14 12:44 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-23  6:45 [PATCH 0/3] stubdom: add xenstore pvh stubdom support Juergen Gross
2020-09-23  6:45 ` [PATCH 1/3] tools/init-xenstore-domain: add logging Juergen Gross
2020-09-30 15:40   ` Wei Liu
2020-09-23  6:45 ` [PATCH 2/3] tools/init-xenstore-domain: support xenstore pvh stubdom Juergen Gross
2020-09-30 15:46   ` Wei Liu
2020-10-01 10:40     ` Jürgen Groß
2020-10-07  6:54     ` Jürgen Groß
2020-10-07 10:34       ` Wei Liu
2020-09-23  6:45 ` [PATCH 3/3] stubdom: add " Juergen Gross
2020-09-27 16:17   ` Samuel Thibault
2020-09-30 15:46   ` Wei Liu
2020-10-14 12:44 ` [PATCH 0/3] stubdom: add xenstore pvh stubdom support Jürgen Groß

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.