dius 0.1.0
Loading...
Searching...
No Matches
io_uring.h
Go to the documentation of this file.
1#pragma once
2
3#include <linux/io_uring.h>
4
5#include "di/sync/prelude.h"
6#include "di/vocab/error/prelude.h"
8#include "dius/sync_file.h"
9
10namespace dius::linux {
11namespace io_uring {
12 using SQE = struct io_uring_sqe;
13 using CQE = struct io_uring_cqe;
14 using SetupParams = struct io_uring_params;
15
16 auto sys_enter(unsigned int fd, unsigned int to_submit, unsigned int min_complete, unsigned int flags,
17 void const* arg, size_t arg_size) -> di::Result<int>;
18 auto sys_register(unsigned int fd, unsigned int op_code, void* arg, unsigned int nr_args) -> di::Result<int>;
19 auto sys_setup(u32 entries, SetupParams* params) -> di::Result<SyncFile>;
20
21 class IoUringHandle {
22 public:
23 static auto create() -> di::Result<IoUringHandle>;
24
25 auto get_next_sqe() -> di::Optional<SQE&>;
26 auto get_next_cqe() -> di::Optional<CQE&>;
27
28 auto submit_and_wait() -> di::Result<void>;
29
30 private:
31 IoUringHandle() = default;
32
33 u32 sq_entry_count;
34 u32 sq_mask;
35 u32* sq_index_array;
36 SQE* sq_array;
37
38 di::Atomic<unsigned int> const* sq_head;
39 di::Atomic<unsigned int>* sq_tail;
40 di::Atomic<unsigned int> const* sq_flags;
41
42 u32 cq_entry_count;
43 u32 cq_mask;
44 CQE* cq_array;
45
46 di::Atomic<unsigned int>* cq_head;
47 di::Atomic<unsigned int> const* cq_tail;
48 di::Atomic<unsigned int> const* cq_overflow;
49
50 SyncFile fd;
51 MemoryRegion sq_region;
52 MemoryRegion sqe_region;
53 MemoryRegion cq_region;
54
55 u32 sq_pending { 0 };
56 };
57}
58}
Definition memory_region.h:6
Definition sync_file.h:40
static auto create() -> di::Result< IoUringHandle >
auto get_next_sqe() -> di::Optional< SQE & >
auto get_next_cqe() -> di::Optional< CQE & >
auto submit_and_wait() -> di::Result< void >
Definition io_uring.h:11
struct io_uring_sqe SQE
Definition io_uring.h:12
struct io_uring_cqe CQE
Definition io_uring.h:13
auto sys_enter(unsigned int fd, unsigned int to_submit, unsigned int min_complete, unsigned int flags, void const *arg, size_t arg_size) -> di::Result< int >
auto sys_setup(u32 entries, SetupParams *params) -> di::Result< SyncFile >
auto sys_register(unsigned int fd, unsigned int op_code, void *arg, unsigned int nr_args) -> di::Result< int >
struct io_uring_params SetupParams
Definition io_uring.h:14
Definition io_uring.h:10