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).
Showing the changes to include/uapi (1 of 1 file). Show all
Unified · Split
| @@ -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 | ||