STRUCT SCMI_VIO_MSG(9)
π struct scmi_vio_msg(9) β the Kernel API Manual, but make it make sense π
okay so bestie, welcome to the Kernel API Manual entry for struct scmi_vio_msg. this little cutie is literally just a container of Transport PDU info β think of it as the group chat message envelope for SCMI-over-virtio. it's not doing the talking, it's holding the school bag π for the messages that do. no cap, it's giving "plumbing that eats" π
β¨ NAME β¨
struct scmi_vio_msg β Transport PDU information, periodt π«Ά
πΈ SYNOPSIS πΈ
look at her. she's beautiful. every field copied exactly, character for character, because we do not play with struct definitions π₯
struct scmi_vio_msg {
struct scmi_msg_payld *request;
struct scmi_msg_payld *input;
struct list_head list;
unsigned int rx_len;
unsigned int max_len;
unsigned int poll_idx;
enum poll_states poll_status;
spinlock_t poll_lock;
refcount_t users;
};
π¦ Members π¦
okay so let's do a vibe check on every single field, one by one, no skipping, that's the rule π
requestβ the SDU used for commands. so like, this is the one that actually goes out and asks for stuff π£οΈinputβ the SDU used for (delayed) responses and notifications. the replies and the lil pings slide in here, sometimes fashionably late πlistβ a list whichscmi_vio_msgmay be part of. yes bestie, she's a linkable icon, she can be in the group list πrx_lenβ input SDU size in bytes, once input has been received. so it's the real, actual size β but only once the input has actually landed, not before, don't be weird about it βmax_lenβ maximum allowed SDU size in bytes. the ceiling, the limit, the "don't try it" line πpoll_idxβ the last used index registered for polling purposes, if this message transaction reply was configured for polling. iykyk β polling mode only, otherwise it's just vibing there πpoll_statusβ the polling state for this message. current mood of the poll, basically β¨poll_lockβ a lock to protectpoll_status. hold the line bestie, that state stays safe π§usersβ a reference count to track this message's users, and to avoid premature freeing (and reuse) when polling and IRQ execution paths interleave. highkey the most important one β this is the "please don't free me while both paths are literally in the same room" guardian π«Ά honestly iconic
π₯ SEE ALSO π₯
go read these next, they're all connected, it's a whole cinematic universe π¬
- Kernel file
./drivers/firmware/arm_scmi/transports/virtio.c Theory of Operation(9)struct scmi_vio_channel(9)virtio_mark_txdone(9)virtio_poll_done(9)
β οΈ gentle reminder bestie: all of the above is documentation of the struct, not a tutorial on how to poke at it yourself β the manpage describes what's there, and that's it. no invented behaviour, we don't do that here π
and that's the whole page, we ate, no crumbs π this footer is coming to you straight from ./drivers/firmware/arm_scmi/tr..., dated October 2026, and yes it's still called struct scmi_vio_msg(9). slay, bye ππ
π¦ 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