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_t
entries: u16
group_id: u16
flags: 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;
}