qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 28/29] memory: make cpu_physical_memory_sync_dir


From: Fam Zheng
Subject: Re: [Qemu-devel] [PATCH 28/29] memory: make cpu_physical_memory_sync_dirty_bitmap() fully atomic
Date: Tue, 26 May 2015 20:45:30 +0800
User-agent: Mutt/1.5.23 (2014-03-12)

On Mon, 04/27 18:28, Paolo Bonzini wrote:
> From: Stefan Hajnoczi <address@hidden>
> 
> The fast path of cpu_physical_memory_sync_dirty_bitmap() directly
> manipulates the dirty bitmap.  Use atomic_xchg() to make the
> test-and-clear atomic.
> 
> Signed-off-by: Stefan Hajnoczi <address@hidden>
> Message-Id: <address@hidden>
> [Only do xchg on nonzero words. - Paolo]
> Signed-off-by: Paolo Bonzini <address@hidden>

Reviewed-by: Fam Zheng <address@hidden>

> ---
>  include/exec/ram_addr.h | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/include/exec/ram_addr.h b/include/exec/ram_addr.h
> index ea77187..0baba41 100644
> --- a/include/exec/ram_addr.h
> +++ b/include/exec/ram_addr.h
> @@ -224,12 +224,12 @@ uint64_t cpu_physical_memory_sync_dirty_bitmap(unsigned 
> long *dest,
>  
>          for (k = page; k < page + nr; k++) {
>              if (src[k]) {
> +                unsigned long bits = atomic_xchg(&src[k], 0);
>                  unsigned long new_dirty;
>                  new_dirty = ~dest[k];
> -                dest[k] |= src[k];
> -                new_dirty &= src[k];
> +                dest[k] |= bits;
> +                new_dirty &= bits;
>                  num_dirty += ctpopl(new_dirty);
> -                src[k] = 0;
>              }
>          }
>      } else {
> -- 
> 1.8.3.1
> 
> 



reply via email to

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