Normal SQEs are 64-bytes in length, which is fine for all the commands we support. However, in preparation for supporting passthrough IO, provide an option for setting up a ring with 128-byte SQEs. We continue to use the same type for io_uring_sqe, it's marked and commented with a zero sized array pad at the end. This provides up to 80 bytes of data for a passthrough command - 64 bytes for the extra added data, and 16 bytes available at the end of the existing SQE.
Showing the changes to include/uapi (1 of 2 files). Show all
Unified · Split
| @@ -63,6 +63,12 @@ struct io_uring_sqe { · 62 unmodified lines | |||
| 63 | }; | 63 | }; |
| 64 | __u64 addr3; | 64 | __u64 addr3; |
| 65 | __u64 __pad2[1]; | 65 | __u64 __pad2[1]; |
| 66 | |||
| 67 | /* | ||
| 68 | * If the ring is initialized with IORING_SETUP_SQE128, then this field | ||
| 69 | * contains 64-bytes of padding, doubling the size of the SQE. | ||
| 70 | */ | ||
| 71 | __u64 __big_sqe_pad[0]; | ||
| 66 | }; | 72 | }; |
| 67 | 73 | ||
| 68 | enum { | 74 | enum { |
| @@ -119,6 +125,8 @@ enum { · 50 unmodified lines | |||
| 119 | */ | 125 | */ |
| 120 | #define IORING_SETUP_TASKRUN_FLAG (1U << 9) | 126 | #define IORING_SETUP_TASKRUN_FLAG (1U << 9) |
| 121 | 127 | ||
| 128 | #define IORING_SETUP_SQE128 (1U << 10) /* SQEs are 128 byte */ | ||
| 129 | |||
| 122 | enum io_uring_op { | 130 | enum io_uring_op { |
| 123 | IORING_OP_NOP, | 131 | IORING_OP_NOP, |
| 124 | IORING_OP_READV, | 132 | IORING_OP_READV, |