From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:54067) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UK2UI-0001Da-AQ for qemu-devel@nongnu.org; Mon, 25 Mar 2013 04:10:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UK2UH-0005HP-7N for qemu-devel@nongnu.org; Mon, 25 Mar 2013 04:10:38 -0400 Received: from mx1.redhat.com ([209.132.183.28]:15981) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UK2UH-0005HC-0F for qemu-devel@nongnu.org; Mon, 25 Mar 2013 04:10:37 -0400 Message-ID: <515006C1.9070704@redhat.com> Date: Mon, 25 Mar 2013 10:11:45 +0200 From: Orit Wasserman MIME-Version: 1.0 References: <1363856971-4601-1-git-send-email-owasserm@redhat.com> <1363856971-4601-11-git-send-email-owasserm@redhat.com> <514DD805.50604@linux.vnet.ibm.com> In-Reply-To: <514DD805.50604@linux.vnet.ibm.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [RFC 10/12] Add qemu_put_buffer_no_copy List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Michael R. Hines" Cc: pbonzini@redhat.com, quintela@redhat.com, chegu_vinod@hp.com, qemu-devel@nongnu.org, mst@redhat.com On 03/23/2013 06:27 PM, Michael R. Hines wrote: > Can you add a "flag" or something to indicate that the iov pointer belongs to RAM and not to device state? > > That way, I could re-use this code for RDMA - if I see this flag, I will know to send to RDMA..... This function is called only for ram pages so no need for flag. Orit > > - Michael > > > On 03/21/2013 05:09 AM, Orit Wasserman wrote: >> This allow us to add a buffer to the iovec to send without copying it >> into the static buffer. >> >> Signed-off-by: Orit Wasserman >> --- >> include/migration/qemu-file.h | 5 +++++ >> savevm.c | 42 ++++++++++++++++++++++++------------------ >> 2 files changed, 29 insertions(+), 18 deletions(-) >> >> diff --git a/include/migration/qemu-file.h b/include/migration/qemu-file.h >> index 8d3da9b..5168be2 100644 >> --- a/include/migration/qemu-file.h >> +++ b/include/migration/qemu-file.h >> @@ -75,6 +75,11 @@ int qemu_fclose(QEMUFile *f); >> int64_t qemu_ftell(QEMUFile *f); >> void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, int size); >> void qemu_put_byte(QEMUFile *f, int v); >> +/* >> + * put_buffer without copying the buffer. >> + * The buffer should be available till it is sent. >> + */ >> +void qemu_put_buffer_no_copy(QEMUFile *f, const uint8_t *buf, int size); >> >> static inline void qemu_put_ubyte(QEMUFile *f, unsigned int v) >> { >> diff --git a/savevm.c b/savevm.c >> index 40d96f4..32a506e 100644 >> --- a/savevm.c >> +++ b/savevm.c >> @@ -629,6 +629,22 @@ void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, int size) >> { >> int l; >> >> + while (size > 0) { >> + l = IO_BUF_SIZE - f->buf_index; >> + if (l > size) { >> + l = size; >> + } >> + memcpy(f->buf + f->buf_index, buf, l); >> + f->buf_index += l; >> + f->is_write = 1; >> + qemu_put_buffer_no_copy(f, f->buf + (f->buf_index - l), l); >> + buf += l; >> + size -= l; >> + } >> +} >> + >> +void qemu_put_buffer_no_copy(QEMUFile *f, const uint8_t *buf, int size) >> +{ >> if (f->last_error) { >> return; >> } >> @@ -639,24 +655,14 @@ void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, int size) >> abort(); >> } >> >> - while (size > 0) { >> - l = IO_BUF_SIZE - f->buf_index; >> - if (l > size) >> - l = size; >> - memcpy(f->buf + f->buf_index, buf, l); >> - f->iov[f->iovcnt].iov_base = f->buf + f->buf_index; >> - f->iov[f->iovcnt++].iov_len = l; >> - f->is_write = 1; >> - f->buf_index += l; >> - f->bytes_xfer += l; >> - buf += l; >> - size -= l; >> - if (f->buf_index >= IO_BUF_SIZE || f->iovcnt >= MAX_IOV_SIZE) { >> - qemu_fflush(f); >> - if (qemu_file_get_error(f)) { >> - break; >> - } >> - } >> + f->iov[f->iovcnt].iov_base = (uint8_t *)buf; >> + f->iov[f->iovcnt++].iov_len = size; >> + >> + f->is_write = 1; >> + f->bytes_xfer += size; >> + >> + if (f->buf_index >= IO_BUF_SIZE || f->iovcnt >= MAX_IOV_SIZE) { >> + qemu_fflush(f); >> } >> } >> >