Hi Philippe, I never tested my type-based spinlocks in !CONFIG_IPIPE scenarios. Now I did, and here comes the patch for 2.6.19-1.6-02 that is required - of course.
Jan
---
include/linux/spinlock.h | 36 ++++++++++++++++++------------------
include/linux/spinlock_types.h | 10 ++++++----
2 files changed, 24 insertions(+), 22 deletions(-)
Index: linux-2.6.19/include/linux/spinlock_types.h
===================================================================
--- linux-2.6.19.orig/include/linux/spinlock_types.h
+++ linux-2.6.19/include/linux/spinlock_types.h
@@ -33,7 +33,7 @@ typedef struct {
typedef struct {
raw_spinlock_t __raw_lock;
-} ipipe_spinlock_t;
+} __ipipe_spinlock_t;
#define SPINLOCK_MAGIC 0xdead4ead
@@ -91,16 +91,18 @@ typedef struct {
#define SPIN_LOCK_UNLOCKED __SPIN_LOCK_UNLOCKED(old_style_spin_init)
#define IPIPE_SPIN_LOCK_UNLOCKED \
- (ipipe_spinlock_t) { .__raw_lock = __RAW_SPIN_LOCK_UNLOCKED }
+ (__ipipe_spinlock_t) { .__raw_lock = __RAW_SPIN_LOCK_UNLOCKED }
#define RW_LOCK_UNLOCKED __RW_LOCK_UNLOCKED(old_style_rw_init)
#define DEFINE_SPINLOCK(x) spinlock_t x = __SPIN_LOCK_UNLOCKED(x)
#define DEFINE_RWLOCK(x) rwlock_t x = __RW_LOCK_UNLOCKED(x)
#ifdef CONFIG_IPIPE
-#define IPIPE_DEFINE_SPINLOCK(x) ipipe_spinlock_t x = IPIPE_SPIN_LOCK_UNLOCKED
+# define ipipe_spinlock_t __ipipe_spinlock_t
+# define IPIPE_DEFINE_SPINLOCK(x) ipipe_spinlock_t x = IPIPE_SPIN_LOCK_UNLOCKED
#else
-#define IPIPE_DEFINE_SPINLOCK(x) DEFINE_SPINLOCK(x)
+# define ipipe_spinlock_t spinlock_t
+# define IPIPE_DEFINE_SPINLOCK(x) DEFINE_SPINLOCK(x)
#endif
#endif /* __LINUX_SPINLOCK_TYPES_H */
Index: linux-2.6.19/include/linux/spinlock.h
===================================================================
--- linux-2.6.19.orig/include/linux/spinlock.h
+++ linux-2.6.19/include/linux/spinlock.h
@@ -177,33 +177,33 @@ do {
\
#define PICK_SPINOP(op, lock) \
do { \
- if (TYPE_EQUAL((lock), ipipe_spinlock_t)) \
- __raw_spin##op(&((ipipe_spinlock_t *)(lock))->__raw_lock); \
+ if (TYPE_EQUAL((lock), __ipipe_spinlock_t)) \
+ __raw_spin##op(&((__ipipe_spinlock_t *)(lock))->__raw_lock); \
else if (TYPE_EQUAL(lock, spinlock_t)) \
_spin##op((spinlock_t *)(lock)); \
} while (0)
#define PICK_SPINOP_RAW(op, lock) \
do { \
- if (TYPE_EQUAL((lock), ipipe_spinlock_t)) \
- __raw_spin##op(&((ipipe_spinlock_t *)(lock))->__raw_lock); \
+ if (TYPE_EQUAL((lock), __ipipe_spinlock_t)) \
+ __raw_spin##op(&((__ipipe_spinlock_t *)(lock))->__raw_lock); \
else if (TYPE_EQUAL(lock, spinlock_t)) \
__raw_spin##op(&((spinlock_t *)(lock))->raw_lock); \
} while (0)
#define PICK_SPINLOCK_IRQ(lock) \
do { \
- if (TYPE_EQUAL((lock), ipipe_spinlock_t)) { \
+ if (TYPE_EQUAL((lock), __ipipe_spinlock_t)) { \
local_irq_disable_hw(); \
- __raw_spin_lock(&((ipipe_spinlock_t *)(lock))->__raw_lock); \
+ __raw_spin_lock(&((__ipipe_spinlock_t *)(lock))->__raw_lock); \
} else if (TYPE_EQUAL(lock, spinlock_t)) \
_spin_lock_irq((spinlock_t *)(lock)); \
} while (0)
#define PICK_SPINUNLOCK_IRQ(lock) \
do { \
- if (TYPE_EQUAL((lock), ipipe_spinlock_t)) { \
- __raw_spin_unlock(&((ipipe_spinlock_t *)(lock))->__raw_lock); \
+ if (TYPE_EQUAL((lock), __ipipe_spinlock_t)) { \
+ __raw_spin_unlock(&((__ipipe_spinlock_t *)(lock))->__raw_lock);
\
local_irq_enable_hw(); \
} else if (TYPE_EQUAL(lock, spinlock_t)) \
_spin_unlock_irq((spinlock_t *)(lock)); \
@@ -211,9 +211,9 @@ do {
\
#define PICK_SPINLOCK_IRQ_RAW(lock) \
do { \
- if (TYPE_EQUAL((lock), ipipe_spinlock_t)) { \
+ if (TYPE_EQUAL((lock), __ipipe_spinlock_t)) { \
local_irq_disable_hw(); \
- __raw_spin_lock(&((ipipe_spinlock_t *)(lock))->__raw_lock); \
+ __raw_spin_lock(&((__ipipe_spinlock_t *)(lock))->__raw_lock); \
} else if (TYPE_EQUAL(lock, spinlock_t)) \
local_irq_disable(); \
__raw_spin_lock(&((spinlock_t *)(lock))->raw_lock); \
@@ -221,8 +221,8 @@ do {
\
#define PICK_SPINUNLOCK_IRQ_RAW(lock) \
do { \
- if (TYPE_EQUAL((lock), ipipe_spinlock_t)) { \
- __raw_spin_unlock(&((ipipe_spinlock_t *)(lock))->__raw_lock); \
+ if (TYPE_EQUAL((lock), __ipipe_spinlock_t)) { \
+ __raw_spin_unlock(&((__ipipe_spinlock_t *)(lock))->__raw_lock);
\
local_irq_enable_hw(); \
} else if (TYPE_EQUAL(lock, spinlock_t)) \
__raw_spin_unlock(&((spinlock_t *)(lock))->raw_lock); \
@@ -234,9 +234,9 @@ extern int __bad_spinlock_type(void);
#define PICK_SPINLOCK_IRQSAVE(lock, flags) \
do { \
- if (TYPE_EQUAL((lock), ipipe_spinlock_t)) { \
+ if (TYPE_EQUAL((lock), __ipipe_spinlock_t)) { \
local_irq_save_hw(flags); \
- __raw_spin_lock(&((ipipe_spinlock_t *)(lock))->__raw_lock); \
+ __raw_spin_lock(&((__ipipe_spinlock_t *)(lock))->__raw_lock); \
} else if (TYPE_EQUAL(lock, spinlock_t)) \
flags = _spin_lock_irqsave((spinlock_t *)(lock)); \
else __bad_spinlock_type(); \
@@ -244,9 +244,9 @@ do {
\
#else
#define PICK_SPINLOCK_IRQSAVE(lock, flags) \
do { \
- if (TYPE_EQUAL((lock), ipipe_spinlock_t)) { \
+ if (TYPE_EQUAL((lock), __ipipe_spinlock_t)) { \
local_irq_save_hw(flags); \
- __raw_spin_lock(&((ipipe_spinlock_t *)(lock))->__raw_lock); \
+ __raw_spin_lock(&((__ipipe_spinlock_t *)(lock))->__raw_lock); \
} else if (TYPE_EQUAL(lock, spinlock_t)) \
_spin_lock_irqsave((spinlock_t *)(lock), flags); \
} while (0)
@@ -254,8 +254,8 @@ do {
\
#define PICK_SPINUNLOCK_IRQRESTORE(lock, flags) \
do { \
- if (TYPE_EQUAL((lock), ipipe_spinlock_t)) { \
- __raw_spin_unlock(&((ipipe_spinlock_t *)(lock))->__raw_lock); \
+ if (TYPE_EQUAL((lock), __ipipe_spinlock_t)) { \
+ __raw_spin_unlock(&((__ipipe_spinlock_t *)(lock))->__raw_lock);
\
local_irq_restore_hw(flags); \
} else if (TYPE_EQUAL(lock, spinlock_t)) \
_spin_unlock_irqrestore((spinlock_t *)(lock), flags); \
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Adeos-main mailing list [email protected] https://mail.gna.org/listinfo/adeos-main
