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

Commit 491ed06f authored by Brian Norris's avatar Brian Norris Committed by David Woodhouse
Browse files

mtd: nand_bbt: use string library



Some nand_bbt code can be shortened by using memcmp() and memchr_inv().
As an added bonus, there is a possible performance benefit.

Borrowed some code from Akinobu Mita.

Signed-off-by: default avatarBrian Norris <computersforpeace@gmail.com>
Signed-off-by: default avatarArtem Bityutskiy <artem.bityutskiy@linux.intel.com>
Signed-off-by: default avatarDavid Woodhouse <David.Woodhouse@intel.com>
parent 7b5a2d40
Loading
Loading
Loading
Loading
+9 −18
Original line number Diff line number Diff line
@@ -68,6 +68,7 @@
#include <linux/delay.h>
#include <linux/vmalloc.h>
#include <linux/export.h>
#include <linux/string.h>

static int check_pattern_no_oob(uint8_t *buf, struct nand_bbt_descr *td)
{
@@ -89,19 +90,16 @@ static int check_pattern_no_oob(uint8_t *buf, struct nand_bbt_descr *td)
 */
static int check_pattern(uint8_t *buf, int len, int paglen, struct nand_bbt_descr *td)
{
	int i, end = 0;
	int end = 0;
	uint8_t *p = buf;

	if (td->options & NAND_BBT_NO_OOB)
		return check_pattern_no_oob(buf, td);

	end = paglen + td->offs;
	if (td->options & NAND_BBT_SCANEMPTY) {
		for (i = 0; i < end; i++) {
			if (p[i] != 0xff)
	if (td->options & NAND_BBT_SCANEMPTY)
		if (memchr_inv(p, 0xff, end))
			return -1;
		}
	}
	p += end;

	/* Compare the pattern */
@@ -111,11 +109,9 @@ static int check_pattern(uint8_t *buf, int len, int paglen, struct nand_bbt_desc
	if (td->options & NAND_BBT_SCANEMPTY) {
		p += td->len;
		end += td->len;
		for (i = end; i < len; i++) {
			if (*p++ != 0xff)
		if (memchr_inv(p, 0xff, len - end))
			return -1;
	}
	}
	return 0;
}

@@ -130,14 +126,9 @@ static int check_pattern(uint8_t *buf, int len, int paglen, struct nand_bbt_desc
 */
static int check_short_pattern(uint8_t *buf, struct nand_bbt_descr *td)
{
	int i;
	uint8_t *p = buf;

	/* Compare the pattern */
	for (i = 0; i < td->len; i++) {
		if (p[td->offs + i] != td->pattern[i])
	if (memcmp(buf + td->offs, td->pattern, td->len))
		return -1;
	}
	return 0;
}