12#include "xtc_future.h"
15#define XTC_BATCH_VERSION 1
17typedef struct xtc_batch xtc_batch_t;
18typedef struct xtc_batch_item {
30typedef struct xtc_batch_result {
31 enum xtc_batch_state state;
35typedef struct xtc_batch_opts {
36 uint32_t size, version;
37 uint32_t capacity, max_active;
38 uint64_t resource_capacity;
39 xtc_exec_class_t sched_class;
42 void (*complete)(uint64_t,
void *, int,
void *);
46enum xtc_batch_close_mode { XTC_BATCH_DRAIN, XTC_BATCH_CANCEL };
51enum xtc_batch_exec_kind {
54 XTC_BATCH_EXEC_FUTURE,
55 XTC_BATCH_EXEC_BLOCKING
63#define XTC_BATCH_EXEC_OK 0
64#define XTC_BATCH_EXEC_TIMEOUT 1
65#define XTC_BATCH_EXEC_ABORTED 2
66typedef struct xtc_batch_exec {
67 enum xtc_batch_exec_kind kind;
74typedef struct xtc_batch_async_opts {
75 uint32_t size, version;
76 uint32_t capacity, max_active;
77 uint64_t resource_capacity;
82 uint32_t mt_queue_cap;
83 int64_t exec_timeout_ns;
84 xtc_exec_class_t sched_class;
89 void (*complete)(uint64_t,
void *, int,
void *);
92 void (*cancel_hint)(uint64_t,
void *);
96typedef struct xtc_batch_async_stats {
97 uint32_t size, version;
98 uint64_t offloads, offload_timeouts, offload_errors;
103 uint64_t mt_queued, mt_rejections;
106typedef struct xtc_batch_stats {
107 uint32_t size, version;
108 uint32_t queued, ready, blocked;
109 uint64_t reserved_units, iterations, completed, cancelled, failed;
110 uint64_t rejections, max_vector, total_members;
121XTC_API
int xtc_batch_submit(xtc_batch_t *,
void *, uint64_t, uint64_t *);
122XTC_API
int xtc_batch_cancel(xtc_batch_t *, uint64_t);
123XTC_API
int xtc_batch_resume(xtc_batch_t *, uint64_t);
124XTC_API
int xtc_batch_close(xtc_batch_t *,
enum xtc_batch_close_mode);
129XTC_API
int xtc_batch_destroy(xtc_batch_t *);
154XTC_API
int xtc_batch_submit_mt(xtc_batch_t *,
void *, uint64_t, uint64_t *);
155XTC_API
int xtc_batch_cancel_mt(xtc_batch_t *, uint64_t);
156XTC_API
int xtc_batch_resume_mt(xtc_batch_t *, uint64_t);
177XTC_API
int xtc_batch_loop_for_device(xtc_exec_t *,
191typedef struct xtc_batch_router xtc_batch_router_t;
192XTC_API
int xtc_batch_router_create(xtc_batch_t **groups,
int n,
193 xtc_batch_router_t **out);
194XTC_API
void xtc_batch_router_destroy(xtc_batch_router_t *);
195XTC_API xtc_batch_t *xtc_batch_route(xtc_batch_router_t *, uint64_t key);