summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/x86/machine/boot.c2
-rw-r--r--kern/sleepq.c6
-rw-r--r--kern/sleepq.h9
3 files changed, 16 insertions, 1 deletions
diff --git a/arch/x86/machine/boot.c b/arch/x86/machine/boot.c
index f88ca883..6ad1552a 100644
--- a/arch/x86/machine/boot.c
+++ b/arch/x86/machine/boot.c
@@ -55,6 +55,7 @@
#include <kern/param.h>
#include <kern/percpu.h>
#include <kern/printk.h>
+#include <kern/sleepq.h>
#include <kern/sref.h>
#include <kern/syscnt.h>
#include <kern/thread.h>
@@ -426,6 +427,7 @@ boot_save_data(void)
void __init
boot_main(void)
{
+ sleepq_bootstrap();
syscnt_setup();
percpu_bootstrap();
trap_setup();
diff --git a/kern/sleepq.c b/kern/sleepq.c
index 0c41caef..bd310d04 100644
--- a/kern/sleepq.c
+++ b/kern/sleepq.c
@@ -193,7 +193,7 @@ sleepq_ctor(void *ptr)
}
void __init
-sleepq_setup(void)
+sleepq_bootstrap(void)
{
unsigned int i;
@@ -204,7 +204,11 @@ sleepq_setup(void)
for (i = 0; i < ARRAY_SIZE(sleepq_cond_htable); i++) {
sleepq_bucket_init(&sleepq_cond_htable[i]);
}
+}
+void __init
+sleepq_setup(void)
+{
kmem_cache_init(&sleepq_cache, "sleepq", sizeof(struct sleepq),
CPU_L1_SIZE, sleepq_ctor, 0);
}
diff --git a/kern/sleepq.h b/kern/sleepq.h
index 1ba4a319..aeeb94b7 100644
--- a/kern/sleepq.h
+++ b/kern/sleepq.h
@@ -41,6 +41,15 @@
struct sleepq;
/*
+ * Early initialization of the sleepq module.
+ *
+ * This module is initialized by architecture-specific code. It should
+ * be one of the first modules to be initialized since it's used by
+ * synchronization objects that may be accessed very early.
+ */
+void sleepq_bootstrap(void);
+
+/*
* Initialize the sleepq module.
*/
void sleepq_setup(void);