File Index
Files and directories
Sign in
FILE

sched_internal.h

File preview with syntax highlighting.

linux-6.19.14/drivers/gpu/drm/scheduler/sched_internal.h C
 1/* SPDX-License-Identifier: MIT */
 2
 3#ifndef _DRM_GPU_SCHEDULER_INTERNAL_H_
 4#define _DRM_GPU_SCHEDULER_INTERNAL_H_
 5
 6
 7/* Used to choose between FIFO and RR job-scheduling */
 8extern int drm_sched_policy;
 9
10#define DRM_SCHED_POLICY_RR    0
11#define DRM_SCHED_POLICY_FIFO  1
12
13void drm_sched_wakeup(struct drm_gpu_scheduler *sched);
14
15void drm_sched_rq_add_entity(struct drm_sched_rq *rq,
16			     struct drm_sched_entity *entity);
17void drm_sched_rq_remove_entity(struct drm_sched_rq *rq,
18				struct drm_sched_entity *entity);
19
20void drm_sched_rq_update_fifo_locked(struct drm_sched_entity *entity,
21				     struct drm_sched_rq *rq, ktime_t ts);
22
23void drm_sched_entity_select_rq(struct drm_sched_entity *entity);
24struct drm_sched_job *drm_sched_entity_pop_job(struct drm_sched_entity *entity);
25
26struct drm_sched_fence *drm_sched_fence_alloc(struct drm_sched_entity *s_entity,
27					      void *owner, u64 drm_client_id);
28void drm_sched_fence_init(struct drm_sched_fence *fence,
29			  struct drm_sched_entity *entity);
30void drm_sched_fence_free(struct drm_sched_fence *fence);
31
32void drm_sched_fence_scheduled(struct drm_sched_fence *fence,
33			       struct dma_fence *parent);
34void drm_sched_fence_finished(struct drm_sched_fence *fence, int result);
35
36/**
37 * drm_sched_entity_queue_pop - Low level helper for popping queued jobs
38 *
39 * @entity: scheduler entity
40 *
41 * Low level helper for popping queued jobs.
42 *
43 * Returns: The job dequeued or NULL.
44 */
45static inline struct drm_sched_job *
46drm_sched_entity_queue_pop(struct drm_sched_entity *entity)
47{
48	struct spsc_node *node;
49
50	node = spsc_queue_pop(&entity->job_queue);
51	if (!node)
52		return NULL;
53
54	return container_of(node, struct drm_sched_job, queue_node);
55}
56
57/**
58 * drm_sched_entity_queue_peek - Low level helper for peeking at the job queue
59 *
60 * @entity: scheduler entity
61 *
62 * Low level helper for peeking at the job queue
63 *
64 * Returns: The job at the head of the queue or NULL.
65 */
66static inline struct drm_sched_job *
67drm_sched_entity_queue_peek(struct drm_sched_entity *entity)
68{
69	struct spsc_node *node;
70
71	node = spsc_queue_peek(&entity->job_queue);
72	if (!node)
73		return NULL;
74
75	return container_of(node, struct drm_sched_job, queue_node);
76}
77
78/* Return true if entity could provide a job. */
79static inline bool
80drm_sched_entity_is_ready(struct drm_sched_entity *entity)
81{
82	if (!spsc_queue_count(&entity->job_queue))
83		return false;
84
85	if (READ_ONCE(entity->dependency))
86		return false;
87
88	return true;
89}
90
91#endif
~/ Read-only file preview.