Message ID | 20210604100252.9975-5-michael@walle.cc |
---|---|
State | Superseded |
Delegated to: | Vignesh R |
Headers | show |
Series | mtd: spi-nor: otp: 4 byte mode fix and erase support | expand |
On 6/4/21 1:02 PM, Michael Walle wrote: > EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe > > By moving the code around a bit, we can just check the length before > calling spi_nor_mtd_otp_range_is_locked() and drop the length check > there. This way we don't need to take the lock. This will also skip the > "*retlen = 0" assignment if the length is zero. But mtdcore already does > that for us. Thus we can drop that, too. > > Signed-off-by: Michael Walle <michael@walle.cc> > --- > drivers/mtd/spi-nor/otp.c | 13 ++++++------- > 1 file changed, 6 insertions(+), 7 deletions(-) > > diff --git a/drivers/mtd/spi-nor/otp.c b/drivers/mtd/spi-nor/otp.c > index 063f8fb68649..89fe52e3851a 100644 > --- a/drivers/mtd/spi-nor/otp.c > +++ b/drivers/mtd/spi-nor/otp.c > @@ -256,9 +256,6 @@ static int spi_nor_mtd_otp_range_is_locked(struct spi_nor *nor, loff_t ofs, > unsigned int region; > int locked; > > - if (!len) > - return 0; these lines were just introduced in the previous patch. Can you please reorder 4 with 3, so that we don't touch this twice? With that: Reviewed-by: Tudor Ambarus <tudor.ambarus@microchip.com> > - > /* > * If any of the affected OTP regions are locked the entire range is > * considered locked. > @@ -290,13 +287,16 @@ static int spi_nor_mtd_otp_read_write(struct mtd_info *mtd, loff_t ofs, > if (ofs < 0 || ofs >= spi_nor_otp_size(nor)) > return 0; > > + /* don't access beyond the end */ > + total_len = min_t(size_t, total_len, spi_nor_otp_size(nor) - ofs); > + > + if (!total_len) > + return 0; > + > ret = spi_nor_lock_and_prep(nor); > if (ret) > return ret; > > - /* don't access beyond the end */ > - total_len = min_t(size_t, total_len, spi_nor_otp_size(nor) - ofs); > - > if (is_write) { > ret = spi_nor_mtd_otp_range_is_locked(nor, ofs, total_len); > if (ret < 0) { > @@ -307,7 +307,6 @@ static int spi_nor_mtd_otp_read_write(struct mtd_info *mtd, loff_t ofs, > } > } > > - *retlen = 0; > while (total_len) { > /* > * The OTP regions are mapped into a contiguous area starting > -- > 2.20.1 >
diff --git a/drivers/mtd/spi-nor/otp.c b/drivers/mtd/spi-nor/otp.c index 063f8fb68649..89fe52e3851a 100644 --- a/drivers/mtd/spi-nor/otp.c +++ b/drivers/mtd/spi-nor/otp.c @@ -256,9 +256,6 @@ static int spi_nor_mtd_otp_range_is_locked(struct spi_nor *nor, loff_t ofs, unsigned int region; int locked; - if (!len) - return 0; - /* * If any of the affected OTP regions are locked the entire range is * considered locked. @@ -290,13 +287,16 @@ static int spi_nor_mtd_otp_read_write(struct mtd_info *mtd, loff_t ofs, if (ofs < 0 || ofs >= spi_nor_otp_size(nor)) return 0; + /* don't access beyond the end */ + total_len = min_t(size_t, total_len, spi_nor_otp_size(nor) - ofs); + + if (!total_len) + return 0; + ret = spi_nor_lock_and_prep(nor); if (ret) return ret; - /* don't access beyond the end */ - total_len = min_t(size_t, total_len, spi_nor_otp_size(nor) - ofs); - if (is_write) { ret = spi_nor_mtd_otp_range_is_locked(nor, ofs, total_len); if (ret < 0) { @@ -307,7 +307,6 @@ static int spi_nor_mtd_otp_read_write(struct mtd_info *mtd, loff_t ofs, } } - *retlen = 0; while (total_len) { /* * The OTP regions are mapped into a contiguous area starting
By moving the code around a bit, we can just check the length before calling spi_nor_mtd_otp_range_is_locked() and drop the length check there. This way we don't need to take the lock. This will also skip the "*retlen = 0" assignment if the length is zero. But mtdcore already does that for us. Thus we can drop that, too. Signed-off-by: Michael Walle <michael@walle.cc> --- drivers/mtd/spi-nor/otp.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-)