forked from Minki/linux
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:
parent
f166d9f297
commit
fd5065584d
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user