Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 03a97550 authored by Zhaoxiu Zeng's avatar Zhaoxiu Zeng Committed by Boris Brezillon
Browse files

mtd: nand: s3c2410: fix bug in s3c2410_nand_correct_data()



If there is only one bit difference in the ECC, the function should
return 1.
The result of "diff0 & ~(1<<fls(diff0))" is equal to diff0, so the
function actually returns -1.

Signed-off-by: default avatarZhaoxiu Zeng <zhaoxiu.zeng@gmail.com>
Signed-off-by: default avatarBoris Brezillon <boris.brezillon@free-electrons.com>
parent 7a654172
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -542,7 +542,8 @@ static int s3c2410_nand_correct_data(struct mtd_info *mtd, u_char *dat,
	diff0 |= (diff1 << 8);
	diff0 |= (diff2 << 16);

	if ((diff0 & ~(1<<fls(diff0))) == 0)
	/* equal to "(diff0 & ~(1 << __ffs(diff0)))" */
	if ((diff0 & (diff0 - 1)) == 0)
		return 1;

	return -1;