[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v6 3/6] Change phys_ram_dirty to phys_ram_status
From: |
Cam Macdonell |
Subject: |
[Qemu-devel] [PATCH v6 3/6] Change phys_ram_dirty to phys_ram_status |
Date: |
Fri, 4 Jun 2010 15:45:39 -0600 |
phys_ram_dirty are 8-bit values storing 3 dirty bits. Change to more generic
phys_ram_flags and use lower 4-bits for dirty status and leave upper 4 for
other uses.
The names of functions may need to be changed as well, such as
c_p_m_get_dirty().
---
cpu-all.h | 16 +++++++++-------
exec.c | 36 ++++++++++++++++++------------------
2 files changed, 27 insertions(+), 25 deletions(-)
diff --git a/cpu-all.h b/cpu-all.h
index 47a5722..9080cc7 100644
--- a/cpu-all.h
+++ b/cpu-all.h
@@ -858,7 +858,7 @@ target_phys_addr_t cpu_get_phys_page_debug(CPUState *env,
target_ulong addr);
/* memory API */
extern int phys_ram_fd;
-extern uint8_t *phys_ram_dirty;
+extern uint8_t *phys_ram_flags;
extern ram_addr_t ram_size;
extern ram_addr_t last_ram_offset;
@@ -887,32 +887,34 @@ extern int mem_prealloc;
#define CODE_DIRTY_FLAG 0x02
#define MIGRATION_DIRTY_FLAG 0x08
+#define DIRTY_ALL_FLAG (VGA_DIRTY_FLAG | CODE_DIRTY_FLAG |
MIGRATION_DIRTY_FLAG)
+
/* read dirty bit (return 0 or 1) */
static inline int cpu_physical_memory_is_dirty(ram_addr_t addr)
{
- return phys_ram_dirty[addr >> TARGET_PAGE_BITS] == 0xff;
+ return phys_ram_flags[addr >> TARGET_PAGE_BITS] == DIRTY_ALL_FLAG;
}
static inline int cpu_physical_memory_get_dirty_flags(ram_addr_t addr)
{
- return phys_ram_dirty[addr >> TARGET_PAGE_BITS];
+ return phys_ram_flags[addr >> TARGET_PAGE_BITS];
}
static inline int cpu_physical_memory_get_dirty(ram_addr_t addr,
int dirty_flags)
{
- return phys_ram_dirty[addr >> TARGET_PAGE_BITS] & dirty_flags;
+ return phys_ram_flags[addr >> TARGET_PAGE_BITS] & dirty_flags;
}
static inline void cpu_physical_memory_set_dirty(ram_addr_t addr)
{
- phys_ram_dirty[addr >> TARGET_PAGE_BITS] = 0xff;
+ phys_ram_flags[addr >> TARGET_PAGE_BITS] = DIRTY_ALL_FLAG;
}
static inline int cpu_physical_memory_set_dirty_flags(ram_addr_t addr,
int dirty_flags)
{
- return phys_ram_dirty[addr >> TARGET_PAGE_BITS] |= dirty_flags;
+ return phys_ram_flags[addr >> TARGET_PAGE_BITS] |= dirty_flags;
}
static inline void cpu_physical_memory_mask_dirty_range(ram_addr_t start,
@@ -924,7 +926,7 @@ static inline void
cpu_physical_memory_mask_dirty_range(ram_addr_t start,
len = length >> TARGET_PAGE_BITS;
mask = ~dirty_flags;
- p = phys_ram_dirty + (start >> TARGET_PAGE_BITS);
+ p = phys_ram_flags + (start >> TARGET_PAGE_BITS);
for (i = 0; i < len; i++) {
p[i] &= mask;
}
diff --git a/exec.c b/exec.c
index 7b0e1c5..39c18a7 100644
--- a/exec.c
+++ b/exec.c
@@ -116,7 +116,7 @@ uint8_t *code_gen_ptr;
#if !defined(CONFIG_USER_ONLY)
int phys_ram_fd;
-uint8_t *phys_ram_dirty;
+uint8_t *phys_ram_flags;
static int in_migration;
typedef struct RAMBlock {
@@ -2801,10 +2801,10 @@ ram_addr_t qemu_ram_map(ram_addr_t size, void *host)
new_block->next = ram_blocks;
ram_blocks = new_block;
- phys_ram_dirty = qemu_realloc(phys_ram_dirty,
+ phys_ram_flags = qemu_realloc(phys_ram_flags,
(last_ram_offset + size) >> TARGET_PAGE_BITS);
- memset(phys_ram_dirty + (last_ram_offset >> TARGET_PAGE_BITS),
- 0xff, size >> TARGET_PAGE_BITS);
+ memset(phys_ram_flags + (last_ram_offset >> TARGET_PAGE_BITS),
+ DIRTY_ALL_FLAG, size >> TARGET_PAGE_BITS);
last_ram_offset += size;
@@ -2853,10 +2853,10 @@ ram_addr_t qemu_ram_alloc(ram_addr_t size)
new_block->next = ram_blocks;
ram_blocks = new_block;
- phys_ram_dirty = qemu_realloc(phys_ram_dirty,
+ phys_ram_flags = qemu_realloc(phys_ram_flags,
(last_ram_offset + size) >> TARGET_PAGE_BITS);
- memset(phys_ram_dirty + (last_ram_offset >> TARGET_PAGE_BITS),
- 0xff, size >> TARGET_PAGE_BITS);
+ memset(phys_ram_flags + (last_ram_offset >> TARGET_PAGE_BITS),
+ DIRTY_ALL_FLAG, size >> TARGET_PAGE_BITS);
last_ram_offset += size;
@@ -3024,11 +3024,11 @@ static void notdirty_mem_writeb(void *opaque,
target_phys_addr_t ram_addr,
#endif
}
stb_p(qemu_get_ram_ptr(ram_addr), val);
- dirty_flags |= (0xff & ~CODE_DIRTY_FLAG);
+ dirty_flags |= (DIRTY_ALL_FLAG & ~CODE_DIRTY_FLAG);
cpu_physical_memory_set_dirty_flags(ram_addr, dirty_flags);
/* we remove the notdirty callback only if the code has been
flushed */
- if (dirty_flags == 0xff)
+ if (dirty_flags == DIRTY_ALL_FLAG)
tlb_set_dirty(cpu_single_env, cpu_single_env->mem_io_vaddr);
}
@@ -3044,11 +3044,11 @@ static void notdirty_mem_writew(void *opaque,
target_phys_addr_t ram_addr,
#endif
}
stw_p(qemu_get_ram_ptr(ram_addr), val);
- dirty_flags |= (0xff & ~CODE_DIRTY_FLAG);
+ dirty_flags |= (DIRTY_ALL_FLAG & ~CODE_DIRTY_FLAG);
cpu_physical_memory_set_dirty_flags(ram_addr, dirty_flags);
/* we remove the notdirty callback only if the code has been
flushed */
- if (dirty_flags == 0xff)
+ if (dirty_flags == DIRTY_ALL_FLAG)
tlb_set_dirty(cpu_single_env, cpu_single_env->mem_io_vaddr);
}
@@ -3064,11 +3064,11 @@ static void notdirty_mem_writel(void *opaque,
target_phys_addr_t ram_addr,
#endif
}
stl_p(qemu_get_ram_ptr(ram_addr), val);
- dirty_flags |= (0xff & ~CODE_DIRTY_FLAG);
+ dirty_flags |= (DIRTY_ALL_FLAG & ~CODE_DIRTY_FLAG);
cpu_physical_memory_set_dirty_flags(ram_addr, dirty_flags);
/* we remove the notdirty callback only if the code has been
flushed */
- if (dirty_flags == 0xff)
+ if (dirty_flags == DIRTY_ALL_FLAG)
tlb_set_dirty(cpu_single_env, cpu_single_env->mem_io_vaddr);
}
@@ -3485,7 +3485,7 @@ void cpu_physical_memory_rw(target_phys_addr_t addr,
uint8_t *buf,
tb_invalidate_phys_page_range(addr1, addr1 + l, 0);
/* set dirty bit */
cpu_physical_memory_set_dirty_flags(
- addr1, (0xff & ~CODE_DIRTY_FLAG));
+ addr1, (DIRTY_ALL_FLAG & ~CODE_DIRTY_FLAG));
}
/* qemu doesn't execute guest code directly, but kvm does
therefore flush instruction caches */
@@ -3699,7 +3699,7 @@ void cpu_physical_memory_unmap(void *buffer,
target_phys_addr_t len,
tb_invalidate_phys_page_range(addr1, addr1 + l, 0);
/* set dirty bit */
cpu_physical_memory_set_dirty_flags(
- addr1, (0xff & ~CODE_DIRTY_FLAG));
+ addr1, (DIRTY_ALL_FLAG & ~CODE_DIRTY_FLAG));
}
addr1 += l;
access_len -= l;
@@ -3860,7 +3860,7 @@ void stl_phys_notdirty(target_phys_addr_t addr, uint32_t
val)
tb_invalidate_phys_page_range(addr1, addr1 + 4, 0);
/* set dirty bit */
cpu_physical_memory_set_dirty_flags(
- addr1, (0xff & ~CODE_DIRTY_FLAG));
+ addr1, (DIRTY_ALL_FLAG & ~CODE_DIRTY_FLAG));
}
}
}
@@ -3929,7 +3929,7 @@ void stl_phys(target_phys_addr_t addr, uint32_t val)
tb_invalidate_phys_page_range(addr1, addr1 + 4, 0);
/* set dirty bit */
cpu_physical_memory_set_dirty_flags(addr1,
- (0xff & ~CODE_DIRTY_FLAG));
+ (DIRTY_ALL_FLAG & ~CODE_DIRTY_FLAG));
}
}
}
@@ -3972,7 +3972,7 @@ void stw_phys(target_phys_addr_t addr, uint32_t val)
tb_invalidate_phys_page_range(addr1, addr1 + 2, 0);
/* set dirty bit */
cpu_physical_memory_set_dirty_flags(addr1,
- (0xff & ~CODE_DIRTY_FLAG));
+ (DIRTY_ALL_FLAG & ~CODE_DIRTY_FLAG));
}
}
}
--
1.6.3.2.198.g6096d
- [Qemu-devel] [PATCH v6 0/6] Inter-VM Shared Memory Device with migration support, Cam Macdonell, 2010/06/04
- [Qemu-devel] [PATCH v6 1/6] Device specification for shared memory PCI device, Cam Macdonell, 2010/06/04
- [Qemu-devel] [PATCH v6 2/6] Add function to assign ioeventfd to MMIO., Cam Macdonell, 2010/06/04
- [Qemu-devel] [PATCH v6 3/6] Change phys_ram_dirty to phys_ram_status,
Cam Macdonell <=
- [Qemu-devel] [PATCH v6 4/6] Add support for marking memory to not be migrated. On migration, memory is checked for the NO_MIGRATION_FLAG., Cam Macdonell, 2010/06/04
- [Qemu-devel] [PATCH v6 5/6] Inter-VM shared memory PCI device, Cam Macdonell, 2010/06/04
- [Qemu-devel] [PATCH v6 6/6] the stand-alone shared memory server for inter-VM shared memory, Cam Macdonell, 2010/06/04
- [Qemu-devel] [PATCH v6] Shared memory uio_pci driver, Cam Macdonell, 2010/06/04
- Re: [Qemu-devel] [PATCH v6 6/6] the stand-alone shared memory server for inter-VM shared memory, Anthony Liguori, 2010/06/14
- Re: [Qemu-devel] [PATCH v6 6/6] the stand-alone shared memory server for inter-VM shared memory, Cam Macdonell, 2010/06/14
- Re: [Qemu-devel] [PATCH v6 6/6] the stand-alone shared memory server for inter-VM shared memory, Avi Kivity, 2010/06/23
- Re: [Qemu-devel] [PATCH v6 6/6] the stand-alone shared memory server for inter-VM shared memory, Anthony Liguori, 2010/06/23
- Re: [Qemu-devel] [PATCH v6 5/6] Inter-VM shared memory PCI device, Blue Swirl, 2010/06/05
- Re: [Qemu-devel] [PATCH v6 5/6] Inter-VM shared memory PCI device, Avi Kivity, 2010/06/06