mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-06 03:06:50 -04:00
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: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
This commit is contained in:
committed by
Zhenyu Wang
parent
bcd0aeded4
commit
a28615041e
@@ -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:
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user