exec: invert return value of cpu_physical_memory_get_clean, rename

While it is obvious that cpu_physical_memory_get_dirty returns true even if
a single page is dirty, the same is not true for cpu_physical_memory_get_clean;
one would expect that it returns true only if all the pages are clean, but
it actually looks for even one clean page. (By contrast, the caller of that
function, cpu_physical_memory_range_includes_clean, has a good name).

To clarify, rename the function to cpu_physical_memory_all_dirty and return
true if _all_ the pages are dirty. This is the opposite of the previous
meaning, because "all are 1" is the same as "not (any is 0)", so we have to
modify cpu_physical_memory_range_includes_clean as well

Backports commit 72b47e79cef36ed6ffc718f10e21001d7ec2a66f from qemu
This commit is contained in:
Paolo Bonzini 2018-02-13 09:30:20 -05:00 committed by Lioncash
parent c333585a4d
commit 1b1f82cef7
No known key found for this signature in database
GPG Key ID: 4E3C3CC1031BA9C7
16 changed files with 31 additions and 21 deletions

View File

@ -284,8 +284,8 @@
#define cpu_outb cpu_outb_aarch64
#define cpu_outl cpu_outl_aarch64
#define cpu_outw cpu_outw_aarch64
#define cpu_physical_memory_all_dirty cpu_physical_memory_all_dirty_aarch64
#define cpu_physical_memory_clear_dirty_range cpu_physical_memory_clear_dirty_range_aarch64
#define cpu_physical_memory_get_clean cpu_physical_memory_get_clean_aarch64
#define cpu_physical_memory_get_dirty cpu_physical_memory_get_dirty_aarch64
#define cpu_physical_memory_get_dirty_flag cpu_physical_memory_get_dirty_flag_aarch64
#define cpu_physical_memory_is_clean cpu_physical_memory_is_clean_aarch64

View File

@ -284,8 +284,8 @@
#define cpu_outb cpu_outb_aarch64eb
#define cpu_outl cpu_outl_aarch64eb
#define cpu_outw cpu_outw_aarch64eb
#define cpu_physical_memory_all_dirty cpu_physical_memory_all_dirty_aarch64eb
#define cpu_physical_memory_clear_dirty_range cpu_physical_memory_clear_dirty_range_aarch64eb
#define cpu_physical_memory_get_clean cpu_physical_memory_get_clean_aarch64eb
#define cpu_physical_memory_get_dirty cpu_physical_memory_get_dirty_aarch64eb
#define cpu_physical_memory_get_dirty_flag cpu_physical_memory_get_dirty_flag_aarch64eb
#define cpu_physical_memory_is_clean cpu_physical_memory_is_clean_aarch64eb

View File

@ -284,8 +284,8 @@
#define cpu_outb cpu_outb_arm
#define cpu_outl cpu_outl_arm
#define cpu_outw cpu_outw_arm
#define cpu_physical_memory_all_dirty cpu_physical_memory_all_dirty_arm
#define cpu_physical_memory_clear_dirty_range cpu_physical_memory_clear_dirty_range_arm
#define cpu_physical_memory_get_clean cpu_physical_memory_get_clean_arm
#define cpu_physical_memory_get_dirty cpu_physical_memory_get_dirty_arm
#define cpu_physical_memory_get_dirty_flag cpu_physical_memory_get_dirty_flag_arm
#define cpu_physical_memory_is_clean cpu_physical_memory_is_clean_arm

View File

@ -284,8 +284,8 @@
#define cpu_outb cpu_outb_armeb
#define cpu_outl cpu_outl_armeb
#define cpu_outw cpu_outw_armeb
#define cpu_physical_memory_all_dirty cpu_physical_memory_all_dirty_armeb
#define cpu_physical_memory_clear_dirty_range cpu_physical_memory_clear_dirty_range_armeb
#define cpu_physical_memory_get_clean cpu_physical_memory_get_clean_armeb
#define cpu_physical_memory_get_dirty cpu_physical_memory_get_dirty_armeb
#define cpu_physical_memory_get_dirty_flag cpu_physical_memory_get_dirty_flag_armeb
#define cpu_physical_memory_is_clean cpu_physical_memory_is_clean_armeb

View File

@ -1032,7 +1032,9 @@ static ram_addr_t ram_block_add(struct uc_struct *uc, RAMBlock *new_block, Error
old_ram_size, new_ram_size);
}
}
cpu_physical_memory_set_dirty_range(uc, new_block->offset, new_block->length);
cpu_physical_memory_set_dirty_range(uc, new_block->offset,
new_block->length,
DIRTY_CLIENTS_ALL);
qemu_ram_setup_dump(new_block->host, new_block->length);
//qemu_madvise(new_block->host, new_block->length, QEMU_MADV_HUGEPAGE);

View File

@ -290,8 +290,8 @@ symbols = (
'cpu_outb',
'cpu_outl',
'cpu_outw',
'cpu_physical_memory_all_dirty',
'cpu_physical_memory_clear_dirty_range',
'cpu_physical_memory_get_clean',
'cpu_physical_memory_get_dirty',
'cpu_physical_memory_get_dirty_flag',
'cpu_physical_memory_is_clean',

View File

@ -32,6 +32,9 @@ void *qemu_get_ram_ptr(struct uc_struct *uc, ram_addr_t addr);
void qemu_ram_free(struct uc_struct *c, ram_addr_t addr);
void qemu_ram_free_from_ptr(struct uc_struct *uc, ram_addr_t addr);
#define DIRTY_CLIENTS_ALL ((1 << DIRTY_MEMORY_NUM) - 1)
#define DIRTY_CLIENTS_NOCODE (DIRTY_CLIENTS_ALL & ~(1 << DIRTY_MEMORY_CODE))
static inline bool cpu_physical_memory_get_dirty(struct uc_struct *uc, ram_addr_t start,
ram_addr_t length,
unsigned client)
@ -47,7 +50,7 @@ static inline bool cpu_physical_memory_get_dirty(struct uc_struct *uc, ram_addr_
return next < end;
}
static inline bool cpu_physical_memory_get_clean(struct uc_struct *uc, ram_addr_t start,
static inline bool cpu_physical_memory_all_dirty(struct uc_struct *uc, ram_addr_t start,
ram_addr_t length,
unsigned client)
{
@ -59,7 +62,7 @@ static inline bool cpu_physical_memory_get_clean(struct uc_struct *uc, ram_addr_
page = start >> TARGET_PAGE_BITS;
next = find_next_zero_bit(uc->ram_list.dirty_memory[client], end, page);
return next < end;
return next >= end;
}
static inline bool cpu_physical_memory_get_dirty_flag(struct uc_struct *uc, ram_addr_t addr,
@ -76,7 +79,7 @@ static inline bool cpu_physical_memory_is_clean(struct uc_struct *uc, ram_addr_t
static inline bool cpu_physical_memory_range_includes_clean(struct uc_struct *uc, ram_addr_t start,
ram_addr_t length)
{
return cpu_physical_memory_get_clean(uc, start, length, DIRTY_MEMORY_CODE);
return !cpu_physical_memory_all_dirty(uc, start, length, DIRTY_MEMORY_CODE);
}
static inline void cpu_physical_memory_set_dirty_flag(struct uc_struct *uc, ram_addr_t addr,
@ -87,13 +90,17 @@ static inline void cpu_physical_memory_set_dirty_flag(struct uc_struct *uc, ram_
}
static inline void cpu_physical_memory_set_dirty_range(struct uc_struct *uc, ram_addr_t start,
ram_addr_t length)
ram_addr_t length,
uint8_t mask)
{
unsigned long end, page;
end = TARGET_PAGE_ALIGN(start + length) >> TARGET_PAGE_BITS;
page = start >> TARGET_PAGE_BITS;
bitmap_set(uc->ram_list.dirty_memory[DIRTY_MEMORY_CODE], page, end - page);
if (unlikely(mask & (1 << DIRTY_MEMORY_CODE))) {
bitmap_set(uc->ram_list.dirty_memory[DIRTY_MEMORY_CODE], page, end - page);
}
}
#if !defined(_WIN32)
@ -136,7 +143,8 @@ static inline void cpu_physical_memory_set_dirty_lebitmap(struct uc_struct *uc,
addr = page_number * TARGET_PAGE_SIZE;
ram_addr = start + addr;
cpu_physical_memory_set_dirty_range(uc, ram_addr,
TARGET_PAGE_SIZE * hpratio);
TARGET_PAGE_SIZE * hpratio,
DIRTY_CLIENTS_ALL);
} while (c != 0);
}
}

View File

@ -284,8 +284,8 @@
#define cpu_outb cpu_outb_m68k
#define cpu_outl cpu_outl_m68k
#define cpu_outw cpu_outw_m68k
#define cpu_physical_memory_all_dirty cpu_physical_memory_all_dirty_m68k
#define cpu_physical_memory_clear_dirty_range cpu_physical_memory_clear_dirty_range_m68k
#define cpu_physical_memory_get_clean cpu_physical_memory_get_clean_m68k
#define cpu_physical_memory_get_dirty cpu_physical_memory_get_dirty_m68k
#define cpu_physical_memory_get_dirty_flag cpu_physical_memory_get_dirty_flag_m68k
#define cpu_physical_memory_is_clean cpu_physical_memory_is_clean_m68k

View File

@ -284,8 +284,8 @@
#define cpu_outb cpu_outb_mips
#define cpu_outl cpu_outl_mips
#define cpu_outw cpu_outw_mips
#define cpu_physical_memory_all_dirty cpu_physical_memory_all_dirty_mips
#define cpu_physical_memory_clear_dirty_range cpu_physical_memory_clear_dirty_range_mips
#define cpu_physical_memory_get_clean cpu_physical_memory_get_clean_mips
#define cpu_physical_memory_get_dirty cpu_physical_memory_get_dirty_mips
#define cpu_physical_memory_get_dirty_flag cpu_physical_memory_get_dirty_flag_mips
#define cpu_physical_memory_is_clean cpu_physical_memory_is_clean_mips

View File

@ -284,8 +284,8 @@
#define cpu_outb cpu_outb_mips64
#define cpu_outl cpu_outl_mips64
#define cpu_outw cpu_outw_mips64
#define cpu_physical_memory_all_dirty cpu_physical_memory_all_dirty_mips64
#define cpu_physical_memory_clear_dirty_range cpu_physical_memory_clear_dirty_range_mips64
#define cpu_physical_memory_get_clean cpu_physical_memory_get_clean_mips64
#define cpu_physical_memory_get_dirty cpu_physical_memory_get_dirty_mips64
#define cpu_physical_memory_get_dirty_flag cpu_physical_memory_get_dirty_flag_mips64
#define cpu_physical_memory_is_clean cpu_physical_memory_is_clean_mips64

View File

@ -284,8 +284,8 @@
#define cpu_outb cpu_outb_mips64el
#define cpu_outl cpu_outl_mips64el
#define cpu_outw cpu_outw_mips64el
#define cpu_physical_memory_all_dirty cpu_physical_memory_all_dirty_mips64el
#define cpu_physical_memory_clear_dirty_range cpu_physical_memory_clear_dirty_range_mips64el
#define cpu_physical_memory_get_clean cpu_physical_memory_get_clean_mips64el
#define cpu_physical_memory_get_dirty cpu_physical_memory_get_dirty_mips64el
#define cpu_physical_memory_get_dirty_flag cpu_physical_memory_get_dirty_flag_mips64el
#define cpu_physical_memory_is_clean cpu_physical_memory_is_clean_mips64el

View File

@ -284,8 +284,8 @@
#define cpu_outb cpu_outb_mipsel
#define cpu_outl cpu_outl_mipsel
#define cpu_outw cpu_outw_mipsel
#define cpu_physical_memory_all_dirty cpu_physical_memory_all_dirty_mipsel
#define cpu_physical_memory_clear_dirty_range cpu_physical_memory_clear_dirty_range_mipsel
#define cpu_physical_memory_get_clean cpu_physical_memory_get_clean_mipsel
#define cpu_physical_memory_get_dirty cpu_physical_memory_get_dirty_mipsel
#define cpu_physical_memory_get_dirty_flag cpu_physical_memory_get_dirty_flag_mipsel
#define cpu_physical_memory_is_clean cpu_physical_memory_is_clean_mipsel

View File

@ -284,8 +284,8 @@
#define cpu_outb cpu_outb_powerpc
#define cpu_outl cpu_outl_powerpc
#define cpu_outw cpu_outw_powerpc
#define cpu_physical_memory_all_dirty cpu_physical_memory_all_dirty_powerpc
#define cpu_physical_memory_clear_dirty_range cpu_physical_memory_clear_dirty_range_powerpc
#define cpu_physical_memory_get_clean cpu_physical_memory_get_clean_powerpc
#define cpu_physical_memory_get_dirty cpu_physical_memory_get_dirty_powerpc
#define cpu_physical_memory_get_dirty_flag cpu_physical_memory_get_dirty_flag_powerpc
#define cpu_physical_memory_is_clean cpu_physical_memory_is_clean_powerpc

View File

@ -284,8 +284,8 @@
#define cpu_outb cpu_outb_sparc
#define cpu_outl cpu_outl_sparc
#define cpu_outw cpu_outw_sparc
#define cpu_physical_memory_all_dirty cpu_physical_memory_all_dirty_sparc
#define cpu_physical_memory_clear_dirty_range cpu_physical_memory_clear_dirty_range_sparc
#define cpu_physical_memory_get_clean cpu_physical_memory_get_clean_sparc
#define cpu_physical_memory_get_dirty cpu_physical_memory_get_dirty_sparc
#define cpu_physical_memory_get_dirty_flag cpu_physical_memory_get_dirty_flag_sparc
#define cpu_physical_memory_is_clean cpu_physical_memory_is_clean_sparc

View File

@ -284,8 +284,8 @@
#define cpu_outb cpu_outb_sparc64
#define cpu_outl cpu_outl_sparc64
#define cpu_outw cpu_outw_sparc64
#define cpu_physical_memory_all_dirty cpu_physical_memory_all_dirty_sparc64
#define cpu_physical_memory_clear_dirty_range cpu_physical_memory_clear_dirty_range_sparc64
#define cpu_physical_memory_get_clean cpu_physical_memory_get_clean_sparc64
#define cpu_physical_memory_get_dirty cpu_physical_memory_get_dirty_sparc64
#define cpu_physical_memory_get_dirty_flag cpu_physical_memory_get_dirty_flag_sparc64
#define cpu_physical_memory_is_clean cpu_physical_memory_is_clean_sparc64

View File

@ -284,8 +284,8 @@
#define cpu_outb cpu_outb_x86_64
#define cpu_outl cpu_outl_x86_64
#define cpu_outw cpu_outw_x86_64
#define cpu_physical_memory_all_dirty cpu_physical_memory_all_dirty_x86_64
#define cpu_physical_memory_clear_dirty_range cpu_physical_memory_clear_dirty_range_x86_64
#define cpu_physical_memory_get_clean cpu_physical_memory_get_clean_x86_64
#define cpu_physical_memory_get_dirty cpu_physical_memory_get_dirty_x86_64
#define cpu_physical_memory_get_dirty_flag cpu_physical_memory_get_dirty_flag_x86_64
#define cpu_physical_memory_is_clean cpu_physical_memory_is_clean_x86_64