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

Re: [Xen-devel] ARM: Adjusting guest memory size through xl mem-{set|max} fails



On Wed, Jul 19, 2017 at 11:40:19AM +0200, Sergej Proskurin wrote:
> Hi Wei,
> 
> 
> On 07/18/2017 01:16 PM, Wei Liu wrote:
> > On Mon, Jul 17, 2017 at 06:19:09PM +0200, Sergej Proskurin wrote:
> >> Hi Julien,
> >>
> >>
> >> On 07/17/2017 03:53 PM, Julien Grall wrote:
> >>> (+Wei and Ian)
> >>>
> >>> Hi Sergej
> >>>
> >>> On 17/07/17 13:04, Sergej Proskurin wrote:
> >>>> Hi all,
> >>>>
> >>>> My setup comprises an ARMv7 (Arndale, Linux kernel v4.11.6) and an ARMv8
> >>>> (LeMaker HiKey, Linux kernel v4.9.0) development board. On both boards,
> >>>> I have Xen version 4.10-unstable running with the associated tools to
> >>>> manage a domu.
> >>>>
> >>>> Currently, I am trying to get xl mem-{set|max} to work on both
> >>>> architectures. Unfortunately, both command invocations fail with the
> >>>> following message (I remember using xl mem-{set|max} on ARMv7 before
> >>>> with Xen version 4.7 and 4.8):
> >>>>
> >>>> ---
> >>>> xl: libxl.c:339: libxl_defbool_val: Assertion
> >>>> `!libxl_defbool_is_default(db)' failed.
> >>>> Aborted
> >>>> ---
> >>> I haven't myself tried to use xl mem-{set|max}. Looking at the assert,
> >>> you hit because a boolean is not initialized. It would be interesting
> >>> to know which one.
> >>>
> >>> I have CCed the tools maintainers to get more feedback.
> >>>
> > Can you provide a backtrace?
> >
> > $ ulimit -c unlimited
> > $ xl mem-set
> >
> > That should generate a coredump, on which you can use gdb to get a
> > backtrace.
> 
> I get the following core dumps on ARMv8:
> 
> ---
> (gdb) bt
> #0  0x0000ffffacb509e8 in __GI_raise (sig=sig@entry=6)
>     at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
> #1  0x0000ffffacb51cf0 in __GI_abort () at abort.c:89
> #2  0x0000ffffacb4a3b8 in __assert_fail_base (
>     fmt=0xffffacc376f0 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n",
>     assertion=assertion@entry=0xffffacd76c38
> "!libxl_defbool_is_default(db)",
>     file=file@entry=0xffffacd769e0 "libxl.c", line=line@entry=339,
> function=<optimized out>)
>     at assert.c:92
> #3  0x0000ffffacb4a470 in __GI___assert_fail (
>     assertion=0xffffacd76c38 "!libxl_defbool_is_default(db)",
> file=0xffffacd769e0 "libxl.c",
>     line=339, function=<optimized out>) at assert.c:101
> #4  0x0000ffffacce13f8 in libxl_defbool_val (db=...) at libxl.c:339
> #5  0x0000ffffacd490f8 in libxl__arch_extra_memory (gc=0xffffc5d47790,
> info=0xffffc5d472b0,
>     out=0xffffc5d47788) at libxl_arm.c:116
> #6  0x0000ffffacd39764 in libxl_set_memory_target (ctx=0xaaab014bf050,
> domid=1,
>     target_memkb=522240, relative=0, enforce=1) at libxl_mem.c:206
> #7  0x0000aaaac5f86abc in set_memory_target (domid=1, mem=0xffffc5d47e64
> "510m") at xl_mem.c:69
> #8  0x0000aaaac5f86bac in main_memset (argc=3, argv=0xffffc5d47a20) at
> xl_mem.c:90
> #9  0x0000aaaac5f72528 in main (argc=3, argv=0xffffc5d47a20) at xl.c:369
> (gdb)
> ---
> 
> As far as I understand, the problem seems to be in libxl_arm.c:116,
> checking for info->acpi.
> 
> According to docs/man/xl.cfg.pod.5.in, the ACPI option is true for x86
> while it's false for ARM by default. By setting acpi = 1 in domu.cfg,
> the previous error disappears, yet I get the following error:
> 
> ---
> root@avocet:~# xl mem-set 2 510m
> libxl: error: libxl_arm_acpi.c:89:libxl__estimate_madt_size: Unknown GIC
> version

 
Can you give this a try?

---8<---
From bc3d96fa10e9eae7d9af92be66eb6b89b4c86a53 Mon Sep 17 00:00:00 2001
From: Wei Liu <wei.liu2@xxxxxxxxxx>
Date: Wed, 19 Jul 2017 11:19:15 +0100
Subject: [PATCH] libxl: introduce arch domain configuration save function

It appears that we should save the ARM GIC version and the ACPI config
in the saved guest config file so that we can reference them later.

Introduce an arch domain configuration save helper and fill that in
for ARM.

Reported-by: Sergej Proskurin <proskurin@xxxxxxxxxxxxx>
Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx>
---
Not even compile tested on ARM...
---
 tools/libxl/libxl_arch.h     |  5 +++++
 tools/libxl/libxl_arm.c      | 12 ++++++++++++
 tools/libxl/libxl_internal.c |  3 +++
 tools/libxl/libxl_x86.c      |  6 ++++++
 4 files changed, 26 insertions(+)

diff --git a/tools/libxl/libxl_arch.h b/tools/libxl/libxl_arch.h
index 5e1fc6060e..a300707a23 100644
--- a/tools/libxl/libxl_arch.h
+++ b/tools/libxl/libxl_arch.h
@@ -71,6 +71,11 @@ int libxl__arch_extra_memory(libxl__gc *gc,
                              const libxl_domain_build_info *info,
                              uint64_t *out);
 
+_hidden
+void libxl__arch_update_domain_configuration(libxl__gc *gc,
+                                             libxl_domain_config *dst,
+                                             const libxl_domain_config *src);
+
 #if defined(__i386__) || defined(__x86_64__)
 
 #define LAPIC_BASE_ADDRESS  0xfee00000
diff --git a/tools/libxl/libxl_arm.c b/tools/libxl/libxl_arm.c
index 8dd798bfdb..738f95be98 100644
--- a/tools/libxl/libxl_arm.c
+++ b/tools/libxl/libxl_arm.c
@@ -1067,6 +1067,18 @@ void libxl__arch_domain_build_info_acpi_setdefault(
     libxl_defbool_setdefault(&b_info->acpi, false);
 }
 
+void libxl__arch_update_domain_configuration(libxl__gc *gc,
+                                             libxl_domain_config *dst,
+                                             const libxl_domain_config *src)
+{
+    dst->b_info.arch_arm.gic_version = src->b_info.arch_arm.gic_version;
+
+    if (!libxl_defbool_is_default(src->b_info.acpi)) {
+        bool val = libxl_defbool_val(src->b_info.acpi);
+        libxl_defbool_set(&dst->b_info.acpi, val);
+    }
+}
+
 /*
  * Local variables:
  * mode: C
diff --git a/tools/libxl/libxl_internal.c b/tools/libxl/libxl_internal.c
index f492dae5ff..4b11ff47ff 100644
--- a/tools/libxl/libxl_internal.c
+++ b/tools/libxl/libxl_internal.c
@@ -16,6 +16,7 @@
 #include "libxl_osdeps.h" /* must come before any other headers */
 
 #include "libxl_internal.h"
+#include "libxl_arch.h"
 
 void libxl__alloc_failed(libxl_ctx *ctx, const char *func,
                          size_t nmemb, size_t size) {
@@ -573,6 +574,8 @@ void libxl__update_domain_configuration(libxl__gc *gc,
 
     /* video ram */
     dst->b_info.video_memkb = src->b_info.video_memkb;
+
+    libxl__arch_update_domain_configuration(gc, dst, src);
 }
 
 /*
diff --git a/tools/libxl/libxl_x86.c b/tools/libxl/libxl_x86.c
index 455f6f0bed..c2a0185b82 100644
--- a/tools/libxl/libxl_x86.c
+++ b/tools/libxl/libxl_x86.c
@@ -587,6 +587,12 @@ void libxl__arch_domain_build_info_acpi_setdefault(
     libxl_defbool_setdefault(&b_info->acpi, true);
 }
 
+void libxl__arch_update_domain_configuration(libxl__gc *gc,
+                                             libxl_domain_config *dst,
+                                             const libxl_domain_config *src)
+{
+}
+
 /*
  * Local variables:
  * mode: C
-- 
2.11.0


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

 


Rackspace

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