Sophie

Sophie

distrib > Mandriva > 8.2 > i586 > media > main-src > by-pkgid > 276c4c69ed5efcebe43ee6121194cf59 > files > 55

kernel22-2.2.20-9mdk.src.rpm

--- 2.2.18pre14aa1/include/asm-alpha/bitops.h.~1~	Tue Sep  5 02:28:49 2000
+++ 2.2.18pre14aa1/include/asm-alpha/bitops.h	Tue Oct  3 03:08:08 2000
@@ -38,6 +38,30 @@
 	:"Ir" (1UL << (nr & 31)), "m" (*m));
 }
 
+/*
+ * WARNING: non atomic version.
+ */
+extern __inline__ void __set_bit(unsigned long nr, volatile void * addr)
+{
+	unsigned int * m = ((unsigned int *) addr) + (nr >> 5);
+	/*
+	 * Asm and C produces the same thing so let
+	 * the compiler to do its good work.
+	 */
+#if 0
+	int tmp;
+
+	__asm__ __volatile__(
+	"ldl %0,%3\n\t"
+	"bis %0,%2,%0\n\t"
+	"stl %0,%1"
+	: "=&r" (tmp), "=m" (*m)
+	: "Ir" (1UL << (nr & 31)), "m" (*m));
+#else
+	*m |= 1UL << (nr & 31);
+#endif
+}
+
 extern __inline__ void clear_bit(unsigned long nr, volatile void * addr)
 {
 	unsigned long oldbit;
@@ -96,6 +120,29 @@
 	"3:	br 1b\n"
 	".previous"
 	:"=&r" (temp), "=m" (*m), "=&r" (oldbit)
+	:"Ir" (1UL << (nr & 31)), "m" (*m) : "memory");
+
+	return oldbit != 0;
+}
+
+/*
+ * WARNING: non atomic version.
+ */
+extern __inline__ unsigned long __test_and_set_bit(unsigned long nr,
+						   volatile void * addr)
+{
+	unsigned long oldbit;
+	unsigned long temp;
+	unsigned int * m = ((unsigned int *) addr) + (nr >> 5);
+
+	__asm__ __volatile__(
+	"	ldl %0,%4\n"
+	"	and %0,%3,%2\n"
+	"	bne %2,1f\n"
+	"	xor %0,%3,%0\n"
+	"	stl %0,%1\n"
+	"1:\n"
+	:"=&r" (temp), "=m" (*m), "=&r" (oldbit)
 	:"Ir" (1UL << (nr & 31)), "m" (*m));
 
 	return oldbit != 0;
@@ -121,6 +168,29 @@
 	"3:	br 1b\n"
 	".previous"
 	:"=&r" (temp), "=m" (*m), "=&r" (oldbit)
+	:"Ir" (1UL << (nr & 31)), "m" (*m) : "memory");
+
+	return oldbit != 0;
+}
+
+/*
+ * WARNING: non atomic version.
+ */
+extern __inline__ unsigned long __test_and_clear_bit(unsigned long nr,
+						     volatile void * addr)
+{
+	unsigned long oldbit;
+	unsigned long temp;
+	unsigned int * m = ((unsigned int *) addr) + (nr >> 5);
+
+	__asm__ __volatile__(
+	"	ldl %0,%4\n"
+	"	and %0,%3,%2\n"
+	"	beq %2,1f\n"
+	"	xor %0,%3,%0\n"
+	"	stl %0,%1\n"
+	"1:\n"
+	:"=&r" (temp), "=m" (*m), "=&r" (oldbit)
 	:"Ir" (1UL << (nr & 31)), "m" (*m));
 
 	return oldbit != 0;
@@ -144,7 +214,7 @@
 	"3:	br 1b\n"
 	".previous"
 	:"=&r" (temp), "=m" (*m), "=&r" (oldbit)
-	:"Ir" (1UL << (nr & 31)), "m" (*m));
+	:"Ir" (1UL << (nr & 31)), "m" (*m) : "memory");
 
 	return oldbit != 0;
 }
@@ -285,15 +355,15 @@
 
 #ifdef __KERNEL__
 
-#define ext2_set_bit                 test_and_set_bit
-#define ext2_clear_bit               test_and_clear_bit
+#define ext2_set_bit                 __test_and_set_bit
+#define ext2_clear_bit               __test_and_clear_bit
 #define ext2_test_bit                test_bit
 #define ext2_find_first_zero_bit     find_first_zero_bit
 #define ext2_find_next_zero_bit      find_next_zero_bit
 
 /* Bitmap functions for the minix filesystem.  */
-#define minix_set_bit(nr,addr) test_and_set_bit(nr,addr)
-#define minix_clear_bit(nr,addr) test_and_clear_bit(nr,addr)
+#define minix_set_bit(nr,addr) __test_and_set_bit(nr,addr)
+#define minix_clear_bit(nr,addr) __test_and_clear_bit(nr,addr)
 #define minix_test_bit(nr,addr) test_bit(nr,addr)
 #define minix_find_first_zero_bit(addr,size) find_first_zero_bit(addr,size)
 
--- 2.2.18pre14aa1/include/asm-alpha/spinlock.h.~1~	Tue Oct  3 01:35:31 2000
+++ 2.2.18pre14aa1/include/asm-alpha/spinlock.h	Tue Oct  3 03:03:15 2000
@@ -151,7 +151,7 @@
 	"	br	1b\n"
 	".previous"
 	: "=r" (tmp), "=m" (__dummy_lock(lock))
-	: "m"(__dummy_lock(lock)));
+	: "m"(__dummy_lock(lock)) : "memory");
 }
 
 #define spin_trylock(lock) (!test_and_set_bit(0,(lock)))
@@ -197,7 +197,7 @@
 	".previous"
 	: "=m" (__dummy_lock(lock)), "=&r" (regx)
 	: "0" (__dummy_lock(lock))
-	);
+	: "memory");
 }
 
 static inline void read_lock(rwlock_t * lock)
@@ -218,7 +218,7 @@
 	".previous"
 	: "=m" (__dummy_lock(lock)), "=&r" (regx)
 	: "m" (__dummy_lock(lock))
-	);
+	: "memory");
 }
 #endif /* DEBUG_RWLOCK */
 
--- 2.2.18pre14aa1/include/asm-i386/spinlock.h.~1~	Mon Oct  2 22:28:15 2000
+++ 2.2.18pre14aa1/include/asm-i386/spinlock.h	Tue Oct  3 02:56:35 2000
@@ -159,12 +159,12 @@
 #define spin_lock(lock) \
 __asm__ __volatile__( \
 	spin_lock_string \
-	:"=m" (__dummy_lock(lock)))
+	:"=m" (__dummy_lock(lock)) : : "memory")
 
 #define spin_unlock(lock) \
 __asm__ __volatile__( \
 	spin_unlock_string \
-	:"=m" (__dummy_lock(lock)))
+	:"=m" (__dummy_lock(lock)) : : "memory")
 
 #define spin_trylock(lock) (!test_and_set_bit(0,(lock)))
 
@@ -213,11 +213,11 @@
 		     "js 3b\n\t" \
 		     "jmp 1b\n" \
 		     ".previous" \
-		     :"=m" (__dummy_lock(&(rw)->lock)))
+		     :"=m" (__dummy_lock(&(rw)->lock)) : : "memory")
 
 #define read_unlock(rw) \
 	asm volatile("lock ; decl %0" \
-		:"=m" (__dummy_lock(&(rw)->lock)))
+		:"=m" (__dummy_lock(&(rw)->lock)) : : "memory")
 
 #define write_lock(rw) \
 	asm volatile("\n1:\t" \
@@ -231,10 +231,10 @@
 		     "jne 4b\n\t" \
 		     "jmp 1b\n" \
 		     ".previous" \
-		     :"=m" (__dummy_lock(&(rw)->lock)))
+		     :"=m" (__dummy_lock(&(rw)->lock)) : : "memory")
 
 #define write_unlock(rw) \
-	asm volatile("lock ; btrl $31,%0":"=m" (__dummy_lock(&(rw)->lock)))
+	asm volatile("lock ; btrl $31,%0":"=m" (__dummy_lock(&(rw)->lock)) : : "memory")
 
 #define read_lock_irq(lock)	do { __cli(); read_lock(lock); } while (0)
 #define read_unlock_irq(lock)	do { read_unlock(lock); __sti(); } while (0)
--- 2.2.18pre14aa1/include/asm-i386/bitops.h.~1~	Fri Sep 29 06:00:19 2000
+++ 2.2.18pre14aa1/include/asm-i386/bitops.h	Tue Oct  3 03:01:29 2000
@@ -49,6 +49,15 @@
 		:"Ir" (nr));
 }
 
+/* WARNING: non atomic and it can be reordered! */
+static __inline__ void __set_bit(int nr, volatile void * addr)
+{
+	__asm__(
+		"btsl %1,%0"
+		:"=m" (ADDR)
+		:"Ir" (nr));
+}
+
 extern __inline__ void clear_bit(int nr, volatile void * addr)
 {
 	__asm__ __volatile__( LOCK_PREFIX
@@ -72,6 +81,18 @@
 	__asm__ __volatile__( LOCK_PREFIX
 		"btsl %2,%1\n\tsbbl %0,%0"
 		:"=r" (oldbit),"=m" (ADDR)
+		:"Ir" (nr) : "memory");
+	return oldbit;
+}
+
+/* WARNING: non atomic and it can be reordered! */
+static __inline__ int __test_and_set_bit(int nr, volatile void * addr)
+{
+	int oldbit;
+
+	__asm__(
+		"btsl %2,%1\n\tsbbl %0,%0"
+		:"=r" (oldbit),"=m" (ADDR)
 		:"Ir" (nr));
 	return oldbit;
 }
@@ -83,6 +104,18 @@
 	__asm__ __volatile__( LOCK_PREFIX
 		"btrl %2,%1\n\tsbbl %0,%0"
 		:"=r" (oldbit),"=m" (ADDR)
+		:"Ir" (nr) : "memory");
+	return oldbit;
+}
+
+/* WARNING: non atomic and it can be reordered! */
+static __inline__ int __test_and_clear_bit(int nr, volatile void * addr)
+{
+	int oldbit;
+
+	__asm__(
+		"btrl %2,%1\n\tsbbl %0,%0"
+		:"=r" (oldbit),"=m" (ADDR)
 		:"Ir" (nr));
 	return oldbit;
 }
@@ -94,7 +127,7 @@
 	__asm__ __volatile__( LOCK_PREFIX
 		"btcl %2,%1\n\tsbbl %0,%0"
 		:"=r" (oldbit),"=m" (ADDR)
-		:"Ir" (nr));
+		:"Ir" (nr) : "memory");
 	return oldbit;
 }
 
@@ -219,15 +252,15 @@
 
 #ifdef __KERNEL__
 
-#define ext2_set_bit                 test_and_set_bit
-#define ext2_clear_bit               test_and_clear_bit
+#define ext2_set_bit                 __test_and_set_bit
+#define ext2_clear_bit               __test_and_clear_bit
 #define ext2_test_bit                test_bit
 #define ext2_find_first_zero_bit     find_first_zero_bit
 #define ext2_find_next_zero_bit      find_next_zero_bit
 
 /* Bitmap functions for the minix filesystem.  */
-#define minix_set_bit(nr,addr) test_and_set_bit(nr,addr)
-#define minix_clear_bit(nr,addr) test_and_clear_bit(nr,addr)
+#define minix_set_bit(nr,addr) __test_and_set_bit(nr,addr)
+#define minix_clear_bit(nr,addr) __test_and_clear_bit(nr,addr)
 #define minix_test_bit(nr,addr) test_bit(nr,addr)
 #define minix_find_first_zero_bit(addr,size) find_first_zero_bit(addr,size)