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 BAFA5C0015E for ; Sat, 15 Jul 2023 15:41:51 +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:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=A53yu6aX83nMF9xe1HpFUzXbtxfVOSi5+0K9jQhjGL0=; b=JaLsKlBBe85tSB G/cT1vUdjpe5ASJ80ccqlODnUdPnkR1ba08zkhTe0OKKsRThaCWt7w+CnJvSW6Gb8Au7gTcGaeiqc D9MnqG6WinTH2lux+JEASLVvZ7jgK5uS00mnu2DYCzFbrCFwGeEhuRLq2MGSPxFwpP6H6jkXcxvp/ ig618sOS+5tNqqCKtRPJ7XjnjWYn7m1snUwQFt98LxUlVJLQRKbmYiq5/tpLQgJN9z/OOHk36oBNw T9rCxPHG7zGUA5I47+bOMWnVUeSa5+1cXo+AsZx8u0fOf1EHR294R5xa8BDq82ltp+mmK8SCnEeA7 0u7xCHApXsKm2C5OzlnA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qKhOj-0092yz-2J; Sat, 15 Jul 2023 15:41:29 +0000 Received: from relay6-d.mail.gandi.net ([2001:4b98:dc4:8::226]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qKhOe-0092yB-2Q for linux-mtd@lists.infradead.org; Sat, 15 Jul 2023 15:41:27 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id 0794BC0004; Sat, 15 Jul 2023 15:41:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1689435679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=dx1hsltG+GS7GVxSpUxmJ8g4K6vQcrTXG0/HvBc/tbU=; b=A0YL2XjHakazCSZxBEAgvvFz+zO/q6MvW/VWQbL4uXtrm77eLe7cnit7/T8i/AuGOl7OmT YN++8QaxP9uM3tgqSVdbFUnWRWqxsOJV5bWYasJpx+Cy1LYzoD8PftOmoRYFj21IyBCAI5 JO0t/bxRZzXCQOfu1e9sM0qCXBwrcUQdH+RihsTsFt3DIFR2JQ1cDTr+Qcmrnb0SR6Ybme fcXexHoisB0ENB+2rnbwpWzBjYQu7I5XizRbcqeC7dmqQaXYcWpZPzLjYOI2u7yUXhT3xr SXoQdjTlkuldFhbZ0dpwyQkGtKicY/Lv7sYc5w9KkLSHvhRY8j1jFssNmZ8VQQ== Date: Sat, 15 Jul 2023 17:41:12 +0200 From: Miquel Raynal To: Fabrizio Castro Cc: Alexander Usyskin , Richard Weinberger , Vignesh Raghavendra , "linux-mtd@lists.infradead.org" , "linux-kernel@vger.kernel.org" , Tomas Winkler , Vitaly Lubart , Andy Shevchenko , Geert Uytterhoeven , Biju Das , "linux-renesas-soc@vger.kernel.org" , Chris Paterson Subject: Re: [PATCH 1/2] mtd: use refcount to prevent corruption Message-ID: <20230715174112.3909e43f@xps-13> In-Reply-To: References: <20230620131905.648089-1-alexander.usyskin@intel.com> <20230620131905.648089-2-alexander.usyskin@intel.com> Organization: Bootlin X-Mailer: Claws Mail 4.0.0 (GTK+ 3.24.33; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-GND-Sasl: miquel.raynal@bootlin.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230715_084125_103193_FDBE96BC X-CRM114-Status: GOOD ( 41.99 ) 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 SGkgRmFicml6aW8sCgpmYWJyaXppby5jYXN0cm8uanpAcmVuZXNhcy5jb20gd3JvdGUgb24gRnJp LCAxNCBKdWwgMjAyMyAxNjoxMDo0NSArMDAwMDoKCj4gRGVhciBBbGwsCj4gCj4gSSBhbSBzb3Jy eSBmb3IgcmVvcGVuaW5nIHRoaXMgdG9waWMsIGJ1dCBhcyBpdCB0dXJucyBvdXQgKGFmdGVyIGJp c2VjdGluZwo+IGxpbnV4LW5leHQvbWFzdGVyKSB0aGlzIHBhdGNoIGlzIGludGVyZmVyaW5nIHdp dGggYSB1c2UgY2FzZSBJIGFtIHdvcmtpbmcKPiBvbi4KPiAKPiBJIGFtIHVzaW5nIGEgUmVuZXNh cyBSWi9WMk0gRVZLIHYyLjAgcGxhdGZvcm0sIEkgaGF2ZSBhbiBTUEkgTk9SIG1lbW9yeQo+ICgi bWljcm9uLG10MjVxbDI1NmEiKSB3aXJlZCB1cCB0byBhIGNvbm5lY3RvciBvbiB0aGUgcGxhdGZv cm0sIHRoZSBTUEkKPiBtYXN0ZXIgaXMgdXNpbmcgZHJpdmVyIChidWlsdCBhcyBtb2R1bGUpOgo+ IGRyaXZlcnMvc3BpL3NwaS1yenYybS1jc2kuYwo+IAo+IEFsdGhvdWdoIHRoZSBib2FyZCBkZXZp Y2UgdHJlZSBpbiBtYWlubGluZSBkb2VzIG5vdCByZWZsZWN0IHRoZSBjb25uZWN0aW9uCj4gb2Yg Q1NJNCAod2hpY2ggaXMgdGhlIFNQSSBtYXN0ZXIpIGZyb20gdGhlIFNvQyB0byB0aGUgIm1pY3Jv bixtdDI1cWwyNTZhIgo+IChTUEkgc2xhdmUgZGV2aWNlKSwgbXkgbG9jYWwgZGV2aWNlIHRyZWUg Y29tZXMgd2l0aCB0aGUgbmVjZXNzYXJ5IGRlZmluaXRpb25zLgo+IAo+IFdpdGhvdXQgdGhpcyBw YXRjaCwgd2hlbiBJIGxvYWQgdXAgdGhlIG1vZHVsZSwgSSBnZXQgdGhlIGJlbG93IDMgZGV2aWNl czoKPiAvZGV2L210ZDAKPiAvZGV2L210ZDBybwo+IC9kZXYvbXRkYmxvY2swCj4gCj4gVGhleSBn ZXQgY2xlYW5lZCB1cCBjb3JyZWN0bHkgdXBvbiBtb2R1bGUgcmVtb3ZhbC4KPiBJIGNhbiByZWxv YWQgdGhlIHNhbWUgbW9kdWxlLCBhbmQgZXZlcnl0aGluZyB3b3JrcyBqdXN0IGZpbmUuCj4gCj4g V2l0aCB0aGlzIHBhdGNoIGFwcGxpZWQsIHdoZW4gSSBsb2FkIHVwIHRoZSBtb2R1bGUsIEkgZ2V0 IHRoZSBzYW1lIDMKPiBkZXZpY2VzOgo+IC9kZXYvbXRkMAo+IC9kZXYvbXRkMHJvCj4gL2Rldi9t dGRibG9jazAKPiAKPiBVcG9uIHJlbW92YWwsIHRoZSBiZWxvdyAyIGRldmljZXMgc3RpbGwgaGFu ZyBhcm91bmQ6Cj4gL2Rldi9tdGQwCj4gL2Rldi9tdGQwcm8KCkxvb2tzIGxpa2UgdGhlIHJlZmNv dW50aW5nIGNoYW5nZSBpcyBzdGlsbCBub3QgZXZlbiBpbiBzb21lIGNhc2VzLCBjYW4KeW91IGlu dmVzdGlnYXRlIGFuZCBjb21lIHVwIHdpdGggYSBwcm9wZXIgcGF0Y2g/IFlvdSBjYW4gZWl0aGVy IGltcHJvdmUKdGhlIGV4aXN0aW5nIHBhdGNoIG9yIHJldmVydCBpdCBhbmQgdHJ5IHlvdXIgb3du IGFwcHJvYWNoIGlmIGRlZW1lZApiZXR0ZXIuCgpUaGFua3MsCk1pcXXDqGwKCj4gUHJldmVudGlu ZyB0aGUgbW9kdWxlIGZyb20gYmVpbmcgKHJlKWxvYWRlZCBjb3JyZWN0bHk6Cj4gcnp2Mm1fY3Np IGE0MDIwMjAwLnNwaTogZXJyb3IgLUVCVVNZOiByZWdpc3RlciBjb250cm9sbGVyIGZhaWxlZAo+ IHJ6djJtX2NzaTogcHJvYmUgb2YgYTQwMjAyMDAuc3BpIGZhaWxlZCB3aXRoIGVycm9yIC0xNgo+ IAo+IEFyZSB5b3UgZ3V5cyBhd2FyZSBvZiB0aGlzIHNvcnQgb2Ygc2lkZSBlZmZlY3Q/Cj4gCj4g VGhhbmtzLAo+IEZhYgo+IAo+ID4gRnJvbTogQWxleGFuZGVyIFVzeXNraW4gPGFsZXhhbmRlci51 c3lza2luQGludGVsLmNvbT4KPiA+IFN1YmplY3Q6IFtQQVRDSCAxLzJdIG10ZDogdXNlIHJlZmNv dW50IHRvIHByZXZlbnQgY29ycnVwdGlvbgo+ID4gCj4gPiBGcm9tOiBUb21hcyBXaW5rbGVyIDx0 b21hcy53aW5rbGVyQGludGVsLmNvbT4KPiA+IAo+ID4gV2hlbiB1bmRlcmx5aW5nIGRldmljZSBp cyByZW1vdmVkIG10ZCBjb3JlIHdpbGwgY3Jhc2gKPiA+IGluIGNhc2UgdXNlciBzcGFjZSBpcyBo b2xkaW5nIG9wZW4gaGFuZGxlLgo+ID4gTmVlZCB0byB1c2UgcHJvcGVyIHJlZmNvdW50aW5nIHNv IGRldmljZSBpcyByZWxlYXNlCj4gPiBvbmx5IHdoZW4gaGFzIG5vIHVzZXJzLgo+ID4gCj4gPiBT aWduZWQtb2ZmLWJ5OiBUb21hcyBXaW5rbGVyIDx0b21hcy53aW5rbGVyQGludGVsLmNvbT4KPiA+ IFNpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBVc3lza2luIDxhbGV4YW5kZXIudXN5c2tpbkBpbnRl bC5jb20+Cj4gPiAtLS0KPiA+ICBkcml2ZXJzL210ZC9tdGRjb3JlLmMgICB8IDcyICsrKysrKysr KysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0KPiA+IC0KPiA+ICBkcml2ZXJzL210ZC9t dGRjb3JlLmggICB8ICAxICsKPiA+ICBkcml2ZXJzL210ZC9tdGRwYXJ0LmMgICB8IDE0ICsrKyst LS0tCj4gPiAgaW5jbHVkZS9saW51eC9tdGQvbXRkLmggfCAgMiArLQo+ID4gIDQgZmlsZXMgY2hh bmdlZCwgNDkgaW5zZXJ0aW9ucygrKSwgNDAgZGVsZXRpb25zKC0pCj4gPiAKPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL210ZC9tdGRjb3JlLmMgYi9kcml2ZXJzL210ZC9tdGRjb3JlLmMKPiA+IGlu ZGV4IGFiZjRjYjU4YThhYi4uODRiZDE4NzgzNjdkIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9t dGQvbXRkY29yZS5jCj4gPiArKysgYi9kcml2ZXJzL210ZC9tdGRjb3JlLmMKPiA+IEBAIC05Mywx MCArOTMsMzMgQEAgc3RhdGljIHZvaWQgbXRkX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQo+ ID4gIAlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ID4gIAlk ZXZfdCBpbmRleCA9IE1URF9ERVZUKG10ZC0+aW5kZXgpOwo+ID4gCj4gPiArCWlmIChtdGRfaXNf cGFydGl0aW9uKG10ZCkpCj4gPiArCQlyZWxlYXNlX210ZF9wYXJ0aXRpb24obXRkKTsKPiA+ICsK PiA+ICAJLyogcmVtb3ZlIC9kZXYvbXRkWHJvIG5vZGUgKi8KPiA+ICAJZGV2aWNlX2Rlc3Ryb3ko Jm10ZF9jbGFzcywgaW5kZXggKyAxKTsKPiA+ICB9Cj4gPiAKPiA+ICtzdGF0aWMgdm9pZCBtdGRf ZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCj4gPiArewo+ID4gKwlzdHJ1Y3QgbXRk X2luZm8gKm10ZCA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgbXRkX2luZm8sCj4gPiByZWZj bnQpOwo+ID4gKwo+ID4gKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUobXRkLT5kYmcuZGZzX2Rp cik7Cj4gPiArCj4gPiArCS8qIFRyeSB0byByZW1vdmUgdGhlIE5WTUVNIHByb3ZpZGVyICovCj4g PiArCW52bWVtX3VucmVnaXN0ZXIobXRkLT5udm1lbSk7Cj4gPiArCj4gPiArCWRldmljZV91bnJl Z2lzdGVyKCZtdGQtPmRldik7Cj4gPiArCj4gPiArCS8qIENsZWFyIGRldiBzbyBtdGQgY2FuIGJl IHNhZmVseSByZS1yZWdpc3RlcmVkIGxhdGVyIGlmIGRlc2lyZWQKPiA+ICovCj4gPiArCW1lbXNl dCgmbXRkLT5kZXYsIDAsIHNpemVvZihtdGQtPmRldikpOwo+ID4gKwo+ID4gKwlpZHJfcmVtb3Zl KCZtdGRfaWRyLCBtdGQtPmluZGV4KTsKPiA+ICsJb2Zfbm9kZV9wdXQobXRkX2dldF9vZl9ub2Rl KG10ZCkpOwo+ID4gKwo+ID4gKwltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKPiA+ICt9Cj4gPiAr Cj4gPiAgI2RlZmluZSBNVERfREVWSUNFX0FUVFJfUk8obmFtZSkgXAo+ID4gIHN0YXRpYyBERVZJ Q0VfQVRUUihuYW1lLCAwNDQ0LCBtdGRfIyNuYW1lIyNfc2hvdywgTlVMTCkKPiA+IAo+ID4gQEAg LTY2Niw3ICs2ODksNyBAQCBpbnQgYWRkX210ZF9kZXZpY2Uoc3RydWN0IG10ZF9pbmZvICptdGQp Cj4gPiAgCX0KPiA+IAo+ID4gIAltdGQtPmluZGV4ID0gaTsKPiA+IC0JbXRkLT51c2Vjb3VudCA9 IDA7Cj4gPiArCWtyZWZfaW5pdCgmbXRkLT5yZWZjbnQpOwo+ID4gCj4gPiAgCS8qIGRlZmF1bHQg dmFsdWUgaWYgbm90IHNldCBieSBkcml2ZXIgKi8KPiA+ICAJaWYgKG10ZC0+Yml0ZmxpcF90aHJl c2hvbGQgPT0gMCkKPiA+IEBAIC03NzksNyArODAyLDYgQEAgaW50IGRlbF9tdGRfZGV2aWNlKHN0 cnVjdCBtdGRfaW5mbyAqbXRkKQo+ID4gIHsKPiA+ICAJaW50IHJldDsKPiA+ICAJc3RydWN0IG10 ZF9ub3RpZmllciAqbm90Owo+ID4gLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm10ZF9vZl9ub2RlOwo+ ID4gCj4gPiAgCW11dGV4X2xvY2soJm10ZF90YWJsZV9tdXRleCk7Cj4gPiAKPiA+IEBAIC03OTMs MjggKzgxNSw4IEBAIGludCBkZWxfbXRkX2RldmljZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKPiA+ ICAJbGlzdF9mb3JfZWFjaF9lbnRyeShub3QsICZtdGRfbm90aWZpZXJzLCBsaXN0KQo+ID4gIAkJ bm90LT5yZW1vdmUobXRkKTsKPiA+IAo+ID4gLQlpZiAobXRkLT51c2Vjb3VudCkgewo+ID4gLQkJ cHJpbnRrKEtFUk5fTk9USUNFICJSZW1vdmluZyBNVEQgZGV2aWNlICMlZCAoJXMpIHdpdGggdXNl Cj4gPiBjb3VudCAlZFxuIiwKPiA+IC0JCSAgICAgICBtdGQtPmluZGV4LCBtdGQtPm5hbWUsIG10 ZC0+dXNlY291bnQpOwo+ID4gLQkJcmV0ID0gLUVCVVNZOwo+ID4gLQl9IGVsc2Ugewo+ID4gLQkJ bXRkX29mX25vZGUgPSBtdGRfZ2V0X29mX25vZGUobXRkKTsKPiA+IC0JCWRlYnVnZnNfcmVtb3Zl X3JlY3Vyc2l2ZShtdGQtPmRiZy5kZnNfZGlyKTsKPiA+IC0KPiA+IC0JCS8qIFRyeSB0byByZW1v dmUgdGhlIE5WTUVNIHByb3ZpZGVyICovCj4gPiAtCQludm1lbV91bnJlZ2lzdGVyKG10ZC0+bnZt ZW0pOwo+ID4gLQo+ID4gLQkJZGV2aWNlX3VucmVnaXN0ZXIoJm10ZC0+ZGV2KTsKPiA+IC0KPiA+ IC0JCS8qIENsZWFyIGRldiBzbyBtdGQgY2FuIGJlIHNhZmVseSByZS1yZWdpc3RlcmVkIGxhdGVy IGlmCj4gPiBkZXNpcmVkICovCj4gPiAtCQltZW1zZXQoJm10ZC0+ZGV2LCAwLCBzaXplb2YobXRk LT5kZXYpKTsKPiA+IC0KPiA+IC0JCWlkcl9yZW1vdmUoJm10ZF9pZHIsIG10ZC0+aW5kZXgpOwo+ ID4gLQkJb2Zfbm9kZV9wdXQobXRkX29mX25vZGUpOwo+ID4gLQo+ID4gLQkJbW9kdWxlX3B1dChU SElTX01PRFVMRSk7Cj4gPiAtCQlyZXQgPSAwOwo+ID4gLQl9Cj4gPiArCWtyZWZfcHV0KCZtdGQt PnJlZmNudCwgbXRkX2RldmljZV9yZWxlYXNlKTsKPiA+ICsJcmV0ID0gMDsKPiA+IAo+ID4gIG91 dF9lcnJvcjoKPiA+ICAJbXV0ZXhfdW5sb2NrKCZtdGRfdGFibGVfbXV0ZXgpOwo+ID4gQEAgLTEy MjgsMTkgKzEyMzAsMjEgQEAgaW50IF9fZ2V0X210ZF9kZXZpY2Uoc3RydWN0IG10ZF9pbmZvICpt dGQpCj4gPiAgCWlmICghdHJ5X21vZHVsZV9nZXQobWFzdGVyLT5vd25lcikpCj4gPiAgCQlyZXR1 cm4gLUVOT0RFVjsKPiA+IAo+ID4gKwlrcmVmX2dldCgmbXRkLT5yZWZjbnQpOwo+ID4gKwo+ID4g IAlpZiAobWFzdGVyLT5fZ2V0X2RldmljZSkgewo+ID4gIAkJZXJyID0gbWFzdGVyLT5fZ2V0X2Rl dmljZShtdGQpOwo+ID4gCj4gPiAgCQlpZiAoZXJyKSB7Cj4gPiArCQkJa3JlZl9wdXQoJm10ZC0+ cmVmY250LCBtdGRfZGV2aWNlX3JlbGVhc2UpOwo+ID4gIAkJCW1vZHVsZV9wdXQobWFzdGVyLT5v d25lcik7Cj4gPiAgCQkJcmV0dXJuIGVycjsKPiA+ICAJCX0KPiA+ICAJfQo+ID4gCj4gPiAtCW1h c3Rlci0+dXNlY291bnQrKzsKPiA+IC0KPiA+ICAJd2hpbGUgKG10ZC0+cGFyZW50KSB7Cj4gPiAt CQltdGQtPnVzZWNvdW50Kys7Cj4gPiArCQlpZiAoSVNfRU5BQkxFRChDT05GSUdfTVREX1BBUlRJ VElPTkVEX01BU1RFUikgfHwgbXRkLSAgCj4gPiA+cGFyZW50ICE9IG1hc3RlcikgIAo+ID4gKwkJ CWtyZWZfZ2V0KCZtdGQtPnBhcmVudC0+cmVmY250KTsKPiA+ICAJCW10ZCA9IG10ZC0+cGFyZW50 Owo+ID4gIAl9Cj4gPiAKPiA+IEBAIC0xMzI3LDE4ICsxMzMxLDIwIEBAIHZvaWQgX19wdXRfbXRk X2RldmljZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKPiA+ICB7Cj4gPiAgCXN0cnVjdCBtdGRfaW5m byAqbWFzdGVyID0gbXRkX2dldF9tYXN0ZXIobXRkKTsKPiA+IAo+ID4gLQl3aGlsZSAobXRkLT5w YXJlbnQpIHsKPiA+IC0JCS0tbXRkLT51c2Vjb3VudDsKPiA+IC0JCUJVR19PTihtdGQtPnVzZWNv dW50IDwgMCk7Cj4gPiAtCQltdGQgPSBtdGQtPnBhcmVudDsKPiA+IC0JfQo+ID4gKwl3aGlsZSAo bXRkICE9IG1hc3Rlcikgewo+ID4gKwkJc3RydWN0IG10ZF9pbmZvICpwYXJlbnQgPSBtdGQtPnBh cmVudDsKPiA+IAo+ID4gLQltYXN0ZXItPnVzZWNvdW50LS07Cj4gPiArCQlrcmVmX3B1dCgmbXRk LT5yZWZjbnQsIG10ZF9kZXZpY2VfcmVsZWFzZSk7Cj4gPiArCQltdGQgPSBwYXJlbnQ7Cj4gPiAr CX0KPiA+IAo+ID4gIAlpZiAobWFzdGVyLT5fcHV0X2RldmljZSkKPiA+ICAJCW1hc3Rlci0+X3B1 dF9kZXZpY2UobWFzdGVyKTsKPiA+IAo+ID4gIAltb2R1bGVfcHV0KG1hc3Rlci0+b3duZXIpOwo+ ID4gKwo+ID4gKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfTVREX1BBUlRJVElPTkVEX01BU1RFUikp Cj4gPiArCQlrcmVmX3B1dCgmbWFzdGVyLT5yZWZjbnQsIG10ZF9kZXZpY2VfcmVsZWFzZSk7Cj4g PiAgfQo+ID4gIEVYUE9SVF9TWU1CT0xfR1BMKF9fcHV0X210ZF9kZXZpY2UpOwo+ID4gCj4gPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbXRkY29yZS5oIGIvZHJpdmVycy9tdGQvbXRkY29yZS5o Cj4gPiBpbmRleCBiNWVlZmVhYmYzMTAuLmIwMTQ4NjFhMDZhNiAxMDA2NDQKPiA+IC0tLSBhL2Ry aXZlcnMvbXRkL210ZGNvcmUuaAo+ID4gKysrIGIvZHJpdmVycy9tdGQvbXRkY29yZS5oCj4gPiBA QCAtMTIsNiArMTIsNyBAQCBpbnQgX19tdXN0X2NoZWNrIGFkZF9tdGRfZGV2aWNlKHN0cnVjdCBt dGRfaW5mbwo+ID4gKm10ZCk7Cj4gPiAgaW50IGRlbF9tdGRfZGV2aWNlKHN0cnVjdCBtdGRfaW5m byAqbXRkKTsKPiA+ICBpbnQgYWRkX210ZF9wYXJ0aXRpb25zKHN0cnVjdCBtdGRfaW5mbyAqLCBj b25zdCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbgo+ID4gKiwgaW50KTsKPiA+ICBpbnQgZGVsX210ZF9w YXJ0aXRpb25zKHN0cnVjdCBtdGRfaW5mbyAqKTsKPiA+ICt2b2lkIHJlbGVhc2VfbXRkX3BhcnRp dGlvbihzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7Cj4gPiAKPiA+ICBzdHJ1Y3QgbXRkX3BhcnRpdGlv bnM7Cj4gPiAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRwYXJ0LmMgYi9kcml2ZXJz L210ZC9tdGRwYXJ0LmMKPiA+IGluZGV4IGE0NmFmZmJiMDM3ZC4uMjM0ODNkYjhmMzBjIDEwMDY0 NAo+ID4gLS0tIGEvZHJpdmVycy9tdGQvbXRkcGFydC5jCj4gPiArKysgYi9kcml2ZXJzL210ZC9t dGRwYXJ0LmMKPiA+IEBAIC0zMiw2ICszMiwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9w YXJ0aXRpb24oc3RydWN0IG10ZF9pbmZvCj4gPiAqbXRkKQo+ID4gIAlrZnJlZShtdGQpOwo+ID4g IH0KPiA+IAo+ID4gK3ZvaWQgcmVsZWFzZV9tdGRfcGFydGl0aW9uKHN0cnVjdCBtdGRfaW5mbyAq bXRkKQo+ID4gK3sKPiA+ICsJV0FSTl9PTighbGlzdF9lbXB0eSgmbXRkLT5wYXJ0Lm5vZGUpKTsK PiA+ICsJZnJlZV9wYXJ0aXRpb24obXRkKTsKPiA+ICt9Cj4gPiArCj4gPiAgc3RhdGljIHN0cnVj dCBtdGRfaW5mbyAqYWxsb2NhdGVfcGFydGl0aW9uKHN0cnVjdCBtdGRfaW5mbyAqcGFyZW50LAo+ ID4gIAkJCQkJICAgY29uc3Qgc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnQsCj4gPiAgCQkJCQkg ICBpbnQgcGFydG5vLCB1aW50NjRfdCBjdXJfb2Zmc2V0KQo+ID4gQEAgLTMwOSwxMyArMzE1LDEx IEBAIHN0YXRpYyBpbnQgX19tdGRfZGVsX3BhcnRpdGlvbihzdHJ1Y3QgbXRkX2luZm8KPiA+ICpt dGQpCj4gPiAKPiA+ICAJc3lzZnNfcmVtb3ZlX2ZpbGVzKCZtdGQtPmRldi5rb2JqLCBtdGRfcGFy dGl0aW9uX2F0dHJzKTsKPiA+IAo+ID4gKwlsaXN0X2RlbF9pbml0KCZtdGQtPnBhcnQubm9kZSk7 Cj4gPiAgCWVyciA9IGRlbF9tdGRfZGV2aWNlKG10ZCk7Cj4gPiAgCWlmIChlcnIpCj4gPiAgCQly ZXR1cm4gZXJyOwo+ID4gCj4gPiAtCWxpc3RfZGVsKCZtdGQtPnBhcnQubm9kZSk7Cj4gPiAtCWZy ZWVfcGFydGl0aW9uKG10ZCk7Cj4gPiAtCj4gPiAgCXJldHVybiAwOwo+ID4gIH0KPiA+IAo+ID4g QEAgLTMzMyw2ICszMzcsNyBAQCBzdGF0aWMgaW50IF9fZGVsX210ZF9wYXJ0aXRpb25zKHN0cnVj dCBtdGRfaW5mbwo+ID4gKm10ZCkKPiA+ICAJCQlfX2RlbF9tdGRfcGFydGl0aW9ucyhjaGlsZCk7 Cj4gPiAKPiA+ICAJCXByX2luZm8oIkRlbGV0aW5nICVzIE1URCBwYXJ0aXRpb25cbiIsIGNoaWxk LT5uYW1lKTsKPiA+ICsJCWxpc3RfZGVsX2luaXQoJmNoaWxkLT5wYXJ0Lm5vZGUpOwo+ID4gIAkJ cmV0ID0gZGVsX210ZF9kZXZpY2UoY2hpbGQpOwo+ID4gIAkJaWYgKHJldCA8IDApIHsKPiA+ICAJ CQlwcl9lcnIoIkVycm9yIHdoZW4gZGVsZXRpbmcgcGFydGl0aW9uIFwiJXNcIiAoJWQpXG4iLAo+ ID4gQEAgLTM0MCw5ICszNDUsNiBAQCBzdGF0aWMgaW50IF9fZGVsX210ZF9wYXJ0aXRpb25zKHN0 cnVjdCBtdGRfaW5mbwo+ID4gKm10ZCkKPiA+ICAJCQllcnIgPSByZXQ7Cj4gPiAgCQkJY29udGlu dWU7Cj4gPiAgCQl9Cj4gPiAtCj4gPiAtCQlsaXN0X2RlbCgmY2hpbGQtPnBhcnQubm9kZSk7Cj4g PiAtCQlmcmVlX3BhcnRpdGlvbihjaGlsZCk7Cj4gPiAgCX0KPiA+IAo+ID4gIAlyZXR1cm4gZXJy Owo+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL210ZC5oIGIvaW5jbHVkZS9saW51 eC9tdGQvbXRkLmgKPiA+IGluZGV4IDdjNThjNDQ2NjJiOC4uOTE0YTlmOTc0YmFhIDEwMDY0NAo+ ID4gLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvbXRkLmgKPiA+ICsrKyBiL2luY2x1ZGUvbGludXgv bXRkL210ZC5oCj4gPiBAQCAtMzc5LDcgKzM3OSw3IEBAIHN0cnVjdCBtdGRfaW5mbyB7Cj4gPiAK PiA+ICAJc3RydWN0IG1vZHVsZSAqb3duZXI7Cj4gPiAgCXN0cnVjdCBkZXZpY2UgZGV2Owo+ID4g LQlpbnQgdXNlY291bnQ7Cj4gPiArCXN0cnVjdCBrcmVmIHJlZmNudDsKPiA+ICAJc3RydWN0IG10 ZF9kZWJ1Z19pbmZvIGRiZzsKPiA+ICAJc3RydWN0IG52bWVtX2RldmljZSAqbnZtZW07Cj4gPiAg CXN0cnVjdCBudm1lbV9kZXZpY2UgKm90cF91c2VyX252bWVtOwo+ID4gLS0KPiA+IDIuMzQuMSAg Cj4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KTGludXggTVREIGRpc2N1c3Npb24gbWFpbGluZyBsaXN0Cmh0dHA6Ly9saXN0cy5pbmZyYWRl YWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtbXRkLwo= 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 92FFDC001DC for ; Sat, 15 Jul 2023 15:41:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229973AbjGOPl0 (ORCPT ); Sat, 15 Jul 2023 11:41:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36296 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229629AbjGOPlZ (ORCPT ); Sat, 15 Jul 2023 11:41:25 -0400 Received: from relay6-d.mail.gandi.net (relay6-d.mail.gandi.net [IPv6:2001:4b98:dc4:8::226]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EB9282D7B; Sat, 15 Jul 2023 08:41:22 -0700 (PDT) Received: by mail.gandi.net (Postfix) with ESMTPSA id 0794BC0004; Sat, 15 Jul 2023 15:41:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1689435679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=dx1hsltG+GS7GVxSpUxmJ8g4K6vQcrTXG0/HvBc/tbU=; b=A0YL2XjHakazCSZxBEAgvvFz+zO/q6MvW/VWQbL4uXtrm77eLe7cnit7/T8i/AuGOl7OmT YN++8QaxP9uM3tgqSVdbFUnWRWqxsOJV5bWYasJpx+Cy1LYzoD8PftOmoRYFj21IyBCAI5 JO0t/bxRZzXCQOfu1e9sM0qCXBwrcUQdH+RihsTsFt3DIFR2JQ1cDTr+Qcmrnb0SR6Ybme fcXexHoisB0ENB+2rnbwpWzBjYQu7I5XizRbcqeC7dmqQaXYcWpZPzLjYOI2u7yUXhT3xr SXoQdjTlkuldFhbZ0dpwyQkGtKicY/Lv7sYc5w9KkLSHvhRY8j1jFssNmZ8VQQ== Date: Sat, 15 Jul 2023 17:41:12 +0200 From: Miquel Raynal To: Fabrizio Castro Cc: Alexander Usyskin , Richard Weinberger , Vignesh Raghavendra , "linux-mtd@lists.infradead.org" , "linux-kernel@vger.kernel.org" , Tomas Winkler , Vitaly Lubart , Andy Shevchenko , Geert Uytterhoeven , Biju Das , "linux-renesas-soc@vger.kernel.org" , Chris Paterson Subject: Re: [PATCH 1/2] mtd: use refcount to prevent corruption Message-ID: <20230715174112.3909e43f@xps-13> In-Reply-To: References: <20230620131905.648089-1-alexander.usyskin@intel.com> <20230620131905.648089-2-alexander.usyskin@intel.com> Organization: Bootlin X-Mailer: Claws Mail 4.0.0 (GTK+ 3.24.33; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-GND-Sasl: miquel.raynal@bootlin.com Precedence: bulk List-ID: X-Mailing-List: linux-renesas-soc@vger.kernel.org Hi Fabrizio, fabrizio.castro.jz@renesas.com wrote on Fri, 14 Jul 2023 16:10:45 +0000: > Dear All, >=20 > I am sorry for reopening this topic, but as it turns out (after bisecting > linux-next/master) this patch is interfering with a use case I am working > on. >=20 > I am using a Renesas RZ/V2M EVK v2.0 platform, I have an SPI NOR memory > ("micron,mt25ql256a") wired up to a connector on the platform, the SPI > master is using driver (built as module): > drivers/spi/spi-rzv2m-csi.c >=20 > Although the board device tree in mainline does not reflect the connection > of CSI4 (which is the SPI master) from the SoC to the "micron,mt25ql256a" > (SPI slave device), my local device tree comes with the necessary definit= ions. >=20 > Without this patch, when I load up the module, I get the below 3 devices: > /dev/mtd0 > /dev/mtd0ro > /dev/mtdblock0 >=20 > They get cleaned up correctly upon module removal. > I can reload the same module, and everything works just fine. >=20 > With this patch applied, when I load up the module, I get the same 3 > devices: > /dev/mtd0 > /dev/mtd0ro > /dev/mtdblock0 >=20 > Upon removal, the below 2 devices still hang around: > /dev/mtd0 > /dev/mtd0ro Looks like the refcounting change is still not even in some cases, can you investigate and come up with a proper patch? You can either improve the existing patch or revert it and try your own approach if deemed better. Thanks, Miqu=C3=A8l > Preventing the module from being (re)loaded correctly: > rzv2m_csi a4020200.spi: error -EBUSY: register controller failed > rzv2m_csi: probe of a4020200.spi failed with error -16 >=20 > Are you guys aware of this sort of side effect? >=20 > Thanks, > Fab >=20 > > From: Alexander Usyskin > > Subject: [PATCH 1/2] mtd: use refcount to prevent corruption > >=20 > > From: Tomas Winkler > >=20 > > When underlying device is removed mtd core will crash > > in case user space is holding open handle. > > Need to use proper refcounting so device is release > > only when has no users. > >=20 > > Signed-off-by: Tomas Winkler > > Signed-off-by: Alexander Usyskin > > --- > > drivers/mtd/mtdcore.c | 72 ++++++++++++++++++++++------------------ > > - > > drivers/mtd/mtdcore.h | 1 + > > drivers/mtd/mtdpart.c | 14 ++++---- > > include/linux/mtd/mtd.h | 2 +- > > 4 files changed, 49 insertions(+), 40 deletions(-) > >=20 > > diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c > > index abf4cb58a8ab..84bd1878367d 100644 > > --- a/drivers/mtd/mtdcore.c > > +++ b/drivers/mtd/mtdcore.c > > @@ -93,10 +93,33 @@ static void mtd_release(struct device *dev) > > struct mtd_info *mtd =3D dev_get_drvdata(dev); > > dev_t index =3D MTD_DEVT(mtd->index); > >=20 > > + if (mtd_is_partition(mtd)) > > + release_mtd_partition(mtd); > > + > > /* remove /dev/mtdXro node */ > > device_destroy(&mtd_class, index + 1); > > } > >=20 > > +static void mtd_device_release(struct kref *kref) > > +{ > > + struct mtd_info *mtd =3D container_of(kref, struct mtd_info, > > refcnt); > > + > > + debugfs_remove_recursive(mtd->dbg.dfs_dir); > > + > > + /* Try to remove the NVMEM provider */ > > + nvmem_unregister(mtd->nvmem); > > + > > + device_unregister(&mtd->dev); > > + > > + /* Clear dev so mtd can be safely re-registered later if desired > > */ > > + memset(&mtd->dev, 0, sizeof(mtd->dev)); > > + > > + idr_remove(&mtd_idr, mtd->index); > > + of_node_put(mtd_get_of_node(mtd)); > > + > > + module_put(THIS_MODULE); > > +} > > + > > #define MTD_DEVICE_ATTR_RO(name) \ > > static DEVICE_ATTR(name, 0444, mtd_##name##_show, NULL) > >=20 > > @@ -666,7 +689,7 @@ int add_mtd_device(struct mtd_info *mtd) > > } > >=20 > > mtd->index =3D i; > > - mtd->usecount =3D 0; > > + kref_init(&mtd->refcnt); > >=20 > > /* default value if not set by driver */ > > if (mtd->bitflip_threshold =3D=3D 0) > > @@ -779,7 +802,6 @@ int del_mtd_device(struct mtd_info *mtd) > > { > > int ret; > > struct mtd_notifier *not; > > - struct device_node *mtd_of_node; > >=20 > > mutex_lock(&mtd_table_mutex); > >=20 > > @@ -793,28 +815,8 @@ int del_mtd_device(struct mtd_info *mtd) > > list_for_each_entry(not, &mtd_notifiers, list) > > not->remove(mtd); > >=20 > > - if (mtd->usecount) { > > - printk(KERN_NOTICE "Removing MTD device #%d (%s) with use > > count %d\n", > > - mtd->index, mtd->name, mtd->usecount); > > - ret =3D -EBUSY; > > - } else { > > - mtd_of_node =3D mtd_get_of_node(mtd); > > - debugfs_remove_recursive(mtd->dbg.dfs_dir); > > - > > - /* Try to remove the NVMEM provider */ > > - nvmem_unregister(mtd->nvmem); > > - > > - device_unregister(&mtd->dev); > > - > > - /* Clear dev so mtd can be safely re-registered later if > > desired */ > > - memset(&mtd->dev, 0, sizeof(mtd->dev)); > > - > > - idr_remove(&mtd_idr, mtd->index); > > - of_node_put(mtd_of_node); > > - > > - module_put(THIS_MODULE); > > - ret =3D 0; > > - } > > + kref_put(&mtd->refcnt, mtd_device_release); > > + ret =3D 0; > >=20 > > out_error: > > mutex_unlock(&mtd_table_mutex); > > @@ -1228,19 +1230,21 @@ int __get_mtd_device(struct mtd_info *mtd) > > if (!try_module_get(master->owner)) > > return -ENODEV; > >=20 > > + kref_get(&mtd->refcnt); > > + > > if (master->_get_device) { > > err =3D master->_get_device(mtd); > >=20 > > if (err) { > > + kref_put(&mtd->refcnt, mtd_device_release); > > module_put(master->owner); > > return err; > > } > > } > >=20 > > - master->usecount++; > > - > > while (mtd->parent) { > > - mtd->usecount++; > > + if (IS_ENABLED(CONFIG_MTD_PARTITIONED_MASTER) || mtd- =20 > > >parent !=3D master) =20 > > + kref_get(&mtd->parent->refcnt); > > mtd =3D mtd->parent; > > } > >=20 > > @@ -1327,18 +1331,20 @@ void __put_mtd_device(struct mtd_info *mtd) > > { > > struct mtd_info *master =3D mtd_get_master(mtd); > >=20 > > - while (mtd->parent) { > > - --mtd->usecount; > > - BUG_ON(mtd->usecount < 0); > > - mtd =3D mtd->parent; > > - } > > + while (mtd !=3D master) { > > + struct mtd_info *parent =3D mtd->parent; > >=20 > > - master->usecount--; > > + kref_put(&mtd->refcnt, mtd_device_release); > > + mtd =3D parent; > > + } > >=20 > > if (master->_put_device) > > master->_put_device(master); > >=20 > > module_put(master->owner); > > + > > + if (IS_ENABLED(CONFIG_MTD_PARTITIONED_MASTER)) > > + kref_put(&master->refcnt, mtd_device_release); > > } > > EXPORT_SYMBOL_GPL(__put_mtd_device); > >=20 > > diff --git a/drivers/mtd/mtdcore.h b/drivers/mtd/mtdcore.h > > index b5eefeabf310..b014861a06a6 100644 > > --- a/drivers/mtd/mtdcore.h > > +++ b/drivers/mtd/mtdcore.h > > @@ -12,6 +12,7 @@ int __must_check add_mtd_device(struct mtd_info > > *mtd); > > int del_mtd_device(struct mtd_info *mtd); > > int add_mtd_partitions(struct mtd_info *, const struct mtd_partition > > *, int); > > int del_mtd_partitions(struct mtd_info *); > > +void release_mtd_partition(struct mtd_info *mtd); > >=20 > > struct mtd_partitions; > >=20 > > diff --git a/drivers/mtd/mtdpart.c b/drivers/mtd/mtdpart.c > > index a46affbb037d..23483db8f30c 100644 > > --- a/drivers/mtd/mtdpart.c > > +++ b/drivers/mtd/mtdpart.c > > @@ -32,6 +32,12 @@ static inline void free_partition(struct mtd_info > > *mtd) > > kfree(mtd); > > } > >=20 > > +void release_mtd_partition(struct mtd_info *mtd) > > +{ > > + WARN_ON(!list_empty(&mtd->part.node)); > > + free_partition(mtd); > > +} > > + > > static struct mtd_info *allocate_partition(struct mtd_info *parent, > > const struct mtd_partition *part, > > int partno, uint64_t cur_offset) > > @@ -309,13 +315,11 @@ static int __mtd_del_partition(struct mtd_info > > *mtd) > >=20 > > sysfs_remove_files(&mtd->dev.kobj, mtd_partition_attrs); > >=20 > > + list_del_init(&mtd->part.node); > > err =3D del_mtd_device(mtd); > > if (err) > > return err; > >=20 > > - list_del(&mtd->part.node); > > - free_partition(mtd); > > - > > return 0; > > } > >=20 > > @@ -333,6 +337,7 @@ static int __del_mtd_partitions(struct mtd_info > > *mtd) > > __del_mtd_partitions(child); > >=20 > > pr_info("Deleting %s MTD partition\n", child->name); > > + list_del_init(&child->part.node); > > ret =3D del_mtd_device(child); > > if (ret < 0) { > > pr_err("Error when deleting partition \"%s\" (%d)\n", > > @@ -340,9 +345,6 @@ static int __del_mtd_partitions(struct mtd_info > > *mtd) > > err =3D ret; > > continue; > > } > > - > > - list_del(&child->part.node); > > - free_partition(child); > > } > >=20 > > return err; > > diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h > > index 7c58c44662b8..914a9f974baa 100644 > > --- a/include/linux/mtd/mtd.h > > +++ b/include/linux/mtd/mtd.h > > @@ -379,7 +379,7 @@ struct mtd_info { > >=20 > > struct module *owner; > > struct device dev; > > - int usecount; > > + struct kref refcnt; > > struct mtd_debug_info dbg; > > struct nvmem_device *nvmem; > > struct nvmem_device *otp_user_nvmem; > > -- > > 2.34.1 =20 >=20