From: "Daniel P. Berrangé" <berrange@redhat.com>
To: "manish.mishra" <manish.mishra@nutanix.com>
Cc: qemu-devel@nongnu.org, peterx@redhat.com,
prerna.saxena@nutanix.com, quintela@redhat.com,
dgilbert@redhat.com, lsoaresp@redhat.com
Subject: Re: [PATCH v3 1/2] io: Add support for MSG_PEEK for socket channel
Date: Tue, 22 Nov 2022 09:00:16 +0000 [thread overview]
Message-ID: <Y3yPoFAo5l/vmB/y@redhat.com> (raw)
In-Reply-To: <20221119093615.158072-4-manish.mishra@nutanix.com>
On Sat, Nov 19, 2022 at 09:36:14AM +0000, manish.mishra wrote:
> MSG_PEEK reads from the peek of channel, The data is treated as
> unread and the next read shall still return this data. This
> support is currently added only for socket class. Extra parameter
> 'flags' is added to io_readv calls to pass extra read flags like
> MSG_PEEK.
>
> Suggested-by: Daniel P. Berrangé <berrange@redhat.com
> Signed-off-by: manish.mishra <manish.mishra@nutanix.com>
> ---
> chardev/char-socket.c | 4 +-
> include/io/channel.h | 83 +++++++++++++++++++++++++++++
> io/channel-buffer.c | 1 +
> io/channel-command.c | 1 +
> io/channel-file.c | 1 +
> io/channel-null.c | 1 +
> io/channel-socket.c | 16 +++++-
> io/channel-tls.c | 1 +
> io/channel-websock.c | 1 +
> io/channel.c | 73 +++++++++++++++++++++++--
> migration/channel-block.c | 1 +
> scsi/qemu-pr-helper.c | 2 +-
> tests/qtest/tpm-emu.c | 2 +-
> tests/unit/test-io-channel-socket.c | 1 +
> util/vhost-user-server.c | 2 +-
> 15 files changed, 179 insertions(+), 11 deletions(-)
> diff --git a/io/channel-socket.c b/io/channel-socket.c
> index b76dca9cc1..a06b24766d 100644
> --- a/io/channel-socket.c
> +++ b/io/channel-socket.c
> @@ -406,6 +406,8 @@ qio_channel_socket_accept(QIOChannelSocket *ioc,
> }
> #endif /* WIN32 */
>
> + qio_channel_set_feature(QIO_CHANNEL(cioc), QIO_CHANNEL_FEATURE_READ_MSG_PEEK);
> +
This covers the incoming server side socket.
This also needs to be set in outgoing client side socket in
qio_channel_socket_connect_async
> @@ -705,7 +718,6 @@ static ssize_t qio_channel_socket_writev(QIOChannel *ioc,
> }
> #endif /* WIN32 */
>
> -
> #ifdef QEMU_MSG_ZEROCOPY
> static int qio_channel_socket_flush(QIOChannel *ioc,
> Error **errp)
Please remove this unrelated whitespace change.
> @@ -109,6 +117,37 @@ int qio_channel_readv_all_eof(QIOChannel *ioc,
> return qio_channel_readv_full_all_eof(ioc, iov, niov, NULL, NULL, errp);
> }
>
> +int qio_channel_readv_peek_all_eof(QIOChannel *ioc,
> + const struct iovec *iov,
> + size_t niov,
> + Error **errp)
> +{
> + ssize_t len = 0;
> + ssize_t total = iov_size(iov, niov);
> +
> + while (len < total) {
> + len = qio_channel_readv_full(ioc, iov, niov, NULL,
> + NULL, QIO_CHANNEL_READ_FLAG_MSG_PEEK, errp);
> +
> + if (len == QIO_CHANNEL_ERR_BLOCK) {
> + if (qemu_in_coroutine()) {
> + qio_channel_yield(ioc, G_IO_IN);
> + } else {
> + qio_channel_wait(ioc, G_IO_IN);
> + }
> + continue;
> + }
> + if (len == 0) {
> + return 0;
> + }
> + if (len < 0) {
> + return -1;
> + }
> + }
This will busy wait burning CPU where there is a read > 0 and < total.
With 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 :|
next prev parent reply other threads:[~2022-11-22 9:00 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-19 9:36 [PATCH 1/2] io: Add support for MSG_PEEK for socket channel manish.mishra
2022-11-19 9:36 ` [PATCH 2/2] migration: check magic value for deciding the mapping of channels manish.mishra
2022-11-19 9:36 ` manish.mishra
2022-11-19 9:36 ` [PATCH v3 1/2] io: Add support for MSG_PEEK for socket channel manish.mishra
2022-11-22 9:00 ` Daniel P. Berrangé [this message]
2022-11-22 9:08 ` manish.mishra
2022-11-22 9:29 ` Daniel P. Berrangé
2022-11-22 9:40 ` manish.mishra
2022-11-22 9:53 ` Daniel P. Berrangé
2022-11-22 10:13 ` manish.mishra
2022-11-22 10:31 ` Daniel P. Berrangé
2022-11-22 14:41 ` Peter Xu
2022-11-22 14:49 ` Daniel P. Berrangé
2022-11-22 15:31 ` manish.mishra
2022-11-22 16:10 ` Peter Xu
2022-11-22 16:29 ` Peter Xu
2022-11-22 16:33 ` Peter Xu
2022-11-22 16:42 ` manish.mishra
2022-11-22 17:16 ` Peter Xu
2022-11-22 17:31 ` Daniel P. Berrangé
2022-11-19 9:36 ` [PATCH v3 2/2] migration: check magic value for deciding the mapping of channels manish.mishra
2022-11-21 21:59 ` Peter Xu
2022-11-22 9:01 ` Daniel P. Berrangé
2022-11-19 9:40 ` [PATCH 1/2] io: Add support for MSG_PEEK for socket channel manish.mishra
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=Y3yPoFAo5l/vmB/y@redhat.com \
--to=berrange@redhat.com \
--cc=dgilbert@redhat.com \
--cc=lsoaresp@redhat.com \
--cc=manish.mishra@nutanix.com \
--cc=peterx@redhat.com \
--cc=prerna.saxena@nutanix.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).