Received: by 10.192.165.156 with SMTP id m28csp63132imm; Tue, 10 Apr 2018 16:27:41 -0700 (PDT) X-Google-Smtp-Source: AIpwx4/AHdeUHToPHSRVvOqE6BWncjxt1/zTR4CHLEJDNbgzGveqUPzDWzR0qWuYr8AArC/TOHnZ X-Received: by 2002:a17:902:1665:: with SMTP id g92-v6mr2367406plg.195.1523402861916; Tue, 10 Apr 2018 16:27:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523402861; cv=none; d=google.com; s=arc-20160816; b=nGeR6JrGXCFeZljDhJ0X8Ped/tXh1RhX04FO0wYFU9cSPe7apyCqEoMCqrdQv8XcSB OsBzij/XwVCIMs7M+OhFYQf46Zg3j4sPutOI8OlhOeF2NbgrLhi04X77tF/F3zJdHBqe 4a/11NGSbTbn5PXiKc2hmDppnEnDU+8o/aONr1YVi82vFUA01ju7fW9kuutIEtgdoIRk AvxCvuExmTBHwD42it651x5EkKJgRvIMXr1JoDSF+daKk8+oB/Sbxdh1hPgz1sa+EwD/ yz7Vmn23naNNDpBQ0CfD9QppOyLQpahsYBTHHag76TDcl8OoolXOfnS9/z4WE82LnOxr Jaug== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=y/RCjyM7bYxHBrm0S0jhko2VLkcPgnSzJkkuq5kEDAw=; b=KQezZMZMaa8f6nhua4X1u1MScJpyv3nKcw+tNFQPw+7yeqW8Bo4oH2rxbp6rNo2Ile M+Iagj+TmghbV5U2YTxueqJ2e2oR1Dr8/oHF5FpmsS+yzrPSDHMqYSc/r5uWOP6iQw1Z 4hp4u0Lja1DmPDZ+lqEnsV+u36tsIbU4JEOqo1g19f1UVgzh1z4qzjxcx3FH0vIG18YP mHW01/US4AlpAI86KJwu8m25nheo9v2MV0rQAkWEl5ziD6Fe0CJnf0OjjomHbd70LxSr DDcxunf9MQK3Vhf2pZrLZulbOAXUPBvu5MEZongi2J57nu2PI81DUjvq6BBqw+OGCP9E I+Pw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u206si2366633pgb.321.2018.04.10.16.27.05; Tue, 10 Apr 2018 16:27:41 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754765AbeDJWbP (ORCPT + 99 others); Tue, 10 Apr 2018 18:31:15 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:40292 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752785AbeDJWbM (ORCPT ); Tue, 10 Apr 2018 18:31:12 -0400 Received: from localhost (LFbn-1-12247-202.w90-92.abo.wanadoo.fr [90.92.61.202]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id D4F8FDF6; Tue, 10 Apr 2018 22:31:11 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Miquel Raynal , Boris Brezillon , Sasha Levin Subject: [PATCH 4.15 102/168] mtd: mtd_oobtest: Handle bitflips during reads Date: Wed, 11 Apr 2018 00:24:04 +0200 Message-Id: <20180410212804.588492445@linuxfoundation.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180410212800.144079021@linuxfoundation.org> References: <20180410212800.144079021@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.15-stable review patch. If anyone has any objections, please let me know. ------------------ From: Miquel Raynal [ Upstream commit 12663b442e5ac5aa3d6097cd3f287c71ba46d26e ] Reads from NAND devices usually trigger bitflips, this is an expected behavior. While bitflips are under a given threshold, the MTD core returns 0. However, when the number of corrected bitflips is above this same threshold, -EUCLEAN is returned to inform the upper layer that this block is slightly dying and soon the ECC engine will be overtaken so actions should be taken to move the data out of it. This particular condition should not be treated like an error and the test should continue. Signed-off-by: Miquel Raynal Signed-off-by: Boris Brezillon Signed-off-by: Sasha Levin Signed-off-by: Greg Kroah-Hartman --- drivers/mtd/tests/oobtest.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) --- a/drivers/mtd/tests/oobtest.c +++ b/drivers/mtd/tests/oobtest.c @@ -193,6 +193,9 @@ static int verify_eraseblock(int ebnum) ops.datbuf = NULL; ops.oobbuf = readbuf; err = mtd_read_oob(mtd, addr, &ops); + if (mtd_is_bitflip(err)) + err = 0; + if (err || ops.oobretlen != use_len) { pr_err("error: readoob failed at %#llx\n", (long long)addr); @@ -227,6 +230,9 @@ static int verify_eraseblock(int ebnum) ops.datbuf = NULL; ops.oobbuf = readbuf; err = mtd_read_oob(mtd, addr, &ops); + if (mtd_is_bitflip(err)) + err = 0; + if (err || ops.oobretlen != mtd->oobavail) { pr_err("error: readoob failed at %#llx\n", (long long)addr); @@ -286,6 +292,9 @@ static int verify_eraseblock_in_one_go(i /* read entire block's OOB at one go */ err = mtd_read_oob(mtd, addr, &ops); + if (mtd_is_bitflip(err)) + err = 0; + if (err || ops.oobretlen != len) { pr_err("error: readoob failed at %#llx\n", (long long)addr); @@ -527,6 +536,9 @@ static int __init mtd_oobtest_init(void) pr_info("attempting to start read past end of OOB\n"); pr_info("an error is expected...\n"); err = mtd_read_oob(mtd, addr0, &ops); + if (mtd_is_bitflip(err)) + err = 0; + if (err) { pr_info("error occurred as expected\n"); err = 0; @@ -571,6 +583,9 @@ static int __init mtd_oobtest_init(void) pr_info("attempting to read past end of device\n"); pr_info("an error is expected...\n"); err = mtd_read_oob(mtd, mtd->size - mtd->writesize, &ops); + if (mtd_is_bitflip(err)) + err = 0; + if (err) { pr_info("error occurred as expected\n"); err = 0; @@ -615,6 +630,9 @@ static int __init mtd_oobtest_init(void) pr_info("attempting to read past end of device\n"); pr_info("an error is expected...\n"); err = mtd_read_oob(mtd, mtd->size - mtd->writesize, &ops); + if (mtd_is_bitflip(err)) + err = 0; + if (err) { pr_info("error occurred as expected\n"); err = 0; @@ -684,6 +702,9 @@ static int __init mtd_oobtest_init(void) ops.datbuf = NULL; ops.oobbuf = readbuf; err = mtd_read_oob(mtd, addr, &ops); + if (mtd_is_bitflip(err)) + err = 0; + if (err) goto out; if (memcmpshow(addr, readbuf, writebuf,