瀏覽代碼

x86: fix new find_first_bit()

Some edge problems with the original C rewrite.

Thanks go to Cal Peake, who pinpointed the breakage to the rewrite, and
tested this fixed version.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Linus Torvalds 20 年之前
父節點
當前提交
d6d2a2ab05
共有 1 個文件被更改,包括 6 次插入7 次删除
  1. 6 7
      include/asm-i386/bitops.h

+ 6 - 7
include/asm-i386/bitops.h

@@ -335,14 +335,13 @@ static inline unsigned long __ffs(unsigned long word)
 static inline int find_first_bit(const unsigned long *addr, unsigned size)
 {
 	int x = 0;
-	do {
-		if (*addr)
-			return __ffs(*addr) + x;
-		addr++;
-		if (x >= size)
-			break;
+
+	while (x < size) {
+		unsigned long val = *addr++;
+		if (val)
+			return __ffs(val) + x;
 		x += (sizeof(*addr)<<3);
-	} while (1);
+	}
 	return x;
 }