patch-2.4.5 linux/include/asm-i386/bitops.h
Next file: linux/include/asm-i386/mtrr.h
Previous file: linux/include/asm-cris/unistd.h
Back to the patch index
Back to the overall index
- Lines: 43
- Date:
Fri May 25 18:01:26 2001
- Orig file:
v2.4.4/linux/include/asm-i386/bitops.h
- Orig date:
Fri Apr 27 15:48:19 2001
diff -u --recursive --new-file v2.4.4/linux/include/asm-i386/bitops.h linux/include/asm-i386/bitops.h
@@ -79,6 +79,23 @@
#define smp_mb__after_clear_bit() barrier()
/**
+ * __change_bit - Toggle a bit in memory
+ * @nr: the bit to set
+ * @addr: the address to start counting from
+ *
+ * Unlike change_bit(), this function is non-atomic and may be reordered.
+ * If it's called on the same region of memory simultaneously, the effect
+ * may be that only one operation succeeds.
+ */
+static __inline__ void __change_bit(int nr, volatile void * addr)
+{
+ __asm__ __volatile__(
+ "btcl %1,%0"
+ :"=m" (ADDR)
+ :"Ir" (nr));
+}
+
+/**
* change_bit - Toggle a bit in memory
* @nr: Bit to clear
* @addr: Address to start counting from
@@ -170,6 +187,18 @@
"btrl %2,%1\n\tsbbl %0,%0"
:"=r" (oldbit),"=m" (ADDR)
:"Ir" (nr));
+ return oldbit;
+}
+
+/* WARNING: non atomic and it can be reordered! */
+static __inline__ int __test_and_change_bit(int nr, volatile void * addr)
+{
+ int oldbit;
+
+ __asm__ __volatile__(
+ "btcl %2,%1\n\tsbbl %0,%0"
+ :"=r" (oldbit),"=m" (ADDR)
+ :"Ir" (nr) : "memory");
return oldbit;
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)