Module Name:    src
Committed By:   mrg
Date:           Mon Dec 12 19:03:13 UTC 2011

Modified Files:
        src/sys/arch/alpha/alpha: machdep.c
        src/sys/arch/amd64/amd64: machdep.c
        src/sys/arch/amiga/amiga: machdep.c
        src/sys/arch/arm/arm32: stubs.c
        src/sys/arch/atari/atari: machdep.c
        src/sys/arch/cesfic/cesfic: machdep.c
        src/sys/arch/hp300/hp300: machdep.c
        src/sys/arch/hp700/hp700: autoconf.c machdep.c
        src/sys/arch/i386/i386: dumpsys.c
        src/sys/arch/luna68k/luna68k: machdep.c
        src/sys/arch/mac68k/mac68k: machdep.c
        src/sys/arch/mips/mips: mips_machdep.c
        src/sys/arch/mvme68k/mvme68k: machdep.c
        src/sys/arch/news68k/news68k: machdep.c
        src/sys/arch/next68k/next68k: machdep.c
        src/sys/arch/powerpc/powerpc: powerpc_machdep.c
        src/sys/arch/sparc/sparc: machdep.c
        src/sys/arch/sparc64/sparc64: machdep.c
        src/sys/arch/sun2/sun2: machdep.c
        src/sys/arch/sun3/sun3: machdep.c
        src/sys/arch/sun3/sun3x: machdep.c
        src/sys/arch/vax/vax: machdep.c
        src/sys/arch/x68k/x68k: machdep.c
        src/sys/kern: subr_devsw.c
        src/sys/sys: conf.h
        src/sys/uvm: uvm_swap.c

Log Message:
implement bdev_size(9) wrapper around d_psize() routine, so we can take
the device lock in relevant places.  avoid doing so while actually dumping.

tested i386 crash dumps still work, and that all touched files compile.

fixes PR#45705.


To generate a diff of this commit:
cvs rdiff -u -r1.335 -r1.336 src/sys/arch/alpha/alpha/machdep.c
cvs rdiff -u -r1.172 -r1.173 src/sys/arch/amd64/amd64/machdep.c
cvs rdiff -u -r1.235 -r1.236 src/sys/arch/amiga/amiga/machdep.c
cvs rdiff -u -r1.22 -r1.23 src/sys/arch/arm/arm32/stubs.c
cvs rdiff -u -r1.172 -r1.173 src/sys/arch/atari/atari/machdep.c
cvs rdiff -u -r1.60 -r1.61 src/sys/arch/cesfic/cesfic/machdep.c
cvs rdiff -u -r1.223 -r1.224 src/sys/arch/hp300/hp300/machdep.c
cvs rdiff -u -r1.39 -r1.40 src/sys/arch/hp700/hp700/autoconf.c
cvs rdiff -u -r1.101 -r1.102 src/sys/arch/hp700/hp700/machdep.c
cvs rdiff -u -r1.15 -r1.16 src/sys/arch/i386/i386/dumpsys.c
cvs rdiff -u -r1.88 -r1.89 src/sys/arch/luna68k/luna68k/machdep.c
cvs rdiff -u -r1.341 -r1.342 src/sys/arch/mac68k/mac68k/machdep.c
cvs rdiff -u -r1.250 -r1.251 src/sys/arch/mips/mips/mips_machdep.c
cvs rdiff -u -r1.149 -r1.150 src/sys/arch/mvme68k/mvme68k/machdep.c
cvs rdiff -u -r1.97 -r1.98 src/sys/arch/news68k/news68k/machdep.c
cvs rdiff -u -r1.105 -r1.106 src/sys/arch/next68k/next68k/machdep.c
cvs rdiff -u -r1.60 -r1.61 src/sys/arch/powerpc/powerpc/powerpc_machdep.c
cvs rdiff -u -r1.313 -r1.314 src/sys/arch/sparc/sparc/machdep.c
cvs rdiff -u -r1.262 -r1.263 src/sys/arch/sparc64/sparc64/machdep.c
cvs rdiff -u -r1.70 -r1.71 src/sys/arch/sun2/sun2/machdep.c
cvs rdiff -u -r1.203 -r1.204 src/sys/arch/sun3/sun3/machdep.c
cvs rdiff -u -r1.130 -r1.131 src/sys/arch/sun3/sun3x/machdep.c
cvs rdiff -u -r1.182 -r1.183 src/sys/arch/vax/vax/machdep.c
cvs rdiff -u -r1.178 -r1.179 src/sys/arch/x68k/x68k/machdep.c
cvs rdiff -u -r1.28 -r1.29 src/sys/kern/subr_devsw.c
cvs rdiff -u -r1.140 -r1.141 src/sys/sys/conf.h
cvs rdiff -u -r1.157 -r1.158 src/sys/uvm/uvm_swap.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/alpha/alpha/machdep.c
diff -u src/sys/arch/alpha/alpha/machdep.c:1.335 src/sys/arch/alpha/alpha/machdep.c:1.336
--- src/sys/arch/alpha/alpha/machdep.c:1.335	Sun Jun 12 03:35:37 2011
+++ src/sys/arch/alpha/alpha/machdep.c	Mon Dec 12 19:03:07 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.335 2011/06/12 03:35:37 rmind Exp $ */
+/* $NetBSD: machdep.c,v 1.336 2011/12/12 19:03:07 mrg 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.335 2011/06/12 03:35:37 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.336 2011/12/12 19:03:07 mrg Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1165,19 +1165,11 @@ cpu_dump(void)
 void
 cpu_dumpconf(void)
 {
-	const struct bdevsw *bdev;
 	int nblks, dumpblks;	/* size of dump area */
 
 	if (dumpdev == NODEV)
 		goto bad;
-	bdev = bdevsw_lookup(dumpdev);
-	if (bdev == NULL) {
-		dumpdev = NODEV;
-		goto bad;
-	}
-	if (bdev->d_psize == NULL)
-		goto bad;
-	nblks = (*bdev->d_psize)(dumpdev);
+	nblks = bdev_size(dumpdev);
 	if (nblks <= ctod(1))
 		goto bad;
 
@@ -1241,7 +1233,7 @@ dumpsys(void)
 	printf("\ndumping to dev %u,%u offset %ld\n",
 	    major(dumpdev), minor(dumpdev), dumplo);
 
-	psize = (*bdev->d_psize)(dumpdev);
+	psize = bdev_size(dumpdev);
 	printf("dump ");
 	if (psize == -1) {
 		printf("area unavailable\n");

Index: src/sys/arch/amd64/amd64/machdep.c
diff -u src/sys/arch/amd64/amd64/machdep.c:1.172 src/sys/arch/amd64/amd64/machdep.c:1.173
--- src/sys/arch/amd64/amd64/machdep.c:1.172	Sun Dec  4 16:24:13 2011
+++ src/sys/arch/amd64/amd64/machdep.c	Mon Dec 12 19:03:08 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.172 2011/12/04 16:24:13 chs Exp $	*/
+/*	$NetBSD: machdep.c,v 1.173 2011/12/12 19:03:08 mrg 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.172 2011/12/04 16:24:13 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.173 2011/12/12 19:03:08 mrg Exp $");
 
 /* #define XENDEBUG_LOW  */
 
@@ -1226,7 +1226,7 @@ dodumpsys(void)
 	    (unsigned long long)major(dumpdev),
 	    (unsigned long long)minor(dumpdev), dumplo);
 
-	psize = (*bdev->d_psize)(dumpdev);
+	psize = bdev_size(dumpdev);
 	printf("dump ");
 	if (psize == -1) {
 		printf("area unavailable\n");
@@ -1323,19 +1323,11 @@ failed:
 void
 cpu_dumpconf(void)
 {
-	const struct bdevsw *bdev;
 	int nblks, dumpblks;	/* size of dump area */
 
 	if (dumpdev == NODEV)
 		goto bad;
-	bdev = bdevsw_lookup(dumpdev);
-	if (bdev == NULL) {
-		dumpdev = NODEV;
-		goto bad;
-	}
-	if (bdev->d_psize == NULL)
-		goto bad;
-	nblks = (*bdev->d_psize)(dumpdev);
+	nblks = bdev_size(dumpdev);
 	if (nblks <= ctod(1))
 		goto bad;
 

Index: src/sys/arch/amiga/amiga/machdep.c
diff -u src/sys/arch/amiga/amiga/machdep.c:1.235 src/sys/arch/amiga/amiga/machdep.c:1.236
--- src/sys/arch/amiga/amiga/machdep.c:1.235	Thu Nov 17 07:45:53 2011
+++ src/sys/arch/amiga/amiga/machdep.c	Mon Dec 12 19:03:08 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.235 2011/11/17 07:45:53 mlelstv Exp $	*/
+/*	$NetBSD: machdep.c,v 1.236 2011/12/12 19:03:08 mrg Exp $	*/
 
 /*
  * Copyright (c) 1988 University of Utah.
@@ -48,7 +48,7 @@
 #include "opt_m68k_arch.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.235 2011/11/17 07:45:53 mlelstv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.236 2011/12/12 19:03:08 mrg Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -449,7 +449,6 @@ cpu_dumpconf(void)
 {
 	cpu_kcore_hdr_t *h = &cpu_kcore_hdr;
 	struct m68k_kcore_hdr *m = &h->un._m68k;
-	const struct bdevsw *bdev;
 	int nblks;
 	int i;
 	extern int end[];
@@ -510,12 +509,12 @@ cpu_dumpconf(void)
 		m->ram_segs[1].size  = memlist->m_seg[i].ms_size;
 		break;
 	}
-	if ((bdev = bdevsw_lookup(dumpdev)) == NULL) {
+	if (bdevsw_lookup(dumpdev) == NULL) {
 		dumpdev = NODEV;
 		return;
 	}
-	if (bdev->d_psize != NULL) {
-		nblks = (*bdev->d_psize)(dumpdev);
+	nblks = bdev_size(dumpdev);
+	if (nblks > 0) {
 		if (dumpsize > btoc(dbtob(nblks - dumplo)))
 			dumpsize = btoc(dbtob(nblks - dumplo));
 		else if (dumplo == 0)
@@ -577,7 +576,7 @@ dumpsys(void)
 	printf("\ndumping to dev %u,%u offset %ld\n", major(dumpdev),
 	    minor(dumpdev), dumplo);
 
-	psize = (*bdev->d_psize)(dumpdev);
+	psize = bdev_size(dumpdev);
 	printf("dump ");
 	if (psize == -1) {
 		printf("area unavailable.\n");

Index: src/sys/arch/arm/arm32/stubs.c
diff -u src/sys/arch/arm/arm32/stubs.c:1.22 src/sys/arch/arm/arm32/stubs.c:1.23
--- src/sys/arch/arm/arm32/stubs.c:1.22	Sat Nov  7 07:27:41 2009
+++ src/sys/arch/arm/arm32/stubs.c	Mon Dec 12 19:03:08 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: stubs.c,v 1.22 2009/11/07 07:27:41 cegger Exp $	*/
+/*	$NetBSD: stubs.c,v 1.23 2011/12/12 19:03:08 mrg Exp $	*/
 
 /*
  * Copyright (c) 1994-1998 Mark Brinicombe.
@@ -41,7 +41,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: stubs.c,v 1.22 2009/11/07 07:27:41 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: stubs.c,v 1.23 2011/12/12 19:03:08 mrg Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -86,17 +86,11 @@ struct pcb dumppcb;
 void
 cpu_dumpconf(void)
 {
-	const struct bdevsw *bdev;
 	int nblks, dumpblks;	/* size of dump area */
 
 	if (dumpdev == NODEV)
 		return;
-	bdev = bdevsw_lookup(dumpdev);
-	if (bdev == NULL)
-		panic("dumpconf: bad dumpdev=0x%"PRIx64"", dumpdev);
-	if (bdev->d_psize == NULL)
-		return;
-	nblks = (*bdev->d_psize)(dumpdev);
+	nblks = bdev_size(dumpdev);
 	if (nblks <= ctod(1))
 		return;
 
@@ -248,7 +242,7 @@ dodumpsys(void)
 	bdev = bdevsw_lookup(dumpdev);
 	if (bdev == NULL || bdev->d_psize == NULL)
 		return;
-	psize = (*bdev->d_psize)(dumpdev);
+	psize = bdev_size(dumpdev);
 	printf("dump ");
 	if (psize == -1) {
 		printf("area unavailable\n");

Index: src/sys/arch/atari/atari/machdep.c
diff -u src/sys/arch/atari/atari/machdep.c:1.172 src/sys/arch/atari/atari/machdep.c:1.173
--- src/sys/arch/atari/atari/machdep.c:1.172	Sun Jun 12 03:35:39 2011
+++ src/sys/arch/atari/atari/machdep.c	Mon Dec 12 19:03:08 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.172 2011/06/12 03:35:39 rmind Exp $	*/
+/*	$NetBSD: machdep.c,v 1.173 2011/12/12 19:03:08 mrg Exp $	*/
 
 /*
  * Copyright (c) 1988 University of Utah.
@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.172 2011/06/12 03:35:39 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.173 2011/12/12 19:03:08 mrg Exp $");
 
 #include "opt_ddb.h"
 #include "opt_compat_netbsd.h"
@@ -393,7 +393,6 @@ long		dumplo   = 0;		/* (disk blocks)		*
 void
 cpu_dumpconf(void)
 {
-	const struct bdevsw *bdev;
 	int	nblks, i;
 
 	for (i = dumpsize = 0; i < NMEM_SEGS; i++) {
@@ -404,13 +403,8 @@ cpu_dumpconf(void)
 	dumpsize = btoc(dumpsize);
 
 	if (dumpdev != NODEV) {
-		bdev = bdevsw_lookup(dumpdev);
-		if (bdev == NULL) {
-			dumpdev = NODEV;
-			return;
-		}
-		if (bdev->d_psize != NULL) {
-			nblks = (*bdev->d_psize)(dumpdev);
+		nblks = bdev_size(dumpdev);
+		if (nblks > 0) {
 			if (dumpsize > btoc(dbtob(nblks - dumplo)))
 				dumpsize = btoc(dbtob(nblks - dumplo));
 			else if (dumplo == 0)

Index: src/sys/arch/cesfic/cesfic/machdep.c
diff -u src/sys/arch/cesfic/cesfic/machdep.c:1.60 src/sys/arch/cesfic/cesfic/machdep.c:1.61
--- src/sys/arch/cesfic/cesfic/machdep.c:1.60	Sun Jun 12 03:35:40 2011
+++ src/sys/arch/cesfic/cesfic/machdep.c	Mon Dec 12 19:03:09 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.60 2011/06/12 03:35:40 rmind Exp $	*/
+/*	$NetBSD: machdep.c,v 1.61 2011/12/12 19:03:09 mrg Exp $	*/
 
 /*
  * Copyright (c) 1988 University of Utah.
@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.60 2011/06/12 03:35:40 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.61 2011/12/12 19:03:09 mrg Exp $");
 
 #include "opt_bufcache.h"
 #include "opt_ddb.h"
@@ -388,19 +388,11 @@ long	dumplo = 0;		/* blocks */
 void
 cpu_dumpconf(void)
 {
-	const struct bdevsw *bdev;
 	int nblks;	/* size of dump area */
 
 	if (dumpdev == NODEV)
 		return;
-	bdev = bdevsw_lookup(dumpdev);
-	if (bdev == NULL) {
-		dumpdev = NODEV;
-		return;
-	}
-	if (bdev->d_psize == NULL)
-		return;
-	nblks = (*bdev->d_psize)(dumpdev);
+	nblks = bdev_size(dumpdev);
 	if (nblks <= ctod(1))
 		return;
 

Index: src/sys/arch/hp300/hp300/machdep.c
diff -u src/sys/arch/hp300/hp300/machdep.c:1.223 src/sys/arch/hp300/hp300/machdep.c:1.224
--- src/sys/arch/hp300/hp300/machdep.c:1.223	Sun Jun 12 03:35:40 2011
+++ src/sys/arch/hp300/hp300/machdep.c	Mon Dec 12 19:03:09 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.223 2011/06/12 03:35:40 rmind Exp $	*/
+/*	$NetBSD: machdep.c,v 1.224 2011/12/12 19:03:09 mrg Exp $	*/
 
 /*
  * Copyright (c) 1988 University of Utah.
@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.223 2011/06/12 03:35:40 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.224 2011/12/12 19:03:09 mrg Exp $");
 
 #include "opt_ddb.h"
 #include "opt_compat_netbsd.h"
@@ -745,20 +745,12 @@ long	dumplo = 0;		/* blocks */
 void
 cpu_dumpconf(void)
 {
-	const struct bdevsw *bdev;
 	int chdrsize;	/* size of dump header */
 	int nblks;	/* size of dump area */
 
 	if (dumpdev == NODEV)
 		return;
-	bdev = bdevsw_lookup(dumpdev);
-	if (bdev == NULL) {
-		dumpdev = NODEV;
-		return;
-	}
-	if (bdev->d_psize == NULL)
-		return;
-	nblks = (*bdev->d_psize)(dumpdev);
+	nblks = bdev_size(dumpdev);
 	chdrsize = cpu_dumpsize();
 
 	dumpsize = btoc(cpu_kcore_hdr.un._m68k.ram_segs[0].size);

Index: src/sys/arch/hp700/hp700/autoconf.c
diff -u src/sys/arch/hp700/hp700/autoconf.c:1.39 src/sys/arch/hp700/hp700/autoconf.c:1.40
--- src/sys/arch/hp700/hp700/autoconf.c:1.39	Sun Jan 23 09:44:58 2011
+++ src/sys/arch/hp700/hp700/autoconf.c	Mon Dec 12 19:03:09 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: autoconf.c,v 1.39 2011/01/23 09:44:58 skrll Exp $	*/
+/*	$NetBSD: autoconf.c,v 1.40 2011/12/12 19:03:09 mrg Exp $	*/
 
 /*	$OpenBSD: autoconf.c,v 1.15 2001/06/25 00:43:10 mickey Exp $	*/
 
@@ -86,7 +86,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.39 2011/01/23 09:44:58 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.40 2011/12/12 19:03:09 mrg Exp $");
 
 #include "opt_kgdb.h"
 #include "opt_useleds.h"
@@ -293,20 +293,12 @@ hp700_led_blinker(void *arg)
 void
 cpu_dumpconf(void)
 {
-	const struct bdevsw *bdev;
 	extern int dumpsize;
 	int nblks, dumpblks;	/* size of dump area */
 
 	if (dumpdev == NODEV)
 		goto bad;
-	bdev = bdevsw_lookup(dumpdev);
-	if (bdev == NULL) {
-		dumpdev = NODEV;
-		goto bad;
-	}
-	if (bdev->d_psize == NULL)
-		goto bad;
-	nblks = (*bdev->d_psize)(dumpdev);
+	nblks = bdev_size(dumpdev);
 	if (nblks <= ctod(1))
 		goto bad;
 	dumpblks = cpu_dumpsize();

Index: src/sys/arch/hp700/hp700/machdep.c
diff -u src/sys/arch/hp700/hp700/machdep.c:1.101 src/sys/arch/hp700/hp700/machdep.c:1.102
--- src/sys/arch/hp700/hp700/machdep.c:1.101	Mon Dec  5 15:04:27 2011
+++ src/sys/arch/hp700/hp700/machdep.c	Mon Dec 12 19:03:09 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.101 2011/12/05 15:04:27 skrll Exp $	*/
+/*	$NetBSD: machdep.c,v 1.102 2011/12/12 19:03:09 mrg 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.101 2011/12/05 15:04:27 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.102 2011/12/12 19:03:09 mrg Exp $");
 
 #include "opt_cputype.h"
 #include "opt_ddb.h"
@@ -1809,7 +1809,7 @@ dumpsys(void)
 	printf("\ndumping to dev %u,%u offset %ld\n",
 	    major(dumpdev), minor(dumpdev), dumplo);
 
-	psize = (*bdev->d_psize)(dumpdev);
+	psize = bdev_size(dumpdev);
 	printf("dump ");
 	if (psize == -1) {
 		printf("area unavailable\n");

Index: src/sys/arch/i386/i386/dumpsys.c
diff -u src/sys/arch/i386/i386/dumpsys.c:1.15 src/sys/arch/i386/i386/dumpsys.c:1.16
--- src/sys/arch/i386/i386/dumpsys.c:1.15	Sun Nov 20 18:41:12 2011
+++ src/sys/arch/i386/i386/dumpsys.c	Mon Dec 12 19:03:09 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: dumpsys.c,v 1.15 2011/11/20 18:41:12 yamt Exp $	*/
+/*	$NetBSD: dumpsys.c,v 1.16 2011/12/12 19:03:09 mrg 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.15 2011/11/20 18:41:12 yamt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dumpsys.c,v 1.16 2011/12/12 19:03:09 mrg Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -177,7 +177,7 @@ dodumpsys(void)
 	    (unsigned long long)major(dumpdev),
 	    (unsigned long long)minor(dumpdev), dumplo);
 
-	psize = (*bdev->d_psize)(dumpdev);
+	psize = bdev_size(dumpdev);
 	printf("dump ");
 	if (psize == -1) {
 		printf("area unavailable\n");
@@ -274,19 +274,11 @@ failed:
 void
 cpu_dumpconf(void)
 {
-	const struct bdevsw *bdev;
 	int nblks, dumpblks;	/* size of dump area */
 
 	if (dumpdev == NODEV)
 		goto bad;
-	bdev = bdevsw_lookup(dumpdev);
-	if (bdev == NULL) {
-		dumpdev = NODEV;
-		goto bad;
-	}
-	if (bdev->d_psize == NULL)
-		goto bad;
-	nblks = (*bdev->d_psize)(dumpdev);
+	nblks = bdev_size(dumpdev);
 	if (nblks <= ctod(1))
 		goto bad;
 

Index: src/sys/arch/luna68k/luna68k/machdep.c
diff -u src/sys/arch/luna68k/luna68k/machdep.c:1.88 src/sys/arch/luna68k/luna68k/machdep.c:1.89
--- src/sys/arch/luna68k/luna68k/machdep.c:1.88	Sat Nov 26 04:32:46 2011
+++ src/sys/arch/luna68k/luna68k/machdep.c	Mon Dec 12 19:03:10 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.88 2011/11/26 04:32:46 tsutsui Exp $ */
+/* $NetBSD: machdep.c,v 1.89 2011/12/12 19:03:10 mrg 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.88 2011/11/26 04:32:46 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.89 2011/12/12 19:03:10 mrg Exp $");
 
 #include "opt_ddb.h"
 #include "opt_kgdb.h"
@@ -536,20 +536,12 @@ long	dumplo = 0;		/* blocks */
 void
 cpu_dumpconf(void)
 {
-	const struct bdevsw *bdev;
 	int chdrsize;	/* size of dump header */
 	int nblks;	/* size of dump area */
 
 	if (dumpdev == NODEV)
 		return;
-	bdev = bdevsw_lookup(dumpdev);
-	if (bdev == NULL) {
-		dumpdev = NODEV;
-		return;
-	}
-	if (bdev->d_psize == NULL)
-		return;
-	nblks = (*bdev->d_psize)(dumpdev);
+	nblks = bdev_size(dumpdev);
 	chdrsize = cpu_dumpsize();
 
 	dumpsize = btoc(cpu_kcore_hdr.un._m68k.ram_segs[0].size);

Index: src/sys/arch/mac68k/mac68k/machdep.c
diff -u src/sys/arch/mac68k/mac68k/machdep.c:1.341 src/sys/arch/mac68k/mac68k/machdep.c:1.342
--- src/sys/arch/mac68k/mac68k/machdep.c:1.341	Sun Jun 12 03:35:43 2011
+++ src/sys/arch/mac68k/mac68k/machdep.c	Mon Dec 12 19:03:10 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.341 2011/06/12 03:35:43 rmind Exp $	*/
+/*	$NetBSD: machdep.c,v 1.342 2011/12/12 19:03:10 mrg Exp $	*/
 
 /*
  * Copyright (c) 1988 University of Utah.
@@ -74,7 +74,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.341 2011/06/12 03:35:43 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.342 2011/12/12 19:03:10 mrg Exp $");
 
 #include "opt_adb.h"
 #include "opt_ddb.h"
@@ -639,7 +639,6 @@ cpu_dumpconf(void)
 {
 	cpu_kcore_hdr_t *h = &cpu_kcore_hdr;
 	struct m68k_kcore_hdr *m = &h->un._m68k;
-	const struct bdevsw *bdev;
 	int chdrsize;	/* size of dump header */
 	int nblks;	/* size of dump area */
 	int i;
@@ -647,14 +646,7 @@ cpu_dumpconf(void)
 	if (dumpdev == NODEV)
 		return;
 
-	bdev = bdevsw_lookup(dumpdev);
-	if (bdev == NULL) {
-		dumpdev = NODEV;
-		return;
-	}
-	if (bdev->d_psize == NULL)
-		return;
-	nblks = (*bdev->d_psize)(dumpdev);
+	nblks = bdev_size(dumpdev);
 	chdrsize = cpu_dumpsize();
 
 	dumpsize = 0;

Index: src/sys/arch/mips/mips/mips_machdep.c
diff -u src/sys/arch/mips/mips/mips_machdep.c:1.250 src/sys/arch/mips/mips/mips_machdep.c:1.251
--- src/sys/arch/mips/mips/mips_machdep.c:1.250	Sat Oct 29 18:56:49 2011
+++ src/sys/arch/mips/mips/mips_machdep.c	Mon Dec 12 19:03:10 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: mips_machdep.c,v 1.250 2011/10/29 18:56:49 jakllsch Exp $	*/
+/*	$NetBSD: mips_machdep.c,v 1.251 2011/12/12 19:03:10 mrg Exp $	*/
 
 /*
  * Copyright 2002 Wasabi Systems, Inc.
@@ -112,7 +112,7 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: mips_machdep.c,v 1.250 2011/10/29 18:56:49 jakllsch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mips_machdep.c,v 1.251 2011/12/12 19:03:10 mrg Exp $");
 
 #define __INTR_PRIVATE
 #include "opt_cputype.h"
@@ -1787,19 +1787,11 @@ cpu_dump(void)
 void
 cpu_dumpconf(void)
 {
-	const struct bdevsw *bdev;
 	int nblks, dumpblks;	/* size of dump area */
 
 	if (dumpdev == NODEV)
 		goto bad;
-	bdev = bdevsw_lookup(dumpdev);
-	if (bdev == NULL) {
-		dumpdev = NODEV;
-		goto bad;
-	}
-	if (bdev->d_psize == NULL)
-		goto bad;
-	nblks = (*bdev->d_psize)(dumpdev);
+	nblks = bdev_size(dumpdev);
 	if (nblks <= ctod(1))
 		goto bad;
 
@@ -1864,7 +1856,7 @@ dumpsys(void)
 	printf("\ndumping to dev %u,%u offset %ld\n", major(dumpdev),
 	    minor(dumpdev), dumplo);
 
-	psize = (*bdev->d_psize)(dumpdev);
+	psize = bdev_size(dumpdev);
 	printf("dump ");
 	if (psize == -1) {
 		printf("area unavailable\n");

Index: src/sys/arch/mvme68k/mvme68k/machdep.c
diff -u src/sys/arch/mvme68k/mvme68k/machdep.c:1.149 src/sys/arch/mvme68k/mvme68k/machdep.c:1.150
--- src/sys/arch/mvme68k/mvme68k/machdep.c:1.149	Sun Jun 12 03:35:44 2011
+++ src/sys/arch/mvme68k/mvme68k/machdep.c	Mon Dec 12 19:03:10 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.149 2011/06/12 03:35:44 rmind Exp $	*/
+/*	$NetBSD: machdep.c,v 1.150 2011/12/12 19:03:10 mrg Exp $	*/
 
 /*
  * Copyright (c) 1988 University of Utah.
@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.149 2011/06/12 03:35:44 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.150 2011/12/12 19:03:10 mrg Exp $");
 
 #include "opt_ddb.h"
 #include "opt_m060sp.h"
@@ -837,19 +837,11 @@ long	dumplo = 0;		/* blocks */
 void
 cpu_dumpconf(void)
 {
-	const struct bdevsw *bdev;
 	int nblks, dumpblks;	/* size of dump area */
 
 	if (dumpdev == NODEV)
 		goto bad;
-	bdev = bdevsw_lookup(dumpdev);
-	if (bdev == NULL) {
-		dumpdev = NODEV;
-		goto bad;
-	}
-	if (bdev->d_psize == NULL)
-		goto bad;
-	nblks = (*bdev->d_psize)(dumpdev);
+	nblks = bdev_size(dumpdev);
 	if (nblks <= ctod(1))
 		goto bad;
 
@@ -909,7 +901,7 @@ dumpsys(void)
 	printf("\ndumping to dev %u,%u offset %ld\n",
 	    major(dumpdev), minor(dumpdev), dumplo);
 
-	psize = (*bdev->d_psize)(dumpdev);
+	psize = bdev_size(dumpdev);
 	printf("dump ");
 	if (psize == -1) {
 		printf("area unavailable\n");

Index: src/sys/arch/news68k/news68k/machdep.c
diff -u src/sys/arch/news68k/news68k/machdep.c:1.97 src/sys/arch/news68k/news68k/machdep.c:1.98
--- src/sys/arch/news68k/news68k/machdep.c:1.97	Tue Nov 22 14:31:02 2011
+++ src/sys/arch/news68k/news68k/machdep.c	Mon Dec 12 19:03:11 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.97 2011/11/22 14:31:02 tsutsui Exp $	*/
+/*	$NetBSD: machdep.c,v 1.98 2011/12/12 19:03:11 mrg Exp $	*/
 
 /*
  * Copyright (c) 1988 University of Utah.
@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.97 2011/11/22 14:31:02 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.98 2011/12/12 19:03:11 mrg Exp $");
 
 #include "opt_ddb.h"
 #include "opt_compat_netbsd.h"
@@ -472,20 +472,12 @@ long	dumplo = 0;		/* blocks */
 void
 cpu_dumpconf(void)
 {
-	const struct bdevsw *bdev;
 	int chdrsize;	/* size of dump header */
 	int nblks;	/* size of dump area */
 
 	if (dumpdev == NODEV)
 		return;
-	bdev = bdevsw_lookup(dumpdev);
-	if (bdev == NULL) {
-		dumpdev = NODEV;
-		return;
-	}
-	if (bdev->d_psize == NULL)
-		return;
-	nblks = (*bdev->d_psize)(dumpdev);
+	nblks = bdev_size(dumpdev);
 	chdrsize = cpu_dumpsize();
 
 	dumpsize = btoc(cpu_kcore_hdr.un._m68k.ram_segs[0].size);

Index: src/sys/arch/next68k/next68k/machdep.c
diff -u src/sys/arch/next68k/next68k/machdep.c:1.105 src/sys/arch/next68k/next68k/machdep.c:1.106
--- src/sys/arch/next68k/next68k/machdep.c:1.105	Sun Jun 12 03:35:45 2011
+++ src/sys/arch/next68k/next68k/machdep.c	Mon Dec 12 19:03:11 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.105 2011/06/12 03:35:45 rmind Exp $	*/
+/*	$NetBSD: machdep.c,v 1.106 2011/12/12 19:03:11 mrg Exp $	*/
 
 /*
  * Copyright (c) 1998 Darrin B. Jewell
@@ -40,7 +40,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.105 2011/06/12 03:35:45 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.106 2011/12/12 19:03:11 mrg Exp $");
 
 #include "opt_ddb.h"
 #include "opt_kgdb.h"
@@ -621,20 +621,12 @@ long	dumplo = 0;		/* blocks */
 void
 cpu_dumpconf(void)
 {
-	const struct bdevsw *bdev;
 	int chdrsize;	/* size of dump header */
 	int nblks;	/* size of dump area */
 
 	if (dumpdev == NODEV)
 		return;
-	bdev = bdevsw_lookup(dumpdev);
-	if (bdev == NULL) {
-		dumpdev = NODEV;
-		return;
-	}
-	if (bdev->d_psize == NULL)
-		return;
-	nblks = (*bdev->d_psize)(dumpdev);
+	nblks = bdev_size(dumpdev);
 	chdrsize = cpu_dumpsize();
 
 	dumpsize = btoc(cpu_kcore_hdr.un._m68k.ram_segs[0].size);

Index: src/sys/arch/powerpc/powerpc/powerpc_machdep.c
diff -u src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.60 src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.61
--- src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.60	Sun Jul 31 10:00:52 2011
+++ src/sys/arch/powerpc/powerpc/powerpc_machdep.c	Mon Dec 12 19:03:11 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: powerpc_machdep.c,v 1.60 2011/07/31 10:00:52 kiyohara Exp $	*/
+/*	$NetBSD: powerpc_machdep.c,v 1.61 2011/12/12 19:03:11 mrg Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996 Wolfgang Solfrank.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: powerpc_machdep.c,v 1.60 2011/07/31 10:00:52 kiyohara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: powerpc_machdep.c,v 1.61 2011/12/12 19:03:11 mrg Exp $");
 
 #include "opt_altivec.h"
 #include "opt_modular.h"
@@ -280,20 +280,12 @@ long dumplo = -1;			/* blocks */
 void
 cpu_dumpconf(void)
 {
-	const struct bdevsw *bdev;
 	int nblks;		/* size of dump device */
 	int skip;
 
 	if (dumpdev == NODEV)
 		return;
-	bdev = bdevsw_lookup(dumpdev);
-	if (bdev == NULL) {
-		dumpdev = NODEV;
-		return;
-	}
-	if (bdev->d_psize == NULL)
-		return;
-	nblks = (*bdev->d_psize)(dumpdev);
+	nblks = bdev_size(dumpdev);
 	if (nblks <= ctod(1))
 		return;
 

Index: src/sys/arch/sparc/sparc/machdep.c
diff -u src/sys/arch/sparc/sparc/machdep.c:1.313 src/sys/arch/sparc/sparc/machdep.c:1.314
--- src/sys/arch/sparc/sparc/machdep.c:1.313	Sun Jul 17 23:29:10 2011
+++ src/sys/arch/sparc/sparc/machdep.c	Mon Dec 12 19:03:11 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.313 2011/07/17 23:29:10 dyoung Exp $ */
+/*	$NetBSD: machdep.c,v 1.314 2011/12/12 19:03:11 mrg 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.313 2011/07/17 23:29:10 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.314 2011/12/12 19:03:11 mrg Exp $");
 
 #include "opt_compat_netbsd.h"
 #include "opt_compat_sunos.h"
@@ -938,16 +938,11 @@ long	dumplo = 0;
 void
 cpu_dumpconf(void)
 {
-	const struct bdevsw *bdev;
 	int nblks, dumpblks;
 
 	if (dumpdev == NODEV)
 		return;
-	bdev = bdevsw_lookup(dumpdev);
-	if (bdev == NULL || bdev->d_psize == NULL)
-		return;
-
-	nblks = (*bdev->d_psize)(dumpdev);
+	nblks = bdev_size(dumpdev);
 
 	dumpblks = ctod(physmem) + pmap_dumpsize();
 	if (dumpblks > (nblks - ctod(1)))
@@ -1019,7 +1014,7 @@ dumpsys(void)
 	printf("\ndumping to dev %u,%u offset %ld\n",
 	    major(dumpdev), minor(dumpdev), dumplo);
 
-	psize = (*bdev->d_psize)(dumpdev);
+	psize = bdev_size(dumpdev);
 	printf("dump ");
 	if (psize == -1) {
 		printf("area unavailable\n");

Index: src/sys/arch/sparc64/sparc64/machdep.c
diff -u src/sys/arch/sparc64/sparc64/machdep.c:1.262 src/sys/arch/sparc64/sparc64/machdep.c:1.263
--- src/sys/arch/sparc64/sparc64/machdep.c:1.262	Sat Oct  8 08:49:07 2011
+++ src/sys/arch/sparc64/sparc64/machdep.c	Mon Dec 12 19:03:11 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.262 2011/10/08 08:49:07 nakayama Exp $ */
+/*	$NetBSD: machdep.c,v 1.263 2011/12/12 19:03:11 mrg 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.262 2011/10/08 08:49:07 nakayama Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.263 2011/12/12 19:03:11 mrg Exp $");
 
 #include "opt_ddb.h"
 #include "opt_multiprocessor.h"
@@ -698,18 +698,12 @@ long	dumplo = 0;
 void
 cpu_dumpconf(void)
 {
-	const struct bdevsw *bdev;
 	int nblks, dumpblks;
 
 	if (dumpdev == NODEV)
 		/* No usable dump device */
 		return;
-	bdev = bdevsw_lookup(dumpdev);
-	if (bdev == NULL || bdev->d_psize == NULL)
-		/* No usable dump device */
-		return;
-
-	nblks = (*bdev->d_psize)(dumpdev);
+	nblks = bdev_size(dumpdev);
 
 	dumpblks = ctod(physmem) + pmap_dumpsize();
 	if (dumpblks > (nblks - ctod(1)))
@@ -784,7 +778,7 @@ dumpsys(void)
 	printf("\ndumping to dev %" PRId32 ",%" PRId32 " offset %ld\n",
 	    major(dumpdev), minor(dumpdev), dumplo);
 
-	psize = (*bdev->d_psize)(dumpdev);
+	psize = bdev_size(dumpdev);
 	if (psize == -1) {
 		printf("dump area unavailable\n");
 		return;

Index: src/sys/arch/sun2/sun2/machdep.c
diff -u src/sys/arch/sun2/sun2/machdep.c:1.70 src/sys/arch/sun2/sun2/machdep.c:1.71
--- src/sys/arch/sun2/sun2/machdep.c:1.70	Sun Jun 12 03:35:47 2011
+++ src/sys/arch/sun2/sun2/machdep.c	Mon Dec 12 19:03:11 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.70 2011/06/12 03:35:47 rmind Exp $	*/
+/*	$NetBSD: machdep.c,v 1.71 2011/12/12 19:03:11 mrg Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1990, 1993
@@ -149,7 +149,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.70 2011/06/12 03:35:47 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.71 2011/12/12 19:03:11 mrg Exp $");
 
 #include "opt_ddb.h"
 #include "opt_kgdb.h"
@@ -566,23 +566,13 @@ long	dumplo = 0; 		/* blocks */
 void 
 cpu_dumpconf(void)
 {
-	const struct bdevsw *bdev;
 	int devblks;	/* size of dump device in blocks */
 	int dumpblks;	/* size of dump image in blocks */
-	int (*getsize)(dev_t);
 
 	if (dumpdev == NODEV)
 		return;
 
-	bdev = bdevsw_lookup(dumpdev);
-	if (bdev == NULL) {
-		dumpdev = NODEV;
-		return;
-	}
-	getsize = bdev->d_psize;
-	if (getsize == NULL)
-		return;
-	devblks = (*getsize)(dumpdev);
+	devblks = bdev_size(dumpdev);
 	if (devblks <= ctod(1))
 		return;
 	devblks &= ~(ctod(1)-1);
@@ -651,7 +641,7 @@ dumpsys(void)
 	}
 	savectx(&dumppcb);
 
-	psize = (*(dsw->d_psize))(dumpdev);
+	psize = bdev_size(dumpdev);
 	if (psize == -1) {
 		printf("dump area unavailable\n");
 		return;

Index: src/sys/arch/sun3/sun3/machdep.c
diff -u src/sys/arch/sun3/sun3/machdep.c:1.203 src/sys/arch/sun3/sun3/machdep.c:1.204
--- src/sys/arch/sun3/sun3/machdep.c:1.203	Tue Jun 14 15:23:19 2011
+++ src/sys/arch/sun3/sun3/machdep.c	Mon Dec 12 19:03:12 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.203 2011/06/14 15:23:19 tsutsui Exp $	*/
+/*	$NetBSD: machdep.c,v 1.204 2011/12/12 19:03:12 mrg Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1990, 1993
@@ -78,7 +78,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.203 2011/06/14 15:23:19 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.204 2011/12/12 19:03:12 mrg Exp $");
 
 #include "opt_ddb.h"
 #include "opt_kgdb.h"
@@ -483,23 +483,13 @@ long	dumplo = 0; 		/* blocks */
 void 
 cpu_dumpconf(void)
 {
-	const struct bdevsw *bdev;
 	int devblks;	/* size of dump device in blocks */
 	int dumpblks;	/* size of dump image in blocks */
-	int (*getsize)(dev_t);
 
 	if (dumpdev == NODEV)
 		return;
 
-	bdev = bdevsw_lookup(dumpdev);
-	if (bdev == NULL) {
-		dumpdev = NODEV;
-		return;
-	}
-	getsize = bdev->d_psize;
-	if (getsize == NULL)
-		return;
-	devblks = (*getsize)(dumpdev);
+	devblks = bdev_size(dumpdev);
 	if (devblks <= ctod(1))
 		return;
 	devblks &= ~(ctod(1)-1);
@@ -568,7 +558,7 @@ dumpsys(void)
 	}
 	savectx(&dumppcb);
 
-	psize = (*(dsw->d_psize))(dumpdev);
+	psize = bdev_size(dumpdev);
 	if (psize == -1) {
 		printf("dump area unavailable\n");
 		return;

Index: src/sys/arch/sun3/sun3x/machdep.c
diff -u src/sys/arch/sun3/sun3x/machdep.c:1.130 src/sys/arch/sun3/sun3x/machdep.c:1.131
--- src/sys/arch/sun3/sun3x/machdep.c:1.130	Tue Jun 14 15:23:19 2011
+++ src/sys/arch/sun3/sun3x/machdep.c	Mon Dec 12 19:03:12 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.130 2011/06/14 15:23:19 tsutsui Exp $	*/
+/*	$NetBSD: machdep.c,v 1.131 2011/12/12 19:03:12 mrg Exp $	*/
 
 /*
  * Copyright (c) 1988 University of Utah.
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.130 2011/06/14 15:23:19 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.131 2011/12/12 19:03:12 mrg Exp $");
 
 #include "opt_ddb.h"
 #include "opt_kgdb.h"
@@ -473,23 +473,13 @@ long	dumplo = 0; 		/* blocks */
 void 
 cpu_dumpconf(void)
 {
-	const struct bdevsw *bdev;
 	int devblks;	/* size of dump device in blocks */
 	int dumpblks;	/* size of dump image in blocks */
-	int (*getsize)(dev_t);
 
 	if (dumpdev == NODEV)
 		return;
 
-	bdev = bdevsw_lookup(dumpdev);
-	if (bdev == NULL) {
-		dumpdev = NODEV;
-		return;
-	}
-	getsize = bdev->d_psize;
-	if (getsize == NULL)
-		return;
-	devblks = (*getsize)(dumpdev);
+	devblks = bdev_size(dumpdev);
 	if (devblks <= ctod(1))
 		return;
 	devblks &= ~(ctod(1) - 1);
@@ -556,7 +546,7 @@ dumpsys(void)
 	}
 	savectx(&dumppcb);
 
-	psize = (*(dsw->d_psize))(dumpdev);
+	psize = bdev_size(dumpdev);
 	if (psize == -1) {
 		printf("dump area unavailable\n");
 		return;

Index: src/sys/arch/vax/vax/machdep.c
diff -u src/sys/arch/vax/vax/machdep.c:1.182 src/sys/arch/vax/vax/machdep.c:1.183
--- src/sys/arch/vax/vax/machdep.c:1.182	Sun Jul  3 02:18:21 2011
+++ src/sys/arch/vax/vax/machdep.c	Mon Dec 12 19:03:12 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.182 2011/07/03 02:18:21 matt Exp $	 */
+/* $NetBSD: machdep.c,v 1.183 2011/12/12 19:03:12 mrg 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.182 2011/07/03 02:18:21 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.183 2011/12/12 19:03:12 mrg Exp $");
 
 #include "opt_ddb.h"
 #include "opt_compat_netbsd.h"
@@ -227,20 +227,15 @@ long	dumplo = 0;
 void
 cpu_dumpconf(void)
 {
-	const struct bdevsw *bdev;
-	int		nblks;
+	int	nblks;
 
 	/*
 	 * XXX include the final RAM page which is not included in physmem.
 	 */
 	if (dumpdev == NODEV)
 		return;
-	bdev = bdevsw_lookup(dumpdev);
-	if (bdev == NULL)
-		return;
-	dumpsize = physmem + 1;
-	if (bdev->d_psize != NULL) {
-		nblks = (*bdev->d_psize)(dumpdev);
+	nblks = bdev_size(dumpdev);
+	if (nblks > 0) {
 		if (dumpsize > btoc(dbtob(nblks - dumplo)))
 			dumpsize = btoc(dbtob(nblks - dumplo));
 		else if (dumplo == 0)

Index: src/sys/arch/x68k/x68k/machdep.c
diff -u src/sys/arch/x68k/x68k/machdep.c:1.178 src/sys/arch/x68k/x68k/machdep.c:1.179
--- src/sys/arch/x68k/x68k/machdep.c:1.178	Sun Jun 12 03:35:49 2011
+++ src/sys/arch/x68k/x68k/machdep.c	Mon Dec 12 19:03:12 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.178 2011/06/12 03:35:49 rmind Exp $	*/
+/*	$NetBSD: machdep.c,v 1.179 2011/12/12 19:03:12 mrg Exp $	*/
 
 /*
  * Copyright (c) 1988 University of Utah.
@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.178 2011/06/12 03:35:49 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.179 2011/12/12 19:03:12 mrg Exp $");
 
 #include "opt_ddb.h"
 #include "opt_kgdb.h"
@@ -585,21 +585,13 @@ cpu_dumpconf(void)
 {
 	cpu_kcore_hdr_t *h = &cpu_kcore_hdr;
 	struct m68k_kcore_hdr *m = &h->un._m68k;
-	const struct bdevsw *bdev;
 	int chdrsize;	/* size of dump header */
 	int nblks;	/* size of dump area */
 	int i;
 
 	if (dumpdev == NODEV)
 		return;
-	bdev = bdevsw_lookup(dumpdev);
-	if (bdev == NULL) {
-		dumpdev = NODEV;
-		return;
-	}
-	if (bdev->d_psize == NULL)
-		return;
-	nblks = (*bdev->d_psize)(dumpdev);
+	nblks = bdev_size(dumpdev);
 	chdrsize = cpu_dumpsize();
 
 	dumpsize = 0;

Index: src/sys/kern/subr_devsw.c
diff -u src/sys/kern/subr_devsw.c:1.28 src/sys/kern/subr_devsw.c:1.29
--- src/sys/kern/subr_devsw.c:1.28	Thu Sep  3 11:42:21 2009
+++ src/sys/kern/subr_devsw.c	Mon Dec 12 19:03:12 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: subr_devsw.c,v 1.28 2009/09/03 11:42:21 jmcneill Exp $	*/
+/*	$NetBSD: subr_devsw.c,v 1.29 2011/12/12 19:03:12 mrg Exp $	*/
 
 /*-
  * Copyright (c) 2001, 2002, 2007, 2008 The NetBSD Foundation, Inc.
@@ -69,7 +69,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: subr_devsw.c,v 1.28 2009/09/03 11:42:21 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_devsw.c,v 1.29 2011/12/12 19:03:12 mrg Exp $");
 
 #include <sys/param.h>
 #include <sys/conf.h>
@@ -79,6 +79,7 @@ __KERNEL_RCSID(0, "$NetBSD: subr_devsw.c
 #include <sys/tty.h>
 #include <sys/cpu.h>
 #include <sys/buf.h>
+#include <sys/reboot.h>
 
 #ifdef DEVSW_DEBUG
 #define	DPRINTF(x)	printf x
@@ -793,6 +794,28 @@ bdev_type(dev_t dev)
 }
 
 int
+bdev_size(dev_t dev)
+{
+	const struct bdevsw *d;
+	int rv, mpflag = 0;
+
+	if ((d = bdevsw_lookup(dev)) == NULL ||
+	    d->d_psize == NULL)
+		return -1;
+
+	/*
+	 * Don't to try lock the device if we're dumping.
+	 */
+	if ((boothowto & RB_DUMP) == 0)
+		DEV_LOCK(d);
+	rv = (*d->d_psize)(dev);
+	if ((boothowto & RB_DUMP) == 0)
+		DEV_UNLOCK(d);
+
+	return rv;
+}
+
+int
 cdev_open(dev_t dev, int flag, int devtype, lwp_t *l)
 {
 	const struct cdevsw *d;

Index: src/sys/sys/conf.h
diff -u src/sys/sys/conf.h:1.140 src/sys/sys/conf.h:1.141
--- src/sys/sys/conf.h:1.140	Sun Jun 12 03:35:59 2011
+++ src/sys/sys/conf.h	Mon Dec 12 19:03:12 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: conf.h,v 1.140 2011/06/12 03:35:59 rmind Exp $	*/
+/*	$NetBSD: conf.h,v 1.141 2011/12/12 19:03:12 mrg Exp $	*/
 
 /*-
  * Copyright (c) 1990, 1993
@@ -166,6 +166,7 @@ dev_type_kqfilter(cdev_kqfilter);
 
 int	cdev_type(dev_t);
 int	bdev_type(dev_t);
+int	bdev_size(dev_t);
 
 /* symbolic sleep message strings */
 extern	const char devopn[], devio[], devwait[], devin[], devout[];

Index: src/sys/uvm/uvm_swap.c
diff -u src/sys/uvm/uvm_swap.c:1.157 src/sys/uvm/uvm_swap.c:1.158
--- src/sys/uvm/uvm_swap.c:1.157	Fri Sep  2 22:25:08 2011
+++ src/sys/uvm/uvm_swap.c	Mon Dec 12 19:03:13 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_swap.c,v 1.157 2011/09/02 22:25:08 dyoung Exp $	*/
+/*	$NetBSD: uvm_swap.c,v 1.158 2011/12/12 19:03:13 mrg Exp $	*/
 
 /*
  * Copyright (c) 1995, 1996, 1997, 2009 Matthew R. Green
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_swap.c,v 1.157 2011/09/02 22:25:08 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_swap.c,v 1.158 2011/12/12 19:03:13 mrg Exp $");
 
 #include "opt_uvmhist.h"
 #include "opt_compat_netbsd.h"
@@ -819,7 +819,6 @@ swap_on(struct lwp *l, struct swapdev *s
 	long addr;
 	vmem_addr_t result;
 	struct vattr va;
-	const struct bdevsw *bdev;
 	dev_t dev;
 	UVMHIST_FUNC("swap_on"); UVMHIST_CALLED(pdhist);
 
@@ -858,9 +857,7 @@ swap_on(struct lwp *l, struct swapdev *s
 	 */
 	switch (vp->v_type) {
 	case VBLK:
-		bdev = bdevsw_lookup(dev);
-		if (bdev == NULL || bdev->d_psize == NULL ||
-		    (nblocks = (*bdev->d_psize)(dev)) == -1) {
+		if ((nblocks = bdev_size(dev)) == -1) {
 			error = ENXIO;
 			goto bad;
 		}

Reply via email to