summaryrefslogtreecommitdiff
path: root/kern
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2018-07-10 19:39:54 +0200
committerRichard Braun <rbraun@sceen.net>2018-07-10 19:39:54 +0200
commit7cab594590002ff3737629b76083a298616b665a (patch)
treec2134a28fa7f576485fae373bebcd2bdc1141fc3 /kern
parent2670af26286799d9d46ab83c07fd991b942d7d49 (diff)
kern/panic: remove initialization operation
Maintaining correct dependencies for the panic function is too complicated. It may be used very early, but would depend on the console, which is normally available quite late during initialization. Instead, the behavior of panic is now "best effort", i.e. if called at a time where it works, good, otherwise, the behavior is undefined, but should result in a freeze or a reset most of the time.
Diffstat (limited to 'kern')
-rw-r--r--kern/intr.c1
-rw-r--r--kern/log.c1
-rw-r--r--kern/panic.c11
-rw-r--r--kern/panic.h13
-rw-r--r--kern/sref.c1
-rw-r--r--kern/work.c1
6 files changed, 5 insertions, 23 deletions
diff --git a/kern/intr.c b/kern/intr.c
index ac2cea6f..a6034d35 100644
--- a/kern/intr.c
+++ b/kern/intr.c
@@ -336,7 +336,6 @@ intr_bootstrap(void)
INIT_OP_DEFINE(intr_bootstrap,
INIT_OP_DEP(kmem_setup, true),
INIT_OP_DEP(log_setup, true),
- INIT_OP_DEP(panic_setup, true),
INIT_OP_DEP(spinlock_setup, true),
INIT_OP_DEP(thread_bootstrap, true));
diff --git a/kern/log.c b/kern/log.c
index 04afbcd8..55578955 100644
--- a/kern/log.c
+++ b/kern/log.c
@@ -467,7 +467,6 @@ log_start(void)
INIT_OP_DEFINE(log_start,
INIT_OP_DEP(log_setup, true),
- INIT_OP_DEP(panic_setup, true),
INIT_OP_DEP(thread_setup, true));
static void
diff --git a/kern/panic.c b/kern/panic.c
index bd1f6658..9e7d1d53 100644
--- a/kern/panic.c
+++ b/kern/panic.c
@@ -19,7 +19,6 @@
#include <stdio.h>
#include <kern/atomic.h>
-#include <kern/init.h>
#include <kern/panic.h>
#include <machine/cpu.h>
#include <machine/strace.h>
@@ -55,13 +54,3 @@ panic(const char *format, ...)
* Never reached.
*/
}
-
-static int __init
-panic_setup(void)
-{
- return 0;
-}
-
-INIT_OP_DEFINE(panic_setup,
- INIT_OP_DEP(cpu_setup, true),
- INIT_OP_DEP(printf_setup, true));
diff --git a/kern/panic.h b/kern/panic.h
index af858c74..2a25eb01 100644
--- a/kern/panic.h
+++ b/kern/panic.h
@@ -20,18 +20,15 @@
#include <stdnoreturn.h>
-#include <kern/init.h>
-
/*
* Print the given message and halt the system immediately.
+ *
+ * If in doubt whether to call this function or not because of dependency
+ * issues, users are encouraged to call this function, even if it results
+ * in undefined behavior, because it should most likely cause a freeze or
+ * reset, which is considered better than a silent failure.
*/
noreturn void panic(const char *format, ...)
__attribute__((format(printf, 1, 2)));
-/*
- * This init operation provides :
- * - module fully initialized
- */
-INIT_OP_DECLARE(panic_setup);
-
#endif /* KERN_PANIC_H */
diff --git a/kern/sref.c b/kern/sref.c
index 3539e46d..589b00c1 100644
--- a/kern/sref.c
+++ b/kern/sref.c
@@ -880,7 +880,6 @@ INIT_OP_DEFINE(sref_setup,
INIT_OP_DEP(cpu_mp_probe, true),
INIT_OP_DEP(cpumap_setup, true),
INIT_OP_DEP(log_setup, true),
- INIT_OP_DEP(panic_setup, true),
INIT_OP_DEP(sref_bootstrap, true),
INIT_OP_DEP(thread_setup, true));
diff --git a/kern/work.c b/kern/work.c
index 6151ba48..ee35c610 100644
--- a/kern/work.c
+++ b/kern/work.c
@@ -525,7 +525,6 @@ INIT_OP_DEFINE(work_setup,
INIT_OP_DEP(cpumap_setup, true),
INIT_OP_DEP(kmem_setup, true),
INIT_OP_DEP(log_setup, true),
- INIT_OP_DEP(panic_setup, true),
INIT_OP_DEP(spinlock_setup, true),
INIT_OP_DEP(syscnt_setup, true),
INIT_OP_DEP(thread_setup, true),