qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2 11/16] postcopy: Mask fault addresses to huge


From: Laurent Vivier
Subject: Re: [Qemu-devel] [PATCH v2 11/16] postcopy: Mask fault addresses to huge page boundary
Date: Fri, 24 Feb 2017 16:59:35 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.7.0

On 06/02/2017 18:33, Dr. David Alan Gilbert (git) wrote:
> From: "Dr. David Alan Gilbert" <address@hidden>
> 
> Currently the fault address received by userfault is rounded to
> the host page boundary and a host page is requested from the source.
> Use the current RAMBlock page size instead of the general host page
> size so that for RAMBlocks backed by huge pages we request the whole
> huge page.
> 
> Signed-off-by: Dr. David Alan Gilbert <address@hidden>
> Reviewed-by: Juan Quintela <address@hidden>
> ---
>  include/exec/memory.h    | 1 -
>  migration/postcopy-ram.c | 7 +++----
>  2 files changed, 3 insertions(+), 5 deletions(-)
> 
> diff --git a/include/exec/memory.h b/include/exec/memory.h
> index 987f925..c428891 100644
> --- a/include/exec/memory.h
> +++ b/include/exec/memory.h
> @@ -1614,7 +1614,6 @@ MemTxResult address_space_read_continue(AddressSpace 
> *as, hwaddr addr,
>  MemTxResult address_space_read_full(AddressSpace *as, hwaddr addr,
>                                      MemTxAttrs attrs, uint8_t *buf, int len);
>  void *qemu_map_ram_ptr(RAMBlock *ram_block, ram_addr_t addr);
> -
>  static inline bool memory_access_is_direct(MemoryRegion *mr, bool is_write)
>  {
>      if (is_write) {

This hunk removing one blank line is strange...

> diff --git a/migration/postcopy-ram.c b/migration/postcopy-ram.c
> index 4c736d2..03cbd6e 100644
> --- a/migration/postcopy-ram.c
> +++ b/migration/postcopy-ram.c
> @@ -403,7 +403,6 @@ static void *postcopy_ram_fault_thread(void *opaque)
>      MigrationIncomingState *mis = opaque;
>      struct uffd_msg msg;
>      int ret;
> -    size_t hostpagesize = getpagesize();
>      RAMBlock *rb = NULL;
>      RAMBlock *last_rb = NULL; /* last RAMBlock we sent part of */
>  
> @@ -470,7 +469,7 @@ static void *postcopy_ram_fault_thread(void *opaque)
>              break;
>          }
>  
> -        rb_offset &= ~(hostpagesize - 1);
> +        rb_offset &= ~(qemu_ram_pagesize(rb) - 1);
>          trace_postcopy_ram_fault_thread_request(msg.arg.pagefault.address,
>                                                  qemu_ram_get_idstr(rb),
>                                                  rb_offset);
> @@ -482,11 +481,11 @@ static void *postcopy_ram_fault_thread(void *opaque)
>          if (rb != last_rb) {
>              last_rb = rb;
>              migrate_send_rp_req_pages(mis, qemu_ram_get_idstr(rb),
> -                                     rb_offset, hostpagesize);
> +                                     rb_offset, qemu_ram_pagesize(rb));
>          } else {
>              /* Save some space */
>              migrate_send_rp_req_pages(mis, NULL,
> -                                     rb_offset, hostpagesize);
> +                                     rb_offset, qemu_ram_pagesize(rb));
>          }
>      }
>      trace_postcopy_ram_fault_thread_exit();
> 
Reviewed-by: Laurent Vivier <address@hidden>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]