MCPcopy Create free account
hub / github.com/axboe/liburing / setup_buffer_pool

Function setup_buffer_pool

examples/io_uring-udp.c:47–89  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

45}
46
47static int setup_buffer_pool(struct ctx *ctx)
48{
49 int ret, i;
50 void *mapped;
51 struct io_uring_buf_reg reg = { .ring_addr = 0,
52 .ring_entries = BUFFERS,
53 .bgid = 0 };
54
55 ctx->buf_ring_size = (sizeof(struct io_uring_buf) + buffer_size(ctx)) * BUFFERS;
56 mapped = mmap(NULL, ctx->buf_ring_size, PROT_READ | PROT_WRITE,
57 MAP_ANONYMOUS | MAP_PRIVATE, 0, 0);
58 if (mapped == MAP_FAILED) {
59 fprintf(stderr, "buf_ring mmap: %s\n", strerror(errno));
60 return -1;
61 }
62 ctx->buf_ring = (struct io_uring_buf_ring *)mapped;
63
64 io_uring_buf_ring_init(ctx->buf_ring);
65
66 reg = (struct io_uring_buf_reg) {
67 .ring_addr = (unsigned long)ctx->buf_ring,
68 .ring_entries = BUFFERS,
69 .bgid = 0
70 };
71 ctx->buffer_base = (unsigned char *)ctx->buf_ring +
72 sizeof(struct io_uring_buf) * BUFFERS;
73
74 ret = io_uring_register_buf_ring(&ctx->ring, &reg, 0);
75 if (ret) {
76 fprintf(stderr, "buf_ring init failed: %s\n"
77 "NB This requires a kernel version >= 6.0\n",
78 strerror(-ret));
79 return ret;
80 }
81
82 for (i = 0; i < BUFFERS; i++) {
83 io_uring_buf_ring_add(ctx->buf_ring, get_buffer(ctx, i), buffer_size(ctx), i,
84 io_uring_buf_ring_mask(BUFFERS), i);
85 }
86 io_uring_buf_ring_advance(ctx->buf_ring, BUFFERS);
87
88 return 0;
89}
90
91static int setup_context(struct ctx *ctx)
92{

Callers 1

setup_contextFunction · 0.85

Calls 3

buffer_sizeFunction · 0.85
get_bufferFunction · 0.85

Tested by

no test coverage detected