From: "Marc-André Lureau" <mlureau@redhat.com>
To: Felipe Franciosi <felipe@nutanix.com>
Cc: "Daniel P. Berrange" <berrange@redhat.com>,
Marc-Andre Lureau <marcandre.lureau@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>,
qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] io: Fix double shift usages on QIOChannel features
Date: Wed, 28 Sep 2016 07:06:31 -0400 (EDT) [thread overview]
Message-ID: <775506363.124552.1475060791167.JavaMail.zimbra@redhat.com> (raw)
In-Reply-To: <921443124.124128.1475060328575.JavaMail.zimbra@redhat.com>
Hi
----- Original Message -----
> Hi
>
> ----- Original Message -----
> > Hi Marc,
> >
> > > On 27 Sep 2016, at 18:12, Marc-André Lureau <mlureau@redhat.com> wrote:
> > >
> > > Hi
> > >
> > > ----- Original Message -----
> > >> When QIOChannels were introduced in 666a3af9, the feature bits were
> > >> defined shifted. However, when using them, the code was shifting them
> > >> again. The incorrect use was consistent until 74b6ce43, where
> > >> QIO_CHANNEL_FEATURE_LISTEN was defined shifted but tested unshifted.
> > >>
> > >
> > > And by luck, QIO_CHANNEL_FEATURE_LISTEN == (1 <<
> > > QIO_CHANNEL_FEATURE_LISTEN), so it works :)
>
> Oops, they are not, QIO_CHANNEL_FEATURE_LISTEN == 4 (I read 2), then I wonder
> how could 74b6ce43e work..
>
And even 2 wouldn't be true.. (sigh)
> >
> > Can you elaborate on that? Maybe I'm missing something obvious, but I'm
> > confused as to how they are equivalent.
> >
> > Thanks,
> > Felipe
> >
> > >
> > >> This patch fixes all uses of QIOChannel features. They are defined
> > >> shifted and therefore set unshifted. It also makes all feature tests to
> > >> use the qio_channel_has_feature() function.
> > >
> > > Looks good, we may want to have it in -stable.
> > >
> > >>
> > >> Signed-off-by: Felipe Franciosi <felipe@nutanix.com>
> > >
> > > Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> > >
> > >> ---
> > >> io/channel-socket.c | 11 ++++++-----
> > >> io/channel-tls.c | 4 ++--
> > >> io/channel-websock.c | 4 ++--
> > >> io/channel.c | 10 ++++------
> > >> migration/qemu-file-channel.c | 3 +--
> > >> qemu-char.c | 3 +--
> > >> 6 files changed, 16 insertions(+), 19 deletions(-)
> > >>
> > >> diff --git a/io/channel-socket.c b/io/channel-socket.c
> > >> index 196a4f1..bb0a0a7 100644
> > >> --- a/io/channel-socket.c
> > >> +++ b/io/channel-socket.c
> > >> @@ -55,7 +55,7 @@ qio_channel_socket_new(void)
> > >> sioc->fd = -1;
> > >>
> > >> ioc = QIO_CHANNEL(sioc);
> > >> - ioc->features |= (1 << QIO_CHANNEL_FEATURE_SHUTDOWN);
> > >> + ioc->features |= QIO_CHANNEL_FEATURE_SHUTDOWN;
> > >>
> > >> #ifdef WIN32
> > >> ioc->event = CreateEvent(NULL, FALSE, FALSE, NULL);
> > >> @@ -107,12 +107,12 @@ qio_channel_socket_set_fd(QIOChannelSocket *sioc,
> > >> #ifndef WIN32
> > >> if (sioc->localAddr.ss_family == AF_UNIX) {
> > >> QIOChannel *ioc = QIO_CHANNEL(sioc);
> > >> - ioc->features |= (1 << QIO_CHANNEL_FEATURE_FD_PASS);
> > >> + ioc->features |= QIO_CHANNEL_FEATURE_FD_PASS;
> > >> }
> > >> #endif /* WIN32 */
> > >> if (getsockopt(fd, SOL_SOCKET, SO_ACCEPTCONN, &val, &len) == 0 &&
> > >> val)
> > >> {
> > >> QIOChannel *ioc = QIO_CHANNEL(sioc);
> > >> - ioc->features |= (1 << QIO_CHANNEL_FEATURE_LISTEN);
> > >> + ioc->features |= QIO_CHANNEL_FEATURE_LISTEN;
> > >> }
> > >>
> > >> return 0;
> > >> @@ -380,7 +380,7 @@ qio_channel_socket_accept(QIOChannelSocket *ioc,
> > >>
> > >> #ifndef WIN32
> > >> if (cioc->localAddr.ss_family == AF_UNIX) {
> > >> - QIO_CHANNEL(cioc)->features |= (1 <<
> > >> QIO_CHANNEL_FEATURE_FD_PASS);
> > >> + QIO_CHANNEL(cioc)->features |= QIO_CHANNEL_FEATURE_FD_PASS;
> > >> }
> > >> #endif /* WIN32 */
> > >>
> > >> @@ -403,7 +403,8 @@ static void qio_channel_socket_finalize(Object *obj)
> > >> QIOChannelSocket *ioc = QIO_CHANNEL_SOCKET(obj);
> > >>
> > >> if (ioc->fd != -1) {
> > >> - if (QIO_CHANNEL(ioc)->features & QIO_CHANNEL_FEATURE_LISTEN) {
> > >> + if (qio_channel_has_feature(QIO_CHANNEL(ioc),
> > >> + QIO_CHANNEL_FEATURE_LISTEN)) {
> > >> Error *err = NULL;
> > >>
> > >> socket_listen_cleanup(ioc->fd, &err);
> > >> diff --git a/io/channel-tls.c b/io/channel-tls.c
> > >> index 9a8525c..d22996b 100644
> > >> --- a/io/channel-tls.c
> > >> +++ b/io/channel-tls.c
> > >> @@ -111,8 +111,8 @@ qio_channel_tls_new_client(QIOChannel *master,
> > >> ioc = QIO_CHANNEL(tioc);
> > >>
> > >> tioc->master = master;
> > >> - if (master->features & (1 << QIO_CHANNEL_FEATURE_SHUTDOWN)) {
> > >> - ioc->features |= (1 << QIO_CHANNEL_FEATURE_SHUTDOWN);
> > >> + if (qio_channel_has_feature(master, QIO_CHANNEL_FEATURE_SHUTDOWN))
> > >> {
> > >> + ioc->features |= QIO_CHANNEL_FEATURE_SHUTDOWN;
> > >> }
> > >> object_ref(OBJECT(master));
> > >>
> > >> diff --git a/io/channel-websock.c b/io/channel-websock.c
> > >> index 533bd4b..9accd16 100644
> > >> --- a/io/channel-websock.c
> > >> +++ b/io/channel-websock.c
> > >> @@ -497,8 +497,8 @@ qio_channel_websock_new_server(QIOChannel *master)
> > >> ioc = QIO_CHANNEL(wioc);
> > >>
> > >> wioc->master = master;
> > >> - if (master->features & (1 << QIO_CHANNEL_FEATURE_SHUTDOWN)) {
> > >> - ioc->features |= (1 << QIO_CHANNEL_FEATURE_SHUTDOWN);
> > >> + if (qio_channel_has_feature(master, QIO_CHANNEL_FEATURE_SHUTDOWN))
> > >> {
> > >> + ioc->features |= QIO_CHANNEL_FEATURE_SHUTDOWN;
> > >> }
> > >> object_ref(OBJECT(master));
> > >>
> > >> diff --git a/io/channel.c b/io/channel.c
> > >> index 923c465..ebe9f86 100644
> > >> --- a/io/channel.c
> > >> +++ b/io/channel.c
> > >> @@ -23,13 +23,11 @@
> > >> #include "qapi/error.h"
> > >> #include "qemu/coroutine.h"
> > >>
> > >> -bool qio_channel_has_feature(QIOChannel *ioc,
> > >> - QIOChannelFeature feature)
> > >> +bool qio_channel_has_feature(QIOChannel *ioc, QIOChannelFeature
> > >> feature)
> > >> {
> > >> - return ioc->features & (1 << feature);
> > >> + return ioc->features & feature;
> > >> }
> > >>
> > >> -
> > >> ssize_t qio_channel_readv_full(QIOChannel *ioc,
> > >> const struct iovec *iov,
> > >> size_t niov,
> > >> @@ -40,7 +38,7 @@ ssize_t qio_channel_readv_full(QIOChannel *ioc,
> > >> QIOChannelClass *klass = QIO_CHANNEL_GET_CLASS(ioc);
> > >>
> > >> if ((fds || nfds) &&
> > >> - !(ioc->features & (1 << QIO_CHANNEL_FEATURE_FD_PASS))) {
> > >> + !qio_channel_has_feature(ioc, QIO_CHANNEL_FEATURE_FD_PASS)) {
> > >> error_setg_errno(errp, EINVAL,
> > >> "Channel does not support file descriptor
> > >> passing");
> > >> return -1;
> > >> @@ -60,7 +58,7 @@ ssize_t qio_channel_writev_full(QIOChannel *ioc,
> > >> QIOChannelClass *klass = QIO_CHANNEL_GET_CLASS(ioc);
> > >>
> > >> if ((fds || nfds) &&
> > >> - !(ioc->features & (1 << QIO_CHANNEL_FEATURE_FD_PASS))) {
> > >> + !qio_channel_has_feature(ioc, QIO_CHANNEL_FEATURE_FD_PASS)) {
> > >> error_setg_errno(errp, EINVAL,
> > >> "Channel does not support file descriptor
> > >> passing");
> > >> return -1;
> > >> diff --git a/migration/qemu-file-channel.c
> > >> b/migration/qemu-file-channel.c
> > >> index 45c13f1..a39abd5 100644
> > >> --- a/migration/qemu-file-channel.c
> > >> +++ b/migration/qemu-file-channel.c
> > >> @@ -105,8 +105,7 @@ static int channel_shutdown(void *opaque,
> > >> {
> > >> QIOChannel *ioc = QIO_CHANNEL(opaque);
> > >>
> > >> - if (qio_channel_has_feature(ioc,
> > >> - QIO_CHANNEL_FEATURE_SHUTDOWN)) {
> > >> + if (qio_channel_has_feature(ioc, QIO_CHANNEL_FEATURE_SHUTDOWN)) {
> > >> QIOChannelShutdown mode;
> > >> if (rd && wr) {
> > >> mode = QIO_CHANNEL_SHUTDOWN_BOTH;
> > >> diff --git a/qemu-char.c b/qemu-char.c
> > >> index 8826419..b825331 100644
> > >> --- a/qemu-char.c
> > >> +++ b/qemu-char.c
> > >> @@ -2787,8 +2787,7 @@ static int tcp_set_msgfds(CharDriverState *chr,
> > >> int
> > >> *fds, int num)
> > >> s->write_msgfds_num = 0;
> > >>
> > >> if (!s->connected ||
> > >> - !qio_channel_has_feature(s->ioc,
> > >> - QIO_CHANNEL_FEATURE_FD_PASS)) {
> > >> + !qio_channel_has_feature(s->ioc, QIO_CHANNEL_FEATURE_FD_PASS))
> > >> {
> > >> return -1;
> > >> }
> > >>
> > >> --
> > >> 1.7.1
> > >>
> > >>
> >
> >
>
next prev parent reply other threads:[~2016-09-28 11:06 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-27 16:49 [Qemu-devel] [PATCH] io: Fix double shift usages on QIOChannel features Felipe Franciosi
2016-09-27 16:53 ` no-reply
2016-09-27 17:12 ` Marc-André Lureau
2016-09-28 10:55 ` Felipe Franciosi
2016-09-28 10:58 ` Marc-André Lureau
2016-09-28 11:06 ` Marc-André Lureau [this message]
2016-09-28 11:00 ` Daniel P. Berrange
2016-09-27 17:23 ` Daniel P. Berrange
2016-09-27 17:57 ` Felipe Franciosi
2016-09-27 18:04 ` Daniel P. Berrange
2016-09-27 18:16 ` Felipe Franciosi
2016-09-27 18:35 ` Felipe Franciosi
2016-09-28 9:21 ` Daniel P. Berrange
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=775506363.124552.1475060791167.JavaMail.zimbra@redhat.com \
--to=mlureau@redhat.com \
--cc=berrange@redhat.com \
--cc=felipe@nutanix.com \
--cc=marcandre.lureau@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
/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.