drm/i915/gvt: add full vGPU reset support
Full vGPU reset need to release all the shadow PPGGT pages to avoid unnecessary write-protect and also should re-initialize pvinfo after resetting vregs to keep pvinfo correct. Signed-off-by: Ping Gao <ping.a.gao@intel.com> Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
This commit is contained in:
parent
0a8b66e3ad
commit
23736d1b1b
|
@ -382,6 +382,8 @@ void intel_vgpu_clean_opregion(struct intel_vgpu *vgpu);
|
||||||
int intel_vgpu_init_opregion(struct intel_vgpu *vgpu, u32 gpa);
|
int intel_vgpu_init_opregion(struct intel_vgpu *vgpu, u32 gpa);
|
||||||
|
|
||||||
int intel_vgpu_emulate_opregion_request(struct intel_vgpu *vgpu, u32 swsci);
|
int intel_vgpu_emulate_opregion_request(struct intel_vgpu *vgpu, u32 swsci);
|
||||||
|
int setup_vgpu_mmio(struct intel_vgpu *vgpu);
|
||||||
|
void populate_pvinfo_page(struct intel_vgpu *vgpu);
|
||||||
|
|
||||||
#include "mpt.h"
|
#include "mpt.h"
|
||||||
|
|
||||||
|
|
|
@ -251,6 +251,16 @@ static int handle_device_reset(struct intel_vgpu *vgpu, unsigned int offset,
|
||||||
|
|
||||||
intel_vgpu_reset_execlist(vgpu, bitmap);
|
intel_vgpu_reset_execlist(vgpu, bitmap);
|
||||||
|
|
||||||
|
/* full GPU reset */
|
||||||
|
if (bitmap == 0xff) {
|
||||||
|
mutex_unlock(&vgpu->gvt->lock);
|
||||||
|
intel_vgpu_clean_gtt(vgpu);
|
||||||
|
mutex_lock(&vgpu->gvt->lock);
|
||||||
|
setup_vgpu_mmio(vgpu);
|
||||||
|
populate_pvinfo_page(vgpu);
|
||||||
|
intel_vgpu_init_gtt(vgpu);
|
||||||
|
}
|
||||||
|
|
||||||
vgpu->resetting = false;
|
vgpu->resetting = false;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -41,7 +41,7 @@ static void clean_vgpu_mmio(struct intel_vgpu *vgpu)
|
||||||
vgpu->mmio.vreg = vgpu->mmio.sreg = NULL;
|
vgpu->mmio.vreg = vgpu->mmio.sreg = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int setup_vgpu_mmio(struct intel_vgpu *vgpu)
|
int setup_vgpu_mmio(struct intel_vgpu *vgpu)
|
||||||
{
|
{
|
||||||
struct intel_gvt *gvt = vgpu->gvt;
|
struct intel_gvt *gvt = vgpu->gvt;
|
||||||
const struct intel_gvt_device_info *info = &gvt->device_info;
|
const struct intel_gvt_device_info *info = &gvt->device_info;
|
||||||
|
@ -103,7 +103,7 @@ static void setup_vgpu_cfg_space(struct intel_vgpu *vgpu,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void populate_pvinfo_page(struct intel_vgpu *vgpu)
|
void populate_pvinfo_page(struct intel_vgpu *vgpu)
|
||||||
{
|
{
|
||||||
/* setup the ballooning information */
|
/* setup the ballooning information */
|
||||||
vgpu_vreg64(vgpu, vgtif_reg(magic)) = VGT_MAGIC;
|
vgpu_vreg64(vgpu, vgtif_reg(magic)) = VGT_MAGIC;
|
||||||
|
|
Loading…
Reference in New Issue