mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH 0/3] drm/amdgpu: Small reset improvements
@ 2025-02-19 21:35 André Almeida
  2025-02-19 21:35 ` [PATCH 1/3] drm/amdgpu: Log the creation of a coredump file André Almeida
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: André Almeida @ 2025-02-19 21:35 UTC (permalink / raw)
  To: Alex Deucher, 'Christian König',
	Xinhui Pan, amd-gfx, dri-devel, linux-kernel, kernel-dev,
	siqueira
  Cc: André Almeida

This series does some small improvements to GPU reset information collection.

André Almeida (3):
  drm/amdgpu: Log the creation of a coredump file
  drm/amdgpu: Log after a successful ring reset
  drm/amdgpu: Trigger a wedged event for every type of reset

 .../gpu/drm/amd/amdgpu/amdgpu_dev_coredump.c    |  4 ++++
 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c      |  3 ---
 drivers/gpu/drm/amd/amdgpu/amdgpu_job.c         | 17 ++++++++++-------
 3 files changed, 14 insertions(+), 10 deletions(-)

-- 
2.48.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 1/3] drm/amdgpu: Log the creation of a coredump file
  2025-02-19 21:35 [PATCH 0/3] drm/amdgpu: Small reset improvements André Almeida
@ 2025-02-19 21:35 ` André Almeida
  2025-02-24 11:18   ` Michel Dänzer
  2025-02-19 21:35 ` [PATCH 2/3] drm/amdgpu: Log after a successful ring reset André Almeida
  2025-02-19 21:35 ` [PATCH 3/3] drm/amdgpu: Trigger a wedged event for every type of reset André Almeida
  2 siblings, 1 reply; 6+ messages in thread
From: André Almeida @ 2025-02-19 21:35 UTC (permalink / raw)
  To: Alex Deucher, 'Christian König',
	Xinhui Pan, amd-gfx, dri-devel, linux-kernel, kernel-dev,
	siqueira
  Cc: André Almeida

After a GPU reset happens, the driver creates a coredump file. However,
the user might not be aware of it. Log the file creation the user can
find more information about the device and add the file to bug reports.
This is similar to what the xe driver does.

Signed-off-by: André Almeida <andrealmeid@igalia.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_dev_coredump.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dev_coredump.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_dev_coredump.c
index 824f9da5b6ce..7b50741dc097 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dev_coredump.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dev_coredump.c
@@ -364,5 +364,9 @@ void amdgpu_coredump(struct amdgpu_device *adev, bool skip_vram_check,
 
 	dev_coredumpm(dev->dev, THIS_MODULE, coredump, 0, GFP_NOWAIT,
 		      amdgpu_devcoredump_read, amdgpu_devcoredump_free);
+
+	drm_info(dev, "AMDGPU device coredump file has been created\n");
+	drm_info(dev, "Check your /sys/class/drm/card%d/device/devcoredump/data\n",
+		 dev->primary->index);
 }
 #endif
-- 
2.48.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 2/3] drm/amdgpu: Log after a successful ring reset
  2025-02-19 21:35 [PATCH 0/3] drm/amdgpu: Small reset improvements André Almeida
  2025-02-19 21:35 ` [PATCH 1/3] drm/amdgpu: Log the creation of a coredump file André Almeida
@ 2025-02-19 21:35 ` André Almeida
  2025-02-19 21:35 ` [PATCH 3/3] drm/amdgpu: Trigger a wedged event for every type of reset André Almeida
  2 siblings, 0 replies; 6+ messages in thread
From: André Almeida @ 2025-02-19 21:35 UTC (permalink / raw)
  To: Alex Deucher, 'Christian König',
	Xinhui Pan, amd-gfx, dri-devel, linux-kernel, kernel-dev,
	siqueira
  Cc: André Almeida

When a ring reset happens, the kernel log shows only "amdgpu: Starting
<ring name> ring reset", but when it finishes nothing appears in the
log. Explicitly write in the log that the reset has finished correctly.

Signed-off-by: André Almeida <andrealmeid@igalia.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
index 100f04475943..698e5799e542 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
@@ -149,6 +149,7 @@ static enum drm_gpu_sched_stat amdgpu_job_timedout(struct drm_sched_job *s_job)
 			amdgpu_fence_driver_force_completion(ring);
 			if (amdgpu_ring_sched_ready(ring))
 				drm_sched_start(&ring->sched, 0);
+			dev_err(adev->dev, "Ring %s reset succeeded\n", ring->sched.name);
 			goto exit;
 		}
 		dev_err(adev->dev, "Ring %s reset failure\n", ring->sched.name);
-- 
2.48.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 3/3] drm/amdgpu: Trigger a wedged event for every type of reset
  2025-02-19 21:35 [PATCH 0/3] drm/amdgpu: Small reset improvements André Almeida
  2025-02-19 21:35 ` [PATCH 1/3] drm/amdgpu: Log the creation of a coredump file André Almeida
  2025-02-19 21:35 ` [PATCH 2/3] drm/amdgpu: Log after a successful ring reset André Almeida
@ 2025-02-19 21:35 ` André Almeida
  2025-02-20  9:22   ` Christian König
  2 siblings, 1 reply; 6+ messages in thread
From: André Almeida @ 2025-02-19 21:35 UTC (permalink / raw)
  To: Alex Deucher, 'Christian König',
	Xinhui Pan, amd-gfx, dri-devel, linux-kernel, kernel-dev,
	siqueira
  Cc: André Almeida

Instead of only triggering a wedged event for complete GPU resets,
trigger for all types, like soft resets and ring resets. Regardless of
the reset, it's useful for userspace to know that it happened because
the kernel will reject further submissions from that app.

Signed-off-by: André Almeida <andrealmeid@igalia.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c |  3 ---
 drivers/gpu/drm/amd/amdgpu/amdgpu_job.c    | 16 +++++++++-------
 2 files changed, 9 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 24ba52d76045..36738c1a5b59 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -6123,9 +6123,6 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
 
 	atomic_set(&adev->reset_domain->reset_res, r);
 
-	if (!r)
-		drm_dev_wedged_event(adev_to_drm(adev), DRM_WEDGE_RECOVERY_NONE);
-
 	return r;
 }
 
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
index 698e5799e542..1082b957e7b1 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
@@ -91,8 +91,7 @@ static enum drm_gpu_sched_stat amdgpu_job_timedout(struct drm_sched_job *s_job)
 	struct amdgpu_job *job = to_amdgpu_job(s_job);
 	struct amdgpu_task_info *ti;
 	struct amdgpu_device *adev = ring->adev;
-	int idx;
-	int r;
+	int idx, ret = 0;
 
 	if (!drm_dev_enter(adev_to_drm(adev), &idx)) {
 		dev_info(adev->dev, "%s - device unplugged skipping recovery on scheduler:%s",
@@ -141,8 +140,8 @@ static enum drm_gpu_sched_stat amdgpu_job_timedout(struct drm_sched_job *s_job)
 		 * we'll fall back to full GPU reset.
 		 */
 		drm_sched_wqueue_stop(&ring->sched);
-		r = amdgpu_ring_reset(ring, job->vmid);
-		if (!r) {
+		ret = amdgpu_ring_reset(ring, job->vmid);
+		if (!ret) {
 			if (amdgpu_ring_sched_ready(ring))
 				drm_sched_stop(&ring->sched, s_job);
 			atomic_inc(&ring->adev->gpu_reset_counter);
@@ -170,9 +169,9 @@ static enum drm_gpu_sched_stat amdgpu_job_timedout(struct drm_sched_job *s_job)
 		 */
 		set_bit(AMDGPU_SKIP_COREDUMP, &reset_context.flags);
 
-		r = amdgpu_device_gpu_recover(ring->adev, job, &reset_context);
-		if (r)
-			dev_err(adev->dev, "GPU Recovery Failed: %d\n", r);
+		ret = amdgpu_device_gpu_recover(ring->adev, job, &reset_context);
+		if (ret)
+			dev_err(adev->dev, "GPU Recovery Failed: %d\n", ret);
 	} else {
 		drm_sched_suspend_timeout(&ring->sched);
 		if (amdgpu_sriov_vf(adev))
@@ -180,6 +179,9 @@ static enum drm_gpu_sched_stat amdgpu_job_timedout(struct drm_sched_job *s_job)
 	}
 
 exit:
+	if (!ret)
+		drm_dev_wedged_event(adev_to_drm(adev), DRM_WEDGE_RECOVERY_NONE);
+
 	drm_dev_exit(idx);
 	return DRM_GPU_SCHED_STAT_NOMINAL;
 }
-- 
2.48.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 3/3] drm/amdgpu: Trigger a wedged event for every type of reset
  2025-02-19 21:35 ` [PATCH 3/3] drm/amdgpu: Trigger a wedged event for every type of reset André Almeida
@ 2025-02-20  9:22   ` Christian König
  0 siblings, 0 replies; 6+ messages in thread
From: Christian König @ 2025-02-20  9:22 UTC (permalink / raw)
  To: André Almeida, Alex Deucher, Xinhui Pan, amd-gfx, dri-devel,
	linux-kernel, kernel-dev, siqueira

Am 19.02.25 um 22:35 schrieb André Almeida:
> Instead of only triggering a wedged event for complete GPU resets,
> trigger for all types, like soft resets and ring resets. Regardless of
> the reset, it's useful for userspace to know that it happened because
> the kernel will reject further submissions from that app.
>
> Signed-off-by: André Almeida <andrealmeid@igalia.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_device.c |  3 ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_job.c    | 16 +++++++++-------
>  2 files changed, 9 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> index 24ba52d76045..36738c1a5b59 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> @@ -6123,9 +6123,6 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
>  
>  	atomic_set(&adev->reset_domain->reset_res, r);
>  
> -	if (!r)
> -		drm_dev_wedged_event(adev_to_drm(adev), DRM_WEDGE_RECOVERY_NONE);
> -

Feel free to add my rb to patch #1 and #2, but this here is a bad idea.

We have resets which are not triggered by a submission timeout, but rather because of RAS (for example) and those would now not be raised any more.

Regards,
Christian.

>  	return r;
>  }
>  
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
> index 698e5799e542..1082b957e7b1 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
> @@ -91,8 +91,7 @@ static enum drm_gpu_sched_stat amdgpu_job_timedout(struct drm_sched_job *s_job)
>  	struct amdgpu_job *job = to_amdgpu_job(s_job);
>  	struct amdgpu_task_info *ti;
>  	struct amdgpu_device *adev = ring->adev;
> -	int idx;
> -	int r;
> +	int idx, ret = 0;
>  
>  	if (!drm_dev_enter(adev_to_drm(adev), &idx)) {
>  		dev_info(adev->dev, "%s - device unplugged skipping recovery on scheduler:%s",
> @@ -141,8 +140,8 @@ static enum drm_gpu_sched_stat amdgpu_job_timedout(struct drm_sched_job *s_job)
>  		 * we'll fall back to full GPU reset.
>  		 */
>  		drm_sched_wqueue_stop(&ring->sched);
> -		r = amdgpu_ring_reset(ring, job->vmid);
> -		if (!r) {
> +		ret = amdgpu_ring_reset(ring, job->vmid);
> +		if (!ret) {
>  			if (amdgpu_ring_sched_ready(ring))
>  				drm_sched_stop(&ring->sched, s_job);
>  			atomic_inc(&ring->adev->gpu_reset_counter);
> @@ -170,9 +169,9 @@ static enum drm_gpu_sched_stat amdgpu_job_timedout(struct drm_sched_job *s_job)
>  		 */
>  		set_bit(AMDGPU_SKIP_COREDUMP, &reset_context.flags);
>  
> -		r = amdgpu_device_gpu_recover(ring->adev, job, &reset_context);
> -		if (r)
> -			dev_err(adev->dev, "GPU Recovery Failed: %d\n", r);
> +		ret = amdgpu_device_gpu_recover(ring->adev, job, &reset_context);
> +		if (ret)
> +			dev_err(adev->dev, "GPU Recovery Failed: %d\n", ret);
>  	} else {
>  		drm_sched_suspend_timeout(&ring->sched);
>  		if (amdgpu_sriov_vf(adev))
> @@ -180,6 +179,9 @@ static enum drm_gpu_sched_stat amdgpu_job_timedout(struct drm_sched_job *s_job)
>  	}
>  
>  exit:
> +	if (!ret)
> +		drm_dev_wedged_event(adev_to_drm(adev), DRM_WEDGE_RECOVERY_NONE);
> +
>  	drm_dev_exit(idx);
>  	return DRM_GPU_SCHED_STAT_NOMINAL;
>  }


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/3] drm/amdgpu: Log the creation of a coredump file
  2025-02-19 21:35 ` [PATCH 1/3] drm/amdgpu: Log the creation of a coredump file André Almeida
@ 2025-02-24 11:18   ` Michel Dänzer
  0 siblings, 0 replies; 6+ messages in thread
From: Michel Dänzer @ 2025-02-24 11:18 UTC (permalink / raw)
  To: André Almeida, Alex Deucher, 'Christian König',
	Xinhui Pan, amd-gfx, dri-devel, linux-kernel, kernel-dev,
	siqueira

On 2025-02-19 22:35, André Almeida wrote:
> After a GPU reset happens, the driver creates a coredump file. However,
> the user might not be aware of it. Log the file creation the user can
> find more information about the device and add the file to bug reports.
> This is similar to what the xe driver does.
> 
> Signed-off-by: André Almeida <andrealmeid@igalia.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_dev_coredump.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dev_coredump.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_dev_coredump.c
> index 824f9da5b6ce..7b50741dc097 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dev_coredump.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dev_coredump.c
> @@ -364,5 +364,9 @@ void amdgpu_coredump(struct amdgpu_device *adev, bool skip_vram_check,
>  
>  	dev_coredumpm(dev->dev, THIS_MODULE, coredump, 0, GFP_NOWAIT,
>  		      amdgpu_devcoredump_read, amdgpu_devcoredump_free);
> +
> +	drm_info(dev, "AMDGPU device coredump file has been created\n");
> +	drm_info(dev, "Check your /sys/class/drm/card%d/device/devcoredump/data\n",
> +		 dev->primary->index);
>  }
>  #endif

Maybe this should be done in dev_coredumpm instead of in the driver?

Could make it a single line:

	drm_info(dev, "Device core dump created in /sys/class/drm/card%d/device/devcoredump/data\n",
		 dev->primary->index);

(AFAICT drm_info prints the driver name twice already, no need for a third time :)


-- 
Earthling Michel Dänzer       \        GNOME / Xwayland / Mesa developer
https://redhat.com             \               Libre software enthusiast

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2025-02-24 11:18 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-02-19 21:35 [PATCH 0/3] drm/amdgpu: Small reset improvements André Almeida
2025-02-19 21:35 ` [PATCH 1/3] drm/amdgpu: Log the creation of a coredump file André Almeida
2025-02-24 11:18   ` Michel Dänzer
2025-02-19 21:35 ` [PATCH 2/3] drm/amdgpu: Log after a successful ring reset André Almeida
2025-02-19 21:35 ` [PATCH 3/3] drm/amdgpu: Trigger a wedged event for every type of reset André Almeida
2025-02-20  9:22   ` Christian König

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®