ARM: 6482/2: Fix find_next_zero_bit and related assembly

The find_next_bit, find_first_bit, find_next_zero_bit
and find_first_zero_bit functions were not properly
clamping to the maxbit argument at the bit level. They
were instead only checking maxbit at the byte level.
To fix this, add a compare and a conditional move
instruction to the end of the common bit-within-the-
byte code used by all the functions and be sure not to
clobber the maxbit argument before it is used.

Cc: <stable@kernel.org>
Reviewed-by: Nicolas Pitre <nicolas.pitre@linaro.org>
Tested-by: Stephen Warren <swarren@nvidia.com>
Signed-off-by: James Jones <jajones@nvidia.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>

authored by James Jones and committed by Russell King 0e91ec0c 28c22d7d

+4 -2
+4 -2
arch/arm/lib/findbit.S
··· 174 174 */ 175 175 .L_found: 176 176 #if __LINUX_ARM_ARCH__ >= 5 177 - rsb r1, r3, #0 178 - and r3, r3, r1 177 + rsb r0, r3, #0 178 + and r3, r3, r0 179 179 clz r3, r3 180 180 rsb r3, r3, #31 181 181 add r0, r2, r3 ··· 190 190 addeq r2, r2, #1 191 191 mov r0, r2 192 192 #endif 193 + cmp r1, r0 @ Clamp to maxbit 194 + movlo r0, r1 193 195 mov pc, lr 194 196