/** * struct pvr_queue_fence_ctx - Queue fence context * * Used to implement dma_fence_ops for pvr_job::{done,cccb}_fence.
*/ struct pvr_queue_fence_ctx { /** @id: Fence context ID allocated with dma_fence_context_alloc(). */
u64 id;
/** @seqno: Sequence number incremented each time a fence is created. */
atomic_t seqno;
/** @lock: Lock used to synchronize access to fences allocated by this context. */
spinlock_t lock;
};
/** * struct pvr_queue_cccb_fence_ctx - CCCB fence context * * Context used to manage fences controlling access to the CCCB. No fences are * issued if there's enough space in the CCCB to push job commands.
*/ struct pvr_queue_cccb_fence_ctx { /** @base: Base queue fence context. */ struct pvr_queue_fence_ctx base;
/** * @job: Job waiting for CCCB space. * * Thanks to the serializationg done at the drm_sched_entity level, * there's no more than one job waiting for CCCB at a given time. * * This field is NULL if no jobs are currently waiting for CCCB space. * * Must be accessed with @job_lock held.
*/ struct pvr_job *job;
/** @job_lock: Lock protecting access to the job object. */ struct mutex job_lock;
};
/** * struct pvr_queue - Job queue * * Used to queue and track execution of pvr_job objects.
*/ struct pvr_queue { /** @scheduler: Single entity scheduler use to push jobs to this queue. */ struct drm_gpu_scheduler scheduler;
/** @type: Type of jobs queued to this queue. */ enum drm_pvr_job_type type;
/** @ctx: Context object this queue is bound to. */ struct pvr_context *ctx;
/** @node: Used to add the queue to the active/idle queue list. */ struct list_head node;
/** * @in_flight_job_count: Number of jobs submitted to the CCCB that * have not been processed yet.
*/
atomic_t in_flight_job_count;
/** * @cccb_fence_ctx: CCCB fence context. * * Used to control access to the CCCB is full, such that we don't * end up trying to push commands to the CCCB if there's not enough * space to receive all commands needed for a job to complete.
*/ struct pvr_queue_cccb_fence_ctx cccb_fence_ctx;
/** @timeline_ufo: Timeline UFO for the context queue. */ struct { /** @fw_obj: FW object representing the UFO value. */ struct pvr_fw_object *fw_obj;
/** @value: CPU mapping of the UFO value. */
u32 *value;
} timeline_ufo;
/** * @last_queued_job_scheduled_fence: The scheduled fence of the last * job queued to this queue. * * We use it to insert frag -> geom dependencies when issuing combined * geom+frag jobs, to guarantee that the fragment job that's part of * the combined operation comes after all fragment jobs that were queued * before it.
*/ struct dma_fence *last_queued_job_scheduled_fence;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.