diff options
| -rw-r--r-- | drivers/gpu/drm/i915/gvt/gtt.c | 22 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/gvt/gtt.h | 1 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/gvt/vgpu.c | 1 |
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 | */ | ||
| 2300 | void 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 { | |||
| 194 | extern int intel_vgpu_init_gtt(struct intel_vgpu *vgpu); | 194 | extern int intel_vgpu_init_gtt(struct intel_vgpu *vgpu); |
| 195 | extern void intel_vgpu_clean_gtt(struct intel_vgpu *vgpu); | 195 | extern void intel_vgpu_clean_gtt(struct intel_vgpu *vgpu); |
| 196 | void intel_vgpu_reset_ggtt(struct intel_vgpu *vgpu); | 196 | void intel_vgpu_reset_ggtt(struct intel_vgpu *vgpu); |
| 197 | void intel_vgpu_invalidate_ppgtt(struct intel_vgpu *vgpu); | ||
| 197 | 198 | ||
| 198 | extern int intel_gvt_init_gtt(struct intel_gvt *gvt); | 199 | extern int intel_gvt_init_gtt(struct intel_gvt *gvt); |
| 199 | void intel_vgpu_reset_gtt(struct intel_vgpu *vgpu); | 200 | void 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); |
