drm/amdgpu: move some release handles into fail labels (v2)

Clean up the codes to move the release handles into fail labels.

v2: squash in Christian's regression fix

Signed-off-by: Huang Rui <ray.huang@amd.com>
Reviewed-by: Chunming Zhou <david1.zhou@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
Huang Rui 2016-09-12 10:16:21 +08:00 committed by Alex Deucher
parent f166d9f297
commit fd5065584d

View File

@ -247,35 +247,28 @@ int amdgpu_ucode_init_bo(struct amdgpu_device *adev)
const struct common_firmware_header *header = NULL; const struct common_firmware_header *header = NULL;
err = amdgpu_bo_create(adev, adev->firmware.fw_size, PAGE_SIZE, true, err = amdgpu_bo_create(adev, adev->firmware.fw_size, PAGE_SIZE, true,
AMDGPU_GEM_DOMAIN_GTT, 0, NULL, NULL, bo); AMDGPU_GEM_DOMAIN_GTT, 0, NULL, NULL, bo);
if (err) { if (err) {
dev_err(adev->dev, "(%d) Firmware buffer allocate failed\n", err); dev_err(adev->dev, "(%d) Firmware buffer allocate failed\n", err);
err = -ENOMEM;
goto failed; goto failed;
} }
err = amdgpu_bo_reserve(*bo, false); err = amdgpu_bo_reserve(*bo, false);
if (err) { if (err) {
amdgpu_bo_unref(bo);
dev_err(adev->dev, "(%d) Firmware buffer reserve failed\n", err); dev_err(adev->dev, "(%d) Firmware buffer reserve failed\n", err);
goto failed; goto failed_reserve;
} }
err = amdgpu_bo_pin(*bo, AMDGPU_GEM_DOMAIN_GTT, &fw_mc_addr); err = amdgpu_bo_pin(*bo, AMDGPU_GEM_DOMAIN_GTT, &fw_mc_addr);
if (err) { if (err) {
amdgpu_bo_unreserve(*bo);
amdgpu_bo_unref(bo);
dev_err(adev->dev, "(%d) Firmware buffer pin failed\n", err); dev_err(adev->dev, "(%d) Firmware buffer pin failed\n", err);
goto failed; goto failed_pin;
} }
err = amdgpu_bo_kmap(*bo, &fw_buf_ptr); err = amdgpu_bo_kmap(*bo, &fw_buf_ptr);
if (err) { if (err) {
dev_err(adev->dev, "(%d) Firmware buffer kmap failed\n", err); dev_err(adev->dev, "(%d) Firmware buffer kmap failed\n", err);
amdgpu_bo_unpin(*bo); goto failed_kmap;
amdgpu_bo_unreserve(*bo);
amdgpu_bo_unref(bo);
goto failed;
} }
amdgpu_bo_unreserve(*bo); amdgpu_bo_unreserve(*bo);
@ -290,10 +283,16 @@ int amdgpu_ucode_init_bo(struct amdgpu_device *adev)
fw_offset += ALIGN(le32_to_cpu(header->ucode_size_bytes), PAGE_SIZE); fw_offset += ALIGN(le32_to_cpu(header->ucode_size_bytes), PAGE_SIZE);
} }
} }
return 0;
failed_kmap:
amdgpu_bo_unpin(*bo);
failed_pin:
amdgpu_bo_unreserve(*bo);
failed_reserve:
amdgpu_bo_unref(bo);
failed: failed:
if (err) adev->firmware.smu_load = false;
adev->firmware.smu_load = false;
return err; return err;
} }