aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/i915/gvt/gtt.c22
-rw-r--r--drivers/gpu/drm/i915/gvt/gtt.h1
-rw-r--r--drivers/gpu/drm/i915/gvt/vgpu.c1
3 files changed, 24 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/gvt/gtt.c b/drivers/gpu/drm/i915/gvt/gtt.c
index 8eb76becd676..d29281231507 100644
--- a/drivers/gpu/drm/i915/gvt/gtt.c
+++ b/drivers/gpu/drm/i915/gvt/gtt.c
@@ -2291,6 +2291,28 @@ void intel_gvt_clean_gtt(struct intel_gvt *gvt)
2291} 2291}
2292 2292
2293/** 2293/**
2294 * intel_vgpu_invalidate_ppgtt - invalidate PPGTT instances
2295 * @vgpu: a vGPU
2296 *
2297 * This function is called when invalidate all PPGTT instances of a vGPU.
2298 *
2299 */
2300void intel_vgpu_invalidate_ppgtt(struct intel_vgpu *vgpu)
2301{
2302 struct list_head *pos, *n;
2303 struct intel_vgpu_mm *mm;
2304
2305 list_for_each_safe(pos, n, &vgpu->gtt.ppgtt_mm_list_head) {
2306 mm = container_of(pos, struct intel_vgpu_mm, ppgtt_mm.list);
2307 if (mm->type == INTEL_GVT_MM_PPGTT) {
2308 list_del_init(&mm->ppgtt_mm.lru_list);
2309 if (mm->ppgtt_mm.shadowed)
2310 invalidate_ppgtt_mm(mm);
2311 }
2312 }
2313}
2314
2315/**
2294 * intel_vgpu_reset_ggtt - reset the GGTT entry 2316 * intel_vgpu_reset_ggtt - reset the GGTT entry
2295 * @vgpu: a vGPU 2317 * @vgpu: a vGPU
2296 * 2318 *
diff --git a/drivers/gpu/drm/i915/gvt/gtt.h b/drivers/gpu/drm/i915/gvt/gtt.h
index e831507e17c3..a8b369cd352b 100644
--- a/drivers/gpu/drm/i915/gvt/gtt.h
+++ b/drivers/gpu/drm/i915/gvt/gtt.h
@@ -194,6 +194,7 @@ struct intel_vgpu_gtt {
194extern int intel_vgpu_init_gtt(struct intel_vgpu *vgpu); 194extern int intel_vgpu_init_gtt(struct intel_vgpu *vgpu);
195extern void intel_vgpu_clean_gtt(struct intel_vgpu *vgpu); 195extern void intel_vgpu_clean_gtt(struct intel_vgpu *vgpu);
196void intel_vgpu_reset_ggtt(struct intel_vgpu *vgpu); 196void intel_vgpu_reset_ggtt(struct intel_vgpu *vgpu);
197void intel_vgpu_invalidate_ppgtt(struct intel_vgpu *vgpu);
197 198
198extern int intel_gvt_init_gtt(struct intel_gvt *gvt); 199extern int intel_gvt_init_gtt(struct intel_gvt *gvt);
199void intel_vgpu_reset_gtt(struct intel_vgpu *vgpu); 200void intel_vgpu_reset_gtt(struct intel_vgpu *vgpu);
diff --git a/drivers/gpu/drm/i915/gvt/vgpu.c b/drivers/gpu/drm/i915/gvt/vgpu.c
index 41f76e86aa1f..2e0a02a80fe4 100644
--- a/drivers/gpu/drm/i915/gvt/vgpu.c
+++ b/drivers/gpu/drm/i915/gvt/vgpu.c
@@ -522,6 +522,7 @@ void intel_gvt_reset_vgpu_locked(struct intel_vgpu *vgpu, bool dmlr,
522 /* full GPU reset or device model level reset */ 522 /* full GPU reset or device model level reset */
523 if (engine_mask == ALL_ENGINES || dmlr) { 523 if (engine_mask == ALL_ENGINES || dmlr) {
524 intel_vgpu_select_submission_ops(vgpu, ALL_ENGINES, 0); 524 intel_vgpu_select_submission_ops(vgpu, ALL_ENGINES, 0);
525 intel_vgpu_invalidate_ppgtt(vgpu);
525 /*fence will not be reset during virtual reset */ 526 /*fence will not be reset during virtual reset */
526 if (dmlr) { 527 if (dmlr) {
527 intel_vgpu_reset_gtt(vgpu); 528 intel_vgpu_reset_gtt(vgpu);