Re: [Qemu-devel] [PATCH 32/39] memory: split cpu_physical_memory_* functions to its own include

2013-11-06 Thread Paolo Bonzini
Il 06/11/2013 14:04, Juan Quintela ha scritto:
> So we know who is using the bitmap directly

At least all other functions that take a ram_addr_t should be moved
there too:

ram_addr_t qemu_ram_alloc_from_ptr(ram_addr_t size, void *host,
   MemoryRegion *mr);
ram_addr_t qemu_ram_alloc(ram_addr_t size, MemoryRegion *mr);
void *qemu_get_ram_ptr(ram_addr_t addr);
void qemu_ram_free(ram_addr_t addr);
void qemu_ram_free_from_ptr(ram_addr_t addr);

So just call it include/exec/ram-addr.h.

Paolo

> Signed-off-by: Juan Quintela 
> ---
>  cputlb.c   |  1 +
>  exec.c |  1 +
>  include/exec/memory-internal.h | 69 
>  include/exec/memory-physical.h | 90 
> ++
>  memory.c   |  1 +
>  5 files changed, 93 insertions(+), 69 deletions(-)
>  create mode 100644 include/exec/memory-physical.h
> 
> diff --git a/cputlb.c b/cputlb.c
> index 865430c..96aa143 100644
> --- a/cputlb.c
> +++ b/cputlb.c
> @@ -26,6 +26,7 @@
>  #include "exec/cputlb.h"
> 
>  #include "exec/memory-internal.h"
> +#include "exec/memory-physical.h"
> 
>  //#define DEBUG_TLB
>  //#define DEBUG_TLB_CHECK
> diff --git a/exec.c b/exec.c
> index 11b434b..04eb2b4 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -50,6 +50,7 @@
>  #include "translate-all.h"
> 
>  #include "exec/memory-internal.h"
> +#include "exec/memory-physical.h"
> 
>  //#define DEBUG_SUBPAGE
> 
> diff --git a/include/exec/memory-internal.h b/include/exec/memory-internal.h
> index c790ab8..69a92cf 100644
> --- a/include/exec/memory-internal.h
> +++ b/include/exec/memory-internal.h
> @@ -20,9 +20,6 @@
>  #define MEMORY_INTERNAL_H
> 
>  #ifndef CONFIG_USER_ONLY
> -#include "hw/xen/xen.h"
> -
> -
>  typedef struct AddressSpaceDispatch AddressSpaceDispatch;
> 
>  void address_space_init_dispatch(AddressSpace *as);
> @@ -39,71 +36,5 @@ ram_addr_t qemu_ram_alloc(ram_addr_t size, MemoryRegion 
> *mr);
>  void *qemu_get_ram_ptr(ram_addr_t addr);
>  void qemu_ram_free(ram_addr_t addr);
>  void qemu_ram_free_from_ptr(ram_addr_t addr);
> -
> -static inline bool cpu_physical_memory_get_dirty(ram_addr_t start,
> - ram_addr_t length,
> - unsigned client)
> -{
> -unsigned long end, page, next;
> -
> -assert(client < DIRTY_MEMORY_NUM);
> -
> -end = TARGET_PAGE_ALIGN(start + length) >> TARGET_PAGE_BITS;
> -page = start >> TARGET_PAGE_BITS;
> -next = find_next_bit(ram_list.dirty_memory[client], end, page);
> -
> -return next < end;
> -}
> -
> -static inline bool cpu_physical_memory_get_dirty_flag(ram_addr_t addr,
> -  unsigned client)
> -{
> -return cpu_physical_memory_get_dirty(addr, 1, client);
> -}
> -
> -static inline bool cpu_physical_memory_is_clean(ram_addr_t addr)
> -{
> -bool vga = cpu_physical_memory_get_dirty_flag(addr, DIRTY_MEMORY_VGA);
> -bool code = cpu_physical_memory_get_dirty_flag(addr, DIRTY_MEMORY_CODE);
> -bool migration = cpu_physical_memory_get_dirty_flag(addr, 
> DIRTY_MEMORY_MIGRATION);
> -return !(vga && code && migration);
> -}
> -
> -static inline void cpu_physical_memory_set_dirty_flag(ram_addr_t addr,
> -  unsigned client)
> -{
> -assert(client < DIRTY_MEMORY_NUM);
> -
> -set_bit(addr >> TARGET_PAGE_BITS, ram_list.dirty_memory[client]);
> -}
> -
> -static inline void cpu_physical_memory_set_dirty_range(ram_addr_t start,
> -   ram_addr_t length)
> -{
> -unsigned long end, page;
> -
> -end = TARGET_PAGE_ALIGN(start + length) >> TARGET_PAGE_BITS;
> -page = start >> TARGET_PAGE_BITS;
> -bitmap_set(ram_list.dirty_memory[DIRTY_MEMORY_MIGRATION], page, end - 
> page);
> -bitmap_set(ram_list.dirty_memory[DIRTY_MEMORY_VGA], page, end - page);
> -bitmap_set(ram_list.dirty_memory[DIRTY_MEMORY_CODE], page, end - page);
> -xen_modified_memory(start, length);
> -}
> -
> -static inline void cpu_physical_memory_clear_dirty_range(ram_addr_t start,
> - ram_addr_t length,
> - unsigned client)
> -{
> -unsigned long end, page;
> -
> -end = TARGET_PAGE_ALIGN(start + length) >> TARGET_PAGE_BITS;
> -page = start >> TARGET_PAGE_BITS;
> -bitmap_clear(ram_list.dirty_memory[client], page, end - page);
> -}
> -
> -void cpu_physical_memory_reset_dirty(ram_addr_t start, ram_addr_t length,
> - unsigned client);
> -
>  #endif
> -
>  #endif
> diff --git a/include/exec/memory-physical.h b/include/exec/memory-physical.h
> new file mode 100644
> index 000..610c55f
> --- /dev/null
> +++ b/include/exec/memory-physical.h
> @@ -0,0 +1,90 @@
> +/*
> + * Declarations for cpu p

[Qemu-devel] [PATCH 32/39] memory: split cpu_physical_memory_* functions to its own include

2013-11-06 Thread Juan Quintela
So we know who is using the bitmap directly

Signed-off-by: Juan Quintela 
---
 cputlb.c   |  1 +
 exec.c |  1 +
 include/exec/memory-internal.h | 69 
 include/exec/memory-physical.h | 90 ++
 memory.c   |  1 +
 5 files changed, 93 insertions(+), 69 deletions(-)
 create mode 100644 include/exec/memory-physical.h

diff --git a/cputlb.c b/cputlb.c
index 865430c..96aa143 100644
--- a/cputlb.c
+++ b/cputlb.c
@@ -26,6 +26,7 @@
 #include "exec/cputlb.h"

 #include "exec/memory-internal.h"
+#include "exec/memory-physical.h"

 //#define DEBUG_TLB
 //#define DEBUG_TLB_CHECK
diff --git a/exec.c b/exec.c
index 11b434b..04eb2b4 100644
--- a/exec.c
+++ b/exec.c
@@ -50,6 +50,7 @@
 #include "translate-all.h"

 #include "exec/memory-internal.h"
+#include "exec/memory-physical.h"

 //#define DEBUG_SUBPAGE

diff --git a/include/exec/memory-internal.h b/include/exec/memory-internal.h
index c790ab8..69a92cf 100644
--- a/include/exec/memory-internal.h
+++ b/include/exec/memory-internal.h
@@ -20,9 +20,6 @@
 #define MEMORY_INTERNAL_H

 #ifndef CONFIG_USER_ONLY
-#include "hw/xen/xen.h"
-
-
 typedef struct AddressSpaceDispatch AddressSpaceDispatch;

 void address_space_init_dispatch(AddressSpace *as);
@@ -39,71 +36,5 @@ ram_addr_t qemu_ram_alloc(ram_addr_t size, MemoryRegion *mr);
 void *qemu_get_ram_ptr(ram_addr_t addr);
 void qemu_ram_free(ram_addr_t addr);
 void qemu_ram_free_from_ptr(ram_addr_t addr);
-
-static inline bool cpu_physical_memory_get_dirty(ram_addr_t start,
- ram_addr_t length,
- unsigned client)
-{
-unsigned long end, page, next;
-
-assert(client < DIRTY_MEMORY_NUM);
-
-end = TARGET_PAGE_ALIGN(start + length) >> TARGET_PAGE_BITS;
-page = start >> TARGET_PAGE_BITS;
-next = find_next_bit(ram_list.dirty_memory[client], end, page);
-
-return next < end;
-}
-
-static inline bool cpu_physical_memory_get_dirty_flag(ram_addr_t addr,
-  unsigned client)
-{
-return cpu_physical_memory_get_dirty(addr, 1, client);
-}
-
-static inline bool cpu_physical_memory_is_clean(ram_addr_t addr)
-{
-bool vga = cpu_physical_memory_get_dirty_flag(addr, DIRTY_MEMORY_VGA);
-bool code = cpu_physical_memory_get_dirty_flag(addr, DIRTY_MEMORY_CODE);
-bool migration = cpu_physical_memory_get_dirty_flag(addr, 
DIRTY_MEMORY_MIGRATION);
-return !(vga && code && migration);
-}
-
-static inline void cpu_physical_memory_set_dirty_flag(ram_addr_t addr,
-  unsigned client)
-{
-assert(client < DIRTY_MEMORY_NUM);
-
-set_bit(addr >> TARGET_PAGE_BITS, ram_list.dirty_memory[client]);
-}
-
-static inline void cpu_physical_memory_set_dirty_range(ram_addr_t start,
-   ram_addr_t length)
-{
-unsigned long end, page;
-
-end = TARGET_PAGE_ALIGN(start + length) >> TARGET_PAGE_BITS;
-page = start >> TARGET_PAGE_BITS;
-bitmap_set(ram_list.dirty_memory[DIRTY_MEMORY_MIGRATION], page, end - 
page);
-bitmap_set(ram_list.dirty_memory[DIRTY_MEMORY_VGA], page, end - page);
-bitmap_set(ram_list.dirty_memory[DIRTY_MEMORY_CODE], page, end - page);
-xen_modified_memory(start, length);
-}
-
-static inline void cpu_physical_memory_clear_dirty_range(ram_addr_t start,
- ram_addr_t length,
- unsigned client)
-{
-unsigned long end, page;
-
-end = TARGET_PAGE_ALIGN(start + length) >> TARGET_PAGE_BITS;
-page = start >> TARGET_PAGE_BITS;
-bitmap_clear(ram_list.dirty_memory[client], page, end - page);
-}
-
-void cpu_physical_memory_reset_dirty(ram_addr_t start, ram_addr_t length,
- unsigned client);
-
 #endif
-
 #endif
diff --git a/include/exec/memory-physical.h b/include/exec/memory-physical.h
new file mode 100644
index 000..610c55f
--- /dev/null
+++ b/include/exec/memory-physical.h
@@ -0,0 +1,90 @@
+/*
+ * Declarations for cpu physical memory functions
+ *
+ * Copyright 2011 Red Hat, Inc. and/or its affiliates
+ *
+ * Authors:
+ *  Avi Kivity 
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or
+ * later.  See the COPYING file in the top-level directory.
+ *
+ */
+
+/*
+ * This header is for use by exec.c and memory.c ONLY.  Do not include it.
+ * The functions declared here will be removed soon.
+ */
+
+#ifndef MEMORY_PHYSICAL_H
+#define MEMORY_PHYSICAL_H
+
+#ifndef CONFIG_USER_ONLY
+#include "hw/xen/xen.h"
+
+static inline bool cpu_physical_memory_get_dirty(ram_addr_t start,
+ ram_addr_t length,
+ unsigned client)
+{
+unsigned long end, pag