Message ID | 1411536002-14088-1-git-send-email-sw@weilnetz.de |
---|---|
State | Accepted |
Headers | show |
Stefan Weil <sw@weilnetz.de> writes: > Compiler warning (w32, w64): > > include/hw/virtio/virtio_ring.h:142:26: warning: > cast from pointer to integer of different size [-Wpointer-to-int-cast] > > When sizeof(long) < sizeof(void *), this is not only a warning but a > real program error. > > Add also missing blanks in the same statement. > > Signed-off-by: Stefan Weil <sw@weilnetz.de> Reviewed-by: Markus Armbruster <armbru@redhat.com>
On Wed, 09/24 07:20, Stefan Weil wrote: > Compiler warning (w32, w64): > > include/hw/virtio/virtio_ring.h:142:26: warning: > cast from pointer to integer of different size [-Wpointer-to-int-cast] > > When sizeof(long) < sizeof(void *), this is not only a warning but a > real program error. > > Add also missing blanks in the same statement. > > Signed-off-by: Stefan Weil <sw@weilnetz.de> > --- > > Peter, could you please apply this bug fix directly without pull request? > > Thanks > Stefan > > include/hw/virtio/virtio_ring.h | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/include/hw/virtio/virtio_ring.h b/include/hw/virtio/virtio_ring.h > index 8f58bc9..0b42e6e 100644 > --- a/include/hw/virtio/virtio_ring.h > +++ b/include/hw/virtio/virtio_ring.h > @@ -139,8 +139,8 @@ static inline void vring_init(struct vring *vr, unsigned int num, void *p, > vr->num = num; > vr->desc = p; > vr->avail = p + num*sizeof(struct vring_desc); > - vr->used = (void *)(((unsigned long)&vr->avail->ring[num] + sizeof(uint16_t) > - + align-1) & ~(align - 1)); > + vr->used = (void *)(((uintptr_t)&vr->avail->ring[num] + sizeof(uint16_t) > + + align - 1) & ~(align - 1)); > } > > static inline unsigned vring_size(unsigned int num, unsigned long align) > -- > 1.7.10.4 > That was from copy&paste /usr/include/linux/virtio_ring.h. The patch looks good to me, should linux also need this fix? Reviewed-by: Fam Zheng <famz@redhat.com> Fam
On Wed, Sep 24, 2014 at 07:20:02AM +0200, Stefan Weil wrote: > Compiler warning (w32, w64): > > include/hw/virtio/virtio_ring.h:142:26: warning: > cast from pointer to integer of different size [-Wpointer-to-int-cast] > > When sizeof(long) < sizeof(void *), this is not only a warning but a > real program error. > > Add also missing blanks in the same statement. > > Signed-off-by: Stefan Weil <sw@weilnetz.de> > --- > > Peter, could you please apply this bug fix directly without pull request? > > Thanks > Stefan > > include/hw/virtio/virtio_ring.h | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
On 24 September 2014 01:46, Fam Zheng <famz@redhat.com> wrote: > On Wed, 09/24 07:20, Stefan Weil wrote: >> Compiler warning (w32, w64): >> >> include/hw/virtio/virtio_ring.h:142:26: warning: >> cast from pointer to integer of different size [-Wpointer-to-int-cast] >> >> When sizeof(long) < sizeof(void *), this is not only a warning but a >> real program error. >> >> Add also missing blanks in the same statement. >> >> Signed-off-by: Stefan Weil <sw@weilnetz.de> >> --- >> >> Peter, could you please apply this bug fix directly without pull request? Applied to master, thanks. >> diff --git a/include/hw/virtio/virtio_ring.h b/include/hw/virtio/virtio_ring.h >> index 8f58bc9..0b42e6e 100644 >> --- a/include/hw/virtio/virtio_ring.h >> +++ b/include/hw/virtio/virtio_ring.h >> @@ -139,8 +139,8 @@ static inline void vring_init(struct vring *vr, unsigned int num, void *p, >> vr->num = num; >> vr->desc = p; >> vr->avail = p + num*sizeof(struct vring_desc); >> - vr->used = (void *)(((unsigned long)&vr->avail->ring[num] + sizeof(uint16_t) >> - + align-1) & ~(align - 1)); >> + vr->used = (void *)(((uintptr_t)&vr->avail->ring[num] + sizeof(uint16_t) >> + + align - 1) & ~(align - 1)); >> } >> >> static inline unsigned vring_size(unsigned int num, unsigned long align) >> -- >> 1.7.10.4 >> > > That was from copy&paste /usr/include/linux/virtio_ring.h. The patch looks good > to me, should linux also need this fix? In Linux the "long" type is always the same as the size of a pointer; it's only Windows that went for the LLP64 model rather than LP64. thanks -- PMM
On Wed, 09/24 05:44, Peter Maydell wrote: > On 24 September 2014 01:46, Fam Zheng <famz@redhat.com> wrote: > > On Wed, 09/24 07:20, Stefan Weil wrote: > >> Compiler warning (w32, w64): > >> > >> include/hw/virtio/virtio_ring.h:142:26: warning: > >> cast from pointer to integer of different size [-Wpointer-to-int-cast] > >> > >> When sizeof(long) < sizeof(void *), this is not only a warning but a > >> real program error. > >> > >> Add also missing blanks in the same statement. > >> > >> Signed-off-by: Stefan Weil <sw@weilnetz.de> > >> --- > >> > >> Peter, could you please apply this bug fix directly without pull request? > > Applied to master, thanks. > > >> diff --git a/include/hw/virtio/virtio_ring.h b/include/hw/virtio/virtio_ring.h > >> index 8f58bc9..0b42e6e 100644 > >> --- a/include/hw/virtio/virtio_ring.h > >> +++ b/include/hw/virtio/virtio_ring.h > >> @@ -139,8 +139,8 @@ static inline void vring_init(struct vring *vr, unsigned int num, void *p, > >> vr->num = num; > >> vr->desc = p; > >> vr->avail = p + num*sizeof(struct vring_desc); > >> - vr->used = (void *)(((unsigned long)&vr->avail->ring[num] + sizeof(uint16_t) > >> - + align-1) & ~(align - 1)); > >> + vr->used = (void *)(((uintptr_t)&vr->avail->ring[num] + sizeof(uint16_t) > >> + + align - 1) & ~(align - 1)); > >> } > >> > >> static inline unsigned vring_size(unsigned int num, unsigned long align) > >> -- > >> 1.7.10.4 > >> > > > > That was from copy&paste /usr/include/linux/virtio_ring.h. The patch looks good > > to me, should linux also need this fix? > > In Linux the "long" type is always the same as the size of a pointer; > it's only Windows that went for the LLP64 model rather than LP64. > Okay, Thanks for explaining! Fam
diff --git a/include/hw/virtio/virtio_ring.h b/include/hw/virtio/virtio_ring.h index 8f58bc9..0b42e6e 100644 --- a/include/hw/virtio/virtio_ring.h +++ b/include/hw/virtio/virtio_ring.h @@ -139,8 +139,8 @@ static inline void vring_init(struct vring *vr, unsigned int num, void *p, vr->num = num; vr->desc = p; vr->avail = p + num*sizeof(struct vring_desc); - vr->used = (void *)(((unsigned long)&vr->avail->ring[num] + sizeof(uint16_t) - + align-1) & ~(align - 1)); + vr->used = (void *)(((uintptr_t)&vr->avail->ring[num] + sizeof(uint16_t) + + align - 1) & ~(align - 1)); } static inline unsigned vring_size(unsigned int num, unsigned long align)
Compiler warning (w32, w64): include/hw/virtio/virtio_ring.h:142:26: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] When sizeof(long) < sizeof(void *), this is not only a warning but a real program error. Add also missing blanks in the same statement. Signed-off-by: Stefan Weil <sw@weilnetz.de> --- Peter, could you please apply this bug fix directly without pull request? Thanks Stefan include/hw/virtio/virtio_ring.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)