STRUCT DEVICE_QUEUE_MANAGER_OPS(9)
π NAME π
okay bestie, welcome to the struct device_queue_manager_ops(9) page β this is a Kernel API Manual situation, and it's basically the master ops table for the device queue manager (dqm, if you're on nickname terms). No description line in the original, so no cap, we're going straight in β¨
πΈ SYNOPSIS πΈ
like, here's the whole struct, character for character, don't @ me:
struct device_queue_manager_ops {
int (*create_queue)(struct device_queue_manager *dqm, struct queue
*q, struct qcm_process_device *qpd, const struct
kfd_criu_queue_priv_data *qd, const void *restore_mqd, const void
*restore_ctl_stack);
int (*destroy_queue)(struct device_queue_manager *dqm, struct
qcm_process_device *qpd, struct queue *q);
int (*update_queue)(struct device_queue_manager *dqm, struct queue
*q, struct mqd_update_info *minfo);
int (*register_process)(struct device_queue_manager *dqm, struct
qcm_process_device *qpd);
int (*unregister_process)(struct device_queue_manager *dqm, struct
qcm_process_device *qpd);
int (*initialize)(struct device_queue_manager *dqm);
int (*start)(struct device_queue_manager *dqm);
int (*stop)(struct device_queue_manager *dqm);
void (*uninitialize)(struct device_queue_manager *dqm);
int (*halt)(struct device_queue_manager *dqm);
int (*unhalt)(struct device_queue_manager *dqm);
int (*create_kernel_queue)(struct device_queue_manager *dqm, struct
kernel_queue *kq, struct qcm_process_device *qpd);
void (*destroy_kernel_queue)(struct device_queue_manager *dqm,
struct kernel_queue *kq, struct qcm_process_device *qpd);
bool (*set_cache_memory_policy)(struct device_queue_manager *dqm,
struct qcm_process_device *qpd, enum cache_policy default_policy, enum
cache_policy alternate_policy, void __user *alternate_aperture_base,
uint64_t alternate_aperture_size, u32 misc_process_properties);
int (*process_termination)(struct device_queue_manager *dqm, struct
qcm_process_device *qpd);
int (*evict_process_queues)(struct device_queue_manager *dqm, struct
qcm_process_device *qpd);
int (*restore_process_queues)(struct device_queue_manager *dqm,
struct qcm_process_device *qpd);
int (*get_wave_state)(struct device_queue_manager *dqm, struct queue
*q, void __user *ctl_stack, u32 *ctl_stack_used_size, u32
*save_area_used_size);
int (*reset_queues)(struct device_queue_manager *dqm, uint16_t
pasid);
int (*get_queue_checkpoint_info)(struct device_queue_manager *dqm,
const struct queue *q, u32 *mqd_size, u32 *ctl_stack_size);
int (*checkpoint_mqd)(struct device_queue_manager *dqm, const struct
queue *q, void *mqd, void *ctl_stack);
void (*set_perfcount)(struct device_queue_manager *dqm, int enable);
};
π Members π
every single one, bestie, we're not skipping a single function pointer π
create_queueβ the queue creation routine. making babies (queues) fr fr πΌdestroy_queueβ the queue destruction routine. rip bozo, queue edition πupdate_queueβ the queue update routine. glow-up time β¨register_processβ this routine associates a specific process with device. it's giving "you two are dating now" π«Άunregister_processβ destroys the associations between process to device. breaking up, no cap πinitializeβ initializes the pipelines and memory module for that device. setting up the whole aesthetic πstartβ initializes the resources/modules the device needs for queues execution. This function is called on device initialization and after the system woke up after suspension. so like, first day of school AND the first day back after a nap πstopβ this routine stops execution of all the active queue running on the H/W and basically this function called on system suspend. night night, queues π΄uninitializeβ destroys all the device queue manager resources allocated ininitializeroutine. everything the initialize routine built? gone. iconic cleanup energy π§Ήhaltβ this routine unmaps queues from runlist and set halt status to true so no more queues will be mapped to runlist until unhalt. it's giving "closed for renovations" π§unhaltβ this routine unset halt status to flase and maps queues back to runlist. we're SO back, the queues are back on the runlist π₯create_kernel_queueβ creates kernel queue. Used for debug queue. lowkey just for debugging πdestroy_kernel_queueβ destroys kernel queue. Used for debug queue. same vibe, reverse direction π«‘set_cache_memory_policyβ sets memory policy (cached/ non cached) for the memory apertures. choosing an outfit for your memory: cached or non cached πprocess_terminationβ clears all process queues belongs to that device. sweep it all away π§Ήevict_process_queuesβ Evict all active queues of a process. get out of the runlist, you're evicted πͺrestore_process_queuesβ Restore all evicted queues of a process. welcome home babes πget_wave_stateβ retrieves context save state and optionally copies the control stack, if kept in the MQD, to the given userspace address. it's giving "screenshot your whole setup" πΈreset_queuesβ reset queues which consume RAS poison. poison? cleansed. periodt π§ͺget_queue_checkpoint_infoβ retrieves queue size information for CRIU checkpoint. CRIU said "how big is it" πcheckpoint_mqdβ checkpoint queue MQD contents for CRIU. saving the whole MQD vibe for later πΎset_perfcountβ no prose in the original, so i'll just say: this is whereset_perfcountlives, and it takesint enableπ
bestie heads up: this page is literally just the struct + the members section. no options, no exit statuses, no environment variables, no bugs section, no examples. if you were waiting for a plot twist, there isn't one π
π SEE ALSO π
go read these next, i'm obsessed:
- Kernel file
./drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.h struct device_queue_manager(9)
and that's a wrap, bestie π¦ this was struct device_queue_manager_ops(9) from the Kernel API Manual, living in ./drivers/gpu/drm/amd/amdkfd, dated October 2026 β slay, go read the header file, mwah ππ
π¦ 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