STRUCT IWL_MLD_EMLSR(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… struct iwl_mld_emlsr(9) β€” like, the whole kernel API manual but make it make sense

okay so bestie, we're in the Kernel API Manual and today's main character is struct iwl_mld_emlsr(9) β€” yes that's the whole title, and yes you're gonna understand every single field by the end of this. pinky promise 🫢


✨ NAME ✨

struct iwl_mld_emlsr β€” per-VIF data about EMLSR operation πŸ’«


🌸 SYNOPSIS 🌸

here's the whole glow-up, laid out exactly as the kernel gods wrote it:

struct iwl_mld_emlsr {
    struct {
      u8 primary;
      u8 selected_primary;
      u16 selected_links;
      enum iwl_mld_emlsr_blocked blocked_reasons;
      enum iwl_mld_emlsr_exit last_exit_reason;
      unsigned long last_exit_ts;
      u8 exit_repeat_count;
      unsigned long last_entry_ts;
    };
    struct wiphy_work unblock_tpt_wk;
    struct wiphy_delayed_work check_tpt_wk;
    struct wiphy_delayed_work prevent_done_wk;
    struct wiphy_delayed_work tmp_non_bss_done_wk;
};

like… it's giving nested anonymous struct, and honestly? we stan πŸŽ€


πŸ¦‹ Members πŸ¦‹

okay now the part you actually came for, no skimming allowed, every field is getting its moment:

  • {unnamed_struct} β€” anonymous. that's it, that's the whole vibe. it has no name, it simply is πŸ’€
  • primary β€” the current primary link. the it-girl link, the one holding the crown πŸ‘‘
  • selected_primary β€” primary link as selected during the last link selection. like, the receipts from last time we picked 🧾
  • selected_links β€” links as selected during the last link selection. same receipts, but for all the links together πŸŽ€
  • blocked_reasons β€” reasons preventing EMLSR from being enabled. the "not today, bestie" list πŸ™ˆ
  • last_exit_reason β€” reason for the last EMLSR exit. why it had to leave the party 😭
  • last_exit_ts β€” time of the last EMLSR exit (if last_exit_reason is non-zero). timestamped drama, love that for us ⏰
  • exit_repeat_count β€” number of times EMLSR was exited for the same reason. like, the same reason?? multiple times?? iconic but concerning πŸ”₯
  • last_entry_ts β€” the time of the last EMLSR entry (if iwl_mld_emlsr_active is true). the comeback timestamp ✨
  • unblock_tpt_wk β€” unblock EMLSR because the throughput limit was reached. throughput said "enough", worker said "heard" πŸ“Ά
  • check_tpt_wk β€” a worker to check if IWL_MLD_EMLSR_BLOCKED_TPT should be added, for example if there is no longer enough traffic. lowkey the vibe-checker of workers πŸ‘€
  • prevent_done_wk β€” worker to remove IWL_MLD_EMLSR_BLOCKED_PREVENTION. cleanup crew, very demure πŸ’…
  • tmp_non_bss_done_wk β€” worker to remove IWL_MLD_EMLSR_BLOCKED_TMP_NON_BSS. another cleanup crew, this one's temporary so don't get attached 🫢

🌈 SEE ALSO 🌈

go touch some other docs, bestie, they're all connected:

  • Kernel file ./drivers/net/wireless/intel/iwlwifi/mld/iface.h
  • enum iwl_mld_emlsr_blocked(9)
  • enum iwl_mld_emlsr_exit(9)
  • struct iwl_mld_vif(9)

iykyk πŸ’œ


ngl the headers ate and the workers understood the assignment β€” pls don't go poking at this struct without reading the SEE ALSOs first, fr fr πŸ™

⭐ and that's a wrap! this page came to you straight from ./drivers/net/wireless/intel/i... β€” yes the source path is literally truncated like that in the footer, we don't gatekeep β€” dated October 2026, and it's all struct iwl_mld_emlsr(9) energy, periodt. πŸ’–πŸŽ€πŸ¦‹πŸŒΈπŸ‘‘

πŸ“¦ where this page comes from