Module Name: src Committed By: riastradh Date: Sun Dec 19 11:34:46 UTC 2021
Modified Files: src/sys/external/bsd/drm2/dist/drm: drm_atomic.c src/sys/external/bsd/drm2/dist/drm/nouveau: nouveau_bios.c nouveau_dmem.c nouveau_drm.c nouveau_fbcon.c nouveau_svm.c src/sys/external/bsd/drm2/dist/drm/nouveau/dispnv50: nouveau_dispnv50_disp.c src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core: nouveau_nvkm_core_client.c nouveau_nvkm_core_engine.c nouveau_nvkm_core_subdev.c src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp: nouveau_nvkm_engine_disp_dp.c src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/fifo: nouveau_nvkm_engine_fifo_base.c src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/gr: nouveau_nvkm_engine_gr_gf100.c nouveau_nvkm_engine_gr_nv04.c nouveau_nvkm_engine_gr_nv10.c nouveau_nvkm_engine_gr_nv50.c src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/falcon: nouveau_nvkm_falcon_base.c nouveau_nvkm_falcon_cmdq.c nouveau_nvkm_falcon_msgq.c nouveau_nvkm_falcon_qmgr.c src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/bar: nouveau_nvkm_subdev_bar_base.c src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/fuse: nouveau_nvkm_subdev_fuse_base.c src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem: nouveau_nvkm_subdev_instmem_base.c nouveau_nvkm_subdev_instmem_gk20a.c src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mc: nouveau_nvkm_subdev_mc_base.c nouveau_nvkm_subdev_mc_gp100.c priv.h src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mmu: nouveau_nvkm_subdev_mmu_vmm.c src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/therm: nouveau_nvkm_subdev_therm_base.c nouveau_nvkm_subdev_therm_fan.c nouveau_nvkm_subdev_therm_fantog.c priv.h src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/timer: nouveau_nvkm_subdev_timer_base.c Log Message: nouveau: ashes to ashes, dust to dust, mutex inited must later destruct To generate a diff of this commit: cvs rdiff -u -r1.11 -r1.12 src/sys/external/bsd/drm2/dist/drm/drm_atomic.c cvs rdiff -u -r1.5 -r1.6 \ src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_bios.c cvs rdiff -u -r1.2 -r1.3 \ src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_dmem.c \ src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_svm.c cvs rdiff -u -r1.22 -r1.23 \ src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_drm.c cvs rdiff -u -r1.14 -r1.15 \ src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_fbcon.c cvs rdiff -u -r1.5 -r1.6 \ src/sys/external/bsd/drm2/dist/drm/nouveau/dispnv50/nouveau_dispnv50_disp.c cvs rdiff -u -r1.5 -r1.6 \ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_client.c cvs rdiff -u -r1.4 -r1.5 \ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_engine.c \ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_subdev.c cvs rdiff -u -r1.3 -r1.4 \ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/nouveau_nvkm_engine_disp_dp.c cvs rdiff -u -r1.3 -r1.4 \ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/fifo/nouveau_nvkm_engine_fifo_base.c cvs rdiff -u -r1.6 -r1.7 \ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/gr/nouveau_nvkm_engine_gr_gf100.c cvs rdiff -u -r1.3 -r1.4 \ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/gr/nouveau_nvkm_engine_gr_nv04.c \ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/gr/nouveau_nvkm_engine_gr_nv10.c \ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/gr/nouveau_nvkm_engine_gr_nv50.c cvs rdiff -u -r1.3 -r1.4 \ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/falcon/nouveau_nvkm_falcon_base.c \ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/falcon/nouveau_nvkm_falcon_cmdq.c \ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/falcon/nouveau_nvkm_falcon_msgq.c \ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/falcon/nouveau_nvkm_falcon_qmgr.c cvs rdiff -u -r1.3 -r1.4 \ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/bar/nouveau_nvkm_subdev_bar_base.c cvs rdiff -u -r1.3 -r1.4 \ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/fuse/nouveau_nvkm_subdev_fuse_base.c cvs rdiff -u -r1.7 -r1.8 \ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_base.c \ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_gk20a.c cvs rdiff -u -r1.3 -r1.4 \ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mc/nouveau_nvkm_subdev_mc_base.c \ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mc/priv.h cvs rdiff -u -r1.2 -r1.3 \ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mc/nouveau_nvkm_subdev_mc_gp100.c cvs rdiff -u -r1.3 -r1.4 \ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mmu/nouveau_nvkm_subdev_mmu_vmm.c cvs rdiff -u -r1.3 -r1.4 \ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/therm/nouveau_nvkm_subdev_therm_base.c \ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/therm/nouveau_nvkm_subdev_therm_fan.c \ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/therm/nouveau_nvkm_subdev_therm_fantog.c \ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/therm/priv.h cvs rdiff -u -r1.5 -r1.6 \ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/timer/nouveau_nvkm_subdev_timer_base.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/external/bsd/drm2/dist/drm/drm_atomic.c diff -u src/sys/external/bsd/drm2/dist/drm/drm_atomic.c:1.11 src/sys/external/bsd/drm2/dist/drm/drm_atomic.c:1.12 --- src/sys/external/bsd/drm2/dist/drm/drm_atomic.c:1.11 Sun Dec 19 00:55:34 2021 +++ src/sys/external/bsd/drm2/dist/drm/drm_atomic.c Sun Dec 19 11:34:44 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: drm_atomic.c,v 1.11 2021/12/19 00:55:34 riastradh Exp $ */ +/* $NetBSD: drm_atomic.c,v 1.12 2021/12/19 11:34:44 riastradh Exp $ */ /* * Copyright (C) 2014 Red Hat @@ -29,7 +29,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: drm_atomic.c,v 1.11 2021/12/19 00:55:34 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: drm_atomic.c,v 1.12 2021/12/19 11:34:44 riastradh Exp $"); #include <linux/sync_file.h> @@ -52,6 +52,11 @@ void __drm_crtc_commit_free(struct kref struct drm_crtc_commit *commit = container_of(kref, struct drm_crtc_commit, ref); +#ifdef __NetBSD__ + destroy_completion(&commit->flip_done); + destroy_completion(&commit->hw_done); + destroy_completion(&commit->cleanup_done); +#endif kfree(commit); } EXPORT_SYMBOL(__drm_crtc_commit_free); Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_bios.c diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_bios.c:1.5 src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_bios.c:1.6 --- src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_bios.c:1.5 Sat Dec 18 23:45:32 2021 +++ src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_bios.c Sun Dec 19 11:34:44 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: nouveau_bios.c,v 1.5 2021/12/18 23:45:32 riastradh Exp $ */ +/* $NetBSD: nouveau_bios.c,v 1.6 2021/12/19 11:34:44 riastradh Exp $ */ /* * Copyright 2005-2006 Erik Waling @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nouveau_bios.c,v 1.5 2021/12/18 23:45:32 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nouveau_bios.c,v 1.6 2021/12/19 11:34:44 riastradh Exp $"); #include "nouveau_drv.h" #include "nouveau_reg.h" @@ -2132,4 +2132,8 @@ nouveau_bios_init(struct drm_device *dev void nouveau_bios_takedown(struct drm_device *dev) { + struct nouveau_drm *drm = nouveau_drm(dev); + struct nvbios *legacy = &drm->vbios; + + spin_lock_destroy(&legacy->lock); } Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_dmem.c diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_dmem.c:1.2 src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_dmem.c:1.3 --- src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_dmem.c:1.2 Sat Dec 18 23:45:32 2021 +++ src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_dmem.c Sun Dec 19 11:34:44 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: nouveau_dmem.c,v 1.2 2021/12/18 23:45:32 riastradh Exp $ */ +/* $NetBSD: nouveau_dmem.c,v 1.3 2021/12/19 11:34:44 riastradh Exp $ */ /* * Copyright 2018 Red Hat Inc. @@ -22,7 +22,7 @@ * OTHER DEALINGS IN THE SOFTWARE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nouveau_dmem.c,v 1.2 2021/12/18 23:45:32 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nouveau_dmem.c,v 1.3 2021/12/19 11:34:44 riastradh Exp $"); #include "nouveau_dmem.h" #include "nouveau_drv.h" @@ -409,6 +409,7 @@ nouveau_dmem_fini(struct nouveau_drm *dr nouveau_bo_ref(NULL, &chunk->bo); } list_del(&chunk->list); + spin_lock_destroy(&chunk->lock); kfree(chunk); } @@ -558,6 +559,7 @@ nouveau_dmem_init(struct nouveau_drm *dr NV_INFO(drm, "DMEM: registered %ldMB of device memory\n", size >> 20); return; out_free: + mutex_destroy(&drm->dmem->mutex); kfree(drm->dmem); drm->dmem = NULL; } Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_svm.c diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_svm.c:1.2 src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_svm.c:1.3 --- src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_svm.c:1.2 Sat Dec 18 23:45:32 2021 +++ src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_svm.c Sun Dec 19 11:34:44 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: nouveau_svm.c,v 1.2 2021/12/18 23:45:32 riastradh Exp $ */ +/* $NetBSD: nouveau_svm.c,v 1.3 2021/12/19 11:34:44 riastradh Exp $ */ /* * Copyright 2018 Red Hat Inc. @@ -22,7 +22,7 @@ * OTHER DEALINGS IN THE SOFTWARE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nouveau_svm.c,v 1.2 2021/12/18 23:45:32 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nouveau_svm.c,v 1.3 2021/12/19 11:34:44 riastradh Exp $"); #include "nouveau_svm.h" #include "nouveau_drv.h" @@ -305,6 +305,7 @@ nouveau_svmm_fini(struct nouveau_svmm ** svmm->vmm = NULL; mutex_unlock(&svmm->mutex); mmu_notifier_put(&svmm->notifier); + mutex_destroy(&svmm->mutex); *psvmm = NULL; } } @@ -364,6 +365,7 @@ out_mm_unlock: up_write(¤t->mm->mmap_sem); out_free: mutex_unlock(&cli->mutex); + mutex_destroy(&svmm->mutex); kfree(svmm); return ret; } Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_drm.c diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_drm.c:1.22 src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_drm.c:1.23 --- src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_drm.c:1.22 Sun Dec 19 10:51:56 2021 +++ src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_drm.c Sun Dec 19 11:34:44 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: nouveau_drm.c,v 1.22 2021/12/19 10:51:56 riastradh Exp $ */ +/* $NetBSD: nouveau_drm.c,v 1.23 2021/12/19 11:34:44 riastradh Exp $ */ /* * Copyright 2012 Red Hat Inc. @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nouveau_drm.c,v 1.22 2021/12/19 10:51:56 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nouveau_drm.c,v 1.23 2021/12/19 11:34:44 riastradh Exp $"); #include <linux/console.h> #include <linux/delay.h> @@ -203,6 +203,8 @@ nouveau_cli_fini(struct nouveau_cli *cli mutex_lock(&cli->drm->master.lock); nvif_client_fini(&cli->base); mutex_unlock(&cli->drm->master.lock); + mutex_destroy(&cli->lock); + mutex_destroy(&cli->mutex); } static int @@ -610,6 +612,7 @@ fail_bios: nouveau_ttm_fini(drm); fail_ttm: nouveau_vga_fini(drm); + spin_lock_destroy(&drm->tile.lock); nouveau_cli_fini(&drm->client); fail_master: nouveau_cli_fini(&drm->master); @@ -645,6 +648,8 @@ nouveau_drm_device_fini(struct drm_devic nouveau_ttm_fini(drm); nouveau_vga_fini(drm); + spin_lock_destroy(&drm->tile.lock); + nouveau_cli_fini(&drm->client); nouveau_cli_fini(&drm->master); kfree(drm); Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_fbcon.c diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_fbcon.c:1.14 src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_fbcon.c:1.15 --- src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_fbcon.c:1.14 Sun Dec 19 10:51:56 2021 +++ src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_fbcon.c Sun Dec 19 11:34:44 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: nouveau_fbcon.c,v 1.14 2021/12/19 10:51:56 riastradh Exp $ */ +/* $NetBSD: nouveau_fbcon.c,v 1.15 2021/12/19 11:34:44 riastradh Exp $ */ /* * Copyright © 2007 David Airlie @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nouveau_fbcon.c,v 1.14 2021/12/19 10:51:56 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nouveau_fbcon.c,v 1.15 2021/12/19 11:34:44 riastradh Exp $"); #include <linux/module.h> #include <linux/kernel.h> @@ -679,6 +679,7 @@ nouveau_fbcon_fini(struct drm_device *de nouveau_fbcon_accel_fini(dev); nouveau_fbcon_destroy(dev, drm->fbcon); + mutex_destroy(&drm->fbcon->hotplug_lock); kfree(drm->fbcon); drm->fbcon = NULL; } Index: src/sys/external/bsd/drm2/dist/drm/nouveau/dispnv50/nouveau_dispnv50_disp.c diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/dispnv50/nouveau_dispnv50_disp.c:1.5 src/sys/external/bsd/drm2/dist/drm/nouveau/dispnv50/nouveau_dispnv50_disp.c:1.6 --- src/sys/external/bsd/drm2/dist/drm/nouveau/dispnv50/nouveau_dispnv50_disp.c:1.5 Sun Dec 19 10:49:47 2021 +++ src/sys/external/bsd/drm2/dist/drm/nouveau/dispnv50/nouveau_dispnv50_disp.c Sun Dec 19 11:34:44 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: nouveau_dispnv50_disp.c,v 1.5 2021/12/19 10:49:47 riastradh Exp $ */ +/* $NetBSD: nouveau_dispnv50_disp.c,v 1.6 2021/12/19 11:34:44 riastradh Exp $ */ /* * Copyright 2011 Red Hat Inc. @@ -24,7 +24,7 @@ * Authors: Ben Skeggs */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nouveau_dispnv50_disp.c,v 1.5 2021/12/19 10:49:47 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nouveau_dispnv50_disp.c,v 1.6 2021/12/19 11:34:44 riastradh Exp $"); #include "disp.h" #include "atom.h" @@ -2455,6 +2455,7 @@ nv50_display_destroy(struct drm_device * nouveau_bo_ref(NULL, &disp->sync); nouveau_display(dev)->priv = NULL; + mutex_destroy(&disp->mutex); kfree(disp); } Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_client.c diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_client.c:1.5 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_client.c:1.6 --- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_client.c:1.5 Sun Dec 19 10:51:57 2021 +++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_client.c Sun Dec 19 11:34:44 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: nouveau_nvkm_core_client.c,v 1.5 2021/12/19 10:51:57 riastradh Exp $ */ +/* $NetBSD: nouveau_nvkm_core_client.c,v 1.6 2021/12/19 11:34:44 riastradh Exp $ */ /* * Copyright 2012 Red Hat Inc. @@ -24,7 +24,7 @@ * Authors: Ben Skeggs */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_core_client.c,v 1.5 2021/12/19 10:51:57 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_core_client.c,v 1.6 2021/12/19 11:34:44 riastradh Exp $"); #include <core/client.h> #include <core/device.h> @@ -276,6 +276,7 @@ nvkm_client_dtor(struct nvkm_object *obj int i; for (i = 0; i < ARRAY_SIZE(client->notify); i++) nvkm_client_notify_del(client, i); + spin_lock_destroy(&client->lock); return client; } Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_engine.c diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_engine.c:1.4 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_engine.c:1.5 --- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_engine.c:1.4 Sat Dec 18 23:45:34 2021 +++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_engine.c Sun Dec 19 11:34:44 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: nouveau_nvkm_core_engine.c,v 1.4 2021/12/18 23:45:34 riastradh Exp $ */ +/* $NetBSD: nouveau_nvkm_core_engine.c,v 1.5 2021/12/19 11:34:44 riastradh Exp $ */ /* * Copyright 2012 Red Hat Inc. @@ -24,7 +24,7 @@ * Authors: Ben Skeggs */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_core_engine.c,v 1.4 2021/12/18 23:45:34 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_core_engine.c,v 1.5 2021/12/19 11:34:44 riastradh Exp $"); #include <core/engine.h> #include <core/device.h> @@ -159,6 +159,7 @@ static void * nvkm_engine_dtor(struct nvkm_subdev *subdev) { struct nvkm_engine *engine = nvkm_engine(subdev); + spin_lock_destroy(&engine->lock); if (engine->func->dtor) return engine->func->dtor(engine); return engine; Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_subdev.c diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_subdev.c:1.4 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_subdev.c:1.5 --- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_subdev.c:1.4 Sat Dec 18 23:45:34 2021 +++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/core/nouveau_nvkm_core_subdev.c Sun Dec 19 11:34:44 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: nouveau_nvkm_core_subdev.c,v 1.4 2021/12/18 23:45:34 riastradh Exp $ */ +/* $NetBSD: nouveau_nvkm_core_subdev.c,v 1.5 2021/12/19 11:34:44 riastradh Exp $ */ /* * Copyright 2012 Red Hat Inc. @@ -24,13 +24,15 @@ * Authors: Ben Skeggs */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_core_subdev.c,v 1.4 2021/12/18 23:45:34 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_core_subdev.c,v 1.5 2021/12/19 11:34:44 riastradh Exp $"); #include <core/subdev.h> #include <core/device.h> #include <core/option.h> #include <subdev/mc.h> +#include <linux/nbsd-namespace.h> + static struct lock_class_key nvkm_subdev_lock_class[NVKM_SUBDEV_NR]; const char * @@ -208,6 +210,7 @@ nvkm_subdev_del(struct nvkm_subdev **psu *psubdev = subdev->func->dtor(subdev); time = ktime_to_us(ktime_get()) - time; nvkm_trace(subdev, "destroy completed in %"PRId64"us\n", time); + mutex_destroy(&subdev->mutex); kfree(*psubdev); *psubdev = NULL; } Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/nouveau_nvkm_engine_disp_dp.c diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/nouveau_nvkm_engine_disp_dp.c:1.3 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/nouveau_nvkm_engine_disp_dp.c:1.4 --- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/nouveau_nvkm_engine_disp_dp.c:1.3 Sun Dec 19 10:51:57 2021 +++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/nouveau_nvkm_engine_disp_dp.c Sun Dec 19 11:34:45 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: nouveau_nvkm_engine_disp_dp.c,v 1.3 2021/12/19 10:51:57 riastradh Exp $ */ +/* $NetBSD: nouveau_nvkm_engine_disp_dp.c,v 1.4 2021/12/19 11:34:45 riastradh Exp $ */ /* * Copyright 2014 Red Hat Inc. @@ -24,7 +24,7 @@ * Authors: Ben Skeggs */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_engine_disp_dp.c,v 1.3 2021/12/19 10:51:57 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_engine_disp_dp.c,v 1.4 2021/12/19 11:34:45 riastradh Exp $"); #include "dp.h" #include "conn.h" @@ -617,6 +617,7 @@ nvkm_dp_dtor(struct nvkm_outp *outp) { struct nvkm_dp *dp = nvkm_dp(outp); nvkm_notify_fini(&dp->hpd); + mutex_destroy(&dp->mutex); return dp; } Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/fifo/nouveau_nvkm_engine_fifo_base.c diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/fifo/nouveau_nvkm_engine_fifo_base.c:1.3 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/fifo/nouveau_nvkm_engine_fifo_base.c:1.4 --- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/fifo/nouveau_nvkm_engine_fifo_base.c:1.3 Sat Dec 18 23:45:35 2021 +++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/fifo/nouveau_nvkm_engine_fifo_base.c Sun Dec 19 11:34:45 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: nouveau_nvkm_engine_fifo_base.c,v 1.3 2021/12/18 23:45:35 riastradh Exp $ */ +/* $NetBSD: nouveau_nvkm_engine_fifo_base.c,v 1.4 2021/12/19 11:34:45 riastradh Exp $ */ /* * Copyright 2012 Red Hat Inc. @@ -24,7 +24,7 @@ * Authors: Ben Skeggs */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_engine_fifo_base.c,v 1.3 2021/12/18 23:45:35 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_engine_fifo_base.c,v 1.4 2021/12/19 11:34:45 riastradh Exp $"); #include "priv.h" #include "chan.h" @@ -339,6 +339,7 @@ nvkm_fifo_dtor(struct nvkm_engine *engin nvkm_event_fini(&fifo->kevent); nvkm_event_fini(&fifo->cevent); nvkm_event_fini(&fifo->uevent); + spin_lock_destroy(&fifo->lock); return data; } Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/gr/nouveau_nvkm_engine_gr_gf100.c diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/gr/nouveau_nvkm_engine_gr_gf100.c:1.6 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/gr/nouveau_nvkm_engine_gr_gf100.c:1.7 --- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/gr/nouveau_nvkm_engine_gr_gf100.c:1.6 Sun Dec 19 10:51:57 2021 +++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/gr/nouveau_nvkm_engine_gr_gf100.c Sun Dec 19 11:34:45 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: nouveau_nvkm_engine_gr_gf100.c,v 1.6 2021/12/19 10:51:57 riastradh Exp $ */ +/* $NetBSD: nouveau_nvkm_engine_gr_gf100.c,v 1.7 2021/12/19 11:34:45 riastradh Exp $ */ /* * Copyright 2012 Red Hat Inc. @@ -24,7 +24,7 @@ * Authors: Ben Skeggs */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_engine_gr_gf100.c,v 1.6 2021/12/19 10:51:57 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_engine_gr_gf100.c,v 1.7 2021/12/19 11:34:45 riastradh Exp $"); #include "gf100.h" #include "ctxgf100.h" @@ -2033,6 +2033,8 @@ gf100_gr_dtor(struct nvkm_gr *base) vfree(gr->sw_ctx); vfree(gr->sw_nonctx); + mutex_destroy(&gr->fecs.mutex); + return gr; } Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/gr/nouveau_nvkm_engine_gr_nv04.c diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/gr/nouveau_nvkm_engine_gr_nv04.c:1.3 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/gr/nouveau_nvkm_engine_gr_nv04.c:1.4 --- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/gr/nouveau_nvkm_engine_gr_nv04.c:1.3 Sat Dec 18 23:45:36 2021 +++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/gr/nouveau_nvkm_engine_gr_nv04.c Sun Dec 19 11:34:45 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: nouveau_nvkm_engine_gr_nv04.c,v 1.3 2021/12/18 23:45:36 riastradh Exp $ */ +/* $NetBSD: nouveau_nvkm_engine_gr_nv04.c,v 1.4 2021/12/19 11:34:45 riastradh Exp $ */ /* * Copyright 2007 Stephane Marchesin @@ -24,7 +24,7 @@ * DEALINGS IN THE SOFTWARE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_engine_gr_nv04.c,v 1.3 2021/12/18 23:45:36 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_engine_gr_nv04.c,v 1.4 2021/12/19 11:34:45 riastradh Exp $"); #include "priv.h" #include "regs.h" @@ -1366,9 +1366,17 @@ nv04_gr_init(struct nvkm_gr *base) return 0; } +static void * +nv04_gr_dtor(struct nvkm_gr *gr) +{ + spin_lock_destroy(&nv04_gr(gr)->lock); + return gr; +} + static const struct nvkm_gr_func nv04_gr = { .init = nv04_gr_init, + .dtor = nv04_gr_dtor, .intr = nv04_gr_intr, .chan_new = nv04_gr_chan_new, .sclass = { Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/gr/nouveau_nvkm_engine_gr_nv10.c diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/gr/nouveau_nvkm_engine_gr_nv10.c:1.3 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/gr/nouveau_nvkm_engine_gr_nv10.c:1.4 --- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/gr/nouveau_nvkm_engine_gr_nv10.c:1.3 Sat Dec 18 23:45:36 2021 +++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/gr/nouveau_nvkm_engine_gr_nv10.c Sun Dec 19 11:34:45 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: nouveau_nvkm_engine_gr_nv10.c,v 1.3 2021/12/18 23:45:36 riastradh Exp $ */ +/* $NetBSD: nouveau_nvkm_engine_gr_nv10.c,v 1.4 2021/12/19 11:34:45 riastradh Exp $ */ /* * Copyright 2007 Matthieu CASTET <castet.matth...@free.fr> @@ -24,7 +24,7 @@ * DEALINGS IN THE SOFTWARE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_engine_gr_nv10.c,v 1.3 2021/12/18 23:45:36 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_engine_gr_nv10.c,v 1.4 2021/12/19 11:34:45 riastradh Exp $"); #include "nv10.h" #include "regs.h" @@ -1190,9 +1190,17 @@ nv10_gr_new_(const struct nvkm_gr_func * return nvkm_gr_ctor(func, device, index, true, &gr->base); } +static void * +nv10_gr_dtor(struct nvkm_gr *gr) +{ + spin_lock_destroy(&nv10_gr(gr)->lock); + return gr; +} + static const struct nvkm_gr_func nv10_gr = { .init = nv10_gr_init, + .dtor = nv10_gr_dtor, .intr = nv10_gr_intr, .tile = nv10_gr_tile, .chan_new = nv10_gr_chan_new, Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/gr/nouveau_nvkm_engine_gr_nv50.c diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/gr/nouveau_nvkm_engine_gr_nv50.c:1.3 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/gr/nouveau_nvkm_engine_gr_nv50.c:1.4 --- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/gr/nouveau_nvkm_engine_gr_nv50.c:1.3 Sat Dec 18 23:45:36 2021 +++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/gr/nouveau_nvkm_engine_gr_nv50.c Sun Dec 19 11:34:45 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: nouveau_nvkm_engine_gr_nv50.c,v 1.3 2021/12/18 23:45:36 riastradh Exp $ */ +/* $NetBSD: nouveau_nvkm_engine_gr_nv50.c,v 1.4 2021/12/19 11:34:45 riastradh Exp $ */ /* * Copyright 2012 Red Hat Inc. @@ -24,7 +24,7 @@ * Authors: Ben Skeggs */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_engine_gr_nv50.c,v 1.3 2021/12/18 23:45:36 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_engine_gr_nv50.c,v 1.4 2021/12/19 11:34:45 riastradh Exp $"); #include "nv50.h" @@ -778,9 +778,17 @@ nv50_gr_new_(const struct nvkm_gr_func * return nvkm_gr_ctor(func, device, index, true, &gr->base); } +static void * +nv50_gr_dtor(struct nvkm_gr *gr) +{ + spin_lock_destroy(&nv50_gr(gr)->lock); + return gr; +} + static const struct nvkm_gr_func nv50_gr = { .init = nv50_gr_init, + .dtor = nv50_gr_dtor, .intr = nv50_gr_intr, .chan_new = nv50_gr_chan_new, .units = nv50_gr_units, Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/falcon/nouveau_nvkm_falcon_base.c diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/falcon/nouveau_nvkm_falcon_base.c:1.3 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/falcon/nouveau_nvkm_falcon_base.c:1.4 --- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/falcon/nouveau_nvkm_falcon_base.c:1.3 Sun Dec 19 10:51:57 2021 +++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/falcon/nouveau_nvkm_falcon_base.c Sun Dec 19 11:34:45 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: nouveau_nvkm_falcon_base.c,v 1.3 2021/12/19 10:51:57 riastradh Exp $ */ +/* $NetBSD: nouveau_nvkm_falcon_base.c,v 1.4 2021/12/19 11:34:45 riastradh Exp $ */ /* * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. @@ -22,7 +22,7 @@ * DEALINGS IN THE SOFTWARE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_falcon_base.c,v 1.3 2021/12/19 10:51:57 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_falcon_base.c,v 1.4 2021/12/19 11:34:45 riastradh Exp $"); #include "priv.h" @@ -232,6 +232,8 @@ nvkm_falcon_del(struct nvkm_falcon **pfa { if (*pfalcon) { nvkm_falcon_dtor(*pfalcon); + mutex_destroy(&(*pfalcon)->mutex); + mutex_destroy(&(*pfalcon)->dmem_mutex); kfree(*pfalcon); *pfalcon = NULL; } Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/falcon/nouveau_nvkm_falcon_cmdq.c diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/falcon/nouveau_nvkm_falcon_cmdq.c:1.3 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/falcon/nouveau_nvkm_falcon_cmdq.c:1.4 --- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/falcon/nouveau_nvkm_falcon_cmdq.c:1.3 Sun Dec 19 10:51:57 2021 +++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/falcon/nouveau_nvkm_falcon_cmdq.c Sun Dec 19 11:34:45 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: nouveau_nvkm_falcon_cmdq.c,v 1.3 2021/12/19 10:51:57 riastradh Exp $ */ +/* $NetBSD: nouveau_nvkm_falcon_cmdq.c,v 1.4 2021/12/19 11:34:45 riastradh Exp $ */ /* * Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved. @@ -23,7 +23,7 @@ * */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_falcon_cmdq.c,v 1.3 2021/12/19 10:51:57 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_falcon_cmdq.c,v 1.4 2021/12/19 11:34:45 riastradh Exp $"); #include "qmgr.h" @@ -199,6 +199,8 @@ nvkm_falcon_cmdq_del(struct nvkm_falcon_ { struct nvkm_falcon_cmdq *cmdq = *pcmdq; if (cmdq) { + destroy_completion(&cmdq->ready); + mutex_destroy(&cmdq->mutex); kfree(*pcmdq); *pcmdq = NULL; } Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/falcon/nouveau_nvkm_falcon_msgq.c diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/falcon/nouveau_nvkm_falcon_msgq.c:1.3 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/falcon/nouveau_nvkm_falcon_msgq.c:1.4 --- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/falcon/nouveau_nvkm_falcon_msgq.c:1.3 Sun Dec 19 10:51:57 2021 +++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/falcon/nouveau_nvkm_falcon_msgq.c Sun Dec 19 11:34:45 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: nouveau_nvkm_falcon_msgq.c,v 1.3 2021/12/19 10:51:57 riastradh Exp $ */ +/* $NetBSD: nouveau_nvkm_falcon_msgq.c,v 1.4 2021/12/19 11:34:45 riastradh Exp $ */ /* * Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved. @@ -23,7 +23,7 @@ * */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_falcon_msgq.c,v 1.3 2021/12/19 10:51:57 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_falcon_msgq.c,v 1.4 2021/12/19 11:34:45 riastradh Exp $"); #include "qmgr.h" @@ -199,6 +199,7 @@ nvkm_falcon_msgq_del(struct nvkm_falcon_ { struct nvkm_falcon_msgq *msgq = *pmsgq; if (msgq) { + mutex_destroy(&msgq->mutex); kfree(*pmsgq); *pmsgq = NULL; } Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/falcon/nouveau_nvkm_falcon_qmgr.c diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/falcon/nouveau_nvkm_falcon_qmgr.c:1.3 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/falcon/nouveau_nvkm_falcon_qmgr.c:1.4 --- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/falcon/nouveau_nvkm_falcon_qmgr.c:1.3 Sun Dec 19 10:51:57 2021 +++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/falcon/nouveau_nvkm_falcon_qmgr.c Sun Dec 19 11:34:45 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: nouveau_nvkm_falcon_qmgr.c,v 1.3 2021/12/19 10:51:57 riastradh Exp $ */ +/* $NetBSD: nouveau_nvkm_falcon_qmgr.c,v 1.4 2021/12/19 11:34:45 riastradh Exp $ */ /* * Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved. @@ -23,7 +23,7 @@ * */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_falcon_qmgr.c,v 1.3 2021/12/19 10:51:57 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_falcon_qmgr.c,v 1.4 2021/12/19 11:34:45 riastradh Exp $"); #include "qmgr.h" @@ -68,6 +68,7 @@ nvkm_falcon_qmgr_del(struct nvkm_falcon_ { struct nvkm_falcon_qmgr *qmgr = *pqmgr; if (qmgr) { + mutex_destroy(&qmgr->seq.mutex); kfree(*pqmgr); *pqmgr = NULL; } Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/bar/nouveau_nvkm_subdev_bar_base.c diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/bar/nouveau_nvkm_subdev_bar_base.c:1.3 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/bar/nouveau_nvkm_subdev_bar_base.c:1.4 --- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/bar/nouveau_nvkm_subdev_bar_base.c:1.3 Sat Dec 18 23:45:38 2021 +++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/bar/nouveau_nvkm_subdev_bar_base.c Sun Dec 19 11:34:45 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: nouveau_nvkm_subdev_bar_base.c,v 1.3 2021/12/18 23:45:38 riastradh Exp $ */ +/* $NetBSD: nouveau_nvkm_subdev_bar_base.c,v 1.4 2021/12/19 11:34:45 riastradh Exp $ */ /* * Copyright 2012 Red Hat Inc. @@ -24,7 +24,7 @@ * Authors: Ben Skeggs */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_bar_base.c,v 1.3 2021/12/18 23:45:38 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_bar_base.c,v 1.4 2021/12/19 11:34:45 riastradh Exp $"); #include "priv.h" @@ -126,6 +126,7 @@ nvkm_bar_dtor(struct nvkm_subdev *subdev { struct nvkm_bar *bar = nvkm_bar(subdev); nvkm_bar_bar2_fini(subdev->device); + spin_lock_destroy(&bar->lock); return bar->func->dtor(bar); } Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/fuse/nouveau_nvkm_subdev_fuse_base.c diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/fuse/nouveau_nvkm_subdev_fuse_base.c:1.3 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/fuse/nouveau_nvkm_subdev_fuse_base.c:1.4 --- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/fuse/nouveau_nvkm_subdev_fuse_base.c:1.3 Sat Dec 18 23:45:39 2021 +++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/fuse/nouveau_nvkm_subdev_fuse_base.c Sun Dec 19 11:34:45 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: nouveau_nvkm_subdev_fuse_base.c,v 1.3 2021/12/18 23:45:39 riastradh Exp $ */ +/* $NetBSD: nouveau_nvkm_subdev_fuse_base.c,v 1.4 2021/12/19 11:34:45 riastradh Exp $ */ /* * Copyright 2014 Martin Peres @@ -24,7 +24,7 @@ * Authors: Martin Peres */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_fuse_base.c,v 1.3 2021/12/18 23:45:39 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_fuse_base.c,v 1.4 2021/12/19 11:34:45 riastradh Exp $"); #include "priv.h" @@ -37,6 +37,7 @@ nvkm_fuse_read(struct nvkm_fuse *fuse, u static void * nvkm_fuse_dtor(struct nvkm_subdev *subdev) { + spin_lock_destroy(&nvkm_fuse(subdev)->lock); return nvkm_fuse(subdev); } Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_base.c diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_base.c:1.7 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_base.c:1.8 --- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_base.c:1.7 Sun Dec 19 10:51:58 2021 +++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_base.c Sun Dec 19 11:34:45 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: nouveau_nvkm_subdev_instmem_base.c,v 1.7 2021/12/19 10:51:58 riastradh Exp $ */ +/* $NetBSD: nouveau_nvkm_subdev_instmem_base.c,v 1.8 2021/12/19 11:34:45 riastradh Exp $ */ /* * Copyright 2012 Red Hat Inc. @@ -24,7 +24,7 @@ * Authors: Ben Skeggs */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_instmem_base.c,v 1.7 2021/12/19 10:51:58 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_instmem_base.c,v 1.8 2021/12/19 11:34:45 riastradh Exp $"); #include "priv.h" @@ -264,6 +264,7 @@ static void * nvkm_instmem_dtor(struct nvkm_subdev *subdev) { struct nvkm_instmem *imem = nvkm_instmem(subdev); + spin_lock_destroy(&imem->lock); if (imem->func->dtor) return imem->func->dtor(imem); return imem; Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_gk20a.c diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_gk20a.c:1.7 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_gk20a.c:1.8 --- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_gk20a.c:1.7 Sun Dec 19 10:51:58 2021 +++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_gk20a.c Sun Dec 19 11:34:45 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: nouveau_nvkm_subdev_instmem_gk20a.c,v 1.7 2021/12/19 10:51:58 riastradh Exp $ */ +/* $NetBSD: nouveau_nvkm_subdev_instmem_gk20a.c,v 1.8 2021/12/19 11:34:45 riastradh Exp $ */ /* * Copyright (c) 2015, NVIDIA CORPORATION. All rights reserved. @@ -44,7 +44,7 @@ * goes beyond a certain threshold. At the moment this limit is 1MB. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_instmem_gk20a.c,v 1.7 2021/12/19 10:51:58 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_instmem_gk20a.c,v 1.8 2021/12/19 11:34:45 riastradh Exp $"); #include "priv.h" @@ -662,6 +662,8 @@ gk20a_instmem_dtor(struct nvkm_instmem * nvkm_warn(&base->subdev, "instobj vmap area not empty! " "0x%x bytes still mapped\n", imem->vaddr_use); + mutex_destroy(&imem->lock); + return imem; } Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mc/nouveau_nvkm_subdev_mc_base.c diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mc/nouveau_nvkm_subdev_mc_base.c:1.3 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mc/nouveau_nvkm_subdev_mc_base.c:1.4 --- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mc/nouveau_nvkm_subdev_mc_base.c:1.3 Sat Dec 18 23:45:40 2021 +++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mc/nouveau_nvkm_subdev_mc_base.c Sun Dec 19 11:34:45 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: nouveau_nvkm_subdev_mc_base.c,v 1.3 2021/12/18 23:45:40 riastradh Exp $ */ +/* $NetBSD: nouveau_nvkm_subdev_mc_base.c,v 1.4 2021/12/19 11:34:45 riastradh Exp $ */ /* * Copyright 2012 Red Hat Inc. @@ -24,7 +24,7 @@ * Authors: Ben Skeggs */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_mc_base.c,v 1.3 2021/12/18 23:45:40 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_mc_base.c,v 1.4 2021/12/19 11:34:45 riastradh Exp $"); #include "priv.h" @@ -199,6 +199,9 @@ nvkm_mc_init(struct nvkm_subdev *subdev) static void * nvkm_mc_dtor(struct nvkm_subdev *subdev) { + struct nvkm_mc *mc = nvkm_mc(subdev); + if (mc->func->dtor) + return mc->func->dtor(mc); return nvkm_mc(subdev); } Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mc/priv.h diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mc/priv.h:1.3 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mc/priv.h:1.4 --- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mc/priv.h:1.3 Sat Dec 18 23:45:40 2021 +++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mc/priv.h Sun Dec 19 11:34:45 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: priv.h,v 1.3 2021/12/18 23:45:40 riastradh Exp $ */ +/* $NetBSD: priv.h,v 1.4 2021/12/19 11:34:45 riastradh Exp $ */ /* SPDX-License-Identifier: MIT */ #ifndef __NVKM_MC_PRIV_H__ @@ -19,6 +19,7 @@ struct nvkm_mc_map { struct nvkm_mc_func { void (*init)(struct nvkm_mc *); + void *(*dtor)(struct nvkm_mc *); const struct nvkm_mc_map *intr; /* disable reporting of interrupts to host */ void (*intr_unarm)(struct nvkm_mc *); Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mc/nouveau_nvkm_subdev_mc_gp100.c diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mc/nouveau_nvkm_subdev_mc_gp100.c:1.2 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mc/nouveau_nvkm_subdev_mc_gp100.c:1.3 --- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mc/nouveau_nvkm_subdev_mc_gp100.c:1.2 Sat Dec 18 23:45:40 2021 +++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mc/nouveau_nvkm_subdev_mc_gp100.c Sun Dec 19 11:34:45 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: nouveau_nvkm_subdev_mc_gp100.c,v 1.2 2021/12/18 23:45:40 riastradh Exp $ */ +/* $NetBSD: nouveau_nvkm_subdev_mc_gp100.c,v 1.3 2021/12/19 11:34:45 riastradh Exp $ */ /* * Copyright 2012 Red Hat Inc. @@ -24,7 +24,7 @@ * Authors: Ben Skeggs */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_mc_gp100.c,v 1.2 2021/12/18 23:45:40 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_mc_gp100.c,v 1.3 2021/12/19 11:34:45 riastradh Exp $"); #define gp100_mc(p) container_of((p), struct gp100_mc, base) #include "priv.h" @@ -98,9 +98,17 @@ gp100_mc_intr[] = { {}, }; +static void * +nv50_mc_dtor(struct nvkm_mc *mc) +{ + spin_lock_destroy(&gp100_mc(mc)->lock); + return mc; +} + static const struct nvkm_mc_func gp100_mc = { .init = nv50_mc_init, + .dtor = nv50_mc_dtor, .intr = gp100_mc_intr, .intr_unarm = gp100_mc_intr_unarm, .intr_rearm = gp100_mc_intr_rearm, Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mmu/nouveau_nvkm_subdev_mmu_vmm.c diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mmu/nouveau_nvkm_subdev_mmu_vmm.c:1.3 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mmu/nouveau_nvkm_subdev_mmu_vmm.c:1.4 --- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mmu/nouveau_nvkm_subdev_mmu_vmm.c:1.3 Sun Dec 19 10:51:58 2021 +++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mmu/nouveau_nvkm_subdev_mmu_vmm.c Sun Dec 19 11:34:46 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: nouveau_nvkm_subdev_mmu_vmm.c,v 1.3 2021/12/19 10:51:58 riastradh Exp $ */ +/* $NetBSD: nouveau_nvkm_subdev_mmu_vmm.c,v 1.4 2021/12/19 11:34:46 riastradh Exp $ */ /* * Copyright 2017 Red Hat Inc. @@ -22,7 +22,7 @@ * OTHER DEALINGS IN THE SOFTWARE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_mmu_vmm.c,v 1.3 2021/12/19 10:51:58 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_mmu_vmm.c,v 1.4 2021/12/19 11:34:46 riastradh Exp $"); #define NVKM_VMM_LEVELS_MAX 5 #include "vmm.h" @@ -1138,6 +1138,8 @@ nvkm_vmm_dtor(struct nvkm_vmm *vmm) nvkm_mmu_ptc_put(vmm->mmu, true, &vmm->pd->pt[0]); nvkm_vmm_pt_del(&vmm->pd); } + + mutex_destroy(&vmm->mutex); } static int Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/therm/nouveau_nvkm_subdev_therm_base.c diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/therm/nouveau_nvkm_subdev_therm_base.c:1.3 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/therm/nouveau_nvkm_subdev_therm_base.c:1.4 --- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/therm/nouveau_nvkm_subdev_therm_base.c:1.3 Sat Dec 18 23:45:41 2021 +++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/therm/nouveau_nvkm_subdev_therm_base.c Sun Dec 19 11:34:46 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: nouveau_nvkm_subdev_therm_base.c,v 1.3 2021/12/18 23:45:41 riastradh Exp $ */ +/* $NetBSD: nouveau_nvkm_subdev_therm_base.c,v 1.4 2021/12/19 11:34:46 riastradh Exp $ */ /* * Copyright 2012 The Nouveau community @@ -24,7 +24,7 @@ * Authors: Martin Peres */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_therm_base.c,v 1.3 2021/12/18 23:45:41 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_therm_base.c,v 1.4 2021/12/19 11:34:46 riastradh Exp $"); #include "priv.h" @@ -414,7 +414,10 @@ static void * nvkm_therm_dtor(struct nvkm_subdev *subdev) { struct nvkm_therm *therm = nvkm_therm(subdev); + nvkm_therm_fan_dtor(therm); kfree(therm->fan); + spin_lock_destroy(&therm->sensor.alarm_program_lock); + spin_lock_destroy(&therm->lock); return therm; } Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/therm/nouveau_nvkm_subdev_therm_fan.c diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/therm/nouveau_nvkm_subdev_therm_fan.c:1.3 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/therm/nouveau_nvkm_subdev_therm_fan.c:1.4 --- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/therm/nouveau_nvkm_subdev_therm_fan.c:1.3 Sat Dec 18 23:45:41 2021 +++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/therm/nouveau_nvkm_subdev_therm_fan.c Sun Dec 19 11:34:46 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: nouveau_nvkm_subdev_therm_fan.c,v 1.3 2021/12/18 23:45:41 riastradh Exp $ */ +/* $NetBSD: nouveau_nvkm_subdev_therm_fan.c,v 1.4 2021/12/19 11:34:46 riastradh Exp $ */ /* * Copyright 2012 Red Hat Inc. @@ -25,7 +25,7 @@ * Martin Peres */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_therm_fan.c,v 1.3 2021/12/18 23:45:41 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_therm_fan.c,v 1.4 2021/12/19 11:34:46 riastradh Exp $"); #include "priv.h" @@ -228,6 +228,14 @@ nvkm_therm_fan_fini(struct nvkm_therm *t return 0; } +void +nvkm_therm_fan_dtor(struct nvkm_therm *therm) +{ + if (therm->fan->dtor) + therm->fan->dtor(therm->fan); + spin_lock_destroy(&therm->fan->lock); +} + int nvkm_therm_fan_ctor(struct nvkm_therm *therm) { Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/therm/nouveau_nvkm_subdev_therm_fantog.c diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/therm/nouveau_nvkm_subdev_therm_fantog.c:1.3 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/therm/nouveau_nvkm_subdev_therm_fantog.c:1.4 --- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/therm/nouveau_nvkm_subdev_therm_fantog.c:1.3 Sat Dec 18 23:45:41 2021 +++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/therm/nouveau_nvkm_subdev_therm_fantog.c Sun Dec 19 11:34:46 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: nouveau_nvkm_subdev_therm_fantog.c,v 1.3 2021/12/18 23:45:41 riastradh Exp $ */ +/* $NetBSD: nouveau_nvkm_subdev_therm_fantog.c,v 1.4 2021/12/19 11:34:46 riastradh Exp $ */ /* * Copyright 2012 The Nouveau community @@ -24,7 +24,7 @@ * Authors: Martin Peres */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_therm_fantog.c,v 1.3 2021/12/18 23:45:41 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_therm_fantog.c,v 1.4 2021/12/19 11:34:46 riastradh Exp $"); #include "priv.h" @@ -92,6 +92,13 @@ nvkm_fantog_set(struct nvkm_therm *therm return 0; } +static void +nvkm_fantog_dtor(struct nvkm_fan *base) +{ + struct nvkm_fantog *fan = container_of(base, struct nvkm_fantog, base); + spin_lock_destroy(&fan->lock); +} + int nvkm_fantog_create(struct nvkm_therm *therm, struct dcb_gpio_func *func) { @@ -112,6 +119,7 @@ nvkm_fantog_create(struct nvkm_therm *th fan->base.type = "toggle"; fan->base.get = nvkm_fantog_get; fan->base.set = nvkm_fantog_set; + fan->base.dtor = nvkm_fantog_dtor; nvkm_alarm_init(&fan->alarm, nvkm_fantog_alarm); fan->period_us = 100000; /* 10Hz */ fan->percent = 100; Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/therm/priv.h diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/therm/priv.h:1.3 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/therm/priv.h:1.4 --- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/therm/priv.h:1.3 Sat Dec 18 23:45:41 2021 +++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/therm/priv.h Sun Dec 19 11:34:46 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: priv.h,v 1.3 2021/12/18 23:45:41 riastradh Exp $ */ +/* $NetBSD: priv.h,v 1.4 2021/12/19 11:34:46 riastradh Exp $ */ #ifndef __NVTHERM_PRIV_H__ #define __NVTHERM_PRIV_H__ @@ -50,6 +50,7 @@ struct nvkm_fan { int (*get)(struct nvkm_therm *); int (*set)(struct nvkm_therm *, int percent); + void (*dtor)(struct nvkm_fan *); struct dcb_gpio_func tach; }; @@ -63,6 +64,7 @@ void nvkm_therm_ic_ctor(struct nvkm_ther int nvkm_therm_sensor_ctor(struct nvkm_therm *); int nvkm_therm_fan_ctor(struct nvkm_therm *); +void nvkm_therm_fan_dtor(struct nvkm_therm *); int nvkm_therm_fan_init(struct nvkm_therm *); int nvkm_therm_fan_fini(struct nvkm_therm *, bool suspend); int nvkm_therm_fan_get(struct nvkm_therm *); Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/timer/nouveau_nvkm_subdev_timer_base.c diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/timer/nouveau_nvkm_subdev_timer_base.c:1.5 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/timer/nouveau_nvkm_subdev_timer_base.c:1.6 --- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/timer/nouveau_nvkm_subdev_timer_base.c:1.5 Sun Dec 19 10:51:59 2021 +++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/timer/nouveau_nvkm_subdev_timer_base.c Sun Dec 19 11:34:46 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: nouveau_nvkm_subdev_timer_base.c,v 1.5 2021/12/19 10:51:59 riastradh Exp $ */ +/* $NetBSD: nouveau_nvkm_subdev_timer_base.c,v 1.6 2021/12/19 11:34:46 riastradh Exp $ */ /* * Copyright 2012 Red Hat Inc. @@ -24,7 +24,7 @@ * Authors: Ben Skeggs */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_timer_base.c,v 1.5 2021/12/19 10:51:59 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_timer_base.c,v 1.6 2021/12/19 11:34:46 riastradh Exp $"); #include "priv.h" @@ -176,6 +176,7 @@ nvkm_timer_init(struct nvkm_subdev *subd static void * nvkm_timer_dtor(struct nvkm_subdev *subdev) { + spin_lock_destroy(&nvkm_timer(subdev)->lock); return nvkm_timer(subdev); }