diff options
author | 2020-07-09 10:25:28 +0000 | |
---|---|---|
committer | 2020-07-09 10:25:28 +0000 | |
commit | af8ed3f789c9508a63e74a2edb2fda13e3ccb03a (patch) | |
tree | b1ec20c309bc9862108994aedf668e3b579c4d06 /sys/dev/pci/drm/amd/amdgpu/amdgpu_ras.c | |
parent | drm/i915/gt: Mark timeline->cacheline as destroyed after rcu grace period (diff) | |
download | wireguard-openbsd-af8ed3f789c9508a63e74a2edb2fda13e3ccb03a.tar.xz wireguard-openbsd-af8ed3f789c9508a63e74a2edb2fda13e3ccb03a.zip |
drm/amdgpu: disable ras query and iject during gpu reset
From John Clements
50a8cfb0e71644f2882dbfaf93150184094245bd in linux 5.7.y/5.7.8
61380faa4b4cc577df8a7ff5db5859bac6b351f7 in mainline linux
Diffstat (limited to 'sys/dev/pci/drm/amd/amdgpu/amdgpu_ras.c')
-rw-r--r-- | sys/dev/pci/drm/amd/amdgpu/amdgpu_ras.c | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/sys/dev/pci/drm/amd/amdgpu/amdgpu_ras.c b/sys/dev/pci/drm/amd/amdgpu/amdgpu_ras.c index a0e4b39add3..864fab7b049 100644 --- a/sys/dev/pci/drm/amd/amdgpu/amdgpu_ras.c +++ b/sys/dev/pci/drm/amd/amdgpu/amdgpu_ras.c @@ -80,6 +80,20 @@ atomic_t amdgpu_ras_in_intr = ATOMIC_INIT(0); static bool amdgpu_ras_check_bad_page(struct amdgpu_device *adev, uint64_t addr); +void amdgpu_ras_set_error_query_ready(struct amdgpu_device *adev, bool ready) +{ + if (adev) + amdgpu_ras_get_context(adev)->error_query_ready = ready; +} + +bool amdgpu_ras_get_error_query_ready(struct amdgpu_device *adev) +{ + if (adev) + return amdgpu_ras_get_context(adev)->error_query_ready; + + return false; +} + #ifdef __linux__ static ssize_t amdgpu_ras_debugfs_read(struct file *f, char __user *buf, @@ -283,7 +297,7 @@ static ssize_t amdgpu_ras_debugfs_ctrl_write(struct file *f, const char __user * struct ras_debug_if data; int ret = 0; - if (amdgpu_ras_intr_triggered()) { + if (!amdgpu_ras_get_error_query_ready(adev)) { DRM_WARN("RAS WARN: error injection currently inaccessible\n"); return size; } @@ -401,7 +415,7 @@ static ssize_t amdgpu_ras_sysfs_read(struct device *dev, .head = obj->head, }; - if (amdgpu_ras_intr_triggered()) + if (!amdgpu_ras_get_error_query_ready(obj->adev)) return snprintf(buf, PAGE_SIZE, "Query currently inaccessible\n"); @@ -1915,8 +1929,10 @@ int amdgpu_ras_late_init(struct amdgpu_device *adev, } /* in resume phase, no need to create ras fs node */ - if (adev->in_suspend || adev->in_gpu_reset) + if (adev->in_suspend || adev->in_gpu_reset) { + amdgpu_ras_set_error_query_ready(adev, true); return 0; + } if (ih_info->cb) { r = amdgpu_ras_interrupt_add_handler(adev, ih_info); @@ -1928,6 +1944,8 @@ int amdgpu_ras_late_init(struct amdgpu_device *adev, if (r) goto sysfs; + amdgpu_ras_set_error_query_ready(adev, true); + return 0; cleanup: amdgpu_ras_sysfs_remove(adev, ras_block); |