qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH] postcopy: Synchronize usage of the balloon inhi


From: Christian Borntraeger
Subject: Re: [Qemu-devel] [PATCH] postcopy: Synchronize usage of the balloon inhibitor
Date: Thu, 23 Aug 2018 09:24:10 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1


On 08/22/2018 09:32 PM, Alex Williamson wrote:
> While the qemu_balloon_inhibit() interface appears rather general purpose,
> postcopy uses it in a last-caller-wins approach with no guarantee of balanced
> inhibits and de-inhibits.  Wrap postcopy's usage of the inhibitor to give it
> one vote overall, using the same last-caller-wins approach as previously
> implemented at the balloon level.
> 
> Reported-by: Christian Borntraeger <address@hidden>
> Fixes: 01ccbec7bdf6 ("balloon: Allow multiple inhibit users")

This make qemu iotest 169 working again. 

Tested-by: Christian Borntraeger <address@hidden>


> Signed-off-by: Alex Williamson <address@hidden>
> ---
> 
> Note that checkpatch.pl doesn't appreciate the initialization of the
> static variable to false, imo it improves the readability of the code
> in this instance, so I've left it.  Shout if you disagree.
> 
> If this gets acks I can include it with a pull request for a couple
> other fixes to the original series.  Thanks
> 
>  migration/postcopy-ram.c |   18 ++++++++++++++++--
>  1 file changed, 16 insertions(+), 2 deletions(-)
> 
> diff --git a/migration/postcopy-ram.c b/migration/postcopy-ram.c
> index 932f18894990..c2e387ed44b4 100644
> --- a/migration/postcopy-ram.c
> +++ b/migration/postcopy-ram.c
> @@ -509,6 +509,20 @@ int postcopy_ram_incoming_init(MigrationIncomingState 
> *mis)
>      return 0;
>  }
>  
> +/*
> + * Manage a single vote to the QEMU balloon inhibitor for all postcopy usage,
> + * last caller wins.
> + */
> +static void postcopy_balloon_inhibit(bool state)
> +{
> +    static bool cur_state = false;
> +
> +    if (state != cur_state) {
> +        qemu_balloon_inhibit(state);
> +        cur_state = state;
> +    }
> +}
> +
>  /*
>   * At the end of a migration where postcopy_ram_incoming_init was called.
>   */
> @@ -539,7 +553,7 @@ int postcopy_ram_incoming_cleanup(MigrationIncomingState 
> *mis)
>          mis->have_fault_thread = false;
>      }
>  
> -    qemu_balloon_inhibit(false);
> +    postcopy_balloon_inhibit(false);
>  
>      if (enable_mlock) {
>          if (os_mlock() < 0) {
> @@ -1107,7 +1121,7 @@ int postcopy_ram_enable_notify(MigrationIncomingState 
> *mis)
>       * Ballooning can mark pages as absent while we're postcopying
>       * that would cause false userfaults.
>       */
> -    qemu_balloon_inhibit(true);
> +    postcopy_balloon_inhibit(true);
>  
>      trace_postcopy_ram_enable_notify();
>  
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]