On Fri, Jul 05, 2024 at 04:36:45AM +1000, Ben Skeggs wrote: > 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. Hm, I don't really like that this makes git-blame less useful for this function, moving it up is clearly cleaner though - your call. > > Signed-off-by: Ben Skeggs <bskeggs@xxxxxxxxxx> > --- > drivers/gpu/drm/nouveau/nouveau_drm.c | 106 +++++++++++++------------- > 1 file changed, 53 insertions(+), 53 deletions(-) > > diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c > index a58c31089613..eae48c87e3d5 100644 > --- a/drivers/gpu/drm/nouveau/nouveau_drm.c > +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c > @@ -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 @@ nouveau_drm_device_init(struct drm_device *dev) > 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. > -- > 2.45.1 >