On 06/02/2017 18:32, Dr. David Alan Gilbert (git) wrote:
> From: "Dr. David Alan Gilbert" <dgilb...@redhat.com>
>
> Record the largest page size in use; we'll need it soon for allocating
> temporary buffers.
>
> Signed-off-by: Dr. David Alan Gilbert <dgilb...@redhat.com>
> ---
> exec.c | 13 +++++++++++++
> include/exec/cpu-common.h | 1 +
> include/migration/migration.h | 1 +
> migration/migration.c | 1 +
> 4 files changed, 16 insertions(+)
>
> diff --git a/exec.c b/exec.c
> index c25f6b3..59f3b6b 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -1524,6 +1524,19 @@ size_t qemu_ram_pagesize(RAMBlock *rb)
> return rb->page_size;
> }
>
> +/* Returns the largest size of page in use */
> +size_t qemu_ram_pagesize_largest(void)
> +{
> + RAMBlock *block;
> + size_t largest = 0;
> +
> + QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
> + largest = MAX(largest, qemu_ram_pagesize(block));
> + }
> +
> + return largest;
> +}
> +
> static int memory_try_enable_merging(void *addr, size_t len)
> {
> if (!machine_mem_merge(current_machine)) {
> diff --git a/include/exec/cpu-common.h b/include/exec/cpu-common.h
> index 1350c2e..8c305aa 100644
> --- a/include/exec/cpu-common.h
> +++ b/include/exec/cpu-common.h
> @@ -64,6 +64,7 @@ void qemu_ram_set_idstr(RAMBlock *block, const char *name,
> DeviceState *dev);
> void qemu_ram_unset_idstr(RAMBlock *block);
> const char *qemu_ram_get_idstr(RAMBlock *rb);
> size_t qemu_ram_pagesize(RAMBlock *block);
> +size_t qemu_ram_pagesize_largest(void);
>
> void cpu_physical_memory_rw(hwaddr addr, uint8_t *buf,
> int len, int is_write);
> diff --git a/include/migration/migration.h b/include/migration/migration.h
> index 96c9d6e..c9c1d5f 100644
> --- a/include/migration/migration.h
> +++ b/include/migration/migration.h
> @@ -92,6 +92,7 @@ struct MigrationIncomingState {
> */
> QemuEvent main_thread_load_event;
>
> + size_t largest_page_size;
> bool have_fault_thread;
> QemuThread fault_thread;
> QemuSemaphore fault_thread_sem;
> diff --git a/migration/migration.c b/migration/migration.c
> index 283677c..e0fdafc 100644
> --- a/migration/migration.c
> +++ b/migration/migration.c
> @@ -387,6 +387,7 @@ static void process_incoming_migration_co(void *opaque)
> int ret;
>
> mis = migration_incoming_state_new(f);
> + mis->largest_page_size = qemu_ram_pagesize_largest();
> postcopy_state_set(POSTCOPY_INCOMING_NONE);
> migrate_set_state(&mis->state, MIGRATION_STATUS_NONE,
> MIGRATION_STATUS_ACTIVE);
>
Reviewed-by: Laurent Vivier <lviv...@redhat.com>