STRUCT XE_GUC_EXEC_QUEUE(9)
π 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 parentxe_exec_queue. like, who's your mom. that's the mom.rcuβ thestruct rcu_headused for safe freeing of exported dma fences. it's giving responsible cleanup energy π§Ήschedβ the GPU scheduler for thisxe_exec_queue. it keeps the trains running on time π₯nameβ the scheduler timeline name, and listen: it's kept withscheduntil the RCU free. so don't go freeing it early, bestie πentityβ the scheduler entity for thisxe_exec_queue. one queue, one entity, iconic πstatic_msgsβ static messages for thisxe_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 thisxe_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 bothwqi_headandwqi_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 thisexec_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 theexec_queueis pending. emphasis on pending, don't forget πsuspend_countβ reference count of active suspend requests. theexec_queueremains suspended while this is non-zero, allowing multiple concurrent callers to independently hold a suspend without prematurely re-enabling the queue. protected bysched.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
- 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