summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorwollman <wollman@FreeBSD.org>1995-05-12 19:17:31 +0000
committerwollman <wollman@FreeBSD.org>1995-05-12 19:17:31 +0000
commit448bf328426c51ed5e38239bab637939785f6141 (patch)
treec58ea4aba669ec67465a9411a2dfe7a0d0ff3371 /sys
parenta0ad6a34d39584cffc7f4f759c9bd29f4f44784a (diff)
downloadFreeBSD-src-448bf328426c51ed5e38239bab637939785f6141.zip
FreeBSD-src-448bf328426c51ed5e38239bab637939785f6141.tar.gz
The death of `options NODUMP'. Now the dump area can be dynamically
configured (and unconfigured) on the fly. A sysctl(3) MIB variable is provided to inspect and modify the dump device setting.
Diffstat (limited to 'sys')
-rw-r--r--sys/amd64/amd64/autoconf.c35
-rw-r--r--sys/amd64/amd64/machdep.c7
-rw-r--r--sys/i386/i386/autoconf.c35
-rw-r--r--sys/i386/i386/machdep.c7
-rw-r--r--sys/kern/kern_sysctl.c12
-rw-r--r--sys/sys/conf.h3
-rw-r--r--sys/sys/linedisc.h3
-rw-r--r--sys/sys/sysctl.h6
8 files changed, 81 insertions, 27 deletions
diff --git a/sys/amd64/amd64/autoconf.c b/sys/amd64/amd64/autoconf.c
index 1a2e489..8761799 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.28 1995/05/11 02:50:11 wpaul Exp $
+ * $Id: autoconf.c,v 1.29 1995/05/11 19:26:07 rgrimes Exp $
*/
/*
@@ -237,13 +237,36 @@ swapconf()
}
swp->sw_nblks = ctod(dtoc(swp->sw_nblks));
}
- if (dumplo == 0 && bdevsw[major(dumpdev)].d_psize)
- dumplo = (*bdevsw[major(dumpdev)].d_psize)(dumpdev) -
- Maxmem*NBPG/512;
- if (dumplo < 0)
- dumplo = 0;
+ if (dumpdev != NODEV) {
+ if (dumplo == 0 && bdevsw[major(dumpdev)].d_psize)
+ dumplo = (*bdevsw[major(dumpdev)].d_psize)(dumpdev) -
+ Maxmem*NBPG/512;
+ if (dumplo < 0)
+ dumplo = 0;
+ }
}
+int
+setdumpdev(dev_t dev)
+{
+ long newdumplo, psize;
+ if (dev != NODEV && bdevsw[major(dev)].d_psize) {
+ psize = bdevsw[major(dev)].d_psize(dev);
+ newdumplo = bdevsw[major(dev)].d_psize(dev) - Maxmem*NBPG/512;
+ if (newdumplo >= 0) {
+ dumpdev = dev;
+ dumplo = newdumplo;
+ return 0;
+ }
+ return ENOSPC;
+ } else {
+ dumpdev = dev;
+ dumplo = 0;
+ return 0;
+ }
+ /*NOTREACHED*/
+}
+
#define DOSWAP /* change swdevt and dumpdev */
u_long bootdev = 0; /* should be dev_t, but not until 32 bits */
diff --git a/sys/amd64/amd64/machdep.c b/sys/amd64/amd64/machdep.c
index 400b90e..dc5103e 100644
--- a/sys/amd64/amd64/machdep.c
+++ b/sys/amd64/amd64/machdep.c
@@ -35,7 +35,7 @@
* SUCH DAMAGE.
*
* from: @(#)machdep.c 7.4 (Berkeley) 6/3/91
- * $Id: machdep.c,v 1.124 1995/05/11 00:16:36 wollman Exp $
+ * $Id: machdep.c,v 1.125 1995/05/11 19:26:08 rgrimes Exp $
*/
#include "npx.h"
@@ -905,11 +905,8 @@ die:
unsigned long dumpmag = 0x8fca0101UL; /* magic number for savecore */
int dumpsize = 0; /* also for savecore */
-#ifdef DODUMP
int dodump = 1;
-#else
-int dodump = 0;
-#endif
+
/*
* Doadump comes here after turning off memory management and
* getting on the dump stack, either when called above, or by
diff --git a/sys/i386/i386/autoconf.c b/sys/i386/i386/autoconf.c
index 1a2e489..8761799 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.28 1995/05/11 02:50:11 wpaul Exp $
+ * $Id: autoconf.c,v 1.29 1995/05/11 19:26:07 rgrimes Exp $
*/
/*
@@ -237,13 +237,36 @@ swapconf()
}
swp->sw_nblks = ctod(dtoc(swp->sw_nblks));
}
- if (dumplo == 0 && bdevsw[major(dumpdev)].d_psize)
- dumplo = (*bdevsw[major(dumpdev)].d_psize)(dumpdev) -
- Maxmem*NBPG/512;
- if (dumplo < 0)
- dumplo = 0;
+ if (dumpdev != NODEV) {
+ if (dumplo == 0 && bdevsw[major(dumpdev)].d_psize)
+ dumplo = (*bdevsw[major(dumpdev)].d_psize)(dumpdev) -
+ Maxmem*NBPG/512;
+ if (dumplo < 0)
+ dumplo = 0;
+ }
}
+int
+setdumpdev(dev_t dev)
+{
+ long newdumplo, psize;
+ if (dev != NODEV && bdevsw[major(dev)].d_psize) {
+ psize = bdevsw[major(dev)].d_psize(dev);
+ newdumplo = bdevsw[major(dev)].d_psize(dev) - Maxmem*NBPG/512;
+ if (newdumplo >= 0) {
+ dumpdev = dev;
+ dumplo = newdumplo;
+ return 0;
+ }
+ return ENOSPC;
+ } else {
+ dumpdev = dev;
+ dumplo = 0;
+ return 0;
+ }
+ /*NOTREACHED*/
+}
+
#define DOSWAP /* change swdevt and dumpdev */
u_long bootdev = 0; /* should be dev_t, but not until 32 bits */
diff --git a/sys/i386/i386/machdep.c b/sys/i386/i386/machdep.c
index 400b90e..dc5103e 100644
--- a/sys/i386/i386/machdep.c
+++ b/sys/i386/i386/machdep.c
@@ -35,7 +35,7 @@
* SUCH DAMAGE.
*
* from: @(#)machdep.c 7.4 (Berkeley) 6/3/91
- * $Id: machdep.c,v 1.124 1995/05/11 00:16:36 wollman Exp $
+ * $Id: machdep.c,v 1.125 1995/05/11 19:26:08 rgrimes Exp $
*/
#include "npx.h"
@@ -905,11 +905,8 @@ die:
unsigned long dumpmag = 0x8fca0101UL; /* magic number for savecore */
int dumpsize = 0; /* also for savecore */
-#ifdef DODUMP
int dodump = 1;
-#else
-int dodump = 0;
-#endif
+
/*
* Doadump comes here after turning off memory management and
* getting on the dump stack, either when called above, or by
diff --git a/sys/kern/kern_sysctl.c b/sys/kern/kern_sysctl.c
index 8d0e95b..ea9ed9a 100644
--- a/sys/kern/kern_sysctl.c
+++ b/sys/kern/kern_sysctl.c
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* @(#)kern_sysctl.c 8.4 (Berkeley) 4/14/94
- * $Id: kern_sysctl.c,v 1.22 1995/02/20 19:42:35 guido Exp $
+ * $Id: kern_sysctl.c,v 1.23 1995/03/16 18:12:37 bde Exp $
*/
/*
@@ -52,6 +52,7 @@
#include <sys/buf.h>
#include <sys/ioctl.h>
#include <sys/tty.h>
+#include <sys/conf.h>
#include <vm/vm.h>
#include <sys/sysctl.h>
@@ -192,6 +193,7 @@ kern_sysctl(name, namelen, oldp, oldlenp, newp, newlen, p)
struct proc *p;
{
int error, level, inthostid;
+ dev_t ndumpdev;
/* all sysctl names at this level are terminal */
if (namelen != 1 && !(name[0] == KERN_PROC || name[0] == KERN_PROF
@@ -293,6 +295,14 @@ kern_sysctl(name, namelen, oldp, oldlenp, newp, newlen, p)
case KERN_NTP_PLL:
return (ntp_sysctl(name + 1, namelen - 1, oldp, oldlenp,
newp, newlen, p));
+ case KERN_DUMPDEV:
+ ndumpdev = dumpdev;
+ error = sysctl_struct(oldp, oldlenp, newp, newlen, &ndumpdev,
+ sizeof ndumpdev);
+ if (!error && ndumpdev != dumpdev) {
+ error = setdumpdev(ndumpdev);
+ }
+ return error;
default:
return (EOPNOTSUPP);
}
diff --git a/sys/sys/conf.h b/sys/sys/conf.h
index 9b503ab..3619cc1 100644
--- a/sys/sys/conf.h
+++ b/sys/sys/conf.h
@@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)conf.h 8.3 (Berkeley) 1/21/94
- * $Id: conf.h,v 1.11 1995/03/21 11:24:05 dufault Exp $
+ * $Id: conf.h,v 1.12 1995/04/23 09:36:59 bde Exp $
*/
#ifndef _SYS_CONF_H_
@@ -139,6 +139,7 @@ struct swdevt {
#ifdef KERNEL
extern struct swdevt swdevt[];
+extern int setdumpdev __P((dev_t));
dev_t chrtoblk __P((dev_t dev));
int isdisk __P((dev_t dev, int type));
diff --git a/sys/sys/linedisc.h b/sys/sys/linedisc.h
index 9b503ab..3619cc1 100644
--- a/sys/sys/linedisc.h
+++ b/sys/sys/linedisc.h
@@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)conf.h 8.3 (Berkeley) 1/21/94
- * $Id: conf.h,v 1.11 1995/03/21 11:24:05 dufault Exp $
+ * $Id: conf.h,v 1.12 1995/04/23 09:36:59 bde Exp $
*/
#ifndef _SYS_CONF_H_
@@ -139,6 +139,7 @@ struct swdevt {
#ifdef KERNEL
extern struct swdevt swdevt[];
+extern int setdumpdev __P((dev_t));
dev_t chrtoblk __P((dev_t dev));
int isdisk __P((dev_t dev, int type));
diff --git a/sys/sys/sysctl.h b/sys/sys/sysctl.h
index 6ed3cbc..822f70c 100644
--- a/sys/sys/sysctl.h
+++ b/sys/sys/sysctl.h
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* @(#)sysctl.h 8.1 (Berkeley) 6/2/93
- * $Id: sysctl.h,v 1.20 1995/02/20 19:42:40 guido Exp $
+ * $Id: sysctl.h,v 1.21 1995/03/16 18:16:26 bde Exp $
*/
#ifndef _SYS_SYSCTL_H_
@@ -135,7 +135,8 @@ struct ctlname {
#define KERN_BOOTFILE 26 /* string: name of booted kernel */
#define KERN_MAXFILESPERPROC 27 /* int: max open files per proc */
#define KERN_MAXPROCPERUID 28 /* int: max processes per uid */
-#define KERN_MAXID 29 /* number of valid kern ids */
+#define KERN_DUMPDEV 29 /* dev_t: device to dump on */
+#define KERN_MAXID 30 /* number of valid kern ids */
#define CTL_KERN_NAMES { \
{ 0, 0 }, \
@@ -167,6 +168,7 @@ struct ctlname {
{ "bootfile", CTLTYPE_STRING }, \
{ "maxfilesperproc", CTLTYPE_INT }, \
{ "maxprocperuid", CTLTYPE_INT }, \
+ { "dumpdev", CTLTYPE_STRUCT }, /* we lie; don't print as int */ \
}
/*
OpenPOWER on IntegriCloud