diff options
author | phk <phk@FreeBSD.org> | 1999-07-17 20:47:52 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 1999-07-17 20:47:52 +0000 |
commit | f598bb42c149f910fb757059816fcd16a67707a6 (patch) | |
tree | 53abdff536c4c39f8bd75e4a739c7a9658b2ce01 | |
parent | 6063f24ab8d9d89a4149c1e0315451a45fa07b09 (diff) | |
download | FreeBSD-src-f598bb42c149f910fb757059816fcd16a67707a6.zip FreeBSD-src-f598bb42c149f910fb757059816fcd16a67707a6.tar.gz |
Centralize dumpdev handling.
-rw-r--r-- | sys/alpha/alpha/autoconf.c | 58 | ||||
-rw-r--r-- | sys/amd64/amd64/autoconf.c | 61 | ||||
-rw-r--r-- | sys/i386/i386/autoconf.c | 61 | ||||
-rw-r--r-- | sys/kern/kern_shutdown.c | 61 | ||||
-rw-r--r-- | sys/sys/systm.h | 3 |
5 files changed, 61 insertions, 183 deletions
diff --git a/sys/alpha/alpha/autoconf.c b/sys/alpha/alpha/autoconf.c index 95afc8d..6f5942e 100644 --- a/sys/alpha/alpha/autoconf.c +++ b/sys/alpha/alpha/autoconf.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: autoconf.c,v 1.27 1999/05/29 19:23:20 gallatin Exp $ + * $Id: autoconf.c,v 1.28 1999/05/31 20:44:11 dt Exp $ */ #include "opt_bootp.h" @@ -62,7 +62,6 @@ SYSINIT(configure, SI_SUB_CONFIGURE, SI_ORDER_THIRD, configure, NULL) static void configure_finish __P((void)); static void configure_start __P((void)); -static int setdumpdev __P((dev_t dev)); device_t isa_bus_device = 0; struct cam_sim *boot_sim = 0; @@ -261,58 +260,3 @@ cpu_rootconf() } #endif } - -void -cpu_dumpconf() -{ - if (setdumpdev(dumpdev) != 0) - dumpdev = NODEV; -} - -static int -setdumpdev(dev) - dev_t dev; -{ - int maj, psize; - long newdumplo; - - if (dev == NODEV) { - dumpdev = dev; - return (0); - } - maj = major(dev); - if (bdevsw(dev) == NULL) - return (ENXIO); /* XXX is this right? */ - if (bdevsw(dev)->d_psize == NULL) - return (ENXIO); /* XXX should be ENODEV ? */ - psize = bdevsw(dev)->d_psize(dev); - if (psize == -1) - return (ENXIO); /* XXX should be ENODEV ? */ - /* - * XXX should clean up checking in dumpsys() to be more like this, - * and nuke dodump sysctl (too many knobs), and move this to - * kern_shutdown.c... - */ - newdumplo = psize - Maxmem * PAGE_SIZE / DEV_BSIZE; - if (newdumplo < 0) - return (ENOSPC); - dumpdev = dev; - dumplo = newdumplo; - return (0); -} - -static int -sysctl_kern_dumpdev SYSCTL_HANDLER_ARGS -{ - int error; - udev_t ndumpdev; - - ndumpdev = dev2udev(dumpdev); - error = sysctl_handle_opaque(oidp, &ndumpdev, sizeof ndumpdev, req); - if (error == 0 && req->newptr != NULL) - error = setdumpdev(udev2dev(ndumpdev, 1)); - return (error); -} - -SYSCTL_PROC(_kern, KERN_DUMPDEV, dumpdev, CTLTYPE_OPAQUE|CTLFLAG_RW, - 0, sizeof dumpdev, sysctl_kern_dumpdev, "T,dev_t", ""); diff --git a/sys/amd64/amd64/autoconf.c b/sys/amd64/amd64/autoconf.c index b3dd4f5..966cc22 100644 --- a/sys/amd64/amd64/autoconf.c +++ b/sys/amd64/amd64/autoconf.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * from: @(#)autoconf.c 7.1 (Berkeley) 5/9/91 - * $Id: autoconf.c,v 1.127 1999/07/03 17:40:29 peter Exp $ + * $Id: autoconf.c,v 1.128 1999/07/03 21:03:56 peter Exp $ */ /* @@ -101,7 +101,6 @@ static void configure_final __P((void *)); static void configure_finish __P((void)); static void configure_start __P((void)); -static int setdumpdev __P((dev_t dev)); #if defined(FFS) || defined(FFS_ROOT) static void setroot __P((void)); #endif @@ -362,47 +361,6 @@ cpu_rootconf() } } - -void -cpu_dumpconf() -{ - if (setdumpdev(dumpdev) != 0) - dumpdev = NODEV; -} - -static int -setdumpdev(dev) - dev_t dev; -{ - int maj, psize; - long newdumplo; - - if (dev == NODEV) { - dumpdev = dev; - return (0); - } - maj = major(dev); - if (bdevsw(dev) == NULL) - return (ENXIO); /* XXX is this right? */ - if (bdevsw(dev)->d_psize == NULL) - return (ENXIO); /* XXX should be ENODEV ? */ - psize = bdevsw(dev)->d_psize(dev); - if (psize == -1) - return (ENXIO); /* XXX should be ENODEV ? */ - /* - * XXX should clean up checking in dumpsys() to be more like this, - * and nuke dodump sysctl (too many knobs), and move this to - * kern_shutdown.c... - */ - newdumplo = psize - Maxmem * PAGE_SIZE / DEV_BSIZE; - if (newdumplo < 0) - return (ENOSPC); - dumpdev = dev; - dumplo = newdumplo; - return (0); -} - - u_long bootdev = 0; /* not a dev_t - encoding is different */ #define FDMAJOR 2 @@ -493,23 +451,6 @@ setroot() #endif -static int -sysctl_kern_dumpdev SYSCTL_HANDLER_ARGS -{ - int error; - udev_t ndumpdev; - - ndumpdev = dev2udev(dumpdev); - error = sysctl_handle_opaque(oidp, &ndumpdev, sizeof ndumpdev, req); - if (error == 0 && req->newptr != NULL) - error = setdumpdev(udev2dev(ndumpdev, 1)); - return (error); -} - -SYSCTL_PROC(_kern, KERN_DUMPDEV, dumpdev, CTLTYPE_OPAQUE|CTLFLAG_RW, - 0, sizeof dumpdev, sysctl_kern_dumpdev, "T,dev_t", ""); - - static int setrootbyname(char *name) diff --git a/sys/i386/i386/autoconf.c b/sys/i386/i386/autoconf.c index b3dd4f5..966cc22 100644 --- a/sys/i386/i386/autoconf.c +++ b/sys/i386/i386/autoconf.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * from: @(#)autoconf.c 7.1 (Berkeley) 5/9/91 - * $Id: autoconf.c,v 1.127 1999/07/03 17:40:29 peter Exp $ + * $Id: autoconf.c,v 1.128 1999/07/03 21:03:56 peter Exp $ */ /* @@ -101,7 +101,6 @@ static void configure_final __P((void *)); static void configure_finish __P((void)); static void configure_start __P((void)); -static int setdumpdev __P((dev_t dev)); #if defined(FFS) || defined(FFS_ROOT) static void setroot __P((void)); #endif @@ -362,47 +361,6 @@ cpu_rootconf() } } - -void -cpu_dumpconf() -{ - if (setdumpdev(dumpdev) != 0) - dumpdev = NODEV; -} - -static int -setdumpdev(dev) - dev_t dev; -{ - int maj, psize; - long newdumplo; - - if (dev == NODEV) { - dumpdev = dev; - return (0); - } - maj = major(dev); - if (bdevsw(dev) == NULL) - return (ENXIO); /* XXX is this right? */ - if (bdevsw(dev)->d_psize == NULL) - return (ENXIO); /* XXX should be ENODEV ? */ - psize = bdevsw(dev)->d_psize(dev); - if (psize == -1) - return (ENXIO); /* XXX should be ENODEV ? */ - /* - * XXX should clean up checking in dumpsys() to be more like this, - * and nuke dodump sysctl (too many knobs), and move this to - * kern_shutdown.c... - */ - newdumplo = psize - Maxmem * PAGE_SIZE / DEV_BSIZE; - if (newdumplo < 0) - return (ENOSPC); - dumpdev = dev; - dumplo = newdumplo; - return (0); -} - - u_long bootdev = 0; /* not a dev_t - encoding is different */ #define FDMAJOR 2 @@ -493,23 +451,6 @@ setroot() #endif -static int -sysctl_kern_dumpdev SYSCTL_HANDLER_ARGS -{ - int error; - udev_t ndumpdev; - - ndumpdev = dev2udev(dumpdev); - error = sysctl_handle_opaque(oidp, &ndumpdev, sizeof ndumpdev, req); - if (error == 0 && req->newptr != NULL) - error = setdumpdev(udev2dev(ndumpdev, 1)); - return (error); -} - -SYSCTL_PROC(_kern, KERN_DUMPDEV, dumpdev, CTLTYPE_OPAQUE|CTLFLAG_RW, - 0, sizeof dumpdev, sysctl_kern_dumpdev, "T,dev_t", ""); - - static int setrootbyname(char *name) diff --git a/sys/kern/kern_shutdown.c b/sys/kern/kern_shutdown.c index abbc013..755f90f 100644 --- a/sys/kern/kern_shutdown.c +++ b/sys/kern/kern_shutdown.c @@ -36,7 +36,7 @@ * SUCH DAMAGE. * * @(#)kern_shutdown.c 8.3 (Berkeley) 1/21/94 - * $Id: kern_shutdown.c,v 1.53 1999/06/26 02:46:02 mckusick Exp $ + * $Id: kern_shutdown.c,v 1.54 1999/07/01 22:54:55 peter Exp $ */ #include "opt_ddb.h" @@ -127,6 +127,8 @@ static struct shutdown_list shutdown_lists[SHUTDOWN_FINAL + 1]; static void boot __P((int)) __dead2; static void dumpsys __P((void)); +static int setdumpdev __P((dev_t dev)); + #ifndef _SYS_SYSPROTO_H_ struct reboot_args { @@ -352,8 +354,41 @@ static u_long const dumpmag = 0x8fca0101UL; static int dumpsize = 0; /* also for savecore */ static int dodump = 1; -SYSCTL_INT(_machdep, OID_AUTO, do_dump, CTLFLAG_RW, - &dodump, 0, "Do coredump on kernel panic"); + +SYSCTL_INT(_machdep, OID_AUTO, do_dump, CTLFLAG_RW, &dodump, 0, + "Try to perform coredump on kernel panic"); + +static int +setdumpdev(dev) + dev_t dev; +{ + int maj, psize; + long newdumplo; + + if (dev == NODEV) { + dumpdev = dev; + return (0); + } + maj = major(dev); + if (bdevsw(dev) == NULL) + return (ENXIO); /* XXX is this right? */ + if (bdevsw(dev)->d_psize == NULL) + return (ENXIO); /* XXX should be ENODEV ? */ + psize = bdevsw(dev)->d_psize(dev); + if (psize == -1) + return (ENXIO); /* XXX should be ENODEV ? */ + /* + * XXX should clean up checking in dumpsys() to be more like this, + * and nuke dodump sysctl (too many knobs). + */ + newdumplo = psize - Maxmem * PAGE_SIZE / DEV_BSIZE; + if (newdumplo < 0) + return (ENOSPC); + dumpdev = dev; + dumplo = newdumplo; + return (0); +} + /* ARGSUSED */ static void dump_conf __P((void *dummy)); @@ -361,10 +396,28 @@ static void dump_conf(dummy) void *dummy; { - cpu_dumpconf(); + if (setdumpdev(dumpdev) != 0) + dumpdev = NODEV; } + SYSINIT(dump_conf, SI_SUB_DUMP_CONF, SI_ORDER_FIRST, dump_conf, NULL) +static int +sysctl_kern_dumpdev SYSCTL_HANDLER_ARGS +{ + int error; + udev_t ndumpdev; + + ndumpdev = dev2udev(dumpdev); + error = sysctl_handle_opaque(oidp, &ndumpdev, sizeof ndumpdev, req); + if (error == 0 && req->newptr != NULL) + error = setdumpdev(udev2dev(ndumpdev, 1)); + return (error); +} + +SYSCTL_PROC(_kern, KERN_DUMPDEV, dumpdev, CTLTYPE_OPAQUE|CTLFLAG_RW, + 0, sizeof dumpdev, sysctl_kern_dumpdev, "T,dev_t", ""); + /* * Doadump comes here after turning off memory management and * getting on the dump stack, either when called above, or by diff --git a/sys/sys/systm.h b/sys/sys/systm.h index 401f6e1..eddd7e3 100644 --- a/sys/sys/systm.h +++ b/sys/sys/systm.h @@ -36,7 +36,7 @@ * SUCH DAMAGE. * * @(#)systm.h 8.7 (Berkeley) 3/29/95 - * $Id: systm.h,v 1.90 1999/05/31 20:42:41 dt Exp $ + * $Id: systm.h,v 1.91 1999/07/17 18:43:48 phk Exp $ */ #ifndef _SYS_SYSTM_H_ @@ -103,7 +103,6 @@ void *phashinit __P((int count, struct malloc_type *type, u_long *nentries)); void panic __P((const char *, ...)) __dead2 __printflike(1, 2); void cpu_boot __P((int)); void cpu_rootconf __P((void)); -void cpu_dumpconf __P((void)); void tablefull __P((const char *)); int addlog __P((const char *, ...)) __printflike(1, 2); int kvprintf __P((char const *, void (*)(int, void*), void *, int, |