Re: PATCH: Improvements in shrink_mmap and kswapd
From: Roger Larsson <hidden>
Date: 2000-06-18 00:00:21
Philipp Rumpf wrote:
On Sun, Jun 18, 2000 at 01:30:17AM +0200, Roger Larsson wrote:quoted
quoted
diff -urN --exclude-from=/home/lfcia/quintela/work/kernel/exclude base/include/asm-i386/bitops.h working/include/asm-i386/bitops.h--- base/include/asm-i386/bitops.h Sat Jun 17 23:37:03 2000 +++ working/include/asm-i386/bitops.h Sat Jun 17 23:52:49 2000@@ -29,6 +29,7 @@ extern void change_bit(int nr, volatile void * addr); extern int test_and_set_bit(int nr, volatile void * addr); extern int test_and_clear_bit(int nr, volatile void * addr); +extern int test_and_test_and_clear_bit(int nr, volatile void * addr); extern int test_and_change_bit(int nr, volatile void * addr); extern int __constant_test_bit(int nr, const volatile void * addr); extern int __test_bit(int nr, volatile void * addr);@@ -87,6 +88,13 @@ :"=r" (oldbit),"=m" (ADDR) :"Ir" (nr)); return oldbit; +} + +extern __inline__ int test_and_test_and_clear_bit(int nr, volatile void *addr) +{ + if(!(((unsigned long)addr) & (1<<nr))) + return 0; + return test_and_clear_bit(nr,addr); }This does not look correct. It basically tests if the ADDRESS has bit #nr set... Shouldn't it be + if(!(((unsigned long)*addr) & (1<<nr)))if(!((*(unsigned long *)addr) & (1<<nr)) is closer to what you want. it still breaks for nr > BITS_PER_LONG.
Final attempt: return test_bit(nr,addr) && test_and_clear_bit(nr,addr); It even matches the name :-) But it have to be moved some lines down. (Exercise for the reader) /RogerL -- Home page: http://www.norran.net/nra02596/ -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux.eu.org/Linux-MM/