From: Brian Norris Date: Wed, 6 Jan 2016 00:04:40 +0000 (-0800) Subject: mtd: merge MTD development from v4.4 into for-v4.5 development X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=e576330033936d94a00068760a5744e27ce51a32;p=linux.git mtd: merge MTD development from v4.4 into for-v4.5 development Small conflict between some bugfixes for 4.4 and some refactoring for 4.5. Signed-off-by: Brian Norris --- e576330033936d94a00068760a5744e27ce51a32 diff --cc drivers/mtd/mtdcore.c index 89d811e7b04ab,ffa2884748205..309625130b21b --- a/drivers/mtd/mtdcore.c +++ b/drivers/mtd/mtdcore.c @@@ -589,20 -590,22 +595,22 @@@ int mtd_device_parse_register(struct mt const struct mtd_partition *parts, int nr_parts) { + struct mtd_partitions parsed; int ret; - struct mtd_partition *real_parts = NULL; + mtd_set_dev_defaults(mtd); + - ret = parse_mtd_partitions(mtd, types, &real_parts, parser_data); - if (ret <= 0 && nr_parts && parts) { - real_parts = kmemdup(parts, sizeof(*parts) * nr_parts, - GFP_KERNEL); - if (!real_parts) - ret = -ENOMEM; - else - ret = nr_parts; - } - /* Didn't come up with either parsed OR fallback partitions */ - if (ret < 0) { + memset(&parsed, 0, sizeof(parsed)); + + ret = parse_mtd_partitions(mtd, types, &parsed, parser_data); + if ((ret < 0 || parsed.nr_parts == 0) && parts && nr_parts) { + /* Fall back to driver-provided partitions */ + parsed = (struct mtd_partitions){ + .parts = parts, + .nr_parts = nr_parts, + }; + } else if (ret < 0) { + /* Didn't come up with parsed OR fallback partitions */ pr_info("mtd: failed to find partitions; one or more parsers reports errors (%d)\n", ret); /* Don't abort on errors; we can still use unpartitioned MTD */ diff --cc drivers/mtd/spi-nor/spi-nor.c index 7e5051e604b02,32477c4eb4213..f8f36d47575f1 --- a/drivers/mtd/spi-nor/spi-nor.c +++ b/drivers/mtd/spi-nor/spi-nor.c @@@ -535,12 -514,10 +535,12 @@@ static int stm_unlock(struct spi_nor *n u8 shift = ffs(mask) - 1, pow, val; status_old = read_sr(nor); + if (status_old < 0) + return status_old; /* Cannot unlock; would unlock larger region than requested */ - if (stm_is_locked_sr(nor, status_old, ofs - mtd->erasesize, - mtd->erasesize)) + if (stm_is_locked_sr(nor, ofs - mtd->erasesize, mtd->erasesize, + status_old)) return -EINVAL; /*