Re: [Qemu-devel] [RFC v3 07/13] ram_addr.h: Make exclusive bitmap accessors atomic

2015-07-17 Thread Alex Bennée

Alvise Rigo a.r...@virtualopensystems.com writes:

 Suggested-by: Jani Kokkonen jani.kokko...@huawei.com
 Suggested-by: Claudio Fontana claudio.font...@huawei.com
 Signed-off-by: Alvise Rigo a.r...@virtualopensystems.com
 ---
  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 2766541..e51bd65 100644
 --- a/include/exec/ram_addr.h
 +++ b/include/exec/ram_addr.h
 @@ -255,7 +255,7 @@ uint64_t cpu_physical_memory_sync_dirty_bitmap(unsigned 
 long *dest,
  /* Exclusive bitmap accessors. */
  static inline void cpu_physical_memory_set_excl_dirty(ram_addr_t addr)
  {
 -set_bit(addr  TARGET_PAGE_BITS,
 +set_bit_atomic(addr  TARGET_PAGE_BITS,
  ram_list.dirty_memory[DIRTY_MEMORY_EXCLUSIVE]);
  }
  
 @@ -267,8 +267,8 @@ static inline int 
 cpu_physical_memory_excl_is_dirty(ram_addr_t addr)
  
  static inline void cpu_physical_memory_clear_excl_dirty(ram_addr_t addr)
  {
 -clear_bit(addr  TARGET_PAGE_BITS,
 -  ram_list.dirty_memory[DIRTY_MEMORY_EXCLUSIVE]);
 +
 bitmap_test_and_clear_atomic(ram_list.dirty_memory[DIRTY_MEMORY_EXCLUSIVE],
 + addr  TARGET_PAGE_BITS, 1);

Does this call for simply implementing a clear_bit_atomic() rather than
the fancy bitmap_test_and_clear_atomic. Looking at atomic.h it seems the
primitives you need are there.

  }
  
  #endif

-- 
Alex Bennée



[Qemu-devel] [RFC v3 07/13] ram_addr.h: Make exclusive bitmap accessors atomic

2015-07-10 Thread Alvise Rigo
Suggested-by: Jani Kokkonen jani.kokko...@huawei.com
Suggested-by: Claudio Fontana claudio.font...@huawei.com
Signed-off-by: Alvise Rigo a.r...@virtualopensystems.com
---
 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 2766541..e51bd65 100644
--- a/include/exec/ram_addr.h
+++ b/include/exec/ram_addr.h
@@ -255,7 +255,7 @@ uint64_t cpu_physical_memory_sync_dirty_bitmap(unsigned 
long *dest,
 /* Exclusive bitmap accessors. */
 static inline void cpu_physical_memory_set_excl_dirty(ram_addr_t addr)
 {
-set_bit(addr  TARGET_PAGE_BITS,
+set_bit_atomic(addr  TARGET_PAGE_BITS,
 ram_list.dirty_memory[DIRTY_MEMORY_EXCLUSIVE]);
 }
 
@@ -267,8 +267,8 @@ static inline int 
cpu_physical_memory_excl_is_dirty(ram_addr_t addr)
 
 static inline void cpu_physical_memory_clear_excl_dirty(ram_addr_t addr)
 {
-clear_bit(addr  TARGET_PAGE_BITS,
-  ram_list.dirty_memory[DIRTY_MEMORY_EXCLUSIVE]);
+bitmap_test_and_clear_atomic(ram_list.dirty_memory[DIRTY_MEMORY_EXCLUSIVE],
+ addr  TARGET_PAGE_BITS, 1);
 }
 
 #endif
-- 
2.4.5