All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Daniel P. Berrangé" <berrange@redhat.com>
To: elena.ufimtseva@oracle.com
Cc: fam@euphon.net, john.g.johnson@oracle.com,
	swapnil.ingle@nutanix.com, mst@redhat.com, qemu-devel@nongnu.org,
	kraxel@redhat.com, jag.raman@oracle.com, quintela@redhat.com,
	armbru@redhat.com, kanth.ghatraju@oracle.com, felipe@nutanix.com,
	thuth@redhat.com, ehabkost@redhat.com, konrad.wilk@oracle.com,
	dgilbert@redhat.com, alex.williamson@redhat.com,
	stefanha@redhat.com, pbonzini@redhat.com, kwolf@redhat.com,
	mreitz@redhat.com, ross.lagerwall@citrix.com,
	marcandre.lureau@gmail.com, thanos.makatos@nutanix.com
Subject: Re: [PATCH v15 07/20] multi-process: add qio channel write function
Date: Mon, 4 Jan 2021 15:02:04 +0000	[thread overview]
Message-ID: <20210104150204.GL640208@redhat.com> (raw)
In-Reply-To: <5326844a151bf409842c8df343a47d019ec9e633.1608702853.git.elena.ufimtseva@oracle.com>

Since this is independent of the multi-process code, it
should have a subject prefix of "io:". I'd suggest

   io: add qio_channel_writev_full_all helper

On Tue, Dec 22, 2020 at 10:14:42PM -0800, elena.ufimtseva@oracle.com wrote:
> From: Elena Ufimtseva <elena.ufimtseva@oracle.com>
> 
> Adds qio_channel_writev_full_all() to transmit both data and FDs.
> Refactors existing code to use this function.
> 
> Signed-off-by: Elena Ufimtseva <elena.ufimtseva@oracle.com>
> Signed-off-by: John G Johnson <john.g.johnson@oracle.com>
> Signed-off-by: Jagannathan Raman <jag.raman@oracle.com>
> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
> ---
>  include/io/channel.h | 25 +++++++++++++++++++++++++
>  io/channel.c         | 17 ++++++++++++++++-
>  2 files changed, 41 insertions(+), 1 deletion(-)
> 
> diff --git a/include/io/channel.h b/include/io/channel.h
> index 4d6fe45f63..2378567d4b 100644
> --- a/include/io/channel.h
> +++ b/include/io/channel.h
> @@ -774,4 +774,29 @@ void qio_channel_set_aio_fd_handler(QIOChannel *ioc,
>                                      IOHandler *io_write,
>                                      void *opaque);
>  
> +/**
> + * qio_channel_writev_full_all:
> + * @ioc: the channel object
> + * @iov: the array of memory regions to write data from
> + * @niov: the length of the @iov array
> + * @fds: an array of file handles to send
> + * @nfds: number of file handles in @fds
> + * @errp: pointer to a NULL-initialized error object
> + *
> + *
> + * Behaves like qio_channel_writev_full but will attempt
> + * to send all data passed (file handles and memory regions).
> + * The function will wait for all requested data
> + * to be written, yielding from the current coroutine
> + * if required.
> + *
> + * Returns: 0 if all bytes were written, or -1 on error
> + */
> +
> +int qio_channel_writev_full_all(QIOChannel *ioc,
> +                           const struct iovec *iov,
> +                           size_t niov,
> +                           int *fds, size_t nfds,
> +                           Error **errp);

Copy-paste mistake - alignment of parameters is incorrect now.

> +
>  #endif /* QIO_CHANNEL_H */
> diff --git a/io/channel.c b/io/channel.c
> index 93d449dee2..bde1f6d0f4 100644
> --- a/io/channel.c
> +++ b/io/channel.c
> @@ -156,11 +156,22 @@ int qio_channel_writev_all(QIOChannel *ioc,
>                             const struct iovec *iov,
>                             size_t niov,
>                             Error **errp)
> +{
> +    return qio_channel_writev_full_all(ioc, iov, niov, NULL, 0, errp);
> +}
> +
> +int qio_channel_writev_full_all(QIOChannel *ioc,
> +                                const struct iovec *iov,
> +                                size_t niov,
> +                                int *fds, size_t nfds,
> +                                Error **errp)
>  {
>      int ret = -1;
>      struct iovec *local_iov = g_new(struct iovec, niov);
>      struct iovec *local_iov_head = local_iov;
>      unsigned int nlocal_iov = niov;
> +    int *local_fds = fds;
> +    size_t local_nfds = nfds;

I don't see any need for these extra variables - just
use the parameters in place

>  
>      nlocal_iov = iov_copy(local_iov, nlocal_iov,
>                            iov, niov,
> @@ -168,7 +179,8 @@ int qio_channel_writev_all(QIOChannel *ioc,
>  
>      while (nlocal_iov > 0) {
>          ssize_t len;
> -        len = qio_channel_writev(ioc, local_iov, nlocal_iov, errp);
> +        len = qio_channel_writev_full(ioc, local_iov, nlocal_iov, local_fds,
> +                                      local_nfds, errp);
>          if (len == QIO_CHANNEL_ERR_BLOCK) {
>              if (qemu_in_coroutine()) {
>                  qio_channel_yield(ioc, G_IO_OUT);
> @@ -182,6 +194,9 @@ int qio_channel_writev_all(QIOChannel *ioc,
>          }
>  
>          iov_discard_front(&local_iov, &nlocal_iov, len);
> +
> +        local_fds = NULL;
> +        local_nfds = 0;
>      }
>  
>      ret = 0;

If the above tweaks are made then

   Acked-by: Daniel P. Berrangé <berrange@redhat.com>

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|



  reply	other threads:[~2021-01-04 15:07 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-23  6:14 [PATCH v15 00/20] Initial support for multi-process Qemu elena.ufimtseva
2020-12-23  6:14 ` [PATCH v15 01/20] multi-process: add the concept description to docs/devel/qemu-multiprocess elena.ufimtseva
2020-12-23  6:14 ` [PATCH v15 02/20] multi-process: add configure and usage information elena.ufimtseva
2020-12-23  6:14 ` [PATCH v15 03/20] memory: alloc RAM from file at offset elena.ufimtseva
2020-12-23  6:14 ` [PATCH v15 04/20] multi-process: Add config option for multi-process QEMU elena.ufimtseva
2020-12-23  6:14 ` [PATCH v15 05/20] multi-process: setup PCI host bridge for remote device elena.ufimtseva
2020-12-23  6:14 ` [PATCH v15 06/20] multi-process: setup a machine object for remote device process elena.ufimtseva
2020-12-23  6:14 ` [PATCH v15 07/20] multi-process: add qio channel write function elena.ufimtseva
2021-01-04 15:02   ` Daniel P. Berrangé [this message]
2020-12-23  6:14 ` [PATCH v15 08/20] multi-process: add qio channel read function elena.ufimtseva
2020-12-23 11:24   ` Marc-André Lureau
2020-12-23 21:57     ` Jag Raman
2021-01-04 15:16   ` Daniel P. Berrangé
2020-12-23  6:14 ` [PATCH v15 09/20] multi-process: define MPQemuMsg format and transmission functions elena.ufimtseva
2020-12-23  6:14 ` [PATCH v15 10/20] multi-process: Initialize message handler in remote device elena.ufimtseva
2020-12-23  6:14 ` [PATCH v15 11/20] multi-process: Associate fd of a PCIDevice with its object elena.ufimtseva
2020-12-23  6:14 ` [PATCH v15 12/20] multi-process: setup memory manager for remote device elena.ufimtseva
2020-12-23  6:14 ` [PATCH v15 13/20] multi-process: introduce proxy object elena.ufimtseva
2020-12-23  6:14 ` [PATCH v15 14/20] multi-process: add proxy communication functions elena.ufimtseva
2020-12-23  6:14 ` [PATCH v15 15/20] multi-process: Forward PCI config space acceses to the remote process elena.ufimtseva
2020-12-23  6:14 ` [PATCH v15 16/20] multi-process: PCI BAR read/write handling for proxy & remote endpoints elena.ufimtseva
2020-12-23  6:14 ` [PATCH v15 17/20] multi-process: Synchronize remote memory elena.ufimtseva
2020-12-23  6:14 ` [PATCH v15 18/20] multi-process: create IOHUB object to handle irq elena.ufimtseva
2020-12-23  6:14 ` [PATCH v15 19/20] multi-process: Retrieve PCI info from remote process elena.ufimtseva
2020-12-23  6:14 ` [PATCH v15 20/20] multi-process: perform device reset in the " elena.ufimtseva

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210104150204.GL640208@redhat.com \
    --to=berrange@redhat.com \
    --cc=alex.williamson@redhat.com \
    --cc=armbru@redhat.com \
    --cc=dgilbert@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=elena.ufimtseva@oracle.com \
    --cc=fam@euphon.net \
    --cc=felipe@nutanix.com \
    --cc=jag.raman@oracle.com \
    --cc=john.g.johnson@oracle.com \
    --cc=kanth.ghatraju@oracle.com \
    --cc=konrad.wilk@oracle.com \
    --cc=kraxel@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=marcandre.lureau@gmail.com \
    --cc=mreitz@redhat.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.com \
    --cc=ross.lagerwall@citrix.com \
    --cc=stefanha@redhat.com \
    --cc=swapnil.ingle@nutanix.com \
    --cc=thanos.makatos@nutanix.com \
    --cc=thuth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.