diff options
author | Richard Braun <rbraun@sceen.net> | 2018-01-16 01:52:26 +0100 |
---|---|---|
committer | Richard Braun <rbraun@sceen.net> | 2018-01-16 01:52:26 +0100 |
commit | b4c679bd6093be21cd6e78fca90a4b490e8b83db (patch) | |
tree | 99d4f7da93fa4c560e1780e8c7d628e334824c21 | |
parent | 884e2de718cc47bb9e5200d866f41c88e74ba3c0 (diff) |
Clean up init op dependencies between syscnt and mutex
-rw-r--r-- | kern/mutex.c | 13 | ||||
-rw-r--r-- | kern/mutex.h | 9 | ||||
-rw-r--r-- | kern/mutex/mutex_adaptive.c | 10 | ||||
-rw-r--r-- | kern/mutex/mutex_adaptive_i.h | 8 | ||||
-rw-r--r-- | kern/mutex/mutex_pi_i.h | 7 | ||||
-rw-r--r-- | kern/mutex/mutex_plain.c | 9 | ||||
-rw-r--r-- | kern/mutex/mutex_plain_i.h | 8 | ||||
-rw-r--r-- | kern/rtmutex.c | 12 | ||||
-rw-r--r-- | kern/rtmutex.h | 4 | ||||
-rw-r--r-- | kern/syscnt.c | 3 | ||||
-rw-r--r-- | kern/syscnt.h | 1 |
11 files changed, 77 insertions, 7 deletions
diff --git a/kern/mutex.c b/kern/mutex.c index bd548b88..7f46630d 100644 --- a/kern/mutex.c +++ b/kern/mutex.c @@ -20,11 +20,20 @@ #include <kern/thread.h> static int __init +mutex_bootstrap(void) +{ + return 0; +} + +INIT_OP_DEFINE(mutex_bootstrap, + INIT_OP_DEP(mutex_impl_bootstrap, true), + INIT_OP_DEP(thread_setup_booter, true)); + +static int __init mutex_setup(void) { return 0; } INIT_OP_DEFINE(mutex_setup, - INIT_OP_DEP(mutex_impl_setup, true), - INIT_OP_DEP(thread_setup_booter, true)); + INIT_OP_DEP(mutex_impl_setup, true)); diff --git a/kern/mutex.h b/kern/mutex.h index f152d317..10872e6e 100644 --- a/kern/mutex.h +++ b/kern/mutex.h @@ -111,6 +111,15 @@ mutex_unlock(struct mutex *mutex) } /* + * Special init operation for syscnt_setup. + * + * This init operation only exists to avoid a circular dependency between + * syscnt_setup and mutex_setup, without giving syscnt_setup knowledge + * about the dependencies of mutex_setup. + */ +INIT_OP_DECLARE(mutex_bootstrap); + +/* * This init operation provides : * - uncontended mutex locking * diff --git a/kern/mutex/mutex_adaptive.c b/kern/mutex/mutex_adaptive.c index 3e6b610b..bda54532 100644 --- a/kern/mutex/mutex_adaptive.c +++ b/kern/mutex/mutex_adaptive.c @@ -318,6 +318,15 @@ mutex_adaptive_unlock_slow(struct mutex *mutex) } static int +mutex_adaptive_bootstrap(void) +{ + return 0; +} + +INIT_OP_DEFINE(mutex_adaptive_bootstrap, + INIT_OP_DEP(thread_setup_booter, true)); + +static int mutex_adaptive_setup(void) { mutex_adaptive_setup_debug(); @@ -325,6 +334,7 @@ mutex_adaptive_setup(void) } INIT_OP_DEFINE(mutex_adaptive_setup, + INIT_OP_DEP(mutex_adaptive_bootstrap, true), #ifdef CONFIG_MUTEX_DEBUG INIT_OP_DEP(syscnt_setup, true), #endif /* CONFIG_MUTEX_DEBUG */ diff --git a/kern/mutex/mutex_adaptive_i.h b/kern/mutex/mutex_adaptive_i.h index a8598e60..6ff1277e 100644 --- a/kern/mutex/mutex_adaptive_i.h +++ b/kern/mutex/mutex_adaptive_i.h @@ -133,8 +133,14 @@ mutex_impl_unlock(struct mutex *mutex) } } -#define mutex_impl_setup mutex_adaptive_setup +/* + * Mutex init operations. See kern/mutex.h. + */ +#define mutex_impl_bootstrap mutex_adaptive_bootstrap +INIT_OP_DECLARE(mutex_adaptive_bootstrap); + +#define mutex_impl_setup mutex_adaptive_setup INIT_OP_DECLARE(mutex_adaptive_setup); #endif /* _KERN_MUTEX_ADAPTIVE_I_H */ diff --git a/kern/mutex/mutex_pi_i.h b/kern/mutex/mutex_pi_i.h index 2d5a2b6f..14f63be0 100644 --- a/kern/mutex/mutex_pi_i.h +++ b/kern/mutex/mutex_pi_i.h @@ -65,6 +65,11 @@ mutex_impl_unlock(struct mutex *mutex) rtmutex_unlock(&mutex->rtmutex); } -#define mutex_impl_setup rtmutex_setup +/* + * Mutex init operations. See kern/mutex.h. + */ + +#define mutex_impl_bootstrap rtmutex_bootstrap +#define mutex_impl_setup rtmutex_setup #endif /* _KERN_MUTEX_PI_I_H */ diff --git a/kern/mutex/mutex_plain.c b/kern/mutex/mutex_plain.c index 8945014f..266bd70b 100644 --- a/kern/mutex/mutex_plain.c +++ b/kern/mutex/mutex_plain.c @@ -159,6 +159,14 @@ mutex_plain_unlock_slow(struct mutex *mutex) } static int +mutex_plain_bootstrap(void) +{ + return 0; +} + +INIT_OP_DEFINE(mutex_plain_bootstrap); + +static int mutex_plain_setup(void) { mutex_plain_setup_debug(); @@ -166,6 +174,7 @@ mutex_plain_setup(void) } INIT_OP_DEFINE(mutex_plain_setup, + INIT_OP_DEP(mutex_plain_bootstrap, true), #ifdef CONFIG_MUTEX_DEBUG INIT_OP_DEP(syscnt_setup, true), #endif /* CONFIG_MUTEX_DEBUG */ diff --git a/kern/mutex/mutex_plain_i.h b/kern/mutex/mutex_plain_i.h index fe973086..74def89e 100644 --- a/kern/mutex/mutex_plain_i.h +++ b/kern/mutex/mutex_plain_i.h @@ -127,8 +127,14 @@ mutex_impl_unlock(struct mutex *mutex) } } -#define mutex_impl_setup mutex_plain_setup +/* + * Mutex init operations. See kern/mutex.h. + */ +#define mutex_impl_bootstrap mutex_plain_bootstrap +INIT_OP_DECLARE(mutex_plain_bootstrap); + +#define mutex_impl_setup mutex_plain_setup INIT_OP_DECLARE(mutex_plain_setup); #endif /* _KERN_MUTEX_PLAIN_I_H */ diff --git a/kern/rtmutex.c b/kern/rtmutex.c index 36c72a37..7457196d 100644 --- a/kern/rtmutex.c +++ b/kern/rtmutex.c @@ -225,6 +225,15 @@ out: } static int +rtmutex_bootstrap(void) +{ + return 0; +} + +INIT_OP_DEFINE(rtmutex_bootstrap, + INIT_OP_DEP(thread_setup_booter, true)); + +static int rtmutex_setup(void) { rtmutex_setup_debug(); @@ -232,7 +241,8 @@ rtmutex_setup(void) } INIT_OP_DEFINE(rtmutex_setup, + INIT_OP_DEP(rtmutex_bootstrap, true), #ifdef CONFIG_MUTEX_DEBUG INIT_OP_DEP(syscnt_setup, true), #endif /* CONFIG_MUTEX_DEBUG */ - ); +); diff --git a/kern/rtmutex.h b/kern/rtmutex.h index f8b11bd6..90b3438d 100644 --- a/kern/rtmutex.h +++ b/kern/rtmutex.h @@ -132,6 +132,10 @@ rtmutex_unlock(struct rtmutex *rtmutex) } } +/* + * Mutex init operations. See kern/mutex.h. + */ +INIT_OP_DECLARE(rtmutex_bootstrap); INIT_OP_DECLARE(rtmutex_setup); #endif /* _KERN_RTMUTEX_H */ diff --git a/kern/syscnt.c b/kern/syscnt.c index cd13a398..e0b213d7 100644 --- a/kern/syscnt.c +++ b/kern/syscnt.c @@ -76,7 +76,8 @@ syscnt_setup(void) * modules may use system counters for debugging. */ INIT_OP_DEFINE(syscnt_setup, - INIT_OP_DEP(thread_setup_booter, true)); + INIT_OP_DEP(mutex_bootstrap, true), + INIT_OP_DEP(spinlock_setup, true)); void __init syscnt_register(struct syscnt *syscnt, const char *name) diff --git a/kern/syscnt.h b/kern/syscnt.h index 816aa4b9..2200456c 100644 --- a/kern/syscnt.h +++ b/kern/syscnt.h @@ -114,6 +114,7 @@ void syscnt_info(const char *prefix); /* * This init operation provides : * - registration of system counters + * - module fully initialized */ INIT_OP_DECLARE(syscnt_setup); |