Function setup_buf_ring [src]

Registers a shared buffer ring to be used with provided buffers. entries number of io_uring_buf structures is mem mapped and shared by kernel. fd is IO_Uring.fd for which the provided buffer ring is being registered. entries is the number of entries requested in the buffer ring, must be power of 2. group_id is the chosen buffer group ID, unique in IO_Uring.

Prototype

pub fn setup_buf_ring( fd: posix.fd_t, entries: u16, group_id: u16, flags: linux.io_uring_buf_reg.Flags, ) !*align(page_size_min) linux.io_uring_buf_ring

Parameters

fd: posix.fd_tentries: u16group_id: u16flags: linux.io_uring_buf_reg.Flags

Source

pub fn setup_buf_ring( fd: posix.fd_t, entries: u16, group_id: u16, flags: linux.io_uring_buf_reg.Flags, ) !*align(page_size_min) linux.io_uring_buf_ring { if (entries == 0 or entries > 1 << 15) return error.EntriesNotInRange; if (!std.math.isPowerOfTwo(entries)) return error.EntriesNotPowerOfTwo; const mmap_size = @as(usize, entries) * @sizeOf(linux.io_uring_buf); const mmap = try posix.mmap( null, mmap_size, posix.PROT.READ | posix.PROT.WRITE, .{ .TYPE = .PRIVATE, .ANONYMOUS = true }, -1, 0, ); errdefer posix.munmap(mmap); assert(mmap.len == mmap_size); const br: *align(page_size_min) linux.io_uring_buf_ring = @ptrCast(mmap.ptr); try register_buf_ring(fd, @intFromPtr(br), entries, group_id, flags); return br; }