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

Function test_running

test/buf-ring.c:297–402  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

295}
296
297static int test_running(int bgid, int entries, int loops, int use_mmap)
298{
299 int ring_mask = io_uring_buf_ring_mask(entries);
300 struct io_uring_buf_ring *br;
301 int ret, loop, idx, read_fd;
302 struct io_uring ring;
303 char buffer[8];
304 bool *buffers;
305
306 ret = t_create_ring(1, &ring, 0);
307 if (ret == T_SETUP_SKIP)
308 return T_EXIT_SKIP;
309 else if (ret != T_SETUP_OK)
310 return T_EXIT_FAIL;
311
312 if (!use_mmap) {
313 br = io_uring_setup_buf_ring(&ring, entries, bgid, 0, &ret);
314 if (!br) {
315 /* by now should have checked if this is supported or not */
316 fprintf(stderr, "Buffer ring register failed %d\n", ret);
317 return T_EXIT_FAIL;
318 }
319 } else {
320 struct io_uring_buf_reg reg = {
321 .ring_entries = entries,
322 .bgid = bgid,
323 .flags = IOU_PBUF_RING_MMAP,
324 };
325 size_t ring_size;
326 off_t off;
327
328 ret = io_uring_register_buf_ring(&ring, &reg, 0);
329 if (ret) {
330 if (ret == -EINVAL)
331 return T_EXIT_SKIP;
332 fprintf(stderr, "mmap ring register failed %d\n", ret);
333 return T_EXIT_FAIL;
334 }
335
336 off = IORING_OFF_PBUF_RING |
337 (unsigned long long) bgid << IORING_OFF_PBUF_SHIFT;
338 ring_size = sizeof(struct io_uring_buf) * entries;
339 br = mmap(NULL, ring_size, PROT_READ | PROT_WRITE,
340 MAP_SHARED | MAP_POPULATE, ring.ring_fd, off);
341 if (br == MAP_FAILED) {
342 perror("mmap");
343 return T_EXIT_FAIL;
344 }
345 }
346
347 buffers = malloc(sizeof(bool) * entries);
348 if (!buffers)
349 return T_EXIT_SKIP;
350
351 read_fd = open("/dev/zero", O_RDONLY);
352 if (read_fd < 0)
353 return T_EXIT_SKIP;
354

Callers 1

mainFunction · 0.85

Calls 6

t_create_ringFunction · 0.85
io_uring_setup_buf_ringFunction · 0.85
test_one_readFunction · 0.85
io_uring_queue_exitFunction · 0.85

Tested by

no test coverage detected