summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2018-01-16 01:52:26 +0100
committerRichard Braun <rbraun@sceen.net>2018-01-16 01:52:26 +0100
commitb4c679bd6093be21cd6e78fca90a4b490e8b83db (patch)
tree99d4f7da93fa4c560e1780e8c7d628e334824c21
parent884e2de718cc47bb9e5200d866f41c88e74ba3c0 (diff)
Clean up init op dependencies between syscnt and mutex
-rw-r--r--kern/mutex.c13
-rw-r--r--kern/mutex.h9
-rw-r--r--kern/mutex/mutex_adaptive.c10
-rw-r--r--kern/mutex/mutex_adaptive_i.h8
-rw-r--r--kern/mutex/mutex_pi_i.h7
-rw-r--r--kern/mutex/mutex_plain.c9
-rw-r--r--kern/mutex/mutex_plain_i.h8
-rw-r--r--kern/rtmutex.c12
-rw-r--r--kern/rtmutex.h4
-rw-r--r--kern/syscnt.c3
-rw-r--r--kern/syscnt.h1
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);