mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 06:44:00 -04:00
Implement BPF struct ops registration. It's registered off the BPF path, and can be removed by BPF as well as io_uring. To protect it, introduce a global lock synchronising registration. ctx->uring_lock can be nested under it. ctx->bpf_ops is write protected by both locks and so it's safe to read it under either of them. Signed-off-by: Pavel Begunkov <asml.silence@gmail.com> Link: https://patch.msgid.link/1f46bffd76008de49cbafa2ad77d348810a4f69e.1772109579.git.asml.silence@gmail.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
29 lines
503 B
C
29 lines
503 B
C
// SPDX-License-Identifier: GPL-2.0
|
|
#ifndef IOU_BPF_OPS_H
|
|
#define IOU_BPF_OPS_H
|
|
|
|
#include <linux/io_uring_types.h>
|
|
|
|
enum {
|
|
IOU_REGION_MEM,
|
|
IOU_REGION_CQ,
|
|
IOU_REGION_SQ,
|
|
};
|
|
|
|
struct io_uring_bpf_ops {
|
|
int (*loop_step)(struct io_ring_ctx *ctx, struct iou_loop_params *lp);
|
|
|
|
__u32 ring_fd;
|
|
void *priv;
|
|
};
|
|
|
|
#ifdef CONFIG_IO_URING_BPF_OPS
|
|
void io_unregister_bpf_ops(struct io_ring_ctx *ctx);
|
|
#else
|
|
static inline void io_unregister_bpf_ops(struct io_ring_ctx *ctx)
|
|
{
|
|
}
|
|
#endif
|
|
|
|
#endif /* IOU_BPF_OPS_H */
|