Hi! > [ 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 > > > > --- > > > > 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(). > > 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. Aha, thanks for explanation... perhaps comment is worth adding? This is certainly "interesting" property (people would conclude that check_erased_page is buggy -- and it is buggy -- but it matches behaviour of rest of the driver). Also... people do copy&paste in kernel (I did :-) ) and this is quite a trap for them. Thanks, Pavel -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html