summaryrefslogtreecommitdiff
path: root/sys/kern
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/kern_exit.c1
-rw-r--r--sys/kern/kern_panic.c8
-rw-r--r--sys/kern/kern_spawn.c6
-rw-r--r--sys/kern/kern_syslog.c2
4 files changed, 13 insertions, 4 deletions
diff --git a/sys/kern/kern_exit.c b/sys/kern/kern_exit.c
index 24c7e74..3cb48bf 100644
--- a/sys/kern/kern_exit.c
+++ b/sys/kern/kern_exit.c
@@ -112,7 +112,6 @@ exit1(struct proc *td)
unload_td(td);
vm_unmap(pcbp->addrsp, td->stack_base, PROC_STACK_SIZE);
vm_free_frame(stack, PROC_STACK_PAGES);
-
pmap_destroy_vas(pcbp->addrsp);
/*
diff --git a/sys/kern/kern_panic.c b/sys/kern/kern_panic.c
index 950ea8f..7660fff 100644
--- a/sys/kern/kern_panic.c
+++ b/sys/kern/kern_panic.c
@@ -31,6 +31,8 @@
#include <sys/spinlock.h>
#include <sys/syslog.h>
#include <sys/reboot.h>
+#include <machine/cdefs.h>
+#include <machine/cpu.h>
/*
* Burn and sizzle - the core logic that really ends
@@ -69,8 +71,12 @@ panic(const char *fmt, ...)
{
va_list ap;
+ /* Shut everything else up */
+ md_intoff();
+ cpu_halt_others();
+
va_start(ap, fmt);
- kprintf(OMIT_TIMESTAMP "panic: ");
+ kprintf(OMIT_TIMESTAMP "\npanic: ");
vkprintf(fmt, &ap);
bas(true, REBOOT_HALT);
diff --git a/sys/kern/kern_spawn.c b/sys/kern/kern_spawn.c
index 2cddd84..cb898dc 100644
--- a/sys/kern/kern_spawn.c
+++ b/sys/kern/kern_spawn.c
@@ -81,7 +81,11 @@ spawn_thunk(void)
path = NULL;
dynfree(args);
- execve(cur, &execve_args);
+
+ if (execve(cur, &execve_args) != 0) {
+ pr_error("execve failed, aborting\n");
+ exit1(this_td());
+ }
__builtin_unreachable();
}
diff --git a/sys/kern/kern_syslog.c b/sys/kern/kern_syslog.c
index 10bf348..665734d 100644
--- a/sys/kern/kern_syslog.c
+++ b/sys/kern/kern_syslog.c
@@ -101,11 +101,11 @@ kprintf(const char *fmt, ...)
}
}
+ spinlock_acquire(&lock);
if (use_timestamp) {
syslog_write(timestamp, strlen(timestamp));
}
- spinlock_acquire(&lock);
va_start(ap, fmt);
vkprintf(fmt_p, &ap);