qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH v3 09/23] multifd: Make zstd compression method not use iovs


From: Dr. David Alan Gilbert
Subject: Re: [PATCH v3 09/23] multifd: Make zstd compression method not use iovs
Date: Mon, 29 Nov 2021 17:16:20 +0000
User-agent: Mutt/2.1.3 (2021-09-10)

* Juan Quintela (quintela@redhat.com) wrote:
> Signed-off-by: Juan Quintela <quintela@redhat.com>

Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>

> ---
>  migration/multifd-zstd.c | 20 ++++++++++----------
>  1 file changed, 10 insertions(+), 10 deletions(-)
> 
> diff --git a/migration/multifd-zstd.c b/migration/multifd-zstd.c
> index a8b104f4ee..2d5b61106c 100644
> --- a/migration/multifd-zstd.c
> +++ b/migration/multifd-zstd.c
> @@ -13,6 +13,7 @@
>  #include "qemu/osdep.h"
>  #include <zstd.h>
>  #include "qemu/rcu.h"
> +#include "exec/ramblock.h"
>  #include "exec/target_page.h"
>  #include "qapi/error.h"
>  #include "migration.h"
> @@ -111,8 +112,8 @@ static void zstd_send_cleanup(MultiFDSendParams *p, Error 
> **errp)
>   */
>  static int zstd_send_prepare(MultiFDSendParams *p, Error **errp)
>  {
> -    struct iovec *iov = p->pages->iov;
>      struct zstd_data *z = p->data;
> +    size_t page_size = qemu_target_page_size();
>      int ret;
>      uint32_t i;
>  
> @@ -126,8 +127,8 @@ static int zstd_send_prepare(MultiFDSendParams *p, Error 
> **errp)
>          if (i == p->pages->num - 1) {
>              flush = ZSTD_e_flush;
>          }
> -        z->in.src = iov[i].iov_base;
> -        z->in.size = iov[i].iov_len;
> +        z->in.src = p->pages->block->host + p->pages->offset[i];
> +        z->in.size = page_size;
>          z->in.pos = 0;
>  
>          /*
> @@ -256,7 +257,8 @@ static int zstd_recv_pages(MultiFDRecvParams *p, Error 
> **errp)
>  {
>      uint32_t in_size = p->next_packet_size;
>      uint32_t out_size = 0;
> -    uint32_t expected_size = p->pages->num * qemu_target_page_size();
> +    size_t page_size = qemu_target_page_size();
> +    uint32_t expected_size = p->pages->num * page_size;
>      uint32_t flags = p->flags & MULTIFD_FLAG_COMPRESSION_MASK;
>      struct zstd_data *z = p->data;
>      int ret;
> @@ -278,10 +280,8 @@ static int zstd_recv_pages(MultiFDRecvParams *p, Error 
> **errp)
>      z->in.pos = 0;
>  
>      for (i = 0; i < p->pages->num; i++) {
> -        struct iovec *iov = &p->pages->iov[i];
> -
> -        z->out.dst = iov->iov_base;
> -        z->out.size = iov->iov_len;
> +        z->out.dst = p->pages->block->host + p->pages->offset[i];
> +        z->out.size = page_size;
>          z->out.pos = 0;
>  
>          /*
> @@ -295,8 +295,8 @@ static int zstd_recv_pages(MultiFDRecvParams *p, Error 
> **errp)
>          do {
>              ret = ZSTD_decompressStream(z->zds, &z->out, &z->in);
>          } while (ret > 0 && (z->in.size - z->in.pos > 0)
> -                         && (z->out.pos < iov->iov_len));
> -        if (ret > 0 && (z->out.pos < iov->iov_len)) {
> +                         && (z->out.pos < page_size));
> +        if (ret > 0 && (z->out.pos < page_size)) {
>              error_setg(errp, "multifd %d: decompressStream buffer too small",
>                         p->id);
>              return -1;
> -- 
> 2.33.1
> 
-- 
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK




reply via email to

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