return 0;
 }
 
+static void kunit_action_drm_dev_unregister(void *ptr)
+{
+       struct drm_device *drm = ptr;
+
+       drm_dev_unregister(drm);
+}
+
 static struct vc4_dev *__mock_device(struct kunit *test, bool is_vc5)
 {
        struct drm_device *drm;
        ret = drm_dev_register(drm, 0);
        KUNIT_ASSERT_EQ(test, ret, 0);
 
+       ret = kunit_add_action_or_reset(test,
+                                       kunit_action_drm_dev_unregister,
+                                       drm);
+       KUNIT_ASSERT_EQ(test, ret, 0);
+
        return vc4;
 }
 
 
 static void vc4_pv_muxing_test_exit(struct kunit *test)
 {
        struct pv_muxing_priv *priv = test->priv;
-       struct vc4_dev *vc4 = priv->vc4;
-       struct drm_device *drm = &vc4->base;
        struct drm_atomic_state *state = priv->state;
 
        drm_atomic_state_put(state);
        drm_modeset_drop_locks(&priv->ctx);
        drm_modeset_acquire_fini(&priv->ctx);
-       drm_dev_unregister(drm);
 }
 
 static struct kunit_case vc4_pv_muxing_tests[] = {
        drm_atomic_state_put(state);
        drm_modeset_drop_locks(&ctx);
        drm_modeset_acquire_fini(&ctx);
-       drm_dev_unregister(drm);
 }
 
 static void drm_test_vc5_pv_muxing_bugs_stable_fifo(struct kunit *test)
        drm_atomic_state_put(state);
        drm_modeset_drop_locks(&ctx);
        drm_modeset_acquire_fini(&ctx);
-       drm_dev_unregister(drm);
 }
 
 static void
        drm_atomic_state_put(state);
        drm_modeset_drop_locks(&ctx);
        drm_modeset_acquire_fini(&ctx);
-       drm_dev_unregister(drm);
 }
 
 static struct kunit_case vc5_pv_muxing_bugs_tests[] = {