--- ./linux/include/asm-parisc/bitops.h.orig Mon Sep 24 01:27:31 2001 +++ ./linux/include/asm-parisc/bitops.h.mod Mon Sep 24 01:41:38 2001 @@ -50,6 +50,26 @@ SPIN_UNLOCK_IRQRESTORE(ATOMIC_HASH(addr), flags); } +/* + * Non-Atomic __set_bit + * + * If called by multiple processes, only one will succeed. + * The others would have been reordered before the succeeding + * call. + * + */ + +static __inline__ void __set_bit(int nr, void * address) +{ + unsigned long mask; + unsigned long *addr = (unsigned long *) address; + + addr += (nr >> SHIFT_PER_LONG); + mask = 1L << CHOP_SHIFTCOUNT(nr); + *addr |= mask; +} + + static __inline__ int test_and_clear_bit(int nr, void * address) { unsigned long mask; @@ -66,6 +86,25 @@ return oldbit; } + +/* + * Non-Atomic __test_and_clear_bit + * + */ + +static __inline__ int __test_and_clear_bit(int nr, void * address) +{ + unsigned long mask; + unsigned long *addr = (unsigned long *) address; + int oldbit; + addr += (nr >> SHIFT_PER_LONG); + mask = 1L << CHOP_SHIFTCOUNT(nr); + oldbit = (*addr & mask) ? 1 : 0; + *addr &= ~mask; + return oldbit; +} + + static __inline__ void clear_bit(int nr, void * address) {