[PATCH] drm/i915/gvt: correct cleanup sequence in intel_gvt_clean_device

Zhenyu Wang zhenyuw at linux.intel.com
Mon Jul 16 05:10:58 UTC 2018


On 2018.07.12 19:12:06 +0800, intel-gvt-dev-bounces at lists.freedesktop.org wrote:
> From: Hang Yuan <hang.yuan at linux.intel.com>
> 
> Free vgpu resource first and then gvt resource to fix oops like below
> during unbinding Intel gfx device.
>

Is this new regression or apply for upstream driver as well? We need a Fixes
tag on this anyway, and cc stable?

> BUG: unable to handle kernel NULL pointer dereference at       00000000000000a8
>   PGD 80000003c9d2c067 P4D 80000003c9d2c067 PUD 3c817c067 P      MD 0
>   Oops: 0002 [#1] SMP PTI
>   RIP: 0010:down_write+0x1b/0x40
> Call Trace:
>   debugfs_remove_recursive+0x46/0x1a0
>   intel_gvt_debugfs_remove_vgpu+0x15/0x30 [i915]
>   intel_gvt_destroy_vgpu+0x2d/0xf0 [i915]
>   intel_vgpu_remove+0x2c/0x30 [kvmgt]
>   mdev_device_remove_ops+0x23/0x50 [mdev]
>   mdev_device_remove+0xdb/0x190 [mdev]
>   mdev_device_remove+0x190/0x190 [mdev]
>   device_for_each_child+0x47/0x90
>   mdev_unregister_device+0xd5/0x120 [mdev]
>   intel_gvt_clean_device+0x91/0x120 [i915]
>   i915_driver_unload+0x9d/0x120 [i915]
>   i915_pci_remove+0x15/0x20 [i915]
>   pci_device_remove+0x3b/0xc0
>   device_release_driver_internal+0x157/0x230
>   unbind_store+0xfc/0x150
>   kernfs_fop_write+0x10f/0x180
>   __vfs_write+0x36/0x180
>   ? common_file_perm+0x41/0x130
>   ? _cond_resched+0x16/0x40
>   vfs_write+0xb3/0x1a0
>   ksys_write+0x52/0xc0
>   do_syscall_64+0x55/0x100
>   entry_SYSCALL_64_after_hwframe+0x44/0xa9
> 
> BUG: unable to handle kernel NULL pointer dereference at 0      000000000000038
>   PGD 8000000405bce067 P4D 8000000405bce067 PUD 405bcd067 PM      D 0
>   Oops: 0000 [#1] SMP PTI
>   RIP: 0010:hrtimer_active+0x5/0x40
> Call Trace:
>   hrtimer_try_to_cancel+0x25/0x120
>   ? tbs_sched_clean_vgpu+0x1f/0x50 [i915]
>   hrtimer_cancel+0x15/0x20
>   intel_gvt_destroy_vgpu+0x4c/0xf0 [i915]
>   intel_vgpu_remove+0x2c/0x30 [kvmgt]
>   mdev_device_remove_ops+0x23/0x50 [mdev]
>   mdev_device_remove+0xdb/0x190 [mdev]
>   ? mdev_device_remove+0x190/0x190 [mdev]
>   device_for_each_child+0x47/0x90
>   mdev_unregister_device+0xd5/0x120 [mdev]
>   intel_gvt_clean_device+0x89/0x120 [i915]
>   i915_driver_unload+0x9d/0x120 [i915]
>   i915_pci_remove+0x15/0x20 [i915]
>   pci_device_remove+0x3b/0xc0
>   device_release_driver_internal+0x157/0x230
>   unbind_store+0xfc/0x150
>   kernfs_fop_write+0x10f/0x180
>   __vfs_write+0x36/0x180
>   ? common_file_perm+0x41/0x130
>   ? _cond_resched+0x16/0x40
>   vfs_write+0xb3/0x1a0
>   ksys_write+0x52/0xc0
>   do_syscall_64+0x55/0x100
>   entry_SYSCALL_64_after_hwframe+0x44/0xa9
> 
> Signed-off-by: Hang Yuan <hang.yuan at linux.intel.com>
> ---
>  drivers/gpu/drm/i915/gvt/gvt.c | 14 ++++++--------
>  1 file changed, 6 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/gvt/gvt.c b/drivers/gpu/drm/i915/gvt/gvt.c
> index 4e65266..b96c6c7 100644
> --- a/drivers/gpu/drm/i915/gvt/gvt.c
> +++ b/drivers/gpu/drm/i915/gvt/gvt.c
> @@ -315,6 +315,11 @@ void intel_gvt_clean_device(struct drm_i915_private *dev_priv)
>  	if (WARN_ON(!gvt))
>  		return;
>  
> +	intel_gvt_destroy_idle_vgpu(gvt->idle_vgpu);
> +	intel_gvt_hypervisor_host_exit(&dev_priv->drm.pdev->dev, gvt);
> +	intel_gvt_cleanup_vgpu_type_groups(gvt);
> +	intel_gvt_clean_vgpu_types(gvt);
> +
>  	intel_gvt_debugfs_clean(gvt);
>  	clean_service_thread(gvt);
>  	intel_gvt_clean_cmd_parser(gvt);
> @@ -322,17 +327,10 @@ void intel_gvt_clean_device(struct drm_i915_private *dev_priv)
>  	intel_gvt_clean_workload_scheduler(gvt);
>  	intel_gvt_clean_gtt(gvt);
>  	intel_gvt_clean_irq(gvt);
> -	intel_gvt_clean_mmio_info(gvt);
>  	intel_gvt_free_firmware(gvt);
> -
> -	intel_gvt_hypervisor_host_exit(&dev_priv->drm.pdev->dev, gvt);
> -	intel_gvt_cleanup_vgpu_type_groups(gvt);
> -	intel_gvt_clean_vgpu_types(gvt);
> -
> +	intel_gvt_clean_mmio_info(gvt);
>  	idr_destroy(&gvt->vgpu_idr);
>  
> -	intel_gvt_destroy_idle_vgpu(gvt->idle_vgpu);
> -
>  	kfree(dev_priv->gvt);
>  	dev_priv->gvt = NULL;
>  }
> -- 
> 2.7.4
> 
> _______________________________________________
> intel-gvt-dev mailing list
> intel-gvt-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gvt-dev

-- 
Open Source Technology Center, Intel ltd.

$gpg --keyserver wwwkeys.pgp.net --recv-keys 4D781827
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 195 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/intel-gvt-dev/attachments/20180716/d02d8849/attachment.sig>


More information about the intel-gvt-dev mailing list