]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
drm/nouveau: move nouveau_drm_device_fini() above init()
authorBen Skeggs <bskeggs@nvidia.com>
Fri, 26 Jul 2024 04:37:52 +0000 (14:37 +1000)
committerDanilo Krummrich <dakr@kernel.org>
Sat, 27 Jul 2024 01:05:18 +0000 (03:05 +0200)
The next commit wants to be able to call fini() from an init() failure
path to remove the need to duplicate a bunch of cleanup.

Moving fini() above init() avoids the need for a forward-declaration.

Signed-off-by: Ben Skeggs <bskeggs@nvidia.com>
Signed-off-by: Danilo Krummrich <dakr@kernel.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20240726043828.58966-2-bskeggs@nvidia.com
drivers/gpu/drm/nouveau/nouveau_drm.c

index a58c31089613ebc67076937885e20bee1c54bda8..eae48c87e3d56bd842fdb1478b2d3c60426985ac 100644 (file)
@@ -578,6 +578,59 @@ nouveau_parent = {
        .errorf = nouveau_drm_errorf,
 };
 
+static void
+nouveau_drm_device_fini(struct drm_device *dev)
+{
+       struct nouveau_cli *cli, *temp_cli;
+       struct nouveau_drm *drm = nouveau_drm(dev);
+
+       if (nouveau_pmops_runtime()) {
+               pm_runtime_get_sync(dev->dev);
+               pm_runtime_forbid(dev->dev);
+       }
+
+       nouveau_led_fini(dev);
+       nouveau_dmem_fini(drm);
+       nouveau_svm_fini(drm);
+       nouveau_hwmon_fini(dev);
+       nouveau_debugfs_fini(drm);
+
+       if (dev->mode_config.num_crtc)
+               nouveau_display_fini(dev, false, false);
+       nouveau_display_destroy(dev);
+
+       nouveau_accel_fini(drm);
+       nouveau_bios_takedown(dev);
+
+       nouveau_ttm_fini(drm);
+       nouveau_vga_fini(drm);
+
+       /*
+        * There may be existing clients from as-yet unclosed files. For now,
+        * clean them up here rather than deferring until the file is closed,
+        * but this likely not correct if we want to support hot-unplugging
+        * properly.
+        */
+       mutex_lock(&drm->clients_lock);
+       list_for_each_entry_safe(cli, temp_cli, &drm->clients, head) {
+               list_del(&cli->head);
+               mutex_lock(&cli->mutex);
+               if (cli->abi16)
+                       nouveau_abi16_fini(cli->abi16);
+               mutex_unlock(&cli->mutex);
+               nouveau_cli_fini(cli);
+               kfree(cli);
+       }
+       mutex_unlock(&drm->clients_lock);
+
+       nouveau_cli_fini(&drm->client);
+       nouveau_cli_fini(&drm->master);
+       destroy_workqueue(drm->sched_wq);
+       nvif_parent_dtor(&drm->parent);
+       mutex_destroy(&drm->clients_lock);
+       kfree(drm);
+}
+
 static int
 nouveau_drm_device_init(struct drm_device *dev)
 {
@@ -679,59 +732,6 @@ fail_alloc:
        return ret;
 }
 
-static void
-nouveau_drm_device_fini(struct drm_device *dev)
-{
-       struct nouveau_cli *cli, *temp_cli;
-       struct nouveau_drm *drm = nouveau_drm(dev);
-
-       if (nouveau_pmops_runtime()) {
-               pm_runtime_get_sync(dev->dev);
-               pm_runtime_forbid(dev->dev);
-       }
-
-       nouveau_led_fini(dev);
-       nouveau_dmem_fini(drm);
-       nouveau_svm_fini(drm);
-       nouveau_hwmon_fini(dev);
-       nouveau_debugfs_fini(drm);
-
-       if (dev->mode_config.num_crtc)
-               nouveau_display_fini(dev, false, false);
-       nouveau_display_destroy(dev);
-
-       nouveau_accel_fini(drm);
-       nouveau_bios_takedown(dev);
-
-       nouveau_ttm_fini(drm);
-       nouveau_vga_fini(drm);
-
-       /*
-        * There may be existing clients from as-yet unclosed files. For now,
-        * clean them up here rather than deferring until the file is closed,
-        * but this likely not correct if we want to support hot-unplugging
-        * properly.
-        */
-       mutex_lock(&drm->clients_lock);
-       list_for_each_entry_safe(cli, temp_cli, &drm->clients, head) {
-               list_del(&cli->head);
-               mutex_lock(&cli->mutex);
-               if (cli->abi16)
-                       nouveau_abi16_fini(cli->abi16);
-               mutex_unlock(&cli->mutex);
-               nouveau_cli_fini(cli);
-               kfree(cli);
-       }
-       mutex_unlock(&drm->clients_lock);
-
-       nouveau_cli_fini(&drm->client);
-       nouveau_cli_fini(&drm->master);
-       destroy_workqueue(drm->sched_wq);
-       nvif_parent_dtor(&drm->parent);
-       mutex_destroy(&drm->clients_lock);
-       kfree(drm);
-}
-
 /*
  * On some Intel PCIe bridge controllers doing a
  * D0 -> D3hot -> D3cold -> D0 sequence causes Nvidia GPUs to not reappear.