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

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
...@@ -1650,18 +1650,10 @@ static int perform_bb_shadow(struct parser_exec_state *s) ...@@ -1650,18 +1650,10 @@ static int perform_bb_shadow(struct parser_exec_state *s)
entry_obj->len = bb_size; entry_obj->len = bb_size;
INIT_LIST_HEAD(&entry_obj->list); INIT_LIST_HEAD(&entry_obj->list);
ret = i915_gem_object_get_pages(entry_obj->obj); dst = i915_gem_object_pin_map(entry_obj->obj, I915_MAP_WB);
if (ret) if (IS_ERR(dst)) {
ret = PTR_ERR(dst);
goto put_obj; 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); 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) ...@@ -1675,7 +1667,8 @@ static int perform_bb_shadow(struct parser_exec_state *s)
/* copy batch buffer to shadow batch buffer*/ /* copy batch buffer to shadow batch buffer*/
ret = copy_gma_to_hva(s->vgpu, s->vgpu->gtt.ggtt_mm, ret = copy_gma_to_hva(s->vgpu, s->vgpu->gtt.ggtt_mm,
gma, gma + bb_size, dst); gma, gma + bb_size,
dst);
if (ret) { if (ret) {
gvt_err("fail to copy guest ring buffer\n"); gvt_err("fail to copy guest ring buffer\n");
goto unmap_src; goto unmap_src;
...@@ -1696,9 +1689,7 @@ static int perform_bb_shadow(struct parser_exec_state *s) ...@@ -1696,9 +1689,7 @@ static int perform_bb_shadow(struct parser_exec_state *s)
return 0; return 0;
unmap_src: unmap_src:
vunmap(dst); i915_gem_object_unpin_map(entry_obj->obj);
unpin_src:
i915_gem_object_unpin_pages(entry_obj->obj);
put_obj: put_obj:
i915_gem_object_put(entry_obj->obj); i915_gem_object_put(entry_obj->obj);
free_entry: free_entry:
......
...@@ -505,8 +505,8 @@ static void release_shadow_batch_buffer(struct intel_vgpu_workload *workload) ...@@ -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_for_each_entry_safe(entry_obj, temp, &workload->shadow_bb,
list) { list) {
i915_gem_object_unpin_map(entry_obj->obj);
i915_gem_object_put(entry_obj->obj); i915_gem_object_put(entry_obj->obj);
kvfree(entry_obj->va);
list_del(&entry_obj->list); list_del(&entry_obj->list);
kfree(entry_obj); kfree(entry_obj);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment