|
[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
Hi Wei,
On 07/19/2017 12:22 PM, Wei Liu wrote:
> 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
Yeap, that did it! At least for mem-set on ARMv8.
However, I discovered that mem-max does not yet work entirely:
---
root@avocet:~# xl list
Name ID Mem VCPUs State
Time(s)
Domain-0 0 1024 6
r----- 38.9
domu1 1 511 2
-b---- 0.3
root@avocet:~# xl mem-max 1 550m
root@avocet:~# xl mem-set 1 520m
libxl: error: libxl_mem.c:272:libxl_set_memory_target: Domain
1:memory_dynamic_max must be less than or equal to memory_static_max
cannot set domid 1 dynamic max memory to : 520m
---
According to the error messages from above, I assume this patch will not
fix the issues on ARMv7 yet, right?
Thanks so far :)
Cheers,
~Sergej
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |