/** * amdgpu_irq_reset_work_func - execute gpu reset * * @work: work struct * * Execute scheduled gpu reset (cayman+). * This function is called when the irq handler * thinks we need a gpu reset. */ static void amdgpu_irq_reset_work_func(struct work_struct *work) { struct amdgpu_device *adev = container_of(work, struct amdgpu_device, reset_work); amdgpu_gpu_reset(adev); }
static void amdgpu_job_timedout(struct amd_sched_job *s_job) { struct amdgpu_job *job = container_of(s_job, struct amdgpu_job, base); DRM_ERROR("ring %s timeout, last signaled seq=%u, last emitted seq=%u\n", job->base.sched->name, atomic_read(&job->ring->fence_drv.last_seq), job->ring->fence_drv.sync_seq); amdgpu_gpu_reset(job->adev); }
/** * amdgpu_debugfs_gpu_reset - manually trigger a gpu reset * * Manually trigger a gpu reset at the next fence wait. */ static int amdgpu_debugfs_gpu_reset(struct seq_file *m, void *data) { struct drm_info_node *node = (struct drm_info_node *) m->private; struct drm_device *dev = node->minor->dev; struct amdgpu_device *adev = dev->dev_private; seq_printf(m, "gpu reset\n"); amdgpu_gpu_reset(adev); return 0; }