History

virtio: Fix typecast of pointer in vring_init()

The virtio_ring.h header is used in userspace programs (ie. QEMU), too. Here we can not assume that sizeof(pointer) is the same as sizeof(long), e.g. when compiling for Windows, so the typecast in vring_init() should be done with (uintptr_t) instead of (unsigned long).

Thomas Huth committed 11 years ago

Commit d768f321 parent 908a5541 file · +4 −1Browse files

Showing the changes to include/uapi (1 of 1 file). Show all

Unified · Split

include/uapi/linux/virtio_ring.h+4−1
@@ -31,6 +31,9 @@ · 30 unmodified lines
31 * SUCH DAMAGE.31 * SUCH DAMAGE.
32 *32 *
33 * Copyright Rusty Russell IBM Corporation 2007. */33 * Copyright Rusty Russell IBM Corporation 2007. */
34#ifndef __KERNEL__
35#include <stdint.h>
36#endif
34#include <linux/types.h>37#include <linux/types.h>
35#include <linux/virtio_types.h>38#include <linux/virtio_types.h>
36 39
@@ -143,7 +146,7 @@ static inline void vring_init(struct vring *vr, unsigned int num, void *p, · 106 unmodified lines
143 vr->num = num;146 vr->num = num;
144 vr->desc = p;147 vr->desc = p;
145 vr->avail = p + num*sizeof(struct vring_desc);148 vr->avail = p + num*sizeof(struct vring_desc);
146 vr->used = (void *)(((unsigned long)&vr->avail->ring[num] + sizeof(__virtio16)149 vr->used = (void *)(((uintptr_t)&vr->avail->ring[num] + sizeof(__virtio16)
147 + align-1) & ~(align - 1));150 + align-1) & ~(align - 1));
148}151}
149 152