123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- #include "../config-host.h"
- /* SPDX-License-Identifier: MIT */
- /*
- * Description: test persistence of mmap'ed provided ring buffers. Use a range
- * of buffer group IDs that puts us into both the lower end array
- * and higher end xarry.
- *
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <fcntl.h>
- #include <string.h>
- #include <sys/mman.h>
- #include "liburing.h"
- #include "helpers.h"
- #define BGID_START 60
- #define BGID_NR 10
- #define ENTRIES 512
- int main(int argc, char *argv[])
- {
- struct io_uring_buf_ring *br[BGID_NR];
- struct io_uring ring;
- size_t ring_size;
- int ret, i, j;
- if (argc > 1)
- return T_EXIT_SKIP;
- ret = io_uring_queue_init(1, &ring, 0);
- if (ret) {
- fprintf(stderr, "queue init failed %d\n", ret);
- return T_EXIT_FAIL;
- }
- ring_size = ENTRIES * sizeof(struct io_uring_buf);
- for (i = 0; i < BGID_NR; i++) {
- int bgid = BGID_START + i;
- struct io_uring_buf_reg reg = {
- .ring_entries = ENTRIES,
- .bgid = bgid,
- .flags = IOU_PBUF_RING_MMAP,
- };
- off_t off;
- ret = io_uring_register_buf_ring(&ring, ®, 0);
- if (ret) {
- if (ret == -EINVAL)
- return T_EXIT_SKIP;
- fprintf(stderr, "reg buf ring: %d\n", ret);
- return T_EXIT_FAIL;
- }
- off = IORING_OFF_PBUF_RING |
- (unsigned long long) bgid << IORING_OFF_PBUF_SHIFT;
- br[i] = mmap(NULL, ring_size, PROT_READ | PROT_WRITE,
- MAP_SHARED | MAP_POPULATE, ring.ring_fd, off);
- if (br[i] == MAP_FAILED) {
- perror("mmap");
- return T_EXIT_FAIL;
- }
- }
- for (i = 0; i < BGID_NR; i++) {
- ret = io_uring_unregister_buf_ring(&ring, BGID_START + i);
- if (ret) {
- fprintf(stderr, "reg buf ring: %d\n", ret);
- return T_EXIT_FAIL;
- }
- }
- for (j = 0; j < 1000; j++) {
- for (i = 0; i < BGID_NR; i++)
- memset(br[i], 0x5a, ring_size);
- usleep(1000);
- }
- io_uring_queue_exit(&ring);
- return T_EXIT_PASS;
- }
|