There's no need to crash the kernel for these cases.

Signed-off-by: Alex Deucher <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/mes_v11_0.c | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/mes_v11_0.c 
b/drivers/gpu/drm/amd/amdgpu/mes_v11_0.c
index 9e27d01cbfa30..5c9f3a400c5f2 100644
--- a/drivers/gpu/drm/amd/amdgpu/mes_v11_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/mes_v11_0.c
@@ -82,7 +82,7 @@ static void mes_v11_0_ring_set_wptr(struct amdgpu_ring *ring)
                             ring->wptr);
                WDOORBELL64(ring->doorbell_index, ring->wptr);
        } else {
-               BUG();
+               dev_warn(adev->dev, "mes_v11_0_ring_set_wptr() requires 
doorbell!\n");
        }
 }
 
@@ -93,12 +93,15 @@ static u64 mes_v11_0_ring_get_rptr(struct amdgpu_ring *ring)
 
 static u64 mes_v11_0_ring_get_wptr(struct amdgpu_ring *ring)
 {
+       struct amdgpu_device *adev = ring->adev;
        u64 wptr;
 
-       if (ring->use_doorbell)
+       if (ring->use_doorbell) {
                wptr = atomic64_read((atomic64_t *)ring->wptr_cpu_addr);
-       else
-               BUG();
+       } else {
+               dev_warn(adev->dev, "mes_v11_0_ring_get_wptr() requires 
doorbell!\n");
+               wptr = 0;
+       }
        return wptr;
 }
 
@@ -290,7 +293,7 @@ static int convert_to_mes_queue_type(int queue_type)
        else if (queue_type == AMDGPU_RING_TYPE_SDMA)
                return MES_QUEUE_TYPE_SDMA;
        else
-               BUG();
+               WARN(1, "Invalid queue type %d\n", queue_type);
        return -1;
 }
 
@@ -1536,7 +1539,7 @@ static int mes_v11_0_queue_init(struct amdgpu_device 
*adev,
        else if (pipe == AMDGPU_MES_SCHED_PIPE)
                ring = &adev->mes.ring[0];
        else
-               BUG();
+               WARN(1, "Invalid MES pipe %d\n", pipe);
 
        if ((pipe == AMDGPU_MES_SCHED_PIPE) &&
            (amdgpu_in_reset(adev) || adev->in_suspend)) {
@@ -1619,7 +1622,7 @@ static int mes_v11_0_mqd_sw_init(struct amdgpu_device 
*adev,
        else if (pipe == AMDGPU_MES_SCHED_PIPE)
                ring = &adev->mes.ring[0];
        else
-               BUG();
+               return -EINVAL;
 
        if (ring->mqd_obj)
                return 0;
-- 
2.54.0

Reply via email to