Module Name: src
Committed By: pgoyette
Date: Wed Jul 20 23:50:56 UTC 2016
Modified Files:
src/sys/arch/acorn32/mainbus [pgoyette-localcount]: fd.c
src/sys/arch/alpha/alpha [pgoyette-localcount]: machdep.c
src/sys/arch/amd64/amd64 [pgoyette-localcount]: machdep.c
src/sys/arch/amiga/amiga [pgoyette-localcount]: machdep.c
src/sys/arch/amiga/dev [pgoyette-localcount]: ser.c
src/sys/arch/arm/arm32 [pgoyette-localcount]: stubs.c
src/sys/arch/atari/atari [pgoyette-localcount]: autoconf.c machdep.c
src/sys/arch/atari/dev [pgoyette-localcount]: md_root.c
src/sys/arch/cesfic/cesfic [pgoyette-localcount]: machdep.c
src/sys/arch/hp300/dev [pgoyette-localcount]: dcm.c
src/sys/arch/hp300/hp300 [pgoyette-localcount]: machdep.c
src/sys/arch/hppa/hppa [pgoyette-localcount]: machdep.c
src/sys/arch/i386/i386 [pgoyette-localcount]: dumpsys.c
src/sys/arch/luna68k/luna68k [pgoyette-localcount]: machdep.c
src/sys/arch/mac68k/dev [pgoyette-localcount]: zs_kgdb.c
src/sys/arch/mac68k/mac68k [pgoyette-localcount]: machdep.c
src/sys/arch/mips/mips [pgoyette-localcount]: mips_machdep.c
src/sys/arch/mipsco/obio [pgoyette-localcount]: zs_kgdb.c
src/sys/arch/mvme68k/mvme68k [pgoyette-localcount]: machdep.c
src/sys/arch/news68k/news68k [pgoyette-localcount]: machdep.c
src/sys/arch/next68k/dev [pgoyette-localcount]: zs_kgdb.c
src/sys/arch/next68k/next68k [pgoyette-localcount]: machdep.c
src/sys/arch/sgimips/dev [pgoyette-localcount]: zs_kgdb.c
src/sys/arch/sparc/dev [pgoyette-localcount]: zs_kgdb.c
src/sys/arch/sparc/sparc [pgoyette-localcount]: machdep.c
src/sys/arch/sparc64/sparc64 [pgoyette-localcount]: machdep.c
src/sys/arch/sun2/dev [pgoyette-localcount]: consinit.c zs_kgdb.c
src/sys/arch/sun2/sun2 [pgoyette-localcount]: machdep.c
src/sys/arch/sun3/dev [pgoyette-localcount]: zs_kgdb.c
src/sys/arch/sun3/sun3 [pgoyette-localcount]: machdep.c
src/sys/arch/sun3/sun3x [pgoyette-localcount]: machdep.c
src/sys/arch/vax/vax [pgoyette-localcount]: machdep.c
src/sys/arch/x68k/x68k [pgoyette-localcount]: machdep.c
src/sys/arch/xen/xen [pgoyette-localcount]: xbdback_xenbus.c
Log Message:
Adapt the machine/arch dependent code to the new {b,c}devsw reference
counting.
XXX Most of these will require testing by someone other than myself, as
I have a limited selection of hardware!
To generate a diff of this commit:
cvs rdiff -u -r1.58.2.2 -r1.58.2.3 src/sys/arch/acorn32/mainbus/fd.c
cvs rdiff -u -r1.346 -r1.346.4.1 src/sys/arch/alpha/alpha/machdep.c
cvs rdiff -u -r1.223 -r1.223.2.1 src/sys/arch/amd64/amd64/machdep.c
cvs rdiff -u -r1.246 -r1.246.2.1 src/sys/arch/amiga/amiga/machdep.c
cvs rdiff -u -r1.83.8.1 -r1.83.8.2 src/sys/arch/amiga/dev/ser.c
cvs rdiff -u -r1.24 -r1.24.18.1 src/sys/arch/arm/arm32/stubs.c
cvs rdiff -u -r1.65 -r1.65.10.1 src/sys/arch/atari/atari/autoconf.c
cvs rdiff -u -r1.177 -r1.177.10.1 src/sys/arch/atari/atari/machdep.c
cvs rdiff -u -r1.33 -r1.33.44.1 src/sys/arch/atari/dev/md_root.c
cvs rdiff -u -r1.66 -r1.66.2.1 src/sys/arch/cesfic/cesfic/machdep.c
cvs rdiff -u -r1.88 -r1.88.4.1 src/sys/arch/hp300/dev/dcm.c
cvs rdiff -u -r1.229 -r1.229.8.1 src/sys/arch/hp300/hp300/machdep.c
cvs rdiff -u -r1.6 -r1.6.2.1 src/sys/arch/hppa/hppa/machdep.c
cvs rdiff -u -r1.16 -r1.16.28.1 src/sys/arch/i386/i386/dumpsys.c
cvs rdiff -u -r1.99 -r1.99.2.1 src/sys/arch/luna68k/luna68k/machdep.c
cvs rdiff -u -r1.11 -r1.11.68.1 src/sys/arch/mac68k/dev/zs_kgdb.c
cvs rdiff -u -r1.349 -r1.349.2.1 src/sys/arch/mac68k/mac68k/machdep.c
cvs rdiff -u -r1.272 -r1.272.2.1 src/sys/arch/mips/mips/mips_machdep.c
cvs rdiff -u -r1.10 -r1.10.44.1 src/sys/arch/mipsco/obio/zs_kgdb.c
cvs rdiff -u -r1.154 -r1.154.2.1 src/sys/arch/mvme68k/mvme68k/machdep.c
cvs rdiff -u -r1.101 -r1.101.10.1 src/sys/arch/news68k/news68k/machdep.c
cvs rdiff -u -r1.12 -r1.12.68.1 src/sys/arch/next68k/dev/zs_kgdb.c
cvs rdiff -u -r1.111 -r1.111.10.1 src/sys/arch/next68k/next68k/machdep.c
cvs rdiff -u -r1.15 -r1.15.44.1 src/sys/arch/sgimips/dev/zs_kgdb.c
cvs rdiff -u -r1.21 -r1.21.44.1 src/sys/arch/sparc/dev/zs_kgdb.c
cvs rdiff -u -r1.327 -r1.327.4.1 src/sys/arch/sparc/sparc/machdep.c
cvs rdiff -u -r1.285 -r1.285.2.1 src/sys/arch/sparc64/sparc64/machdep.c
cvs rdiff -u -r1.9 -r1.9.20.1 src/sys/arch/sun2/dev/consinit.c
cvs rdiff -u -r1.10 -r1.10.68.1 src/sys/arch/sun2/dev/zs_kgdb.c
cvs rdiff -u -r1.77 -r1.77.10.1 src/sys/arch/sun2/sun2/machdep.c
cvs rdiff -u -r1.26 -r1.26.18.1 src/sys/arch/sun3/dev/zs_kgdb.c
cvs rdiff -u -r1.208 -r1.208.10.1 src/sys/arch/sun3/sun3/machdep.c
cvs rdiff -u -r1.135 -r1.135.10.1 src/sys/arch/sun3/sun3x/machdep.c
cvs rdiff -u -r1.191 -r1.191.2.1 src/sys/arch/vax/vax/machdep.c
cvs rdiff -u -r1.193 -r1.193.2.1 src/sys/arch/x68k/x68k/machdep.c
cvs rdiff -u -r1.62 -r1.62.2.1 src/sys/arch/xen/xen/xbdback_xenbus.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/arch/acorn32/mainbus/fd.c
diff -u src/sys/arch/acorn32/mainbus/fd.c:1.58.2.2 src/sys/arch/acorn32/mainbus/fd.c:1.58.2.3
--- src/sys/arch/acorn32/mainbus/fd.c:1.58.2.2 Wed Jul 20 02:06:15 2016
+++ src/sys/arch/acorn32/mainbus/fd.c Wed Jul 20 23:50:53 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: fd.c,v 1.58.2.2 2016/07/20 02:06:15 pgoyette Exp $ */
+/* $NetBSD: fd.c,v 1.58.2.3 2016/07/20 23:50:53 pgoyette Exp $ */
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -82,7 +82,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fd.c,v 1.58.2.2 2016/07/20 02:06:15 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fd.c,v 1.58.2.3 2016/07/20 23:50:53 pgoyette Exp $");
#include "opt_ddb.h"
@@ -1543,18 +1543,24 @@ load_memory_disc_from_floppy(struct md_c
int s;
int type;
int floppysize;
+ const struct bdevsw *bdev;
- if (bdevsw_lookup(dev) != &fd_bdevsw)
+ if ((bdev = bdevsw_lookup_acquire(dev)) != &fd_bdevsw) {
+ bdevsw_release(bdev);
return(EINVAL);
+ }
- if (md->md_type == MD_UNCONFIGURED || md->md_addr == 0)
+ if (md->md_type == MD_UNCONFIGURED || md->md_addr == 0) {
+ bdevsw_release(bdev);
return(EBUSY);
+ }
type = FDTYPE(dev) - 1;
if (type < 0) type = 0;
floppysize = fd_types[type].size << (fd_types[type].secsize + 7);
if (md->md_size < floppysize) {
+ bdevsw_release(bdev);
printf("Memory disc is not big enough for floppy image\n");
return(EINVAL);
}
@@ -1575,8 +1581,9 @@ load_memory_disc_from_floppy(struct md_c
if (fdopen(bp->b_dev, 0, 0, curlwp) != 0) {
brelse(bp, 0);
+ bdevsw_release(bdev);
printf("Cannot open floppy device\n");
- return(EINVAL);
+ return(EINVAL);
}
for (loop = 0;
@@ -1606,5 +1613,6 @@ load_memory_disc_from_floppy(struct md_c
brelse(bp, 0);
splx(s);
+ bdevsw_release(bdev);
return(0);
}
Index: src/sys/arch/alpha/alpha/machdep.c
diff -u src/sys/arch/alpha/alpha/machdep.c:1.346 src/sys/arch/alpha/alpha/machdep.c:1.346.4.1
--- src/sys/arch/alpha/alpha/machdep.c:1.346 Fri Oct 17 18:14:42 2014
+++ src/sys/arch/alpha/alpha/machdep.c Wed Jul 20 23:50:53 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.346 2014/10/17 18:14:42 uebayasi Exp $ */
+/* $NetBSD: machdep.c,v 1.346.4.1 2016/07/20 23:50:53 pgoyette Exp $ */
/*-
* Copyright (c) 1998, 1999, 2000 The NetBSD Foundation, Inc.
@@ -68,7 +68,7 @@
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.346 2014/10/17 18:14:42 uebayasi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.346.4.1 2016/07/20 23:50:53 pgoyette Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -1116,9 +1116,9 @@ cpu_dump(void)
cpu_kcore_hdr_t *cpuhdrp;
phys_ram_seg_t *memsegp;
const struct bdevsw *bdev;
- int i;
+ int i, error;
- bdev = bdevsw_lookup(dumpdev);
+ bdev = bdevsw_lookup_acquire(dumpdev);
if (bdev == NULL)
return (ENXIO);
dump = bdev->d_dump;
@@ -1150,7 +1150,9 @@ cpu_dump(void)
memsegp[i].size = mem_clusters[i].size & ~PAGE_MASK;
}
- return (dump(dumpdev, dumplo, (void *)buf, dbtob(1)));
+ error = (dump(dumpdev, dumplo, (void *)buf, dbtob(1)));
+ bdevsw_release(bdev);
+ return error;
}
/*
@@ -1213,9 +1215,13 @@ dumpsys(void)
if (dumpdev == NODEV)
return;
- bdev = bdevsw_lookup(dumpdev);
- if (bdev == NULL || bdev->d_psize == NULL)
+ bdev = bdevsw_lookup_acquire(dumpdev);
+ if (bdev == NULL)
+ return;
+ if (bdev->d_psize == NULL) {
+ bdevsw_release(bdev);
return;
+ }
/*
* For dumps during autoconfiguration,
@@ -1224,6 +1230,7 @@ dumpsys(void)
if (dumpsize == 0)
cpu_dumpconf();
if (dumplo <= 0) {
+ bdevsw_release(bdev);
printf("\ndump to dev %u,%u not possible\n",
major(dumpdev), minor(dumpdev));
return;
@@ -1234,6 +1241,7 @@ dumpsys(void)
psize = bdev_size(dumpdev);
printf("dump ");
if (psize == -1) {
+ bdevsw_release(bdev);
printf("area unavailable\n");
return;
}
@@ -1276,6 +1284,7 @@ dumpsys(void)
}
err:
+ bdevsw_release(bdev);
switch (error) {
case ENXIO:
Index: src/sys/arch/amd64/amd64/machdep.c
diff -u src/sys/arch/amd64/amd64/machdep.c:1.223 src/sys/arch/amd64/amd64/machdep.c:1.223.2.1
--- src/sys/arch/amd64/amd64/machdep.c:1.223 Wed Jul 13 15:53:26 2016
+++ src/sys/arch/amd64/amd64/machdep.c Wed Jul 20 23:50:53 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.223 2016/07/13 15:53:26 maxv Exp $ */
+/* $NetBSD: machdep.c,v 1.223.2.1 2016/07/20 23:50:53 pgoyette Exp $ */
/*-
* Copyright (c) 1996, 1997, 1998, 2000, 2006, 2007, 2008, 2011
@@ -111,7 +111,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.223 2016/07/13 15:53:26 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.223.2.1 2016/07/20 23:50:53 pgoyette Exp $");
/* #define XENDEBUG_LOW */
@@ -937,12 +937,13 @@ dump_header_flush(void)
size_t to_write;
int error;
- bdev = bdevsw_lookup(dumpdev);
+ bdev = bdevsw_lookup_acquire(dumpdev);
to_write = roundup(dump_headerbuf_ptr - dump_headerbuf, dbtob(1));
error = bdev->d_dump(dumpdev, dump_header_blkno,
dump_headerbuf, to_write);
dump_header_blkno += btodb(to_write);
dump_headerbuf_ptr = dump_headerbuf;
+ bdevsw_release(bdev);
return error;
}
@@ -1031,8 +1032,9 @@ cpu_dump(void)
kcore_seg_t seg;
cpu_kcore_hdr_t cpuhdr;
const struct bdevsw *bdev;
+ int err;
- bdev = bdevsw_lookup(dumpdev);
+ bdev = bdevsw_lookup_acquire(dumpdev);
if (bdev == NULL)
return (ENXIO);
@@ -1053,7 +1055,9 @@ cpu_dump(void)
/*
* Write out the memory segment descriptors.
*/
- return dump_seg_iter(dump_header_addseg);
+ err = dump_seg_iter(dump_header_addseg);
+ bdevsw_release(bdev);
+ return err;
}
/*
@@ -1083,7 +1087,7 @@ dumpsys_seg(paddr_t maddr, paddr_t bytes
if (dumpdev == NODEV)
return ENODEV;
- bdev = bdevsw_lookup(dumpdev);
+ bdev = bdevsw_lookup_acquire(dumpdev);
if (bdev == NULL || bdev->d_psize == NULL)
return ENODEV;
@@ -1108,19 +1112,24 @@ dumpsys_seg(paddr_t maddr, paddr_t bytes
error = (*dump)(dumpdev, blkno, (void *)dumpspace, n);
pmap_kremove_local(dumpspace, n);
- if (error)
+ if (error) {
+ bdevsw_release(bdev);
return error;
+ }
maddr += n;
blkno += btodb(n); /* XXX? */
#if 0 /* XXX this doesn't work. grr. */
/* operator aborting dump? */
- if (sget() != NULL)
+ if (sget() != NULL) {
+ bdevsw_release(bdev);
return EINTR;
+ }
#endif
}
dump_header_blkno = blkno;
+ bdevsw_release(bdev);
return 0;
}
@@ -1134,9 +1143,13 @@ dodumpsys(void)
if (dumpdev == NODEV)
return;
- bdev = bdevsw_lookup(dumpdev);
- if (bdev == NULL || bdev->d_psize == NULL)
+ bdev = bdevsw_lookup_acquire(dumpdev);
+ if (bdev == NULL)
+ return;
+ if (bdev->d_psize == NULL) {
+ bdevsw_release(bdev);
return;
+ }
/*
* For dumps during autoconfiguration,
* if dump device has already configured...
@@ -1149,6 +1162,7 @@ dodumpsys(void)
(unsigned long long)minor(dumpdev), dumplo, dumpsize);
if (dumplo <= 0 || dumpsize <= 0) {
+ bdevsw_release(bdev);
printf(" not possible\n");
return;
}
@@ -1156,6 +1170,7 @@ dodumpsys(void)
psize = bdev_size(dumpdev);
printf("\ndump ");
if (psize == -1) {
+ bdevsw_release(bdev);
printf("area unavailable\n");
return;
}
@@ -1228,6 +1243,7 @@ err:
break;
}
failed:
+ bdevsw_release(bdev);
printf("\n\n");
delay(5000000); /* 5 seconds */
}
Index: src/sys/arch/amiga/amiga/machdep.c
diff -u src/sys/arch/amiga/amiga/machdep.c:1.246 src/sys/arch/amiga/amiga/machdep.c:1.246.2.1
--- src/sys/arch/amiga/amiga/machdep.c:1.246 Sat Apr 2 08:16:54 2016
+++ src/sys/arch/amiga/amiga/machdep.c Wed Jul 20 23:50:53 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.246 2016/04/02 08:16:54 mlelstv Exp $ */
+/* $NetBSD: machdep.c,v 1.246.2.1 2016/07/20 23:50:53 pgoyette Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@@ -50,7 +50,7 @@
#include "empm.h"
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.246 2016/04/02 08:16:54 mlelstv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.246.2.1 2016/07/20 23:50:53 pgoyette Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -467,6 +467,7 @@ cpu_dumpconf(void)
int nblks;
int i;
extern int end[];
+ const struct bdevsw *bdev;
memset(&cpu_kcore_hdr, 0, sizeof(cpu_kcore_hdr));
@@ -524,7 +525,7 @@ cpu_dumpconf(void)
m->ram_segs[1].size = memlist->m_seg[i].ms_size;
break;
}
- if (bdevsw_lookup(dumpdev) == NULL) {
+ if ((bdev = bdevsw_lookup_acquire(dumpdev)) == NULL) {
dumpdev = NODEV;
return;
}
@@ -542,6 +543,7 @@ cpu_dumpconf(void)
*/
if (dumplo < btodb(PAGE_SIZE))
dumplo = btodb(PAGE_SIZE);
+ bdevsw_release(bdev);
}
/*
@@ -574,9 +576,13 @@ dumpsys(void)
if (dumpdev == NODEV)
return;
- bdev = bdevsw_lookup(dumpdev);
- if (bdev == NULL || bdev->d_psize == NULL)
+ bdev = bdevsw_lookup_acquire(dumpdev);
+ if (bdev == NULL)
+ return;
+ if (bdev->d_psize == NULL) {
+ bdevsw_release(bdev);
return;
+ }
/*
* For dumps during autoconfiguration,
* if dump device has already configured...
@@ -584,6 +590,7 @@ dumpsys(void)
if (dumpsize == 0)
cpu_dumpconf();
if (dumplo <= 0) {
+ bdevsw_release(bdev);
printf("\ndump to dev %u,%u not possible\n", major(dumpdev),
minor(dumpdev));
return;
@@ -594,6 +601,7 @@ dumpsys(void)
psize = bdev_size(dumpdev);
printf("dump ");
if (psize == -1) {
+ bdevsw_release(bdev);
printf("area unavailable.\n");
return;
}
@@ -651,6 +659,7 @@ dumpsys(void)
}
}
+ bdevsw_release(bdev);
switch (error) {
case ENXIO:
Index: src/sys/arch/amiga/dev/ser.c
diff -u src/sys/arch/amiga/dev/ser.c:1.83.8.1 src/sys/arch/amiga/dev/ser.c:1.83.8.2
--- src/sys/arch/amiga/dev/ser.c:1.83.8.1 Tue Jul 19 06:26:58 2016
+++ src/sys/arch/amiga/dev/ser.c Wed Jul 20 23:50:53 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: ser.c,v 1.83.8.1 2016/07/19 06:26:58 pgoyette Exp $ */
+/* $NetBSD: ser.c,v 1.83.8.2 2016/07/20 23:50:53 pgoyette Exp $ */
/*
* Copyright (c) 1982, 1986, 1990 The Regents of the University of California.
@@ -40,7 +40,7 @@
#include "opt_kgdb.h"
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ser.c,v 1.83.8.1 2016/07/19 06:26:58 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ser.c,v 1.83.8.2 2016/07/20 23:50:53 pgoyette Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -1078,6 +1078,7 @@ sercnprobe(struct consdev *cp)
int maj, unit;
#ifdef KGDB
extern const struct cdevsw ctty_cdevsw;
+ const struct cdevsw *cdev;
#endif
/* locate the major number */
@@ -1096,8 +1097,11 @@ sercnprobe(struct consdev *cp)
cp->cn_pri = CN_NORMAL;
#ifdef KGDB
/* XXX */
- if (cdevsw_lookup(kgdb_dev) == &ctty_cdevsw)
+ cdev = cdevsw_lookup_acquire(kgdb_dev);
+ if (cdev == &ctty_cdevsw)
kgdb_dev = makedev(maj, minor(kgdb_dev));
+ if (cdev != NULL)
+ cdevsw_release(cdev);
#endif
}
Index: src/sys/arch/arm/arm32/stubs.c
diff -u src/sys/arch/arm/arm32/stubs.c:1.24 src/sys/arch/arm/arm32/stubs.c:1.24.18.1
--- src/sys/arch/arm/arm32/stubs.c:1.24 Mon Nov 12 18:00:35 2012
+++ src/sys/arch/arm/arm32/stubs.c Wed Jul 20 23:50:54 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: stubs.c,v 1.24 2012/11/12 18:00:35 skrll Exp $ */
+/* $NetBSD: stubs.c,v 1.24.18.1 2016/07/20 23:50:54 pgoyette Exp $ */
/*
* Copyright (c) 1994-1998 Mark Brinicombe.
@@ -41,7 +41,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: stubs.c,v 1.24 2012/11/12 18:00:35 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: stubs.c,v 1.24.18.1 2016/07/20 23:50:54 pgoyette Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -126,9 +126,9 @@ cpu_dump(void)
cpu_kcore_hdr_t *cpuhdrp;
phys_ram_seg_t *memsegp;
const struct bdevsw *bdev;
- int i;
+ int i, err;
- bdev = bdevsw_lookup(dumpdev);
+ bdev = bdevsw_lookup_acquire(dumpdev);
if (bdev == NULL)
return (ENXIO);
dump = bdev->d_dump;
@@ -162,7 +162,9 @@ cpu_dump(void)
memsegp[i].size = bootconfig.dram[i].pages * PAGE_SIZE;
}
- return (dump(dumpdev, dumplo, bf, dbtob(1)));
+ err = (dump(dumpdev, dumplo, bf, dbtob(1)));
+ bdevsw_release(bdev);
+ return err;
}
/*
@@ -238,13 +240,17 @@ dodumpsys(void)
printf("\ndumping to dev %u,%u offset %ld\n",
major(dumpdev), minor(dumpdev), dumplo);
-
- bdev = bdevsw_lookup(dumpdev);
- if (bdev == NULL || bdev->d_psize == NULL)
+ bdev = bdevsw_lookup_acquire(dumpdev);
+ if (bdev == NULL)
return;
+ if (bdev->d_psize == NULL) {
+ bdevsw_release(bdev);
+ return;
+ }
psize = bdev_size(dumpdev);
printf("dump ");
if (psize == -1) {
+ bdevsw_release(bdev);
printf("area unavailable\n");
return;
}
@@ -276,6 +282,7 @@ dodumpsys(void)
}
}
err:
+ bdevsw_release(bdev);
switch (error) {
case ENXIO:
printf("device bad\n");
Index: src/sys/arch/atari/atari/autoconf.c
diff -u src/sys/arch/atari/atari/autoconf.c:1.65 src/sys/arch/atari/atari/autoconf.c:1.65.10.1
--- src/sys/arch/atari/atari/autoconf.c:1.65 Mon Mar 24 18:39:57 2014
+++ src/sys/arch/atari/atari/autoconf.c Wed Jul 20 23:50:54 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: autoconf.c,v 1.65 2014/03/24 18:39:57 christos Exp $ */
+/* $NetBSD: autoconf.c,v 1.65.10.1 2016/07/20 23:50:54 pgoyette Exp $ */
/*
* Copyright (c) 1995 Leo Weppelman
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.65 2014/03/24 18:39:57 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.65.10.1 2016/07/20 23:50:54 pgoyette Exp $");
#include "opt_md.h"
@@ -256,25 +256,31 @@ findroot(void)
maj = devsw_name2blk(genericconf[i]->cd_name, NULL, 0);
if (maj == -1)
continue;
- bdev = bdevsw_lookup(makedev(maj, 0));
+ bdev = bdevsw_lookup_acquire(makedev(maj, 0));
+ if (bdev == NULL) {
#ifdef DIAGNOSTIC
- if (bdev == NULL)
panic("findroot: impossible");
#endif
- if (bdev == NULL ||
- bdev->d_strategy != dkp->dk_driver->d_strategy)
continue;
+ }
+ if (bdev->d_strategy != dkp->dk_driver->d_strategy) {
+ bdevsw_release(bdev);
+ continue;
+ }
/* Open disk; forces read of disklabel. */
if ((*bdev->d_open)(MAKEDISKDEV(maj,
- unit, 0), FREAD|FNONBLOCK, 0, &lwp0))
+ unit, 0), FREAD|FNONBLOCK, 0, &lwp0)) {
+ bdevsw_release(bdev);
continue;
+ }
(void)(*bdev->d_close)(MAKEDISKDEV(maj,
unit, 0), FREAD|FNONBLOCK, 0, &lwp0);
pp = &dkp->dk_label->d_partitions[booted_partition];
if (pp->p_size != 0 && pp->p_fstype == FS_BSDFFS) {
booted_device = devs[unit];
+ bdevsw_release(bdev);
return;
}
}
Index: src/sys/arch/atari/atari/machdep.c
diff -u src/sys/arch/atari/atari/machdep.c:1.177 src/sys/arch/atari/atari/machdep.c:1.177.10.1
--- src/sys/arch/atari/atari/machdep.c:1.177 Wed Mar 26 18:04:33 2014
+++ src/sys/arch/atari/atari/machdep.c Wed Jul 20 23:50:54 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.177 2014/03/26 18:04:33 christos Exp $ */
+/* $NetBSD: machdep.c,v 1.177.10.1 2016/07/20 23:50:54 pgoyette Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@@ -39,7 +39,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.177 2014/03/26 18:04:33 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.177.10.1 2016/07/20 23:50:54 pgoyette Exp $");
#include "opt_ddb.h"
#include "opt_compat_netbsd.h"
@@ -434,7 +434,7 @@ dumpsys(void)
error = segnum = 0;
if (dumpdev == NODEV)
return;
- bdev = bdevsw_lookup(dumpdev);
+ bdev = bdevsw_lookup_acquire(dumpdev);
if (bdev == NULL)
return;
/*
@@ -457,6 +457,7 @@ dumpsys(void)
switch (i) {
case 'n':
case 'N':
+ bdevsw_release(bdev);
return;
case '\n':
break;
@@ -514,6 +515,8 @@ dumpsys(void)
blkno += btodb(n);
}
}
+ bdevsw_release(bdev);
+
switch (error) {
case ENXIO:
Index: src/sys/arch/atari/dev/md_root.c
diff -u src/sys/arch/atari/dev/md_root.c:1.33 src/sys/arch/atari/dev/md_root.c:1.33.44.1
--- src/sys/arch/atari/dev/md_root.c:1.33 Tue Oct 20 19:10:10 2009
+++ src/sys/arch/atari/dev/md_root.c Wed Jul 20 23:50:54 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: md_root.c,v 1.33 2009/10/20 19:10:10 snj Exp $ */
+/* $NetBSD: md_root.c,v 1.33.44.1 2016/07/20 23:50:54 pgoyette Exp $ */
/*
* Copyright (c) 1996 Leo Weppelman.
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: md_root.c,v 1.33 2009/10/20 19:10:10 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: md_root.c,v 1.33.44.1 2016/07/20 23:50:54 pgoyette Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -152,7 +152,7 @@ loaddisk(struct md_conf *md, dev_t ld_de
struct disklabel dl;
struct read_info rs;
- bdp = bdevsw_lookup(ld_dev);
+ bdp = bdevsw_lookup_acquire(ld_dev);
if (bdp == NULL)
return ENXIO;
@@ -182,6 +182,7 @@ loaddisk(struct md_conf *md, dev_t ld_de
*/
if ((error = bdp->d_open(ld_dev, FREAD | FNONBLOCK, 0, lwp)) != 0) {
putiobuf(buf);
+ bdevsw_release(bdp);
return error;
}
if (bdp->d_ioctl(ld_dev, DIOCGDINFO, (void *)&dl, FREAD, lwp) == 0) {
@@ -199,6 +200,7 @@ loaddisk(struct md_conf *md, dev_t ld_de
bdp->d_close(ld_dev, FREAD | FNONBLOCK, 0, lwp);
putiobuf(buf);
+ bdevsw_release(bdp);
return error;
}
Index: src/sys/arch/cesfic/cesfic/machdep.c
diff -u src/sys/arch/cesfic/cesfic/machdep.c:1.66 src/sys/arch/cesfic/cesfic/machdep.c:1.66.2.1
--- src/sys/arch/cesfic/cesfic/machdep.c:1.66 Thu Nov 5 03:48:51 2015
+++ src/sys/arch/cesfic/cesfic/machdep.c Wed Jul 20 23:50:54 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.66 2015/11/05 03:48:51 pgoyette Exp $ */
+/* $NetBSD: machdep.c,v 1.66.2.1 2016/07/20 23:50:54 pgoyette Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@@ -39,7 +39,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.66 2015/11/05 03:48:51 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.66.2.1 2016/07/20 23:50:54 pgoyette Exp $");
#include "opt_bufcache.h"
#include "opt_ddb.h"
@@ -417,16 +417,20 @@ dumpsys(void)
/* Make sure dump device is valid. */
if (dumpdev == NODEV)
return;
- bdev = bdevsw_lookup(dumpdev);
+ bdev = bdevsw_lookup_acquire(dumpdev);
if (bdev == NULL)
return;
if (dumpsize == 0) {
cpu_dumpconf();
- if (dumpsize == 0)
+ if (dumpsize == 0) {
+ bdevsw_release(bdev);
return;
+ }
}
- if (dumplo < 0)
+ if (dumplo < 0) {
+ bdevsw_release(bdev);
return;
+ }
dump = bdev->d_dump;
blkno = dumplo;
@@ -453,29 +457,34 @@ dumpsys(void)
case ENXIO:
printf("device bad\n");
- return;
+ break;
case EFAULT:
printf("device not ready\n");
- return;
+ break;
case EINVAL:
printf("area improper\n");
- return;
+ break;
case EIO:
printf("i/o error\n");
- return;
+ break;
case EINTR:
printf("aborted from console\n");
- return;
+ break;
default:
printf("error %d\n", error);
+ break;
+ }
+ if (error != 0) {
+ bdevsw_release(bdev);
return;
}
}
+ bdevsw_release(bdev);
printf("succeeded\n");
}
Index: src/sys/arch/hp300/dev/dcm.c
diff -u src/sys/arch/hp300/dev/dcm.c:1.88 src/sys/arch/hp300/dev/dcm.c:1.88.4.1
--- src/sys/arch/hp300/dev/dcm.c:1.88 Sat Nov 15 19:20:01 2014
+++ src/sys/arch/hp300/dev/dcm.c Wed Jul 20 23:50:54 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: dcm.c,v 1.88 2014/11/15 19:20:01 christos Exp $ */
+/* $NetBSD: dcm.c,v 1.88.4.1 2016/07/20 23:50:54 pgoyette Exp $ */
/*-
* Copyright (c) 1996, 1997 The NetBSD Foundation, Inc.
@@ -78,7 +78,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dcm.c,v 1.88 2014/11/15 19:20:01 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dcm.c,v 1.88.4.1 2016/07/20 23:50:54 pgoyette Exp $");
#include "opt_kgdb.h"
@@ -368,6 +368,9 @@ dcmattach(device_t parent, device_t self
int brd = device_unit(self);
int scode = da->da_scode;
int i, mbits, code;
+#ifdef KGDB
+ const struct cdevsw *cdev;
+#endif
sc->sc_dev = self;
sc->sc_flags = 0;
@@ -460,7 +463,7 @@ dcmattach(device_t parent, device_t self
aprint_normal("\n");
#ifdef KGDB
- if (cdevsw_lookup(kgdb_dev) == &dcm_cdevsw &&
+ if ((cdev = cdevsw_lookup_acquire(kgdb_dev)) == &dcm_cdevsw &&
DCMBOARD(DCMUNIT(kgdb_dev)) == brd) {
if (dcmconsole == DCMUNIT(kgdb_dev)) /* XXX fixme */
kgdb_dev = NODEV; /* can't debug over console port */
@@ -484,6 +487,7 @@ dcmattach(device_t parent, device_t self
/* end could be replaced */
#endif /* KGDB_CHEAT */
}
+ cdevsw_release(cdev);
#endif /* KGDB */
}
Index: src/sys/arch/hp300/hp300/machdep.c
diff -u src/sys/arch/hp300/hp300/machdep.c:1.229 src/sys/arch/hp300/hp300/machdep.c:1.229.8.1
--- src/sys/arch/hp300/hp300/machdep.c:1.229 Sun Apr 20 04:12:54 2014
+++ src/sys/arch/hp300/hp300/machdep.c Wed Jul 20 23:50:54 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.229 2014/04/20 04:12:54 tsutsui Exp $ */
+/* $NetBSD: machdep.c,v 1.229.8.1 2016/07/20 23:50:54 pgoyette Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@@ -39,7 +39,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.229 2014/04/20 04:12:54 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.229.8.1 2016/07/20 23:50:54 pgoyette Exp $");
#include "opt_ddb.h"
#include "opt_compat_netbsd.h"
@@ -792,15 +792,18 @@ dumpsys(void)
/* Make sure dump device is valid. */
if (dumpdev == NODEV)
return;
- bdev = bdevsw_lookup(dumpdev);
+ bdev = bdevsw_lookup_acquire(dumpdev);
if (bdev == NULL)
return;
if (dumpsize == 0) {
cpu_dumpconf();
- if (dumpsize == 0)
+ if (dumpsize == 0) {
+ bdevsw_release(bdev);
return;
+ }
}
if (dumplo <= 0) {
+ bdevsw_release(bdev);
printf("\ndump to dev %u,%u not possible\n",
major(dumpdev), minor(dumpdev));
return;
@@ -838,29 +841,34 @@ dumpsys(void)
case ENXIO:
printf("device bad\n");
- return;
+ break;
case EFAULT:
printf("device not ready\n");
- return;
+ break;
case EINVAL:
printf("area improper\n");
- return;
+ break;
case EIO:
printf("i/o error\n");
- return;
+ break;
case EINTR:
printf("aborted from console\n");
- return;
+ break;
default:
printf("error %d\n", error);
+ break;
+ }
+ if (error != 0) {
+ bdevsw_release(bdev);
return;
}
}
+ bdevsw_release(bdev);
printf("succeeded\n");
}
Index: src/sys/arch/hppa/hppa/machdep.c
diff -u src/sys/arch/hppa/hppa/machdep.c:1.6 src/sys/arch/hppa/hppa/machdep.c:1.6.2.1
--- src/sys/arch/hppa/hppa/machdep.c:1.6 Sun Oct 18 17:13:33 2015
+++ src/sys/arch/hppa/hppa/machdep.c Wed Jul 20 23:50:54 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.6 2015/10/18 17:13:33 maxv Exp $ */
+/* $NetBSD: machdep.c,v 1.6.2.1 2016/07/20 23:50:54 pgoyette Exp $ */
/*-
* Copyright (c) 2001, 2002 The NetBSD Foundation, Inc.
@@ -58,7 +58,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.6 2015/10/18 17:13:33 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.6.2.1 2016/07/20 23:50:54 pgoyette Exp $");
#include "opt_cputype.h"
#include "opt_ddb.h"
@@ -1762,6 +1762,7 @@ cpu_dump(void)
kcore_seg_t *segp;
cpu_kcore_hdr_t *cpuhdrp __unused;
const struct bdevsw *bdev;
+ int err;
segp = (kcore_seg_t *)buf;
cpuhdrp = (cpu_kcore_hdr_t *)&buf[ALIGN(sizeof(*segp)) / sizeof (long)];
@@ -1777,11 +1778,13 @@ cpu_dump(void)
*/
/* nothing for now */
- bdev = bdevsw_lookup(dumpdev);
+ bdev = bdevsw_lookup_acquire(dumpdev);
if (bdev == NULL)
return (-1);
- return (*bdev->d_dump)(dumpdev, dumplo, (void *)buf, dbtob(1));
+ err = (*bdev->d_dump)(dumpdev, dumplo, (void *)buf, dbtob(1));
+ bdevsw_release(bdev);
+ return err;
}
/*
@@ -1801,7 +1804,7 @@ dumpsys(void)
if (dumpdev == NODEV)
return;
- bdev = bdevsw_lookup(dumpdev);
+ bdev = bdevsw_lookup_acquire(dumpdev);
if (bdev == NULL)
return;
@@ -1811,6 +1814,7 @@ dumpsys(void)
if (dumpsize == 0)
cpu_dumpconf();
if (dumplo <= 0) {
+ bdevsw_release(bdev);
printf("\ndump to dev %u,%u not possible\n",
major(dumpdev), minor(dumpdev));
return;
@@ -1821,6 +1825,7 @@ dumpsys(void)
psize = bdev_size(dumpdev);
printf("dump ");
if (psize == -1) {
+ bdevsw_release(bdev);
printf("area unavailable\n");
return;
}
@@ -1861,6 +1866,7 @@ dumpsys(void)
case 0: printf("succeeded\n"); break;
default: printf("error %d\n", error); break;
}
+ bdevsw_release(bdev);
}
void
Index: src/sys/arch/i386/i386/dumpsys.c
diff -u src/sys/arch/i386/i386/dumpsys.c:1.16 src/sys/arch/i386/i386/dumpsys.c:1.16.28.1
--- src/sys/arch/i386/i386/dumpsys.c:1.16 Mon Dec 12 19:03:09 2011
+++ src/sys/arch/i386/i386/dumpsys.c Wed Jul 20 23:50:54 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: dumpsys.c,v 1.16 2011/12/12 19:03:09 mrg Exp $ */
+/* $NetBSD: dumpsys.c,v 1.16.28.1 2016/07/20 23:50:54 pgoyette Exp $ */
/*-
* Copyright (c) 1996, 1997, 1998, 2000, 2004, 2006, 2008 The NetBSD Foundation, Inc.
@@ -69,7 +69,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dumpsys.c,v 1.16 2011/12/12 19:03:09 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dumpsys.c,v 1.16.28.1 2016/07/20 23:50:54 pgoyette Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -157,9 +157,13 @@ dodumpsys(void)
if (dumpdev == NODEV)
return;
- bdev = bdevsw_lookup(dumpdev);
- if (bdev == NULL || bdev->d_psize == NULL)
+ bdev = bdevsw_lookup_acquire(dumpdev);
+ if (bdev == NULL)
+ return;
+ if (bdev->d_psize == NULL) {
+ bdevsw_release(bdev);
return;
+ }
/*
* For dumps during autoconfiguration,
@@ -168,6 +172,7 @@ dodumpsys(void)
if (dumpsize == 0)
cpu_dumpconf();
if (dumplo <= 0 || dumpsize == 0) {
+ bdevsw_release(bdev);
printf("\ndump to dev %llu,%llu not possible\n",
(unsigned long long)major(dumpdev),
(unsigned long long)minor(dumpdev));
@@ -180,6 +185,7 @@ dodumpsys(void)
psize = bdev_size(dumpdev);
printf("dump ");
if (psize == -1) {
+ bdevsw_release(bdev);
printf("area unavailable\n");
return;
}
@@ -252,6 +258,7 @@ dodumpsys(void)
break;
}
failed:
+ bdevsw_release(bdev);
printf("\n\n");
delay(5000000); /* 5 seconds */
}
@@ -516,12 +523,13 @@ dump_header_flush(void)
size_t to_write;
int error;
- bdev = bdevsw_lookup(dumpdev);
+ bdev = bdevsw_lookup_acquire(dumpdev);
to_write = roundup(dump_headerbuf_ptr - dump_headerbuf, dbtob(1));
error = bdev->d_dump(dumpdev, dump_header_blkno,
dump_headerbuf, to_write);
dump_header_blkno += btodb(to_write);
dump_headerbuf_ptr = dump_headerbuf;
+ bdevsw_release(bdev);
return error;
}
@@ -603,8 +611,9 @@ cpu_dump(void)
kcore_seg_t seg;
cpu_kcore_hdr_t cpuhdr;
const struct bdevsw *bdev;
+ int err;
- bdev = bdevsw_lookup(dumpdev);
+ bdev = bdevsw_lookup_acquire(dumpdev);
if (bdev == NULL)
return (ENXIO);
@@ -627,7 +636,9 @@ cpu_dump(void)
/*
* Write out the memory segment descriptors.
*/
- return dump_seg_iter(dump_header_addseg);
+ err = dump_seg_iter(dump_header_addseg);
+ bdevsw_release(bdev);
+ return err;
}
static int
@@ -639,7 +650,7 @@ dumpsys_seg(paddr_t maddr, paddr_t bytes
int (*dump)(dev_t, daddr_t, void *, size_t);
int error;
- bdev = bdevsw_lookup(dumpdev);
+ bdev = bdevsw_lookup_acquire(dumpdev);
dump = bdev->d_dump;
blkno = dump_header_blkno;
@@ -660,18 +671,23 @@ dumpsys_seg(paddr_t maddr, paddr_t bytes
pmap_update(pmap_kernel());
error = (*dump)(dumpdev, blkno, (void *)dumpspace, n);
- if (error)
+ if (error) {
+ bdevsw_release(bdev);
return error;
+ }
maddr += n;
blkno += btodb(n); /* XXX? */
#if 0 /* XXX this doesn't work. grr. */
/* operator aborting dump? */
- if (sget() != NULL)
+ if (sget() != NULL) {
+ bdevsw_release(bdev);
return EINTR;
+ }
#endif
}
dump_header_blkno = blkno;
+ bdevsw_release(bdev);
return 0;
}
Index: src/sys/arch/luna68k/luna68k/machdep.c
diff -u src/sys/arch/luna68k/luna68k/machdep.c:1.99 src/sys/arch/luna68k/luna68k/machdep.c:1.99.2.1
--- src/sys/arch/luna68k/luna68k/machdep.c:1.99 Fri Aug 21 10:48:06 2015
+++ src/sys/arch/luna68k/luna68k/machdep.c Wed Jul 20 23:50:54 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.99 2015/08/21 10:48:06 christos Exp $ */
+/* $NetBSD: machdep.c,v 1.99.2.1 2016/07/20 23:50:54 pgoyette Exp $ */
/*-
* Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.99 2015/08/21 10:48:06 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.99.2.1 2016/07/20 23:50:54 pgoyette Exp $");
#include "opt_ddb.h"
#include "opt_kgdb.h"
@@ -656,15 +656,18 @@ dumpsys(void)
/* Make sure dump device is valid. */
if (dumpdev == NODEV)
return;
- bdev = bdevsw_lookup(dumpdev);
+ bdev = bdevsw_lookup_acquire(dumpdev);
if (bdev == NULL)
return;
if (dumpsize == 0) {
cpu_dumpconf();
- if (dumpsize == 0)
+ if (dumpsize == 0) {
+ bdevsw_release(bdev);
return;
+ }
}
if (dumplo <= 0) {
+ bdevsw_release(bdev);
printf("\ndump to dev %u,%u not possible\n",
major(dumpdev), minor(dumpdev));
return;
@@ -702,29 +705,36 @@ dumpsys(void)
case ENXIO:
printf("device bad\n");
+ bdevsw_release(bdev);
return;
case EFAULT:
printf("device not ready\n");
+ bdevsw_release(bdev);
return;
case EINVAL:
printf("area improper\n");
+ bdevsw_release(bdev);
return;
case EIO:
printf("i/o error\n");
+ bdevsw_release(bdev);
return;
case EINTR:
printf("aborted from console\n");
+ bdevsw_release(bdev);
return;
default:
printf("error %d\n", error);
+ bdevsw_release(bdev);
return;
}
}
+ bdevsw_release(bdev);
printf("succeeded\n");
}
Index: src/sys/arch/mac68k/dev/zs_kgdb.c
diff -u src/sys/arch/mac68k/dev/zs_kgdb.c:1.11 src/sys/arch/mac68k/dev/zs_kgdb.c:1.11.68.1
--- src/sys/arch/mac68k/dev/zs_kgdb.c:1.11 Mon Apr 28 20:23:27 2008
+++ src/sys/arch/mac68k/dev/zs_kgdb.c Wed Jul 20 23:50:54 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: zs_kgdb.c,v 1.11 2008/04/28 20:23:27 martin Exp $ */
+/* $NetBSD: zs_kgdb.c,v 1.11.68.1 2016/07/20 23:50:54 pgoyette Exp $ */
/*-
* Copyright (c) 1996 The NetBSD Foundation, Inc.
@@ -41,7 +41,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: zs_kgdb.c,v 1.11 2008/04/28 20:23:27 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: zs_kgdb.c,v 1.11.68.1 2016/07/20 23:50:54 pgoyette Exp $");
#include "opt_kgdb.h"
#include <sys/param.h>
@@ -141,10 +141,14 @@ zs_kgdb_init(void)
volatile struct zschan *zc;
int channel;
extern const struct cdevsw zstty_cdevsw;
+ const struct cdevsw *cdev;
/* printf("zs_kgdb_init: kgdb_dev=0x%x\n", kgdb_dev); */
- if (cdevsw_lookup(kgdb_dev) != &zstty_cdevsw)
+ if ((cdev = cdevsw_lookup_acquire(kgdb_dev)) != &zstty_cdevsw) {
+ if (cdev != NULL)
+ cdevsw_release(cdev);
return;
+ }
/* Note: (ttya,ttyb) on zsc1, and (ttyc,ttyd) on zsc0 */
channel = kgdb_dev & 1;
@@ -160,6 +164,7 @@ zs_kgdb_init(void)
if (zc == NULL) {
printf("zs_kgdb_init: zs not mapped.\n");
kgdb_dev = -1;
+ cdevsw_release(cdev);
return;
}
@@ -173,6 +178,7 @@ zs_kgdb_init(void)
/* Store the getc/putc functions and arg. */
kgdb_attach(zs_getc, zs_putc, __UNVOLATILE(zc));
+ cdevsw_release(cdev);
}
/*
Index: src/sys/arch/mac68k/mac68k/machdep.c
diff -u src/sys/arch/mac68k/mac68k/machdep.c:1.349 src/sys/arch/mac68k/mac68k/machdep.c:1.349.2.1
--- src/sys/arch/mac68k/mac68k/machdep.c:1.349 Sun Aug 30 01:46:03 2015
+++ src/sys/arch/mac68k/mac68k/machdep.c Wed Jul 20 23:50:54 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.349 2015/08/30 01:46:03 uebayasi Exp $ */
+/* $NetBSD: machdep.c,v 1.349.2.1 2016/07/20 23:50:54 pgoyette Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@@ -74,7 +74,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.349 2015/08/30 01:46:03 uebayasi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.349.2.1 2016/07/20 23:50:54 pgoyette Exp $");
#include "opt_adb.h"
#include "opt_copy_symtab.h"
@@ -687,15 +687,18 @@ dumpsys(void)
/* Make sure dump device is valid. */
if (dumpdev == NODEV)
return;
- bdev = bdevsw_lookup(dumpdev);
+ bdev = bdevsw_lookup_acquire(dumpdev);
if (bdev == NULL)
return;
if (dumpsize == 0) {
cpu_dumpconf();
- if (dumpsize == 0)
+ if (dumpsize == 0) {
+ bdevsw_release(bdev);
return;
+ }
}
if (dumplo <= 0) {
+ bdevsw_release(bdev);
printf("\ndump to dev %u,%u not possible\n",
major(dumpdev), minor(dumpdev));
return;
@@ -742,29 +745,36 @@ dumpsys(void)
case ENXIO:
printf("device bad\n");
+ bdevsw_release(bdev);
return;
case EFAULT:
printf("device not ready\n");
+ bdevsw_release(bdev);
return;
case EINVAL:
printf("area improper\n");
+ bdevsw_release(bdev);
return;
case EIO:
printf("i/o error\n");
+ bdevsw_release(bdev);
return;
case EINTR:
printf("aborted from console\n");
+ bdevsw_release(bdev);
return;
default:
printf("error %d\n", error);
+ bdevsw_release(bdev);
return;
}
}
+ bdevsw_release(bdev);
printf("succeeded\n");
}
Index: src/sys/arch/mips/mips/mips_machdep.c
diff -u src/sys/arch/mips/mips/mips_machdep.c:1.272 src/sys/arch/mips/mips/mips_machdep.c:1.272.2.1
--- src/sys/arch/mips/mips/mips_machdep.c:1.272 Mon Jul 11 18:56:41 2016
+++ src/sys/arch/mips/mips/mips_machdep.c Wed Jul 20 23:50:55 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: mips_machdep.c,v 1.272 2016/07/11 18:56:41 skrll Exp $ */
+/* $NetBSD: mips_machdep.c,v 1.272.2.1 2016/07/20 23:50:55 pgoyette Exp $ */
/*
* Copyright 2002 Wasabi Systems, Inc.
@@ -111,7 +111,7 @@
*/
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
-__KERNEL_RCSID(0, "$NetBSD: mips_machdep.c,v 1.272 2016/07/11 18:56:41 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mips_machdep.c,v 1.272.2.1 2016/07/20 23:50:55 pgoyette Exp $");
#define __INTR_PRIVATE
#include "opt_cputype.h"
@@ -1791,9 +1791,9 @@ cpu_dump(void)
cpu_kcore_hdr_t *cpuhdrp;
phys_ram_seg_t *memsegp;
const struct bdevsw *bdev;
- int i;
+ int i, err;
- bdev = bdevsw_lookup(dumpdev);
+ bdev = bdevsw_lookup_acquire(dumpdev);
if (bdev == NULL)
return (ENXIO);
@@ -1836,7 +1836,9 @@ cpu_dump(void)
memsegp[i].size = mem_clusters[i].size;
}
- return (dump(dumpdev, dumplo, (void *)buf, dbtob(1)));
+ err = (dump(dumpdev, dumplo, (void *)buf, dbtob(1)));
+ bdevsw_release(bdev);
+ return err;
}
/*
@@ -1900,9 +1902,13 @@ dumpsys(void)
if (dumpdev == NODEV)
return;
- bdev = bdevsw_lookup(dumpdev);
- if (bdev == NULL || bdev->d_psize == NULL)
+ bdev = bdevsw_lookup_acquire(dumpdev);
+ if (bdev == NULL)
+ return;
+ if (bdev->d_psize == NULL) {
+ bdevsw_release(bdev);
return;
+ }
/*
* For dumps during autoconfiguration,
@@ -1911,6 +1917,7 @@ dumpsys(void)
if (dumpsize == 0)
cpu_dumpconf();
if (dumplo <= 0) {
+ bdevsw_release(bdev);
printf("\ndump to dev %u,%u not possible\n", major(dumpdev),
minor(dumpdev));
return;
@@ -1921,6 +1928,7 @@ dumpsys(void)
psize = bdev_size(dumpdev);
printf("dump ");
if (psize == -1) {
+ bdevsw_release(bdev);
printf("area unavailable\n");
return;
}
@@ -1998,6 +2006,7 @@ dumpsys(void)
printf("error %d\n", error);
break;
}
+ bdevsw_release(bdev);
printf("\n\n");
delay(5000000); /* 5 seconds */
}
Index: src/sys/arch/mipsco/obio/zs_kgdb.c
diff -u src/sys/arch/mipsco/obio/zs_kgdb.c:1.10 src/sys/arch/mipsco/obio/zs_kgdb.c:1.10.44.1
--- src/sys/arch/mipsco/obio/zs_kgdb.c:1.10 Wed Mar 18 10:22:32 2009
+++ src/sys/arch/mipsco/obio/zs_kgdb.c Wed Jul 20 23:50:55 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: zs_kgdb.c,v 1.10 2009/03/18 10:22:32 cegger Exp $ */
+/* $NetBSD: zs_kgdb.c,v 1.10.44.1 2016/07/20 23:50:55 pgoyette Exp $ */
/*-
* Copyright (c) 1996 The NetBSD Foundation, Inc.
@@ -41,7 +41,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: zs_kgdb.c,v 1.10 2009/03/18 10:22:32 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: zs_kgdb.c,v 1.10.44.1 2016/07/20 23:50:55 pgoyette Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -130,9 +130,13 @@ zs_kgdb_init(void)
struct zschan *zc;
int channel, unit;
extern const struct cdevsw zstty_cdevsw;
+ const struct cdevsw *cdev;
- if (cdevsw_lookup(kgdb_dev) != &zstty_cdevsw)
+ if ((cdev = cdevsw_lookup_acquire(kgdb_dev)) != &zstty_cdevsw) {
+ if (cdev != NULL)
+ cdevsw_release(cdev);
return;
+ }
unit = (kgdb_dev & 2) ? 2 : 0;
channel = kgdb_dev & 1;
@@ -143,6 +147,8 @@ zs_kgdb_init(void)
/* Attach KGDB comms functions to this device */
kgdb_attach(zs_getc, zs_putc, (void *)zc);
+ if (cdev != NULL)
+ cdevsw_release(cdev);
}
/*
Index: src/sys/arch/mvme68k/mvme68k/machdep.c
diff -u src/sys/arch/mvme68k/mvme68k/machdep.c:1.154 src/sys/arch/mvme68k/mvme68k/machdep.c:1.154.2.1
--- src/sys/arch/mvme68k/mvme68k/machdep.c:1.154 Tue May 31 03:25:46 2016
+++ src/sys/arch/mvme68k/mvme68k/machdep.c Wed Jul 20 23:50:55 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.154 2016/05/31 03:25:46 dholland Exp $ */
+/* $NetBSD: machdep.c,v 1.154.2.1 2016/07/20 23:50:55 pgoyette Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@@ -39,7 +39,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.154 2016/05/31 03:25:46 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.154.2.1 2016/07/20 23:50:55 pgoyette Exp $");
#include "opt_ddb.h"
#include "opt_m060sp.h"
@@ -856,9 +856,13 @@ dumpsys(void)
if (dumpdev == NODEV)
return;
- bdev = bdevsw_lookup(dumpdev);
- if (bdev == NULL || bdev->d_psize == NULL)
+ bdev = bdevsw_lookup_acquire(dumpdev);
+ if (bdev == NULL)
return;
+ if (bdev->d_psize == NULL) {
+ bdevsw_release(bdev);
+ return;
+ }
/*
* For dumps during autoconfiguration,
@@ -867,6 +871,7 @@ dumpsys(void)
if (dumpsize == 0)
cpu_dumpconf();
if (dumplo <= 0) {
+ bdevsw_release(bdev);
printf("\ndump to dev %u,%u not possible\n",
major(dumpdev), minor(dumpdev));
return;
@@ -877,6 +882,7 @@ dumpsys(void)
psize = bdev_size(dumpdev);
printf("dump ");
if (psize == -1) {
+ bdevsw_release(bdev);
printf("area unavailable\n");
return;
}
@@ -950,6 +956,7 @@ dumpsys(void)
printf("error %d\n", error);
break;
}
+ bdevsw_release(bdev);
printf("\n\n");
delay(5000);
}
Index: src/sys/arch/news68k/news68k/machdep.c
diff -u src/sys/arch/news68k/news68k/machdep.c:1.101 src/sys/arch/news68k/news68k/machdep.c:1.101.10.1
--- src/sys/arch/news68k/news68k/machdep.c:1.101 Mon Mar 24 19:54:28 2014
+++ src/sys/arch/news68k/news68k/machdep.c Wed Jul 20 23:50:55 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.101 2014/03/24 19:54:28 christos Exp $ */
+/* $NetBSD: machdep.c,v 1.101.10.1 2016/07/20 23:50:55 pgoyette Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@@ -39,7 +39,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.101 2014/03/24 19:54:28 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.101.10.1 2016/07/20 23:50:55 pgoyette Exp $");
#include "opt_ddb.h"
#include "opt_compat_netbsd.h"
@@ -509,15 +509,18 @@ dumpsys(void)
/* Make sure dump device is valid. */
if (dumpdev == NODEV)
return;
- bdev = bdevsw_lookup(dumpdev);
+ bdev = bdevsw_lookup_acquire(dumpdev);
if (bdev == NULL)
return;
if (dumpsize == 0) {
cpu_dumpconf();
- if (dumpsize == 0)
+ if (dumpsize == 0) {
+ bdevsw_release(bdev);
return;
+ }
}
if (dumplo <= 0) {
+ bdevsw_release(bdev);
printf("\ndump to dev %u,%u not possible\n",
major(dumpdev), minor(dumpdev));
return;
@@ -554,30 +557,37 @@ dumpsys(void)
break;
case ENXIO:
+ bdevsw_release(bdev);
printf("device bad\n");
- return;
+ return;
case EFAULT:
+ bdevsw_release(bdev);
printf("device not ready\n");
return;
case EINVAL:
+ bdevsw_release(bdev);
printf("area improper\n");
return;
case EIO:
+ bdevsw_release(bdev);
printf("i/o error\n");
return;
case EINTR:
+ bdevsw_release(bdev);
printf("aborted from console\n");
return;
default:
+ bdevsw_release(bdev);
printf("error %d\n", error);
return;
}
}
+ bdevsw_release(bdev);
printf("succeeded\n");
}
Index: src/sys/arch/next68k/dev/zs_kgdb.c
diff -u src/sys/arch/next68k/dev/zs_kgdb.c:1.12 src/sys/arch/next68k/dev/zs_kgdb.c:1.12.68.1
--- src/sys/arch/next68k/dev/zs_kgdb.c:1.12 Mon Apr 28 20:23:30 2008
+++ src/sys/arch/next68k/dev/zs_kgdb.c Wed Jul 20 23:50:55 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: zs_kgdb.c,v 1.12 2008/04/28 20:23:30 martin Exp $ */
+/* $NetBSD: zs_kgdb.c,v 1.12.68.1 2016/07/20 23:50:55 pgoyette Exp $ */
/*-
* Copyright (c) 1996 The NetBSD Foundation, Inc.
@@ -41,7 +41,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: zs_kgdb.c,v 1.12 2008/04/28 20:23:30 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: zs_kgdb.c,v 1.12.68.1 2016/07/20 23:50:55 pgoyette Exp $");
#include "opt_kgdb.h"
@@ -133,10 +133,14 @@ zs_kgdb_init(void)
volatile struct zschan *zc;
int channel;
extern const struct cdevsw zstty_cdevsw;
+ const struct cdevsw *cdev;
printf("zs_kgdb_init: kgdb_dev=0x%x\n", kgdb_dev);
- if (cdevsw_lookup(kgdb_dev) != &zstty_cdevsw)
+ if ((cdev = cdevsw_lookup_acquire(kgdb_dev)) != &zstty_cdevsw) {
+ if (cdev != NULL)
+ cdevsw_release(cdev);
return;
+ }
/* Note: (ttya,ttyb) on zs0, and (ttyc,ttyd) on zs2 */
channel = kgdb_dev & 1;
@@ -150,6 +154,7 @@ zs_kgdb_init(void)
if (zc == NULL) {
printf("zs_kgdb_init: zs not mapped.\n");
kgdb_dev = -1;
+ cdevsw_release(cdev);
return;
}
@@ -163,6 +168,7 @@ zs_kgdb_init(void)
/* Store the getc/putc functions and arg. */
kgdb_attach(zs_getc, zs_putc, __UNVOLATILE(zc));
+ cdevsw_release(cdev);
}
/*
Index: src/sys/arch/next68k/next68k/machdep.c
diff -u src/sys/arch/next68k/next68k/machdep.c:1.111 src/sys/arch/next68k/next68k/machdep.c:1.111.10.1
--- src/sys/arch/next68k/next68k/machdep.c:1.111 Mon Mar 24 20:01:03 2014
+++ src/sys/arch/next68k/next68k/machdep.c Wed Jul 20 23:50:55 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.111 2014/03/24 20:01:03 christos Exp $ */
+/* $NetBSD: machdep.c,v 1.111.10.1 2016/07/20 23:50:55 pgoyette Exp $ */
/*
* Copyright (c) 1998 Darrin B. Jewell
@@ -40,7 +40,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.111 2014/03/24 20:01:03 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.111.10.1 2016/07/20 23:50:55 pgoyette Exp $");
#include "opt_ddb.h"
#include "opt_kgdb.h"
@@ -660,13 +660,15 @@ dumpsys(void)
/* Make sure dump device is valid. */
if (dumpdev == NODEV)
return;
- bdev = bdevsw_lookup(dumpdev);
+ bdev = bdevsw_lookup_acquire(dumpdev);
if (bdev == NULL)
return;
if (dumpsize == 0) {
cpu_dumpconf();
- if (dumpsize == 0)
+ if (dumpsize == 0) {
+ bdevsw_release(bdev);
return;
+ }
}
if (dumplo < 0)
return;
@@ -701,30 +703,37 @@ dumpsys(void)
break;
case ENXIO:
+ bdevsw_release(bdev);
printf("device bad\n");
return;
case EFAULT:
+ bdevsw_release(bdev);
printf("device not ready\n");
return;
case EINVAL:
+ bdevsw_release(bdev);
printf("area improper\n");
return;
case EIO:
+ bdevsw_release(bdev);
printf("i/o error\n");
return;
case EINTR:
+ bdevsw_release(bdev);
printf("aborted from console\n");
return;
default:
+ bdevsw_release(bdev);
printf("error %d\n", error);
return;
}
}
+ bdevsw_release(bdev);
printf("succeeded\n");
}
Index: src/sys/arch/sgimips/dev/zs_kgdb.c
diff -u src/sys/arch/sgimips/dev/zs_kgdb.c:1.15 src/sys/arch/sgimips/dev/zs_kgdb.c:1.15.44.1
--- src/sys/arch/sgimips/dev/zs_kgdb.c:1.15 Wed Mar 18 10:22:35 2009
+++ src/sys/arch/sgimips/dev/zs_kgdb.c Wed Jul 20 23:50:55 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: zs_kgdb.c,v 1.15 2009/03/18 10:22:35 cegger Exp $ */
+/* $NetBSD: zs_kgdb.c,v 1.15.44.1 2016/07/20 23:50:55 pgoyette Exp $ */
/*-
* Copyright (c) 1996 The NetBSD Foundation, Inc.
@@ -41,7 +41,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: zs_kgdb.c,v 1.15 2009/03/18 10:22:35 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: zs_kgdb.c,v 1.15.44.1 2016/07/20 23:50:55 pgoyette Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -130,9 +130,13 @@ zs_kgdb_init(void)
volatile struct zschan *zc;
int channel, unit;
extern const struct cdevsw zstty_cdevsw;
+ const struct cdevsw *cdev;
- if (cdevsw_lookup(kgdb_dev) != &zstty_cdevsw)
+ if ((cdev = cdevsw_lookup_acquire(kgdb_dev)) != &zstty_cdevsw) {
+ if (cdev != NULL)
+ cdevsw_release(cdev);
return;
+ }
unit = (kgdb_dev & 2) ? 1 : 0; /* XXX ??? */
channel = kgdb_dev & 1;
@@ -143,6 +147,7 @@ zs_kgdb_init(void)
/* Attach KGDB comms functions to this device */
kgdb_attach(zs_getc, zs_putc, __UNVOLATILE(zc));
+ cdevsw_release(cdev);
}
/*
Index: src/sys/arch/sparc/dev/zs_kgdb.c
diff -u src/sys/arch/sparc/dev/zs_kgdb.c:1.21 src/sys/arch/sparc/dev/zs_kgdb.c:1.21.44.1
--- src/sys/arch/sparc/dev/zs_kgdb.c:1.21 Sat May 16 16:55:24 2009
+++ src/sys/arch/sparc/dev/zs_kgdb.c Wed Jul 20 23:50:55 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: zs_kgdb.c,v 1.21 2009/05/16 16:55:24 cegger Exp $ */
+/* $NetBSD: zs_kgdb.c,v 1.21.44.1 2016/07/20 23:50:55 pgoyette Exp $ */
/*-
* Copyright (c) 1996 The NetBSD Foundation, Inc.
@@ -41,7 +41,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: zs_kgdb.c,v 1.21 2009/05/16 16:55:24 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: zs_kgdb.c,v 1.21.44.1 2016/07/20 23:50:55 pgoyette Exp $");
#include "opt_kgdb.h"
@@ -141,10 +141,14 @@ zs_kgdb_init(void)
volatile struct zschan *zc;
int channel, promzs_unit;
extern const struct cdevsw zstty_cdevsw;
+ const struct cdevsw *cdev;
/* printf("zs_kgdb_init: kgdb_dev=0x%x\n", kgdb_dev); */
- if (cdevsw_lookup(kgdb_dev) != &zstty_cdevsw)
+ if ((cdev = cdevsw_lookup_acquire(kgdb_dev)) != &zstty_cdevsw) {
+ if (cdev != NULL)
+ cdevsw_release(cdev);
return;
+ }
/* Note: (ttya,ttyb) on zs0, and (ttyc,ttyd) on zs2 */
promzs_unit = (kgdb_dev & 2) ? 2 : 0;
@@ -171,6 +175,7 @@ zs_kgdb_init(void)
/* Store the getc/putc functions and arg. */
kgdb_attach(zs_getc, zs_putc, __UNVOLATILE(zc));
+ cdevsw_release(cdev);
}
/*
Index: src/sys/arch/sparc/sparc/machdep.c
diff -u src/sys/arch/sparc/sparc/machdep.c:1.327 src/sys/arch/sparc/sparc/machdep.c:1.327.4.1
--- src/sys/arch/sparc/sparc/machdep.c:1.327 Sun Sep 21 16:36:32 2014
+++ src/sys/arch/sparc/sparc/machdep.c Wed Jul 20 23:50:55 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.327 2014/09/21 16:36:32 christos Exp $ */
+/* $NetBSD: machdep.c,v 1.327.4.1 2016/07/20 23:50:55 pgoyette Exp $ */
/*-
* Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc.
@@ -71,7 +71,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.327 2014/09/21 16:36:32 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.327.4.1 2016/07/20 23:50:55 pgoyette Exp $");
#include "opt_compat_netbsd.h"
#include "opt_compat_sunos.h"
@@ -974,9 +974,13 @@ dumpsys(void)
if (dumpdev == NODEV)
return;
- bdev = bdevsw_lookup(dumpdev);
- if (bdev == NULL || bdev->d_psize == NULL)
+ bdev = bdevsw_lookup_acquire(dumpdev);
+ if (bdev == NULL)
return;
+ if (bdev->d_psize == NULL) {
+ bdevsw_release(bdev);
+ return;
+ }
/*
* For dumps during autoconfiguration,
@@ -985,6 +989,7 @@ dumpsys(void)
if (dumpsize == 0)
cpu_dumpconf();
if (dumplo <= 0) {
+ bdevsw_release(bdev);
printf("\ndump to dev %u,%u not possible\n",
major(dumpdev), minor(dumpdev));
return;
@@ -995,6 +1000,7 @@ dumpsys(void)
psize = bdev_size(dumpdev);
printf("dump ");
if (psize == -1) {
+ bdevsw_release(bdev);
printf("area unavailable\n");
return;
}
@@ -1063,6 +1069,7 @@ dumpsys(void)
printf("error %d\n", error);
break;
}
+ bdevsw_release(bdev);
}
/*
Index: src/sys/arch/sparc64/sparc64/machdep.c
diff -u src/sys/arch/sparc64/sparc64/machdep.c:1.285 src/sys/arch/sparc64/sparc64/machdep.c:1.285.2.1
--- src/sys/arch/sparc64/sparc64/machdep.c:1.285 Thu Jul 7 06:55:38 2016
+++ src/sys/arch/sparc64/sparc64/machdep.c Wed Jul 20 23:50:55 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.285 2016/07/07 06:55:38 msaitoh Exp $ */
+/* $NetBSD: machdep.c,v 1.285.2.1 2016/07/20 23:50:55 pgoyette Exp $ */
/*-
* Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc.
@@ -71,7 +71,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.285 2016/07/07 06:55:38 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.285.2.1 2016/07/20 23:50:55 pgoyette Exp $");
#include "opt_ddb.h"
#include "opt_multiprocessor.h"
@@ -707,9 +707,13 @@ dumpsys(void)
if (dumpdev == NODEV)
return;
- bdev = bdevsw_lookup(dumpdev);
- if (bdev == NULL || bdev->d_psize == NULL)
+ bdev = bdevsw_lookup_acquire(dumpdev);
+ if (bdev == NULL)
return;
+ if (bdev->d_psize == NULL) {
+ bdevsw_release(bdev);
+ return;
+ }
/*
* For dumps during autoconfiguration,
@@ -718,10 +722,12 @@ dumpsys(void)
if (dumpsize == 0)
cpu_dumpconf();
if (!dumpspace) {
+ bdevsw_release(bdev);
printf("\nno address space available, dump not possible\n");
return;
}
if (dumplo <= 0) {
+ bdevsw_release(bdev);
printf("\ndump to dev %" PRId32 ",%" PRId32 " not possible ("
"partition too small?)\n", major(dumpdev), minor(dumpdev));
return;
@@ -731,6 +737,7 @@ dumpsys(void)
psize = bdev_size(dumpdev);
if (psize == -1) {
+ bdevsw_release(bdev);
printf("dump area unavailable\n");
return;
}
@@ -798,6 +805,7 @@ dumpsys(void)
printf("- error %d\n", error);
break;
}
+ bdevsw_release(bdev);
}
void trapdump(struct trapframe64*);
Index: src/sys/arch/sun2/dev/consinit.c
diff -u src/sys/arch/sun2/dev/consinit.c:1.9 src/sys/arch/sun2/dev/consinit.c:1.9.20.1
--- src/sys/arch/sun2/dev/consinit.c:1.9 Fri Aug 10 14:52:26 2012
+++ src/sys/arch/sun2/dev/consinit.c Wed Jul 20 23:50:55 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: consinit.c,v 1.9 2012/08/10 14:52:26 tsutsui Exp $ */
+/* $NetBSD: consinit.c,v 1.9.20.1 2016/07/20 23:50:55 pgoyette Exp $ */
/*-
* Copyright (c) 2001 Matthew Fredette
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: consinit.c,v 1.9 2012/08/10 14:52:26 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: consinit.c,v 1.9.20.1 2016/07/20 23:50:55 pgoyette Exp $");
#include "opt_ddb.h"
#include "opt_kgdb.h"
@@ -282,8 +282,14 @@ consinit(void)
#ifdef KGDB
/* Set up KGDB */
#if NZS > 0
- if (cdevsw_lookup(kgdb_dev) == &zstty_cdevsw)
+ {
+ const struct cdevsw *cdev = cdevsw_lookup_acquire(kgdb_dev);
+
+ if (cdev == &zstty_cdevsw)
zs_kgdb_init();
+ if (cdev !\ NULL)
+ cdevsw_release(cdev);
+ }
#endif /* NZS > 0 */
#endif /* KGDB */
}
Index: src/sys/arch/sun2/dev/zs_kgdb.c
diff -u src/sys/arch/sun2/dev/zs_kgdb.c:1.10 src/sys/arch/sun2/dev/zs_kgdb.c:1.10.68.1
--- src/sys/arch/sun2/dev/zs_kgdb.c:1.10 Mon Apr 28 20:23:37 2008
+++ src/sys/arch/sun2/dev/zs_kgdb.c Wed Jul 20 23:50:55 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: zs_kgdb.c,v 1.10 2008/04/28 20:23:37 martin Exp $ */
+/* $NetBSD: zs_kgdb.c,v 1.10.68.1 2016/07/20 23:50:55 pgoyette Exp $ */
/*-
* Copyright (c) 1996 The NetBSD Foundation, Inc.
@@ -41,7 +41,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: zs_kgdb.c,v 1.10 2008/04/28 20:23:37 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: zs_kgdb.c,v 1.10.68.1 2016/07/20 23:50:55 pgoyette Exp $");
#include "opt_kgdb.h"
@@ -131,10 +131,14 @@ zs_kgdb_init(void)
volatile struct zschan *zc;
int channel, promzs_unit;
extern const struct cdevsw zstty_cdevsw;
+ const struct cdevsw *cdev;
/* printf("zs_kgdb_init: kgdb_dev=0x%x\n", kgdb_dev); */
- if (cdevsw_lookup(kgdb_dev) != &zstty_cdevsw)
+ if ((cdev = cdevsw_lookup_acquire(kgdb_dev)) != &zstty_cdevsw) {
+ if (cdev != NULL)
+ cdevsw_release(cdev);
return;
+ }
/* Note: (ttya,ttyb) on zs0, and (ttyc,ttyd) on zs2 */
promzs_unit = (kgdb_dev & 2) ? 2 : 0;
@@ -146,6 +150,7 @@ zs_kgdb_init(void)
memset((void *)&cs, 0, sizeof(cs));
zsd = zs_find_prom(promzs_unit);
if (zsd == NULL) {
+ cdevsw_release(cdev);
printf("zs_kgdb_init: zs not mapped.\n");
return;
}
@@ -161,6 +166,7 @@ zs_kgdb_init(void)
/* Store the getc/putc functions and arg. */
kgdb_attach(zs_getc, zs_putc, __UNVOLATILE(zc));
+ cdevsw_release(cdev);
}
/*
Index: src/sys/arch/sun2/sun2/machdep.c
diff -u src/sys/arch/sun2/sun2/machdep.c:1.77 src/sys/arch/sun2/sun2/machdep.c:1.77.10.1
--- src/sys/arch/sun2/sun2/machdep.c:1.77 Mon Mar 24 18:50:31 2014
+++ src/sys/arch/sun2/sun2/machdep.c Wed Jul 20 23:50:56 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.77 2014/03/24 18:50:31 christos Exp $ */
+/* $NetBSD: machdep.c,v 1.77.10.1 2016/07/20 23:50:56 pgoyette Exp $ */
/*
* Copyright (c) 1982, 1986, 1990, 1993
@@ -149,7 +149,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.77 2014/03/24 18:50:31 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.77.10.1 2016/07/20 23:50:56 pgoyette Exp $");
#include "opt_ddb.h"
#include "opt_kgdb.h"
@@ -615,11 +615,13 @@ dumpsys(void)
if (dumpdev == NODEV)
return;
- dsw = bdevsw_lookup(dumpdev);
- if (dsw == NULL || dsw->d_psize == NULL)
+ dsw = bdevsw_lookup_acquire(dumpdev);
+ if (dsw == NULL)
return;
- if (dumppage == 0)
+ if (dsw->d_psize == NULL || dumppage == 0) {
+ bdevsw_release(dsw);
return;
+ }
/*
* For dumps during autoconfiguration,
@@ -628,6 +630,7 @@ dumpsys(void)
if (dumpsize == 0)
cpu_dumpconf();
if (dumplo <= 0) {
+ bdevsw_release(dsw);
printf("\ndump to dev %u,%u not possible\n",
major(dumpdev), minor(dumpdev));
return;
@@ -727,9 +730,11 @@ dumpsys(void)
blkno += btodb(PAGE_SIZE);
} while (--todo > 0);
+ bdevsw_release(dsw);
printf("\rdump succeeded\n");
return;
fail:
+ bdevsw_release(dsw);
printf(" dump error=%d\n", error);
}
Index: src/sys/arch/sun3/dev/zs_kgdb.c
diff -u src/sys/arch/sun3/dev/zs_kgdb.c:1.26 src/sys/arch/sun3/dev/zs_kgdb.c:1.26.18.1
--- src/sys/arch/sun3/dev/zs_kgdb.c:1.26 Sat Oct 13 06:35:54 2012
+++ src/sys/arch/sun3/dev/zs_kgdb.c Wed Jul 20 23:50:56 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: zs_kgdb.c,v 1.26 2012/10/13 06:35:54 tsutsui Exp $ */
+/* $NetBSD: zs_kgdb.c,v 1.26.18.1 2016/07/20 23:50:56 pgoyette Exp $ */
/*-
* Copyright (c) 1996 The NetBSD Foundation, Inc.
@@ -41,7 +41,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: zs_kgdb.c,v 1.26 2012/10/13 06:35:54 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: zs_kgdb.c,v 1.26.18.1 2016/07/20 23:50:56 pgoyette Exp $");
#include "opt_kgdb.h"
@@ -134,10 +134,14 @@ zs_kgdb_init(void)
struct zschan *zc;
int channel, zsc_unit;
extern const struct cdevsw zstty_cdevsw;
+ const struct cdevsw *cdev;
/* printf("zs_kgdb_init: kgdb_dev=0x%x\n", kgdb_dev); */
- if (cdevsw_lookup(kgdb_dev) != &zstty_cdevsw)
+ if ((cdev = cdevsw_lookup_acquire(kgdb_dev)) != &zstty_cdevsw) {
+ if (cdev != NULL)
+ cdevsw_release(cdev);
return;
+ }
/* Note: (ttya,ttyb) on zsc1, and (ttyc,ttyd) on zsc0 */
zsc_unit = (kgdb_dev & 2) ? 0 : 1;
@@ -149,6 +153,7 @@ zs_kgdb_init(void)
memset((void *)&cs, 0, sizeof(cs));
zc = zs_get_chan_addr(zsc_unit, channel);
if (zc == NULL) {
+ cdevsw_release(cdev);
printf("zs_kgdb_init: zs not mapped.\n");
kgdb_dev = -1;
return;
@@ -164,6 +169,7 @@ zs_kgdb_init(void)
/* Store the getc/putc functions and arg. */
kgdb_attach(zs_getc, zs_putc, __UNVOLATILE(zc));
+ cdevsw_release(cdev);
}
/*
Index: src/sys/arch/sun3/sun3/machdep.c
diff -u src/sys/arch/sun3/sun3/machdep.c:1.208 src/sys/arch/sun3/sun3/machdep.c:1.208.10.1
--- src/sys/arch/sun3/sun3/machdep.c:1.208 Mon Mar 24 20:06:33 2014
+++ src/sys/arch/sun3/sun3/machdep.c Wed Jul 20 23:50:56 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.208 2014/03/24 20:06:33 christos Exp $ */
+/* $NetBSD: machdep.c,v 1.208.10.1 2016/07/20 23:50:56 pgoyette Exp $ */
/*
* Copyright (c) 1982, 1986, 1990, 1993
@@ -78,7 +78,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.208 2014/03/24 20:06:33 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.208.10.1 2016/07/20 23:50:56 pgoyette Exp $");
#include "opt_ddb.h"
#include "opt_kgdb.h"
@@ -534,9 +534,13 @@ dumpsys(void)
return;
if (dumppage == 0)
return;
- dsw = bdevsw_lookup(dumpdev);
- if (dsw == NULL || dsw->d_psize == NULL)
+ dsw = bdevsw_lookup_acquire(dumpdev);
+ if (dsw == NULL)
return;
+ if (dsw->d_psize == NULL) {
+ bdevsw_release(dsw);
+ return;
+ }
/*
* For dumps during autoconfiguration,
@@ -545,6 +549,7 @@ dumpsys(void)
if (dumpsize == 0)
cpu_dumpconf();
if (dumplo <= 0) {
+ bdevsw_release(dsw);
printf("\ndump to dev %u,%u not possible\n",
major(dumpdev), minor(dumpdev));
return;
@@ -553,6 +558,7 @@ dumpsys(void)
psize = bdev_size(dumpdev);
if (psize == -1) {
+ bdevsw_release(dsw);
printf("dump area unavailable\n");
return;
}
@@ -649,9 +655,11 @@ dumpsys(void)
blkno += btodb(PAGE_SIZE);
} while (--todo > 0);
+ bdevsw_release(dsw);
printf("\rdump succeeded\n");
return;
fail:
+ bdevsw_release(dsw);
printf(" dump error=%d\n", error);
}
Index: src/sys/arch/sun3/sun3x/machdep.c
diff -u src/sys/arch/sun3/sun3x/machdep.c:1.135 src/sys/arch/sun3/sun3x/machdep.c:1.135.10.1
--- src/sys/arch/sun3/sun3x/machdep.c:1.135 Mon Mar 24 20:06:33 2014
+++ src/sys/arch/sun3/sun3x/machdep.c Wed Jul 20 23:50:56 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.135 2014/03/24 20:06:33 christos Exp $ */
+/* $NetBSD: machdep.c,v 1.135.10.1 2016/07/20 23:50:56 pgoyette Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@@ -38,7 +38,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.135 2014/03/24 20:06:33 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.135.10.1 2016/07/20 23:50:56 pgoyette Exp $");
#include "opt_ddb.h"
#include "opt_kgdb.h"
@@ -522,9 +522,13 @@ dumpsys(void)
if (dumpdev == NODEV)
return;
- dsw = bdevsw_lookup(dumpdev);
- if (dsw == NULL || dsw->d_psize == NULL)
+ dsw = bdevsw_lookup_acquire(dumpdev);
+ if (dsw == NULL)
return;
+ if (dsw->d_psize == NULL) {
+ bdevsw_release(dsw);
+ return;
+ }
/*
* For dumps during autoconfiguration,
@@ -533,6 +537,7 @@ dumpsys(void)
if (dumpsize == 0)
cpu_dumpconf();
if (dumplo <= 0) {
+ bdevsw_release(dsw);
printf("\ndump to dev %u,%u not possible\n",
major(dumpdev), minor(dumpdev));
return;
@@ -541,6 +546,7 @@ dumpsys(void)
psize = bdev_size(dumpdev);
if (psize == -1) {
+ bdevsw_release(dsw);
printf("dump area unavailable\n");
return;
}
@@ -612,9 +618,11 @@ dumpsys(void)
todo--;
}
}
+ bdevsw_release(dsw);
printf("\rdump succeeded\n");
return;
fail:
+ bdevsw_release(dsw);
printf(" dump error=%d\n", error);
}
Index: src/sys/arch/vax/vax/machdep.c
diff -u src/sys/arch/vax/vax/machdep.c:1.191 src/sys/arch/vax/vax/machdep.c:1.191.2.1
--- src/sys/arch/vax/vax/machdep.c:1.191 Tue Dec 16 11:23:11 2014
+++ src/sys/arch/vax/vax/machdep.c Wed Jul 20 23:50:56 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.191 2014/12/16 11:23:11 jklos Exp $ */
+/* $NetBSD: machdep.c,v 1.191.2.1 2016/07/20 23:50:56 pgoyette Exp $ */
/*
* Copyright (c) 1982, 1986, 1990 The Regents of the University of California.
@@ -83,7 +83,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.191 2014/12/16 11:23:11 jklos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.191.2.1 2016/07/20 23:50:56 pgoyette Exp $");
#include "opt_ddb.h"
#include "opt_compat_netbsd.h"
@@ -415,7 +415,7 @@ dumpsys(void)
if (dumpdev == NODEV)
return;
- bdev = bdevsw_lookup(dumpdev);
+ bdev = bdevsw_lookup_acquire(dumpdev);
if (bdev == NULL)
return;
/*
@@ -425,6 +425,7 @@ dumpsys(void)
if (dumpsize == 0)
cpu_dumpconf();
if (dumplo <= 0) {
+ bdevsw_release(bdev);
printf("\ndump to dev %u,%u not possible\n",
major(dumpdev), minor(dumpdev));
return;
@@ -454,6 +455,7 @@ dumpsys(void)
printf("succeeded\n");
break;
}
+ bdevsw_release(bdev);
}
int
Index: src/sys/arch/x68k/x68k/machdep.c
diff -u src/sys/arch/x68k/x68k/machdep.c:1.193 src/sys/arch/x68k/x68k/machdep.c:1.193.2.1
--- src/sys/arch/x68k/x68k/machdep.c:1.193 Tue Jun 14 07:51:10 2016
+++ src/sys/arch/x68k/x68k/machdep.c Wed Jul 20 23:50:56 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.193 2016/06/14 07:51:10 isaki Exp $ */
+/* $NetBSD: machdep.c,v 1.193.2.1 2016/07/20 23:50:56 pgoyette Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@@ -39,7 +39,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.193 2016/06/14 07:51:10 isaki Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.193.2.1 2016/07/20 23:50:56 pgoyette Exp $");
#include "opt_ddb.h"
#include "opt_kgdb.h"
@@ -721,15 +721,18 @@ dumpsys(void)
/* Make sure dump device is valid. */
if (dumpdev == NODEV)
return;
- bdev = bdevsw_lookup(dumpdev);
+ bdev = bdevsw_lookup_acquire(dumpdev);
if (bdev == NULL)
return;
if (dumpsize == 0) {
cpu_dumpconf();
- if (dumpsize == 0)
+ if (dumpsize == 0) {
+ bdevsw_release(bdev);
return;
+ }
}
if (dumplo <= 0) {
+ bdevsw_release(bdev);
printf("\ndump to dev %u,%u not possible\n",
major(dumpdev), minor(dumpdev));
return;
@@ -781,31 +784,38 @@ dumpsys(void)
break;
case ENXIO:
+ bdevsw_release(bdev);
printf("device bad\n");
return;
case EFAULT:
+ bdevsw_release(bdev);
printf("device not ready\n");
return;
case EINVAL:
+ bdevsw_release(bdev);
printf("area improper\n");
return;
case EIO:
+ bdevsw_release(bdev);
printf("i/o error\n");
return;
case EINTR:
+ bdevsw_release(bdev);
printf("aborted from console\n");
return;
default:
+ bdevsw_release(bdev);
printf("error %d\n", error);
return;
}
}
printf("succeeded\n");
+ bdevsw_release(bdev);
}
void
Index: src/sys/arch/xen/xen/xbdback_xenbus.c
diff -u src/sys/arch/xen/xen/xbdback_xenbus.c:1.62 src/sys/arch/xen/xen/xbdback_xenbus.c:1.62.2.1
--- src/sys/arch/xen/xen/xbdback_xenbus.c:1.62 Wed Jan 6 15:28:40 2016
+++ src/sys/arch/xen/xen/xbdback_xenbus.c Wed Jul 20 23:50:56 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: xbdback_xenbus.c,v 1.62 2016/01/06 15:28:40 bouyer Exp $ */
+/* $NetBSD: xbdback_xenbus.c,v 1.62.2.1 2016/07/20 23:50:56 pgoyette Exp $ */
/*
* Copyright (c) 2006 Manuel Bouyer.
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xbdback_xenbus.c,v 1.62 2016/01/06 15:28:40 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xbdback_xenbus.c,v 1.62.2.1 2016/07/20 23:50:56 pgoyette Exp $");
#include <sys/atomic.h>
#include <sys/buf.h>
@@ -739,6 +739,7 @@ xbdback_backend_changed(struct xenbus_wa
struct xenbus_transaction *xbt;
const char *devname;
int major;
+ const struct bdevsw *bdev;
err = xenbus_read_ul(NULL, xbusd->xbusd_path, "physical-device",
&dev, 10);
@@ -781,7 +782,7 @@ xbdback_backend_changed(struct xenbus_wa
xbusd->xbusd_path, xbdi->xbdi_dev);
return;
}
- xbdi->xbdi_bdevsw = bdevsw_lookup(xbdi->xbdi_dev);
+ bdev = xbdi->xbdi_bdevsw = bdevsw_lookup_acquire(xbdi->xbdi_dev);
if (xbdi->xbdi_bdevsw == NULL) {
printf("xbdback %s: no bdevsw for device 0x%"PRIx64"\n",
xbusd->xbusd_path, xbdi->xbdi_dev);
@@ -791,6 +792,7 @@ xbdback_backend_changed(struct xenbus_wa
if (err) {
printf("xbdback %s: can't open device 0x%"PRIx64": %d\n",
xbusd->xbusd_path, xbdi->xbdi_dev, err);
+ bdevsw_release(bdev);
return;
}
err = vn_lock(xbdi->xbdi_vp, LK_EXCLUSIVE | LK_RETRY);
@@ -798,6 +800,7 @@ xbdback_backend_changed(struct xenbus_wa
printf("xbdback %s: can't vn_lock device 0x%"PRIx64": %d\n",
xbusd->xbusd_path, xbdi->xbdi_dev, err);
vrele(xbdi->xbdi_vp);
+ bdevsw_release(bdev);
return;
}
err = VOP_OPEN(xbdi->xbdi_vp, FREAD, NOCRED);
@@ -805,6 +808,7 @@ xbdback_backend_changed(struct xenbus_wa
printf("xbdback %s: can't VOP_OPEN device 0x%"PRIx64": %d\n",
xbusd->xbusd_path, xbdi->xbdi_dev, err);
vput(xbdi->xbdi_vp);
+ bdevsw_release(bdev);
return;
}
VOP_UNLOCK(xbdi->xbdi_vp);
@@ -824,6 +828,7 @@ xbdback_backend_changed(struct xenbus_wa
xbdi->xbdi_size = xbdi->xbdi_dev = 0;
vn_close(xbdi->xbdi_vp, FREAD, NOCRED);
xbdi->xbdi_vp = NULL;
+ bdevsw_release(bdev);
return;
}
again:
@@ -831,7 +836,8 @@ again:
if (xbt == NULL) {
printf("xbdback %s: can't start transaction\n",
xbusd->xbusd_path);
- return;
+ bdevsw_release(bdev);
+ return;
}
err = xenbus_printf(xbt, xbusd->xbusd_path, "sectors", "%" PRIu64 ,
xbdi->xbdi_size);
@@ -873,9 +879,11 @@ again:
printf("xbdback %s: can't switch state: %d\n",
xbusd->xbusd_path, err);
}
+ bdevsw_release(bdev);
return;
abort:
xenbus_transaction_end(xbt, 1);
+ bdevsw_release(bdev);
}
/*