Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> writes: > Currently we do a final scrub of the HW state upon release. However, > when rebinding the device, this is too late as the device may either > have been partially rebound or the device is no longer accessible. If > the device has been removed before release, the reset goes astray > leaving the device in an inconsistent state, unlikely to work without a > full PCI reset. Furthermore, if the device is partially rebound before > the HW scrubbing, there may be leftover HW state that should have been > scrubbed. Either way, we need to push the scrubbing earlier before the > removal, so into unregister. The danger is that on older machines, > reseting the GPU also impact the display engine and so the reset should > be after modesetting is disabled (and before reuse we need to recover > modesetting). > > Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/2508 > Testcase: igt/core_hotunplug > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> Reviewed-by: Mika Kuoppala <mika.kuoppala@xxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/i915/gt/intel_gt.c | 11 ++++++----- > 1 file changed, 6 insertions(+), 5 deletions(-) > > diff --git a/drivers/gpu/drm/i915/gt/intel_gt.c b/drivers/gpu/drm/i915/gt/intel_gt.c > index 39b428c5049c..44f1d51e5ae5 100644 > --- a/drivers/gpu/drm/i915/gt/intel_gt.c > +++ b/drivers/gpu/drm/i915/gt/intel_gt.c > @@ -614,6 +614,8 @@ void intel_gt_driver_remove(struct intel_gt *gt) > > void intel_gt_driver_unregister(struct intel_gt *gt) > { > + intel_wakeref_t wakeref; > + > intel_rps_driver_unregister(>->rps); > > /* > @@ -622,16 +624,15 @@ void intel_gt_driver_unregister(struct intel_gt *gt) > * resources. > */ > intel_gt_set_wedged(gt); > + > + /* Scrub all HW state upon release */ > + with_intel_runtime_pm(gt->uncore->rpm, wakeref) > + __intel_gt_reset(gt, ALL_ENGINES); > } > > void intel_gt_driver_release(struct intel_gt *gt) > { > struct i915_address_space *vm; > - intel_wakeref_t wakeref; > - > - /* Scrub all HW state upon release */ > - with_intel_runtime_pm(gt->uncore->rpm, wakeref) > - __intel_gt_reset(gt, ALL_ENGINES); > > vm = fetch_and_zero(>->vm); > if (vm) /* FIXME being called twice on error paths :( */ > -- > 2.20.1 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/intel-gfx _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx