diff options
-rw-r--r-- | arch/x86/machine/boot.c | 2 | ||||
-rw-r--r-- | kern/sleepq.c | 6 | ||||
-rw-r--r-- | kern/sleepq.h | 9 |
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); |