drm/i915/gvt: Invalidate vGPU PPGTT mm objects during a vGPU reset.
As different OSes might handling GVT PPGTT creation/destroy notification differently during a vGPU reset. A better approach is invalidating all vGPU PPGTT mm objects during vGPU reset. Signed-off-by: Zhi Wang <zhi.a.wang@intel.com> Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
This commit is contained in:
parent
5cd4223ea3
commit
730c8ead53
|
@ -2290,6 +2290,28 @@ void intel_gvt_clean_gtt(struct intel_gvt *gvt)
|
|||
clean_spt_oos(gvt);
|
||||
}
|
||||
|
||||
/**
|
||||
* intel_vgpu_invalidate_ppgtt - invalidate PPGTT instances
|
||||
* @vgpu: a vGPU
|
||||
*
|
||||
* This function is called when invalidate all PPGTT instances of a vGPU.
|
||||
*
|
||||
*/
|
||||
void intel_vgpu_invalidate_ppgtt(struct intel_vgpu *vgpu)
|
||||
{
|
||||
struct list_head *pos, *n;
|
||||
struct intel_vgpu_mm *mm;
|
||||
|
||||
list_for_each_safe(pos, n, &vgpu->gtt.ppgtt_mm_list_head) {
|
||||
mm = container_of(pos, struct intel_vgpu_mm, ppgtt_mm.list);
|
||||
if (mm->type == INTEL_GVT_MM_PPGTT) {
|
||||
list_del_init(&mm->ppgtt_mm.lru_list);
|
||||
if (mm->ppgtt_mm.shadowed)
|
||||
invalidate_ppgtt_mm(mm);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* intel_vgpu_reset_ggtt - reset the GGTT entry
|
||||
* @vgpu: a vGPU
|
||||
|
|
|
@ -194,6 +194,7 @@ struct intel_vgpu_gtt {
|
|||
extern int intel_vgpu_init_gtt(struct intel_vgpu *vgpu);
|
||||
extern void intel_vgpu_clean_gtt(struct intel_vgpu *vgpu);
|
||||
void intel_vgpu_reset_ggtt(struct intel_vgpu *vgpu);
|
||||
void intel_vgpu_invalidate_ppgtt(struct intel_vgpu *vgpu);
|
||||
|
||||
extern int intel_gvt_init_gtt(struct intel_gvt *gvt);
|
||||
void intel_vgpu_reset_gtt(struct intel_vgpu *vgpu);
|
||||
|
|
|
@ -522,6 +522,7 @@ void intel_gvt_reset_vgpu_locked(struct intel_vgpu *vgpu, bool dmlr,
|
|||
/* full GPU reset or device model level reset */
|
||||
if (engine_mask == ALL_ENGINES || dmlr) {
|
||||
intel_vgpu_select_submission_ops(vgpu, ALL_ENGINES, 0);
|
||||
intel_vgpu_invalidate_ppgtt(vgpu);
|
||||
/*fence will not be reset during virtual reset */
|
||||
if (dmlr) {
|
||||
intel_vgpu_reset_gtt(vgpu);
|
||||
|
|
Loading…
Reference in New Issue