diff options
Diffstat (limited to 'sys/kern')
-rw-r--r-- | sys/kern/kern_exit.c | 1 | ||||
-rw-r--r-- | sys/kern/kern_panic.c | 8 | ||||
-rw-r--r-- | sys/kern/kern_spawn.c | 6 | ||||
-rw-r--r-- | sys/kern/kern_syslog.c | 2 |
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); |