mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-06-05 16:03:24 -04:00
drm/amdgpu: store ib info for devcoredump
Store the basic state of IBs so we can read it back in the amdgpu_devcoredump_format function. Signed-off-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
committed by
Alex Deucher
parent
1b135c6da0
commit
32ab301b89
@@ -401,6 +401,7 @@ void amdgpu_coredump(struct amdgpu_device *adev, bool skip_vram_check,
|
||||
{
|
||||
struct drm_device *dev = adev_to_drm(adev);
|
||||
struct amdgpu_coredump_info *coredump;
|
||||
size_t size = sizeof(*coredump);
|
||||
struct drm_sched_job *s_job;
|
||||
u64 total_ring_size, ring_count;
|
||||
struct amdgpu_ring *ring;
|
||||
@@ -410,12 +411,16 @@ void amdgpu_coredump(struct amdgpu_device *adev, bool skip_vram_check,
|
||||
if (work_pending(&adev->coredump_work))
|
||||
return;
|
||||
|
||||
coredump = kzalloc_obj(*coredump, GFP_NOWAIT);
|
||||
if (job && job->pasid)
|
||||
size += sizeof(struct amdgpu_coredump_ib_info) * job->num_ibs;
|
||||
|
||||
coredump = kzalloc(size, GFP_NOWAIT);
|
||||
if (!coredump)
|
||||
return;
|
||||
|
||||
coredump->skip_vram_check = skip_vram_check;
|
||||
coredump->reset_vram_lost = vram_lost;
|
||||
coredump->pasid = job->pasid;
|
||||
|
||||
if (job && job->pasid) {
|
||||
struct amdgpu_task_info *ti;
|
||||
@@ -425,6 +430,11 @@ void amdgpu_coredump(struct amdgpu_device *adev, bool skip_vram_check,
|
||||
coredump->reset_task_info = *ti;
|
||||
amdgpu_vm_put_task_info(ti);
|
||||
}
|
||||
coredump->num_ibs = job->num_ibs;
|
||||
for (i = 0; i < job->num_ibs; ++i) {
|
||||
coredump->ibs[i].gpu_addr = job->ibs[i].gpu_addr;
|
||||
coredump->ibs[i].ib_size_dw = job->ibs[i].length_dw;
|
||||
}
|
||||
}
|
||||
|
||||
if (job) {
|
||||
|
||||
@@ -38,6 +38,11 @@ struct amdgpu_coredump_ring {
|
||||
u32 offset;
|
||||
};
|
||||
|
||||
struct amdgpu_coredump_ib_info {
|
||||
uint64_t gpu_addr;
|
||||
u32 ib_size_dw;
|
||||
};
|
||||
|
||||
struct amdgpu_coredump_info {
|
||||
struct amdgpu_device *adev;
|
||||
struct amdgpu_task_info reset_task_info;
|
||||
@@ -56,6 +61,10 @@ struct amdgpu_coredump_info {
|
||||
*/
|
||||
ssize_t formatted_size;
|
||||
char *formatted;
|
||||
|
||||
unsigned int pasid;
|
||||
int num_ibs;
|
||||
struct amdgpu_coredump_ib_info ibs[] __counted_by(num_ibs);
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user