scmi_events_dispatcher(9)
π scmi_events_dispatcher β Kernel API Manual β¨
okay bestie, buckle up, because this is the scmi_events_dispatcher(9) page from the Kernel API Manual and it's honestly kind of a bop once you get it π
π NAME π
scmi_events_dispatcher β the common worker logic that all the work items share, no cap π«Ά
β¨ SYNOPSIS β¨
void scmi_events_dispatcher (struct work_struct *work );
π¦ ARGUMENTS π¦
workβ the work item you're handing over, and bestie it's tied to its very own dedicatedevents_queue(not sharing, not borrowing, it's got its own πΈ)
π DESCRIPTION π
okay so here's the literal logic, step by step, and yes I'm numbering them because the manpage numbered them:
- dequeue ONE pending RX notification (this thing got queued up back in SCMI RX ISR context, just so we're clear π)
- generate a custom event report from the received event message β we're making it cute and bespoke π
- look up any registered
ALL_SRC_IDshandler:- > call the related notification chain, passing in the report
- look up any registered specific
SRC_IDhandler:- > call the related notification chain, passing in the report
π notes, because there are notes π
- a dedicated per-protocol
kfifoqueue is used β the whole point is that an anomalous flood of events cannot saturate other protocols' queues. the way that isolation just works π₯ - each per-protocol queue is associated to a distinct
work_item, which means (and this is the part that ate):- all protocols can process their dedicated queues concurrently (since
notify_wq:max_active != 1) - anyway, at most one worker instance is allowed to run on the same queue concurrently: this ensures we can have only one concurrent reader/writer on the associated
kfifo, so that we can use it lock-less π
- all protocols can process their dedicated queues concurrently (since
π§ CONTEXT π§
Process context. that's it. that's the whole section π
β SEE ALSO β
Kernel file ./drivers/firmware/arm_scmi/notify.c β Theory of operation(9), struct scmi_notify_instance(9), struct events_queue(9), struct scmi_event_header(9), struct scmi_registered_events_desc(9), struct scmi_registered_event(9), struct scmi_event_handler(9), scmi_lookup_and_call_event_chain(9), scmi_process_event_header(9), scmi_process_event_payload(9), scmi_notify(9), scmi_kfifo_free(9), scmi_initialize_events_queue(9), scmi_allocate_registered_events_desc(9), scmi_register_protocol_events(9), scmi_deregister_protocol_events(9), scmi_allocate_event_handler(9), scmi_free_event_handler(9), scmi_bind_event_handler(9), scmi_valid_pending_handler(9), scmi_register_event_handler(9), __scmi_event_handler_get_ops(9), scmi_get_active_handler(9), __scmi_enable_evt(9), scmi_put_handler_unlocked(9), scmi_event_handler_enable_events(9), scmi_notifier_register(9), scmi_notifier_unregister(9), scmi_devm_notifier_register(9), scmi_devm_notifier_unregister(9), scmi_protocols_late_init(9), scmi_notification_init(9), scmi_notification_quiesce(9), scmi_notification_exit(9)
that's a lot of cross-refs, and yes I listed every single one, you're welcome ππ
sign-off time π this came out of ./drivers/firmware/arm_scmi, dated October 2026, and it's the scmi_events_dispatcher(9) page β periodt. go forth and dispatch, icon ππΈ
π¦ 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