97 lines · c
1/* SPDX-License-Identifier: MIT */2/*3 * Copyright © 2021 Intel Corporation4 */5 6#ifndef _XE_SCHED_JOB_H_7#define _XE_SCHED_JOB_H_8 9#include "xe_sched_job_types.h"10 11struct drm_printer;12struct xe_vm;13struct xe_sync_entry;14 15#define XE_SCHED_HANG_LIMIT 116#define XE_SCHED_JOB_TIMEOUT LONG_MAX17 18int xe_sched_job_module_init(void);19void xe_sched_job_module_exit(void);20 21struct xe_sched_job *xe_sched_job_create(struct xe_exec_queue *q,22 u64 *batch_addr);23void xe_sched_job_destroy(struct kref *ref);24 25/**26 * xe_sched_job_get - get reference to XE schedule job27 * @job: XE schedule job object28 *29 * Increment XE schedule job's reference count30 */31static inline struct xe_sched_job *xe_sched_job_get(struct xe_sched_job *job)32{33 kref_get(&job->refcount);34 return job;35}36 37/**38 * xe_sched_job_put - put reference to XE schedule job39 * @job: XE schedule job object40 *41 * Decrement XE schedule job's reference count, call xe_sched_job_destroy when42 * reference count == 0.43 */44static inline void xe_sched_job_put(struct xe_sched_job *job)45{46 kref_put(&job->refcount, xe_sched_job_destroy);47}48 49void xe_sched_job_set_error(struct xe_sched_job *job, int error);50static inline bool xe_sched_job_is_error(struct xe_sched_job *job)51{52 return job->fence->error < 0;53}54 55bool xe_sched_job_started(struct xe_sched_job *job);56bool xe_sched_job_completed(struct xe_sched_job *job);57 58void xe_sched_job_arm(struct xe_sched_job *job);59void xe_sched_job_push(struct xe_sched_job *job);60 61int xe_sched_job_last_fence_add_dep(struct xe_sched_job *job, struct xe_vm *vm);62void xe_sched_job_init_user_fence(struct xe_sched_job *job,63 struct xe_sync_entry *sync);64 65static inline struct xe_sched_job *66to_xe_sched_job(struct drm_sched_job *drm)67{68 return container_of(drm, struct xe_sched_job, drm);69}70 71static inline u32 xe_sched_job_seqno(struct xe_sched_job *job)72{73 return job->fence ? job->fence->seqno : 0;74}75 76static inline u32 xe_sched_job_lrc_seqno(struct xe_sched_job *job)77{78 return job->lrc_seqno;79}80 81static inline void82xe_sched_job_add_migrate_flush(struct xe_sched_job *job, u32 flags)83{84 job->migrate_flush_flags = flags;85}86 87bool xe_sched_job_is_migration(struct xe_exec_queue *q);88 89struct xe_sched_job_snapshot *xe_sched_job_snapshot_capture(struct xe_sched_job *job);90void xe_sched_job_snapshot_free(struct xe_sched_job_snapshot *snapshot);91void xe_sched_job_snapshot_print(struct xe_sched_job_snapshot *snapshot, struct drm_printer *p);92 93int xe_sched_job_add_deps(struct xe_sched_job *job, struct dma_resv *resv,94 enum dma_resv_usage usage);95 96#endif97