xref: /linux/drivers/gpu/drm/xe/xe_sched_job.h (revision eb01fe7abbe2d0b38824d2a93fdb4cc3eaf2ccc1)
1 /* SPDX-License-Identifier: MIT */
2 /*
3  * Copyright © 2021 Intel Corporation
4  */
5 
6 #ifndef _XE_SCHED_JOB_H_
7 #define _XE_SCHED_JOB_H_
8 
9 #include "xe_sched_job_types.h"
10 
11 struct drm_printer;
12 struct xe_vm;
13 
14 #define XE_SCHED_HANG_LIMIT 1
15 #define XE_SCHED_JOB_TIMEOUT LONG_MAX
16 
17 int xe_sched_job_module_init(void);
18 void xe_sched_job_module_exit(void);
19 
20 struct xe_sched_job *xe_sched_job_create(struct xe_exec_queue *q,
21 					 u64 *batch_addr);
22 void xe_sched_job_destroy(struct kref *ref);
23 
24 /**
25  * xe_sched_job_get - get reference to XE schedule job
26  * @job: XE schedule job object
27  *
28  * Increment XE schedule job's reference count
29  */
30 static inline struct xe_sched_job *xe_sched_job_get(struct xe_sched_job *job)
31 {
32 	kref_get(&job->refcount);
33 	return job;
34 }
35 
36 /**
37  * xe_sched_job_put - put reference to XE schedule job
38  * @job: XE schedule job object
39  *
40  * Decrement XE schedule job's reference count, call xe_sched_job_destroy when
41  * reference count == 0.
42  */
43 static inline void xe_sched_job_put(struct xe_sched_job *job)
44 {
45 	kref_put(&job->refcount, xe_sched_job_destroy);
46 }
47 
48 void xe_sched_job_set_error(struct xe_sched_job *job, int error);
49 static inline bool xe_sched_job_is_error(struct xe_sched_job *job)
50 {
51 	return job->fence->error < 0;
52 }
53 
54 bool xe_sched_job_started(struct xe_sched_job *job);
55 bool xe_sched_job_completed(struct xe_sched_job *job);
56 
57 void xe_sched_job_arm(struct xe_sched_job *job);
58 void xe_sched_job_push(struct xe_sched_job *job);
59 
60 int xe_sched_job_last_fence_add_dep(struct xe_sched_job *job, struct xe_vm *vm);
61 
62 static inline struct xe_sched_job *
63 to_xe_sched_job(struct drm_sched_job *drm)
64 {
65 	return container_of(drm, struct xe_sched_job, drm);
66 }
67 
68 static inline u32 xe_sched_job_seqno(struct xe_sched_job *job)
69 {
70 	return job->fence->seqno;
71 }
72 
73 static inline void
74 xe_sched_job_add_migrate_flush(struct xe_sched_job *job, u32 flags)
75 {
76 	job->migrate_flush_flags = flags;
77 }
78 
79 bool xe_sched_job_is_migration(struct xe_exec_queue *q);
80 
81 struct xe_sched_job_snapshot *xe_sched_job_snapshot_capture(struct xe_sched_job *job);
82 void xe_sched_job_snapshot_free(struct xe_sched_job_snapshot *snapshot);
83 void xe_sched_job_snapshot_print(struct xe_sched_job_snapshot *snapshot, struct drm_printer *p);
84 
85 #endif
86