[PATCH] drm/i915/gvt: introduced failsafe mode into vgpu

He, Min min.he at intel.com
Wed Feb 15 08:47:25 UTC 2017


Ok. will modify the patch and implement a new logic.

在 2/15/2017 4:31 PM, Tian, Kevin 写道:
>> From: He, Min
>> Sent: Wednesday, February 15, 2017 4:27 PM
>>
>> 在 2/15/2017 3:47 PM, Tian, Kevin 写道:
>>>> From: Min He
>>>> Sent: Wednesday, February 15, 2017 3:29 PM
>>>>
>>>> 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.
>>> instead of ignoring, is it better to make failsafe as a simple
>>> memory read/write emulation logic? Although we cannot
>>> guarantee guest behavior in such situation, returning a
>>> meaningful content (as previous programmed) looks more
>>> reasonable to cause less abnormal guest behaviors than
>>> returning all 1s.
>> Not tried other logic. Handling mmio registers is simple, but emulating
>> GTT entries may
>> need to add more logic. To simplify the design, I used current logic.
> I don't understand. We have vreg, vgtt, etc. You simply emulate
> read/write into virtual state w/o invoking any handler...
>
>>>> Signed-off-by: Min He <min.he at intel.com>
>>>> Signed-off-by: Pei Zhang <pei.zhang at intel.com>
>>>> ---
>>>>    drivers/gpu/drm/i915/gvt/cfg_space.c |  2 ++
>>>>    drivers/gpu/drm/i915/gvt/gvt.h       |  2 ++
>>>>    drivers/gpu/drm/i915/gvt/handlers.c  | 26
>> ++++++++++++++++++++++++++
>>>>    drivers/gpu/drm/i915/gvt/mmio.c      |  8 ++++++++
>>>>    drivers/gpu/drm/i915/gvt/vgpu.c      |  8 +++++++-
>>>>    5 files changed, 45 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/i915/gvt/cfg_space.c
>>>> b/drivers/gpu/drm/i915/gvt/cfg_space.c
>>>> index 4a6a2ed..d74410b 100644
>>>> --- a/drivers/gpu/drm/i915/gvt/cfg_space.c
>>>> +++ b/drivers/gpu/drm/i915/gvt/cfg_space.c
>>>> @@ -236,6 +236,8 @@ int intel_vgpu_emulate_cfg_write(struct intel_vgpu *vgpu,
>>>> unsigned int offset,
>>>>    	void *p_data, unsigned int bytes)
>>>>    {
>>>>    	int ret;
>>>> +	if (vgpu->failsafe)
>>>> +		return 0;
>>>>
>>>>    	if (WARN_ON(bytes > 4))
>>>>    		return -EINVAL;
>>>> diff --git a/drivers/gpu/drm/i915/gvt/gvt.h b/drivers/gpu/drm/i915/gvt/gvt.h
>>>> index e227caf..93bd157 100644
>>>> --- a/drivers/gpu/drm/i915/gvt/gvt.h
>>>> +++ b/drivers/gpu/drm/i915/gvt/gvt.h
>>>> @@ -143,6 +143,8 @@ struct intel_vgpu {
>>>>    	int id;
>>>>    	unsigned long handle; /* vGPU handle used by hypervisor MPT modules */
>>>>    	bool active;
>>>> +	bool pv_notified;
>>>> +	bool failsafe;
>>>>    	bool resetting;
>>>>    	void *sched_data;
>>>>
>>>> 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;
>>>> +		}
>>> move above logic into a function to avoid duplication in multiple places.
>> Same as the answer to Changbin. We may have different entries to
>> failsafe mode, so the error log is different.  It's hard to encapsule
>> these logs into one function.
>>
> isn't below generic?
>
>>>> +			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;



More information about the intel-gvt-dev mailing list