All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marcin Dalecki <dalecki@evision.ag>
To: Linus Torvalds <torvalds@transmeta.com>
Cc: Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: [PATCH] 2.5.27 spinlock
Date: Mon, 22 Jul 2002 12:50:22 +0200	[thread overview]
Message-ID: <3D3BE36E.3090001@evision.ag> (raw)
In-Reply-To: Pine.LNX.4.44.0207201218390.1230-100000@home.transmeta.com

[-- Attachment #1: Type: text/plain, Size: 239 bytes --]

- Add missing _raw_write_trylock() definitions for the UP preemption case.

- Replace tons of georgeous macros for the UP preemption case with
static inline  functions. Much nicer to look at and more adequate then
({ xxxx }) in this case.

[-- Attachment #2: spinlock-2.5.27.diff --]
[-- Type: text/plain, Size: 4783 bytes --]

diff -urN linux-2.5.27/include/linux/spinlock.h linux/include/linux/spinlock.h
--- linux-2.5.27/include/linux/spinlock.h	2002-07-20 21:11:19.000000000 +0200
+++ linux/include/linux/spinlock.h	2002-07-21 22:59:17.000000000 +0200
@@ -37,10 +37,10 @@
 #define write_unlock_irqrestore(lock, flags)	do { write_unlock(lock); local_irq_restore(flags); } while (0)
 #define write_unlock_irq(lock)			do { write_unlock(lock); local_irq_enable();       } while (0)
 #define write_unlock_bh(lock)			do { write_unlock(lock); local_bh_enable();        } while (0)
-#define spin_trylock_bh(lock)			({ int __r; local_bh_disable();\
+#define spin_trylock_bh(lock)			do { int __r; local_bh_disable();\
 						__r = spin_trylock(lock);      \
 						if (!__r) local_bh_enable();   \
-						__r; })
+						__r; } while (0)
 
 /* Must define these before including other files, inline functions need them */
 
@@ -89,6 +89,7 @@
 #define _raw_spin_trylock(lock)	((void)(lock), 1)
 #define spin_unlock_wait(lock)	do { (void)(lock); } while(0)
 #define _raw_spin_unlock(lock)	do { (void)(lock); } while(0)
+#define _raw_write_trylock(lock) ((void)(lock), 1)
 
 /*
  * Read-write spinlocks, allowing multiple readers
@@ -124,64 +125,97 @@
 
 #define preempt_get_count() (current_thread_info()->preempt_count)
 
-#define preempt_disable() \
-do { \
-	++current_thread_info()->preempt_count; \
-	barrier(); \
-} while (0)
-
-#define preempt_enable_no_resched() \
-do { \
-	--current_thread_info()->preempt_count; \
-	barrier(); \
-} while (0)
-
-#define preempt_enable() \
-do { \
-	--current_thread_info()->preempt_count; \
-	barrier(); \
-	if (unlikely(test_thread_flag(TIF_NEED_RESCHED))) \
-		preempt_schedule(); \
-} while (0)
-
-#define preempt_check_resched() \
-do { \
-	if (unlikely(test_thread_flag(TIF_NEED_RESCHED))) \
-		preempt_schedule(); \
-} while (0)
-
-#define spin_lock(lock)	\
-do { \
-	preempt_disable(); \
-	_raw_spin_lock(lock); \
-} while(0)
-
-#define spin_trylock(lock)	({preempt_disable(); _raw_spin_trylock(lock) ? \
-				1 : ({preempt_enable(); 0;});})
-#define spin_unlock(lock) \
-do { \
-	_raw_spin_unlock(lock); \
-	preempt_enable(); \
-} while (0)
-
-#define spin_unlock_no_resched(lock) \
-do { \
-	_raw_spin_unlock(lock); \
-	preempt_enable_no_resched(); \
-} while (0)
-
-#define read_lock(lock)		({preempt_disable(); _raw_read_lock(lock);})
-#define read_unlock(lock)	({_raw_read_unlock(lock); preempt_enable();})
-#define write_lock(lock)	({preempt_disable(); _raw_write_lock(lock);})
-#define write_unlock(lock)	({_raw_write_unlock(lock); preempt_enable();})
-#define write_trylock(lock)	({preempt_disable();_raw_write_trylock(lock) ? \
-				1 : ({preempt_enable(); 0;});})
+static inline void preempt_disable(void)
+{
+	++current_thread_info()->preempt_count;
+	barrier();
+}
+
+static inline void preempt_enable_no_resched(void)
+{
+	--current_thread_info()->preempt_count;
+	barrier();
+}
+
+static inline void preempt_enable(void)
+{
+	--current_thread_info()->preempt_count;
+	barrier();
+	if (unlikely(test_thread_flag(TIF_NEED_RESCHED)))
+		preempt_schedule();
+}
+
+static inline void preempt_check_resched(void)
+{
+	if (unlikely(test_thread_flag(TIF_NEED_RESCHED)))
+		preempt_schedule();
+}
+
+static inline void spin_lock(spinlock_t *lock)
+{
+	preempt_disable();
+	_raw_spin_lock(lock);
+}
+
+static inline int spin_trylock(spinlock_t *lock)
+{
+	preempt_disable();
+	if (_raw_spin_trylock(lock))
+		return 1;
+	preempt_enable();
+	return 0;
+}
+
+static inline void spin_unlock(spinlock_t *lock)
+{
+	_raw_spin_unlock(lock);
+	preempt_enable();
+}
+
+static inline void spin_unlock_no_resched(spinlock_t *lock)
+{
+	_raw_spin_unlock(lock);
+	preempt_enable_no_resched();
+}
+
+static inline void read_lock(rwlock_t *lock)
+{
+	preempt_disable();
+	_raw_read_lock(lock);
+}
+
+static inline void read_unlock(rwlock_t *lock)
+{
+	_raw_read_unlock(lock);
+	preempt_enable();
+}
+
+static inline void write_lock(rwlock_t *lock)
+{
+	preempt_disable();
+	_raw_write_lock(lock);
+}
+
+static inline void write_unlock(rwlock_t *lock)
+{
+	_raw_write_unlock(lock);
+	preempt_enable();
+}
+
+static inline int write_trylock(rwlock_t *lock)
+{
+	preempt_disable();
+	if (_raw_write_trylock(lock))
+		return 1;
+	preempt_enable();
+	return 0;
+}
 
 #else
 
 #define preempt_get_count()		(0)
 #define preempt_disable()		do { } while (0)
-#define preempt_enable_no_resched()	do {} while(0)
+#define preempt_enable_no_resched()	do { } while (0)
 #define preempt_enable()		do { } while (0)
 #define preempt_check_resched()		do { } while (0)
 
@@ -195,6 +229,7 @@
 #define write_lock(lock)		_raw_write_lock(lock)
 #define write_unlock(lock)		_raw_write_unlock(lock)
 #define write_trylock(lock)		_raw_write_trylock(lock)
+
 #endif
 
 /* "lock on reference count zero" */

  parent reply	other threads:[~2002-07-22 10:52 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-07-20 19:22 Linux-2.5.27 Linus Torvalds
2002-07-22 10:42 ` [PATCH] 2.5.27 sysctl Marcin Dalecki
2002-07-22 10:53   ` Christoph Hellwig
2002-07-22 10:56     ` Marcin Dalecki
2002-07-22 11:02       ` Christoph Hellwig
2002-07-22 11:03         ` Marcin Dalecki
2002-07-22 12:51           ` Alexander Viro
2002-07-22 13:02             ` Marcin Dalecki
2002-07-22 11:13       ` Christoph Hellwig
2002-07-22 11:19       ` Dave Jones
2002-07-22 11:19       ` bart
2002-07-22 11:21       ` BALBIR SINGH
2002-07-22 12:30       ` Alan Cox
2002-07-22 11:21         ` Marcin Dalecki
2002-07-22 15:57   ` Daniel Egger
2002-07-22 10:43 ` [PATCH] 2.5.27 devfs Marcin Dalecki
2002-07-22 17:28   ` Richard Gooch
2002-07-22 18:03     ` Marcin Dalecki
2002-07-22 18:19       ` Alexander Viro
2002-07-22 18:46         ` Marcin Dalecki
2002-07-23  5:04       ` Richard Gooch
2002-07-22 10:45 ` [PATCH] 2.5.27 sched Marcin Dalecki
2002-07-22 10:47 ` [PATCH] 2.5.27 smbiod Marcin Dalecki
2002-07-22 22:29   ` Albert D. Cahalan
2002-07-22 10:50 ` Marcin Dalecki [this message]
2002-07-24  4:40   ` [PATCH] 2.5.27 spinlock Rusty Russell
2002-07-22 10:51 ` [PATCH] 2.5.27 wait Marcin Dalecki
2002-07-22 10:53 ` [PATCH] 2.5.27 enum Marcin Dalecki
2002-07-22 20:01   ` Benjamin LaHaise
2002-07-23  2:11     ` David S. Miller
2002-07-23  2:55       ` Alexander Viro
2002-07-24  6:44       ` James H. Cloos Jr.
2002-07-23 12:27     ` Dave Jones
2002-07-23 12:41       ` Marcin Dalecki
2002-07-23 13:05       ` Bartlomiej Zolnierkiewicz
2002-07-24  4:49       ` Rusty Russell
2002-07-24  9:47         ` Dave Jones
2002-07-22 14:08 ` [PATCH] 2.5.27 read_write Marcin Dalecki
2002-07-22 16:55   ` Alan Cox
2002-07-22 16:15     ` [PATCH] 2.5.27 read_write - take 2 Marcin Dalecki
2002-07-22 17:04   ` [PATCH] 2.5.27 read_write Alan Cox

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=3D3BE36E.3090001@evision.ag \
    --to=dalecki@evision.ag \
    --cc=linux-kernel@vger.kernel.org \
    --cc=martin@dalecki.de \
    --cc=torvalds@transmeta.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.