[PATCH] drm/i915/gvt: introduced failsafe mode into vgpu
He, Min
min.he at intel.com
Wed Feb 15 07:53:37 UTC 2017
在 2/15/2017 3:46 PM, Du, Changbin 写道:
> On Wed, Feb 15, 2017 at 03:28:43PM +0800, Min He wrote:
>> New failsafe mode is introduced, when we detect guest not supporting
>> GVTg.
>> In failsafe mode, we will ignore all the MMIO and cfg space read/write
>> from guest.
>>
>> Signed-off-by: Min He <min.he at intel.com>
>> Signed-off-by: Pei Zhang <pei.zhang at intel.com>
>> ---
>> diff --git a/drivers/gpu/drm/i915/gvt/handlers.c b/drivers/gpu/drm/i915/gvt/handlers.c
>> index 1d45062..6089a1e 100644
>> --- a/drivers/gpu/drm/i915/gvt/handlers.c
>> +++ b/drivers/gpu/drm/i915/gvt/handlers.c
>> @@ -154,6 +154,17 @@ static int sanitize_fence_mmio_access(struct intel_vgpu *vgpu,
>> unsigned int fence_num, void *p_data, unsigned int bytes)
>> {
>> if (fence_num >= vgpu_fence_sz(vgpu)) {
>> + if (!vgpu->pv_notified) {
>> + /* When guest access oob fence regs without access
>> + * pv_info first, we treat guest not supporting GVT,
>> + * and we will let vgpu enter failsafe mode.
>> + */
>> + vgpu->failsafe = true;
>> + pr_err("***Detected guest not supporting GVT-g***\n");
>> + pr_err("***Please update your guest driver*******\n");
>> + pr_err("***Entering failsafe mode****************\n");
>> + return -EINVAL;
>> + }
>> gvt_err("vgpu%d: found oob fence register access\n",
>> vgpu->id);
> Mine, this slice would be a function like gvt_enter_failsafe_mode()? It
> duplicate with below block.
Here the error log may vary due to different situations, that's why I
didn't encapsule them with
an function.
>
>> gvt_err("vgpu%d: total fence num %d access fence num %d\n",
>> @@ -1001,6 +1012,7 @@ static int pvinfo_mmio_read(struct intel_vgpu *vgpu, unsigned int offset,
>> if (invalid_read)
>> gvt_err("invalid pvinfo read: [%x:%x] = %x\n",
>> offset, bytes, *(u32 *)p_data);
>> + vgpu->pv_notified = true;
>> return 0;
>> }
>>
>> @@ -1318,6 +1330,20 @@ static int ring_mode_mmio_write(struct intel_vgpu *vgpu, unsigned int offset,
>> bool enable_execlist;
>>
>> write_vreg(vgpu, offset, p_data, bytes);
>> +
>> + if (((data & _MASKED_BIT_ENABLE(GFX_PPGTT_ENABLE)) ||
>> + (data & _MASKED_BIT_ENABLE(GFX_RUN_LIST_ENABLE)))
>> + && !vgpu->pv_notified) {
>> + /* when PPGTT mode enabled, we will check if guest has called
>> + * pvinfo, if not, we will treat this guest as non-gvtg-aware
>> + * guest, and stop emulating its cfg space, mmio, gtt, etc.
>> + */
>> + vgpu->failsafe = true;
>> + pr_err("***Detected guest not supporting GVT-g***\n");
>> + pr_err("***Please update your guest driver*******\n");
>> + pr_err("***Entering failsafe mode****************\n");
>> + return 0;
>> + }
>> if ((data & _MASKED_BIT_ENABLE(GFX_RUN_LIST_ENABLE))
>> || (data & _MASKED_BIT_DISABLE(GFX_RUN_LIST_ENABLE))) {
>> enable_execlist = !!(data & GFX_RUN_LIST_ENABLE);
>> diff --git a/drivers/gpu/drm/i915/gvt/vgpu.c b/drivers/gpu/drm/i915/gvt/vgpu.c
>> index 67d471c..0d1851a 100644
>> --- a/drivers/gpu/drm/i915/gvt/vgpu.c
>> +++ b/drivers/gpu/drm/i915/gvt/vgpu.c
>> @@ -224,6 +224,8 @@ static struct intel_vgpu *__intel_gvt_create_vgpu(struct intel_gvt *gvt,
>> goto out_free_vgpu;
>>
>> vgpu->id = ret;
>> + vgpu->failsafe = false;
>> + vgpu->pv_notified = false;
> not need, since vgpu is alloced with zalloc.
Agree with you, it only to explicitly set the default value. I can
remove it.
>> --
>> 1.9.1
>>
>> _______________________________________________
>> intel-gvt-dev mailing list
>> intel-gvt-dev at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/intel-gvt-dev
More information about the intel-gvt-dev
mailing list