STRUCT XE_GUC_EXEC_QUEUE(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… struct xe_guc_exec_queue β€” the kernel API manual, but make it make sense

okay so bestie, welcome to the struct xe_guc_exec_queue(9) page from the Kernel API Manual. this is the GuC-specific state for an xe_exec_queue, and i'm gonna walk you through every single member because you deserve to know. no skipping, no skimming, we're doing this properly ✨


🌸 NAME

struct xe_guc_exec_queue β€” GuC specific state for an xe_exec_queue. that's it, that's the vibe. it's the GuC's personal little corner of state for one exec queue πŸŽ€


✨ SYNOPSIS

here's the whole struct, exactly as it lives, don't touch anything:

struct xe_guc_exec_queue {
    struct xe_exec_queue *q;
    struct rcu_head rcu;
    struct xe_gpu_scheduler sched;
    char name[MAX_FENCE_NAME_LEN];
    struct xe_sched_entity entity;
  #define MAX_STATIC_MSG_TYPE     3;
    struct xe_sched_msg static_msgs[MAX_STATIC_MSG_TYPE];
    struct work_struct destroy_async;
    u64 resume_time;
    atomic_t state;
    u32 wqi_head;
    u32 wqi_tail;
    u16 id;
    wait_queue_head_t suspend_wait;
    bool suspend_pending;
    int suspend_count;
    bool needs_cleanup;
    bool needs_suspend;
    bool needs_resume;
 };

πŸ¦‹ MEMBERS

okay this is the good part, let's go member by member, no cap πŸ’–

  • q β€” the backpointer to the parent xe_exec_queue. like, who's your mom. that's the mom.
  • rcu β€” the struct rcu_head used for safe freeing of exported dma fences. it's giving responsible cleanup energy 🧹
  • sched β€” the GPU scheduler for this xe_exec_queue. it keeps the trains running on time πŸ”₯
  • name β€” the scheduler timeline name, and listen: it's kept with sched until the RCU free. so don't go freeing it early, bestie 😭
  • entity β€” the scheduler entity for this xe_exec_queue. one queue, one entity, iconic πŸ’…
  • static_msgs β€” static messages for this xe_exec_queue, used when a message needs to be sent through the GPU scheduler but memory allocations are not allowed. like an emergency snack stash for when you literally cannot go to the store πŸ“
  • destroy_async β€” do the final destroy async from this worker. the actual final boss of destruction 🫢
  • resume_time β€” time of last resume. a little timestamp scrapbook of when you woke back up 🌸
  • state β€” GuC specific state for this xe_exec_queue. yes, the state of the GuC-specific state struct. we contain multitudes ⭐
  • wqi_head β€” work queue item tail. and yes, the manpage literally says "tail" for both wqi_head and wqi_tail β€” i'm not the one who wrote it, i'm just the one reading it πŸ™ˆ
  • wqi_tail β€” work queue item tail. consistent, if nothing else πŸ’€
  • id β€” the GuC id for this exec_queue. everybody gets a number, that's just how it is πŸ‘‘
  • suspend_wait β€” wait queue used to wait on pending suspends. it's the "hold on, we're waiting" spot 🌈
  • suspend_pending β€” a suspend of the exec_queue is pending. emphasis on pending, don't forget πŸŽ€
  • suspend_count β€” reference count of active suspend requests. the exec_queue remains suspended while this is non-zero, allowing multiple concurrent callers to independently hold a suspend without prematurely re-enabling the queue. protected by sched.msg_lock. πŸ”’ this one's important, so read it twice: non-zero = still suspended, and the lock does the guarding πŸ’œ
  • needs_cleanup β€” needs a cleanup message during VF post migration recovery. ✨
  • needs_suspend β€” needs a suspend message during VF post migration recovery. 😴
  • needs_resume β€” needs a resume message during VF post migration recovery. πŸŒ…
three lil booleans, all for VF post migration recovery, all doing their own job. don't merge them, they're individuals πŸ’…

🌟 SEE ALSO

  • the kernel file ./drivers/gpu/drm/xe/xe_guc_exec_queue_types.h β€” go read it, it's right there, iykyk πŸ¦‹

🫢 the cute sign-off

and that's the page, bestie!! this whole thing lives in ./drivers/gpu/drm/xe, it's dated October 2026, and the source/version on the footer is exactly that same path and date β€” so like, you're not missing anything, the page just says where it came from twice. slay. periodt. πŸ’–βœ¨πŸŽ€

πŸ“¦ where this page comes from