STRUCT MSI_PARENT_OPS(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… struct msi_parent_ops(9) β€” like, the whole Kernel API Manual tea β˜•βœ¨

okay bestie, buckle up πŸŽ€ we're looking at struct msi_parent_ops today β€” it's literally the struct that holds all the MSI parent domain callbacks and the config info that goes with them. no cap. it lives over in the Kernel API Manual and honestly? it's giving backstage-pass energy πŸ‘‘


✨ SYNOPSIS ✨

struct msi_parent_ops {
    u32 supported_flags;
    u32 required_flags;
    u32 chip_flags;
    u32 bus_select_token;
    u32 bus_select_mask;
    const char      *prefix;
    bool (*init_dev_msi_info)(struct device *dev, struct irq_domain *domain, struct irq_domain *msi_parent_domain, struct msi_domain_info *msi_child_info);
};

🌸 MEMBERS 🌸

so here's the whole cast, main character by main character πŸ’–

  • supported_flags β€” Required, bestie, don't forget it. these are the supported MSI flags of the parent domain ✨
  • required_flags β€” Optional: the required MSI flags of the parent MSI domain πŸ¦‹
  • chip_flags β€” Optional: picks which MSI chip callbacks get updated with defaults inside msi_lib_init_dev_msi_info πŸ”₯
  • bus_select_token β€” Optional: the bus token of the real parent domain, used for irq_domain::select πŸ‘‘
  • bus_select_mask β€” Optional: a mask of supported BUS_DOMAINs, also for irq_domain::select πŸŽ€
  • prefix β€” Optional: a prefix for the domain name and the chip name πŸ’…
  • init_dev_msi_info β€” Required: the callback for MSI parent domains πŸ’€ it sets up the parent-domain-specific domain flags, the domain ops, and the interrupt chip callbacks whenever a per-device domain gets created. like, it's the moment the per-device domain is born and this function does its hair πŸ’‡β€β™€οΈ

πŸ¦‹ SEE ALSO πŸ¦‹

everything's connected, iykyk 🌈 β€” the kernel file ./include/linux/msi.h and this whole friend group:

struct msi_msg(9), struct pci_msi_desc(9), union msi_domain_cookie(9), struct msi_desc_data(9), struct msi_desc(9), struct msi_dev_domain(9), msi_first_desc(9), msi_domain_for_each_desc(9), msi_for_each_desc(9), msi_msg_set_addr(9), msi_insert_msi_desc(9), msi_free_msi_descs_range(9), msi_free_msi_descs(9), struct msi_domain_ops(9), struct msi_domain_info(9), struct msi_domain_template(9) 🫢


ngl the Required vs Optional tags are load-bearing β€” if you skip a required one it's not a vibe, it's a bug 😭

okay that's the whole page, go off πŸ’œ

β€” sign-off time, bestie πŸŽ€ this one comes to you from ./include/linux, dated October 2026, and it's filed under struct msi_parent_ops(9). slay πŸ’…βœ¨

πŸ“¦ where this page comes from