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(&current->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);
 }
 

Reply via email to