[PATCH] drm/i915/gvt: Destroy idle vgpu earlier
Xiong Zhang
xiong.y.zhang at intel.com
Tue Sep 25 06:58:52 UTC 2018
When host i915 module is unloaded, the following call trace exists:
[ 134.941075] Call Trace:
[ 134.941085] hrtimer_try_to_cancel+0x25/0x120
[ 134.941095] hrtimer_cancel+0x15/0x20
[ 134.941166] intel_gvt_destroy_idle_vgpu+0xe/0x20 [i915]
[ 134.941230] intel_gvt_clean_device+0xe5/0x120 [i915]
[ 134.941273] i915_driver_unload+0x9d/0x120 [i915]
[ 134.941317] i915_pci_remove+0x15/0x20 [i915]
The reason is that idle vgpu reference gvt structure which has been
freed earlier. So this patch move destroy_idle_vgpu() before
destroy_vgt().
Fixes: 61a669473f82("drm/i915/gvt: cancel scheduler timer when no vGPU exists")
Signed-off-by: Xiong Zhang <xiong.y.zhang at intel.com>
---
drivers/gpu/drm/i915/gvt/gvt.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/gvt/gvt.c b/drivers/gpu/drm/i915/gvt/gvt.c
index 83b3f0d..566d469 100644
--- a/drivers/gpu/drm/i915/gvt/gvt.c
+++ b/drivers/gpu/drm/i915/gvt/gvt.c
@@ -319,6 +319,8 @@ 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_debugfs_clean(gvt);
clean_service_thread(gvt);
intel_gvt_clean_cmd_parser(gvt);
@@ -335,8 +337,6 @@ void intel_gvt_clean_device(struct drm_i915_private *dev_priv)
idr_destroy(&gvt->vgpu_idr);
- intel_gvt_destroy_idle_vgpu(gvt->idle_vgpu);
-
kfree(dev_priv->gvt);
dev_priv->gvt = NULL;
}
--
2.7.4
More information about the intel-gvt-dev
mailing list