| 278 | } |
| 279 | |
| 280 | int io_uring_register_ring_fd(struct io_uring *ring) |
| 281 | { |
| 282 | struct io_uring_rsrc_update up = { |
| 283 | .data = ring->ring_fd, |
| 284 | .offset = -1U, |
| 285 | }; |
| 286 | int ret; |
| 287 | |
| 288 | if (ring->int_flags & INT_FLAG_REG_RING) |
| 289 | return -EEXIST; |
| 290 | |
| 291 | ret = do_register(ring, IORING_REGISTER_RING_FDS, &up, 1); |
| 292 | if (ret == 1) { |
| 293 | ring->enter_ring_fd = up.offset; |
| 294 | ring->int_flags |= INT_FLAG_REG_RING; |
| 295 | if (ring->features & IORING_FEAT_REG_REG_RING) { |
| 296 | ring->int_flags |= INT_FLAG_REG_REG_RING; |
| 297 | } |
| 298 | } |
| 299 | return ret; |
| 300 | } |
| 301 | |
| 302 | |
| 303 | int io_uring_unregister_ring_fd(struct io_uring *ring) |