@@ -732,18 +732,18 @@ int cik_sdma_ib_test(struct radeon_device *rdev, struct radeon_ring *ring)
r = radeon_ib_schedule(rdev, &ib, NULL, false);
if (r) {
- radeon_ib_free(rdev, &ib);
DRM_ERROR("radeon: failed to schedule ib (%d).\n", r);
- return r;
+ goto out;
}
r = radeon_fence_wait_timeout(ib.fence, false, usecs_to_jiffies(
RADEON_USEC_IB_TEST_TIMEOUT));
if (r < 0) {
DRM_ERROR("radeon: fence wait failed (%d).\n", r);
- return r;
+ goto out;
} else if (r == 0) {
DRM_ERROR("radeon: fence wait timed out.\n");
- return -ETIMEDOUT;
+ r = -ETIMEDOUT;
+ goto out;
}
r = 0;
for (i = 0; i < rdev->usec_timeout; i++) {
@@ -758,6 +758,7 @@ int cik_sdma_ib_test(struct radeon_device *rdev, struct radeon_ring *ring)
DRM_ERROR("radeon: ib test failed (0x%08X)\n", tmp);
r = -EINVAL;
}
+out:
radeon_ib_free(rdev, &ib);
return r;
}
@@ -363,18 +363,18 @@ int r600_dma_ib_test(struct radeon_device *rdev, struct radeon_ring *ring)
r = radeon_ib_schedule(rdev, &ib, NULL, false);
if (r) {
- radeon_ib_free(rdev, &ib);
DRM_ERROR("radeon: failed to schedule ib (%d).\n", r);
- return r;
+ goto out;
}
r = radeon_fence_wait_timeout(ib.fence, false, usecs_to_jiffies(
RADEON_USEC_IB_TEST_TIMEOUT));
if (r < 0) {
DRM_ERROR("radeon: fence wait failed (%d).\n", r);
- return r;
+ goto out;
} else if (r == 0) {
DRM_ERROR("radeon: fence wait timed out.\n");
- return -ETIMEDOUT;
+ r = -ETIMEDOUT;
+ goto out;
}
r = 0;
for (i = 0; i < rdev->usec_timeout; i++) {
@@ -389,6 +389,7 @@ int r600_dma_ib_test(struct radeon_device *rdev, struct radeon_ring *ring)
DRM_ERROR("radeon: ib test failed (0x%08X)\n", tmp);
r = -EINVAL;
}
+out:
radeon_ib_free(rdev, &ib);
return r;
}