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