| 37 | } |
| 38 | |
| 39 | static int __init_ring_with_region(struct io_uring *ring, unsigned ring_flags, |
| 40 | struct io_uring_mem_region_reg *pr, |
| 41 | bool disabled) |
| 42 | { |
| 43 | int flags = disabled ? IORING_SETUP_R_DISABLED : 0; |
| 44 | int ret; |
| 45 | |
| 46 | ret = io_uring_queue_init(8, ring, flags); |
| 47 | if (ret) { |
| 48 | if (ret != -EINVAL) |
| 49 | fprintf(stderr, "ring setup failed: %d\n", ret); |
| 50 | return ret; |
| 51 | } |
| 52 | |
| 53 | ret = io_uring_register_region(ring, pr); |
| 54 | if (ret) |
| 55 | goto err; |
| 56 | |
| 57 | if (disabled) { |
| 58 | ret = io_uring_enable_rings(ring); |
| 59 | if (ret) { |
| 60 | fprintf(stderr, "io_uring_enable_rings failure %i\n", ret); |
| 61 | goto err; |
| 62 | } |
| 63 | } |
| 64 | return 0; |
| 65 | err: |
| 66 | io_uring_queue_exit(ring); |
| 67 | return ret; |
| 68 | } |
| 69 | |
| 70 | static int page_size; |
| 71 | static struct io_uring_reg_wait *reg; |