From: Brian Norris <computersforpeace@gmail.com>
To: Fabio Estevam <fabio.estevam@freescale.com>
Cc: linux-mtd@lists.infradead.org
Subject: Re: [PATCH] mtd: spi-nor: Check the return value from read_sr()
Date: Thu, 19 Nov 2015 13:54:43 -0800 [thread overview]
Message-ID: <20151119215443.GK64635@google.com> (raw)
In-Reply-To: <1447771824-9147-1-git-send-email-fabio.estevam@freescale.com>
On Tue, Nov 17, 2015 at 12:50:24PM -0200, Fabio Estevam wrote:
> We should better check the return value from read_sr() and
> propagate it in the case of error.
>
> Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
> ---
> drivers/mtd/spi-nor/spi-nor.c | 12 ++++++++++--
> 1 file changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c
> index 12041e1..4d858f7 100644
> --- a/drivers/mtd/spi-nor/spi-nor.c
> +++ b/drivers/mtd/spi-nor/spi-nor.c
> @@ -459,11 +459,14 @@ static int stm_is_locked_sr(struct spi_nor *nor, loff_t ofs, uint64_t len,
> static int stm_lock(struct spi_nor *nor, loff_t ofs, uint64_t len)
> {
> struct mtd_info *mtd = &nor->mtd;
> - u8 status_old, status_new;
> + u8 status_new;
> u8 mask = SR_BP2 | SR_BP1 | SR_BP0;
> u8 shift = ffs(mask) - 1, pow, val;
> + int status_old;
Hmm, by changing status_old from u8 to int, do we propagate any
sign-extension issues in this function? What if BIT(7) is set? If I
recall my C promotion/extension rules correctly, then I guess it's safe
(we get zero-extension, not sign-extension), but I wouldn't always put
my faith in my memory...
>
> status_old = read_sr(nor);
> + if (status_old < 0)
> + return status_old;
>
> /* SPI NOR always locks to the end */
> if (ofs + len != mtd->size) {
> @@ -509,11 +512,14 @@ static int stm_lock(struct spi_nor *nor, loff_t ofs, uint64_t len)
> static int stm_unlock(struct spi_nor *nor, loff_t ofs, uint64_t len)
> {
> struct mtd_info *mtd = &nor->mtd;
> - uint8_t status_old, status_new;
> + uint8_t status_new;
> + int status_old;
Same here.
> u8 mask = SR_BP2 | SR_BP1 | SR_BP0;
> 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,
> @@ -1013,6 +1019,8 @@ static int macronix_quad_enable(struct spi_nor *nor)
> int ret, val;
>
> val = read_sr(nor);
> + if (val < 0)
> + return val;
> write_enable(nor);
>
> write_sr(nor, val | SR_QUAD_EN_MX);
If we wanted to sidestep the issue, we could still keep status_old as
u8, but just use an 'int ret' as an intermediate place-holder, so we can
do signed error checking.
Brian
next prev parent reply other threads:[~2015-11-19 21:55 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-17 14:50 [PATCH] mtd: spi-nor: Check the return value from read_sr() Fabio Estevam
2015-11-19 21:54 ` Brian Norris [this message]
2015-11-19 22:48 ` Fabio Estevam
2015-11-19 22:58 ` Brian Norris
2015-11-20 18:25 ` Fabio Estevam
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20151119215443.GK64635@google.com \
--to=computersforpeace@gmail.com \
--cc=fabio.estevam@freescale.com \
--cc=linux-mtd@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.