drm/amdgpu: Add work_struct for GPU reset from debugfs
We need to have a work_struct to cancel this reset if another already in progress. Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
25a2b22e41
commit
2f83658ffc
drivers/gpu/drm/amd/amdgpu
@ -1058,6 +1058,8 @@ struct amdgpu_device {
|
||||
|
||||
bool scpm_enabled;
|
||||
uint32_t scpm_status;
|
||||
|
||||
struct work_struct reset_work;
|
||||
};
|
||||
|
||||
static inline struct amdgpu_device *drm_to_adev(struct drm_device *ddev)
|
||||
|
@ -39,6 +39,7 @@
|
||||
#include <drm/drm_drv.h>
|
||||
#include "amdgpu.h"
|
||||
#include "amdgpu_trace.h"
|
||||
#include "amdgpu_reset.h"
|
||||
|
||||
/*
|
||||
* Fences
|
||||
@ -798,7 +799,10 @@ static int gpu_recover_get(void *data, u64 *val)
|
||||
return 0;
|
||||
}
|
||||
|
||||
*val = amdgpu_device_gpu_recover(adev, NULL);
|
||||
if (amdgpu_reset_domain_schedule(adev->reset_domain, &adev->reset_work))
|
||||
flush_work(&adev->reset_work);
|
||||
|
||||
*val = atomic_read(&adev->reset_domain->reset_res);
|
||||
|
||||
pm_runtime_mark_last_busy(dev->dev);
|
||||
pm_runtime_put_autosuspend(dev->dev);
|
||||
@ -810,6 +814,14 @@ DEFINE_SHOW_ATTRIBUTE(amdgpu_debugfs_fence_info);
|
||||
DEFINE_DEBUGFS_ATTRIBUTE(amdgpu_debugfs_gpu_recover_fops, gpu_recover_get, NULL,
|
||||
"%lld\n");
|
||||
|
||||
static void amdgpu_debugfs_reset_work(struct work_struct *work)
|
||||
{
|
||||
struct amdgpu_device *adev = container_of(work, struct amdgpu_device,
|
||||
reset_work);
|
||||
|
||||
amdgpu_device_gpu_recover_imp(adev, NULL);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
void amdgpu_debugfs_fence_init(struct amdgpu_device *adev)
|
||||
@ -821,9 +833,12 @@ void amdgpu_debugfs_fence_init(struct amdgpu_device *adev)
|
||||
debugfs_create_file("amdgpu_fence_info", 0444, root, adev,
|
||||
&amdgpu_debugfs_fence_info_fops);
|
||||
|
||||
if (!amdgpu_sriov_vf(adev))
|
||||
if (!amdgpu_sriov_vf(adev)) {
|
||||
|
||||
INIT_WORK(&adev->reset_work, amdgpu_debugfs_reset_work);
|
||||
debugfs_create_file("amdgpu_gpu_recover", 0444, root, adev,
|
||||
&amdgpu_debugfs_gpu_recover_fops);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user