From: "Michael S. Tsirkin" <mst@redhat.com>
To: Matej Genci <matej.genci@nutanix.com>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"virtualization@lists.linux-foundation.org"
<virtualization@lists.linux-foundation.org>
Subject: Re: [PATCH] virtio: Change typecasts in vring_init()
Date: Sat, 31 Aug 2019 13:43:19 -0400 [thread overview]
Message-ID: <20190831134218-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <41b8eb4b-0d3b-f103-9ec4-332a903612ee@nutanix.com>
On Fri, Aug 30, 2019 at 05:58:23PM +0000, Matej Genci wrote:
> On 8/30/2019 3:02 PM, Michael S. Tsirkin wrote:
> > On Tue, Aug 27, 2019 at 03:20:57PM +0000, Matej Genci wrote:
> >> Compilers such as g++ 7.3 complain about assigning void* variable to
> >> a non-void* variable (like struct pointers) and pointer arithmetics
> >> on void*.
> >>
> >> Signed-off-by: Matej Genci <matej.genci@nutanix.com>
> >> ---
> >> include/uapi/linux/virtio_ring.h | 9 +++++----
> >> 1 file changed, 5 insertions(+), 4 deletions(-)
> >>
> >> diff --git a/include/uapi/linux/virtio_ring.h b/include/uapi/linux/virtio_ring.h
> >> index 4c4e24c291a5..2c339b9e2923 100644
> >> --- a/include/uapi/linux/virtio_ring.h
> >> +++ b/include/uapi/linux/virtio_ring.h
> >> @@ -168,10 +168,11 @@ static inline void vring_init(struct vring *vr, unsigned int num, void *p,
> >> unsigned long align)
> >> {
> >> vr->num = num;
> >> - vr->desc = p;
> >> - vr->avail = p + num*sizeof(struct vring_desc);
> >> - vr->used = (void *)(((uintptr_t)&vr->avail->ring[num] + sizeof(__virtio16)
> >> - + align-1) & ~(align - 1));
> >> + vr->desc = (struct vring_desc *)p;
> >> + vr->avail = (struct vring_avail *)((uintptr_t)p
> >> + + num*sizeof(struct vring_desc));
> >> + vr->used = (struct vring_used *)(((uintptr_t)&vr->avail->ring[num]
> >> + + sizeof(__virtio16) + align-1) & ~(align - 1));
> >> }
> >>
> >> static inline unsigned vring_size(unsigned int num, unsigned long align)
> >
> > I'm not really interested in building with g++, sorry.
> > Centainly not if it makes code less robust by forcing
> > casts where they weren't previously necessary.
>
> Can you elaborate on how these casts make the code less robust?
If we ever change the variable types build will still pass
because of the cast.
> They aren't necessary in C but I think being explicit can improve
> readability as argued in
> https://softwareengineering.stackexchange.com/a/275714
>
> >
> > However, vring_init and vring_size are legacy APIs anyway,
> > so I'd be happy to add ifndefs that will allow userspace
> > simply hide these functions if it does not need them.
> >
>
> I feel like my patch is a harmless way of allowing this header
> to be used in C++ projects, but I'm happy to drop it in lieu of
> the guards if you feel strongly about it.
>
> Thanks.
> Matej
Yea let's not even start.
> >
> >> --
> >> 2.22.0
> >>
>
WARNING: multiple messages have this Message-ID (diff)
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Matej Genci <matej.genci@nutanix.com>
Cc: "virtualization@lists.linux-foundation.org"
<virtualization@lists.linux-foundation.org>,
"jasowang@redhat.com" <jasowang@redhat.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] virtio: Change typecasts in vring_init()
Date: Sat, 31 Aug 2019 13:43:19 -0400 [thread overview]
Message-ID: <20190831134218-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <41b8eb4b-0d3b-f103-9ec4-332a903612ee@nutanix.com>
On Fri, Aug 30, 2019 at 05:58:23PM +0000, Matej Genci wrote:
> On 8/30/2019 3:02 PM, Michael S. Tsirkin wrote:
> > On Tue, Aug 27, 2019 at 03:20:57PM +0000, Matej Genci wrote:
> >> Compilers such as g++ 7.3 complain about assigning void* variable to
> >> a non-void* variable (like struct pointers) and pointer arithmetics
> >> on void*.
> >>
> >> Signed-off-by: Matej Genci <matej.genci@nutanix.com>
> >> ---
> >> include/uapi/linux/virtio_ring.h | 9 +++++----
> >> 1 file changed, 5 insertions(+), 4 deletions(-)
> >>
> >> diff --git a/include/uapi/linux/virtio_ring.h b/include/uapi/linux/virtio_ring.h
> >> index 4c4e24c291a5..2c339b9e2923 100644
> >> --- a/include/uapi/linux/virtio_ring.h
> >> +++ b/include/uapi/linux/virtio_ring.h
> >> @@ -168,10 +168,11 @@ static inline void vring_init(struct vring *vr, unsigned int num, void *p,
> >> unsigned long align)
> >> {
> >> vr->num = num;
> >> - vr->desc = p;
> >> - vr->avail = p + num*sizeof(struct vring_desc);
> >> - vr->used = (void *)(((uintptr_t)&vr->avail->ring[num] + sizeof(__virtio16)
> >> - + align-1) & ~(align - 1));
> >> + vr->desc = (struct vring_desc *)p;
> >> + vr->avail = (struct vring_avail *)((uintptr_t)p
> >> + + num*sizeof(struct vring_desc));
> >> + vr->used = (struct vring_used *)(((uintptr_t)&vr->avail->ring[num]
> >> + + sizeof(__virtio16) + align-1) & ~(align - 1));
> >> }
> >>
> >> static inline unsigned vring_size(unsigned int num, unsigned long align)
> >
> > I'm not really interested in building with g++, sorry.
> > Centainly not if it makes code less robust by forcing
> > casts where they weren't previously necessary.
>
> Can you elaborate on how these casts make the code less robust?
If we ever change the variable types build will still pass
because of the cast.
> They aren't necessary in C but I think being explicit can improve
> readability as argued in
> https://softwareengineering.stackexchange.com/a/275714
>
> >
> > However, vring_init and vring_size are legacy APIs anyway,
> > so I'd be happy to add ifndefs that will allow userspace
> > simply hide these functions if it does not need them.
> >
>
> I feel like my patch is a harmless way of allowing this header
> to be used in C++ projects, but I'm happy to drop it in lieu of
> the guards if you feel strongly about it.
>
> Thanks.
> Matej
Yea let's not even start.
> >
> >> --
> >> 2.22.0
> >>
>
next prev parent reply other threads:[~2019-08-31 17:43 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-27 15:20 [PATCH] virtio: Change typecasts in vring_init() Matej Genci
2019-08-30 3:48 ` Jason Wang
2019-08-30 17:26 ` Matej Genci
2019-08-30 3:48 ` Jason Wang
2019-08-30 14:02 ` Michael S. Tsirkin
2019-08-30 17:58 ` Matej Genci
2019-08-31 17:43 ` Michael S. Tsirkin [this message]
2019-08-31 17:43 ` Michael S. Tsirkin
2019-09-02 9:56 ` Matej Genci
2019-09-03 15:00 ` Michael S. Tsirkin
2019-09-03 15:00 ` Michael S. Tsirkin
2019-08-30 14:02 ` Michael S. Tsirkin
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=20190831134218-mutt-send-email-mst@kernel.org \
--to=mst@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=matej.genci@nutanix.com \
--cc=virtualization@lists.linux-foundation.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.