From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id AA43CC433F5 for ; Tue, 25 Jan 2022 10:49:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=QLzvFkCknZPgDZrcilE2sfdc2PGZv5Cre0Sryg3VJXE=; b=asSCLGy0SpX9PC +PJMIoQstRPfJN+TslslNaaGFjH+1Sb7XPcOGhvg2VZHyHSuDky7S24XdY4pkizQ0xafKBWwEtYf7 E1+ij4cfHh31foWhnPEQref7mHPZm21l6rfjTe+fXz9vVojNbbcAHukuta+UOmjB7o/Soa9O6EDUf SRIju4BmC2mmZ1ZPfcrqSQ9TDhhi45+zAsFh8K64fgsd5wDxEP9XTfvgetmzihXFMQj6IGO0NNJIL kBP0+qSyGy4qMUf5P8Hv7CgueIrznwr0u+RmFoSxX4SkChE0w7pXiie4F2upU8TYlRCmuW4GTRceE 0qChviYG1ah/VrcFjqTg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nCJNo-007Vvo-PX; Tue, 25 Jan 2022 10:49:04 +0000 Received: from mail-lf1-x12f.google.com ([2a00:1450:4864:20::12f]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nCJNM-007Vpa-KV for linux-mtd@lists.infradead.org; Tue, 25 Jan 2022 10:48:38 +0000 Received: by mail-lf1-x12f.google.com with SMTP id y15so47655103lfa.9 for ; Tue, 25 Jan 2022 02:48:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kempniu.pl; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=/XpXWRDxxsnU1ew1+sOPH+HV0tZqKpMnA8ASy7NyvWA=; b=RDyTADt9neT1YBf6tGutdHCr9W8j7iNFG8/cqerG4Oqq3WNHcYUNgRHGeuCUb0M0LG LIPhc9kjRvUb/vDDLfUcGIA9sLW8MfYE7beIqvADv5f5T+tZFXU1Ow64OWVIRUWoJsM2 KGJalNt2egy9qgiH9/4UifhxNMfff1fmL4/wc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=/XpXWRDxxsnU1ew1+sOPH+HV0tZqKpMnA8ASy7NyvWA=; b=gUjY6StOriAL7vBEdtk2Xj9D2u45Lf7z9paVszoCqTYvJByqO9gqyt8sCBd1o5NEfb 4oCVXyCYae+xMCEpsnQqb4r6ofmGLsQxtzkGjkTjT0/daOCCOuljMbWG21Wm62JPvX69 sV1YLFx9pUEbIf/jXJi59+rT37cZ+XT5chQHISIfF7icvujA8piOu5v9ZDSMqetSqa+f Devm0oEtUImobTtSvI/6twtOPaXL3gOHyRBe/HI64rIGqTZ6XfIr+vmDAsn0uWtjh7yT S9xqOD551aDv0CDhIx7XRFnCraVeKEgzH6w7MnAI8sCBYbDDTur8jYVrmdoCsg0CJoN2 NJTw== X-Gm-Message-State: AOAM5332hLwVA4p1CpyQgjFjjIjxPtW7KTxkWOzK6CLF1wOcpE80ncUj Jwji2iKOw2L1V64WsgPU6i/Ovw== X-Google-Smtp-Source: ABdhPJw0BQJWB/cT0ygD6lkRhPJ84ybwF0Ebt8lHnMss7GTj7816wXKJ7qmqRm2E/ZuYUC0Rou43OA== X-Received: by 2002:a05:6512:1588:: with SMTP id bp8mr15880818lfb.407.1643107714529; Tue, 25 Jan 2022 02:48:34 -0800 (PST) Received: from larwa.hq.kempniu.pl ([2001:470:64df:111::221]) by smtp.gmail.com with ESMTPSA id d16sm461896ljj.74.2022.01.25.02.48.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Jan 2022 02:48:33 -0800 (PST) From: =?UTF-8?q?Micha=C5=82=20K=C4=99pie=C5=84?= To: Miquel Raynal , Richard Weinberger , Vignesh Raghavendra Cc: Boris Brezillon , linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 3/4] mtd: add ECC error accounting for each read request Date: Tue, 25 Jan 2022 11:48:21 +0100 Message-Id: <20220125104822.8420-4-kernel@kempniu.pl> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220125104822.8420-1-kernel@kempniu.pl> References: <20220125104822.8420-1-kernel@kempniu.pl> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220125_024836_698881_31A3980E X-CRM114-Status: GOOD ( 21.33 ) X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org RXh0ZW5kIHN0cnVjdCBtdGRfcmVxX3N0YXRzIHdpdGggdHdvIG5ldyBmaWVsZHMgaG9sZGluZyB0 aGUgbnVtYmVyIG9mCmNvcnJlY3RlZCBiaXRmbGlwcyBhbmQgdW5jb3JyZWN0YWJsZSBlcnJvcnMg ZGV0ZWN0ZWQgZHVyaW5nIGEgcmVhZApvcGVyYXRpb24uICBUaGlzIGlzIGEgcHJlcmVxdWlzaXRl IGZvciB1bHRpbWF0ZWx5IHBhc3NpbmcgdGhvc2UgY291bnRlcnMKdG8gdXNlciBzcGFjZSwgd2hl cmUgdGhleSBjYW4gYmUgdXNlZnVsIHRvIGFwcGxpY2F0aW9ucyBmb3IgbWFraW5nCmJldHRlci1p bmZvcm1lZCBjaG9pY2VzIGFib3V0IG1vdmluZyBkYXRhIGFyb3VuZC4KClVubGlrZSAnbWF4X2Jp dGZsaXBzJyAod2hpY2ggaXMgc2V0IC0gaW4gYSBjb21tb24gY29kZSBwYXRoIC0gdG8gdGhlCnJl dHVybiB2YWx1ZSBvZiBhIGZ1bmN0aW9uIGNhbGxlZCB3aGlsZSB0aGUgTVREIGRldmljZSdzIG11 dGV4IGlzIGhlbGQpLAp0aGVzZSBjb3VudGVycyBoYXZlIHRvIGJlIG1haW50YWluZWQgaW4gZWFj aCBNVEQgZHJpdmVyIHdoaWNoIGRlZmluZXMKdGhlICdfcmVhZF9vb2InIGNhbGxiYWNrIGJlY2F1 c2UgdGhlIHN0YXRpc3RpY3MgbmVlZCB0byBiZSBjYWxjdWxhdGVkCndoaWxlIHRoZSBNVEQgZGV2 aWNlJ3MgbXV0ZXggaXMgaGVsZC4KClN1Z2dlc3RlZC1ieTogQm9yaXMgQnJlemlsbG9uIDxib3Jp cy5icmV6aWxsb25AY29sbGFib3JhLmNvbT4KU2lnbmVkLW9mZi1ieTogTWljaGHFgiBLxJlwaWXF hCA8a2VybmVsQGtlbXBuaXUucGw+Ci0tLQogZHJpdmVycy9tdGQvZGV2aWNlcy9kb2NnMy5jICAg ICAgICAgICAgIHwgIDggKysrKysrKysKIGRyaXZlcnMvbXRkL25hbmQvb25lbmFuZC9vbmVuYW5k X2Jhc2UuYyB8IDEyICsrKysrKysrKysrKwogZHJpdmVycy9tdGQvbmFuZC9yYXcvbmFuZF9iYXNl LmMgICAgICAgIHwgMTAgKysrKysrKysrKwogZHJpdmVycy9tdGQvbmFuZC9zcGkvY29yZS5jICAg ICAgICAgICAgIHwgMTAgKysrKysrKysrKwogaW5jbHVkZS9saW51eC9tdGQvbXRkLmggICAgICAg ICAgICAgICAgIHwgIDIgKysKIDUgZmlsZXMgY2hhbmdlZCwgNDIgaW5zZXJ0aW9ucygrKQoKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jZzMuYyBiL2RyaXZlcnMvbXRkL2Rldmlj ZXMvZG9jZzMuYwppbmRleCA1YjBhZTVkZGFkNzQuLjM3ODNhZTVjNmQyMyAxMDA2NDQKLS0tIGEv ZHJpdmVycy9tdGQvZGV2aWNlcy9kb2NnMy5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvZG9j ZzMuYwpAQCAtODcxLDYgKzg3MSw3IEBAIHN0YXRpYyBpbnQgZG9jX3JlYWRfb29iKHN0cnVjdCBt dGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwKIAl1OCAqYnVmID0gb3BzLT5kYXRidWY7CiAJc2l6 ZV90IGxlbiwgb29ibGVuLCBuYmRhdGEsIG5ib29iOwogCXU4IGh3ZWNjW0RPQ19FQ0NfQkNIX1NJ WkVdLCBlY2Njb25mMTsKKwlzdHJ1Y3QgbXRkX2VjY19zdGF0cyBvbGRfc3RhdHM7CiAJaW50IG1h eF9iaXRmbGlwcyA9IDA7CiAKIAlpZiAoYnVmKQpAQCAtODk1LDYgKzg5Niw3IEBAIHN0YXRpYyBp bnQgZG9jX3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwKIAlyZXQg PSAwOwogCXNraXAgPSBmcm9tICUgRE9DX0xBWU9VVF9QQUdFX1NJWkU7CiAJbXV0ZXhfbG9jaygm ZG9jZzMtPmNhc2NhZGUtPmxvY2spOworCW9sZF9zdGF0cyA9IG10ZC0+ZWNjX3N0YXRzOwogCXdo aWxlIChyZXQgPj0gMCAmJiAobGVuID4gMCB8fCBvb2JsZW4gPiAwKSkgewogCQljYWxjX2Jsb2Nr X3NlY3Rvcihmcm9tIC0gc2tpcCwgJmJsb2NrMCwgJmJsb2NrMSwgJnBhZ2UsICZvZnMsCiAJCQlk b2NnMy0+cmVsaWFibGUpOwpAQCAtOTY2LDYgKzk2OCwxMiBAQCBzdGF0aWMgaW50IGRvY19yZWFk X29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sCiAJfQogCiBvdXQ6CisJaWYg KG9wcy0+c3RhdHMpIHsKKwkJb3BzLT5zdGF0cy0+dW5jb3JyZWN0YWJsZV9lcnJvcnMgKz0KKwkJ CW10ZC0+ZWNjX3N0YXRzLmZhaWxlZCAtIG9sZF9zdGF0cy5mYWlsZWQ7CisJCW9wcy0+c3RhdHMt PmNvcnJlY3RlZF9iaXRmbGlwcyArPQorCQkJbXRkLT5lY2Nfc3RhdHMuY29ycmVjdGVkIC0gb2xk X3N0YXRzLmNvcnJlY3RlZDsKKwl9CiAJbXV0ZXhfdW5sb2NrKCZkb2NnMy0+Y2FzY2FkZS0+bG9j ayk7CiAJcmV0dXJuIHJldDsKIGVycl9pbl9yZWFkOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQv bmFuZC9vbmVuYW5kL29uZW5hbmRfYmFzZS5jIGIvZHJpdmVycy9tdGQvbmFuZC9vbmVuYW5kL29u ZW5hbmRfYmFzZS5jCmluZGV4IDU4MTAxMDQ0MjBhMi4uZjY2Mzg1ZmFmNjMxIDEwMDY0NAotLS0g YS9kcml2ZXJzL210ZC9uYW5kL29uZW5hbmQvb25lbmFuZF9iYXNlLmMKKysrIGIvZHJpdmVycy9t dGQvbmFuZC9vbmVuYW5kL29uZW5hbmRfYmFzZS5jCkBAIC0xNDQwLDYgKzE0NDAsNyBAQCBzdGF0 aWMgaW50IG9uZW5hbmRfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9t LAogCQkJICAgIHN0cnVjdCBtdGRfb29iX29wcyAqb3BzKQogewogCXN0cnVjdCBvbmVuYW5kX2No aXAgKnRoaXMgPSBtdGQtPnByaXY7CisJc3RydWN0IG10ZF9lY2Nfc3RhdHMgb2xkX3N0YXRzOwog CWludCByZXQ7CiAKIAlzd2l0Y2ggKG9wcy0+bW9kZSkgewpAQCAtMTQ1MywxMiArMTQ1NCwyMyBA QCBzdGF0aWMgaW50IG9uZW5hbmRfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZf dCBmcm9tLAogCX0KIAogCW9uZW5hbmRfZ2V0X2RldmljZShtdGQsIEZMX1JFQURJTkcpOworCisJ b2xkX3N0YXRzID0gbXRkLT5lY2Nfc3RhdHM7CisKIAlpZiAob3BzLT5kYXRidWYpCiAJCXJldCA9 IE9ORU5BTkRfSVNfNEtCX1BBR0UodGhpcykgPwogCQkJb25lbmFuZF9tbGNfcmVhZF9vcHNfbm9s b2NrKG10ZCwgZnJvbSwgb3BzKSA6CiAJCQlvbmVuYW5kX3JlYWRfb3BzX25vbG9jayhtdGQsIGZy b20sIG9wcyk7CiAJZWxzZQogCQlyZXQgPSBvbmVuYW5kX3JlYWRfb29iX25vbG9jayhtdGQsIGZy b20sIG9wcyk7CisKKwlpZiAob3BzLT5zdGF0cykgeworCQlvcHMtPnN0YXRzLT51bmNvcnJlY3Rh YmxlX2Vycm9ycyArPQorCQkJbXRkLT5lY2Nfc3RhdHMuZmFpbGVkIC0gb2xkX3N0YXRzLmZhaWxl ZDsKKwkJb3BzLT5zdGF0cy0+Y29ycmVjdGVkX2JpdGZsaXBzICs9CisJCQltdGQtPmVjY19zdGF0 cy5jb3JyZWN0ZWQgLSBvbGRfc3RhdHMuY29ycmVjdGVkOworCX0KKwogCW9uZW5hbmRfcmVsZWFz ZV9kZXZpY2UobXRkKTsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9u YW5kL3Jhdy9uYW5kX2Jhc2UuYyBiL2RyaXZlcnMvbXRkL25hbmQvcmF3L25hbmRfYmFzZS5jCmlu ZGV4IGU3YjJiYTAxNmQ4Yy4uYTE5NzUyMDRiY2MxIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9u YW5kL3Jhdy9uYW5kX2Jhc2UuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL3Jhdy9uYW5kX2Jhc2Uu YwpAQCAtMzgxNyw2ICszODE3LDcgQEAgc3RhdGljIGludCBuYW5kX3JlYWRfb29iKHN0cnVjdCBt dGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwKIAkJCSBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykK IHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkX3RvX25hbmQobXRkKTsKKwlzdHJ1Y3Qg bXRkX2VjY19zdGF0cyBvbGRfc3RhdHM7CiAJaW50IHJldDsKIAogCW9wcy0+cmV0bGVuID0gMDsK QEAgLTM4MzAsMTEgKzM4MzEsMjAgQEAgc3RhdGljIGludCBuYW5kX3JlYWRfb29iKHN0cnVjdCBt dGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCisJ b2xkX3N0YXRzID0gbXRkLT5lY2Nfc3RhdHM7CisKIAlpZiAoIW9wcy0+ZGF0YnVmKQogCQlyZXQg PSBuYW5kX2RvX3JlYWRfb29iKGNoaXAsIGZyb20sIG9wcyk7CiAJZWxzZQogCQlyZXQgPSBuYW5k X2RvX3JlYWRfb3BzKGNoaXAsIGZyb20sIG9wcyk7CiAKKwlpZiAob3BzLT5zdGF0cykgeworCQlv cHMtPnN0YXRzLT51bmNvcnJlY3RhYmxlX2Vycm9ycyArPQorCQkJbXRkLT5lY2Nfc3RhdHMuZmFp bGVkIC0gb2xkX3N0YXRzLmZhaWxlZDsKKwkJb3BzLT5zdGF0cy0+Y29ycmVjdGVkX2JpdGZsaXBz ICs9CisJCQltdGQtPmVjY19zdGF0cy5jb3JyZWN0ZWQgLSBvbGRfc3RhdHMuY29ycmVjdGVkOwor CX0KKwogCW5hbmRfcmVsZWFzZV9kZXZpY2UoY2hpcCk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAt LWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvc3BpL2NvcmUuYyBiL2RyaXZlcnMvbXRkL25hbmQvc3Bp L2NvcmUuYwppbmRleCAyYzg2ODVmMWYyZmEuLjVjOTU2YzhjYWU5ZiAxMDA2NDQKLS0tIGEvZHJp dmVycy9tdGQvbmFuZC9zcGkvY29yZS5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvc3BpL2NvcmUu YwpAQCAtNjI5LDYgKzYyOSw3IEBAIHN0YXRpYyBpbnQgc3BpbmFuZF9tdGRfcmVhZChzdHJ1Y3Qg bXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sCiB7CiAJc3RydWN0IHNwaW5hbmRfZGV2aWNlICpz cGluYW5kID0gbXRkX3RvX3NwaW5hbmQobXRkKTsKIAlzdHJ1Y3QgbmFuZF9kZXZpY2UgKm5hbmQg PSBtdGRfdG9fbmFuZGRldihtdGQpOworCXN0cnVjdCBtdGRfZWNjX3N0YXRzIG9sZF9zdGF0czsK IAl1bnNpZ25lZCBpbnQgbWF4X2JpdGZsaXBzID0gMDsKIAlzdHJ1Y3QgbmFuZF9pb19pdGVyIGl0 ZXI7CiAJYm9vbCBkaXNhYmxlX2VjYyA9IGZhbHNlOwpAQCAtNjQwLDYgKzY0MSw4IEBAIHN0YXRp YyBpbnQgc3BpbmFuZF9tdGRfcmVhZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20s CiAKIAltdXRleF9sb2NrKCZzcGluYW5kLT5sb2NrKTsKIAorCW9sZF9zdGF0cyA9IG10ZC0+ZWNj X3N0YXRzOworCiAJbmFuZGRldl9pb19mb3JfZWFjaF9wYWdlKG5hbmQsIE5BTkRfUEFHRV9SRUFE LCBmcm9tLCBvcHMsICZpdGVyKSB7CiAJCWlmIChkaXNhYmxlX2VjYykKIAkJCWl0ZXIucmVxLm1v ZGUgPSBNVERfT1BTX1JBVzsKQEAgLTY2Miw2ICs2NjUsMTMgQEAgc3RhdGljIGludCBzcGluYW5k X210ZF9yZWFkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwKIAkJb3BzLT5vb2Jy ZXRsZW4gKz0gaXRlci5yZXEub29ibGVuOwogCX0KIAorCWlmIChvcHMtPnN0YXRzKSB7CisJCW9w cy0+c3RhdHMtPnVuY29ycmVjdGFibGVfZXJyb3JzICs9CisJCQltdGQtPmVjY19zdGF0cy5mYWls ZWQgLSBvbGRfc3RhdHMuZmFpbGVkOworCQlvcHMtPnN0YXRzLT5jb3JyZWN0ZWRfYml0ZmxpcHMg Kz0KKwkJCW10ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCAtIG9sZF9zdGF0cy5jb3JyZWN0ZWQ7CisJ fQorCiAJbXV0ZXhfdW5sb2NrKCZzcGluYW5kLT5sb2NrKTsKIAogCWlmIChlY2NfZmFpbGVkICYm ICFyZXQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9tdGQuaCBiL2luY2x1ZGUvbGlu dXgvbXRkL210ZC5oCmluZGV4IGY5NzZhYWJjYjM3OC4uNDVhMGMyMDMwNWIwIDEwMDY0NAotLS0g YS9pbmNsdWRlL2xpbnV4L210ZC9tdGQuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9tdGQuaApA QCAtNDEsNiArNDEsOCBAQCBzdHJ1Y3QgbXRkX2VyYXNlX3JlZ2lvbl9pbmZvIHsKIH07CiAKIHN0 cnVjdCBtdGRfcmVxX3N0YXRzIHsKKwl1bnNpZ25lZCBpbnQgdW5jb3JyZWN0YWJsZV9lcnJvcnM7 CisJdW5zaWduZWQgaW50IGNvcnJlY3RlZF9iaXRmbGlwczsKIAl1bnNpZ25lZCBpbnQgbWF4X2Jp dGZsaXBzOwogfTsKIAotLSAKMi4zNC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4IE1URCBkaXNjdXNzaW9uIG1haWxpbmcgbGlz dApodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LW10ZC8K From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7878AC433EF for ; Tue, 25 Jan 2022 10:52:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1378992AbiAYKwE (ORCPT ); Tue, 25 Jan 2022 05:52:04 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43132 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1377119AbiAYKsi (ORCPT ); Tue, 25 Jan 2022 05:48:38 -0500 Received: from mail-lf1-x12d.google.com (mail-lf1-x12d.google.com [IPv6:2a00:1450:4864:20::12d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 329FAC061762 for ; Tue, 25 Jan 2022 02:48:36 -0800 (PST) Received: by mail-lf1-x12d.google.com with SMTP id a28so25813210lfl.7 for ; Tue, 25 Jan 2022 02:48:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kempniu.pl; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=/XpXWRDxxsnU1ew1+sOPH+HV0tZqKpMnA8ASy7NyvWA=; b=RDyTADt9neT1YBf6tGutdHCr9W8j7iNFG8/cqerG4Oqq3WNHcYUNgRHGeuCUb0M0LG LIPhc9kjRvUb/vDDLfUcGIA9sLW8MfYE7beIqvADv5f5T+tZFXU1Ow64OWVIRUWoJsM2 KGJalNt2egy9qgiH9/4UifhxNMfff1fmL4/wc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=/XpXWRDxxsnU1ew1+sOPH+HV0tZqKpMnA8ASy7NyvWA=; b=ESlWZkgvaW90hTzvNrEnyLAtEmpC4iiBNH/ZRKtt9xkSCFoTwV62NxnixGELUnOpW0 r2w+jgitpRYpPOcP7ZNOoGloOw5WPpL/LCGNbXAG4hqOR3sL/j5OuNR9gtEYOULnpMhj jCW5bnJ78HY/yXnYz7x7arr4xoWrP/KkKuhBAnpeIKGVH/cfM4Yjh+G3Nk7aNuzcJObi LFmxAngTa6RJ7WluTj4wZdcMrnfUl2T81VSI6eq/343BV/w/LcnWlG23hHaLWnyqV6BL xBBwVt/Irv93IKzTjuIp5plQ1SIMI2bBZpnXTNhq5bO0kl4KcOuyW5/cA7p450LezgTs POvQ== X-Gm-Message-State: AOAM530OZgTkxGTr2T/xUMvIAZXOpJyW0tDKlBaQ2VGggV1UDPVRX22v l4VijOiePU889jEdwNUENyPMWw== X-Google-Smtp-Source: ABdhPJw0BQJWB/cT0ygD6lkRhPJ84ybwF0Ebt8lHnMss7GTj7816wXKJ7qmqRm2E/ZuYUC0Rou43OA== X-Received: by 2002:a05:6512:1588:: with SMTP id bp8mr15880818lfb.407.1643107714529; Tue, 25 Jan 2022 02:48:34 -0800 (PST) Received: from larwa.hq.kempniu.pl ([2001:470:64df:111::221]) by smtp.gmail.com with ESMTPSA id d16sm461896ljj.74.2022.01.25.02.48.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Jan 2022 02:48:33 -0800 (PST) From: =?UTF-8?q?Micha=C5=82=20K=C4=99pie=C5=84?= To: Miquel Raynal , Richard Weinberger , Vignesh Raghavendra Cc: Boris Brezillon , linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 3/4] mtd: add ECC error accounting for each read request Date: Tue, 25 Jan 2022 11:48:21 +0100 Message-Id: <20220125104822.8420-4-kernel@kempniu.pl> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220125104822.8420-1-kernel@kempniu.pl> References: <20220125104822.8420-1-kernel@kempniu.pl> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Extend struct mtd_req_stats with two new fields holding the number of corrected bitflips and uncorrectable errors detected during a read operation. This is a prerequisite for ultimately passing those counters to user space, where they can be useful to applications for making better-informed choices about moving data around. Unlike 'max_bitflips' (which is set - in a common code path - to the return value of a function called while the MTD device's mutex is held), these counters have to be maintained in each MTD driver which defines the '_read_oob' callback because the statistics need to be calculated while the MTD device's mutex is held. Suggested-by: Boris Brezillon Signed-off-by: Michał Kępień --- drivers/mtd/devices/docg3.c | 8 ++++++++ drivers/mtd/nand/onenand/onenand_base.c | 12 ++++++++++++ drivers/mtd/nand/raw/nand_base.c | 10 ++++++++++ drivers/mtd/nand/spi/core.c | 10 ++++++++++ include/linux/mtd/mtd.h | 2 ++ 5 files changed, 42 insertions(+) diff --git a/drivers/mtd/devices/docg3.c b/drivers/mtd/devices/docg3.c index 5b0ae5ddad74..3783ae5c6d23 100644 --- a/drivers/mtd/devices/docg3.c +++ b/drivers/mtd/devices/docg3.c @@ -871,6 +871,7 @@ static int doc_read_oob(struct mtd_info *mtd, loff_t from, u8 *buf = ops->datbuf; size_t len, ooblen, nbdata, nboob; u8 hwecc[DOC_ECC_BCH_SIZE], eccconf1; + struct mtd_ecc_stats old_stats; int max_bitflips = 0; if (buf) @@ -895,6 +896,7 @@ static int doc_read_oob(struct mtd_info *mtd, loff_t from, ret = 0; skip = from % DOC_LAYOUT_PAGE_SIZE; mutex_lock(&docg3->cascade->lock); + old_stats = mtd->ecc_stats; while (ret >= 0 && (len > 0 || ooblen > 0)) { calc_block_sector(from - skip, &block0, &block1, &page, &ofs, docg3->reliable); @@ -966,6 +968,12 @@ static int doc_read_oob(struct mtd_info *mtd, loff_t from, } out: + if (ops->stats) { + ops->stats->uncorrectable_errors += + mtd->ecc_stats.failed - old_stats.failed; + ops->stats->corrected_bitflips += + mtd->ecc_stats.corrected - old_stats.corrected; + } mutex_unlock(&docg3->cascade->lock); return ret; err_in_read: diff --git a/drivers/mtd/nand/onenand/onenand_base.c b/drivers/mtd/nand/onenand/onenand_base.c index 5810104420a2..f66385faf631 100644 --- a/drivers/mtd/nand/onenand/onenand_base.c +++ b/drivers/mtd/nand/onenand/onenand_base.c @@ -1440,6 +1440,7 @@ static int onenand_read_oob(struct mtd_info *mtd, loff_t from, struct mtd_oob_ops *ops) { struct onenand_chip *this = mtd->priv; + struct mtd_ecc_stats old_stats; int ret; switch (ops->mode) { @@ -1453,12 +1454,23 @@ static int onenand_read_oob(struct mtd_info *mtd, loff_t from, } onenand_get_device(mtd, FL_READING); + + old_stats = mtd->ecc_stats; + if (ops->datbuf) ret = ONENAND_IS_4KB_PAGE(this) ? onenand_mlc_read_ops_nolock(mtd, from, ops) : onenand_read_ops_nolock(mtd, from, ops); else ret = onenand_read_oob_nolock(mtd, from, ops); + + if (ops->stats) { + ops->stats->uncorrectable_errors += + mtd->ecc_stats.failed - old_stats.failed; + ops->stats->corrected_bitflips += + mtd->ecc_stats.corrected - old_stats.corrected; + } + onenand_release_device(mtd); return ret; diff --git a/drivers/mtd/nand/raw/nand_base.c b/drivers/mtd/nand/raw/nand_base.c index e7b2ba016d8c..a1975204bcc1 100644 --- a/drivers/mtd/nand/raw/nand_base.c +++ b/drivers/mtd/nand/raw/nand_base.c @@ -3817,6 +3817,7 @@ static int nand_read_oob(struct mtd_info *mtd, loff_t from, struct mtd_oob_ops *ops) { struct nand_chip *chip = mtd_to_nand(mtd); + struct mtd_ecc_stats old_stats; int ret; ops->retlen = 0; @@ -3830,11 +3831,20 @@ static int nand_read_oob(struct mtd_info *mtd, loff_t from, if (ret) return ret; + old_stats = mtd->ecc_stats; + if (!ops->datbuf) ret = nand_do_read_oob(chip, from, ops); else ret = nand_do_read_ops(chip, from, ops); + if (ops->stats) { + ops->stats->uncorrectable_errors += + mtd->ecc_stats.failed - old_stats.failed; + ops->stats->corrected_bitflips += + mtd->ecc_stats.corrected - old_stats.corrected; + } + nand_release_device(chip); return ret; } diff --git a/drivers/mtd/nand/spi/core.c b/drivers/mtd/nand/spi/core.c index 2c8685f1f2fa..5c956c8cae9f 100644 --- a/drivers/mtd/nand/spi/core.c +++ b/drivers/mtd/nand/spi/core.c @@ -629,6 +629,7 @@ static int spinand_mtd_read(struct mtd_info *mtd, loff_t from, { struct spinand_device *spinand = mtd_to_spinand(mtd); struct nand_device *nand = mtd_to_nanddev(mtd); + struct mtd_ecc_stats old_stats; unsigned int max_bitflips = 0; struct nand_io_iter iter; bool disable_ecc = false; @@ -640,6 +641,8 @@ static int spinand_mtd_read(struct mtd_info *mtd, loff_t from, mutex_lock(&spinand->lock); + old_stats = mtd->ecc_stats; + nanddev_io_for_each_page(nand, NAND_PAGE_READ, from, ops, &iter) { if (disable_ecc) iter.req.mode = MTD_OPS_RAW; @@ -662,6 +665,13 @@ static int spinand_mtd_read(struct mtd_info *mtd, loff_t from, ops->oobretlen += iter.req.ooblen; } + if (ops->stats) { + ops->stats->uncorrectable_errors += + mtd->ecc_stats.failed - old_stats.failed; + ops->stats->corrected_bitflips += + mtd->ecc_stats.corrected - old_stats.corrected; + } + mutex_unlock(&spinand->lock); if (ecc_failed && !ret) diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h index f976aabcb378..45a0c20305b0 100644 --- a/include/linux/mtd/mtd.h +++ b/include/linux/mtd/mtd.h @@ -41,6 +41,8 @@ struct mtd_erase_region_info { }; struct mtd_req_stats { + unsigned int uncorrectable_errors; + unsigned int corrected_bitflips; unsigned int max_bitflips; }; -- 2.34.1