// SPDX-License-Identifier: MIT /* * Copyright © 2024 Intel Corporation */ #include <drm/drm_managed.h> #include "xe_assert.h" #include "xe_device.h" #include "xe_exec_queue.h" #include "xe_gt.h" #include "xe_hw_engine_group.h" #include "xe_vm.h" static void hw_engine_group_free(struct drm_device *drm, void *arg) { … } static void hw_engine_group_resume_lr_jobs_func(struct work_struct *w) { … } static struct xe_hw_engine_group * hw_engine_group_alloc(struct xe_device *xe) { … } /** * xe_hw_engine_setup_groups() - Setup the hw engine groups for the gt * @gt: The gt for which groups are setup * * Return: 0 on success, negative error code on error. */ int xe_hw_engine_setup_groups(struct xe_gt *gt) { … } /** * xe_hw_engine_group_add_exec_queue() - Add an exec queue to a hw engine group * @group: The hw engine group * @q: The exec_queue * * Return: 0 on success, * -EINTR if the lock could not be acquired */ int xe_hw_engine_group_add_exec_queue(struct xe_hw_engine_group *group, struct xe_exec_queue *q) { … } /** * xe_hw_engine_group_del_exec_queue() - Delete an exec queue from a hw engine group * @group: The hw engine group * @q: The exec_queue */ void xe_hw_engine_group_del_exec_queue(struct xe_hw_engine_group *group, struct xe_exec_queue *q) { … } /** * xe_hw_engine_group_resume_faulting_lr_jobs() - Asynchronously resume the hw engine group's * faulting LR jobs * @group: The hw engine group */ void xe_hw_engine_group_resume_faulting_lr_jobs(struct xe_hw_engine_group *group) { … } /** * xe_hw_engine_group_suspend_faulting_lr_jobs() - Suspend the faulting LR jobs of this group * @group: The hw engine group * * Return: 0 on success, negative error code on error. */ static int xe_hw_engine_group_suspend_faulting_lr_jobs(struct xe_hw_engine_group *group) { … } /** * xe_hw_engine_group_wait_for_dma_fence_jobs() - Wait for dma fence jobs to complete * @group: The hw engine group * * This function is not meant to be called directly from a user IOCTL as dma_fence_wait() * is not interruptible. * * Return: 0 on success, * -ETIME if waiting for one job failed */ static int xe_hw_engine_group_wait_for_dma_fence_jobs(struct xe_hw_engine_group *group) { … } static int switch_mode(struct xe_hw_engine_group *group) { … } /** * xe_hw_engine_group_get_mode() - Get the group to execute in the new mode * @group: The hw engine group * @new_mode: The new execution mode * @previous_mode: Pointer to the previous mode provided for use by caller * * Return: 0 if successful, -EINTR if locking failed. */ int xe_hw_engine_group_get_mode(struct xe_hw_engine_group *group, enum xe_hw_engine_group_execution_mode new_mode, enum xe_hw_engine_group_execution_mode *previous_mode) __acquires(&group->mode_sem) { … } /** * xe_hw_engine_group_put() - Put the group * @group: The hw engine group */ void xe_hw_engine_group_put(struct xe_hw_engine_group *group) __releases(&group->mode_sem) { … } /** * xe_hw_engine_group_find_exec_mode() - Find the execution mode for this exec queue * @q: The exec_queue */ enum xe_hw_engine_group_execution_mode xe_hw_engine_group_find_exec_mode(struct xe_exec_queue *q) { … }