|
@@ -290,7 +290,7 @@ static int submit_reloc(struct msm_gem_submit *submit, struct msm_gem_object *ob
|
|
|
{
|
|
|
uint32_t i, last_offset = 0;
|
|
|
uint32_t *ptr;
|
|
|
- int ret;
|
|
|
+ int ret = 0;
|
|
|
|
|
|
if (offset % 4) {
|
|
|
DRM_ERROR("non-aligned cmdstream buffer: %u\n", offset);
|
|
@@ -318,12 +318,13 @@ static int submit_reloc(struct msm_gem_submit *submit, struct msm_gem_object *ob
|
|
|
|
|
|
ret = copy_from_user(&submit_reloc, userptr, sizeof(submit_reloc));
|
|
|
if (ret)
|
|
|
- return -EFAULT;
|
|
|
+ goto out;
|
|
|
|
|
|
if (submit_reloc.submit_offset % 4) {
|
|
|
DRM_ERROR("non-aligned reloc offset: %u\n",
|
|
|
submit_reloc.submit_offset);
|
|
|
- return -EINVAL;
|
|
|
+ ret = -EINVAL;
|
|
|
+ goto out;
|
|
|
}
|
|
|
|
|
|
/* offset in dwords: */
|
|
@@ -332,12 +333,13 @@ static int submit_reloc(struct msm_gem_submit *submit, struct msm_gem_object *ob
|
|
|
if ((off >= (obj->base.size / 4)) ||
|
|
|
(off < last_offset)) {
|
|
|
DRM_ERROR("invalid offset %u at reloc %u\n", off, i);
|
|
|
- return -EINVAL;
|
|
|
+ ret = -EINVAL;
|
|
|
+ goto out;
|
|
|
}
|
|
|
|
|
|
ret = submit_bo(submit, submit_reloc.reloc_idx, NULL, &iova, &valid);
|
|
|
if (ret)
|
|
|
- return ret;
|
|
|
+ goto out;
|
|
|
|
|
|
if (valid)
|
|
|
continue;
|
|
@@ -354,9 +356,10 @@ static int submit_reloc(struct msm_gem_submit *submit, struct msm_gem_object *ob
|
|
|
last_offset = off;
|
|
|
}
|
|
|
|
|
|
+out:
|
|
|
msm_gem_put_vaddr_locked(&obj->base);
|
|
|
|
|
|
- return 0;
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
static void submit_cleanup(struct msm_gem_submit *submit)
|