forked from Minki/linux
drm/etnaviv: lock BOs after all other submit work is done
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>
This commit is contained in:
parent
683da226f8
commit
e0580254ae
@ -514,10 +514,6 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, void *data,
|
|||||||
if (ret)
|
if (ret)
|
||||||
goto err_submit_objects;
|
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,
|
if (!etnaviv_cmd_validate_one(gpu, stream, args->stream_size / 4,
|
||||||
relocs, args->nr_relocs)) {
|
relocs, args->nr_relocs)) {
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
@ -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);
|
ret = submit_pin_objects(submit);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_submit_objects;
|
goto err_submit_objects;
|
||||||
@ -552,6 +544,14 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, void *data,
|
|||||||
memcpy(submit->cmdbuf.vaddr, stream, args->stream_size);
|
memcpy(submit->cmdbuf.vaddr, stream, args->stream_size);
|
||||||
submit->cmdbuf.user_size = ALIGN(args->stream_size, 8);
|
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);
|
ret = etnaviv_sched_push_job(&ctx->sched_entity[args->pipe], submit);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_submit_objects;
|
goto err_submit_objects;
|
||||||
|
Loading…
Reference in New Issue
Block a user