ring_buffer_poll_wait(9)
π ring_buffer_poll_wait β poll on buffer input (yes bestie, it's the kernel API manual, we're doing this) π
okay so real talk: this page lives in the Kernel API Manual section 9, and it's about making a task wait on the tracing ring buffer until there's actually data to read. no busy-looping, no "are we there yet" energy β we poll properly. slay. β¨
πΈ SYNOPSIS πΈ
__poll_t ring_buffer_poll_wait (struct trace_buffer *buffer , int cpu ,
struct file *filp , poll_table *poll_table , int full );
that's the whole signature, no cap. five args, one return type __poll_t. copy it exactly, don't get creative π
π¦ ARGUMENTS π¦
bufferβ the buffer you're waiting on. like, the actual ring buffer object. main character.cpuβ which cpu buffer you're waiting on. yes, per-cpu, very demure, very mindful.filpβ the file descriptor. thestruct file *. hi bestie πpoll_tableβ the poll descriptor. this is thepoll_table *doing the poll-table things.fullβ wait until the percentage of pages are available... but only ifcpu != RING_BUFFER_ALL_CPUS. read that condition twice, i'm serious π«Ά
π DESCRIPTION π
here's the vibe check. if cpu == RING_BUFFER_ALL_CPUS, then your task wakes up as soon as data is added to any of the buffer's cpu buffers. any of them. first one to show up wins, basically π
otherwise β so when it's not RING_BUFFER_ALL_CPUS β it waits for data to be added to one specific cpu buffer. no queue-jumping for the other cpus. loyalty. π
and the return? it returns EPOLLIN | EPOLLRDNORM if data exists in the buffers, and zero otherwise. that's it. that's the whole return contract, bestie, don't overthink it π
π₯ SEE ALSO π₯
the source of truth is the kernel file ./kernel/trace/ring_buffer.c, and honestly the whole ring buffer friend group shows up here. literally the entire group chat:
ring_buffer_event_length(9)ring_buffer_event_data(9)rb_page_capacity(9)rb_subbuf_capacity(9)rb_subbuf_max_data_size(9)rb_subbuf_start(9)ring_buffer_event_time_stamp(9)ring_buffer_nr_dirty_pages(9)ring_buffer_wake_waiters(9)ring_buffer_wait(9)rb_check_pages(9)rb_validate_buffer(9)__ring_buffer_alloc(9)__ring_buffer_alloc_range(9)__ring_buffer_alloc_remote(9)ring_buffer_free(9)ring_buffer_resize(9)rb_update_event(9)ring_buffer_nest_start(9)ring_buffer_nest_end(9)ring_buffer_unlock_commit(9)ring_buffer_lock_reserve(9)ring_buffer_discard_commit(9)ring_buffer_write(9)ring_buffer_record_disable(9)ring_buffer_record_enable(9)ring_buffer_record_off(9)ring_buffer_record_on(9)ring_buffer_record_is_on(9)ring_buffer_record_is_set_on(9)ring_buffer_record_is_on_cpu(9)ring_buffer_record_disable_cpu(9)ring_buffer_record_enable_cpu(9)ring_buffer_oldest_event_ts(9)ring_buffer_bytes_cpu(9)ring_buffer_entries_cpu(9)ring_buffer_overrun_cpu(9)ring_buffer_commit_overrun_cpu(9)ring_buffer_dropped_events_cpu(9)ring_buffer_read_events_cpu(9)ring_buffer_entries(9)ring_buffer_overruns(9)ring_buffer_iter_reset(9)ring_buffer_iter_empty(9)ring_buffer_peek(9)ring_buffer_iter_peek(9)ring_buffer_consume(9)ring_buffer_read_start(9)ring_buffer_read_finish(9)ring_buffer_iter_advance(9)ring_buffer_size(9)ring_buffer_max_event_size(9)ring_buffer_reset_cpu(9)ring_buffer_reset_online_cpus(9)ring_buffer_reset(9)ring_buffer_empty(9)ring_buffer_empty_cpu(9)ring_buffer_swap_cpu(9)ring_buffer_alloc_read_page(9)ring_buffer_free_read_page(9)ring_buffer_read_page(9)ring_buffer_read_page_data(9)ring_buffer_read_page_size(9)ring_buffer_subbuf_size_get(9)ring_buffer_subbuf_order_get(9)ring_buffer_subbuf_order_set(9)
β¨ reminder bestie: this page is from ./kernel/trace, dated October 2026. that's the footer, iykyk β no need to re-read the last line, i already told you π
okay that's the page, go poll something, you're gonna do amazing π§π
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms