From: pding <pixel.d...@amd.com>

This lock is used during register accessing in SRIOV guest
since KIQ uses general ring submission (amdgpu_ring_commit).
The register accessing could happen both in irq enabled and
irq disabled cases. Always use irq-safe lock.

Signed-off-by: pding <pixel.d...@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
index e5ece1f..d7997b5 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
@@ -401,11 +401,12 @@ int amdgpu_ring_lru_get(struct amdgpu_device *adev, int 
type,
                        bool lru_pipe_order, struct amdgpu_ring **ring)
 {
        struct amdgpu_ring *entry;
+       unsigned long flags;
 
        /* List is sorted in LRU order, find first entry corresponding
         * to the desired HW IP */
        *ring = NULL;
-       spin_lock(&adev->ring_lru_list_lock);
+       spin_lock_irqsave(&adev->ring_lru_list_lock, flags);
        list_for_each_entry(entry, &adev->ring_lru_list, lru_list) {
                if (entry->funcs->type != type)
                        continue;
@@ -430,7 +431,7 @@ int amdgpu_ring_lru_get(struct amdgpu_device *adev, int 
type,
        if (*ring)
                amdgpu_ring_lru_touch_locked(adev, *ring);
 
-       spin_unlock(&adev->ring_lru_list_lock);
+       spin_unlock_irqrestore(&adev->ring_lru_list_lock, flags);
 
        if (!*ring) {
                DRM_ERROR("Ring LRU contains no entries for ring type:%d\n", 
type);
@@ -450,9 +451,11 @@ int amdgpu_ring_lru_get(struct amdgpu_device *adev, int 
type,
  */
 void amdgpu_ring_lru_touch(struct amdgpu_device *adev, struct amdgpu_ring 
*ring)
 {
-       spin_lock(&adev->ring_lru_list_lock);
+       unsigned long flags;
+
+       spin_lock_irqsave(&adev->ring_lru_list_lock, flags);
        amdgpu_ring_lru_touch_locked(adev, ring);
-       spin_unlock(&adev->ring_lru_list_lock);
+       spin_unlock_irqrestore(&adev->ring_lru_list_lock, flags);
 }
 
 /*
-- 
2.9.5

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to