Commit e0580254 authored by Lucas Stach's avatar Lucas Stach
Browse files

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: default avatarLucas Stach <l.stach@pengutronix.de>
parent 683da226
Loading
Loading
Loading
Loading
+8 −8
Original line number Original line Diff line number Diff line
@@ -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;