drm/i915/gvt: set shadow entry to scratch page while p2m failed
Sometimes guest driver will only update partial of the GGTT entry then access it. In this situation a failure will happen while translating the gpa to hpa. Now in this situation we let the corresponding shadow entry pointing to a scratch page. Signed-off-by: Zhi Wang <zhi.a.wang@intel.com> Signed-off-by: Xiaoguang Chen <xiaoguang.chen@intel.com> Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
This commit is contained in:
committed by
Zhenyu Wang
parent
14f5ba26aa
commit
359b693100
@ -1837,11 +1837,15 @@ static int emulate_gtt_mmio_write(struct intel_vgpu *vgpu, unsigned int off,
|
|||||||
ret = gtt_entry_p2m(vgpu, &e, &m);
|
ret = gtt_entry_p2m(vgpu, &e, &m);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
gvt_vgpu_err("fail to translate guest gtt entry\n");
|
gvt_vgpu_err("fail to translate guest gtt entry\n");
|
||||||
return ret;
|
/* guest driver may read/write the entry when partial
|
||||||
|
* update the entry in this situation p2m will fail
|
||||||
|
* settting the shadow entry to point to a scratch page
|
||||||
|
*/
|
||||||
|
ops->set_pfn(&m, gvt->gtt.scratch_ggtt_mfn);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
m = e;
|
m = e;
|
||||||
m.val64 = 0;
|
ops->set_pfn(&m, gvt->gtt.scratch_ggtt_mfn);
|
||||||
}
|
}
|
||||||
|
|
||||||
ggtt_set_shadow_entry(ggtt_mm, &m, g_gtt_index);
|
ggtt_set_shadow_entry(ggtt_mm, &m, g_gtt_index);
|
||||||
|
Reference in New Issue
Block a user