We return immediately from i915_driver_register() if drm_dev_register() fails, skipping remaining registration steps. However, the _unregister() counterpart called at device remove knows nothing about that skip and executes reverts for all those steps. For that to work correctly, those revert functions must be resistant to being called even on uninitialized objects, or we must not skip their initialization. Three cases have been identified and fixes proposed. Call traces are taken from CI results of igt@i915_driver_load@reload-with-fault-injection execution, reported to several separate Gitlab issues (links provided). Immediate return was introduced to i915_driver_register() by commit ec3e00b4ee27 ("drm/i915: stop registering if drm_dev_register() fails"), however, quite a few things have changed since then. That's why I haven't mentioned it in a Fixes: tag to avoid it being picked up by stable, which I haven't tested. Janusz Krzysztofik (3): drm/i915: Fix PM reference not released if device register fails drm/i915: Fix GT sysfs unregister tried even if not registered drm/i915: Fix device sysfs teardown tried even if not set up drivers/gpu/drm/i915/gt/intel_gt_sysfs.c | 3 +++ drivers/gpu/drm/i915/i915_driver.c | 6 ++++-- drivers/gpu/drm/i915/i915_sysfs.c | 3 +++ 3 files changed, 10 insertions(+), 2 deletions(-) -- 2.47.1