drm/radeon: check return value of radeon_ring_lock()
authorNikita Zhandarovich <n.zhandarovich@fintech.ru>
Tue, 8 Aug 2023 18:04:16 +0000 (11:04 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 25 Jan 2024 23:35:32 +0000 (15:35 -0800)
[ Upstream commit 71225e1c930942cb1e042fc08c5cc0c4ef30e95e ]

In the unlikely event of radeon_ring_lock() failing, its errno return
value should be processed. This patch checks said return value and
prints a debug message in case of an error.

Found by Linux Verification Center (linuxtesting.org) with static
analysis tool SVACE.

Fixes: 48c0c902e2e6 ("drm/radeon/kms: add support for CP setup on SI")
Signed-off-by: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/radeon/si.c

index a910124..85e9cba 100644 (file)
@@ -3611,6 +3611,10 @@ static int si_cp_start(struct radeon_device *rdev)
        for (i = RADEON_RING_TYPE_GFX_INDEX; i <= CAYMAN_RING_TYPE_CP2_INDEX; ++i) {
                ring = &rdev->ring[i];
                r = radeon_ring_lock(rdev, ring, 2);
+               if (r) {
+                       DRM_ERROR("radeon: cp failed to lock ring (%d).\n", r);
+                       return r;
+               }
 
                /* clear the compute context state */
                radeon_ring_write(ring, PACKET3_COMPUTE(PACKET3_CLEAR_STATE, 0));