Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F157866873
D3054.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
10 KB
Referenced Files
None
Subscribers
None
D3054.diff
View Options
Index: sys/ddb/db_command.c
===================================================================
--- sys/ddb/db_command.c
+++ sys/ddb/db_command.c
@@ -35,16 +35,17 @@
__FBSDID("$FreeBSD$");
#include <sys/param.h>
+#include <sys/conf.h>
#include <sys/linker_set.h>
#include <sys/lock.h>
#include <sys/kdb.h>
+#include <sys/kerneldump.h>
#include <sys/mutex.h>
#include <sys/proc.h>
#include <sys/reboot.h>
#include <sys/signalvar.h>
#include <sys/systm.h>
#include <sys/cons.h>
-#include <sys/conf.h>
#include <sys/watchdog.h>
#include <sys/kernel.h>
Index: sys/dev/null/null.c
===================================================================
--- sys/dev/null/null.c
+++ sys/dev/null/null.c
@@ -35,6 +35,7 @@
#include <sys/conf.h>
#include <sys/uio.h>
#include <sys/kernel.h>
+#include <sys/kerneldump.h>
#include <sys/malloc.h>
#include <sys/module.h>
#include <sys/disk.h>
Index: sys/geom/geom_dev.c
===================================================================
--- sys/geom/geom_dev.c
+++ sys/geom/geom_dev.c
@@ -44,6 +44,7 @@
#include <sys/ctype.h>
#include <sys/bio.h>
#include <sys/bus.h>
+#include <sys/kerneldump.h>
#include <sys/lock.h>
#include <sys/mutex.h>
#include <sys/proc.h>
Index: sys/geom/raid/g_raid.c
===================================================================
--- sys/geom/raid/g_raid.c
+++ sys/geom/raid/g_raid.c
@@ -29,7 +29,9 @@
#include <sys/param.h>
#include <sys/systm.h>
+#include <sys/conf.h>
#include <sys/kernel.h>
+#include <sys/kerneldump.h>
#include <sys/module.h>
#include <sys/limits.h>
#include <sys/lock.h>
Index: sys/kern/kern_dump.c
===================================================================
--- sys/kern/kern_dump.c
+++ sys/kern/kern_dump.c
@@ -27,18 +27,23 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include "opt_ddb.h"
#include "opt_watchdog.h"
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/conf.h>
#include <sys/cons.h>
+#include <sys/jail.h>
#include <sys/kernel.h>
-#include <sys/proc.h>
#include <sys/kerneldump.h>
+#include <sys/priv.h>
+#include <sys/proc.h>
+#include <sys/sysctl.h>
#ifdef SW_WATCHDOG
#include <sys/watchdog.h>
#endif
+#include <ddb/ddb.h>
#include <vm/vm.h>
#include <vm/vm_param.h>
#include <vm/pmap.h>
@@ -58,13 +63,117 @@
#define MD_ALIGN(x) (((off_t)(x) + PAGE_MASK) & ~PAGE_MASK)
#define DEV_ALIGN(x) (((off_t)(x) + (DEV_BSIZE-1)) & ~(DEV_BSIZE-1))
+struct dump_pa dump_map[DUMPSYS_MD_PA_NPAIRS];
off_t dumplo;
+/* Our selected dumper. */
+static struct dumperinfo dumper;
+
+/* Context information for dump-debuggers. */
+static struct pcb dumppcb; /* Registers. */
+lwpid_t dumptid; /* Thread ID. */
+
/* Handle buffered writes. */
static char buffer[DEV_BSIZE];
static size_t fragsz;
-struct dump_pa dump_map[DUMPSYS_MD_PA_NPAIRS];
+char dumpdevname[sizeof(((struct cdev *)NULL)->si_name)];
+SYSCTL_DECL(_kern_shutdown);
+SYSCTL_STRING(_kern_shutdown, OID_AUTO, dumpdevname, CTLFLAG_RD, dumpdevname, 0,
+ "Device for kernel dumps");
+
+int
+doadump(boolean_t textdump)
+{
+ boolean_t coredump;
+ int error;
+
+ error = 0;
+ if (dumping)
+ return (EBUSY);
+ if (dumper.dumper == NULL)
+ return (ENXIO);
+
+ savectx(&dumppcb);
+ dumptid = curthread->td_tid;
+ dumping++;
+
+ coredump = TRUE;
+#ifdef DDB
+ if (textdump && textdump_pending) {
+ coredump = FALSE;
+ textdump_dumpsys(&dumper);
+ }
+#endif
+ if (coredump)
+ error = dumpsys(&dumper);
+
+ dumping--;
+ return (error);
+}
+
+/* Call dumper with bounds checking. */
+int
+dump_write(struct dumperinfo *di, void *virtual, vm_offset_t physical,
+ off_t offset, size_t length)
+{
+
+ if (length != 0 && (offset < di->mediaoffset ||
+ offset - di->mediaoffset + length > di->mediasize)) {
+ printf("Attempt to write outside dump device boundaries.\n"
+ "offset(%jd), mediaoffset(%jd), length(%ju), mediasize(%jd).\n",
+ (intmax_t)offset, (intmax_t)di->mediaoffset,
+ (uintmax_t)length, (intmax_t)di->mediasize);
+ return (ENOSPC);
+ }
+ return (di->dumper(di->priv, virtual, physical, offset, length));
+}
+
+/* Register a dumper. */
+int
+set_dumper(struct dumperinfo *di, const char *devname, struct thread *td)
+{
+ size_t wantcopy;
+ int error;
+
+ error = priv_check(td, PRIV_SETDUMPER);
+ if (error != 0)
+ return (error);
+
+ if (di == NULL) {
+ bzero(&dumper, sizeof dumper);
+ dumpdevname[0] = '\0';
+ return (0);
+ }
+ if (dumper.dumper != NULL)
+ return (EBUSY);
+ dumper = *di;
+ wantcopy = strlcpy(dumpdevname, devname, sizeof(dumpdevname));
+ if (wantcopy >= sizeof(dumpdevname))
+ printf("set_dumper: device name truncated from '%s' -> '%s'\n",
+ devname, dumpdevname);
+ return (0);
+}
+
+void
+mkdumpheader(struct kerneldumpheader *kdh, char *magic, uint32_t archver,
+ uint64_t dumplen, uint32_t blksz)
+{
+
+ bzero(kdh, sizeof(*kdh));
+ strlcpy(kdh->magic, magic, sizeof(kdh->magic));
+ strlcpy(kdh->architecture, MACHINE_ARCH, sizeof(kdh->architecture));
+ kdh->version = htod32(KERNELDUMPVERSION);
+ kdh->architectureversion = htod32(archver);
+ kdh->dumplength = htod64(dumplen);
+ kdh->dumptime = htod64(time_second);
+ kdh->blocksize = htod32(blksz);
+ strlcpy(kdh->hostname, prison0.pr_hostname, sizeof(kdh->hostname));
+ strlcpy(kdh->versionstring, version, sizeof(kdh->versionstring));
+ if (panicstr != NULL)
+ strlcpy(kdh->panicstring, panicstr, sizeof(kdh->panicstring));
+ kdh->parity = kerneldump_parity(kdh);
+}
void
dumpsys_gen_pa_init(void)
Index: sys/kern/kern_shutdown.c
===================================================================
--- sys/kern/kern_shutdown.c
+++ sys/kern/kern_shutdown.c
@@ -37,7 +37,6 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
-#include "opt_ddb.h"
#include "opt_kdb.h"
#include "opt_panic.h"
#include "opt_sched.h"
@@ -50,7 +49,6 @@
#include <sys/conf.h>
#include <sys/cons.h>
#include <sys/eventhandler.h>
-#include <sys/jail.h>
#include <sys/kdb.h>
#include <sys/kernel.h>
#include <sys/kerneldump.h>
@@ -70,10 +68,7 @@
#include <sys/vnode.h>
#include <sys/watchdog.h>
-#include <ddb/ddb.h>
-
#include <machine/cpu.h>
-#include <machine/dump.h>
#include <machine/pcb.h>
#include <machine/smp.h>
@@ -101,6 +96,9 @@
*/
#include <machine/stdarg.h>
+SYSCTL_NODE(_kern, OID_AUTO, shutdown, CTLFLAG_RW, 0,
+ "Shutdown environment");
+
#ifdef KDB
#ifdef KDB_UNATTENDED
int debugger_on_panic = 0;
@@ -122,11 +120,8 @@
#endif /* KDB */
static int sync_on_panic = 0;
-SYSCTL_INT(_kern, OID_AUTO, sync_on_panic, CTLFLAG_RWTUN,
- &sync_on_panic, 0, "Do a sync before rebooting from a panic");
-
-static SYSCTL_NODE(_kern, OID_AUTO, shutdown, CTLFLAG_RW, 0,
- "Shutdown environment");
+SYSCTL_INT(_kern, OID_AUTO, sync_on_panic, CTLFLAG_RWTUN, &sync_on_panic, 0,
+ "Do a sync before rebooting from a panic");
#ifndef DIAGNOSTIC
static int show_busybufs;
@@ -144,11 +139,6 @@
int dumping; /* system is dumping */
int rebooting; /* system is rebooting */
-static struct dumperinfo dumper; /* our selected dumper */
-
-/* Context information for dump-debuggers. */
-static struct pcb dumppcb; /* Registers. */
-lwpid_t dumptid; /* Thread ID. */
static void poweroff_wait(void *, int);
static void shutdown_halt(void *junk, int howto);
@@ -245,36 +235,6 @@
printf("%lds\n", (long)ts.tv_sec);
}
-int
-doadump(boolean_t textdump)
-{
- boolean_t coredump;
- int error;
-
- error = 0;
- if (dumping)
- return (EBUSY);
- if (dumper.dumper == NULL)
- return (ENXIO);
-
- savectx(&dumppcb);
- dumptid = curthread->td_tid;
- dumping++;
-
- coredump = TRUE;
-#ifdef DDB
- if (textdump && textdump_pending) {
- coredump = FALSE;
- textdump_dumpsys(&dumper);
- }
-#endif
- if (coredump)
- error = dumpsys(&dumper);
-
- dumping--;
- return (error);
-}
-
static int
isbufbusy(struct buf *bp)
{
@@ -818,71 +778,3 @@
else
printf("done\n");
}
-
-static char dumpdevname[sizeof(((struct cdev*)NULL)->si_name)];
-SYSCTL_STRING(_kern_shutdown, OID_AUTO, dumpdevname, CTLFLAG_RD,
- dumpdevname, 0, "Device for kernel dumps");
-
-/* Registration of dumpers */
-int
-set_dumper(struct dumperinfo *di, const char *devname, struct thread *td)
-{
- size_t wantcopy;
- int error;
-
- error = priv_check(td, PRIV_SETDUMPER);
- if (error != 0)
- return (error);
-
- if (di == NULL) {
- bzero(&dumper, sizeof dumper);
- dumpdevname[0] = '\0';
- return (0);
- }
- if (dumper.dumper != NULL)
- return (EBUSY);
- dumper = *di;
- wantcopy = strlcpy(dumpdevname, devname, sizeof(dumpdevname));
- if (wantcopy >= sizeof(dumpdevname)) {
- printf("set_dumper: device name truncated from '%s' -> '%s'\n",
- devname, dumpdevname);
- }
- return (0);
-}
-
-/* Call dumper with bounds checking. */
-int
-dump_write(struct dumperinfo *di, void *virtual, vm_offset_t physical,
- off_t offset, size_t length)
-{
-
- if (length != 0 && (offset < di->mediaoffset ||
- offset - di->mediaoffset + length > di->mediasize)) {
- printf("Attempt to write outside dump device boundaries.\n"
- "offset(%jd), mediaoffset(%jd), length(%ju), mediasize(%jd).\n",
- (intmax_t)offset, (intmax_t)di->mediaoffset,
- (uintmax_t)length, (intmax_t)di->mediasize);
- return (ENOSPC);
- }
- return (di->dumper(di->priv, virtual, physical, offset, length));
-}
-
-void
-mkdumpheader(struct kerneldumpheader *kdh, char *magic, uint32_t archver,
- uint64_t dumplen, uint32_t blksz)
-{
-
- bzero(kdh, sizeof(*kdh));
- strlcpy(kdh->magic, magic, sizeof(kdh->magic));
- strlcpy(kdh->architecture, MACHINE_ARCH, sizeof(kdh->architecture));
- kdh->version = htod32(KERNELDUMPVERSION);
- kdh->architectureversion = htod32(archver);
- kdh->dumplength = htod64(dumplen);
- kdh->dumptime = htod64(time_second);
- kdh->blocksize = htod32(blksz);
- strlcpy(kdh->hostname, prison0.pr_hostname, sizeof(kdh->hostname));
- strlcpy(kdh->versionstring, version, sizeof(kdh->versionstring));
- if (panicstr != NULL)
- strlcpy(kdh->panicstring, panicstr, sizeof(kdh->panicstring));
- kdh->parity = kerneldump_parity(kdh);
-}
Index: sys/sys/conf.h
===================================================================
--- sys/sys/conf.h
+++ sys/sys/conf.h
@@ -319,9 +319,6 @@
off_t mediasize; /* Space available in bytes. */
};
-int set_dumper(struct dumperinfo *, const char *_devname, struct thread *td);
-int dump_write(struct dumperinfo *, void *, vm_offset_t, off_t, size_t);
-int doadump(boolean_t);
extern int dumping; /* system is dumping */
#endif /* _KERNEL */
Index: sys/sys/kerneldump.h
===================================================================
--- sys/sys/kerneldump.h
+++ sys/sys/kerneldump.h
@@ -123,6 +123,10 @@
void dumpsys_gen_unmap_chunk(vm_paddr_t, size_t, void *);
int dumpsys_gen_write_aux_headers(struct dumperinfo *);
+int set_dumper(struct dumperinfo *, const char *, struct thread *);
+int dump_write(struct dumperinfo *, void *, vm_offset_t, off_t, size_t);
+int doadump(boolean_t);
+
extern int do_minidump;
#endif
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, May 26, 11:45 PM (3 h, 50 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
33541265
Default Alt Text
D3054.diff (10 KB)
Attached To
Mode
D3054: kern_dump.c: move kernel dump code out of kern_shutdown.c
Attached
Detach File
Event Timeline
Log In to Comment