STRUCT PANTHOR_QUEUE(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– NAME πŸ’–

struct panthor_queue β€” Execution queue. Yes bestie, this page is the struct panthor_queue(9) entry from the Kernel API Manual, and we are about to go through every member like it’s a group-chat receipt πŸ’…βœ¨


✨ SYNOPSIS ✨

       struct panthor_queue {
           struct drm_gpu_scheduler scheduler;
           struct drm_sched_entity entity;
           char *name;
           struct {
             struct delayed_work work;
             unsigned long remaining;
           } timeout;
           u8 doorbell_id;
           u8 priority;
         #define CSF_MAX_QUEUE_PRIO      GENMASK(3, 0);
           struct panthor_kernel_bo *ringbuf;
           struct {
             struct panthor_kernel_bo *mem;
             struct panthor_fw_ringbuf_input_iface *input;
             const struct panthor_fw_ringbuf_output_iface *output;
             u32 input_fw_va;
             u32 output_fw_va;
           } iface;
           struct {
             u64 gpu_va;
             u64 ref;
             bool gt;
             bool sync64;
             struct drm_gem_object *obj;
             u64 offset;
             void *kmap;
           } syncwait;
           struct {
             spinlock_t lock;
             u64 id;
             atomic64_t seqno;
             struct dma_fence *last_fence;
             struct list_head in_flight_jobs;
           } fence_ctx;
           struct {
             struct panthor_kernel_bo *slots;
             u32 slot_count;
             u32 seqno;
           } profiling;
        };

πŸŽ€ Members πŸŽ€

  • scheduler β€” the DRM scheduler used for this queue. Main character of the scheduling situation.
  • entity β€” the DRM scheduling entity used for this queue.
  • name β€” the DRM scheduler name for this queue. It’s giving name tag energy.
  • timeout β€” queue timeout related fields, bestie.
    • timeout.work β€” the work executed when a queue timeout occurs.
    • timeout.remaining β€” time remaining before a queue timeout.
When the timer is running, timeout.remaining is set to MAX_SCHEDULE_TIMEOUT. When the timer is suspended, it’s set to the time remaining when the timer was suspended.
  • doorbell_id β€” the doorbell assigned to this queue.
Right now, all groups share the same doorbell, and the doorbell ID is assigned to group_slot + 1 when the group is assigned a slot. But we might decide to provide fine grained doorbell assignment at some point, so we don’t have to wake up all queues in a group every time one of them is updated.
  • priority β€” the priority of the queue inside the group.
Must be less than 16 β€” only 4 bits available, periodt.
  • ringbuf β€” the command stream ring-buffer.
  • iface β€” firmware interface. The whole FW communication situation.
    • iface.mem β€” FW memory allocated for this interface.
    • iface.input β€” input interface.
    • iface.output β€” output interface.
    • iface.input_fw_va β€” FW virtual address of the input interface buffer.
    • iface.output_fw_va β€” FW virtual address of the output interface buffer.
  • syncwait β€” stores information about the synchronization object this queue is waiting on.
    • syncwait.gpu_va β€” GPU address of the synchronization object.
    • syncwait.ref β€” reference value to compare against.
    • syncwait.gt β€” true if this is a greater-than test.
    • syncwait.sync64 β€” true if this is a 64-bit sync object.
    • syncwait.obj β€” buffer object holding the synchronization object.
    • syncwait.offset β€” offset of the synchronization object inside bo.
    • syncwait.kmap β€” kernel mapping of the buffer object holding the synchronization object.
  • fence_ctx β€” fence context fields, aka the fence lore.
    • fence_ctx.lock β€” used to protect access to all fences allocated by this context.
    • fence_ctx.id β€” fence context ID. Allocated with dma_fence_context_alloc.
    • fence_ctx.seqno β€” sequence number of the last initialized fence.
    • fence_ctx.last_fence β€” fence of the last submitted job.
We return this fence when we get an empty command stream. This way, we are guaranteed that all earlier jobs have completed when drm_sched_job::s_fence::finished without having to feed the CS ring buffer with a dummy job that only signals the fence.
  • fence_ctx.in_flight_jobs β€” list containing all in-flight jobs.
Used to keep track and signal panthor_job::done_fence when the synchronization object attached to the queue is signaled.
  • profiling β€” job profiling data slots and access information.
    • profiling.slots β€” kernel BO holding the slots.
    • profiling.slot_count β€” number of jobs ringbuffer can hold at once.
    • profiling.seqno β€” index of the next available profiling information slot.

🌈 SEE ALSO 🌈


Okay that’s the whole struct panthor_queue(9) page, bestie. Source/version: ./drivers/gpu/drm/panthor Β· date: October 2026 β€” mwah, slay, and close the tab gently πŸ’‹πŸŽ€βœ¨

πŸ“¦ where this page comes from