Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a2861504 authored by Chris Wilson's avatar Chris Wilson Committed by Zhenyu Wang
Browse files

drm/i915/gvt: Use common mapping routines for shadow_bb object



We have the ability to map an object, so use it rather than opencode it
badly. Note that the object remains permanently pinned, this is poor
practise.

Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarZhenyu Wang <zhenyuw@linux.intel.com>
parent bcd0aede
Loading
Loading
Loading
Loading
+6 −15
Original line number Diff line number Diff line
@@ -1650,18 +1650,10 @@ static int perform_bb_shadow(struct parser_exec_state *s)
	entry_obj->len = bb_size;
	INIT_LIST_HEAD(&entry_obj->list);

	ret = i915_gem_object_get_pages(entry_obj->obj);
	if (ret)
	dst = i915_gem_object_pin_map(entry_obj->obj, I915_MAP_WB);
	if (IS_ERR(dst)) {
		ret = PTR_ERR(dst);
		goto put_obj;

	i915_gem_object_pin_pages(entry_obj->obj);

	/* get the va of the shadow batch buffer */
	dst = (void *)vmap_batch(entry_obj->obj, 0, bb_size);
	if (!dst) {
		gvt_err("failed to vmap shadow batch\n");
		ret = -ENOMEM;
		goto unpin_src;
	}

	ret = i915_gem_object_set_to_cpu_domain(entry_obj->obj, false);
@@ -1675,7 +1667,8 @@ static int perform_bb_shadow(struct parser_exec_state *s)

	/* copy batch buffer to shadow batch buffer*/
	ret = copy_gma_to_hva(s->vgpu, s->vgpu->gtt.ggtt_mm,
				gma, gma + bb_size, dst);
			      gma, gma + bb_size,
			      dst);
	if (ret) {
		gvt_err("fail to copy guest ring buffer\n");
		goto unmap_src;
@@ -1696,9 +1689,7 @@ static int perform_bb_shadow(struct parser_exec_state *s)
	return 0;

unmap_src:
	vunmap(dst);
unpin_src:
	i915_gem_object_unpin_pages(entry_obj->obj);
	i915_gem_object_unpin_map(entry_obj->obj);
put_obj:
	i915_gem_object_put(entry_obj->obj);
free_entry:
+1 −1
Original line number Diff line number Diff line
@@ -505,8 +505,8 @@ static void release_shadow_batch_buffer(struct intel_vgpu_workload *workload)

		list_for_each_entry_safe(entry_obj, temp, &workload->shadow_bb,
					 list) {
			i915_gem_object_unpin_map(entry_obj->obj);
			i915_gem_object_put(entry_obj->obj);
			kvfree(entry_obj->va);
			list_del(&entry_obj->list);
			kfree(entry_obj);
		}