Patrik Jakobsson 3dac01
From c8365dbda056578eebe164bf110816b1a39b4b7f Mon Sep 17 00:00:00 2001
Patrik Jakobsson 3dac01
From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
Patrik Jakobsson 3dac01
Date: Thu, 30 Sep 2021 11:22:51 +0200
Patrik Jakobsson 3dac01
Subject: drm/amdgpu: revert "Add autodump debugfs node for gpu reset v8"
Patrik Jakobsson 3dac01
MIME-Version: 1.0
Patrik Jakobsson 3dac01
Content-Type: text/plain; charset=UTF-8
Patrik Jakobsson 3dac01
Content-Transfer-Encoding: 8bit
Patrik Jakobsson 3dac01
Git-commit: c8365dbda056578eebe164bf110816b1a39b4b7f
Patrik Jakobsson 3dac01
Patch-mainline: v5.16-rc1
Patrik Jakobsson 3dac01
References: git-fixes
Patrik Jakobsson 3dac01
Patrik Jakobsson 3dac01
This reverts commit 728e7e0cd61899208e924472b9e641dbeb0775c4.
Patrik Jakobsson 3dac01
Patrik Jakobsson 3dac01
Further discussion reveals that this feature is severely broken
Patrik Jakobsson 3dac01
and needs to be reverted ASAP.
Patrik Jakobsson 3dac01
Patrik Jakobsson 3dac01
GPU reset can never be delayed by userspace even for debugging or
Patrik Jakobsson 3dac01
otherwise we can run into in kernel deadlocks.
Patrik Jakobsson 3dac01
Patrik Jakobsson 3dac01
Signed-off-by: Christian König <christian.koenig@amd.com>
Patrik Jakobsson 3dac01
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Patrik Jakobsson 3dac01
Acked-by: Nirmoy Das <nirmoy.das@amd.com>
Patrik Jakobsson 3dac01
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Patrik Jakobsson 3dac01
Signed-off-by: Patrik Jakobsson <pjakobsson@suse.de>
Patrik Jakobsson 3dac01
---
Patrik Jakobsson 3dac01
 drivers/gpu/drm/amd/amdgpu/amdgpu.h         |    2 
Patrik Jakobsson 3dac01
 drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c |   76 ----------------------------
Patrik Jakobsson 3dac01
 drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.h |    6 --
Patrik Jakobsson 3dac01
 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c  |    2 
Patrik Jakobsson 3dac01
 4 files changed, 86 deletions(-)
Patrik Jakobsson 3dac01
Patrik Jakobsson 3dac01
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
Patrik Jakobsson 3dac01
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
Patrik Jakobsson 3dac01
@@ -992,8 +992,6 @@ struct amdgpu_device {
Patrik Jakobsson 3dac01
 	char				product_name[32];
Patrik Jakobsson 3dac01
 	char				serial[20];
Patrik Jakobsson 3dac01
 
Patrik Jakobsson 3dac01
-	struct amdgpu_autodump		autodump;
Patrik Jakobsson 3dac01
-
Patrik Jakobsson 3dac01
 	atomic_t			throttling_logging_enabled;
Patrik Jakobsson 3dac01
 	struct ratelimit_state		throttling_logging_rs;
Patrik Jakobsson 3dac01
 };
Patrik Jakobsson 3dac01
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
Patrik Jakobsson 3dac01
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
Patrik Jakobsson 3dac01
@@ -74,82 +74,8 @@ int amdgpu_debugfs_add_files(struct amdg
Patrik Jakobsson 3dac01
 	return 0;
Patrik Jakobsson 3dac01
 }
Patrik Jakobsson 3dac01
 
Patrik Jakobsson 3dac01
-int amdgpu_debugfs_wait_dump(struct amdgpu_device *adev)
Patrik Jakobsson 3dac01
-{
Patrik Jakobsson 3dac01
-#if defined(CONFIG_DEBUG_FS)
Patrik Jakobsson 3dac01
-	unsigned long timeout = 600 * HZ;
Patrik Jakobsson 3dac01
-	int ret;
Patrik Jakobsson 3dac01
-
Patrik Jakobsson 3dac01
-	wake_up_interruptible(&adev->autodump.gpu_hang);
Patrik Jakobsson 3dac01
-
Patrik Jakobsson 3dac01
-	ret = wait_for_completion_interruptible_timeout(&adev->autodump.dumping, timeout);
Patrik Jakobsson 3dac01
-	if (ret == 0) {
Patrik Jakobsson 3dac01
-		pr_err("autodump: timeout, move on to gpu recovery\n");
Patrik Jakobsson 3dac01
-		return -ETIMEDOUT;
Patrik Jakobsson 3dac01
-	}
Patrik Jakobsson 3dac01
-#endif
Patrik Jakobsson 3dac01
-	return 0;
Patrik Jakobsson 3dac01
-}
Patrik Jakobsson 3dac01
-
Patrik Jakobsson 3dac01
 #if defined(CONFIG_DEBUG_FS)
Patrik Jakobsson 3dac01
 
Patrik Jakobsson 3dac01
-static int amdgpu_debugfs_autodump_open(struct inode *inode, struct file *file)
Patrik Jakobsson 3dac01
-{
Patrik Jakobsson 3dac01
-	struct amdgpu_device *adev = inode->i_private;
Patrik Jakobsson 3dac01
-	int ret;
Patrik Jakobsson 3dac01
-
Patrik Jakobsson 3dac01
-	file->private_data = adev;
Patrik Jakobsson 3dac01
-
Patrik Jakobsson 3dac01
-	mutex_lock(&adev->lock_reset);
Patrik Jakobsson 3dac01
-	if (adev->autodump.dumping.done) {
Patrik Jakobsson 3dac01
-		reinit_completion(&adev->autodump.dumping);
Patrik Jakobsson 3dac01
-		ret = 0;
Patrik Jakobsson 3dac01
-	} else {
Patrik Jakobsson 3dac01
-		ret = -EBUSY;
Patrik Jakobsson 3dac01
-	}
Patrik Jakobsson 3dac01
-	mutex_unlock(&adev->lock_reset);
Patrik Jakobsson 3dac01
-
Patrik Jakobsson 3dac01
-	return ret;
Patrik Jakobsson 3dac01
-}
Patrik Jakobsson 3dac01
-
Patrik Jakobsson 3dac01
-static int amdgpu_debugfs_autodump_release(struct inode *inode, struct file *file)
Patrik Jakobsson 3dac01
-{
Patrik Jakobsson 3dac01
-	struct amdgpu_device *adev = file->private_data;
Patrik Jakobsson 3dac01
-
Patrik Jakobsson 3dac01
-	complete_all(&adev->autodump.dumping);
Patrik Jakobsson 3dac01
-	return 0;
Patrik Jakobsson 3dac01
-}
Patrik Jakobsson 3dac01
-
Patrik Jakobsson 3dac01
-static unsigned int amdgpu_debugfs_autodump_poll(struct file *file, struct poll_table_struct *poll_table)
Patrik Jakobsson 3dac01
-{
Patrik Jakobsson 3dac01
-	struct amdgpu_device *adev = file->private_data;
Patrik Jakobsson 3dac01
-
Patrik Jakobsson 3dac01
-	poll_wait(file, &adev->autodump.gpu_hang, poll_table);
Patrik Jakobsson 3dac01
-
Patrik Jakobsson 3dac01
-	if (adev->in_gpu_reset)
Patrik Jakobsson 3dac01
-		return POLLIN | POLLRDNORM | POLLWRNORM;
Patrik Jakobsson 3dac01
-
Patrik Jakobsson 3dac01
-	return 0;
Patrik Jakobsson 3dac01
-}
Patrik Jakobsson 3dac01
-
Patrik Jakobsson 3dac01
-static const struct file_operations autodump_debug_fops = {
Patrik Jakobsson 3dac01
-	.owner = THIS_MODULE,
Patrik Jakobsson 3dac01
-	.open = amdgpu_debugfs_autodump_open,
Patrik Jakobsson 3dac01
-	.poll = amdgpu_debugfs_autodump_poll,
Patrik Jakobsson 3dac01
-	.release = amdgpu_debugfs_autodump_release,
Patrik Jakobsson 3dac01
-};
Patrik Jakobsson 3dac01
-
Patrik Jakobsson 3dac01
-static void amdgpu_debugfs_autodump_init(struct amdgpu_device *adev)
Patrik Jakobsson 3dac01
-{
Patrik Jakobsson 3dac01
-	init_completion(&adev->autodump.dumping);
Patrik Jakobsson 3dac01
-	complete_all(&adev->autodump.dumping);
Patrik Jakobsson 3dac01
-	init_waitqueue_head(&adev->autodump.gpu_hang);
Patrik Jakobsson 3dac01
-
Patrik Jakobsson 3dac01
-	debugfs_create_file("amdgpu_autodump", 0600,
Patrik Jakobsson 3dac01
-		adev->ddev->primary->debugfs_root,
Patrik Jakobsson 3dac01
-		adev, &autodump_debug_fops);
Patrik Jakobsson 3dac01
-}
Patrik Jakobsson 3dac01
-
Patrik Jakobsson 3dac01
 /**
Patrik Jakobsson 3dac01
  * amdgpu_debugfs_process_reg_op - Handle MMIO register reads/writes
Patrik Jakobsson 3dac01
  *
Patrik Jakobsson 3dac01
@@ -1621,8 +1547,6 @@ int amdgpu_debugfs_init(struct amdgpu_de
Patrik Jakobsson 3dac01
 
Patrik Jakobsson 3dac01
 	amdgpu_ras_debugfs_create_all(adev);
Patrik Jakobsson 3dac01
 
Patrik Jakobsson 3dac01
-	amdgpu_debugfs_autodump_init(adev);
Patrik Jakobsson 3dac01
-
Patrik Jakobsson 3dac01
 	return amdgpu_debugfs_add_files(adev, amdgpu_debugfs_list,
Patrik Jakobsson 3dac01
 					ARRAY_SIZE(amdgpu_debugfs_list));
Patrik Jakobsson 3dac01
 }
Patrik Jakobsson 3dac01
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.h
Patrik Jakobsson 3dac01
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.h
Patrik Jakobsson 3dac01
@@ -31,11 +31,6 @@ struct amdgpu_debugfs {
Patrik Jakobsson 3dac01
 	unsigned		num_files;
Patrik Jakobsson 3dac01
 };
Patrik Jakobsson 3dac01
 
Patrik Jakobsson 3dac01
-struct amdgpu_autodump {
Patrik Jakobsson 3dac01
-	struct completion		dumping;
Patrik Jakobsson 3dac01
-	struct wait_queue_head		gpu_hang;
Patrik Jakobsson 3dac01
-};
Patrik Jakobsson 3dac01
-
Patrik Jakobsson 3dac01
 int amdgpu_debugfs_regs_init(struct amdgpu_device *adev);
Patrik Jakobsson 3dac01
 int amdgpu_debugfs_init(struct amdgpu_device *adev);
Patrik Jakobsson 3dac01
 void amdgpu_debugfs_fini(struct amdgpu_device *adev);
Patrik Jakobsson 3dac01
@@ -45,4 +40,3 @@ int amdgpu_debugfs_add_files(struct amdg
Patrik Jakobsson 3dac01
 int amdgpu_debugfs_fence_init(struct amdgpu_device *adev);
Patrik Jakobsson 3dac01
 int amdgpu_debugfs_firmware_init(struct amdgpu_device *adev);
Patrik Jakobsson 3dac01
 int amdgpu_debugfs_gem_init(struct amdgpu_device *adev);
Patrik Jakobsson 3dac01
-int amdgpu_debugfs_wait_dump(struct amdgpu_device *adev);
Patrik Jakobsson 3dac01
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
Patrik Jakobsson 3dac01
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
Patrik Jakobsson 3dac01
@@ -3963,8 +3963,6 @@ static int amdgpu_device_pre_asic_reset(
Patrik Jakobsson 3dac01
 	int i, r = 0;
Patrik Jakobsson 3dac01
 	bool need_full_reset  = *need_full_reset_arg;
Patrik Jakobsson 3dac01
 
Patrik Jakobsson 3dac01
-	amdgpu_debugfs_wait_dump(adev);
Patrik Jakobsson 3dac01
-
Patrik Jakobsson 3dac01
 	/* block all schedulers and reset given job's ring */
Patrik Jakobsson 3dac01
 	for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
Patrik Jakobsson 3dac01
 		struct amdgpu_ring *ring = adev->rings[i];