Host needs to know vring element alignment requirements: simply doing alignof on structures doesn't work reliably: on some platforms gcc has alignof(uint32_t) == 2. Add macros for alignment as specified in virtio 1.0 cs01, export them to userspace as well.
Showing the changes to include/uapi/linux (1 of 1 file). Show all
Unified · Split
| @@ -101,6 +101,13 @@ struct vring { · 100 unmodified lines | ||
| 101 | 101 | struct vring_used *used; |
| 102 | 102 | }; |
| 103 | 103 | |
| 104 | +/* Alignment requirements for vring elements. | |
| 105 | + * When using pre-virtio 1.0 layout, these fall out naturally. | |
| 106 | + */ | |
| 107 | +#define VRING_AVAIL_ALIGN_SIZE 2 | |
| 108 | +#define VRING_USED_ALIGN_SIZE 4 | |
| 109 | +#define VRING_DESC_ALIGN_SIZE 16 | |
| 110 | + | |
| 104 | 111 | /* The standard layout for the ring is a continuous chunk of memory which looks |
| 105 | 112 | * like this. We assume num is a power of 2. |
| 106 | 113 | * |