diff options
Diffstat (limited to 'drivers/gpu/drm/i915/gt/intel_gt.c')
| -rw-r--r-- | drivers/gpu/drm/i915/gt/intel_gt.c | 14 | 
1 files changed, 13 insertions, 1 deletions
| diff --git a/drivers/gpu/drm/i915/gt/intel_gt.c b/drivers/gpu/drm/i915/gt/intel_gt.c index f1f1b306e0af..d09f7596cb98 100644 --- a/drivers/gpu/drm/i915/gt/intel_gt.c +++ b/drivers/gpu/drm/i915/gt/intel_gt.c @@ -592,7 +592,9 @@ int intel_gt_init(struct intel_gt *gt)  	if (err)  		goto err_engines; -	intel_uc_init(>->uc); +	err = intel_uc_init(>->uc); +	if (err) +		goto err_engines;  	err = intel_gt_resume(gt);  	if (err) @@ -642,6 +644,13 @@ void intel_gt_driver_remove(struct intel_gt *gt)  void intel_gt_driver_unregister(struct intel_gt *gt)  {  	intel_rps_driver_unregister(>->rps); + +	/* +	 * Upon unregistering the device to prevent any new users, cancel +	 * all in-flight requests so that we can quickly unbind the active +	 * resources. +	 */ +	intel_gt_set_wedged(gt);  }  void intel_gt_driver_release(struct intel_gt *gt) @@ -658,6 +667,9 @@ void intel_gt_driver_release(struct intel_gt *gt)  void intel_gt_driver_late_release(struct intel_gt *gt)  { +	/* We need to wait for inflight RCU frees to release their grip */ +	rcu_barrier(); +  	intel_uc_driver_late_release(>->uc);  	intel_gt_fini_requests(gt);  	intel_gt_fini_reset(gt); |