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