public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Ingo Molnar <mingo@elte.hu>
To: Andrew Morton <akpm@osdl.org>
Cc: rostedt@goodmis.org, rlrevell@joe-job.com, linux-kernel@vger.kernel.org
Subject: [patch 3/3] remove bitlocks
Date: Wed, 16 Mar 2005 10:57:29 +0100	[thread overview]
Message-ID: <20050316095729.GC15460@elte.hu> (raw)
In-Reply-To: <20050316095359.GB15460@elte.hu>


this patch is a port of Steven Rostedt's bitlock-removal patch to
BK-curr. It changes the ext3 code to use wait_on_bit_lock() on
&jbd_lock_bh_sleep, instead of the bitlock primitives.

Builds/boots/works fine on x86.

From: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>

--- linux/fs/jbd/journal.c.orig
+++ linux/fs/jbd/journal.c
@@ -82,6 +82,17 @@ EXPORT_SYMBOL(journal_force_commit);
 
 static int journal_convert_superblock_v1(journal_t *, journal_superblock_t *);
 
+#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK) || defined(CONFIG_PREEMPT)
+/*
+ * Used in the locking of the bh_state and bh_journalhead bit locks.
+ */
+int jbd_lock_bh_sleep(void *notused)
+{
+	schedule();
+	return 0;
+}
+#endif
+
 /*
  * Helper function used to manage commit timeouts
  */
--- linux/include/linux/jbd.h.orig
+++ linux/include/linux/jbd.h
@@ -65,7 +65,6 @@ extern int journal_enable_debug;
 		}							\
 	} while (0)
 #else
-#define jbd_debug(f, a...)	/**/
 #endif
 
 extern void * __jbd_kmalloc (const char *where, size_t size, int flags, int retry);
@@ -324,34 +323,63 @@ static inline struct journal_head *bh2jh
 	return bh->b_private;
 }
 
+#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK) || defined(CONFIG_PREEMPT)
+int jbd_lock_bh_sleep(void *notused);
+#endif
+
 static inline void jbd_lock_bh_state(struct buffer_head *bh)
 {
-	bit_spin_lock(BH_State, &bh->b_state);
+#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK) || defined(CONFIG_PREEMPT)
+	wait_on_bit_lock(&bh->b_state,BH_State,&jbd_lock_bh_sleep,TASK_UNINTERRUPTIBLE);
+#endif
+	__acquire(bitlock);
 }
 
 static inline int jbd_trylock_bh_state(struct buffer_head *bh)
 {
-	return bit_spin_trylock(BH_State, &bh->b_state);
+#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK) || defined(CONFIG_PREEMPT)
+	if (test_and_set_bit(BH_State, &bh->b_state))
+		return 0;
+#endif
+	__acquire(bitlock);
+	return 1;
 }
 
 static inline int jbd_is_locked_bh_state(struct buffer_head *bh)
 {
-	return bit_spin_is_locked(BH_State, &bh->b_state);
+#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK) || defined(CONFIG_PREEMPT)
+	return test_bit(BH_State, &bh->b_state);
+#else
+	return 1;
+#endif
 }
 
 static inline void jbd_unlock_bh_state(struct buffer_head *bh)
 {
-	bit_spin_unlock(BH_State, &bh->b_state);
+#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK) || defined(CONFIG_PREEMPT)
+	clear_bit(BH_State, &bh->b_state);
+	smp_mb__after_clear_bit();
+	wake_up_bit(&bh->b_state, BH_State);
+#endif
+	__release(bitlock);
 }
 
 static inline void jbd_lock_bh_journal_head(struct buffer_head *bh)
 {
-	bit_spin_lock(BH_JournalHead, &bh->b_state);
+#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK) || defined(CONFIG_PREEMPT)
+	wait_on_bit_lock(&bh->b_state,BH_JournalHead,&jbd_lock_bh_sleep,TASK_UNINTERRUPTIBLE);
+#endif
+	__acquire(bitlock);
 }
 
 static inline void jbd_unlock_bh_journal_head(struct buffer_head *bh)
 {
-	bit_spin_unlock(BH_JournalHead, &bh->b_state);
+#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK) || defined(CONFIG_PREEMPT)
+	clear_bit(BH_JournalHead, &bh->b_state);
+	smp_mb__after_clear_bit();
+	wake_up_bit(&bh->b_state, BH_JournalHead);
+#endif
+	__release(bitlock);
 }
 
 struct jbd_revoke_table_s;
--- linux/include/linux/spinlock.h.orig
+++ linux/include/linux/spinlock.h
@@ -522,78 +522,6 @@ extern int _atomic_dec_and_lock(atomic_t
 
 #define atomic_dec_and_lock(atomic,lock) __cond_lock(_atomic_dec_and_lock(atomic,lock))
 
-/*
- *  bit-based spin_lock()
- *
- * Don't use this unless you really need to: spin_lock() and spin_unlock()
- * are significantly faster.
- */
-static inline void bit_spin_lock(int bitnum, unsigned long *addr)
-{
-	/*
-	 * Assuming the lock is uncontended, this never enters
-	 * the body of the outer loop. If it is contended, then
-	 * within the inner loop a non-atomic test is used to
-	 * busywait with less bus contention for a good time to
-	 * attempt to acquire the lock bit.
-	 */
-	preempt_disable();
-#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK)
-	while (test_and_set_bit(bitnum, addr)) {
-		while (test_bit(bitnum, addr)) {
-			preempt_enable();
-			cpu_relax();
-			preempt_disable();
-		}
-	}
-#endif
-	__acquire(bitlock);
-}
-
-/*
- * Return true if it was acquired
- */
-static inline int bit_spin_trylock(int bitnum, unsigned long *addr)
-{
-	preempt_disable();	
-#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK)
-	if (test_and_set_bit(bitnum, addr)) {
-		preempt_enable();
-		return 0;
-	}
-#endif
-	__acquire(bitlock);
-	return 1;
-}
-
-/*
- *  bit-based spin_unlock()
- */
-static inline void bit_spin_unlock(int bitnum, unsigned long *addr)
-{
-#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK)
-	BUG_ON(!test_bit(bitnum, addr));
-	smp_mb__before_clear_bit();
-	clear_bit(bitnum, addr);
-#endif
-	preempt_enable();
-	__release(bitlock);
-}
-
-/*
- * Return true if the lock is held.
- */
-static inline int bit_spin_is_locked(int bitnum, unsigned long *addr)
-{
-#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK)
-	return test_bit(bitnum, addr);
-#elif defined CONFIG_PREEMPT
-	return preempt_count();
-#else
-	return 1;
-#endif
-}
-
 #define DEFINE_SPINLOCK(x) spinlock_t x = SPIN_LOCK_UNLOCKED
 #define DEFINE_RWLOCK(x) rwlock_t x = RW_LOCK_UNLOCKED
 

  reply	other threads:[~2005-03-16 10:02 UTC|newest]

Thread overview: 125+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-02-04 10:03 [patch] Real-Time Preemption, -RT-2.6.11-rc3-V0.7.38-01 Ingo Molnar
2005-02-04 15:19 ` Kevin Hilman
2005-02-04 17:30   ` Ingo Molnar
2005-02-04 18:19 ` Tom Rini
2005-02-07  9:03   ` Ingo Molnar
2005-02-07 14:35     ` Tom Rini
2005-02-08  8:27       ` Ingo Molnar
2005-02-06  4:19 ` Valdis.Kletnieks
2005-02-07  9:21   ` Ingo Molnar
2005-02-07 15:08     ` Real-Time Preemption and UML? Esben Nielsen
2005-02-07 18:35       ` Jeff Dike
2005-02-07 23:14         ` Esben Nielsen
2005-02-08  8:39           ` Ingo Molnar
2005-02-08 18:55             ` Jeff Dike
2005-02-08 21:20               ` Esben Nielsen
2005-02-08 21:44                 ` Ingo Molnar
2005-02-08 23:02                   ` Esben Nielsen
2005-02-08  7:55 ` [patch] Real-Time Preemption, -RT-2.6.11-rc3-V0.7.38-01 Valdis.Kletnieks
2005-02-08  8:45   ` Ingo Molnar
2005-02-08 10:26     ` Valdis.Kletnieks
2005-02-08 21:58 ` William Weston
2005-02-09 11:51   ` Ingo Molnar
2005-02-10  2:13     ` William Weston
2005-02-10  7:52       ` Ingo Molnar
2005-02-10 20:21         ` George Anzinger
2005-02-10 20:40           ` Ingo Molnar
2005-02-10 21:05             ` George Anzinger
2005-02-11  8:34               ` Ingo Molnar
2005-02-11  9:38                 ` Sven Dietrich
2005-02-11  9:42                   ` Ingo Molnar
2005-02-11  0:09           ` Sven Dietrich
2005-02-11  6:01             ` George Anzinger
2005-02-11  8:28             ` Ingo Molnar
2005-02-11  9:53               ` Sven Dietrich
2005-02-11 10:04                 ` Ingo Molnar
2005-02-11 21:49                   ` Steven Rostedt
2005-02-13 12:59                     ` Ingo Molnar
2005-02-13 15:11                       ` Steven Rostedt
2005-03-03 19:36         ` [patch] Real-Time Preemption, deactivate() scheduling issue Eugeny S. Mints
2005-03-03 22:32           ` Esben Nielsen
2005-03-04 11:56             ` Eugeny S. Mints
2005-03-04 15:45               ` George Anzinger
2005-03-29  8:45           ` Ingo Molnar
2005-02-09 12:48   ` [patch] Real-Time Preemption, -RT-2.6.11-rc3-V0.7.38-01 Stephen Smalley
2005-02-10  2:20     ` William Weston
2005-02-19  5:08 ` Lee Revell
2005-02-19  6:47   ` Lee Revell
2005-02-19  9:00   ` Ingo Molnar
2005-02-19  9:03     ` Ingo Molnar
2005-02-19 20:45       ` Lee Revell
2005-02-20  0:19         ` Lee Revell
2005-03-17 16:33         ` Lee Revell
2005-02-23  2:22       ` Lee Revell
2005-03-10  9:37   ` Steven Rostedt
2005-03-10  9:54     ` Steven Rostedt
2005-03-11  9:57       ` Ingo Molnar
2005-03-11 10:15         ` Steven Rostedt
2005-03-11 10:17           ` Ingo Molnar
2005-03-11 10:24             ` Steven Rostedt
2005-03-11 10:43               ` Andrew Morton
2005-03-11 10:53                 ` Steven Rostedt
2005-03-11 14:40                 ` Steven Rostedt
2005-03-11 15:08                   ` Steven Rostedt
2005-03-11 15:30                     ` K.R. Foley
2005-03-11 15:38                   ` Ingo Molnar
2005-03-11 16:01                     ` Steven Rostedt
2005-03-11 20:39                     ` Steven Rostedt
2005-03-11 20:46                       ` Lee Revell
2005-03-11 22:06                         ` Lee Revell
2005-03-14  7:37                           ` Steven Rostedt
2005-03-14  9:33                             ` Steven Rostedt
2005-03-14 10:10                               ` Steven Rostedt
2005-03-14 15:50                                 ` Steven Rostedt
2005-03-14 19:02                                   ` Steven Rostedt
2005-03-15 11:44                                   ` Steven Rostedt
2005-03-15 12:00                                     ` Ingo Molnar
2005-03-15 13:07                                       ` Steven Rostedt
2005-03-15 13:35                                         ` Ingo Molnar
2005-03-15 13:55                                           ` Steven Rostedt
2005-03-15 19:12                                             ` Andrew Morton
2005-03-15 18:05                                           ` Steven Rostedt
2005-03-15 19:09                                             ` Lee Revell
2005-03-16  7:50                                               ` Steven Rostedt
2005-03-16 18:21                                                 ` Lee Revell
2005-03-16  7:31                                             ` Steven Rostedt
2005-03-16  8:50                                             ` Ingo Molnar
2005-03-16  9:15                                               ` Andrew Morton
2005-03-16  9:51                                                 ` [patch 0/3] j_state_lock, j_list_lock, remove-bitlocks Ingo Molnar
2005-03-16  9:53                                                   ` [patch 1/3] j_state_lock -> j_state_sem Ingo Molnar
2005-03-16  9:53                                                     ` [patch 2/3] j_list_lock -> j_list_sem Ingo Molnar
2005-03-16  9:57                                                       ` Ingo Molnar [this message]
2005-03-16 10:04                                                   ` [patch 0/3] j_state_lock, j_list_lock, remove-bitlocks Andrew Morton
2005-03-16 10:12                                                     ` Ingo Molnar
2005-03-16 10:23                                                       ` Steven Rostedt
2005-03-16 10:26                                                         ` Ingo Molnar
2005-03-16 10:26                                                       ` Andrew Morton
2005-03-16 10:29                                                         ` Ingo Molnar
2005-03-16 10:41                                                           ` Andrew Morton
2005-03-16 10:34                                                         ` Arjan van de Ven
2005-03-16 10:19                                                     ` Ingo Molnar
2005-03-16 10:40                                                       ` Andrew Morton
2005-03-16 10:51                                                         ` Ingo Molnar
2005-03-16 11:05                                                         ` Steven Rostedt
2005-03-16 11:19                                                           ` Andrew Morton
2005-03-16 14:04                                                             ` Steven Rostedt
2005-03-16 16:47                                                               ` Steven Rostedt
2005-03-16 17:47                                                                 ` Steven Rostedt
2005-03-16 19:20                                                                   ` Lee Revell
2005-03-17  7:15                                                                     ` Steven Rostedt
2005-03-17 15:41                                                                       ` Lee Revell
2005-03-17 16:23                                                                         ` Steven Rostedt
2005-03-17 16:36                                                                           ` Lee Revell
2005-03-18  6:58                                                                             ` Steven Rostedt
2005-03-18 18:19                                                                               ` Lee Revell
2005-03-16 21:15                                                                   ` Andrew Morton
2005-03-17  9:21                                                                     ` Steven Rostedt
2005-03-18  9:23                                                                       ` [PATCH] remove lame schedule in journal inverted_lock (was: Re: [patch 0/3] j_state_lock, j_list_lock, remove-bitlocks) Steven Rostedt
2005-03-18  9:32                                                                         ` Andrew Morton
2005-03-18 10:38                                                                           ` Steven Rostedt
2005-03-18 11:07                                                                             ` Andrew Morton
2005-03-18 12:10                                                                               ` Steven Rostedt
2005-03-17  9:58                                                                   ` [patch 0/3] j_state_lock, j_list_lock, remove-bitlocks Steven Rostedt
2005-03-11  9:28 ` [patch] Real-Time Preemption, -RT-2.6.11-final-V0.7.40-00 Ingo Molnar
2005-03-11 12:10   ` Andrew Walrond
2005-03-14 20:19     ` Tom Rini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20050316095729.GC15460@elte.hu \
    --to=mingo@elte.hu \
    --cc=akpm@osdl.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rlrevell@joe-job.com \
    --cc=rostedt@goodmis.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox