qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 4/5] migration: size_t'ify some of qemu-file


From: zhanghailiang
Subject: Re: [Qemu-devel] [PATCH 4/5] migration: size_t'ify some of qemu-file
Date: Thu, 13 Aug 2015 20:15:00 +0800
User-agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.1.0

On 2015/8/13 18:51, Dr. David Alan Gilbert (git) wrote:
From: "Dr. David Alan Gilbert" <address@hidden>

This is a start on using size_t more in qemu-file and friends;
it fixes up QEMUFilePutBufferFunc and QEMUFileGetBufferFunc
to take size_t lengths and return ssize_t return values (like read(2))
and fixes up all the different implementations of them.

Note that I've not yet followed this deeply into bdrv_ implementations.

Signed-off-by: Dr. David Alan Gilbert <address@hidden>
---

Reviewed-by: zhanghailiang <address@hidden>

  include/migration/qemu-file.h |  8 ++++----
  migration/qemu-file-buf.c     |  7 ++++---
  migration/qemu-file-stdio.c   | 11 ++++++-----
  migration/qemu-file-unix.c    |  6 ++++--
  migration/rdma.c              | 13 +++++++------
  migration/savevm.c            |  7 ++++---
  trace-events                  |  2 +-
  7 files changed, 30 insertions(+), 24 deletions(-)

diff --git a/include/migration/qemu-file.h b/include/migration/qemu-file.h
index ea49f33..e1e2bab 100644
--- a/include/migration/qemu-file.h
+++ b/include/migration/qemu-file.h
@@ -31,15 +31,15 @@
   * The pos argument can be ignored if the file is only being used for
   * streaming.  The handler should try to write all of the data it can.
   */
-typedef int (QEMUFilePutBufferFunc)(void *opaque, const uint8_t *buf,
-                                    int64_t pos, int size);
+typedef ssize_t (QEMUFilePutBufferFunc)(void *opaque, const uint8_t *buf,
+                                        int64_t pos, size_t size);

  /* Read a chunk of data from a file at the given position.  The pos argument
   * can be ignored if the file is only be used for streaming.  The number of
   * bytes actually read should be returned.
   */
-typedef int (QEMUFileGetBufferFunc)(void *opaque, uint8_t *buf,
-                                    int64_t pos, int size);
+typedef ssize_t (QEMUFileGetBufferFunc)(void *opaque, uint8_t *buf,
+                                        int64_t pos, size_t size);

  /* Close a file
   *
diff --git a/migration/qemu-file-buf.c b/migration/qemu-file-buf.c
index 2de9330..1d9528e 100644
--- a/migration/qemu-file-buf.c
+++ b/migration/qemu-file-buf.c
@@ -372,7 +372,8 @@ typedef struct QEMUBuffer {
      bool qsb_allocated;
  } QEMUBuffer;

-static int buf_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
+static ssize_t buf_get_buffer(void *opaque, uint8_t *buf, int64_t pos,
+                              size_t size)
  {
      QEMUBuffer *s = opaque;
      ssize_t len = qsb_get_length(s->qsb) - pos;
@@ -387,8 +388,8 @@ static int buf_get_buffer(void *opaque, uint8_t *buf, 
int64_t pos, int size)
      return qsb_get_buffer(s->qsb, pos, len, buf);
  }

-static int buf_put_buffer(void *opaque, const uint8_t *buf,
-                          int64_t pos, int size)
+static ssize_t buf_put_buffer(void *opaque, const uint8_t *buf,
+                              int64_t pos, size_t size)
  {
      QEMUBuffer *s = opaque;

diff --git a/migration/qemu-file-stdio.c b/migration/qemu-file-stdio.c
index 285068b..dc91137 100644
--- a/migration/qemu-file-stdio.c
+++ b/migration/qemu-file-stdio.c
@@ -37,11 +37,11 @@ static int stdio_get_fd(void *opaque)
      return fileno(s->stdio_file);
  }

-static int stdio_put_buffer(void *opaque, const uint8_t *buf, int64_t pos,
-                            int size)
+static ssize_t stdio_put_buffer(void *opaque, const uint8_t *buf, int64_t pos,
+                                size_t size)
  {
      QEMUFileStdio *s = opaque;
-    int res;
+    size_t res;

      res = fwrite(buf, 1, size, s->stdio_file);

@@ -51,11 +51,12 @@ static int stdio_put_buffer(void *opaque, const uint8_t 
*buf, int64_t pos,
      return res;
  }

-static int stdio_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
+static ssize_t stdio_get_buffer(void *opaque, uint8_t *buf, int64_t pos,
+                                size_t size)
  {
      QEMUFileStdio *s = opaque;
      FILE *fp = s->stdio_file;
-    int bytes;
+    ssize_t bytes;

      for (;;) {
          clearerr(fp);
diff --git a/migration/qemu-file-unix.c b/migration/qemu-file-unix.c
index bfbc086..adfe91a 100644
--- a/migration/qemu-file-unix.c
+++ b/migration/qemu-file-unix.c
@@ -54,7 +54,8 @@ static int socket_get_fd(void *opaque)
      return s->fd;
  }

-static int socket_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
+static ssize_t socket_get_buffer(void *opaque, uint8_t *buf, int64_t pos,
+                                 size_t size)
  {
      QEMUFileSocket *s = opaque;
      ssize_t len;
@@ -138,7 +139,8 @@ static ssize_t unix_writev_buffer(void *opaque, struct 
iovec *iov, int iovcnt,
      return total;
  }

-static int unix_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
+static ssize_t unix_get_buffer(void *opaque, uint8_t *buf, int64_t pos,
+                              size_t size)
  {
      QEMUFileSocket *s = opaque;
      ssize_t len;
diff --git a/migration/rdma.c b/migration/rdma.c
index 74876fd..fd430c7 100644
--- a/migration/rdma.c
+++ b/migration/rdma.c
@@ -2519,8 +2519,8 @@ static void *qemu_rdma_data_init(const char *host_port, 
Error **errp)
   * SEND messages for control only.
   * VM's ram is handled with regular RDMA messages.
   */
-static int qemu_rdma_put_buffer(void *opaque, const uint8_t *buf,
-                                int64_t pos, int size)
+static ssize_t qemu_rdma_put_buffer(void *opaque, const uint8_t *buf,
+                                    int64_t pos, size_t size)
  {
      QEMUFileRDMA *r = opaque;
      QEMUFile *f = r->file;
@@ -2547,7 +2547,8 @@ static int qemu_rdma_put_buffer(void *opaque, const 
uint8_t *buf,
          r->len = MIN(remaining, RDMA_SEND_INCREMENT);
          remaining -= r->len;

-        head.len = r->len;
+        /* Guaranteed to fit due to RDMA_SEND_INCREMENT MIN above */
+        head.len = (uint32_t)r->len;
          head.type = RDMA_CONTROL_QEMU_FILE;

          ret = qemu_rdma_exchange_send(rdma, &head, data, NULL, NULL, NULL);
@@ -2564,7 +2565,7 @@ static int qemu_rdma_put_buffer(void *opaque, const 
uint8_t *buf,
  }

  static size_t qemu_rdma_fill(RDMAContext *rdma, uint8_t *buf,
-                             int size, int idx)
+                             size_t size, int idx)
  {
      size_t len = 0;

@@ -2585,8 +2586,8 @@ static size_t qemu_rdma_fill(RDMAContext *rdma, uint8_t 
*buf,
   * RDMA links don't use bytestreams, so we have to
   * return bytes to QEMUFile opportunistically.
   */
-static int qemu_rdma_get_buffer(void *opaque, uint8_t *buf,
-                                int64_t pos, int size)
+static ssize_t qemu_rdma_get_buffer(void *opaque, uint8_t *buf,
+                                    int64_t pos, size_t size)
  {
      QEMUFileRDMA *r = opaque;
      RDMAContext *rdma = r->rdma;
diff --git a/migration/savevm.c b/migration/savevm.c
index 6071215..1bd8827 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -138,14 +138,15 @@ static ssize_t block_writev_buffer(void *opaque, struct 
iovec *iov, int iovcnt,
      return qiov.size;
  }

-static int block_put_buffer(void *opaque, const uint8_t *buf,
-                           int64_t pos, int size)
+static ssize_t block_put_buffer(void *opaque, const uint8_t *buf,
+                                int64_t pos, size_t size)
  {
      bdrv_save_vmstate(opaque, buf, pos, size);
      return size;
  }

-static int block_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
+static ssize_t block_get_buffer(void *opaque, uint8_t *buf, int64_t pos,
+                                size_t size)
  {
      return bdrv_load_vmstate(opaque, buf, pos, size);
  }
diff --git a/trace-events b/trace-events
index 1509e5b..1e7d9b6 100644
--- a/trace-events
+++ b/trace-events
@@ -1428,7 +1428,7 @@ qemu_rdma_exchange_get_response_none(const char *desc, int 
type) "Surprise: got
  qemu_rdma_exchange_send_issue_callback(void) ""
  qemu_rdma_exchange_send_waiting(const char *desc) "Waiting for response %s"
  qemu_rdma_exchange_send_received(const char *desc) "Response %s received."
-qemu_rdma_fill(int64_t control_len, int size) "RDMA %" PRId64 " of %d bytes already 
in buffer"
+qemu_rdma_fill(size_t control_len, size_t size) "RDMA %zd of %zd bytes already in 
buffer"
  qemu_rdma_init_ram_blocks(int blocks) "Allocated %d local ram block 
structures"
  qemu_rdma_poll_recv(const char *compstr, int64_t comp, int64_t id, int sent) "completion %s #%" 
PRId64 " received (%" PRId64 ") left %d"
  qemu_rdma_poll_write(const char *compstr, int64_t comp, int left, uint64_t block, uint64_t chunk, void *local, void 
*remote) "completions %s (%" PRId64 ") left %d, block %" PRIu64 ", chunk: %" PRIu64 
" %p %p"






reply via email to

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