[Skiboot] [PATCH 3/5] lock: Move code around
Benjamin Herrenschmidt
benh at kernel.crashing.org
Wed Aug 15 15:10:37 AEST 2018
This moves __try_lock() and lock_timeout() as a preparation
for the next patch. No code change
Signed-off-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>
---
core/lock.c | 78 ++++++++++++++++++++++++++---------------------------
1 file changed, 39 insertions(+), 39 deletions(-)
diff --git a/core/lock.c b/core/lock.c
index c320f2c3..1fc71a92 100644
--- a/core/lock.c
+++ b/core/lock.c
@@ -63,6 +63,45 @@ static void unlock_check(struct lock *l)
lock_error(l, "Releasing lock we don't hold depth", 4);
}
+static inline bool __nomcount __try_lock(struct cpu_thread *cpu, struct lock *l)
+{
+ uint64_t val;
+
+ val = cpu->pir;
+ val <<= 32;
+ val |= 1;
+
+ barrier();
+ if (__cmpxchg64(&l->lock_val, 0, val) == 0) {
+ sync();
+ return true;
+ }
+ return false;
+}
+
+#define LOCK_TIMEOUT_MS 5000
+static inline bool lock_timeout(unsigned long start)
+{
+ /* Print warning if lock has been spinning for more than TIMEOUT_MS */
+ unsigned long wait = tb_to_msecs(mftb());
+
+ if (wait - start > LOCK_TIMEOUT_MS) {
+ /*
+ * If the timebase is invalid, we shouldn't
+ * throw an error. This is possible with pending HMIs
+ * that need to recover TB.
+ */
+ if( !(mfspr(SPR_TFMR) & SPR_TFMR_TB_VALID))
+ return false;
+ prlog(PR_WARNING, "WARNING: Lock has been "\
+ "spinning for %lums\n", wait - start);
+ backtrace();
+ return true;
+ }
+
+ return false;
+}
+#else
/* Find circular dependencies in the lock requests. */
static bool check_deadlock(void)
{
@@ -132,29 +171,6 @@ static void remove_lock_request(void)
{
this_cpu()->requested_lock = NULL;
}
-
-#define LOCK_TIMEOUT_MS 5000
-static inline bool lock_timeout(unsigned long start)
-{
- /* Print warning if lock has been spinning for more than TIMEOUT_MS */
- unsigned long wait = tb_to_msecs(mftb());
-
- if (wait - start > LOCK_TIMEOUT_MS) {
- /*
- * If the timebase is invalid, we shouldn't
- * throw an error. This is possible with pending HMIs
- * that need to recover TB.
- */
- if( !(mfspr(SPR_TFMR) & SPR_TFMR_TB_VALID))
- return false;
- prlog(PR_WARNING, "WARNING: Lock has been "\
- "spinning for %lums\n", wait - start);
- backtrace();
- return true;
- }
-
- return false;
-}
#else
static inline void lock_check(struct lock *l) { };
static inline void unlock_check(struct lock *l) { };
@@ -170,22 +186,6 @@ bool lock_held_by_me(struct lock *l)
return l->lock_val == ((pir64 << 32) | 1);
}
-static inline bool __try_lock(struct cpu_thread *cpu, struct lock *l)
-{
- uint64_t val;
-
- val = cpu->pir;
- val <<= 32;
- val |= 1;
-
- barrier();
- if (__cmpxchg64(&l->lock_val, 0, val) == 0) {
- sync();
- return true;
- }
- return false;
-}
-
bool try_lock_caller(struct lock *l, const char *owner)
{
struct cpu_thread *cpu = this_cpu();
--
2.17.1
More information about the Skiboot
mailing list