Module Name:    src
Committed By:   riastradh
Date:           Sat Jun 12 12:12:11 UTC 2021

Modified Files:
        src/sys/kern: kern_drvctl.c subr_autoconf.c

Log Message:
autoconf(9), drvctl(4): Sprinkle kernel lock assertions.


To generate a diff of this commit:
cvs rdiff -u -r1.46 -r1.47 src/sys/kern/kern_drvctl.c
cvs rdiff -u -r1.281 -r1.282 src/sys/kern/subr_autoconf.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/kern/kern_drvctl.c
diff -u src/sys/kern/kern_drvctl.c:1.46 src/sys/kern/kern_drvctl.c:1.47
--- src/sys/kern/kern_drvctl.c:1.46	Sat Jun 12 12:11:59 2021
+++ src/sys/kern/kern_drvctl.c	Sat Jun 12 12:12:11 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: kern_drvctl.c,v 1.46 2021/06/12 12:11:59 riastradh Exp $ */
+/* $NetBSD: kern_drvctl.c,v 1.47 2021/06/12 12:12:11 riastradh Exp $ */
 
 /*
  * Copyright (c) 2004
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_drvctl.c,v 1.46 2021/06/12 12:11:59 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_drvctl.c,v 1.47 2021/06/12 12:12:11 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -195,6 +195,8 @@ pmdevbyname(u_long cmd, struct devpmargs
 {
 	device_t d;
 
+	KASSERT(KERNEL_LOCKED_P());
+
 	if ((d = device_find_by_xname(a->devname)) == NULL)
 		return ENXIO;
 
@@ -221,6 +223,8 @@ listdevbyname(struct devlistargs *l)
 	deviter_t di;
 	int cnt = 0, idx, error = 0;
 
+	KASSERT(KERNEL_LOCKED_P());
+
 	if (*l->l_devname == '\0')
 		d = NULL;
 	else if (memchr(l->l_devname, 0, sizeof(l->l_devname)) == NULL)
@@ -251,6 +255,8 @@ detachdevbyname(const char *devname)
 {
 	device_t d;
 
+	KASSERT(KERNEL_LOCKED_P());
+
 	if ((d = device_find_by_xname(devname)) == NULL)
 		return ENXIO;
 
@@ -275,6 +281,8 @@ rescanbus(const char *busname, const cha
 	device_t d;
 	const struct cfiattrdata * const *ap;
 
+	KASSERT(KERNEL_LOCKED_P());
+
 	/* XXX there should be a way to get limits and defaults (per device)
 	   from config generated data */
 	int locs[MAXLOCATORS];

Index: src/sys/kern/subr_autoconf.c
diff -u src/sys/kern/subr_autoconf.c:1.281 src/sys/kern/subr_autoconf.c:1.282
--- src/sys/kern/subr_autoconf.c:1.281	Sat Jun 12 12:11:49 2021
+++ src/sys/kern/subr_autoconf.c	Sat Jun 12 12:12:11 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: subr_autoconf.c,v 1.281 2021/06/12 12:11:49 riastradh Exp $ */
+/* $NetBSD: subr_autoconf.c,v 1.282 2021/06/12 12:12:11 riastradh Exp $ */
 
 /*
  * Copyright (c) 1996, 2000 Christopher G. Demetriou
@@ -79,7 +79,7 @@
 #define	__SUBR_AUTOCONF_PRIVATE	/* see <sys/device.h> */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: subr_autoconf.c,v 1.281 2021/06/12 12:11:49 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_autoconf.c,v 1.282 2021/06/12 12:12:11 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ddb.h"
@@ -377,6 +377,8 @@ config_init_component(struct cfdriver * 
 {
 	int error;
 
+	KASSERT(KERNEL_LOCKED_P());
+
 	if ((error = frob_cfdrivervec(cfdriverv,
 	    config_cfdriver_attach, config_cfdriver_detach, "init", false))!= 0)
 		return error;
@@ -404,6 +406,8 @@ config_fini_component(struct cfdriver * 
 {
 	int error;
 
+	KASSERT(KERNEL_LOCKED_P());
+
 	if ((error = config_cfdata_detach(cfdatav)) != 0)
 		return error;
 	if ((error = frob_cfattachvec(cfattachv,
@@ -439,6 +443,9 @@ config_init_mi(void)
 void
 config_deferred(device_t dev)
 {
+
+	KASSERT(KERNEL_LOCKED_P());
+
 	config_process_deferred(&deferred_config_queue, dev);
 	config_process_deferred(&interrupt_config_queue, dev);
 	config_process_deferred(&mountroot_config_queue, dev);
@@ -906,6 +913,7 @@ rescan_with_cfdata(const struct cfdata *
 	const struct cfdata *cf1;
 	deviter_t di;
 
+	KASSERT(KERNEL_LOCKED_P());
 
 	/*
 	 * "alldevs" is likely longer than a modules's cfdata, so make it
@@ -939,6 +947,8 @@ config_cfdata_attach(cfdata_t cf, int sc
 {
 	struct cftable *ct;
 
+	KASSERT(KERNEL_LOCKED_P());
+
 	ct = kmem_alloc(sizeof(*ct), KM_SLEEP);
 	ct->ct_cfdata = cf;
 	TAILQ_INSERT_TAIL(&allcftables, ct, ct_list);
@@ -1011,6 +1021,8 @@ config_match(device_t parent, cfdata_t c
 {
 	struct cfattach *ca;
 
+	KASSERT(KERNEL_LOCKED_P());
+
 	ca = config_cfattach_lookup(cf->cf_name, cf->cf_atname);
 	if (ca == NULL) {
 		/* No attachment for this entry, oh well. */
@@ -1710,6 +1722,8 @@ config_vattach(device_t parent, cfdata_t
 	struct cftable *ct;
 	const char *drvname;
 
+	KASSERT(KERNEL_LOCKED_P());
+
 	dev = config_vdevalloc(parent, cf, tag, ap);
 	if (!dev)
 		panic("config_attach: allocation of device softc failed");
@@ -1782,6 +1796,8 @@ config_attach(device_t parent, cfdata_t 
 	device_t dev;
 	va_list ap;
 
+	KASSERT(KERNEL_LOCKED_P());
+
 	va_start(ap, tag);
 	dev = config_vattach(parent, cf, aux, print, tag, ap);
 	va_end(ap);
@@ -1803,6 +1819,8 @@ config_attach_pseudo(cfdata_t cf)
 {
 	device_t dev;
 
+	KASSERT(KERNEL_LOCKED_P());
+
 	dev = config_devalloc(ROOT, cf, CFARG_EOL);
 	if (!dev)
 		return NULL;
@@ -1886,6 +1904,8 @@ config_detach(device_t dev, int flags)
 	device_t d __diagused;
 	int rv = 0;
 
+	KASSERT(KERNEL_LOCKED_P());
+
 	cf = dev->dv_cfdata;
 	KASSERTMSG((cf == NULL || cf->cf_fstate == FSTATE_FOUND ||
 		cf->cf_fstate == FSTATE_STAR),
@@ -2007,6 +2027,8 @@ config_detach_children(device_t parent, 
 	deviter_t di;
 	int error = 0;
 
+	KASSERT(KERNEL_LOCKED_P());
+
 	for (dv = deviter_first(&di, DEVITER_F_RW); dv != NULL;
 	     dv = deviter_next(&di)) {
 		if (device_parent(dv) != parent)
@@ -2228,6 +2250,8 @@ config_process_deferred(struct deferred_
 {
 	struct deferred_config *dc;
 
+	KASSERT(KERNEL_LOCKED_P());
+
 	mutex_enter(&config_misc_lock);
 	dc = TAILQ_FIRST(queue);
 	while (dc) {

Reply via email to