[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] virtio: Fix wrong type cast from pointer to lon
From: |
Peter Maydell |
Subject: |
Re: [Qemu-devel] [PATCH] virtio: Fix wrong type cast from pointer to long |
Date: |
Wed, 24 Sep 2014 05:44:44 -0700 |
On 24 September 2014 01:46, Fam Zheng <address@hidden> 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 <address@hidden>
>> ---
>>
>> 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