[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 32/39] memory: split cpu_physical_memory_* funct
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [PATCH 32/39] memory: split cpu_physical_memory_* functions to its own include |
Date: |
Wed, 06 Nov 2013 16:54:18 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130923 Thunderbird/17.0.9 |
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 <address@hidden>
> ---
> 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 0000000..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 <address@hidden>
> + *
> + * 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, 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/memory.c b/memory.c
> index c58661b..c5efc8a 100644
> --- a/memory.c
> +++ b/memory.c
> @@ -22,6 +22,7 @@
> #include <assert.h>
>
> #include "exec/memory-internal.h"
> +#include "exec/memory-physical.h"
>
> //#define DEBUG_UNASSIGNED
>
- Re: [Qemu-devel] [PATCH 23/39] memory: make cpu_physical_memory_get_dirty() the main function, (continued)
- [Qemu-devel] [PATCH 24/39] memory: cpu_physical_memory_get_dirty() is used as returning a bool, Juan Quintela, 2013/11/06
- [Qemu-devel] [PATCH 26/39] memory: use find_next_bit() to find dirty bits, Juan Quintela, 2013/11/06
- [Qemu-devel] [PATCH 25/39] memory: s/mask/clear/ cpu_physical_memory_mask_dirty_range, Juan Quintela, 2013/11/06
- [Qemu-devel] [PATCH 27/39] memory: cpu_physical_memory_set_dirty_range() now uses bitmap operations, Juan Quintela, 2013/11/06
- [Qemu-devel] [PATCH 28/39] memory: cpu_physical_memory_clear_dirty_range() now uses bitmap operations, Juan Quintela, 2013/11/06
- [Qemu-devel] [PATCH 30/39] memory: make cpu_physical_memory_reset_dirty() take a length parameter, Juan Quintela, 2013/11/06
- [Qemu-devel] [PATCH 29/39] memory: s/dirty/clean/ in cpu_physical_memory_is_dirty(), Juan Quintela, 2013/11/06
- [Qemu-devel] [PATCH 32/39] memory: split cpu_physical_memory_* functions to its own include, Juan Quintela, 2013/11/06
- Re: [Qemu-devel] [PATCH 32/39] memory: split cpu_physical_memory_* functions to its own include,
Paolo Bonzini <=
- [Qemu-devel] [PATCH 31/39] memory: cpu_physical_memory_set_dirty_tracking() should return void, Juan Quintela, 2013/11/06
- [Qemu-devel] [PATCH 33/39] memory: unfold memory_region_test_and_clear(), Juan Quintela, 2013/11/06
- [Qemu-devel] [PATCH 34/39] kvm: use directly cpu_physical_memory_* api for tracking dirty pages, Juan Quintela, 2013/11/06
- [Qemu-devel] [PATCH 35/39] kvm: refactor start address calculation, Juan Quintela, 2013/11/06
- [Qemu-devel] [PATCH 37/39] memory: syncronize kvm bitmap using bitmaps operations, Juan Quintela, 2013/11/06
- [Qemu-devel] [PATCH 36/39] memory: move bitmap synchronization to its own function, Juan Quintela, 2013/11/06