[PATCH RESEND] libxl: Make domain build xc_domain_setmaxmem() call use max_memkb

Kevin Alarcon Negy posted 1 patch 8 months, 3 weeks ago
Patches applied successfully (tree, apply log)
git fetch https://gitlab.com/xen-project/patchew/xen tags/patchew/e7ab0b64b8dce1ca5b71b3f75f7bce6d4824d2ed.1691446380.git.kevin@exostellar.io
tools/libs/light/libxl_dom.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH RESEND] libxl: Make domain build xc_domain_setmaxmem() call use max_memkb
Posted by Kevin Alarcon Negy 8 months, 3 weeks ago
When building a domain, xc_domain_setmaxmem() is called with target_memkb (memory in domain config file).
If a config specifies maxmem > memory, any attempts to increase the domain memory size to its max,
outside of xl mem-set or xl mem-max, which already call xc_domain_setmaxmem() properly, will fail.
Changed xc_domain_setmaxmem() call inside libxl__build_pre() to use max_memkb.

Signed-off-by: Kevin Alarcon Negy <kevin@exostellar.io>
---
 tools/libs/light/libxl_dom.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/libs/light/libxl_dom.c b/tools/libs/light/libxl_dom.c
index 94fef37401..16aa255aad 100644
--- a/tools/libs/light/libxl_dom.c
+++ b/tools/libs/light/libxl_dom.c
@@ -355,7 +355,7 @@ int libxl__build_pre(libxl__gc *gc, uint32_t domid,
         return ERROR_FAIL;
     }
 
-    if (xc_domain_setmaxmem(ctx->xch, domid, info->target_memkb + size) < 0) {
+    if (xc_domain_setmaxmem(ctx->xch, domid, info->max_memkb + size) < 0) {
         LOGE(ERROR, "Couldn't set max memory");
         return ERROR_FAIL;
     }
-- 
2.25.1
Re: [PATCH RESEND] libxl: Make domain build xc_domain_setmaxmem() call use max_memkb
Posted by Juergen Gross 8 months, 3 weeks ago
On 08.08.23 00:16, Kevin Alarcon Negy wrote:
> When building a domain, xc_domain_setmaxmem() is called with target_memkb (memory in domain config file).
> If a config specifies maxmem > memory, any attempts to increase the domain memory size to its max,
> outside of xl mem-set or xl mem-max, which already call xc_domain_setmaxmem() properly, will fail.

But this is how it should work, no?

With your change the guest could easily balloon itself up to maxmem without it
having been allowed to do so.

The maxmem config option is meant to tell the domain how much memory it should
be prepared to use some time in the future. It isn't meant to allow the domain
to use right now.


Juergen

> Changed xc_domain_setmaxmem() call inside libxl__build_pre() to use max_memkb.
> 
> Signed-off-by: Kevin Alarcon Negy <kevin@exostellar.io>
> ---
>   tools/libs/light/libxl_dom.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/tools/libs/light/libxl_dom.c b/tools/libs/light/libxl_dom.c
> index 94fef37401..16aa255aad 100644
> --- a/tools/libs/light/libxl_dom.c
> +++ b/tools/libs/light/libxl_dom.c
> @@ -355,7 +355,7 @@ int libxl__build_pre(libxl__gc *gc, uint32_t domid,
>           return ERROR_FAIL;
>       }
>   
> -    if (xc_domain_setmaxmem(ctx->xch, domid, info->target_memkb + size) < 0) {
> +    if (xc_domain_setmaxmem(ctx->xch, domid, info->max_memkb + size) < 0) {
>           LOGE(ERROR, "Couldn't set max memory");
>           return ERROR_FAIL;
>       }

Re: [PATCH RESEND] libxl: Make domain build xc_domain_setmaxmem() call use max_memkb
Posted by Kevin Alarcon Negy 8 months, 2 weeks ago
Apologies if I misused the "RESEND" subject line. The xen patch guide
[1] seemed to suggest using it as a way to ping.

Thanks for the feedback. I realize now that my misunderstanding in how
the original code should work is because of my confusion between
"maxmem" the config variable vs. "xl mem-max" command. I thought that
both should act exactly the same way. As in, "xl mem-max" calls
xc_domain_setmaxmem() and also sets the static-max variable [2]. I
know that maxmem (config variable) starts out as just the static-max
variable and does not result in an xc_domain_setmaxmem(maxmem) call
upon bootup, but it wasn't clear to me that this was intended. My
patch was intended to make both the config variable and the xl command
act in the same way.

Perhaps this distinction is better resolved with different naming? For
instance, instead of "maxmem" for the config variable, call it
"static-max" to match its internal meaning?

I appreciate your thoughts.
Kevin

[1] https://wiki.xenproject.org/wiki/Submitting_Xen_Project_Patches#Resending_Patches
[2] https://github.com/xen-project/xen/blob/master/tools/libs/light/libxl_mem.c#L76

On Tue, Aug 8, 2023 at 3:14 AM Juergen Gross <jgross@suse.com> wrote:
>
> On 08.08.23 00:16, Kevin Alarcon Negy wrote:
> > When building a domain, xc_domain_setmaxmem() is called with target_memkb (memory in domain config file).
> > If a config specifies maxmem > memory, any attempts to increase the domain memory size to its max,
> > outside of xl mem-set or xl mem-max, which already call xc_domain_setmaxmem() properly, will fail.
>
> But this is how it should work, no?
>
> With your change the guest could easily balloon itself up to maxmem without it
> having been allowed to do so.
>
> The maxmem config option is meant to tell the domain how much memory it should
> be prepared to use some time in the future. It isn't meant to allow the domain
> to use right now.
>
>
> Juergen
>
> > Changed xc_domain_setmaxmem() call inside libxl__build_pre() to use max_memkb.
> >
> > Signed-off-by: Kevin Alarcon Negy <kevin@exostellar.io>
> > ---
> >   tools/libs/light/libxl_dom.c | 2 +-
> >   1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/tools/libs/light/libxl_dom.c b/tools/libs/light/libxl_dom.c
> > index 94fef37401..16aa255aad 100644
> > --- a/tools/libs/light/libxl_dom.c
> > +++ b/tools/libs/light/libxl_dom.c
> > @@ -355,7 +355,7 @@ int libxl__build_pre(libxl__gc *gc, uint32_t domid,
> >           return ERROR_FAIL;
> >       }
> >
> > -    if (xc_domain_setmaxmem(ctx->xch, domid, info->target_memkb + size) < 0) {
> > +    if (xc_domain_setmaxmem(ctx->xch, domid, info->max_memkb + size) < 0) {
> >           LOGE(ERROR, "Couldn't set max memory");
> >           return ERROR_FAIL;
> >       }
>
Re: [PATCH RESEND] libxl: Make domain build xc_domain_setmaxmem() call use max_memkb
Posted by Juergen Gross 8 months, 2 weeks ago
On 12.08.23 04:32, Kevin Alarcon Negy wrote:
> Apologies if I misused the "RESEND" subject line. The xen patch guide
> [1] seemed to suggest using it as a way to ping.
> 
> Thanks for the feedback. I realize now that my misunderstanding in how
> the original code should work is because of my confusion between
> "maxmem" the config variable vs. "xl mem-max" command. I thought that
> both should act exactly the same way. As in, "xl mem-max" calls
> xc_domain_setmaxmem() and also sets the static-max variable [2]. I
> know that maxmem (config variable) starts out as just the static-max
> variable and does not result in an xc_domain_setmaxmem(maxmem) call
> upon bootup, but it wasn't clear to me that this was intended. My
> patch was intended to make both the config variable and the xl command
> act in the same way.
> 
> Perhaps this distinction is better resolved with different naming? For
> instance, instead of "maxmem" for the config variable, call it
> "static-max" to match its internal meaning?

While you are right with "static-max" explaining the semantics for
someone familiar with the internals better, I'm not sure this applies
to Xen users, too.

Additionally we would need to support both names after doing the switch,
as we don't want to break existing config files using "maxmem".

So changing the parameter name would not really help IMHO.


Juergen
Re: [PATCH RESEND] libxl: Make domain build xc_domain_setmaxmem() call use max_memkb
Posted by Jan Beulich 8 months, 3 weeks ago
On 08.08.2023 00:16, Kevin Alarcon Negy wrote:
> When building a domain, xc_domain_setmaxmem() is called with target_memkb (memory in domain config file).
> If a config specifies maxmem > memory, any attempts to increase the domain memory size to its max,
> outside of xl mem-set or xl mem-max, which already call xc_domain_setmaxmem() properly, will fail.
> Changed xc_domain_setmaxmem() call inside libxl__build_pre() to use max_memkb.
> 
> Signed-off-by: Kevin Alarcon Negy <kevin@exostellar.io>
> ---
>  tools/libs/light/libxl_dom.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

A note on why you resent would have been useful here. Is this perhaps
more a ping than a resend?

Jan

> diff --git a/tools/libs/light/libxl_dom.c b/tools/libs/light/libxl_dom.c
> index 94fef37401..16aa255aad 100644
> --- a/tools/libs/light/libxl_dom.c
> +++ b/tools/libs/light/libxl_dom.c
> @@ -355,7 +355,7 @@ int libxl__build_pre(libxl__gc *gc, uint32_t domid,
>          return ERROR_FAIL;
>      }
>  
> -    if (xc_domain_setmaxmem(ctx->xch, domid, info->target_memkb + size) < 0) {
> +    if (xc_domain_setmaxmem(ctx->xch, domid, info->max_memkb + size) < 0) {
>          LOGE(ERROR, "Couldn't set max memory");
>          return ERROR_FAIL;
>      }