linux-mtd.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: Boris Brezillon <boris.brezillon@free-electrons.com>
To: Marc Gonzalez <marc_gonzalez@sigmadesigns.com>
Cc: Pavel Machek <pavel@ucw.cz>,
	linux-mtd <linux-mtd@lists.infradead.org>,
	Thibaud Cornic <thibaud_cornic@sigmadesigns.com>,
	Mason <slash.tmp@free.fr>
Subject: Re: [PATCH] tango_nand.c: fix ecc.stats_corrected in empty flash case
Date: Tue, 2 May 2017 11:42:28 +0200	[thread overview]
Message-ID: <20170502114228.299fc862@bbrezillon> (raw)
In-Reply-To: <53204f36-9662-e8a0-c431-09fb68276ab6@sigmadesigns.com>

Hi Marc,

On Mon, 24 Apr 2017 10:58:47 +0200
Marc Gonzalez <marc_gonzalez@sigmadesigns.com> wrote:

> [ Trimming CC list ]
> 
> On 22/04/2017 12:40, Pavel Machek wrote:
> 
> > Fix ecc.stats_corrected in empty flash case.
> > 
> > Signed-off-by: Pavel Machek <pavel@denx.de>
> > 
> > ---
> > 
> > This was suggested by Boris Brezillon in another context. Not tested;
> > I don't have the hardware.
> > 
> > diff --git a/drivers/mtd/nand/tango_nand.c b/drivers/mtd/nand/tango_nand.c
> > index 4a5e948..db4bff4 100644
> > --- a/drivers/mtd/nand/tango_nand.c
> > +++ b/drivers/mtd/nand/tango_nand.c
> > @@ -193,6 +193,8 @@ static int check_erased_page(struct nand_chip *chip, u8 *buf)
> >  						  chip->ecc.strength);
> >  		if (res < 0)
> >  			mtd->ecc_stats.failed++;
> > +		else
> > +			mtd->ecc_stats.corrected += res;
> >  
> >  		bitflips = max(res, bitflips);
> >  		buf += pkt_size;
> >   
> 
> Hello Pavel,
> 
> You may have noticed that ecc_stats.corrected is not updated in
> decode_error_report() which is the main code path, i.e. the path
> that will succeed 99.99% of the time (HW read).
> 
> It turns out that the HW does not report the number of errors
> corrected in a page... Instead it reports two values:
> 1) U = number of errors corrected in the first packet/step
> 2) V = max number of errors corrected in other packets/steps
> 
> Thus, it is not possible to determine the actual number of errors
> corrected in a page (unless V is 0). Otherwise, we just have an
> interval; let n be the number of packets/steps:
> 
> U + V <= corrected errors count <= U + (n-1)*V
> 
> In my opinion, it is better to provide no information than to
> provide incorrect information. Therefore, I did not update
> ecc_stats.corrected in decode_error_report().

Hm, not sure I agree with that. The situation is far from ideal, but
some userspace tools query the number of corrected bits before and
after doing a read operation to report the number of bitflips that
have been correcte. Letting users think there were no bitflips at all is
not a good thing IMO.

> 
> One could argue that updating ecc_stats.corrected in
> check_erased_page() sets the correct value, since the error
> counts are computed in software for each step. But updating
> the value here is IMO pointless if we can't do it in the main
> code path.

Well, it's not pointless if you want to inform the user that some
bitflips were present on the NAND. Yes, the numbers you report
won't be accurate in your case, but at least the user can tell when
bitflips were discovered.

Note that ideally, we should have per-page (or per-block) max-bitflips
information (where max-bitflips is the number returned by
ecc->read_page()), because counting the total number of corrected bits
is certainly not helping when it comes to checking how reliable a NAND
page/eraseblock is.

Regards,

Boris

  parent reply	other threads:[~2017-05-02  9:42 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-19 12:13 fsl_ifc_nand: are blank pages protected by ECC? Pavel Machek
2017-04-19 21:18 ` Boris Brezillon
2017-04-19 22:15   ` Pavel Machek
2017-04-19 22:27     ` Boris Brezillon
2017-04-20 11:40       ` Pavel Machek
2017-04-20 12:15         ` Boris Brezillon
2017-04-21 10:51         ` [PATCH] nand_base: optimize checking of erased buffers Pavel Machek
2017-05-17 11:27           ` Mason
2017-05-17 11:39             ` Mason
2017-05-17 11:52             ` Pavel Machek
2017-05-17 12:22           ` [PATCH] fsl_ifc_nand: fix handing of bit flips in erased nand Pavel Machek
2017-05-17 12:32             ` Boris Brezillon
2017-05-17 13:00               ` Pavel Machek
2017-05-17 13:25                 ` Boris Brezillon
2017-05-17 20:03                   ` [PATCH] mtd: nand: fsl_ifc: fix handing of bit flips in erased pages Pavel Machek
2017-05-31 20:59                     ` [PATCHv2] " Pavel Machek
2017-05-31 22:59                       ` Darwin Dingel
2017-06-01  1:09                       ` Darwin Dingel
2017-06-01 13:12                         ` Pavel Machek
2017-06-01 13:21                           ` Boris Brezillon
2017-06-07  7:31                             ` Boris Brezillon
2017-04-21 10:08   ` fsl_ifc_nand: are blank pages protected by ECC? Pavel Machek
2017-04-21 10:12     ` Richard Weinberger
2017-04-21 12:04     ` Boris Brezillon
2017-04-21 13:37     ` Pavel Machek
2017-04-21 13:49       ` Boris Brezillon
2017-04-22  7:01         ` Pavel Machek
2017-04-22 10:40         ` [PATCH] tango_nand.c: fix ecc.stats_corrected in empty flash case Pavel Machek
2017-04-24  8:58           ` Marc Gonzalez
2017-04-24  9:03             ` Pavel Machek
2017-05-02  9:42             ` Boris Brezillon [this message]
2017-05-02 11:52               ` Marc Gonzalez
2017-05-02 12:20                 ` Boris Brezillon
2017-05-03 20:02                   ` Pavel Machek
2017-05-03 20:04             ` Pavel Machek
2017-05-04  8:42               ` Boris Brezillon
2017-05-12 15:34                 ` [PATCH] mtd: nand: tango: Update ecc_stats.corrected Marc Gonzalez
2017-05-15  8:56                   ` Boris Brezillon
2017-05-15 20:47                   ` Boris Brezillon
2017-05-17 12:04                 ` [PATCH] tango_nand.c: fix ecc.stats_corrected in empty flash case Pavel Machek
2017-04-23  9:58         ` tango_nand: is logic right in error cases? (was Re: fsl_ifc_nand: are blank pages protected by ECC?) Pavel Machek
2017-04-24  7:12           ` Boris Brezillon

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=20170502114228.299fc862@bbrezillon \
    --to=boris.brezillon@free-electrons.com \
    --cc=linux-mtd@lists.infradead.org \
    --cc=marc_gonzalez@sigmadesigns.com \
    --cc=pavel@ucw.cz \
    --cc=slash.tmp@free.fr \
    --cc=thibaud_cornic@sigmadesigns.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).