Skip to content

Commit

Permalink
drm/etnaviv: lock BOs after all other submit work is done
Browse files Browse the repository at this point in the history
Populating objects, adding them to the GPU VM and patching/validating
the command stream might take a lot of CPU time. There is no reason to
hold all object reservations during that time.

Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
  • Loading branch information
Lucas Stach committed Feb 12, 2018
1 parent 683da22 commit e058025
Showing 1 changed file with 8 additions and 8 deletions.
16 changes: 8 additions & 8 deletions drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
Original file line number Diff line number Diff line change
Expand Up @@ -514,10 +514,6 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, void *data,
if (ret)
goto err_submit_objects;

ret = submit_lock_objects(submit, &ticket);
if (ret)
goto err_submit_objects;

if (!etnaviv_cmd_validate_one(gpu, stream, args->stream_size / 4,
relocs, args->nr_relocs)) {
ret = -EINVAL;
Expand All @@ -532,10 +528,6 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, void *data,
}
}

ret = submit_fence_sync(submit);
if (ret)
goto err_submit_objects;

ret = submit_pin_objects(submit);
if (ret)
goto err_submit_objects;
Expand All @@ -552,6 +544,14 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, void *data,
memcpy(submit->cmdbuf.vaddr, stream, args->stream_size);
submit->cmdbuf.user_size = ALIGN(args->stream_size, 8);

ret = submit_lock_objects(submit, &ticket);
if (ret)
goto err_submit_objects;

ret = submit_fence_sync(submit);
if (ret)
goto err_submit_objects;

ret = etnaviv_sched_push_job(&ctx->sched_entity[args->pipe], submit);
if (ret)
goto err_submit_objects;
Expand Down

0 comments on commit e058025

Please sign in to comment.