[PATCH v1 08/12] libxl: add API wrapper for libxl_get_free_memory

Olaf Hering posted 12 patches 4 years, 10 months ago
There is a newer version of this series
[PATCH v1 08/12] libxl: add API wrapper for libxl_get_free_memory
Posted by Olaf Hering 4 years, 10 months ago
Upcoming changes will use different LIBXL_API_VERSION variants.

Prepare libxl_get_free_memory, which changed storage size of parameter
"memkb" in Xen 4.8.

No functional change intended.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
 src/libxl/libxl_api.h    | 19 +++++++++++++++++++
 src/libxl/libxl_conf.c   |  5 +++--
 src/libxl/libxl_domain.c |  4 ++--
 tests/libxlmock.c        |  7 ++++++-
 4 files changed, 30 insertions(+), 5 deletions(-)

diff --git a/src/libxl/libxl_api.h b/src/libxl/libxl_api.h
index 5c1545c3c0..1c13781ae6 100644
--- a/src/libxl/libxl_api.h
+++ b/src/libxl/libxl_api.h
@@ -138,3 +138,22 @@ Libxl_Domain_Need_Memory(libxl_ctx *ctx,
 
     return ret;
 }
+
+static inline int
+Libxl_Get_Free_Memory(libxl_ctx *ctx, uint64_t *memkb)
+{
+    int ret;
+
+#if LIBXL_API_VERSION < 0x040800
+    {
+        uint32_t val32 = 0;
+
+        ret = libxl_get_free_memory(ctx, &val32);
+        *memkb = val32;
+    }
+#else
+    ret = libxl_get_free_memory(ctx, memkb);
+#endif
+
+    return ret;
+}
diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c
index 4b6a7e6096..74551ff804 100644
--- a/src/libxl/libxl_conf.c
+++ b/src/libxl/libxl_conf.c
@@ -36,6 +36,7 @@
 #include "viruuid.h"
 #include "vircommand.h"
 #include "virsocketaddr.h"
+#include "libxl_api.h"
 #include "libxl_domain.h"
 #include "libxl_conf.h"
 #include "libxl_utils.h"
@@ -1785,7 +1786,7 @@ libxlDriverConfigNew(void)
 int
 libxlDriverConfigInit(libxlDriverConfigPtr cfg)
 {
-    unsigned int free_mem;
+    uint64_t free_mem;
 
     if (g_mkdir_with_parents(cfg->logDir, 0777) < 0) {
         virReportError(VIR_ERR_INTERNAL_ERROR,
@@ -1817,7 +1818,7 @@ libxlDriverConfigInit(libxlDriverConfigPtr cfg)
 
     /* This will fill xenstore info about free and dom0 memory if missing,
      * should be called before starting first domain */
-    if (libxl_get_free_memory(cfg->ctx, &free_mem)) {
+    if (Libxl_Get_Free_Memory(cfg->ctx, &free_mem)) {
         VIR_ERROR(_("Unable to configure libxl's memory management parameters"));
         return -1;
     }
diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c
index 337764b5c7..264a730c6c 100644
--- a/src/libxl/libxl_domain.c
+++ b/src/libxl/libxl_domain.c
@@ -1009,7 +1009,7 @@ static int
 libxlDomainFreeMem(libxl_ctx *ctx, libxl_domain_config *d_config)
 {
     uint64_t needed_mem;
-    uint32_t free_mem;
+    uint64_t free_mem;
     int32_t target_mem;
     int tries = 3;
     int wait_secs = 10;
@@ -1018,7 +1018,7 @@ libxlDomainFreeMem(libxl_ctx *ctx, libxl_domain_config *d_config)
         goto error;
 
     do {
-        if (libxl_get_free_memory(ctx, &free_mem) < 0)
+        if (Libxl_Get_Free_Memory(ctx, &free_mem) < 0)
             goto error;
 
         if (free_mem >= needed_mem)
diff --git a/tests/libxlmock.c b/tests/libxlmock.c
index a36ca135f6..7a43f9196b 100644
--- a/tests/libxlmock.c
+++ b/tests/libxlmock.c
@@ -67,7 +67,12 @@ VIR_MOCK_IMPL_RET_ARGS(libxl_get_version_info,
 VIR_MOCK_STUB_RET_ARGS(libxl_get_free_memory,
                        int, 0,
                        libxl_ctx *, ctx,
-                       uint32_t *, memkb);
+#if LIBXL_API_VERSION < 0x040800
+                       uint32_t *,
+#else
+                       uint64_t *,
+#endif
+                       memkb);
 
 VIR_MOCK_STUB_RET_ARGS(xc_interface_close,
                        int, 0,

Re: [PATCH v1 08/12] libxl: add API wrapper for libxl_get_free_memory
Posted by Jim Fehlig 4 years, 10 months ago
On 3/17/21 4:57 AM, Olaf Hering wrote:
> Upcoming changes will use different LIBXL_API_VERSION variants.
> 
> Prepare libxl_get_free_memory, which changed storage size of parameter
> "memkb" in Xen 4.8.
> 
> No functional change intended.
> 
> Signed-off-by: Olaf Hering <olaf@aepfle.de>
> ---
>   src/libxl/libxl_api.h    | 19 +++++++++++++++++++
>   src/libxl/libxl_conf.c   |  5 +++--
>   src/libxl/libxl_domain.c |  4 ++--
>   tests/libxlmock.c        |  7 ++++++-
>   4 files changed, 30 insertions(+), 5 deletions(-)
> 
> diff --git a/src/libxl/libxl_api.h b/src/libxl/libxl_api.h
> index 5c1545c3c0..1c13781ae6 100644
> --- a/src/libxl/libxl_api.h
> +++ b/src/libxl/libxl_api.h
> @@ -138,3 +138,22 @@ Libxl_Domain_Need_Memory(libxl_ctx *ctx,
>   
>       return ret;
>   }
> +
> +static inline int
> +Libxl_Get_Free_Memory(libxl_ctx *ctx, uint64_t *memkb)
> +{
> +    int ret;
> +
> +#if LIBXL_API_VERSION < 0x040800
> +    {
> +        uint32_t val32 = 0;
> +
> +        ret = libxl_get_free_memory(ctx, &val32);
> +        *memkb = val32;
> +    }
> +#else
> +    ret = libxl_get_free_memory(ctx, memkb);
> +#endif
> +
> +    return ret;
> +}
> diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c
> index 4b6a7e6096..74551ff804 100644
> --- a/src/libxl/libxl_conf.c
> +++ b/src/libxl/libxl_conf.c
> @@ -36,6 +36,7 @@
>   #include "viruuid.h"
>   #include "vircommand.h"
>   #include "virsocketaddr.h"
> +#include "libxl_api.h"
>   #include "libxl_domain.h"
>   #include "libxl_conf.h"
>   #include "libxl_utils.h"
> @@ -1785,7 +1786,7 @@ libxlDriverConfigNew(void)
>   int
>   libxlDriverConfigInit(libxlDriverConfigPtr cfg)
>   {
> -    unsigned int free_mem;
> +    uint64_t free_mem;
>   
>       if (g_mkdir_with_parents(cfg->logDir, 0777) < 0) {
>           virReportError(VIR_ERR_INTERNAL_ERROR,
> @@ -1817,7 +1818,7 @@ libxlDriverConfigInit(libxlDriverConfigPtr cfg)
>   
>       /* This will fill xenstore info about free and dom0 memory if missing,
>        * should be called before starting first domain */
> -    if (libxl_get_free_memory(cfg->ctx, &free_mem)) {
> +    if (Libxl_Get_Free_Memory(cfg->ctx, &free_mem)) {
>           VIR_ERROR(_("Unable to configure libxl's memory management parameters"));
>           return -1;
>       }
> diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c
> index 337764b5c7..264a730c6c 100644
> --- a/src/libxl/libxl_domain.c
> +++ b/src/libxl/libxl_domain.c
> @@ -1009,7 +1009,7 @@ static int
>   libxlDomainFreeMem(libxl_ctx *ctx, libxl_domain_config *d_config)
>   {
>       uint64_t needed_mem;
> -    uint32_t free_mem;
> +    uint64_t free_mem;
>       int32_t target_mem;
>       int tries = 3;
>       int wait_secs = 10;
> @@ -1018,7 +1018,7 @@ libxlDomainFreeMem(libxl_ctx *ctx, libxl_domain_config *d_config)
>           goto error;
>   
>       do {
> -        if (libxl_get_free_memory(ctx, &free_mem) < 0)
> +        if (Libxl_Get_Free_Memory(ctx, &free_mem) < 0)
>               goto error;
>   
>           if (free_mem >= needed_mem)
> diff --git a/tests/libxlmock.c b/tests/libxlmock.c
> index a36ca135f6..7a43f9196b 100644
> --- a/tests/libxlmock.c
> +++ b/tests/libxlmock.c
> @@ -67,7 +67,12 @@ VIR_MOCK_IMPL_RET_ARGS(libxl_get_version_info,
>   VIR_MOCK_STUB_RET_ARGS(libxl_get_free_memory,
>                          int, 0,
>                          libxl_ctx *, ctx,
> -                       uint32_t *, memkb);
> +#if LIBXL_API_VERSION < 0x040800
> +                       uint32_t *,
> +#else
> +                       uint64_t *,
> +#endif
> +                       memkb);

Fails syntax-check

cppi: /home/jfehlig/virt/gitlab/libvirt/tests/libxlmock.c: line 70: not properly 
indented
cppi: /home/jfehlig/virt/gitlab/libvirt/tests/libxlmock.c: line 72: not properly 
indented
cppi: /home/jfehlig/virt/gitlab/libvirt/tests/libxlmock.c: line 74: not properly 
indented
build-aux/syntax-check.mk: incorrect preprocessor indentation

You can install cppi in your build env to catch those.

Regards,
Jim