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 33F18C77B73 for ; Fri, 26 May 2023 17:04:18 +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=vCKw9Ekny9yimklQUaZWLZnDNW3GFPivO26GZRT0ql0=; b=EHZzXbDe4rVxPL fxBpTbxd2sTxO6kTVRHBbAW5AhJBLZ4zg91E3ka+jcFRT/fPLkc+XKjC7c5wr1jKyZTGnsusBRnB+ hdorcblHFU3J4RkDlqywuenUaLyZZ+l/MygZ/om9L/DDQkvsuG7K/N7nK5Z5xdMVs68jMd0xZ1KNB AH05qKSAGbdf3ILpwUEjqQRBwRdH9sSBMdHVhP9sepDuNyYVuVqVqepvpZCRSW723WhAPq9cS6kgo IvDe9GtadGvKE9gWE+VTAfspFrullI5Fk7bZ6Wc2NpgQB0vH9OPfvhLwOfXu96F4zMtfGBtDA5I25 NRISUbPp4p7KztIN+Clw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1q2arC-003Dwm-2L; Fri, 26 May 2023 17:04:02 +0000 Received: from relay4-d.mail.gandi.net ([2001:4b98:dc4:8::224]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1q2ar8-003DtZ-2W; Fri, 26 May 2023 17:04:02 +0000 X-GND-Sasl: miquel.raynal@bootlin.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1685120631; 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=wZAtIbKobVRsNsvxbSGu/98XFYPX6nWAdRcnWjHYmAc=; b=DWnWEw34M1++02P5eZv/kDxy9QYvXm7LFXTl0Cx9V9dF/KkiP9Q0z6vGT76rIgZuftGwtd soy8mqDa3fYzHl8BhtYghInOVmxbGJaWgtdFCuduC3UYks0rBIBk2Ow3U9lV9JZGN091bR OnRNB2eOTcssbygDV0LzJduArd/TflIb2T2bcGEbUli9kT9dL8TzrSxjZEgHs0kg4AdXrH ++NaOl9zOjA3Ep9ijnE8mm7ZwI1m85f6JaX+U8WKeGqmD2D/9J+m83Wu6CQ4FKxdmRdZ2h BVluWATk1+PduKzVekVvELsVvTs2i3bQp28gmXSq4I8+OJ+NBb8K6/2vLKTeEg== X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com Received: by mail.gandi.net (Postfix) with ESMTPSA id 112E1E0005; Fri, 26 May 2023 17:03:48 +0000 (UTC) Date: Fri, 26 May 2023 19:03:47 +0200 From: Miquel Raynal To: Arseniy Krasnov Cc: Liang Yang , Richard Weinberger , Vignesh Raghavendra , Neil Armstrong , Kevin Hilman , Jerome Brunet , Martin Blumenstingl , Yixun Lan , Jianxin Pan , , , , , , Subject: Re: [PATCH v4 2/5] mtd: rawnand: meson: move OOB to non-protected ECC area Message-ID: <20230526190347.6e34a2be@xps-13> In-Reply-To: References: <20230515094440.3552094-1-AVKrasnov@sberdevices.ru> <20230515094440.3552094-3-AVKrasnov@sberdevices.ru> <20230522173334.7aa6f917@xps-13> Organization: Bootlin X-Mailer: Claws Mail 4.0.0 (GTK+ 3.24.33; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230526_100359_158773_58E7007D X-CRM114-Status: GOOD ( 56.28 ) X-BeenThere: linux-amlogic@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org SGkgQXJzZW5peSwKCmF2a3Jhc25vdkBzYmVyZGV2aWNlcy5ydSB3cm90ZSBvbiBUdWUsIDIzIE1h eSAyMDIzIDIwOjE3OjE0ICswMzAwOgoKPiBIZWxsbyBNaXF1ZWwhIFRoYW5rcyBmb3IgZGV0YWls ZWQgcmV2aWV3IQo+IAo+IE9uIDIyLjA1LjIwMjMgMTg6MzMsIE1pcXVlbCBSYXluYWwgd3JvdGU6 Cj4gPiBIaSBBcnNlbml5LAo+ID4gCj4gPiBBVktyYXNub3ZAc2JlcmRldmljZXMucnUgd3JvdGUg b24gTW9uLCAxNSBNYXkgMjAyMyAxMjo0NDozNiArMDMwMDoKPiA+IAo+ID4gVGhlIHRpdGxlIHNo b3VsZCBwZXJoYXBzIGJlICJvbmx5IGV4cG9zZSB1bnByb3RlY3RlZCB1c2VyIE9PQiBieXRlcyIu Cj4gPiAgIAo+ID4+IFRoaXMgbW92ZXMgZnJlZSBieXRlcyBvZiBPT0IgdG8gbm9uLXByb3RlY3Rl ZCBFQ0MgYXJlYS4gSXQgaXMgbmVlZGVkIHRvCj4gPj4gbWFrZSBKRkZTMiB3b3JrcyBjb3JyZWN0 bHkgd2l0aCB0aGlzIE5BTkQgY29udHJvbGxlci4gUHJvYmxlbSBmaXJlcyB3aGVuCj4gPj4gSkZG UzIgZHJpdmVyIHdyaXRlcyBjbGVhbm1hcmtlciB0byBzb21lIHBhZ2UgYW5kIGxhdGVyIGl0IHRy aWVzIHRvIHdyaXRlCj4gPj4gdG8gdGhpcyBwYWdlIC0gd3JpdGUgd2lsbCBiZSBkb25lIHN1Y2Nl c3NmdWxseSwgYnV0IGFmdGVyIHRoYXQgc3VjaCBwYWdlCj4gPj4gYmVjb21lcyB1bnJlYWRhYmxl IGR1ZSB0byBpbnZhbGlkIEVDQyBjb2Rlcy4gVGhpcyBoYXBwZW5zIGJlY2F1c2Ugc2Vjb25kCj4g Pj4gd3JpdGUgbmVlZHMgdG8gdXBkYXRlIEVDQyBjb2RlcywgYnV0IGl0IGlzIGltcG9zc2libGUg dG8gZG8gaXQgY29ycmVjdGx5Cj4gPj4gd2l0aG91dCBibG9jayBlcmFzZS4gU28gaWRlYSBvZiB0 aGlzIHBhdGNoIGlzIHRvICAKPiA+IAo+ID4gIi4uLiBpcyB0byB1c2UgdGhlIHVucHJvdGVjdGVk IE9PQiBhcmVhIHRvIHN0b3JlIHRoZSBjbGVhbm1hcmtlcnMsIHNvCj4gPiB0aGF0IHRoZXkgY2Fu IGJlIHdyaXR0ZW4gYnkgdGhlIGZpbGVzeXN0ZW0gd2l0aG91dCBjYXJpbmcgbXVjaCBhYm91dAo+ ID4gdGhlIHBhZ2UgYmVpbmcgZW1wdHkgb3Igbm90OiB0aGUgRUNDIGNvZGVzIHdpbGwgbm90IGJl IHdyaXR0ZW4gYW55d2F5LiIKPiA+ID8gIAo+IAo+IE9rCj4gCj4gPiAKPiA+IEpGRlMyIGlzIG9u bHkgdXNlZnVsIG9uIHRpbnkgTkFORCBkZXZpY2VzLCB3aGVyZSBVQkkgZG9lcyBub3QgZml0LAo+ ID4gd2hpY2ggYXJlIHVzdWFsbHkgdHJ1ZSBTTEMgZmxhc2hlcywgd2l0aCB0aGUgY2FwYWJpbGl0 eSBvZiB3cml0aW5nCj4gPiBhIHBhZ2Ugd2l0aCBlbXB0eSAoMHhGRikgZGF0YSwgYW5kIHN0aWxs IGJlIGFibGUgdG8gd3JpdGUgYWN0dWFsIGRhdGEKPiA+IHRvIGl0IGxhdGVyIGluIGEgc2Vjb25k IHdyaXRlLiAgCj4gCj4gWW91IG1lYW4gdG8gaW5jbHVkZSB0ZXh0IGFib3ZlIHRvIGNvbW1pdCBt ZXNzYWdlIGFsc28/CgpZZXMsIEkgYmVsaWV2ZSB0aGlzIGRlc2VydmVzIHRvIGJlIGluIHRoZSBj b21taXQgbWVzc2FnZSBhcyB3ZWxsIDopCgo+IAo+ID4gICAKPiA+PiBzcGxpdCBhY2Nlc3NlcyB0 byBPT0IKPiA+PiBmcmVlIGJ5dGVzIGFuZCBkYXRhIG9uIGVhY2ggcGFnZSAtIG5vdyBib3RoIG9m IHRoZW0gZG9lcyBub3QgZGVwZW5kcyBvbgo+ID4+IGVhY2ggb3RoZXIuCj4gPj4KPiA+PiBTaWdu ZWQtb2ZmLWJ5OiBBcnNlbml5IEtyYXNub3YgPEFWS3Jhc25vdkBzYmVyZGV2aWNlcy5ydT4KPiA+ PiAtLS0KPiA+PiAgZHJpdmVycy9tdGQvbmFuZC9yYXcvbWVzb25fbmFuZC5jIHwgMTkyICsrKysr KysrKysrKysrKysrKysrKysrKy0tLS0tLQo+ID4+ICAxIGZpbGUgY2hhbmdlZCwgMTU1IGluc2Vy dGlvbnMoKyksIDM3IGRlbGV0aW9ucygtKQo+ID4+Cj4gPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv bXRkL25hbmQvcmF3L21lc29uX25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvcmF3L21lc29uX25h bmQuYwo+ID4+IGluZGV4IDJmNGQ4Yzg0MTg2Yi4uODUyNmE2Yjg3NzIwIDEwMDY0NAo+ID4+IC0t LSBhL2RyaXZlcnMvbXRkL25hbmQvcmF3L21lc29uX25hbmQuYwo+ID4+ICsrKyBiL2RyaXZlcnMv bXRkL25hbmQvcmF3L21lc29uX25hbmQuYwo+ID4+IEBAIC0xMDgsNiArMTA4LDkgQEAKPiA+PiAg Cj4gPj4gICNkZWZpbmUgUEVSX0lORk9fQllURQkJOAo+ID4+ICAKPiA+PiArI2RlZmluZSBORkNf VVNFUl9CWVRFUwkJMgo+ID4+ICsjZGVmaW5lIE5GQ19PT0JfUEVSX0VDQyhuYW5kKQkoKG5hbmQp LT5lY2MuYnl0ZXMgKyBORkNfVVNFUl9CWVRFUykKPiA+PiArCj4gPj4gIHN0cnVjdCBtZXNvbl9u ZmNfbmFuZF9jaGlwIHsKPiA+PiAgCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKPiA+PiAgCXN0cnVj dCBuYW5kX2NoaXAgbmFuZDsKPiA+PiBAQCAtMTIyLDYgKzEyNSw3IEBAIHN0cnVjdCBtZXNvbl9u ZmNfbmFuZF9jaGlwIHsKPiA+PiAgCXU4ICpkYXRhX2J1ZjsKPiA+PiAgCV9fbGU2NCAqaW5mb19i dWY7Cj4gPj4gIAl1MzIgbnNlbHM7Cj4gPj4gKwl1OCAqb29iX2J1ZjsKPiA+PiAgCXU4IHNlbHNb XTsKPiA+PiAgfTsKPiA+PiAgCj4gPj4gQEAgLTMzOCw3ICszNDIsNyBAQCBzdGF0aWMgdTggKm1l c29uX25mY19vb2JfcHRyKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsIGludCBpKQo+ID4+ICAJc3Ry dWN0IG1lc29uX25mY19uYW5kX2NoaXAgKm1lc29uX2NoaXAgPSB0b19tZXNvbl9uYW5kKG5hbmQp Owo+ID4+ICAJaW50IGxlbjsKPiA+PiAgCj4gPj4gLQlsZW4gPSBuYW5kLT5lY2Muc2l6ZSAqIChp ICsgMSkgKyAobmFuZC0+ZWNjLmJ5dGVzICsgMikgKiBpOwo+ID4+ICsJbGVuID0gbmFuZC0+ZWNj LnNpemUgKiAoaSArIDEpICsgTkZDX09PQl9QRVJfRUNDKG5hbmQpICogaTsgIAo+ID4gCj4gPiBU aGlzLi4uCj4gPiAgIAo+ID4+ICAKPiA+PiAgCXJldHVybiBtZXNvbl9jaGlwLT5kYXRhX2J1ZiAr IGxlbjsKPiA+PiAgfQo+ID4+IEBAIC0zNDksNyArMzUzLDcgQEAgc3RhdGljIHU4ICptZXNvbl9u ZmNfZGF0YV9wdHIoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgaW50IGkpCj4gPj4gIAlpbnQgbGVu LCB0ZW1wOwo+ID4+ICAKPiA+PiAgCXRlbXAgPSBuYW5kLT5lY2Muc2l6ZSArIG5hbmQtPmVjYy5i eXRlczsKPiA+PiAtCWxlbiA9ICh0ZW1wICsgMikgKiBpOwo+ID4+ICsJbGVuID0gKHRlbXAgKyBO RkNfVVNFUl9CWVRFUykgKiBpOyAgCj4gPiAKPiA+IC4uLiBhbmQgdGhpcyAoc2FtZSBiZWxvdykK PiA+IAo+ID4gYXJlIHB1cmVseSBjb3NtZXRpYywgc2hvdWxkIGJlIGluIGEgcGF0Y2ggYXNpZGUu Cj4gPiAgIAo+IAo+IEFjaywgaSdsbCBtb3ZlIGNvc21ldGljIHVwZGF0ZXMgdG8gc2VwYXJhdGUg cGF0Y2guCj4gCj4gPj4gIAo+ID4+ICAJcmV0dXJuIG1lc29uX2NoaXAtPmRhdGFfYnVmICsgbGVu Owo+ID4+ICB9Cj4gPj4gQEAgLTM1NywyOSArMzYxLDQ3IEBAIHN0YXRpYyB1OCAqbWVzb25fbmZj X2RhdGFfcHRyKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsIGludCBpKQo+ID4+ICBzdGF0aWMgdm9p ZCBtZXNvbl9uZmNfZ2V0X2RhdGFfb29iKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsCj4gPj4gIAkJ CQkgICB1OCAqYnVmLCB1OCAqb29iYnVmKQo+ID4+ICB7Cj4gPj4gKwlzdHJ1Y3QgbWVzb25fbmZj X25hbmRfY2hpcCAqbWVzb25fY2hpcCA9IHRvX21lc29uX25hbmQobmFuZCk7Cj4gPj4gKwlzdHJ1 Y3QgbXRkX2luZm8gKm10ZCA9IG5hbmRfdG9fbXRkKG5hbmQpOwo+ID4+ICAJaW50IGksIG9vYl9s ZW4gPSAwOwo+ID4+ICAJdTggKmRzcmMsICpvc3JjOwo+ID4+ICsJdTggKm9vYnRhaWw7Cj4gPj4g IAo+ID4+IC0Jb29iX2xlbiA9IG5hbmQtPmVjYy5ieXRlcyArIDI7Cj4gPj4gKwlvb2JfbGVuID0g TkZDX09PQl9QRVJfRUNDKG5hbmQpOwo+ID4+ICAJZm9yIChpID0gMDsgaSA8IG5hbmQtPmVjYy5z dGVwczsgaSsrKSB7Cj4gPj4gIAkJaWYgKGJ1Zikgewo+ID4+ICAJCQlkc3JjID0gbWVzb25fbmZj X2RhdGFfcHRyKG5hbmQsIGkpOwo+ID4+ICAJCQltZW1jcHkoYnVmLCBkc3JjLCBuYW5kLT5lY2Mu c2l6ZSk7Cj4gPj4gIAkJCWJ1ZiArPSBuYW5kLT5lY2Muc2l6ZTsKPiA+PiAgCQl9Cj4gPj4gLQkJ b3NyYyA9IG1lc29uX25mY19vb2JfcHRyKG5hbmQsIGkpOwo+ID4+IC0JCW1lbWNweShvb2JidWYs IG9zcmMsIG9vYl9sZW4pOwo+ID4+IC0JCW9vYmJ1ZiArPSBvb2JfbGVuOwo+ID4+ICsKPiA+PiAr CQlpZiAob29iYnVmKSB7Cj4gPj4gKwkJCW9zcmMgPSBtZXNvbl9uZmNfb29iX3B0cihuYW5kLCBp KTsKPiA+PiArCQkJbWVtY3B5KG9vYmJ1Ziwgb3NyYywgb29iX2xlbik7Cj4gPj4gKwkJCW9vYmJ1 ZiArPSBvb2JfbGVuOwo+ID4+ICsJCX0KPiA+PiAgCX0KPiA+PiArCj4gPj4gKwlpZiAoIW9vYmJ1 ZikKPiA+PiArCQlyZXR1cm47ICAKPiA+IAo+ID4gVGhlIHdob2xlICJpZiAob29iYnVmKSIgbG9n aWMgaXMgbmljZSB0byBoYXZlLCBidXQgc2hvdWxkIGFzIHdlbGwgYmUgaW4KPiA+IGEgZGVkaWNh dGVkIHBhdGNoLiAgCj4gCj4gU29ycnksIFlvdSBtZWFuIHRoYXQgdGhpcyBsb2dpYyBpbXBsZW1l bnRzIHJlYWQgb2YgRUNDIGNvZGVzPyBBbmQgbm90Cj4gcmVsYXRlZCB0byBPT0IgbGF5b3V0IHVw ZGF0ZSBpbiB0aGlzIHBhdGNoPwoKWW91IG5lZWQgdG8gbWFrZSBjb3NtZXRpYyBjaGFuZ2VzIGlu IGEgZmlyc3QgcGF0Y2ggKG9yIGV2ZW4gaW4gc2V2ZXJhbApwYXRjaGVzIGlmIHRoZXkgYXJlIG5v dCByZWxhdGVkKSwgdGhlbiBpbiBhbm90aGVyIHBhdGNoIHlvdSBtaWdodCBtYWtlCmFkZGl0aW9u cyBsaWtlIGEgYmV0dGVyIGhhbmRsaW5nIG9mIHRoZSBPT0IsIGFuZCBhbnkgY2hhbmdlIGluIHRo ZQpsYXlvdXQgbWlnaHQgY29tZSBsYXN0LiBJIGp1c3Qgd2FudCB0byBzcGxpdCB0aGUgcGF0Y2gg dG8gbWFrZQp1bmRlcnN0YW5kYWJsZSBhdG9taWMgY2hhbmdlcyAoYWxzbyBlYXNpZXIgdG8gcmV2 aWV3KS4KCjEgYXRvbWljIGNoYW5nZSA9PSAxIHBhdGNoCgo+ID4gICAKPiA+PiArCj4gPj4gKwlv b2J0YWlsID0gbWVzb25fY2hpcC0+ZGF0YV9idWYgKyBuYW5kLT5lY2Muc3RlcHMgKgo+ID4+ICsJ CSAgKG5hbmQtPmVjYy5zaXplICsgb29iX2xlbik7Cj4gPj4gKwo+ID4+ICsJLyogJ29vYmJ1Zicg aWYgYWxyZWFkeSBzaGlmdGVkIHRvIHRoZSBzdGFydCBvZiB1bnVzZWQgYXJlYS4gKi8gIAo+ID4g Cj4gPiAJCSAgICBpcz8KPiA+IHMvdW51c2VkL3VzZXIvPyBJJ20gbm90IHN1cmUgSSBnZXQgdGhl IGNvbW1lbnQuICAKPiAKPiBZZXMsIG5vdCBjbGVhciBjb21tZW50Lgo+IAo+ID4gICAKPiA+PiAr CW1lbWNweShvb2JidWYsIG9vYnRhaWwsIG10ZC0+b29ic2l6ZSAtIG5hbmQtPmVjYy5zdGVwcyAq IG9vYl9sZW4pOwo+ID4+ICB9Cj4gPj4gIAo+ID4+ICBzdGF0aWMgdm9pZCBtZXNvbl9uZmNfc2V0 X2RhdGFfb29iKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsCj4gPj4gIAkJCQkgICBjb25zdCB1OCAq YnVmLCB1OCAqb29iYnVmKQo+ID4+ICB7Cj4gPj4gKwlzdHJ1Y3QgbWVzb25fbmZjX25hbmRfY2hp cCAqbWVzb25fY2hpcCA9IHRvX21lc29uX25hbmQobmFuZCk7Cj4gPj4gKwlzdHJ1Y3QgbXRkX2lu Zm8gKm10ZCA9IG5hbmRfdG9fbXRkKG5hbmQpOwo+ID4+ICAJaW50IGksIG9vYl9sZW4gPSAwOwo+ ID4+ICAJdTggKmRzcmMsICpvc3JjOwo+ID4+ICsJdTggKm9vYnRhaWw7Cj4gPj4gIAo+ID4+IC0J b29iX2xlbiA9IG5hbmQtPmVjYy5ieXRlcyArIDI7Cj4gPj4gKwlvb2JfbGVuID0gTkZDX09PQl9Q RVJfRUNDKG5hbmQpOwo+ID4+ICAJZm9yIChpID0gMDsgaSA8IG5hbmQtPmVjYy5zdGVwczsgaSsr KSB7Cj4gPj4gIAkJaWYgKGJ1Zikgewo+ID4+ICAJCQlkc3JjID0gbWVzb25fbmZjX2RhdGFfcHRy KG5hbmQsIGkpOwo+ID4+IEBAIC0zOTAsNiArNDEyLDEyIEBAIHN0YXRpYyB2b2lkIG1lc29uX25m Y19zZXRfZGF0YV9vb2Ioc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwKPiA+PiAgCQltZW1jcHkob3Ny Yywgb29iYnVmLCBvb2JfbGVuKTsKPiA+PiAgCQlvb2JidWYgKz0gb29iX2xlbjsKPiA+PiAgCX0K PiA+PiArCj4gPj4gKwlvb2J0YWlsID0gbWVzb25fY2hpcC0+ZGF0YV9idWYgKyBuYW5kLT5lY2Mu c3RlcHMgKgo+ID4+ICsJCSAgKG5hbmQtPmVjYy5zaXplICsgb29iX2xlbik7Cj4gPj4gKwo+ID4+ ICsJLyogJ29vYmJ1ZicgaWYgYWxyZWFkeSBzaGlmdGVkIHRvIHRoZSBzdGFydCBvZiB1bnVzZWQg YXJlYS4gKi8KPiA+PiArCW1lbWNweShvb2J0YWlsLCBvb2JidWYsIG10ZC0+b29ic2l6ZSAtIG5h bmQtPmVjYy5zdGVwcyAqIG9vYl9sZW4pOwo+ID4+ICB9Cj4gPj4gIAo+ID4+ICBzdGF0aWMgaW50 IG1lc29uX25mY19xdWV1ZV9yYihzdHJ1Y3QgbWVzb25fbmZjICpuZmMsIGludCB0aW1lb3V0X21z LCBpbnQgY21kX3JlYWQwKQo+ID4+IEBAIC00MzYsMjUgKzQ2NCwxMiBAQCBzdGF0aWMgdm9pZCBt ZXNvbl9uZmNfc2V0X3VzZXJfYnl0ZShzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLCB1OCAqb29iX2J1 ZikKPiA+PiAgewo+ID4+ICAJc3RydWN0IG1lc29uX25mY19uYW5kX2NoaXAgKm1lc29uX2NoaXAg PSB0b19tZXNvbl9uYW5kKG5hbmQpOwo+ID4+ICAJX19sZTY0ICppbmZvOwo+ID4+IC0JaW50IGks IGNvdW50Owo+ID4+IC0KPiA+PiAtCWZvciAoaSA9IDAsIGNvdW50ID0gMDsgaSA8IG5hbmQtPmVj Yy5zdGVwczsgaSsrLCBjb3VudCArPSAyKSB7Cj4gPj4gLQkJaW5mbyA9ICZtZXNvbl9jaGlwLT5p bmZvX2J1ZltpXTsKPiA+PiAtCQkqaW5mbyB8PSBvb2JfYnVmW2NvdW50XTsKPiA+PiAtCQkqaW5m byB8PSBvb2JfYnVmW2NvdW50ICsgMV0gPDwgODsKPiA+PiAtCX0KPiA+PiAtfQo+ID4+IC0KPiA+ PiAtc3RhdGljIHZvaWQgbWVzb25fbmZjX2dldF91c2VyX2J5dGUoc3RydWN0IG5hbmRfY2hpcCAq bmFuZCwgdTggKm9vYl9idWYpCj4gPj4gLXsKPiA+PiAtCXN0cnVjdCBtZXNvbl9uZmNfbmFuZF9j aGlwICptZXNvbl9jaGlwID0gdG9fbWVzb25fbmFuZChuYW5kKTsKPiA+PiAtCV9fbGU2NCAqaW5m bzsKPiA+PiAtCWludCBpLCBjb3VudDsKPiA+PiArCWludCBpOwo+ID4+ICAKPiA+PiAtCWZvciAo aSA9IDAsIGNvdW50ID0gMDsgaSA8IG5hbmQtPmVjYy5zdGVwczsgaSsrLCBjb3VudCArPSAyKSB7 Cj4gPj4gKwlmb3IgKGkgPSAwOyBpIDwgbmFuZC0+ZWNjLnN0ZXBzOyBpKyspIHsKPiA+PiAgCQlp bmZvID0gJm1lc29uX2NoaXAtPmluZm9fYnVmW2ldOwo+ID4+IC0JCW9vYl9idWZbY291bnRdID0g KmluZm87Cj4gPj4gLQkJb29iX2J1Zltjb3VudCArIDFdID0gKmluZm8gPj4gODsKPiA+PiArCQkv KiBBbHdheXMgaWdub3JlIHVzZXIgYnl0ZXMgcHJvZ3JhbW1pbmcuICovICAKPiA+IAo+ID4gV2h5 PyAgCj4gCj4gSSB0aGluayBjb21tZW50IG1lc3NhZ2UgaXMgd3JvbmcgYSBsaXR0bGUgYml0LiBI ZXJlICJ1c2VyIGJ5dGVzIiBhcmUKPiB1c2VyIGJ5dGVzIHByb3RlY3RlZCBieSBFQ0MgKGUuZy4g bG9jYXRpb24gb2YgdGhlc2UgYnl0ZXMgZGlmZmVycyBmcm9tIG5ldwo+IE9PQiBsYXlvdXQgaW50 cm9kdWNlZCBieSB0aGlzIHBhdGNoKS4gRHVyaW5nIHBhZ2Ugd3JpdGUgdGhpcyBoYXJkd2FyZQo+ IGFsd2F5cyB3cml0ZXMgdGhlc2UgYnl0ZXMgYWxvbmcgd2l0aCBkYXRhLiBCdXQsIG5ldyBPT0Ig bGF5b3V0IGFsd2F5cyBpZ25vcmVzCj4gdGhlc2UgNCBieXRlcywgc28gc2V0IHRoZW0gdG8gMHhG RiBhbHdheXMuCgpXaGVuIHBlcmZvcm1pbmcgcGFnZSByZWFkcy93cml0ZXMsIHlvdSBuZWVkIHRv IHRha2UgdGhlIGRhdGEgYXMgaXQncwpiZWVuIHByb3ZpZGVkLiBZb3UgbWF5IG1vdmUgdGhlIGRh dGEgYXJvdW5kIGluIHRoZSBidWZmZXIgcHJvdmlkZWQgdG8KdGhlIGNvbnRyb2xsZXIsIHNvIHRo YXQgaXQgZ2V0IHRoZSBFQ0MgZGF0YSBhdCB0aGUgcmlnaHQgbG9jYXRpb24sIGFuZAp5b3UgbmVl ZCBvZiBjb3Vyc2UgdG8gcmVvcmdhbml6ZSB0aGUgZGF0YSB3aGVuIHJlYWRpbmcgYXMgd2VsbCwg c28gdGhhdAp0aGUgdXNlciBzZWVzIFhraUIgb2YgZGF0YSArIFlCIG9mIE9PQi4gVGhhdCdzIGFs bCB5b3UgbmVlZCB0byBkbyBpbgp0aGVzZSBoZWxwZXJzLgoKPiA+IEFsc28sIG1heWJlIEkgc2hv dWxkIG1lbnRpb24gdGhlIGhlbHBlcnM6Cj4gPiBtdGRfb29ibGF5b3V0X2dldF9lY2NieXRlcyBh bmQgY28KPiA+IFRoZXkgYXJlIHZlcnkgdXNlZnVsIHRvIGRlYWwgd2l0aCBPT0IgYnl0ZXMuIEV2 ZXJ5dGhpbmcgc2VlbXMgZXh0cmVtZWx5Cj4gPiBoYXJkY29kZWQgaW4gdGhpcyBkcml2ZXIsIHdo aWxlIHRoZSB1c2VyIGNhbiB0dW5lIHJlYWQvd3JpdGUgT09CCj4gPiBvcGVyYXRpb25zLiAgCj4g Cj4gVGhhbmtzIGZvciBkZXRhaWxzLCBJSVVDIHRoZXNlIGhlbHBlcnMgd2lsbCB3b3JrIGNvcnJl Y3RseSB3aXRoIHRoaXMgZHJpdmVyLgo+IFdoYXQgbWVhbnMgInR1bmUiIGhlcmU/CgpUaGUgdXNl ciBjYW4gcHJvdmlkZSBkYXRhIGZvciB0aGUgT09CIHBhcnQgYW5kIHRlbGwgdGhlIG10ZCBsYXll ciB0bwpwbGFjZSB0aGUgYnl0ZXMgaW4gdGhlIC0+b29iX2J1ZiBmb2xsb3dpbmcgZGlmZmVyZW50 IGNvbnN0cmFpbnRzOgotIHRoZSB1c2VyIGJ5dGVzIGFyZSBhbHJlYWR5IHdoZW4gdGhleSBuZWVk IHRvIGJlIChNVERfT1BTX1BMQUNFX09PQgogIGFuZCBNVERfT1BTX1JBVykKLSB0aGUgdXNlciBi eXRlcyBhcmUgcGFja2VkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciwgcGxlYXNlIG1v dmUKICB0aGVtIHdoZXJlIHRoZXkgYmVsb25nIChNVERfT1BTX0FVVE9fT09CKS4KClNvIGluIHRo ZSBjb250cm9sbGVyIGRyaXZlciwgd2hhdCBuZWVkcyB0byBiZSBkb25lIGlzIHRvIG1ha2UgdGhl CnN3aXRjaCBiZXR3ZWVuIHRoZSAiZGF0YTErZGF0YTIrb29iMStvb2IyIiBsYXlvdXQgaW50byB5 b3VyCkVDQyBjb250cm9sbGVyJ3MgbGF5b3V0LCBlZyAiZGF0YTErb29iMStkYXRhMitvb2IyIi4K CkhlbmNlIHlvdSBzaG91bGQgbm90IG5lZWQgYW55dGhpbmcgbGlrZSB0aGF0Ogo+ID4+ICsJCSpp bmZvIHw9IDB4ZmZmZjsKCj4gPj4gIAl9Cj4gPj4gIH0KPiA+PiAgCj4gPj4gQEAgLTY5OCwxOCAr NzEzLDkyIEBAIHN0YXRpYyBpbnQgbWVzb25fbmZjX3dyaXRlX3BhZ2VfcmF3KHN0cnVjdCBuYW5k X2NoaXAgKm5hbmQsIGNvbnN0IHU4ICpidWYsCj4gPj4gIAlyZXR1cm4gbWVzb25fbmZjX3dyaXRl X3BhZ2Vfc3ViKG5hbmQsIHBhZ2UsIDEpOwo+ID4+ICB9Cj4gPj4gIAo+ID4+ICtzdGF0aWMgdTMy IG1lc29uX25mY19nZXRfb29iX2J5dGVzKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQpCj4gPj4gK3sK PiA+PiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQobmFuZCk7Cj4gPj4gKwo+ ID4+ICsJcmV0dXJuIG10ZC0+b29ic2l6ZSAtIG5hbmQtPmVjYy5zdGVwcyAqIE5GQ19PT0JfUEVS X0VDQyhuYW5kKTsKPiA+PiArfQo+ID4+ICsKPiA+PiArc3RhdGljIGludCBfX21lc29uX25mY193 cml0ZV9vb2Ioc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgaW50IHBhZ2UsIHU4ICpvb2JfYnVmKQo+ ID4+ICt7Cj4gPj4gKwlzdHJ1Y3QgbWVzb25fbmZjX25hbmRfY2hpcCAqbWVzb25fY2hpcCA9IHRv X21lc29uX25hbmQobmFuZCk7Cj4gPj4gKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5hbmRfdG9f bXRkKG5hbmQpOwo+ID4+ICsJdTMyIHBhZ2Vfc2l6ZSA9IG10ZC0+d3JpdGVzaXplICsgbXRkLT5v b2JzaXplOwo+ID4+ICsJdTMyIG9vYl9ieXRlcyA9IG1lc29uX25mY19nZXRfb29iX2J5dGVzKG5h bmQpOwo+ID4+ICsJaW50IHJldDsKPiA+PiArCj4gPj4gKwlpZiAoIW9vYl9ieXRlcykKPiA+PiAr CQlyZXR1cm4gMDsKPiA+PiArCj4gPj4gKwlyZXQgPSBuYW5kX3Byb2dfcGFnZV9iZWdpbl9vcChu YW5kLCBwYWdlLCAwLCBOVUxMLCAwKTsKPiA+PiArCWlmIChyZXQpCj4gPj4gKwkJcmV0dXJuIHJl dDsKPiA+PiArCj4gPj4gKwltZW1jcHkobWVzb25fY2hpcC0+b29iX2J1Ziwgb29iX2J1ZiArICht dGQtPm9vYnNpemUgLSBvb2JfYnl0ZXMpLAo+ID4+ICsJICAgICAgIG9vYl9ieXRlcyk7Cj4gPj4g Kwo+ID4+ICsJcmV0ID0gbmFuZF9jaGFuZ2Vfd3JpdGVfY29sdW1uX29wKG5hbmQsIHBhZ2Vfc2l6 ZSAtIG9vYl9ieXRlcywKPiA+PiArCQkJCQkgIG1lc29uX2NoaXAtPm9vYl9idWYsCj4gPj4gKwkJ CQkJICBvb2JfYnl0ZXMsIGZhbHNlKTsKPiA+PiArCWlmIChyZXQpCj4gPj4gKwkJcmV0dXJuIHJl dDsKPiA+PiArCj4gPj4gKwlyZXR1cm4gbmFuZF9wcm9nX3BhZ2VfZW5kX29wKG5hbmQpOwo+ID4+ ICt9Cj4gPj4gKwo+ID4+ICtzdGF0aWMgaW50IF9fbWVzb25fbmZjX3JlYWRfb29iKHN0cnVjdCBu YW5kX2NoaXAgKm5hbmQsIGludCBwYWdlLAo+ID4+ICsJCQkJdTggKm9vYl9idWYpCj4gPj4gK3sK PiA+PiArCXN0cnVjdCBtZXNvbl9uZmNfbmFuZF9jaGlwICptZXNvbl9jaGlwID0gdG9fbWVzb25f bmFuZChuYW5kKTsKPiA+PiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQobmFu ZCk7Cj4gPj4gKwl1MzIgb29iX2J5dGVzOwo+ID4+ICsJdTMyIHBhZ2Vfc2l6ZTsKPiA+PiArCWlu dCByZXQ7Cj4gPj4gKwo+ID4+ICsJb29iX2J5dGVzID0gbWVzb25fbmZjX2dldF9vb2JfYnl0ZXMo bmFuZCk7Cj4gPj4gKwo+ID4+ICsJaWYgKCFvb2JfYnl0ZXMpCj4gPj4gKwkJcmV0dXJuIDA7Cj4g Pj4gKwo+ID4+ICsJcmV0ID0gbmFuZF9yZWFkX3BhZ2Vfb3AobmFuZCwgcGFnZSwgMCwgTlVMTCwg MCk7Cj4gPj4gKwlpZiAocmV0KQo+ID4+ICsJCXJldHVybiByZXQ7Cj4gPj4gKwo+ID4+ICsJcGFn ZV9zaXplID0gbXRkLT53cml0ZXNpemUgKyBtdGQtPm9vYnNpemU7Cj4gPj4gKwo+ID4+ICsJcmV0 ID0gbmFuZF9jaGFuZ2VfcmVhZF9jb2x1bW5fb3AobmFuZCwgcGFnZV9zaXplIC0gb29iX2J5dGVz LAo+ID4+ICsJCQkJCSBtZXNvbl9jaGlwLT5vb2JfYnVmLAo+ID4+ICsJCQkJCSBvb2JfYnl0ZXMs IGZhbHNlKTsKPiA+PiArCj4gPj4gKwlpZiAoIXJldCkKPiA+PiArCQltZW1jcHkob29iX2J1ZiAr IChtdGQtPm9vYnNpemUgLSBvb2JfYnl0ZXMpLAo+ID4+ICsJCSAgICAgICBtZXNvbl9jaGlwLT5v b2JfYnVmLAo+ID4+ICsJCSAgICAgICBvb2JfYnl0ZXMpOwo+ID4+ICsKPiA+PiArCXJldHVybiBy ZXQ7Cj4gPj4gK30KPiA+PiArCj4gPj4gIHN0YXRpYyBpbnQgbWVzb25fbmZjX3dyaXRlX3BhZ2Vf aHdlY2Moc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwKPiA+PiAgCQkJCSAgICAgIGNvbnN0IHU4ICpi dWYsIGludCBvb2JfcmVxdWlyZWQsIGludCBwYWdlKQo+ID4+ICB7Cj4gPj4gIAlzdHJ1Y3QgbXRk X2luZm8gKm10ZCA9IG5hbmRfdG9fbXRkKG5hbmQpOwo+ID4+ICAJc3RydWN0IG1lc29uX25mY19u YW5kX2NoaXAgKm1lc29uX2NoaXAgPSB0b19tZXNvbl9uYW5kKG5hbmQpOwo+ID4+ICAJdTggKm9v Yl9idWYgPSBuYW5kLT5vb2JfcG9pOwo+ID4+ICsJaW50IHJldDsKPiA+PiAgCj4gPj4gIAltZW1j cHkobWVzb25fY2hpcC0+ZGF0YV9idWYsIGJ1ZiwgbXRkLT53cml0ZXNpemUpOwo+ID4+ICAJbWVt c2V0KG1lc29uX2NoaXAtPmluZm9fYnVmLCAwLCBuYW5kLT5lY2Muc3RlcHMgKiBQRVJfSU5GT19C WVRFKTsKPiA+PiAgCW1lc29uX25mY19zZXRfdXNlcl9ieXRlKG5hbmQsIG9vYl9idWYpOwo+ID4+ ICAKPiA+PiAtCXJldHVybiBtZXNvbl9uZmNfd3JpdGVfcGFnZV9zdWIobmFuZCwgcGFnZSwgMCk7 Cj4gPj4gKwlyZXQgPSBtZXNvbl9uZmNfd3JpdGVfcGFnZV9zdWIobmFuZCwgcGFnZSwgMCk7Cj4g Pj4gKwlpZiAocmV0KQo+ID4+ICsJCXJldHVybiByZXQ7Cj4gPj4gKwo+ID4+ICsJaWYgKG9vYl9y ZXF1aXJlZCkKPiA+PiArCQlyZXQgPSBfX21lc29uX25mY193cml0ZV9vb2IobmFuZCwgcGFnZSwg b29iX2J1Zik7ICAKPiA+IAo+ID4gWW91IHNob3VsZCBwcm92aWRlIGFsbCB0aGUgZGF0YSBpbmNs dWRpbmcgT09CIGJ5dGVzIGluIGEgc2luZ2xlIHdyaXRlCj4gPiBjYWxsLCBvdGhlcndpc2UgeW91 IHBlcmZvcm0gdHdvIHdyaXRlcyBvbiB0aGUgc2FtZSBwYWdlLCB0aGF0J3Mgbm90Cj4gPiB3aGF0 IHRoaXMgaGVscGVyIGlzIGV4cGVjdGVkIHRvIGRvLiAgCj4gCj4gSSBzZWUsIHNvIEkgbmVlZCB0 byBjaGVjayAnb29iX3JlcXVpcmVkJyBoZXJlIGJlZm9yZSBwcm9ncmFtbWluZyBwYWdlIGRhdGE/ CgpZZXMhCgo+IElmIGl0IGlzIHNldCAtPiBwbGFjZSBPT0IgZGF0YSB0byBETUEgYnVmZmVyIGFu ZCB0aGVuIGNhbGwgUEFHRVBST0cgb25jZT8KCkV4YWN0bHkuCgo+IAo+ID4gICAKPiA+PiArCj4g Pj4gKwlyZXR1cm4gcmV0Owo+ID4+ICB9Cj4gPj4gIAo+ID4+ICBzdGF0aWMgdm9pZCBtZXNvbl9u ZmNfY2hlY2tfZWNjX3BhZ2VzX3ZhbGlkKHN0cnVjdCBtZXNvbl9uZmMgKm5mYywKPiA+PiBAQCAt NzgzLDcgKzg3Miw3IEBAIHN0YXRpYyBpbnQgbWVzb25fbmZjX3JlYWRfcGFnZV9yYXcoc3RydWN0 IG5hbmRfY2hpcCAqbmFuZCwgdTggKmJ1ZiwKPiA+PiAgCWlmIChyZXQpCj4gPj4gIAkJcmV0dXJu IHJldDsKPiA+PiAgCj4gPj4gLQltZXNvbl9uZmNfZ2V0X2RhdGFfb29iKG5hbmQsIGJ1Ziwgb29i X2J1Zik7Cj4gPj4gKwltZXNvbl9uZmNfZ2V0X2RhdGFfb29iKG5hbmQsIGJ1Ziwgb29iX3JlcXVp cmVkID8gb29iX2J1ZiA6IE5VTEwpOwo+ID4+ICAKPiA+PiAgCXJldHVybiAwOwo+ID4+ICB9Cj4g Pj4gQEAgLTgwMywxMiArODkyLDEyIEBAIHN0YXRpYyBpbnQgbWVzb25fbmZjX3JlYWRfcGFnZV9o d2VjYyhzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLCB1OCAqYnVmLAo+ID4+ICAJaWYgKHJldCkKPiA+ PiAgCQlyZXR1cm4gcmV0Owo+ID4+ICAKPiA+PiAtCW1lc29uX25mY19nZXRfdXNlcl9ieXRlKG5h bmQsIG9vYl9idWYpOwo+ID4+ICAJcmV0ID0gbWVzb25fbmZjX2VjY19jb3JyZWN0KG5hbmQsICZi aXRmbGlwcywgJmNvcnJlY3RfYml0bWFwKTsKPiA+PiAgCWlmIChyZXQgPT0gRUNDX0NIRUNLX1JF VFVSTl9GRikgewo+ID4+ICAJCWlmIChidWYpCj4gPj4gIAkJCW1lbXNldChidWYsIDB4ZmYsIG10 ZC0+d3JpdGVzaXplKTsKPiA+PiAgCQltZW1zZXQob29iX2J1ZiwgMHhmZiwgbXRkLT5vb2JzaXpl KTsKPiA+PiArCQlyZXR1cm4gYml0ZmxpcHM7ICAKPiA+IAo+ID4gVGhhdCBpcyBzb21ldGhpbmcg ZWxzZSA9PiBvdGhlciBmaXggPT4gb3RoZXIgcGF0Y2g/ICAKPiAKPiBJZGVhIG9mIHRoaXMgJ3Jl dHVybicgaXMgdGhhdCB3aGVuIHJlYWQgZmFpbHMsIHdlIHJldHVybiBmcm9tIHRoaXMgZnVuY3Rp b24KPiB3aXRob3V0IHJlYWRpbmcgT09CIGJlbG93LgoKSXQgc2VlbWVkIGxpa2UgdGhlICJyZXR1 cm4gYml0ZmxpcHMiIHRoaW5nIHdhcyBuZXcsIGlmIGl0J3MganVzdCBkdWUgdG8KdGhlIGRpZmYg bm90IGJlaW5nIHdpZGUgZW5vdWdoLCB0aGVuIGl0J3MgZmluZSwgb3RoZXJ3aXNlIGlmIHRoaXMg aXMKc29tZXRoaW5nIG5ldywgaXQgc2hvdWxkIGJlIGluIGEgZGVkaWNhdGVkIHBhdGNoLgoKPiAK PiA+ICAgCj4gPj4gIAl9IGVsc2UgaWYgKHJldCA8IDApIHsKPiA+PiAgCQlpZiAoKG5hbmQtPm9w dGlvbnMgJiBOQU5EX05FRURfU0NSQU1CTElORykgfHwgIWJ1Zikgewo+ID4+ICAJCQltdGQtPmVj Y19zdGF0cy5mYWlsZWQrKzsKPiA+PiBAQCAtODIwLDEyICs5MDksMTQgQEAgc3RhdGljIGludCBt ZXNvbl9uZmNfcmVhZF9wYWdlX2h3ZWNjKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsIHU4ICpidWYs Cj4gPj4gIAo+ID4+ICAJCWZvciAoaSA9IDA7IGkgPCBuYW5kLT5lY2Muc3RlcHMgOyBpKyspIHsK PiA+PiAgCQkJdTggKmRhdGEgPSBidWYgKyBpICogZWNjLT5zaXplOwo+ID4+IC0JCQl1OCAqb29i ID0gbmFuZC0+b29iX3BvaSArIGkgKiAoZWNjLT5ieXRlcyArIDIpOwo+ID4+ICsJCQl1OCAqb29i ID0gbmFuZC0+b29iX3BvaSArIGkgKiBORkNfT09CX1BFUl9FQ0MobmFuZCk7Cj4gPj4gIAo+ID4+ ICAJCQlpZiAoY29ycmVjdF9iaXRtYXAgJiBCSVRfVUxMKGkpKQo+ID4+ICAJCQkJY29udGludWU7 Cj4gPj4gKwo+ID4+ICAJCQlyZXQgPSBuYW5kX2NoZWNrX2VyYXNlZF9lY2NfY2h1bmsoZGF0YSwJ ZWNjLT5zaXplLAo+ID4+IC0JCQkJCQkJICBvb2IsIGVjYy0+Ynl0ZXMgKyAyLAo+ID4+ICsJCQkJ CQkJICBvb2IsCj4gPj4gKwkJCQkJCQkgIE5GQ19PT0JfUEVSX0VDQyhuYW5kKSwKPiA+PiAgCQkJ CQkJCSAgTlVMTCwgMCwKPiA+PiAgCQkJCQkJCSAgZWNjLT5zdHJlbmd0aCk7Cj4gPj4gIAkJCWlm IChyZXQgPCAwKSB7Cj4gPj4gQEAgLTgzOSwxNyArOTMwLDMwIEBAIHN0YXRpYyBpbnQgbWVzb25f bmZjX3JlYWRfcGFnZV9od2VjYyhzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLCB1OCAqYnVmLAo+ID4+ ICAJCW1lbWNweShidWYsIG1lc29uX2NoaXAtPmRhdGFfYnVmLCBtdGQtPndyaXRlc2l6ZSk7Cj4g Pj4gIAl9Cj4gPj4gIAo+ID4+ICsJaWYgKG9vYl9yZXF1aXJlZCkKPiA+PiArCQlfX21lc29uX25m Y19yZWFkX29vYihuYW5kLCBwYWdlLCBvb2JfYnVmKTsgIAo+ID4gCj4gPiBJbiB0aGUgc3RhbmRh bG9uZSAicmVhZF9vb2IiIGhvb2ssIHlvdSBoYXZlIHRvIHNlbmQgYSBSRUFEMCBjb21tYW5kLAo+ ID4gYnV0IG5vdCB3aGVuIHlvdSBhcmUgaW4gdGhlIHJlYWRfcGFnZSBob29rLiBJdCBpcyBhIGJp ZyB3YXN0ZSBvZiB0aW1lLiAgCj4gCj4gSUlVQyBhcHByb2FjaCBoZXJlIG11c3QgYmUgZXhhY3Rs eSB0aGUgc2FtZSBhcyBpbiB3cml0ZT8gRS5nLiBpIG5lZWQgdG8KPiBzZW5kIHNpbmdsZSBSRUFE MCBhbmQgdGhlbiBmaWxsIHByb3ZpZGVkIE9PQiBidWZmZXIgaWYgbmVlZGVkPwoKWWVzLgoKRm9y IGJvdGggcmVhZHMgYW5kIHdyaXRlcywgdGhlIGxvZ2ljIGlzOgotIHRoZXJlIGFyZSBjb21tYW5k cyB3aGljaCBhcmUgYWN0dWFsbHkgdGltZSBjb25zdW1pbmc6IHRoZXJlIGlzCiAgc29tZXRoaW5n IGhhcHBlbmluZyBvbiB0aGUgbmFuZCBhcnJheSB3aGljaCBlaXRoZXIgcmVhZHMgb3Igd3JpdGVz CiAgZGF0YSB0by9mcm9tIHRoZSBpbnRlcm5hbCBzcmFtLgotIHRoZXJlIGFyZSBvdGhlciBjb21t YW5kcyB3aGljaCBqdXN0IGNoYW5nZSB0aGUgInBvaW50ZXIiIGluIHRoZQogIGludGVybmFsIHNy YW0uCgpTbyB5b3UgY2FuIGJhc2ljYWxseSBzYXkgIkkgd2FudCB0byB3cml0ZSBpbnRvIHRoZSBz cmFtIGF0IG9mZnNldCBYLAp0aGVuIGF0IG9mZnNldCBZIiBhbmQgd2hlbiB0aGUgc3JhbSBoYXMg YmVlbiBmaWxsZWQgeW91IGNhbiBjb21taXQgdGhlCndyaXRlIGFuZCB0aGF0J3MgdGhlIG9wZXJh dGlvbiB3aGljaCBzaG91bGQgaGFwcGVuIG9ubHkgb25jZS4gSW4gdGhlCnJlYWQgcGF0aCBpdCdz IHRoZSBvcHBvc2l0ZSwgeW91IHJlcXVlc3QgYSByZWFkIGZyb20gdGhlIE5BTkQgYXJyYXkgaW50 bwp0aGUgc3JhbSBjYWNoZSwgYW5kIHlvdSBjYW4gdGhlbiByZXF1ZXN0IGRhdGEgcmFuZG9tbHku IE9mIGNvdXJzZSBib3RoCm9wZXJhdGlvbnMgY2Fubm90IGJlIHRvbyByYW5kb20gZWl0aGVyLCB5 b3UgbmVlZCB0byBmb2xsb3cgdGhlIEVDQwplbmdpbmUgcGF0dGVybiB3aGljaCBtdXN0IGJlIGZl ZCB3aXRoIFggYnl0ZXMgb2YgZGF0YSBhbmQgdGhlbiB3aWxsCnByb2R1Y2UgdGhlIEVDQyBieXRl cyB0byB3cml0ZS9jb21wYXJlLgoKPiAKPiA+ICAgCj4gPj4gKwo+ID4+ICAJcmV0dXJuIGJpdGZs aXBzOwo+ID4+ICB9Cj4gPj4gIAo+ID4+ICBzdGF0aWMgaW50IG1lc29uX25mY19yZWFkX29vYl9y YXcoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgaW50IHBhZ2UpCj4gPj4gIHsKPiA+PiAtCXJldHVy biBtZXNvbl9uZmNfcmVhZF9wYWdlX3JhdyhuYW5kLCBOVUxMLCAxLCBwYWdlKTsKPiA+PiArCXJl dHVybiBfX21lc29uX25mY19yZWFkX29vYihuYW5kLCBwYWdlLCBuYW5kLT5vb2JfcG9pKTsKPiA+ PiAgfQo+ID4+ICAKPiA+PiAgc3RhdGljIGludCBtZXNvbl9uZmNfcmVhZF9vb2Ioc3RydWN0IG5h bmRfY2hpcCAqbmFuZCwgaW50IHBhZ2UpCj4gPj4gIHsKPiA+PiAtCXJldHVybiBtZXNvbl9uZmNf cmVhZF9wYWdlX2h3ZWNjKG5hbmQsIE5VTEwsIDEsIHBhZ2UpOwo+ID4+ICsJcmV0dXJuIF9fbWVz b25fbmZjX3JlYWRfb29iKG5hbmQsIHBhZ2UsIG5hbmQtPm9vYl9wb2kpOwo+ID4+ICt9Cj4gPj4g Kwo+ID4+ICtzdGF0aWMgaW50IG1lc29uX25mY193cml0ZV9vb2JfcmF3KHN0cnVjdCBuYW5kX2No aXAgKm5hbmQsIGludCBwYWdlKQo+ID4+ICt7Cj4gPj4gKwlyZXR1cm4gX19tZXNvbl9uZmNfd3Jp dGVfb29iKG5hbmQsIHBhZ2UsIG5hbmQtPm9vYl9wb2kpOwo+ID4+ICt9Cj4gPj4gKwo+ID4+ICtz dGF0aWMgaW50IG1lc29uX25mY193cml0ZV9vb2Ioc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgaW50 IHBhZ2UpCj4gPj4gK3sKPiA+PiArCXJldHVybiBfX21lc29uX25mY193cml0ZV9vb2IobmFuZCwg cGFnZSwgbmFuZC0+b29iX3BvaSk7ICAKPiA+IAo+ID4gRG8gd2UgcmVhbGx5IG5lZWQgdGhlc2Ug aW5kaXJlY3Rpb25zPyAgCj4gCj4gUmlnaHQsIEkgdGhpbmsgSSBjYW4gdXNlIG9ubHkgb25lIGZ1 bmN0aW9uIGZvciBPT0Igd3JpdGUgaW4gYm90aCBFQ0MgYW5kIHJhdyBtb2Rlcy4KPiAKPiA+ICAg Cj4gPj4gIH0KPiA+PiAgCj4gPj4gIHN0YXRpYyBib29sIG1lc29uX25mY19pc19idWZmZXJfZG1h X3NhZmUoY29uc3Qgdm9pZCAqYnVmZmVyKQo+ID4+IEBAIC05ODIsNyArMTA4Niw3IEBAIHN0YXRp YyBpbnQgbWVzb25fb29ibGF5b3V0X2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHNlY3Rp b24sCj4gPj4gIAlpZiAoc2VjdGlvbiA+PSBuYW5kLT5lY2Muc3RlcHMpCj4gPj4gIAkJcmV0dXJu IC1FUkFOR0U7Cj4gPj4gIAo+ID4+IC0Jb29icmVnaW9uLT5vZmZzZXQgPSAgMiArIChzZWN0aW9u ICogKDIgKyBuYW5kLT5lY2MuYnl0ZXMpKTsKPiA+PiArCW9vYnJlZ2lvbi0+b2Zmc2V0ID0gTkZD X1VTRVJfQllURVMgKyBzZWN0aW9uICogTkZDX09PQl9QRVJfRUNDKG5hbmQpOyAgCj4gPiAKPiA+ IFRoZSAoKSBhcmUgc3RpbGwgbmVlZGVkIGFyb3VuZCB0aGUgJyonCj4gPiAgIAo+ID4+ICAJb29i cmVnaW9uLT5sZW5ndGggPSBuYW5kLT5lY2MuYnl0ZXM7Cj4gPj4gIAo+ID4+ICAJcmV0dXJuIDA7 Cj4gPj4gQEAgLTk5MiwxMiArMTA5NiwxNiBAQCBzdGF0aWMgaW50IG1lc29uX29vYmxheW91dF9m cmVlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgc2VjdGlvbiwKPiA+PiAgCQkJCXN0cnVjdCBt dGRfb29iX3JlZ2lvbiAqb29icmVnaW9uKQo+ID4+ICB7Cj4gPj4gIAlzdHJ1Y3QgbmFuZF9jaGlw ICpuYW5kID0gbXRkX3RvX25hbmQobXRkKTsKPiA+PiArCXUzMiBvb2JfYnl0ZXMgPSBtZXNvbl9u ZmNfZ2V0X29vYl9ieXRlcyhuYW5kKTsKPiA+PiAgCj4gPj4gIAlpZiAoc2VjdGlvbiA+PSBuYW5k LT5lY2Muc3RlcHMpCj4gPj4gIAkJcmV0dXJuIC1FUkFOR0U7Cj4gPj4gIAo+ID4+IC0Jb29icmVn aW9uLT5vZmZzZXQgPSBzZWN0aW9uICogKDIgKyBuYW5kLT5lY2MuYnl0ZXMpOwo+ID4+IC0Jb29i cmVnaW9uLT5sZW5ndGggPSAyOwo+ID4+ICsJLyogU3BsaXQgcmVzdCBvZiBPT0IgYXJlYSAobm90 IGNvdmVyZWQgYnkgRUNDIGVuZ2luZSkgcGVyIGVhY2gKPiA+PiArCSAqIEVDQyBzZWN0aW9uLiBU aGlzIHdpbGwgYmUgT09CIGRhdGEgYXZhaWxhYmxlIHRvIHVzZXIuCj4gPj4gKwkgKi8KPiA+PiAr CW9vYnJlZ2lvbi0+b2Zmc2V0ID0gKHNlY3Rpb24gKyBuYW5kLT5lY2Muc3RlcHMpICogTkZDX09P Ql9QRVJfRUNDKG5hbmQpOwo+ID4+ICsJb29icmVnaW9uLT5sZW5ndGggPSBvb2JfYnl0ZXMgLyBu YW5kLT5lY2Muc3RlcHM7Cj4gPj4gIAo+ID4+ICAJcmV0dXJuIDA7Cj4gPj4gIH0KPiA+PiBAQCAt MTE4NCw2ICsxMjkyLDkgQEAgc3RhdGljIGludCBtZXNvbl9uYW5kX2JjaF9tb2RlKHN0cnVjdCBu YW5kX2NoaXAgKm5hbmQpCj4gPj4gIAo+ID4+ICBzdGF0aWMgdm9pZCBtZXNvbl9uYW5kX2RldGFj aF9jaGlwKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQpCj4gPj4gIHsKPiA+PiArCXN0cnVjdCBtZXNv bl9uZmNfbmFuZF9jaGlwICptZXNvbl9jaGlwID0gdG9fbWVzb25fbmFuZChuYW5kKTsKPiA+PiAr Cj4gPj4gKwlrZnJlZShtZXNvbl9jaGlwLT5vb2JfYnVmKTsKPiA+PiAgCW1lc29uX25mY19mcmVl X2J1ZmZlcihuYW5kKTsKPiA+PiAgfQo+ID4+ICAKPiA+PiBAQCAtMTIyNSw5ICsxMzM2LDkgQEAg c3RhdGljIGludCBtZXNvbl9uYW5kX2F0dGFjaF9jaGlwKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQp Cj4gPj4gIAluYW5kLT5lY2MuZW5naW5lX3R5cGUgPSBOQU5EX0VDQ19FTkdJTkVfVFlQRV9PTl9I T1NUOwo+ID4+ICAJbmFuZC0+ZWNjLndyaXRlX3BhZ2VfcmF3ID0gbWVzb25fbmZjX3dyaXRlX3Bh Z2VfcmF3Owo+ID4+ICAJbmFuZC0+ZWNjLndyaXRlX3BhZ2UgPSBtZXNvbl9uZmNfd3JpdGVfcGFn ZV9od2VjYzsKPiA+PiAtCW5hbmQtPmVjYy53cml0ZV9vb2JfcmF3ID0gbmFuZF93cml0ZV9vb2Jf c3RkOwo+ID4+IC0JbmFuZC0+ZWNjLndyaXRlX29vYiA9IG5hbmRfd3JpdGVfb29iX3N0ZDsKPiA+ PiAgCj4gPj4gKwluYW5kLT5lY2Mud3JpdGVfb29iX3JhdyA9IG1lc29uX25mY193cml0ZV9vb2Jf cmF3Owo+ID4+ICsJbmFuZC0+ZWNjLndyaXRlX29vYiA9IG1lc29uX25mY193cml0ZV9vb2I7ICAK PiA+IAo+ID4gQWN0dWFsbHkgaWYgeW91IGRlZmluZSB0aGUgcmlnaHQgT09CIGxheW91dHMsIGFy ZSB0aGVzZSByZWFsbHkgbmVlZGVkCj4gPiA/PyBJIHdvdWxkIGV4cGVjdCB0aGUgcmlnaHQgYnl0 ZXMgdG8gYmUgcGlja2VkIHVwIGJ5IHRoZSBkZWZhdWx0Cj4gPiBpbXBsZW1lbnRhdGlvbi4gSSBz ZWUgbm90aGluZyBzcGVjaWZpYyBpbiB5b3VyIGN1cnJlbnQgaW1wbGVtZW50YXRpb24/ICAKPiAK PiBZb3UgbWVhbiB0byB1c2UgJ25hbmRfd3JpdGVfb29iX3N0ZCgpJz8gSWYgc28sIEkgdGhpbmsg aXQgd29uJ3Qgd29yaywKPiBiZWNhdXNlIGl0IHRyaWVzIHRvIHdyaXRlIE9PQiBkYXRhIHJpZ2h0 IGFmdGVyICdtdGQtPndyaXRlc2l6ZScsIGJ1dAo+IHBhZ2UgbGF5b3V0IGZvciB0aGlzIGNvbnRy b2xsZXIgaXMgbGlrZSB0aGlzOgo+IFsgICAgICAgMTAyNCBieXRlcyBvZiBkYXRhICAgICAgICBd Cj4gWyAxNCBieXRlcyBFQ0MgKyAyIGJ5dGVzIGZvciB1c2VyIF0gPC0gd2l0aCBuZXcgbGF5b3V0 IHdlIGRvbid0IHRvdWNoIHRoZXNlIDIgYnl0ZXMKPiBbICAgICAgIDEwMjQgYnl0ZXMgb2YgZGF0 YSAgICAgICAgXQo+IFsgMTQgYnl0ZXMgRUNDICsgMiBieXRlcyBmb3IgdXNlciBdIDwtIHdpdGgg bmV3IGxheW91dCB3ZSBkb24ndCB0b3VjaCB0aGVzZSAyIGJ5dGVzCj4gWyAgICAgIDMyIGJ5dGVz IG9mIHVzZXIgYnl0ZXMgICAgIF0gPC0gd2UgdXNlIHRoZXJlIDMyIGJ5dGVzIGFzIGZyZWUodXNl cikgYnl0ZXMgaW4gT09CCgpSaWdodC4KCj4gCj4gU28gd2l0aCAnbXRkLT53cml0ZXNpemUnIG9m IDIwNDggd2Ugd29uJ3QgZ2V0IGludG8gbGFzdCAzMiBieXRlcyBpbiB0aGUgcGljdHVyZSBhYm92 ZS4KPiBJJ20gbm90IGdvb3QgaW4gTkFORC9NVEQgYXJlYSwgYnV0IEkgdGhpbmsgdGhhdCB3aHkg aSBuZWVkIHNwZWNpYWwgT09CIGFjY2VzcyBjYWxsYmFja3MuCgpPay4KCj4gQWxzbyBpbiBwcmV2 aW91cyBwYXRjaGVzIEBMaWFuZyBzYWlkLCB0aGF0IGRlZmF1bHQgT09CIHJlYWQvd3JpdGUgZnVu Y3Rpb25zIHdvbid0IHdvcmsKPiBvbiB0aGlzIGNvbnRyb2xsZXIgYW5kIGl0IGlzIHdyb25nIHRv IHVzZSB0aGVtIGluIGN1cnJlbnRseSBtZXJnZWQgZHJpdmVyLgo+IAo+ID4gICAKPiA+PiAgCW5h bmQtPmVjYy5yZWFkX3BhZ2VfcmF3ID0gbWVzb25fbmZjX3JlYWRfcGFnZV9yYXc7Cj4gPj4gIAlu YW5kLT5lY2MucmVhZF9wYWdlID0gbWVzb25fbmZjX3JlYWRfcGFnZV9od2VjYzsKPiA+PiAgCW5h bmQtPmVjYy5yZWFkX29vYl9yYXcgPSBtZXNvbl9uZmNfcmVhZF9vb2JfcmF3Owo+ID4+IEBAIC0x MjM3LDkgKzEzNDgsMTYgQEAgc3RhdGljIGludCBtZXNvbl9uYW5kX2F0dGFjaF9jaGlwKHN0cnVj dCBuYW5kX2NoaXAgKm5hbmQpCj4gPj4gIAkJZGV2X2VycihuZmMtPmRldiwgIjE2Yml0cyBidXMg d2lkdGggbm90IHN1cHBvcnRlZCIpOwo+ID4+ICAJCXJldHVybiAtRUlOVkFMOwo+ID4+ICAJfQo+ ID4+ICsKPiA+PiArCW1lc29uX2NoaXAtPm9vYl9idWYgPSBrbWFsbG9jKG5hbmQtPmVjYy5ieXRl cywgR0ZQX0tFUk5FTCk7ICAKPiA+IAo+ID4gZGV2bV9rbWFsbG9jPyAgCj4gCj4gQWNrCj4gCj4g PiAgIAo+ID4+ICsJaWYgKCFtZXNvbl9jaGlwLT5vb2JfYnVmKQo+ID4+ICsJCXJldHVybiAtRU5P TUVNOwo+ID4+ICsKPiA+PiAgCXJldCA9IG1lc29uX2NoaXBfYnVmZmVyX2luaXQobmFuZCk7Cj4g Pj4gLQlpZiAocmV0KQo+ID4+ICsJaWYgKHJldCkgewo+ID4+ICsJCWtmcmVlKG1lc29uX2NoaXAt Pm9vYl9idWYpOwo+ID4+ICAJCXJldHVybiAtRU5PTUVNOwo+ID4+ICsJfQo+ID4+ICAKPiA+PiAg CXJldHVybiByZXQ7Cj4gPj4gIH0gIAo+ID4gCj4gPiAKPiA+IFRoYW5rcywKPiA+IE1pcXXDqGwg IAo+IAo+IFRoYW5rcywgQXJzZW5peQoKClRoYW5rcywKTWlxdcOobAoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYW1sb2dpYyBtYWlsaW5nIGxp c3QKbGludXgtYW1sb2dpY0BsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRl YWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYW1sb2dpYwo= 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 4F9DBC7EE2C for ; Fri, 26 May 2023 17:04:29 +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=0/74ExG4CfOub61pzB6abOHO4q2BZtLQmHzmnfAKikQ=; b=CFRGFu6i04JgGh Z/LzK0QHaL1FI/DWVZywhsttxTW0Sed8NGX1WojZGcZM+x/Qy1XzLaKBfocmBFY+UcXkd5icbY08D otgSxJ/n/P6HonogIPBAaYfX/ead3MjSgV5ZBshWFGUyxKl3RfSxOY9SyBfPIX1WYwJ0x3BT6I/O7 6SJDZNzwc+F7EZt78BF2k4jyOqqDPqV54/fQyNaAN7lzaz5YSMCgLZN2VcG1/6Vq+JKaIDjMc60b3 XFHcvw6rBEmKUdhdqyFOaXzY8flKNEaubqozitS+2P8k8MItwiz+YzWf00p7u4mz6Y8eX75KMjSMo 87HjcSFpRNYKcix2UEcQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1q2arE-003DxL-2R; Fri, 26 May 2023 17:04:04 +0000 Received: from relay4-d.mail.gandi.net ([2001:4b98:dc4:8::224]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1q2ar8-003DtZ-2W; Fri, 26 May 2023 17:04:02 +0000 X-GND-Sasl: miquel.raynal@bootlin.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1685120631; 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=wZAtIbKobVRsNsvxbSGu/98XFYPX6nWAdRcnWjHYmAc=; b=DWnWEw34M1++02P5eZv/kDxy9QYvXm7LFXTl0Cx9V9dF/KkiP9Q0z6vGT76rIgZuftGwtd soy8mqDa3fYzHl8BhtYghInOVmxbGJaWgtdFCuduC3UYks0rBIBk2Ow3U9lV9JZGN091bR OnRNB2eOTcssbygDV0LzJduArd/TflIb2T2bcGEbUli9kT9dL8TzrSxjZEgHs0kg4AdXrH ++NaOl9zOjA3Ep9ijnE8mm7ZwI1m85f6JaX+U8WKeGqmD2D/9J+m83Wu6CQ4FKxdmRdZ2h BVluWATk1+PduKzVekVvELsVvTs2i3bQp28gmXSq4I8+OJ+NBb8K6/2vLKTeEg== X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com Received: by mail.gandi.net (Postfix) with ESMTPSA id 112E1E0005; Fri, 26 May 2023 17:03:48 +0000 (UTC) Date: Fri, 26 May 2023 19:03:47 +0200 From: Miquel Raynal To: Arseniy Krasnov Cc: Liang Yang , Richard Weinberger , Vignesh Raghavendra , Neil Armstrong , Kevin Hilman , Jerome Brunet , Martin Blumenstingl , Yixun Lan , Jianxin Pan , , , , , , Subject: Re: [PATCH v4 2/5] mtd: rawnand: meson: move OOB to non-protected ECC area Message-ID: <20230526190347.6e34a2be@xps-13> In-Reply-To: References: <20230515094440.3552094-1-AVKrasnov@sberdevices.ru> <20230515094440.3552094-3-AVKrasnov@sberdevices.ru> <20230522173334.7aa6f917@xps-13> Organization: Bootlin X-Mailer: Claws Mail 4.0.0 (GTK+ 3.24.33; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230526_100359_158773_58E7007D X-CRM114-Status: GOOD ( 56.28 ) 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 SGkgQXJzZW5peSwKCmF2a3Jhc25vdkBzYmVyZGV2aWNlcy5ydSB3cm90ZSBvbiBUdWUsIDIzIE1h eSAyMDIzIDIwOjE3OjE0ICswMzAwOgoKPiBIZWxsbyBNaXF1ZWwhIFRoYW5rcyBmb3IgZGV0YWls ZWQgcmV2aWV3IQo+IAo+IE9uIDIyLjA1LjIwMjMgMTg6MzMsIE1pcXVlbCBSYXluYWwgd3JvdGU6 Cj4gPiBIaSBBcnNlbml5LAo+ID4gCj4gPiBBVktyYXNub3ZAc2JlcmRldmljZXMucnUgd3JvdGUg b24gTW9uLCAxNSBNYXkgMjAyMyAxMjo0NDozNiArMDMwMDoKPiA+IAo+ID4gVGhlIHRpdGxlIHNo b3VsZCBwZXJoYXBzIGJlICJvbmx5IGV4cG9zZSB1bnByb3RlY3RlZCB1c2VyIE9PQiBieXRlcyIu Cj4gPiAgIAo+ID4+IFRoaXMgbW92ZXMgZnJlZSBieXRlcyBvZiBPT0IgdG8gbm9uLXByb3RlY3Rl ZCBFQ0MgYXJlYS4gSXQgaXMgbmVlZGVkIHRvCj4gPj4gbWFrZSBKRkZTMiB3b3JrcyBjb3JyZWN0 bHkgd2l0aCB0aGlzIE5BTkQgY29udHJvbGxlci4gUHJvYmxlbSBmaXJlcyB3aGVuCj4gPj4gSkZG UzIgZHJpdmVyIHdyaXRlcyBjbGVhbm1hcmtlciB0byBzb21lIHBhZ2UgYW5kIGxhdGVyIGl0IHRy aWVzIHRvIHdyaXRlCj4gPj4gdG8gdGhpcyBwYWdlIC0gd3JpdGUgd2lsbCBiZSBkb25lIHN1Y2Nl c3NmdWxseSwgYnV0IGFmdGVyIHRoYXQgc3VjaCBwYWdlCj4gPj4gYmVjb21lcyB1bnJlYWRhYmxl IGR1ZSB0byBpbnZhbGlkIEVDQyBjb2Rlcy4gVGhpcyBoYXBwZW5zIGJlY2F1c2Ugc2Vjb25kCj4g Pj4gd3JpdGUgbmVlZHMgdG8gdXBkYXRlIEVDQyBjb2RlcywgYnV0IGl0IGlzIGltcG9zc2libGUg dG8gZG8gaXQgY29ycmVjdGx5Cj4gPj4gd2l0aG91dCBibG9jayBlcmFzZS4gU28gaWRlYSBvZiB0 aGlzIHBhdGNoIGlzIHRvICAKPiA+IAo+ID4gIi4uLiBpcyB0byB1c2UgdGhlIHVucHJvdGVjdGVk IE9PQiBhcmVhIHRvIHN0b3JlIHRoZSBjbGVhbm1hcmtlcnMsIHNvCj4gPiB0aGF0IHRoZXkgY2Fu IGJlIHdyaXR0ZW4gYnkgdGhlIGZpbGVzeXN0ZW0gd2l0aG91dCBjYXJpbmcgbXVjaCBhYm91dAo+ ID4gdGhlIHBhZ2UgYmVpbmcgZW1wdHkgb3Igbm90OiB0aGUgRUNDIGNvZGVzIHdpbGwgbm90IGJl IHdyaXR0ZW4gYW55d2F5LiIKPiA+ID8gIAo+IAo+IE9rCj4gCj4gPiAKPiA+IEpGRlMyIGlzIG9u bHkgdXNlZnVsIG9uIHRpbnkgTkFORCBkZXZpY2VzLCB3aGVyZSBVQkkgZG9lcyBub3QgZml0LAo+ ID4gd2hpY2ggYXJlIHVzdWFsbHkgdHJ1ZSBTTEMgZmxhc2hlcywgd2l0aCB0aGUgY2FwYWJpbGl0 eSBvZiB3cml0aW5nCj4gPiBhIHBhZ2Ugd2l0aCBlbXB0eSAoMHhGRikgZGF0YSwgYW5kIHN0aWxs IGJlIGFibGUgdG8gd3JpdGUgYWN0dWFsIGRhdGEKPiA+IHRvIGl0IGxhdGVyIGluIGEgc2Vjb25k IHdyaXRlLiAgCj4gCj4gWW91IG1lYW4gdG8gaW5jbHVkZSB0ZXh0IGFib3ZlIHRvIGNvbW1pdCBt ZXNzYWdlIGFsc28/CgpZZXMsIEkgYmVsaWV2ZSB0aGlzIGRlc2VydmVzIHRvIGJlIGluIHRoZSBj b21taXQgbWVzc2FnZSBhcyB3ZWxsIDopCgo+IAo+ID4gICAKPiA+PiBzcGxpdCBhY2Nlc3NlcyB0 byBPT0IKPiA+PiBmcmVlIGJ5dGVzIGFuZCBkYXRhIG9uIGVhY2ggcGFnZSAtIG5vdyBib3RoIG9m IHRoZW0gZG9lcyBub3QgZGVwZW5kcyBvbgo+ID4+IGVhY2ggb3RoZXIuCj4gPj4KPiA+PiBTaWdu ZWQtb2ZmLWJ5OiBBcnNlbml5IEtyYXNub3YgPEFWS3Jhc25vdkBzYmVyZGV2aWNlcy5ydT4KPiA+ PiAtLS0KPiA+PiAgZHJpdmVycy9tdGQvbmFuZC9yYXcvbWVzb25fbmFuZC5jIHwgMTkyICsrKysr KysrKysrKysrKysrKysrKysrKy0tLS0tLQo+ID4+ICAxIGZpbGUgY2hhbmdlZCwgMTU1IGluc2Vy dGlvbnMoKyksIDM3IGRlbGV0aW9ucygtKQo+ID4+Cj4gPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv bXRkL25hbmQvcmF3L21lc29uX25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvcmF3L21lc29uX25h bmQuYwo+ID4+IGluZGV4IDJmNGQ4Yzg0MTg2Yi4uODUyNmE2Yjg3NzIwIDEwMDY0NAo+ID4+IC0t LSBhL2RyaXZlcnMvbXRkL25hbmQvcmF3L21lc29uX25hbmQuYwo+ID4+ICsrKyBiL2RyaXZlcnMv bXRkL25hbmQvcmF3L21lc29uX25hbmQuYwo+ID4+IEBAIC0xMDgsNiArMTA4LDkgQEAKPiA+PiAg Cj4gPj4gICNkZWZpbmUgUEVSX0lORk9fQllURQkJOAo+ID4+ICAKPiA+PiArI2RlZmluZSBORkNf VVNFUl9CWVRFUwkJMgo+ID4+ICsjZGVmaW5lIE5GQ19PT0JfUEVSX0VDQyhuYW5kKQkoKG5hbmQp LT5lY2MuYnl0ZXMgKyBORkNfVVNFUl9CWVRFUykKPiA+PiArCj4gPj4gIHN0cnVjdCBtZXNvbl9u ZmNfbmFuZF9jaGlwIHsKPiA+PiAgCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKPiA+PiAgCXN0cnVj dCBuYW5kX2NoaXAgbmFuZDsKPiA+PiBAQCAtMTIyLDYgKzEyNSw3IEBAIHN0cnVjdCBtZXNvbl9u ZmNfbmFuZF9jaGlwIHsKPiA+PiAgCXU4ICpkYXRhX2J1ZjsKPiA+PiAgCV9fbGU2NCAqaW5mb19i dWY7Cj4gPj4gIAl1MzIgbnNlbHM7Cj4gPj4gKwl1OCAqb29iX2J1ZjsKPiA+PiAgCXU4IHNlbHNb XTsKPiA+PiAgfTsKPiA+PiAgCj4gPj4gQEAgLTMzOCw3ICszNDIsNyBAQCBzdGF0aWMgdTggKm1l c29uX25mY19vb2JfcHRyKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsIGludCBpKQo+ID4+ICAJc3Ry dWN0IG1lc29uX25mY19uYW5kX2NoaXAgKm1lc29uX2NoaXAgPSB0b19tZXNvbl9uYW5kKG5hbmQp Owo+ID4+ICAJaW50IGxlbjsKPiA+PiAgCj4gPj4gLQlsZW4gPSBuYW5kLT5lY2Muc2l6ZSAqIChp ICsgMSkgKyAobmFuZC0+ZWNjLmJ5dGVzICsgMikgKiBpOwo+ID4+ICsJbGVuID0gbmFuZC0+ZWNj LnNpemUgKiAoaSArIDEpICsgTkZDX09PQl9QRVJfRUNDKG5hbmQpICogaTsgIAo+ID4gCj4gPiBU aGlzLi4uCj4gPiAgIAo+ID4+ICAKPiA+PiAgCXJldHVybiBtZXNvbl9jaGlwLT5kYXRhX2J1ZiAr IGxlbjsKPiA+PiAgfQo+ID4+IEBAIC0zNDksNyArMzUzLDcgQEAgc3RhdGljIHU4ICptZXNvbl9u ZmNfZGF0YV9wdHIoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgaW50IGkpCj4gPj4gIAlpbnQgbGVu LCB0ZW1wOwo+ID4+ICAKPiA+PiAgCXRlbXAgPSBuYW5kLT5lY2Muc2l6ZSArIG5hbmQtPmVjYy5i eXRlczsKPiA+PiAtCWxlbiA9ICh0ZW1wICsgMikgKiBpOwo+ID4+ICsJbGVuID0gKHRlbXAgKyBO RkNfVVNFUl9CWVRFUykgKiBpOyAgCj4gPiAKPiA+IC4uLiBhbmQgdGhpcyAoc2FtZSBiZWxvdykK PiA+IAo+ID4gYXJlIHB1cmVseSBjb3NtZXRpYywgc2hvdWxkIGJlIGluIGEgcGF0Y2ggYXNpZGUu Cj4gPiAgIAo+IAo+IEFjaywgaSdsbCBtb3ZlIGNvc21ldGljIHVwZGF0ZXMgdG8gc2VwYXJhdGUg cGF0Y2guCj4gCj4gPj4gIAo+ID4+ICAJcmV0dXJuIG1lc29uX2NoaXAtPmRhdGFfYnVmICsgbGVu Owo+ID4+ICB9Cj4gPj4gQEAgLTM1NywyOSArMzYxLDQ3IEBAIHN0YXRpYyB1OCAqbWVzb25fbmZj X2RhdGFfcHRyKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsIGludCBpKQo+ID4+ICBzdGF0aWMgdm9p ZCBtZXNvbl9uZmNfZ2V0X2RhdGFfb29iKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsCj4gPj4gIAkJ CQkgICB1OCAqYnVmLCB1OCAqb29iYnVmKQo+ID4+ICB7Cj4gPj4gKwlzdHJ1Y3QgbWVzb25fbmZj X25hbmRfY2hpcCAqbWVzb25fY2hpcCA9IHRvX21lc29uX25hbmQobmFuZCk7Cj4gPj4gKwlzdHJ1 Y3QgbXRkX2luZm8gKm10ZCA9IG5hbmRfdG9fbXRkKG5hbmQpOwo+ID4+ICAJaW50IGksIG9vYl9s ZW4gPSAwOwo+ID4+ICAJdTggKmRzcmMsICpvc3JjOwo+ID4+ICsJdTggKm9vYnRhaWw7Cj4gPj4g IAo+ID4+IC0Jb29iX2xlbiA9IG5hbmQtPmVjYy5ieXRlcyArIDI7Cj4gPj4gKwlvb2JfbGVuID0g TkZDX09PQl9QRVJfRUNDKG5hbmQpOwo+ID4+ICAJZm9yIChpID0gMDsgaSA8IG5hbmQtPmVjYy5z dGVwczsgaSsrKSB7Cj4gPj4gIAkJaWYgKGJ1Zikgewo+ID4+ICAJCQlkc3JjID0gbWVzb25fbmZj X2RhdGFfcHRyKG5hbmQsIGkpOwo+ID4+ICAJCQltZW1jcHkoYnVmLCBkc3JjLCBuYW5kLT5lY2Mu c2l6ZSk7Cj4gPj4gIAkJCWJ1ZiArPSBuYW5kLT5lY2Muc2l6ZTsKPiA+PiAgCQl9Cj4gPj4gLQkJ b3NyYyA9IG1lc29uX25mY19vb2JfcHRyKG5hbmQsIGkpOwo+ID4+IC0JCW1lbWNweShvb2JidWYs IG9zcmMsIG9vYl9sZW4pOwo+ID4+IC0JCW9vYmJ1ZiArPSBvb2JfbGVuOwo+ID4+ICsKPiA+PiAr CQlpZiAob29iYnVmKSB7Cj4gPj4gKwkJCW9zcmMgPSBtZXNvbl9uZmNfb29iX3B0cihuYW5kLCBp KTsKPiA+PiArCQkJbWVtY3B5KG9vYmJ1Ziwgb3NyYywgb29iX2xlbik7Cj4gPj4gKwkJCW9vYmJ1 ZiArPSBvb2JfbGVuOwo+ID4+ICsJCX0KPiA+PiAgCX0KPiA+PiArCj4gPj4gKwlpZiAoIW9vYmJ1 ZikKPiA+PiArCQlyZXR1cm47ICAKPiA+IAo+ID4gVGhlIHdob2xlICJpZiAob29iYnVmKSIgbG9n aWMgaXMgbmljZSB0byBoYXZlLCBidXQgc2hvdWxkIGFzIHdlbGwgYmUgaW4KPiA+IGEgZGVkaWNh dGVkIHBhdGNoLiAgCj4gCj4gU29ycnksIFlvdSBtZWFuIHRoYXQgdGhpcyBsb2dpYyBpbXBsZW1l bnRzIHJlYWQgb2YgRUNDIGNvZGVzPyBBbmQgbm90Cj4gcmVsYXRlZCB0byBPT0IgbGF5b3V0IHVw ZGF0ZSBpbiB0aGlzIHBhdGNoPwoKWW91IG5lZWQgdG8gbWFrZSBjb3NtZXRpYyBjaGFuZ2VzIGlu IGEgZmlyc3QgcGF0Y2ggKG9yIGV2ZW4gaW4gc2V2ZXJhbApwYXRjaGVzIGlmIHRoZXkgYXJlIG5v dCByZWxhdGVkKSwgdGhlbiBpbiBhbm90aGVyIHBhdGNoIHlvdSBtaWdodCBtYWtlCmFkZGl0aW9u cyBsaWtlIGEgYmV0dGVyIGhhbmRsaW5nIG9mIHRoZSBPT0IsIGFuZCBhbnkgY2hhbmdlIGluIHRo ZQpsYXlvdXQgbWlnaHQgY29tZSBsYXN0LiBJIGp1c3Qgd2FudCB0byBzcGxpdCB0aGUgcGF0Y2gg dG8gbWFrZQp1bmRlcnN0YW5kYWJsZSBhdG9taWMgY2hhbmdlcyAoYWxzbyBlYXNpZXIgdG8gcmV2 aWV3KS4KCjEgYXRvbWljIGNoYW5nZSA9PSAxIHBhdGNoCgo+ID4gICAKPiA+PiArCj4gPj4gKwlv b2J0YWlsID0gbWVzb25fY2hpcC0+ZGF0YV9idWYgKyBuYW5kLT5lY2Muc3RlcHMgKgo+ID4+ICsJ CSAgKG5hbmQtPmVjYy5zaXplICsgb29iX2xlbik7Cj4gPj4gKwo+ID4+ICsJLyogJ29vYmJ1Zicg aWYgYWxyZWFkeSBzaGlmdGVkIHRvIHRoZSBzdGFydCBvZiB1bnVzZWQgYXJlYS4gKi8gIAo+ID4g Cj4gPiAJCSAgICBpcz8KPiA+IHMvdW51c2VkL3VzZXIvPyBJJ20gbm90IHN1cmUgSSBnZXQgdGhl IGNvbW1lbnQuICAKPiAKPiBZZXMsIG5vdCBjbGVhciBjb21tZW50Lgo+IAo+ID4gICAKPiA+PiAr CW1lbWNweShvb2JidWYsIG9vYnRhaWwsIG10ZC0+b29ic2l6ZSAtIG5hbmQtPmVjYy5zdGVwcyAq IG9vYl9sZW4pOwo+ID4+ICB9Cj4gPj4gIAo+ID4+ICBzdGF0aWMgdm9pZCBtZXNvbl9uZmNfc2V0 X2RhdGFfb29iKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsCj4gPj4gIAkJCQkgICBjb25zdCB1OCAq YnVmLCB1OCAqb29iYnVmKQo+ID4+ICB7Cj4gPj4gKwlzdHJ1Y3QgbWVzb25fbmZjX25hbmRfY2hp cCAqbWVzb25fY2hpcCA9IHRvX21lc29uX25hbmQobmFuZCk7Cj4gPj4gKwlzdHJ1Y3QgbXRkX2lu Zm8gKm10ZCA9IG5hbmRfdG9fbXRkKG5hbmQpOwo+ID4+ICAJaW50IGksIG9vYl9sZW4gPSAwOwo+ ID4+ICAJdTggKmRzcmMsICpvc3JjOwo+ID4+ICsJdTggKm9vYnRhaWw7Cj4gPj4gIAo+ID4+IC0J b29iX2xlbiA9IG5hbmQtPmVjYy5ieXRlcyArIDI7Cj4gPj4gKwlvb2JfbGVuID0gTkZDX09PQl9Q RVJfRUNDKG5hbmQpOwo+ID4+ICAJZm9yIChpID0gMDsgaSA8IG5hbmQtPmVjYy5zdGVwczsgaSsr KSB7Cj4gPj4gIAkJaWYgKGJ1Zikgewo+ID4+ICAJCQlkc3JjID0gbWVzb25fbmZjX2RhdGFfcHRy KG5hbmQsIGkpOwo+ID4+IEBAIC0zOTAsNiArNDEyLDEyIEBAIHN0YXRpYyB2b2lkIG1lc29uX25m Y19zZXRfZGF0YV9vb2Ioc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwKPiA+PiAgCQltZW1jcHkob3Ny Yywgb29iYnVmLCBvb2JfbGVuKTsKPiA+PiAgCQlvb2JidWYgKz0gb29iX2xlbjsKPiA+PiAgCX0K PiA+PiArCj4gPj4gKwlvb2J0YWlsID0gbWVzb25fY2hpcC0+ZGF0YV9idWYgKyBuYW5kLT5lY2Mu c3RlcHMgKgo+ID4+ICsJCSAgKG5hbmQtPmVjYy5zaXplICsgb29iX2xlbik7Cj4gPj4gKwo+ID4+ ICsJLyogJ29vYmJ1ZicgaWYgYWxyZWFkeSBzaGlmdGVkIHRvIHRoZSBzdGFydCBvZiB1bnVzZWQg YXJlYS4gKi8KPiA+PiArCW1lbWNweShvb2J0YWlsLCBvb2JidWYsIG10ZC0+b29ic2l6ZSAtIG5h bmQtPmVjYy5zdGVwcyAqIG9vYl9sZW4pOwo+ID4+ICB9Cj4gPj4gIAo+ID4+ICBzdGF0aWMgaW50 IG1lc29uX25mY19xdWV1ZV9yYihzdHJ1Y3QgbWVzb25fbmZjICpuZmMsIGludCB0aW1lb3V0X21z LCBpbnQgY21kX3JlYWQwKQo+ID4+IEBAIC00MzYsMjUgKzQ2NCwxMiBAQCBzdGF0aWMgdm9pZCBt ZXNvbl9uZmNfc2V0X3VzZXJfYnl0ZShzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLCB1OCAqb29iX2J1 ZikKPiA+PiAgewo+ID4+ICAJc3RydWN0IG1lc29uX25mY19uYW5kX2NoaXAgKm1lc29uX2NoaXAg PSB0b19tZXNvbl9uYW5kKG5hbmQpOwo+ID4+ICAJX19sZTY0ICppbmZvOwo+ID4+IC0JaW50IGks IGNvdW50Owo+ID4+IC0KPiA+PiAtCWZvciAoaSA9IDAsIGNvdW50ID0gMDsgaSA8IG5hbmQtPmVj Yy5zdGVwczsgaSsrLCBjb3VudCArPSAyKSB7Cj4gPj4gLQkJaW5mbyA9ICZtZXNvbl9jaGlwLT5p bmZvX2J1ZltpXTsKPiA+PiAtCQkqaW5mbyB8PSBvb2JfYnVmW2NvdW50XTsKPiA+PiAtCQkqaW5m byB8PSBvb2JfYnVmW2NvdW50ICsgMV0gPDwgODsKPiA+PiAtCX0KPiA+PiAtfQo+ID4+IC0KPiA+ PiAtc3RhdGljIHZvaWQgbWVzb25fbmZjX2dldF91c2VyX2J5dGUoc3RydWN0IG5hbmRfY2hpcCAq bmFuZCwgdTggKm9vYl9idWYpCj4gPj4gLXsKPiA+PiAtCXN0cnVjdCBtZXNvbl9uZmNfbmFuZF9j aGlwICptZXNvbl9jaGlwID0gdG9fbWVzb25fbmFuZChuYW5kKTsKPiA+PiAtCV9fbGU2NCAqaW5m bzsKPiA+PiAtCWludCBpLCBjb3VudDsKPiA+PiArCWludCBpOwo+ID4+ICAKPiA+PiAtCWZvciAo aSA9IDAsIGNvdW50ID0gMDsgaSA8IG5hbmQtPmVjYy5zdGVwczsgaSsrLCBjb3VudCArPSAyKSB7 Cj4gPj4gKwlmb3IgKGkgPSAwOyBpIDwgbmFuZC0+ZWNjLnN0ZXBzOyBpKyspIHsKPiA+PiAgCQlp bmZvID0gJm1lc29uX2NoaXAtPmluZm9fYnVmW2ldOwo+ID4+IC0JCW9vYl9idWZbY291bnRdID0g KmluZm87Cj4gPj4gLQkJb29iX2J1Zltjb3VudCArIDFdID0gKmluZm8gPj4gODsKPiA+PiArCQkv KiBBbHdheXMgaWdub3JlIHVzZXIgYnl0ZXMgcHJvZ3JhbW1pbmcuICovICAKPiA+IAo+ID4gV2h5 PyAgCj4gCj4gSSB0aGluayBjb21tZW50IG1lc3NhZ2UgaXMgd3JvbmcgYSBsaXR0bGUgYml0LiBI ZXJlICJ1c2VyIGJ5dGVzIiBhcmUKPiB1c2VyIGJ5dGVzIHByb3RlY3RlZCBieSBFQ0MgKGUuZy4g bG9jYXRpb24gb2YgdGhlc2UgYnl0ZXMgZGlmZmVycyBmcm9tIG5ldwo+IE9PQiBsYXlvdXQgaW50 cm9kdWNlZCBieSB0aGlzIHBhdGNoKS4gRHVyaW5nIHBhZ2Ugd3JpdGUgdGhpcyBoYXJkd2FyZQo+ IGFsd2F5cyB3cml0ZXMgdGhlc2UgYnl0ZXMgYWxvbmcgd2l0aCBkYXRhLiBCdXQsIG5ldyBPT0Ig bGF5b3V0IGFsd2F5cyBpZ25vcmVzCj4gdGhlc2UgNCBieXRlcywgc28gc2V0IHRoZW0gdG8gMHhG RiBhbHdheXMuCgpXaGVuIHBlcmZvcm1pbmcgcGFnZSByZWFkcy93cml0ZXMsIHlvdSBuZWVkIHRv IHRha2UgdGhlIGRhdGEgYXMgaXQncwpiZWVuIHByb3ZpZGVkLiBZb3UgbWF5IG1vdmUgdGhlIGRh dGEgYXJvdW5kIGluIHRoZSBidWZmZXIgcHJvdmlkZWQgdG8KdGhlIGNvbnRyb2xsZXIsIHNvIHRo YXQgaXQgZ2V0IHRoZSBFQ0MgZGF0YSBhdCB0aGUgcmlnaHQgbG9jYXRpb24sIGFuZAp5b3UgbmVl ZCBvZiBjb3Vyc2UgdG8gcmVvcmdhbml6ZSB0aGUgZGF0YSB3aGVuIHJlYWRpbmcgYXMgd2VsbCwg c28gdGhhdAp0aGUgdXNlciBzZWVzIFhraUIgb2YgZGF0YSArIFlCIG9mIE9PQi4gVGhhdCdzIGFs bCB5b3UgbmVlZCB0byBkbyBpbgp0aGVzZSBoZWxwZXJzLgoKPiA+IEFsc28sIG1heWJlIEkgc2hv dWxkIG1lbnRpb24gdGhlIGhlbHBlcnM6Cj4gPiBtdGRfb29ibGF5b3V0X2dldF9lY2NieXRlcyBh bmQgY28KPiA+IFRoZXkgYXJlIHZlcnkgdXNlZnVsIHRvIGRlYWwgd2l0aCBPT0IgYnl0ZXMuIEV2 ZXJ5dGhpbmcgc2VlbXMgZXh0cmVtZWx5Cj4gPiBoYXJkY29kZWQgaW4gdGhpcyBkcml2ZXIsIHdo aWxlIHRoZSB1c2VyIGNhbiB0dW5lIHJlYWQvd3JpdGUgT09CCj4gPiBvcGVyYXRpb25zLiAgCj4g Cj4gVGhhbmtzIGZvciBkZXRhaWxzLCBJSVVDIHRoZXNlIGhlbHBlcnMgd2lsbCB3b3JrIGNvcnJl Y3RseSB3aXRoIHRoaXMgZHJpdmVyLgo+IFdoYXQgbWVhbnMgInR1bmUiIGhlcmU/CgpUaGUgdXNl ciBjYW4gcHJvdmlkZSBkYXRhIGZvciB0aGUgT09CIHBhcnQgYW5kIHRlbGwgdGhlIG10ZCBsYXll ciB0bwpwbGFjZSB0aGUgYnl0ZXMgaW4gdGhlIC0+b29iX2J1ZiBmb2xsb3dpbmcgZGlmZmVyZW50 IGNvbnN0cmFpbnRzOgotIHRoZSB1c2VyIGJ5dGVzIGFyZSBhbHJlYWR5IHdoZW4gdGhleSBuZWVk IHRvIGJlIChNVERfT1BTX1BMQUNFX09PQgogIGFuZCBNVERfT1BTX1JBVykKLSB0aGUgdXNlciBi eXRlcyBhcmUgcGFja2VkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciwgcGxlYXNlIG1v dmUKICB0aGVtIHdoZXJlIHRoZXkgYmVsb25nIChNVERfT1BTX0FVVE9fT09CKS4KClNvIGluIHRo ZSBjb250cm9sbGVyIGRyaXZlciwgd2hhdCBuZWVkcyB0byBiZSBkb25lIGlzIHRvIG1ha2UgdGhl CnN3aXRjaCBiZXR3ZWVuIHRoZSAiZGF0YTErZGF0YTIrb29iMStvb2IyIiBsYXlvdXQgaW50byB5 b3VyCkVDQyBjb250cm9sbGVyJ3MgbGF5b3V0LCBlZyAiZGF0YTErb29iMStkYXRhMitvb2IyIi4K CkhlbmNlIHlvdSBzaG91bGQgbm90IG5lZWQgYW55dGhpbmcgbGlrZSB0aGF0Ogo+ID4+ICsJCSpp bmZvIHw9IDB4ZmZmZjsKCj4gPj4gIAl9Cj4gPj4gIH0KPiA+PiAgCj4gPj4gQEAgLTY5OCwxOCAr NzEzLDkyIEBAIHN0YXRpYyBpbnQgbWVzb25fbmZjX3dyaXRlX3BhZ2VfcmF3KHN0cnVjdCBuYW5k X2NoaXAgKm5hbmQsIGNvbnN0IHU4ICpidWYsCj4gPj4gIAlyZXR1cm4gbWVzb25fbmZjX3dyaXRl X3BhZ2Vfc3ViKG5hbmQsIHBhZ2UsIDEpOwo+ID4+ICB9Cj4gPj4gIAo+ID4+ICtzdGF0aWMgdTMy IG1lc29uX25mY19nZXRfb29iX2J5dGVzKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQpCj4gPj4gK3sK PiA+PiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQobmFuZCk7Cj4gPj4gKwo+ ID4+ICsJcmV0dXJuIG10ZC0+b29ic2l6ZSAtIG5hbmQtPmVjYy5zdGVwcyAqIE5GQ19PT0JfUEVS X0VDQyhuYW5kKTsKPiA+PiArfQo+ID4+ICsKPiA+PiArc3RhdGljIGludCBfX21lc29uX25mY193 cml0ZV9vb2Ioc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgaW50IHBhZ2UsIHU4ICpvb2JfYnVmKQo+ ID4+ICt7Cj4gPj4gKwlzdHJ1Y3QgbWVzb25fbmZjX25hbmRfY2hpcCAqbWVzb25fY2hpcCA9IHRv X21lc29uX25hbmQobmFuZCk7Cj4gPj4gKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5hbmRfdG9f bXRkKG5hbmQpOwo+ID4+ICsJdTMyIHBhZ2Vfc2l6ZSA9IG10ZC0+d3JpdGVzaXplICsgbXRkLT5v b2JzaXplOwo+ID4+ICsJdTMyIG9vYl9ieXRlcyA9IG1lc29uX25mY19nZXRfb29iX2J5dGVzKG5h bmQpOwo+ID4+ICsJaW50IHJldDsKPiA+PiArCj4gPj4gKwlpZiAoIW9vYl9ieXRlcykKPiA+PiAr CQlyZXR1cm4gMDsKPiA+PiArCj4gPj4gKwlyZXQgPSBuYW5kX3Byb2dfcGFnZV9iZWdpbl9vcChu YW5kLCBwYWdlLCAwLCBOVUxMLCAwKTsKPiA+PiArCWlmIChyZXQpCj4gPj4gKwkJcmV0dXJuIHJl dDsKPiA+PiArCj4gPj4gKwltZW1jcHkobWVzb25fY2hpcC0+b29iX2J1Ziwgb29iX2J1ZiArICht dGQtPm9vYnNpemUgLSBvb2JfYnl0ZXMpLAo+ID4+ICsJICAgICAgIG9vYl9ieXRlcyk7Cj4gPj4g Kwo+ID4+ICsJcmV0ID0gbmFuZF9jaGFuZ2Vfd3JpdGVfY29sdW1uX29wKG5hbmQsIHBhZ2Vfc2l6 ZSAtIG9vYl9ieXRlcywKPiA+PiArCQkJCQkgIG1lc29uX2NoaXAtPm9vYl9idWYsCj4gPj4gKwkJ CQkJICBvb2JfYnl0ZXMsIGZhbHNlKTsKPiA+PiArCWlmIChyZXQpCj4gPj4gKwkJcmV0dXJuIHJl dDsKPiA+PiArCj4gPj4gKwlyZXR1cm4gbmFuZF9wcm9nX3BhZ2VfZW5kX29wKG5hbmQpOwo+ID4+ ICt9Cj4gPj4gKwo+ID4+ICtzdGF0aWMgaW50IF9fbWVzb25fbmZjX3JlYWRfb29iKHN0cnVjdCBu YW5kX2NoaXAgKm5hbmQsIGludCBwYWdlLAo+ID4+ICsJCQkJdTggKm9vYl9idWYpCj4gPj4gK3sK PiA+PiArCXN0cnVjdCBtZXNvbl9uZmNfbmFuZF9jaGlwICptZXNvbl9jaGlwID0gdG9fbWVzb25f bmFuZChuYW5kKTsKPiA+PiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQobmFu ZCk7Cj4gPj4gKwl1MzIgb29iX2J5dGVzOwo+ID4+ICsJdTMyIHBhZ2Vfc2l6ZTsKPiA+PiArCWlu dCByZXQ7Cj4gPj4gKwo+ID4+ICsJb29iX2J5dGVzID0gbWVzb25fbmZjX2dldF9vb2JfYnl0ZXMo bmFuZCk7Cj4gPj4gKwo+ID4+ICsJaWYgKCFvb2JfYnl0ZXMpCj4gPj4gKwkJcmV0dXJuIDA7Cj4g Pj4gKwo+ID4+ICsJcmV0ID0gbmFuZF9yZWFkX3BhZ2Vfb3AobmFuZCwgcGFnZSwgMCwgTlVMTCwg MCk7Cj4gPj4gKwlpZiAocmV0KQo+ID4+ICsJCXJldHVybiByZXQ7Cj4gPj4gKwo+ID4+ICsJcGFn ZV9zaXplID0gbXRkLT53cml0ZXNpemUgKyBtdGQtPm9vYnNpemU7Cj4gPj4gKwo+ID4+ICsJcmV0 ID0gbmFuZF9jaGFuZ2VfcmVhZF9jb2x1bW5fb3AobmFuZCwgcGFnZV9zaXplIC0gb29iX2J5dGVz LAo+ID4+ICsJCQkJCSBtZXNvbl9jaGlwLT5vb2JfYnVmLAo+ID4+ICsJCQkJCSBvb2JfYnl0ZXMs IGZhbHNlKTsKPiA+PiArCj4gPj4gKwlpZiAoIXJldCkKPiA+PiArCQltZW1jcHkob29iX2J1ZiAr IChtdGQtPm9vYnNpemUgLSBvb2JfYnl0ZXMpLAo+ID4+ICsJCSAgICAgICBtZXNvbl9jaGlwLT5v b2JfYnVmLAo+ID4+ICsJCSAgICAgICBvb2JfYnl0ZXMpOwo+ID4+ICsKPiA+PiArCXJldHVybiBy ZXQ7Cj4gPj4gK30KPiA+PiArCj4gPj4gIHN0YXRpYyBpbnQgbWVzb25fbmZjX3dyaXRlX3BhZ2Vf aHdlY2Moc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwKPiA+PiAgCQkJCSAgICAgIGNvbnN0IHU4ICpi dWYsIGludCBvb2JfcmVxdWlyZWQsIGludCBwYWdlKQo+ID4+ICB7Cj4gPj4gIAlzdHJ1Y3QgbXRk X2luZm8gKm10ZCA9IG5hbmRfdG9fbXRkKG5hbmQpOwo+ID4+ICAJc3RydWN0IG1lc29uX25mY19u YW5kX2NoaXAgKm1lc29uX2NoaXAgPSB0b19tZXNvbl9uYW5kKG5hbmQpOwo+ID4+ICAJdTggKm9v Yl9idWYgPSBuYW5kLT5vb2JfcG9pOwo+ID4+ICsJaW50IHJldDsKPiA+PiAgCj4gPj4gIAltZW1j cHkobWVzb25fY2hpcC0+ZGF0YV9idWYsIGJ1ZiwgbXRkLT53cml0ZXNpemUpOwo+ID4+ICAJbWVt c2V0KG1lc29uX2NoaXAtPmluZm9fYnVmLCAwLCBuYW5kLT5lY2Muc3RlcHMgKiBQRVJfSU5GT19C WVRFKTsKPiA+PiAgCW1lc29uX25mY19zZXRfdXNlcl9ieXRlKG5hbmQsIG9vYl9idWYpOwo+ID4+ ICAKPiA+PiAtCXJldHVybiBtZXNvbl9uZmNfd3JpdGVfcGFnZV9zdWIobmFuZCwgcGFnZSwgMCk7 Cj4gPj4gKwlyZXQgPSBtZXNvbl9uZmNfd3JpdGVfcGFnZV9zdWIobmFuZCwgcGFnZSwgMCk7Cj4g Pj4gKwlpZiAocmV0KQo+ID4+ICsJCXJldHVybiByZXQ7Cj4gPj4gKwo+ID4+ICsJaWYgKG9vYl9y ZXF1aXJlZCkKPiA+PiArCQlyZXQgPSBfX21lc29uX25mY193cml0ZV9vb2IobmFuZCwgcGFnZSwg b29iX2J1Zik7ICAKPiA+IAo+ID4gWW91IHNob3VsZCBwcm92aWRlIGFsbCB0aGUgZGF0YSBpbmNs dWRpbmcgT09CIGJ5dGVzIGluIGEgc2luZ2xlIHdyaXRlCj4gPiBjYWxsLCBvdGhlcndpc2UgeW91 IHBlcmZvcm0gdHdvIHdyaXRlcyBvbiB0aGUgc2FtZSBwYWdlLCB0aGF0J3Mgbm90Cj4gPiB3aGF0 IHRoaXMgaGVscGVyIGlzIGV4cGVjdGVkIHRvIGRvLiAgCj4gCj4gSSBzZWUsIHNvIEkgbmVlZCB0 byBjaGVjayAnb29iX3JlcXVpcmVkJyBoZXJlIGJlZm9yZSBwcm9ncmFtbWluZyBwYWdlIGRhdGE/ CgpZZXMhCgo+IElmIGl0IGlzIHNldCAtPiBwbGFjZSBPT0IgZGF0YSB0byBETUEgYnVmZmVyIGFu ZCB0aGVuIGNhbGwgUEFHRVBST0cgb25jZT8KCkV4YWN0bHkuCgo+IAo+ID4gICAKPiA+PiArCj4g Pj4gKwlyZXR1cm4gcmV0Owo+ID4+ICB9Cj4gPj4gIAo+ID4+ICBzdGF0aWMgdm9pZCBtZXNvbl9u ZmNfY2hlY2tfZWNjX3BhZ2VzX3ZhbGlkKHN0cnVjdCBtZXNvbl9uZmMgKm5mYywKPiA+PiBAQCAt NzgzLDcgKzg3Miw3IEBAIHN0YXRpYyBpbnQgbWVzb25fbmZjX3JlYWRfcGFnZV9yYXcoc3RydWN0 IG5hbmRfY2hpcCAqbmFuZCwgdTggKmJ1ZiwKPiA+PiAgCWlmIChyZXQpCj4gPj4gIAkJcmV0dXJu IHJldDsKPiA+PiAgCj4gPj4gLQltZXNvbl9uZmNfZ2V0X2RhdGFfb29iKG5hbmQsIGJ1Ziwgb29i X2J1Zik7Cj4gPj4gKwltZXNvbl9uZmNfZ2V0X2RhdGFfb29iKG5hbmQsIGJ1Ziwgb29iX3JlcXVp cmVkID8gb29iX2J1ZiA6IE5VTEwpOwo+ID4+ICAKPiA+PiAgCXJldHVybiAwOwo+ID4+ICB9Cj4g Pj4gQEAgLTgwMywxMiArODkyLDEyIEBAIHN0YXRpYyBpbnQgbWVzb25fbmZjX3JlYWRfcGFnZV9o d2VjYyhzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLCB1OCAqYnVmLAo+ID4+ICAJaWYgKHJldCkKPiA+ PiAgCQlyZXR1cm4gcmV0Owo+ID4+ICAKPiA+PiAtCW1lc29uX25mY19nZXRfdXNlcl9ieXRlKG5h bmQsIG9vYl9idWYpOwo+ID4+ICAJcmV0ID0gbWVzb25fbmZjX2VjY19jb3JyZWN0KG5hbmQsICZi aXRmbGlwcywgJmNvcnJlY3RfYml0bWFwKTsKPiA+PiAgCWlmIChyZXQgPT0gRUNDX0NIRUNLX1JF VFVSTl9GRikgewo+ID4+ICAJCWlmIChidWYpCj4gPj4gIAkJCW1lbXNldChidWYsIDB4ZmYsIG10 ZC0+d3JpdGVzaXplKTsKPiA+PiAgCQltZW1zZXQob29iX2J1ZiwgMHhmZiwgbXRkLT5vb2JzaXpl KTsKPiA+PiArCQlyZXR1cm4gYml0ZmxpcHM7ICAKPiA+IAo+ID4gVGhhdCBpcyBzb21ldGhpbmcg ZWxzZSA9PiBvdGhlciBmaXggPT4gb3RoZXIgcGF0Y2g/ICAKPiAKPiBJZGVhIG9mIHRoaXMgJ3Jl dHVybicgaXMgdGhhdCB3aGVuIHJlYWQgZmFpbHMsIHdlIHJldHVybiBmcm9tIHRoaXMgZnVuY3Rp b24KPiB3aXRob3V0IHJlYWRpbmcgT09CIGJlbG93LgoKSXQgc2VlbWVkIGxpa2UgdGhlICJyZXR1 cm4gYml0ZmxpcHMiIHRoaW5nIHdhcyBuZXcsIGlmIGl0J3MganVzdCBkdWUgdG8KdGhlIGRpZmYg bm90IGJlaW5nIHdpZGUgZW5vdWdoLCB0aGVuIGl0J3MgZmluZSwgb3RoZXJ3aXNlIGlmIHRoaXMg aXMKc29tZXRoaW5nIG5ldywgaXQgc2hvdWxkIGJlIGluIGEgZGVkaWNhdGVkIHBhdGNoLgoKPiAK PiA+ICAgCj4gPj4gIAl9IGVsc2UgaWYgKHJldCA8IDApIHsKPiA+PiAgCQlpZiAoKG5hbmQtPm9w dGlvbnMgJiBOQU5EX05FRURfU0NSQU1CTElORykgfHwgIWJ1Zikgewo+ID4+ICAJCQltdGQtPmVj Y19zdGF0cy5mYWlsZWQrKzsKPiA+PiBAQCAtODIwLDEyICs5MDksMTQgQEAgc3RhdGljIGludCBt ZXNvbl9uZmNfcmVhZF9wYWdlX2h3ZWNjKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsIHU4ICpidWYs Cj4gPj4gIAo+ID4+ICAJCWZvciAoaSA9IDA7IGkgPCBuYW5kLT5lY2Muc3RlcHMgOyBpKyspIHsK PiA+PiAgCQkJdTggKmRhdGEgPSBidWYgKyBpICogZWNjLT5zaXplOwo+ID4+IC0JCQl1OCAqb29i ID0gbmFuZC0+b29iX3BvaSArIGkgKiAoZWNjLT5ieXRlcyArIDIpOwo+ID4+ICsJCQl1OCAqb29i ID0gbmFuZC0+b29iX3BvaSArIGkgKiBORkNfT09CX1BFUl9FQ0MobmFuZCk7Cj4gPj4gIAo+ID4+ ICAJCQlpZiAoY29ycmVjdF9iaXRtYXAgJiBCSVRfVUxMKGkpKQo+ID4+ICAJCQkJY29udGludWU7 Cj4gPj4gKwo+ID4+ICAJCQlyZXQgPSBuYW5kX2NoZWNrX2VyYXNlZF9lY2NfY2h1bmsoZGF0YSwJ ZWNjLT5zaXplLAo+ID4+IC0JCQkJCQkJICBvb2IsIGVjYy0+Ynl0ZXMgKyAyLAo+ID4+ICsJCQkJ CQkJICBvb2IsCj4gPj4gKwkJCQkJCQkgIE5GQ19PT0JfUEVSX0VDQyhuYW5kKSwKPiA+PiAgCQkJ CQkJCSAgTlVMTCwgMCwKPiA+PiAgCQkJCQkJCSAgZWNjLT5zdHJlbmd0aCk7Cj4gPj4gIAkJCWlm IChyZXQgPCAwKSB7Cj4gPj4gQEAgLTgzOSwxNyArOTMwLDMwIEBAIHN0YXRpYyBpbnQgbWVzb25f bmZjX3JlYWRfcGFnZV9od2VjYyhzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLCB1OCAqYnVmLAo+ID4+ ICAJCW1lbWNweShidWYsIG1lc29uX2NoaXAtPmRhdGFfYnVmLCBtdGQtPndyaXRlc2l6ZSk7Cj4g Pj4gIAl9Cj4gPj4gIAo+ID4+ICsJaWYgKG9vYl9yZXF1aXJlZCkKPiA+PiArCQlfX21lc29uX25m Y19yZWFkX29vYihuYW5kLCBwYWdlLCBvb2JfYnVmKTsgIAo+ID4gCj4gPiBJbiB0aGUgc3RhbmRh bG9uZSAicmVhZF9vb2IiIGhvb2ssIHlvdSBoYXZlIHRvIHNlbmQgYSBSRUFEMCBjb21tYW5kLAo+ ID4gYnV0IG5vdCB3aGVuIHlvdSBhcmUgaW4gdGhlIHJlYWRfcGFnZSBob29rLiBJdCBpcyBhIGJp ZyB3YXN0ZSBvZiB0aW1lLiAgCj4gCj4gSUlVQyBhcHByb2FjaCBoZXJlIG11c3QgYmUgZXhhY3Rs eSB0aGUgc2FtZSBhcyBpbiB3cml0ZT8gRS5nLiBpIG5lZWQgdG8KPiBzZW5kIHNpbmdsZSBSRUFE MCBhbmQgdGhlbiBmaWxsIHByb3ZpZGVkIE9PQiBidWZmZXIgaWYgbmVlZGVkPwoKWWVzLgoKRm9y IGJvdGggcmVhZHMgYW5kIHdyaXRlcywgdGhlIGxvZ2ljIGlzOgotIHRoZXJlIGFyZSBjb21tYW5k cyB3aGljaCBhcmUgYWN0dWFsbHkgdGltZSBjb25zdW1pbmc6IHRoZXJlIGlzCiAgc29tZXRoaW5n IGhhcHBlbmluZyBvbiB0aGUgbmFuZCBhcnJheSB3aGljaCBlaXRoZXIgcmVhZHMgb3Igd3JpdGVz CiAgZGF0YSB0by9mcm9tIHRoZSBpbnRlcm5hbCBzcmFtLgotIHRoZXJlIGFyZSBvdGhlciBjb21t YW5kcyB3aGljaCBqdXN0IGNoYW5nZSB0aGUgInBvaW50ZXIiIGluIHRoZQogIGludGVybmFsIHNy YW0uCgpTbyB5b3UgY2FuIGJhc2ljYWxseSBzYXkgIkkgd2FudCB0byB3cml0ZSBpbnRvIHRoZSBz cmFtIGF0IG9mZnNldCBYLAp0aGVuIGF0IG9mZnNldCBZIiBhbmQgd2hlbiB0aGUgc3JhbSBoYXMg YmVlbiBmaWxsZWQgeW91IGNhbiBjb21taXQgdGhlCndyaXRlIGFuZCB0aGF0J3MgdGhlIG9wZXJh dGlvbiB3aGljaCBzaG91bGQgaGFwcGVuIG9ubHkgb25jZS4gSW4gdGhlCnJlYWQgcGF0aCBpdCdz IHRoZSBvcHBvc2l0ZSwgeW91IHJlcXVlc3QgYSByZWFkIGZyb20gdGhlIE5BTkQgYXJyYXkgaW50 bwp0aGUgc3JhbSBjYWNoZSwgYW5kIHlvdSBjYW4gdGhlbiByZXF1ZXN0IGRhdGEgcmFuZG9tbHku IE9mIGNvdXJzZSBib3RoCm9wZXJhdGlvbnMgY2Fubm90IGJlIHRvbyByYW5kb20gZWl0aGVyLCB5 b3UgbmVlZCB0byBmb2xsb3cgdGhlIEVDQwplbmdpbmUgcGF0dGVybiB3aGljaCBtdXN0IGJlIGZl ZCB3aXRoIFggYnl0ZXMgb2YgZGF0YSBhbmQgdGhlbiB3aWxsCnByb2R1Y2UgdGhlIEVDQyBieXRl cyB0byB3cml0ZS9jb21wYXJlLgoKPiAKPiA+ICAgCj4gPj4gKwo+ID4+ICAJcmV0dXJuIGJpdGZs aXBzOwo+ID4+ICB9Cj4gPj4gIAo+ID4+ICBzdGF0aWMgaW50IG1lc29uX25mY19yZWFkX29vYl9y YXcoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgaW50IHBhZ2UpCj4gPj4gIHsKPiA+PiAtCXJldHVy biBtZXNvbl9uZmNfcmVhZF9wYWdlX3JhdyhuYW5kLCBOVUxMLCAxLCBwYWdlKTsKPiA+PiArCXJl dHVybiBfX21lc29uX25mY19yZWFkX29vYihuYW5kLCBwYWdlLCBuYW5kLT5vb2JfcG9pKTsKPiA+ PiAgfQo+ID4+ICAKPiA+PiAgc3RhdGljIGludCBtZXNvbl9uZmNfcmVhZF9vb2Ioc3RydWN0IG5h bmRfY2hpcCAqbmFuZCwgaW50IHBhZ2UpCj4gPj4gIHsKPiA+PiAtCXJldHVybiBtZXNvbl9uZmNf cmVhZF9wYWdlX2h3ZWNjKG5hbmQsIE5VTEwsIDEsIHBhZ2UpOwo+ID4+ICsJcmV0dXJuIF9fbWVz b25fbmZjX3JlYWRfb29iKG5hbmQsIHBhZ2UsIG5hbmQtPm9vYl9wb2kpOwo+ID4+ICt9Cj4gPj4g Kwo+ID4+ICtzdGF0aWMgaW50IG1lc29uX25mY193cml0ZV9vb2JfcmF3KHN0cnVjdCBuYW5kX2No aXAgKm5hbmQsIGludCBwYWdlKQo+ID4+ICt7Cj4gPj4gKwlyZXR1cm4gX19tZXNvbl9uZmNfd3Jp dGVfb29iKG5hbmQsIHBhZ2UsIG5hbmQtPm9vYl9wb2kpOwo+ID4+ICt9Cj4gPj4gKwo+ID4+ICtz dGF0aWMgaW50IG1lc29uX25mY193cml0ZV9vb2Ioc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgaW50 IHBhZ2UpCj4gPj4gK3sKPiA+PiArCXJldHVybiBfX21lc29uX25mY193cml0ZV9vb2IobmFuZCwg cGFnZSwgbmFuZC0+b29iX3BvaSk7ICAKPiA+IAo+ID4gRG8gd2UgcmVhbGx5IG5lZWQgdGhlc2Ug aW5kaXJlY3Rpb25zPyAgCj4gCj4gUmlnaHQsIEkgdGhpbmsgSSBjYW4gdXNlIG9ubHkgb25lIGZ1 bmN0aW9uIGZvciBPT0Igd3JpdGUgaW4gYm90aCBFQ0MgYW5kIHJhdyBtb2Rlcy4KPiAKPiA+ICAg Cj4gPj4gIH0KPiA+PiAgCj4gPj4gIHN0YXRpYyBib29sIG1lc29uX25mY19pc19idWZmZXJfZG1h X3NhZmUoY29uc3Qgdm9pZCAqYnVmZmVyKQo+ID4+IEBAIC05ODIsNyArMTA4Niw3IEBAIHN0YXRp YyBpbnQgbWVzb25fb29ibGF5b3V0X2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHNlY3Rp b24sCj4gPj4gIAlpZiAoc2VjdGlvbiA+PSBuYW5kLT5lY2Muc3RlcHMpCj4gPj4gIAkJcmV0dXJu IC1FUkFOR0U7Cj4gPj4gIAo+ID4+IC0Jb29icmVnaW9uLT5vZmZzZXQgPSAgMiArIChzZWN0aW9u ICogKDIgKyBuYW5kLT5lY2MuYnl0ZXMpKTsKPiA+PiArCW9vYnJlZ2lvbi0+b2Zmc2V0ID0gTkZD X1VTRVJfQllURVMgKyBzZWN0aW9uICogTkZDX09PQl9QRVJfRUNDKG5hbmQpOyAgCj4gPiAKPiA+ IFRoZSAoKSBhcmUgc3RpbGwgbmVlZGVkIGFyb3VuZCB0aGUgJyonCj4gPiAgIAo+ID4+ICAJb29i cmVnaW9uLT5sZW5ndGggPSBuYW5kLT5lY2MuYnl0ZXM7Cj4gPj4gIAo+ID4+ICAJcmV0dXJuIDA7 Cj4gPj4gQEAgLTk5MiwxMiArMTA5NiwxNiBAQCBzdGF0aWMgaW50IG1lc29uX29vYmxheW91dF9m cmVlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgc2VjdGlvbiwKPiA+PiAgCQkJCXN0cnVjdCBt dGRfb29iX3JlZ2lvbiAqb29icmVnaW9uKQo+ID4+ICB7Cj4gPj4gIAlzdHJ1Y3QgbmFuZF9jaGlw ICpuYW5kID0gbXRkX3RvX25hbmQobXRkKTsKPiA+PiArCXUzMiBvb2JfYnl0ZXMgPSBtZXNvbl9u ZmNfZ2V0X29vYl9ieXRlcyhuYW5kKTsKPiA+PiAgCj4gPj4gIAlpZiAoc2VjdGlvbiA+PSBuYW5k LT5lY2Muc3RlcHMpCj4gPj4gIAkJcmV0dXJuIC1FUkFOR0U7Cj4gPj4gIAo+ID4+IC0Jb29icmVn aW9uLT5vZmZzZXQgPSBzZWN0aW9uICogKDIgKyBuYW5kLT5lY2MuYnl0ZXMpOwo+ID4+IC0Jb29i cmVnaW9uLT5sZW5ndGggPSAyOwo+ID4+ICsJLyogU3BsaXQgcmVzdCBvZiBPT0IgYXJlYSAobm90 IGNvdmVyZWQgYnkgRUNDIGVuZ2luZSkgcGVyIGVhY2gKPiA+PiArCSAqIEVDQyBzZWN0aW9uLiBU aGlzIHdpbGwgYmUgT09CIGRhdGEgYXZhaWxhYmxlIHRvIHVzZXIuCj4gPj4gKwkgKi8KPiA+PiAr CW9vYnJlZ2lvbi0+b2Zmc2V0ID0gKHNlY3Rpb24gKyBuYW5kLT5lY2Muc3RlcHMpICogTkZDX09P Ql9QRVJfRUNDKG5hbmQpOwo+ID4+ICsJb29icmVnaW9uLT5sZW5ndGggPSBvb2JfYnl0ZXMgLyBu YW5kLT5lY2Muc3RlcHM7Cj4gPj4gIAo+ID4+ICAJcmV0dXJuIDA7Cj4gPj4gIH0KPiA+PiBAQCAt MTE4NCw2ICsxMjkyLDkgQEAgc3RhdGljIGludCBtZXNvbl9uYW5kX2JjaF9tb2RlKHN0cnVjdCBu YW5kX2NoaXAgKm5hbmQpCj4gPj4gIAo+ID4+ICBzdGF0aWMgdm9pZCBtZXNvbl9uYW5kX2RldGFj aF9jaGlwKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQpCj4gPj4gIHsKPiA+PiArCXN0cnVjdCBtZXNv bl9uZmNfbmFuZF9jaGlwICptZXNvbl9jaGlwID0gdG9fbWVzb25fbmFuZChuYW5kKTsKPiA+PiAr Cj4gPj4gKwlrZnJlZShtZXNvbl9jaGlwLT5vb2JfYnVmKTsKPiA+PiAgCW1lc29uX25mY19mcmVl X2J1ZmZlcihuYW5kKTsKPiA+PiAgfQo+ID4+ICAKPiA+PiBAQCAtMTIyNSw5ICsxMzM2LDkgQEAg c3RhdGljIGludCBtZXNvbl9uYW5kX2F0dGFjaF9jaGlwKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQp Cj4gPj4gIAluYW5kLT5lY2MuZW5naW5lX3R5cGUgPSBOQU5EX0VDQ19FTkdJTkVfVFlQRV9PTl9I T1NUOwo+ID4+ICAJbmFuZC0+ZWNjLndyaXRlX3BhZ2VfcmF3ID0gbWVzb25fbmZjX3dyaXRlX3Bh Z2VfcmF3Owo+ID4+ICAJbmFuZC0+ZWNjLndyaXRlX3BhZ2UgPSBtZXNvbl9uZmNfd3JpdGVfcGFn ZV9od2VjYzsKPiA+PiAtCW5hbmQtPmVjYy53cml0ZV9vb2JfcmF3ID0gbmFuZF93cml0ZV9vb2Jf c3RkOwo+ID4+IC0JbmFuZC0+ZWNjLndyaXRlX29vYiA9IG5hbmRfd3JpdGVfb29iX3N0ZDsKPiA+ PiAgCj4gPj4gKwluYW5kLT5lY2Mud3JpdGVfb29iX3JhdyA9IG1lc29uX25mY193cml0ZV9vb2Jf cmF3Owo+ID4+ICsJbmFuZC0+ZWNjLndyaXRlX29vYiA9IG1lc29uX25mY193cml0ZV9vb2I7ICAK PiA+IAo+ID4gQWN0dWFsbHkgaWYgeW91IGRlZmluZSB0aGUgcmlnaHQgT09CIGxheW91dHMsIGFy ZSB0aGVzZSByZWFsbHkgbmVlZGVkCj4gPiA/PyBJIHdvdWxkIGV4cGVjdCB0aGUgcmlnaHQgYnl0 ZXMgdG8gYmUgcGlja2VkIHVwIGJ5IHRoZSBkZWZhdWx0Cj4gPiBpbXBsZW1lbnRhdGlvbi4gSSBz ZWUgbm90aGluZyBzcGVjaWZpYyBpbiB5b3VyIGN1cnJlbnQgaW1wbGVtZW50YXRpb24/ICAKPiAK PiBZb3UgbWVhbiB0byB1c2UgJ25hbmRfd3JpdGVfb29iX3N0ZCgpJz8gSWYgc28sIEkgdGhpbmsg aXQgd29uJ3Qgd29yaywKPiBiZWNhdXNlIGl0IHRyaWVzIHRvIHdyaXRlIE9PQiBkYXRhIHJpZ2h0 IGFmdGVyICdtdGQtPndyaXRlc2l6ZScsIGJ1dAo+IHBhZ2UgbGF5b3V0IGZvciB0aGlzIGNvbnRy b2xsZXIgaXMgbGlrZSB0aGlzOgo+IFsgICAgICAgMTAyNCBieXRlcyBvZiBkYXRhICAgICAgICBd Cj4gWyAxNCBieXRlcyBFQ0MgKyAyIGJ5dGVzIGZvciB1c2VyIF0gPC0gd2l0aCBuZXcgbGF5b3V0 IHdlIGRvbid0IHRvdWNoIHRoZXNlIDIgYnl0ZXMKPiBbICAgICAgIDEwMjQgYnl0ZXMgb2YgZGF0 YSAgICAgICAgXQo+IFsgMTQgYnl0ZXMgRUNDICsgMiBieXRlcyBmb3IgdXNlciBdIDwtIHdpdGgg bmV3IGxheW91dCB3ZSBkb24ndCB0b3VjaCB0aGVzZSAyIGJ5dGVzCj4gWyAgICAgIDMyIGJ5dGVz IG9mIHVzZXIgYnl0ZXMgICAgIF0gPC0gd2UgdXNlIHRoZXJlIDMyIGJ5dGVzIGFzIGZyZWUodXNl cikgYnl0ZXMgaW4gT09CCgpSaWdodC4KCj4gCj4gU28gd2l0aCAnbXRkLT53cml0ZXNpemUnIG9m IDIwNDggd2Ugd29uJ3QgZ2V0IGludG8gbGFzdCAzMiBieXRlcyBpbiB0aGUgcGljdHVyZSBhYm92 ZS4KPiBJJ20gbm90IGdvb3QgaW4gTkFORC9NVEQgYXJlYSwgYnV0IEkgdGhpbmsgdGhhdCB3aHkg aSBuZWVkIHNwZWNpYWwgT09CIGFjY2VzcyBjYWxsYmFja3MuCgpPay4KCj4gQWxzbyBpbiBwcmV2 aW91cyBwYXRjaGVzIEBMaWFuZyBzYWlkLCB0aGF0IGRlZmF1bHQgT09CIHJlYWQvd3JpdGUgZnVu Y3Rpb25zIHdvbid0IHdvcmsKPiBvbiB0aGlzIGNvbnRyb2xsZXIgYW5kIGl0IGlzIHdyb25nIHRv IHVzZSB0aGVtIGluIGN1cnJlbnRseSBtZXJnZWQgZHJpdmVyLgo+IAo+ID4gICAKPiA+PiAgCW5h bmQtPmVjYy5yZWFkX3BhZ2VfcmF3ID0gbWVzb25fbmZjX3JlYWRfcGFnZV9yYXc7Cj4gPj4gIAlu YW5kLT5lY2MucmVhZF9wYWdlID0gbWVzb25fbmZjX3JlYWRfcGFnZV9od2VjYzsKPiA+PiAgCW5h bmQtPmVjYy5yZWFkX29vYl9yYXcgPSBtZXNvbl9uZmNfcmVhZF9vb2JfcmF3Owo+ID4+IEBAIC0x MjM3LDkgKzEzNDgsMTYgQEAgc3RhdGljIGludCBtZXNvbl9uYW5kX2F0dGFjaF9jaGlwKHN0cnVj dCBuYW5kX2NoaXAgKm5hbmQpCj4gPj4gIAkJZGV2X2VycihuZmMtPmRldiwgIjE2Yml0cyBidXMg d2lkdGggbm90IHN1cHBvcnRlZCIpOwo+ID4+ICAJCXJldHVybiAtRUlOVkFMOwo+ID4+ICAJfQo+ ID4+ICsKPiA+PiArCW1lc29uX2NoaXAtPm9vYl9idWYgPSBrbWFsbG9jKG5hbmQtPmVjYy5ieXRl cywgR0ZQX0tFUk5FTCk7ICAKPiA+IAo+ID4gZGV2bV9rbWFsbG9jPyAgCj4gCj4gQWNrCj4gCj4g PiAgIAo+ID4+ICsJaWYgKCFtZXNvbl9jaGlwLT5vb2JfYnVmKQo+ID4+ICsJCXJldHVybiAtRU5P TUVNOwo+ID4+ICsKPiA+PiAgCXJldCA9IG1lc29uX2NoaXBfYnVmZmVyX2luaXQobmFuZCk7Cj4g Pj4gLQlpZiAocmV0KQo+ID4+ICsJaWYgKHJldCkgewo+ID4+ICsJCWtmcmVlKG1lc29uX2NoaXAt Pm9vYl9idWYpOwo+ID4+ICAJCXJldHVybiAtRU5PTUVNOwo+ID4+ICsJfQo+ID4+ICAKPiA+PiAg CXJldHVybiByZXQ7Cj4gPj4gIH0gIAo+ID4gCj4gPiAKPiA+IFRoYW5rcywKPiA+IE1pcXXDqGwg IAo+IAo+IFRoYW5rcywgQXJzZW5peQoKClRoYW5rcywKTWlxdcOobAoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4IE1URCBkaXNjdXNz aW9uIG1haWxpbmcgbGlzdApodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2xpbnV4LW10ZC8K 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 61D43C7EE2E for ; Fri, 26 May 2023 17:04:32 +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=0cd6rOPm43C1gDwrSG2ODkF5DcF1Hhsxi7Bc0IBtzKY=; b=DdK9poXXJ3oYqn ThABYEbNgPluSAWzhoq4laX/P+sD8F6I6dguZNHOQoIPmIwG0v3I9K4fS7Ehxo15W+NVkcQgPPRZM pKE9IAdDb6L1MCeQJ45vPWEyRkp8+jcqcJZGg0jMCu+KrTDphsSIAENYI638QhLfdOD0E3v/QhQvH IAfdz9vXiZhZNc1Nz/5OmKw1w2aX82j+BJ4xAB7+HjApkqImCAEc4xGvQYH+zRIMAXXh3WXBeLV7W NJC6DQKwhicF6uE8o/ntsJXUz0VguzdS1rhzMf5QpbvACmTysOzvZpA8sSUc5JmQRj3skO5NIGXn7 ah4qR9Js7fmRYeHaEUiA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1q2arE-003Dx2-0c; Fri, 26 May 2023 17:04:04 +0000 Received: from relay4-d.mail.gandi.net ([2001:4b98:dc4:8::224]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1q2ar8-003DtZ-2W; Fri, 26 May 2023 17:04:02 +0000 X-GND-Sasl: miquel.raynal@bootlin.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1685120631; 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=wZAtIbKobVRsNsvxbSGu/98XFYPX6nWAdRcnWjHYmAc=; b=DWnWEw34M1++02P5eZv/kDxy9QYvXm7LFXTl0Cx9V9dF/KkiP9Q0z6vGT76rIgZuftGwtd soy8mqDa3fYzHl8BhtYghInOVmxbGJaWgtdFCuduC3UYks0rBIBk2Ow3U9lV9JZGN091bR OnRNB2eOTcssbygDV0LzJduArd/TflIb2T2bcGEbUli9kT9dL8TzrSxjZEgHs0kg4AdXrH ++NaOl9zOjA3Ep9ijnE8mm7ZwI1m85f6JaX+U8WKeGqmD2D/9J+m83Wu6CQ4FKxdmRdZ2h BVluWATk1+PduKzVekVvELsVvTs2i3bQp28gmXSq4I8+OJ+NBb8K6/2vLKTeEg== X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com Received: by mail.gandi.net (Postfix) with ESMTPSA id 112E1E0005; Fri, 26 May 2023 17:03:48 +0000 (UTC) Date: Fri, 26 May 2023 19:03:47 +0200 From: Miquel Raynal To: Arseniy Krasnov Cc: Liang Yang , Richard Weinberger , Vignesh Raghavendra , Neil Armstrong , Kevin Hilman , Jerome Brunet , Martin Blumenstingl , Yixun Lan , Jianxin Pan , , , , , , Subject: Re: [PATCH v4 2/5] mtd: rawnand: meson: move OOB to non-protected ECC area Message-ID: <20230526190347.6e34a2be@xps-13> In-Reply-To: References: <20230515094440.3552094-1-AVKrasnov@sberdevices.ru> <20230515094440.3552094-3-AVKrasnov@sberdevices.ru> <20230522173334.7aa6f917@xps-13> Organization: Bootlin X-Mailer: Claws Mail 4.0.0 (GTK+ 3.24.33; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230526_100359_158773_58E7007D X-CRM114-Status: GOOD ( 56.28 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgQXJzZW5peSwKCmF2a3Jhc25vdkBzYmVyZGV2aWNlcy5ydSB3cm90ZSBvbiBUdWUsIDIzIE1h eSAyMDIzIDIwOjE3OjE0ICswMzAwOgoKPiBIZWxsbyBNaXF1ZWwhIFRoYW5rcyBmb3IgZGV0YWls ZWQgcmV2aWV3IQo+IAo+IE9uIDIyLjA1LjIwMjMgMTg6MzMsIE1pcXVlbCBSYXluYWwgd3JvdGU6 Cj4gPiBIaSBBcnNlbml5LAo+ID4gCj4gPiBBVktyYXNub3ZAc2JlcmRldmljZXMucnUgd3JvdGUg b24gTW9uLCAxNSBNYXkgMjAyMyAxMjo0NDozNiArMDMwMDoKPiA+IAo+ID4gVGhlIHRpdGxlIHNo b3VsZCBwZXJoYXBzIGJlICJvbmx5IGV4cG9zZSB1bnByb3RlY3RlZCB1c2VyIE9PQiBieXRlcyIu Cj4gPiAgIAo+ID4+IFRoaXMgbW92ZXMgZnJlZSBieXRlcyBvZiBPT0IgdG8gbm9uLXByb3RlY3Rl ZCBFQ0MgYXJlYS4gSXQgaXMgbmVlZGVkIHRvCj4gPj4gbWFrZSBKRkZTMiB3b3JrcyBjb3JyZWN0 bHkgd2l0aCB0aGlzIE5BTkQgY29udHJvbGxlci4gUHJvYmxlbSBmaXJlcyB3aGVuCj4gPj4gSkZG UzIgZHJpdmVyIHdyaXRlcyBjbGVhbm1hcmtlciB0byBzb21lIHBhZ2UgYW5kIGxhdGVyIGl0IHRy aWVzIHRvIHdyaXRlCj4gPj4gdG8gdGhpcyBwYWdlIC0gd3JpdGUgd2lsbCBiZSBkb25lIHN1Y2Nl c3NmdWxseSwgYnV0IGFmdGVyIHRoYXQgc3VjaCBwYWdlCj4gPj4gYmVjb21lcyB1bnJlYWRhYmxl IGR1ZSB0byBpbnZhbGlkIEVDQyBjb2Rlcy4gVGhpcyBoYXBwZW5zIGJlY2F1c2Ugc2Vjb25kCj4g Pj4gd3JpdGUgbmVlZHMgdG8gdXBkYXRlIEVDQyBjb2RlcywgYnV0IGl0IGlzIGltcG9zc2libGUg dG8gZG8gaXQgY29ycmVjdGx5Cj4gPj4gd2l0aG91dCBibG9jayBlcmFzZS4gU28gaWRlYSBvZiB0 aGlzIHBhdGNoIGlzIHRvICAKPiA+IAo+ID4gIi4uLiBpcyB0byB1c2UgdGhlIHVucHJvdGVjdGVk IE9PQiBhcmVhIHRvIHN0b3JlIHRoZSBjbGVhbm1hcmtlcnMsIHNvCj4gPiB0aGF0IHRoZXkgY2Fu IGJlIHdyaXR0ZW4gYnkgdGhlIGZpbGVzeXN0ZW0gd2l0aG91dCBjYXJpbmcgbXVjaCBhYm91dAo+ ID4gdGhlIHBhZ2UgYmVpbmcgZW1wdHkgb3Igbm90OiB0aGUgRUNDIGNvZGVzIHdpbGwgbm90IGJl IHdyaXR0ZW4gYW55d2F5LiIKPiA+ID8gIAo+IAo+IE9rCj4gCj4gPiAKPiA+IEpGRlMyIGlzIG9u bHkgdXNlZnVsIG9uIHRpbnkgTkFORCBkZXZpY2VzLCB3aGVyZSBVQkkgZG9lcyBub3QgZml0LAo+ ID4gd2hpY2ggYXJlIHVzdWFsbHkgdHJ1ZSBTTEMgZmxhc2hlcywgd2l0aCB0aGUgY2FwYWJpbGl0 eSBvZiB3cml0aW5nCj4gPiBhIHBhZ2Ugd2l0aCBlbXB0eSAoMHhGRikgZGF0YSwgYW5kIHN0aWxs IGJlIGFibGUgdG8gd3JpdGUgYWN0dWFsIGRhdGEKPiA+IHRvIGl0IGxhdGVyIGluIGEgc2Vjb25k IHdyaXRlLiAgCj4gCj4gWW91IG1lYW4gdG8gaW5jbHVkZSB0ZXh0IGFib3ZlIHRvIGNvbW1pdCBt ZXNzYWdlIGFsc28/CgpZZXMsIEkgYmVsaWV2ZSB0aGlzIGRlc2VydmVzIHRvIGJlIGluIHRoZSBj b21taXQgbWVzc2FnZSBhcyB3ZWxsIDopCgo+IAo+ID4gICAKPiA+PiBzcGxpdCBhY2Nlc3NlcyB0 byBPT0IKPiA+PiBmcmVlIGJ5dGVzIGFuZCBkYXRhIG9uIGVhY2ggcGFnZSAtIG5vdyBib3RoIG9m IHRoZW0gZG9lcyBub3QgZGVwZW5kcyBvbgo+ID4+IGVhY2ggb3RoZXIuCj4gPj4KPiA+PiBTaWdu ZWQtb2ZmLWJ5OiBBcnNlbml5IEtyYXNub3YgPEFWS3Jhc25vdkBzYmVyZGV2aWNlcy5ydT4KPiA+ PiAtLS0KPiA+PiAgZHJpdmVycy9tdGQvbmFuZC9yYXcvbWVzb25fbmFuZC5jIHwgMTkyICsrKysr KysrKysrKysrKysrKysrKysrKy0tLS0tLQo+ID4+ICAxIGZpbGUgY2hhbmdlZCwgMTU1IGluc2Vy dGlvbnMoKyksIDM3IGRlbGV0aW9ucygtKQo+ID4+Cj4gPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv bXRkL25hbmQvcmF3L21lc29uX25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvcmF3L21lc29uX25h bmQuYwo+ID4+IGluZGV4IDJmNGQ4Yzg0MTg2Yi4uODUyNmE2Yjg3NzIwIDEwMDY0NAo+ID4+IC0t LSBhL2RyaXZlcnMvbXRkL25hbmQvcmF3L21lc29uX25hbmQuYwo+ID4+ICsrKyBiL2RyaXZlcnMv bXRkL25hbmQvcmF3L21lc29uX25hbmQuYwo+ID4+IEBAIC0xMDgsNiArMTA4LDkgQEAKPiA+PiAg Cj4gPj4gICNkZWZpbmUgUEVSX0lORk9fQllURQkJOAo+ID4+ICAKPiA+PiArI2RlZmluZSBORkNf VVNFUl9CWVRFUwkJMgo+ID4+ICsjZGVmaW5lIE5GQ19PT0JfUEVSX0VDQyhuYW5kKQkoKG5hbmQp LT5lY2MuYnl0ZXMgKyBORkNfVVNFUl9CWVRFUykKPiA+PiArCj4gPj4gIHN0cnVjdCBtZXNvbl9u ZmNfbmFuZF9jaGlwIHsKPiA+PiAgCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKPiA+PiAgCXN0cnVj dCBuYW5kX2NoaXAgbmFuZDsKPiA+PiBAQCAtMTIyLDYgKzEyNSw3IEBAIHN0cnVjdCBtZXNvbl9u ZmNfbmFuZF9jaGlwIHsKPiA+PiAgCXU4ICpkYXRhX2J1ZjsKPiA+PiAgCV9fbGU2NCAqaW5mb19i dWY7Cj4gPj4gIAl1MzIgbnNlbHM7Cj4gPj4gKwl1OCAqb29iX2J1ZjsKPiA+PiAgCXU4IHNlbHNb XTsKPiA+PiAgfTsKPiA+PiAgCj4gPj4gQEAgLTMzOCw3ICszNDIsNyBAQCBzdGF0aWMgdTggKm1l c29uX25mY19vb2JfcHRyKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsIGludCBpKQo+ID4+ICAJc3Ry dWN0IG1lc29uX25mY19uYW5kX2NoaXAgKm1lc29uX2NoaXAgPSB0b19tZXNvbl9uYW5kKG5hbmQp Owo+ID4+ICAJaW50IGxlbjsKPiA+PiAgCj4gPj4gLQlsZW4gPSBuYW5kLT5lY2Muc2l6ZSAqIChp ICsgMSkgKyAobmFuZC0+ZWNjLmJ5dGVzICsgMikgKiBpOwo+ID4+ICsJbGVuID0gbmFuZC0+ZWNj LnNpemUgKiAoaSArIDEpICsgTkZDX09PQl9QRVJfRUNDKG5hbmQpICogaTsgIAo+ID4gCj4gPiBU aGlzLi4uCj4gPiAgIAo+ID4+ICAKPiA+PiAgCXJldHVybiBtZXNvbl9jaGlwLT5kYXRhX2J1ZiAr IGxlbjsKPiA+PiAgfQo+ID4+IEBAIC0zNDksNyArMzUzLDcgQEAgc3RhdGljIHU4ICptZXNvbl9u ZmNfZGF0YV9wdHIoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgaW50IGkpCj4gPj4gIAlpbnQgbGVu LCB0ZW1wOwo+ID4+ICAKPiA+PiAgCXRlbXAgPSBuYW5kLT5lY2Muc2l6ZSArIG5hbmQtPmVjYy5i eXRlczsKPiA+PiAtCWxlbiA9ICh0ZW1wICsgMikgKiBpOwo+ID4+ICsJbGVuID0gKHRlbXAgKyBO RkNfVVNFUl9CWVRFUykgKiBpOyAgCj4gPiAKPiA+IC4uLiBhbmQgdGhpcyAoc2FtZSBiZWxvdykK PiA+IAo+ID4gYXJlIHB1cmVseSBjb3NtZXRpYywgc2hvdWxkIGJlIGluIGEgcGF0Y2ggYXNpZGUu Cj4gPiAgIAo+IAo+IEFjaywgaSdsbCBtb3ZlIGNvc21ldGljIHVwZGF0ZXMgdG8gc2VwYXJhdGUg cGF0Y2guCj4gCj4gPj4gIAo+ID4+ICAJcmV0dXJuIG1lc29uX2NoaXAtPmRhdGFfYnVmICsgbGVu Owo+ID4+ICB9Cj4gPj4gQEAgLTM1NywyOSArMzYxLDQ3IEBAIHN0YXRpYyB1OCAqbWVzb25fbmZj X2RhdGFfcHRyKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsIGludCBpKQo+ID4+ICBzdGF0aWMgdm9p ZCBtZXNvbl9uZmNfZ2V0X2RhdGFfb29iKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsCj4gPj4gIAkJ CQkgICB1OCAqYnVmLCB1OCAqb29iYnVmKQo+ID4+ICB7Cj4gPj4gKwlzdHJ1Y3QgbWVzb25fbmZj X25hbmRfY2hpcCAqbWVzb25fY2hpcCA9IHRvX21lc29uX25hbmQobmFuZCk7Cj4gPj4gKwlzdHJ1 Y3QgbXRkX2luZm8gKm10ZCA9IG5hbmRfdG9fbXRkKG5hbmQpOwo+ID4+ICAJaW50IGksIG9vYl9s ZW4gPSAwOwo+ID4+ICAJdTggKmRzcmMsICpvc3JjOwo+ID4+ICsJdTggKm9vYnRhaWw7Cj4gPj4g IAo+ID4+IC0Jb29iX2xlbiA9IG5hbmQtPmVjYy5ieXRlcyArIDI7Cj4gPj4gKwlvb2JfbGVuID0g TkZDX09PQl9QRVJfRUNDKG5hbmQpOwo+ID4+ICAJZm9yIChpID0gMDsgaSA8IG5hbmQtPmVjYy5z dGVwczsgaSsrKSB7Cj4gPj4gIAkJaWYgKGJ1Zikgewo+ID4+ICAJCQlkc3JjID0gbWVzb25fbmZj X2RhdGFfcHRyKG5hbmQsIGkpOwo+ID4+ICAJCQltZW1jcHkoYnVmLCBkc3JjLCBuYW5kLT5lY2Mu c2l6ZSk7Cj4gPj4gIAkJCWJ1ZiArPSBuYW5kLT5lY2Muc2l6ZTsKPiA+PiAgCQl9Cj4gPj4gLQkJ b3NyYyA9IG1lc29uX25mY19vb2JfcHRyKG5hbmQsIGkpOwo+ID4+IC0JCW1lbWNweShvb2JidWYs IG9zcmMsIG9vYl9sZW4pOwo+ID4+IC0JCW9vYmJ1ZiArPSBvb2JfbGVuOwo+ID4+ICsKPiA+PiAr CQlpZiAob29iYnVmKSB7Cj4gPj4gKwkJCW9zcmMgPSBtZXNvbl9uZmNfb29iX3B0cihuYW5kLCBp KTsKPiA+PiArCQkJbWVtY3B5KG9vYmJ1Ziwgb3NyYywgb29iX2xlbik7Cj4gPj4gKwkJCW9vYmJ1 ZiArPSBvb2JfbGVuOwo+ID4+ICsJCX0KPiA+PiAgCX0KPiA+PiArCj4gPj4gKwlpZiAoIW9vYmJ1 ZikKPiA+PiArCQlyZXR1cm47ICAKPiA+IAo+ID4gVGhlIHdob2xlICJpZiAob29iYnVmKSIgbG9n aWMgaXMgbmljZSB0byBoYXZlLCBidXQgc2hvdWxkIGFzIHdlbGwgYmUgaW4KPiA+IGEgZGVkaWNh dGVkIHBhdGNoLiAgCj4gCj4gU29ycnksIFlvdSBtZWFuIHRoYXQgdGhpcyBsb2dpYyBpbXBsZW1l bnRzIHJlYWQgb2YgRUNDIGNvZGVzPyBBbmQgbm90Cj4gcmVsYXRlZCB0byBPT0IgbGF5b3V0IHVw ZGF0ZSBpbiB0aGlzIHBhdGNoPwoKWW91IG5lZWQgdG8gbWFrZSBjb3NtZXRpYyBjaGFuZ2VzIGlu IGEgZmlyc3QgcGF0Y2ggKG9yIGV2ZW4gaW4gc2V2ZXJhbApwYXRjaGVzIGlmIHRoZXkgYXJlIG5v dCByZWxhdGVkKSwgdGhlbiBpbiBhbm90aGVyIHBhdGNoIHlvdSBtaWdodCBtYWtlCmFkZGl0aW9u cyBsaWtlIGEgYmV0dGVyIGhhbmRsaW5nIG9mIHRoZSBPT0IsIGFuZCBhbnkgY2hhbmdlIGluIHRo ZQpsYXlvdXQgbWlnaHQgY29tZSBsYXN0LiBJIGp1c3Qgd2FudCB0byBzcGxpdCB0aGUgcGF0Y2gg dG8gbWFrZQp1bmRlcnN0YW5kYWJsZSBhdG9taWMgY2hhbmdlcyAoYWxzbyBlYXNpZXIgdG8gcmV2 aWV3KS4KCjEgYXRvbWljIGNoYW5nZSA9PSAxIHBhdGNoCgo+ID4gICAKPiA+PiArCj4gPj4gKwlv b2J0YWlsID0gbWVzb25fY2hpcC0+ZGF0YV9idWYgKyBuYW5kLT5lY2Muc3RlcHMgKgo+ID4+ICsJ CSAgKG5hbmQtPmVjYy5zaXplICsgb29iX2xlbik7Cj4gPj4gKwo+ID4+ICsJLyogJ29vYmJ1Zicg aWYgYWxyZWFkeSBzaGlmdGVkIHRvIHRoZSBzdGFydCBvZiB1bnVzZWQgYXJlYS4gKi8gIAo+ID4g Cj4gPiAJCSAgICBpcz8KPiA+IHMvdW51c2VkL3VzZXIvPyBJJ20gbm90IHN1cmUgSSBnZXQgdGhl IGNvbW1lbnQuICAKPiAKPiBZZXMsIG5vdCBjbGVhciBjb21tZW50Lgo+IAo+ID4gICAKPiA+PiAr CW1lbWNweShvb2JidWYsIG9vYnRhaWwsIG10ZC0+b29ic2l6ZSAtIG5hbmQtPmVjYy5zdGVwcyAq IG9vYl9sZW4pOwo+ID4+ICB9Cj4gPj4gIAo+ID4+ICBzdGF0aWMgdm9pZCBtZXNvbl9uZmNfc2V0 X2RhdGFfb29iKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsCj4gPj4gIAkJCQkgICBjb25zdCB1OCAq YnVmLCB1OCAqb29iYnVmKQo+ID4+ICB7Cj4gPj4gKwlzdHJ1Y3QgbWVzb25fbmZjX25hbmRfY2hp cCAqbWVzb25fY2hpcCA9IHRvX21lc29uX25hbmQobmFuZCk7Cj4gPj4gKwlzdHJ1Y3QgbXRkX2lu Zm8gKm10ZCA9IG5hbmRfdG9fbXRkKG5hbmQpOwo+ID4+ICAJaW50IGksIG9vYl9sZW4gPSAwOwo+ ID4+ICAJdTggKmRzcmMsICpvc3JjOwo+ID4+ICsJdTggKm9vYnRhaWw7Cj4gPj4gIAo+ID4+IC0J b29iX2xlbiA9IG5hbmQtPmVjYy5ieXRlcyArIDI7Cj4gPj4gKwlvb2JfbGVuID0gTkZDX09PQl9Q RVJfRUNDKG5hbmQpOwo+ID4+ICAJZm9yIChpID0gMDsgaSA8IG5hbmQtPmVjYy5zdGVwczsgaSsr KSB7Cj4gPj4gIAkJaWYgKGJ1Zikgewo+ID4+ICAJCQlkc3JjID0gbWVzb25fbmZjX2RhdGFfcHRy KG5hbmQsIGkpOwo+ID4+IEBAIC0zOTAsNiArNDEyLDEyIEBAIHN0YXRpYyB2b2lkIG1lc29uX25m Y19zZXRfZGF0YV9vb2Ioc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwKPiA+PiAgCQltZW1jcHkob3Ny Yywgb29iYnVmLCBvb2JfbGVuKTsKPiA+PiAgCQlvb2JidWYgKz0gb29iX2xlbjsKPiA+PiAgCX0K PiA+PiArCj4gPj4gKwlvb2J0YWlsID0gbWVzb25fY2hpcC0+ZGF0YV9idWYgKyBuYW5kLT5lY2Mu c3RlcHMgKgo+ID4+ICsJCSAgKG5hbmQtPmVjYy5zaXplICsgb29iX2xlbik7Cj4gPj4gKwo+ID4+ ICsJLyogJ29vYmJ1ZicgaWYgYWxyZWFkeSBzaGlmdGVkIHRvIHRoZSBzdGFydCBvZiB1bnVzZWQg YXJlYS4gKi8KPiA+PiArCW1lbWNweShvb2J0YWlsLCBvb2JidWYsIG10ZC0+b29ic2l6ZSAtIG5h bmQtPmVjYy5zdGVwcyAqIG9vYl9sZW4pOwo+ID4+ICB9Cj4gPj4gIAo+ID4+ICBzdGF0aWMgaW50 IG1lc29uX25mY19xdWV1ZV9yYihzdHJ1Y3QgbWVzb25fbmZjICpuZmMsIGludCB0aW1lb3V0X21z LCBpbnQgY21kX3JlYWQwKQo+ID4+IEBAIC00MzYsMjUgKzQ2NCwxMiBAQCBzdGF0aWMgdm9pZCBt ZXNvbl9uZmNfc2V0X3VzZXJfYnl0ZShzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLCB1OCAqb29iX2J1 ZikKPiA+PiAgewo+ID4+ICAJc3RydWN0IG1lc29uX25mY19uYW5kX2NoaXAgKm1lc29uX2NoaXAg PSB0b19tZXNvbl9uYW5kKG5hbmQpOwo+ID4+ICAJX19sZTY0ICppbmZvOwo+ID4+IC0JaW50IGks IGNvdW50Owo+ID4+IC0KPiA+PiAtCWZvciAoaSA9IDAsIGNvdW50ID0gMDsgaSA8IG5hbmQtPmVj Yy5zdGVwczsgaSsrLCBjb3VudCArPSAyKSB7Cj4gPj4gLQkJaW5mbyA9ICZtZXNvbl9jaGlwLT5p bmZvX2J1ZltpXTsKPiA+PiAtCQkqaW5mbyB8PSBvb2JfYnVmW2NvdW50XTsKPiA+PiAtCQkqaW5m byB8PSBvb2JfYnVmW2NvdW50ICsgMV0gPDwgODsKPiA+PiAtCX0KPiA+PiAtfQo+ID4+IC0KPiA+ PiAtc3RhdGljIHZvaWQgbWVzb25fbmZjX2dldF91c2VyX2J5dGUoc3RydWN0IG5hbmRfY2hpcCAq bmFuZCwgdTggKm9vYl9idWYpCj4gPj4gLXsKPiA+PiAtCXN0cnVjdCBtZXNvbl9uZmNfbmFuZF9j aGlwICptZXNvbl9jaGlwID0gdG9fbWVzb25fbmFuZChuYW5kKTsKPiA+PiAtCV9fbGU2NCAqaW5m bzsKPiA+PiAtCWludCBpLCBjb3VudDsKPiA+PiArCWludCBpOwo+ID4+ICAKPiA+PiAtCWZvciAo aSA9IDAsIGNvdW50ID0gMDsgaSA8IG5hbmQtPmVjYy5zdGVwczsgaSsrLCBjb3VudCArPSAyKSB7 Cj4gPj4gKwlmb3IgKGkgPSAwOyBpIDwgbmFuZC0+ZWNjLnN0ZXBzOyBpKyspIHsKPiA+PiAgCQlp bmZvID0gJm1lc29uX2NoaXAtPmluZm9fYnVmW2ldOwo+ID4+IC0JCW9vYl9idWZbY291bnRdID0g KmluZm87Cj4gPj4gLQkJb29iX2J1Zltjb3VudCArIDFdID0gKmluZm8gPj4gODsKPiA+PiArCQkv KiBBbHdheXMgaWdub3JlIHVzZXIgYnl0ZXMgcHJvZ3JhbW1pbmcuICovICAKPiA+IAo+ID4gV2h5 PyAgCj4gCj4gSSB0aGluayBjb21tZW50IG1lc3NhZ2UgaXMgd3JvbmcgYSBsaXR0bGUgYml0LiBI ZXJlICJ1c2VyIGJ5dGVzIiBhcmUKPiB1c2VyIGJ5dGVzIHByb3RlY3RlZCBieSBFQ0MgKGUuZy4g bG9jYXRpb24gb2YgdGhlc2UgYnl0ZXMgZGlmZmVycyBmcm9tIG5ldwo+IE9PQiBsYXlvdXQgaW50 cm9kdWNlZCBieSB0aGlzIHBhdGNoKS4gRHVyaW5nIHBhZ2Ugd3JpdGUgdGhpcyBoYXJkd2FyZQo+ IGFsd2F5cyB3cml0ZXMgdGhlc2UgYnl0ZXMgYWxvbmcgd2l0aCBkYXRhLiBCdXQsIG5ldyBPT0Ig bGF5b3V0IGFsd2F5cyBpZ25vcmVzCj4gdGhlc2UgNCBieXRlcywgc28gc2V0IHRoZW0gdG8gMHhG RiBhbHdheXMuCgpXaGVuIHBlcmZvcm1pbmcgcGFnZSByZWFkcy93cml0ZXMsIHlvdSBuZWVkIHRv IHRha2UgdGhlIGRhdGEgYXMgaXQncwpiZWVuIHByb3ZpZGVkLiBZb3UgbWF5IG1vdmUgdGhlIGRh dGEgYXJvdW5kIGluIHRoZSBidWZmZXIgcHJvdmlkZWQgdG8KdGhlIGNvbnRyb2xsZXIsIHNvIHRo YXQgaXQgZ2V0IHRoZSBFQ0MgZGF0YSBhdCB0aGUgcmlnaHQgbG9jYXRpb24sIGFuZAp5b3UgbmVl ZCBvZiBjb3Vyc2UgdG8gcmVvcmdhbml6ZSB0aGUgZGF0YSB3aGVuIHJlYWRpbmcgYXMgd2VsbCwg c28gdGhhdAp0aGUgdXNlciBzZWVzIFhraUIgb2YgZGF0YSArIFlCIG9mIE9PQi4gVGhhdCdzIGFs bCB5b3UgbmVlZCB0byBkbyBpbgp0aGVzZSBoZWxwZXJzLgoKPiA+IEFsc28sIG1heWJlIEkgc2hv dWxkIG1lbnRpb24gdGhlIGhlbHBlcnM6Cj4gPiBtdGRfb29ibGF5b3V0X2dldF9lY2NieXRlcyBh bmQgY28KPiA+IFRoZXkgYXJlIHZlcnkgdXNlZnVsIHRvIGRlYWwgd2l0aCBPT0IgYnl0ZXMuIEV2 ZXJ5dGhpbmcgc2VlbXMgZXh0cmVtZWx5Cj4gPiBoYXJkY29kZWQgaW4gdGhpcyBkcml2ZXIsIHdo aWxlIHRoZSB1c2VyIGNhbiB0dW5lIHJlYWQvd3JpdGUgT09CCj4gPiBvcGVyYXRpb25zLiAgCj4g Cj4gVGhhbmtzIGZvciBkZXRhaWxzLCBJSVVDIHRoZXNlIGhlbHBlcnMgd2lsbCB3b3JrIGNvcnJl Y3RseSB3aXRoIHRoaXMgZHJpdmVyLgo+IFdoYXQgbWVhbnMgInR1bmUiIGhlcmU/CgpUaGUgdXNl ciBjYW4gcHJvdmlkZSBkYXRhIGZvciB0aGUgT09CIHBhcnQgYW5kIHRlbGwgdGhlIG10ZCBsYXll ciB0bwpwbGFjZSB0aGUgYnl0ZXMgaW4gdGhlIC0+b29iX2J1ZiBmb2xsb3dpbmcgZGlmZmVyZW50 IGNvbnN0cmFpbnRzOgotIHRoZSB1c2VyIGJ5dGVzIGFyZSBhbHJlYWR5IHdoZW4gdGhleSBuZWVk IHRvIGJlIChNVERfT1BTX1BMQUNFX09PQgogIGFuZCBNVERfT1BTX1JBVykKLSB0aGUgdXNlciBi eXRlcyBhcmUgcGFja2VkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciwgcGxlYXNlIG1v dmUKICB0aGVtIHdoZXJlIHRoZXkgYmVsb25nIChNVERfT1BTX0FVVE9fT09CKS4KClNvIGluIHRo ZSBjb250cm9sbGVyIGRyaXZlciwgd2hhdCBuZWVkcyB0byBiZSBkb25lIGlzIHRvIG1ha2UgdGhl CnN3aXRjaCBiZXR3ZWVuIHRoZSAiZGF0YTErZGF0YTIrb29iMStvb2IyIiBsYXlvdXQgaW50byB5 b3VyCkVDQyBjb250cm9sbGVyJ3MgbGF5b3V0LCBlZyAiZGF0YTErb29iMStkYXRhMitvb2IyIi4K CkhlbmNlIHlvdSBzaG91bGQgbm90IG5lZWQgYW55dGhpbmcgbGlrZSB0aGF0Ogo+ID4+ICsJCSpp bmZvIHw9IDB4ZmZmZjsKCj4gPj4gIAl9Cj4gPj4gIH0KPiA+PiAgCj4gPj4gQEAgLTY5OCwxOCAr NzEzLDkyIEBAIHN0YXRpYyBpbnQgbWVzb25fbmZjX3dyaXRlX3BhZ2VfcmF3KHN0cnVjdCBuYW5k X2NoaXAgKm5hbmQsIGNvbnN0IHU4ICpidWYsCj4gPj4gIAlyZXR1cm4gbWVzb25fbmZjX3dyaXRl X3BhZ2Vfc3ViKG5hbmQsIHBhZ2UsIDEpOwo+ID4+ICB9Cj4gPj4gIAo+ID4+ICtzdGF0aWMgdTMy IG1lc29uX25mY19nZXRfb29iX2J5dGVzKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQpCj4gPj4gK3sK PiA+PiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQobmFuZCk7Cj4gPj4gKwo+ ID4+ICsJcmV0dXJuIG10ZC0+b29ic2l6ZSAtIG5hbmQtPmVjYy5zdGVwcyAqIE5GQ19PT0JfUEVS X0VDQyhuYW5kKTsKPiA+PiArfQo+ID4+ICsKPiA+PiArc3RhdGljIGludCBfX21lc29uX25mY193 cml0ZV9vb2Ioc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgaW50IHBhZ2UsIHU4ICpvb2JfYnVmKQo+ ID4+ICt7Cj4gPj4gKwlzdHJ1Y3QgbWVzb25fbmZjX25hbmRfY2hpcCAqbWVzb25fY2hpcCA9IHRv X21lc29uX25hbmQobmFuZCk7Cj4gPj4gKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5hbmRfdG9f bXRkKG5hbmQpOwo+ID4+ICsJdTMyIHBhZ2Vfc2l6ZSA9IG10ZC0+d3JpdGVzaXplICsgbXRkLT5v b2JzaXplOwo+ID4+ICsJdTMyIG9vYl9ieXRlcyA9IG1lc29uX25mY19nZXRfb29iX2J5dGVzKG5h bmQpOwo+ID4+ICsJaW50IHJldDsKPiA+PiArCj4gPj4gKwlpZiAoIW9vYl9ieXRlcykKPiA+PiAr CQlyZXR1cm4gMDsKPiA+PiArCj4gPj4gKwlyZXQgPSBuYW5kX3Byb2dfcGFnZV9iZWdpbl9vcChu YW5kLCBwYWdlLCAwLCBOVUxMLCAwKTsKPiA+PiArCWlmIChyZXQpCj4gPj4gKwkJcmV0dXJuIHJl dDsKPiA+PiArCj4gPj4gKwltZW1jcHkobWVzb25fY2hpcC0+b29iX2J1Ziwgb29iX2J1ZiArICht dGQtPm9vYnNpemUgLSBvb2JfYnl0ZXMpLAo+ID4+ICsJICAgICAgIG9vYl9ieXRlcyk7Cj4gPj4g Kwo+ID4+ICsJcmV0ID0gbmFuZF9jaGFuZ2Vfd3JpdGVfY29sdW1uX29wKG5hbmQsIHBhZ2Vfc2l6 ZSAtIG9vYl9ieXRlcywKPiA+PiArCQkJCQkgIG1lc29uX2NoaXAtPm9vYl9idWYsCj4gPj4gKwkJ CQkJICBvb2JfYnl0ZXMsIGZhbHNlKTsKPiA+PiArCWlmIChyZXQpCj4gPj4gKwkJcmV0dXJuIHJl dDsKPiA+PiArCj4gPj4gKwlyZXR1cm4gbmFuZF9wcm9nX3BhZ2VfZW5kX29wKG5hbmQpOwo+ID4+ ICt9Cj4gPj4gKwo+ID4+ICtzdGF0aWMgaW50IF9fbWVzb25fbmZjX3JlYWRfb29iKHN0cnVjdCBu YW5kX2NoaXAgKm5hbmQsIGludCBwYWdlLAo+ID4+ICsJCQkJdTggKm9vYl9idWYpCj4gPj4gK3sK PiA+PiArCXN0cnVjdCBtZXNvbl9uZmNfbmFuZF9jaGlwICptZXNvbl9jaGlwID0gdG9fbWVzb25f bmFuZChuYW5kKTsKPiA+PiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQobmFu ZCk7Cj4gPj4gKwl1MzIgb29iX2J5dGVzOwo+ID4+ICsJdTMyIHBhZ2Vfc2l6ZTsKPiA+PiArCWlu dCByZXQ7Cj4gPj4gKwo+ID4+ICsJb29iX2J5dGVzID0gbWVzb25fbmZjX2dldF9vb2JfYnl0ZXMo bmFuZCk7Cj4gPj4gKwo+ID4+ICsJaWYgKCFvb2JfYnl0ZXMpCj4gPj4gKwkJcmV0dXJuIDA7Cj4g Pj4gKwo+ID4+ICsJcmV0ID0gbmFuZF9yZWFkX3BhZ2Vfb3AobmFuZCwgcGFnZSwgMCwgTlVMTCwg MCk7Cj4gPj4gKwlpZiAocmV0KQo+ID4+ICsJCXJldHVybiByZXQ7Cj4gPj4gKwo+ID4+ICsJcGFn ZV9zaXplID0gbXRkLT53cml0ZXNpemUgKyBtdGQtPm9vYnNpemU7Cj4gPj4gKwo+ID4+ICsJcmV0 ID0gbmFuZF9jaGFuZ2VfcmVhZF9jb2x1bW5fb3AobmFuZCwgcGFnZV9zaXplIC0gb29iX2J5dGVz LAo+ID4+ICsJCQkJCSBtZXNvbl9jaGlwLT5vb2JfYnVmLAo+ID4+ICsJCQkJCSBvb2JfYnl0ZXMs IGZhbHNlKTsKPiA+PiArCj4gPj4gKwlpZiAoIXJldCkKPiA+PiArCQltZW1jcHkob29iX2J1ZiAr IChtdGQtPm9vYnNpemUgLSBvb2JfYnl0ZXMpLAo+ID4+ICsJCSAgICAgICBtZXNvbl9jaGlwLT5v b2JfYnVmLAo+ID4+ICsJCSAgICAgICBvb2JfYnl0ZXMpOwo+ID4+ICsKPiA+PiArCXJldHVybiBy ZXQ7Cj4gPj4gK30KPiA+PiArCj4gPj4gIHN0YXRpYyBpbnQgbWVzb25fbmZjX3dyaXRlX3BhZ2Vf aHdlY2Moc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwKPiA+PiAgCQkJCSAgICAgIGNvbnN0IHU4ICpi dWYsIGludCBvb2JfcmVxdWlyZWQsIGludCBwYWdlKQo+ID4+ICB7Cj4gPj4gIAlzdHJ1Y3QgbXRk X2luZm8gKm10ZCA9IG5hbmRfdG9fbXRkKG5hbmQpOwo+ID4+ICAJc3RydWN0IG1lc29uX25mY19u YW5kX2NoaXAgKm1lc29uX2NoaXAgPSB0b19tZXNvbl9uYW5kKG5hbmQpOwo+ID4+ICAJdTggKm9v Yl9idWYgPSBuYW5kLT5vb2JfcG9pOwo+ID4+ICsJaW50IHJldDsKPiA+PiAgCj4gPj4gIAltZW1j cHkobWVzb25fY2hpcC0+ZGF0YV9idWYsIGJ1ZiwgbXRkLT53cml0ZXNpemUpOwo+ID4+ICAJbWVt c2V0KG1lc29uX2NoaXAtPmluZm9fYnVmLCAwLCBuYW5kLT5lY2Muc3RlcHMgKiBQRVJfSU5GT19C WVRFKTsKPiA+PiAgCW1lc29uX25mY19zZXRfdXNlcl9ieXRlKG5hbmQsIG9vYl9idWYpOwo+ID4+ ICAKPiA+PiAtCXJldHVybiBtZXNvbl9uZmNfd3JpdGVfcGFnZV9zdWIobmFuZCwgcGFnZSwgMCk7 Cj4gPj4gKwlyZXQgPSBtZXNvbl9uZmNfd3JpdGVfcGFnZV9zdWIobmFuZCwgcGFnZSwgMCk7Cj4g Pj4gKwlpZiAocmV0KQo+ID4+ICsJCXJldHVybiByZXQ7Cj4gPj4gKwo+ID4+ICsJaWYgKG9vYl9y ZXF1aXJlZCkKPiA+PiArCQlyZXQgPSBfX21lc29uX25mY193cml0ZV9vb2IobmFuZCwgcGFnZSwg b29iX2J1Zik7ICAKPiA+IAo+ID4gWW91IHNob3VsZCBwcm92aWRlIGFsbCB0aGUgZGF0YSBpbmNs dWRpbmcgT09CIGJ5dGVzIGluIGEgc2luZ2xlIHdyaXRlCj4gPiBjYWxsLCBvdGhlcndpc2UgeW91 IHBlcmZvcm0gdHdvIHdyaXRlcyBvbiB0aGUgc2FtZSBwYWdlLCB0aGF0J3Mgbm90Cj4gPiB3aGF0 IHRoaXMgaGVscGVyIGlzIGV4cGVjdGVkIHRvIGRvLiAgCj4gCj4gSSBzZWUsIHNvIEkgbmVlZCB0 byBjaGVjayAnb29iX3JlcXVpcmVkJyBoZXJlIGJlZm9yZSBwcm9ncmFtbWluZyBwYWdlIGRhdGE/ CgpZZXMhCgo+IElmIGl0IGlzIHNldCAtPiBwbGFjZSBPT0IgZGF0YSB0byBETUEgYnVmZmVyIGFu ZCB0aGVuIGNhbGwgUEFHRVBST0cgb25jZT8KCkV4YWN0bHkuCgo+IAo+ID4gICAKPiA+PiArCj4g Pj4gKwlyZXR1cm4gcmV0Owo+ID4+ICB9Cj4gPj4gIAo+ID4+ICBzdGF0aWMgdm9pZCBtZXNvbl9u ZmNfY2hlY2tfZWNjX3BhZ2VzX3ZhbGlkKHN0cnVjdCBtZXNvbl9uZmMgKm5mYywKPiA+PiBAQCAt NzgzLDcgKzg3Miw3IEBAIHN0YXRpYyBpbnQgbWVzb25fbmZjX3JlYWRfcGFnZV9yYXcoc3RydWN0 IG5hbmRfY2hpcCAqbmFuZCwgdTggKmJ1ZiwKPiA+PiAgCWlmIChyZXQpCj4gPj4gIAkJcmV0dXJu IHJldDsKPiA+PiAgCj4gPj4gLQltZXNvbl9uZmNfZ2V0X2RhdGFfb29iKG5hbmQsIGJ1Ziwgb29i X2J1Zik7Cj4gPj4gKwltZXNvbl9uZmNfZ2V0X2RhdGFfb29iKG5hbmQsIGJ1Ziwgb29iX3JlcXVp cmVkID8gb29iX2J1ZiA6IE5VTEwpOwo+ID4+ICAKPiA+PiAgCXJldHVybiAwOwo+ID4+ICB9Cj4g Pj4gQEAgLTgwMywxMiArODkyLDEyIEBAIHN0YXRpYyBpbnQgbWVzb25fbmZjX3JlYWRfcGFnZV9o d2VjYyhzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLCB1OCAqYnVmLAo+ID4+ICAJaWYgKHJldCkKPiA+ PiAgCQlyZXR1cm4gcmV0Owo+ID4+ICAKPiA+PiAtCW1lc29uX25mY19nZXRfdXNlcl9ieXRlKG5h bmQsIG9vYl9idWYpOwo+ID4+ICAJcmV0ID0gbWVzb25fbmZjX2VjY19jb3JyZWN0KG5hbmQsICZi aXRmbGlwcywgJmNvcnJlY3RfYml0bWFwKTsKPiA+PiAgCWlmIChyZXQgPT0gRUNDX0NIRUNLX1JF VFVSTl9GRikgewo+ID4+ICAJCWlmIChidWYpCj4gPj4gIAkJCW1lbXNldChidWYsIDB4ZmYsIG10 ZC0+d3JpdGVzaXplKTsKPiA+PiAgCQltZW1zZXQob29iX2J1ZiwgMHhmZiwgbXRkLT5vb2JzaXpl KTsKPiA+PiArCQlyZXR1cm4gYml0ZmxpcHM7ICAKPiA+IAo+ID4gVGhhdCBpcyBzb21ldGhpbmcg ZWxzZSA9PiBvdGhlciBmaXggPT4gb3RoZXIgcGF0Y2g/ICAKPiAKPiBJZGVhIG9mIHRoaXMgJ3Jl dHVybicgaXMgdGhhdCB3aGVuIHJlYWQgZmFpbHMsIHdlIHJldHVybiBmcm9tIHRoaXMgZnVuY3Rp b24KPiB3aXRob3V0IHJlYWRpbmcgT09CIGJlbG93LgoKSXQgc2VlbWVkIGxpa2UgdGhlICJyZXR1 cm4gYml0ZmxpcHMiIHRoaW5nIHdhcyBuZXcsIGlmIGl0J3MganVzdCBkdWUgdG8KdGhlIGRpZmYg bm90IGJlaW5nIHdpZGUgZW5vdWdoLCB0aGVuIGl0J3MgZmluZSwgb3RoZXJ3aXNlIGlmIHRoaXMg aXMKc29tZXRoaW5nIG5ldywgaXQgc2hvdWxkIGJlIGluIGEgZGVkaWNhdGVkIHBhdGNoLgoKPiAK PiA+ICAgCj4gPj4gIAl9IGVsc2UgaWYgKHJldCA8IDApIHsKPiA+PiAgCQlpZiAoKG5hbmQtPm9w dGlvbnMgJiBOQU5EX05FRURfU0NSQU1CTElORykgfHwgIWJ1Zikgewo+ID4+ICAJCQltdGQtPmVj Y19zdGF0cy5mYWlsZWQrKzsKPiA+PiBAQCAtODIwLDEyICs5MDksMTQgQEAgc3RhdGljIGludCBt ZXNvbl9uZmNfcmVhZF9wYWdlX2h3ZWNjKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsIHU4ICpidWYs Cj4gPj4gIAo+ID4+ICAJCWZvciAoaSA9IDA7IGkgPCBuYW5kLT5lY2Muc3RlcHMgOyBpKyspIHsK PiA+PiAgCQkJdTggKmRhdGEgPSBidWYgKyBpICogZWNjLT5zaXplOwo+ID4+IC0JCQl1OCAqb29i ID0gbmFuZC0+b29iX3BvaSArIGkgKiAoZWNjLT5ieXRlcyArIDIpOwo+ID4+ICsJCQl1OCAqb29i ID0gbmFuZC0+b29iX3BvaSArIGkgKiBORkNfT09CX1BFUl9FQ0MobmFuZCk7Cj4gPj4gIAo+ID4+ ICAJCQlpZiAoY29ycmVjdF9iaXRtYXAgJiBCSVRfVUxMKGkpKQo+ID4+ICAJCQkJY29udGludWU7 Cj4gPj4gKwo+ID4+ICAJCQlyZXQgPSBuYW5kX2NoZWNrX2VyYXNlZF9lY2NfY2h1bmsoZGF0YSwJ ZWNjLT5zaXplLAo+ID4+IC0JCQkJCQkJICBvb2IsIGVjYy0+Ynl0ZXMgKyAyLAo+ID4+ICsJCQkJ CQkJICBvb2IsCj4gPj4gKwkJCQkJCQkgIE5GQ19PT0JfUEVSX0VDQyhuYW5kKSwKPiA+PiAgCQkJ CQkJCSAgTlVMTCwgMCwKPiA+PiAgCQkJCQkJCSAgZWNjLT5zdHJlbmd0aCk7Cj4gPj4gIAkJCWlm IChyZXQgPCAwKSB7Cj4gPj4gQEAgLTgzOSwxNyArOTMwLDMwIEBAIHN0YXRpYyBpbnQgbWVzb25f bmZjX3JlYWRfcGFnZV9od2VjYyhzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLCB1OCAqYnVmLAo+ID4+ ICAJCW1lbWNweShidWYsIG1lc29uX2NoaXAtPmRhdGFfYnVmLCBtdGQtPndyaXRlc2l6ZSk7Cj4g Pj4gIAl9Cj4gPj4gIAo+ID4+ICsJaWYgKG9vYl9yZXF1aXJlZCkKPiA+PiArCQlfX21lc29uX25m Y19yZWFkX29vYihuYW5kLCBwYWdlLCBvb2JfYnVmKTsgIAo+ID4gCj4gPiBJbiB0aGUgc3RhbmRh bG9uZSAicmVhZF9vb2IiIGhvb2ssIHlvdSBoYXZlIHRvIHNlbmQgYSBSRUFEMCBjb21tYW5kLAo+ ID4gYnV0IG5vdCB3aGVuIHlvdSBhcmUgaW4gdGhlIHJlYWRfcGFnZSBob29rLiBJdCBpcyBhIGJp ZyB3YXN0ZSBvZiB0aW1lLiAgCj4gCj4gSUlVQyBhcHByb2FjaCBoZXJlIG11c3QgYmUgZXhhY3Rs eSB0aGUgc2FtZSBhcyBpbiB3cml0ZT8gRS5nLiBpIG5lZWQgdG8KPiBzZW5kIHNpbmdsZSBSRUFE MCBhbmQgdGhlbiBmaWxsIHByb3ZpZGVkIE9PQiBidWZmZXIgaWYgbmVlZGVkPwoKWWVzLgoKRm9y IGJvdGggcmVhZHMgYW5kIHdyaXRlcywgdGhlIGxvZ2ljIGlzOgotIHRoZXJlIGFyZSBjb21tYW5k cyB3aGljaCBhcmUgYWN0dWFsbHkgdGltZSBjb25zdW1pbmc6IHRoZXJlIGlzCiAgc29tZXRoaW5n IGhhcHBlbmluZyBvbiB0aGUgbmFuZCBhcnJheSB3aGljaCBlaXRoZXIgcmVhZHMgb3Igd3JpdGVz CiAgZGF0YSB0by9mcm9tIHRoZSBpbnRlcm5hbCBzcmFtLgotIHRoZXJlIGFyZSBvdGhlciBjb21t YW5kcyB3aGljaCBqdXN0IGNoYW5nZSB0aGUgInBvaW50ZXIiIGluIHRoZQogIGludGVybmFsIHNy YW0uCgpTbyB5b3UgY2FuIGJhc2ljYWxseSBzYXkgIkkgd2FudCB0byB3cml0ZSBpbnRvIHRoZSBz cmFtIGF0IG9mZnNldCBYLAp0aGVuIGF0IG9mZnNldCBZIiBhbmQgd2hlbiB0aGUgc3JhbSBoYXMg YmVlbiBmaWxsZWQgeW91IGNhbiBjb21taXQgdGhlCndyaXRlIGFuZCB0aGF0J3MgdGhlIG9wZXJh dGlvbiB3aGljaCBzaG91bGQgaGFwcGVuIG9ubHkgb25jZS4gSW4gdGhlCnJlYWQgcGF0aCBpdCdz IHRoZSBvcHBvc2l0ZSwgeW91IHJlcXVlc3QgYSByZWFkIGZyb20gdGhlIE5BTkQgYXJyYXkgaW50 bwp0aGUgc3JhbSBjYWNoZSwgYW5kIHlvdSBjYW4gdGhlbiByZXF1ZXN0IGRhdGEgcmFuZG9tbHku IE9mIGNvdXJzZSBib3RoCm9wZXJhdGlvbnMgY2Fubm90IGJlIHRvbyByYW5kb20gZWl0aGVyLCB5 b3UgbmVlZCB0byBmb2xsb3cgdGhlIEVDQwplbmdpbmUgcGF0dGVybiB3aGljaCBtdXN0IGJlIGZl ZCB3aXRoIFggYnl0ZXMgb2YgZGF0YSBhbmQgdGhlbiB3aWxsCnByb2R1Y2UgdGhlIEVDQyBieXRl cyB0byB3cml0ZS9jb21wYXJlLgoKPiAKPiA+ICAgCj4gPj4gKwo+ID4+ICAJcmV0dXJuIGJpdGZs aXBzOwo+ID4+ICB9Cj4gPj4gIAo+ID4+ICBzdGF0aWMgaW50IG1lc29uX25mY19yZWFkX29vYl9y YXcoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgaW50IHBhZ2UpCj4gPj4gIHsKPiA+PiAtCXJldHVy biBtZXNvbl9uZmNfcmVhZF9wYWdlX3JhdyhuYW5kLCBOVUxMLCAxLCBwYWdlKTsKPiA+PiArCXJl dHVybiBfX21lc29uX25mY19yZWFkX29vYihuYW5kLCBwYWdlLCBuYW5kLT5vb2JfcG9pKTsKPiA+ PiAgfQo+ID4+ICAKPiA+PiAgc3RhdGljIGludCBtZXNvbl9uZmNfcmVhZF9vb2Ioc3RydWN0IG5h bmRfY2hpcCAqbmFuZCwgaW50IHBhZ2UpCj4gPj4gIHsKPiA+PiAtCXJldHVybiBtZXNvbl9uZmNf cmVhZF9wYWdlX2h3ZWNjKG5hbmQsIE5VTEwsIDEsIHBhZ2UpOwo+ID4+ICsJcmV0dXJuIF9fbWVz b25fbmZjX3JlYWRfb29iKG5hbmQsIHBhZ2UsIG5hbmQtPm9vYl9wb2kpOwo+ID4+ICt9Cj4gPj4g Kwo+ID4+ICtzdGF0aWMgaW50IG1lc29uX25mY193cml0ZV9vb2JfcmF3KHN0cnVjdCBuYW5kX2No aXAgKm5hbmQsIGludCBwYWdlKQo+ID4+ICt7Cj4gPj4gKwlyZXR1cm4gX19tZXNvbl9uZmNfd3Jp dGVfb29iKG5hbmQsIHBhZ2UsIG5hbmQtPm9vYl9wb2kpOwo+ID4+ICt9Cj4gPj4gKwo+ID4+ICtz dGF0aWMgaW50IG1lc29uX25mY193cml0ZV9vb2Ioc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgaW50 IHBhZ2UpCj4gPj4gK3sKPiA+PiArCXJldHVybiBfX21lc29uX25mY193cml0ZV9vb2IobmFuZCwg cGFnZSwgbmFuZC0+b29iX3BvaSk7ICAKPiA+IAo+ID4gRG8gd2UgcmVhbGx5IG5lZWQgdGhlc2Ug aW5kaXJlY3Rpb25zPyAgCj4gCj4gUmlnaHQsIEkgdGhpbmsgSSBjYW4gdXNlIG9ubHkgb25lIGZ1 bmN0aW9uIGZvciBPT0Igd3JpdGUgaW4gYm90aCBFQ0MgYW5kIHJhdyBtb2Rlcy4KPiAKPiA+ICAg Cj4gPj4gIH0KPiA+PiAgCj4gPj4gIHN0YXRpYyBib29sIG1lc29uX25mY19pc19idWZmZXJfZG1h X3NhZmUoY29uc3Qgdm9pZCAqYnVmZmVyKQo+ID4+IEBAIC05ODIsNyArMTA4Niw3IEBAIHN0YXRp YyBpbnQgbWVzb25fb29ibGF5b3V0X2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHNlY3Rp b24sCj4gPj4gIAlpZiAoc2VjdGlvbiA+PSBuYW5kLT5lY2Muc3RlcHMpCj4gPj4gIAkJcmV0dXJu IC1FUkFOR0U7Cj4gPj4gIAo+ID4+IC0Jb29icmVnaW9uLT5vZmZzZXQgPSAgMiArIChzZWN0aW9u ICogKDIgKyBuYW5kLT5lY2MuYnl0ZXMpKTsKPiA+PiArCW9vYnJlZ2lvbi0+b2Zmc2V0ID0gTkZD X1VTRVJfQllURVMgKyBzZWN0aW9uICogTkZDX09PQl9QRVJfRUNDKG5hbmQpOyAgCj4gPiAKPiA+ IFRoZSAoKSBhcmUgc3RpbGwgbmVlZGVkIGFyb3VuZCB0aGUgJyonCj4gPiAgIAo+ID4+ICAJb29i cmVnaW9uLT5sZW5ndGggPSBuYW5kLT5lY2MuYnl0ZXM7Cj4gPj4gIAo+ID4+ICAJcmV0dXJuIDA7 Cj4gPj4gQEAgLTk5MiwxMiArMTA5NiwxNiBAQCBzdGF0aWMgaW50IG1lc29uX29vYmxheW91dF9m cmVlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgc2VjdGlvbiwKPiA+PiAgCQkJCXN0cnVjdCBt dGRfb29iX3JlZ2lvbiAqb29icmVnaW9uKQo+ID4+ICB7Cj4gPj4gIAlzdHJ1Y3QgbmFuZF9jaGlw ICpuYW5kID0gbXRkX3RvX25hbmQobXRkKTsKPiA+PiArCXUzMiBvb2JfYnl0ZXMgPSBtZXNvbl9u ZmNfZ2V0X29vYl9ieXRlcyhuYW5kKTsKPiA+PiAgCj4gPj4gIAlpZiAoc2VjdGlvbiA+PSBuYW5k LT5lY2Muc3RlcHMpCj4gPj4gIAkJcmV0dXJuIC1FUkFOR0U7Cj4gPj4gIAo+ID4+IC0Jb29icmVn aW9uLT5vZmZzZXQgPSBzZWN0aW9uICogKDIgKyBuYW5kLT5lY2MuYnl0ZXMpOwo+ID4+IC0Jb29i cmVnaW9uLT5sZW5ndGggPSAyOwo+ID4+ICsJLyogU3BsaXQgcmVzdCBvZiBPT0IgYXJlYSAobm90 IGNvdmVyZWQgYnkgRUNDIGVuZ2luZSkgcGVyIGVhY2gKPiA+PiArCSAqIEVDQyBzZWN0aW9uLiBU aGlzIHdpbGwgYmUgT09CIGRhdGEgYXZhaWxhYmxlIHRvIHVzZXIuCj4gPj4gKwkgKi8KPiA+PiAr CW9vYnJlZ2lvbi0+b2Zmc2V0ID0gKHNlY3Rpb24gKyBuYW5kLT5lY2Muc3RlcHMpICogTkZDX09P Ql9QRVJfRUNDKG5hbmQpOwo+ID4+ICsJb29icmVnaW9uLT5sZW5ndGggPSBvb2JfYnl0ZXMgLyBu YW5kLT5lY2Muc3RlcHM7Cj4gPj4gIAo+ID4+ICAJcmV0dXJuIDA7Cj4gPj4gIH0KPiA+PiBAQCAt MTE4NCw2ICsxMjkyLDkgQEAgc3RhdGljIGludCBtZXNvbl9uYW5kX2JjaF9tb2RlKHN0cnVjdCBu YW5kX2NoaXAgKm5hbmQpCj4gPj4gIAo+ID4+ICBzdGF0aWMgdm9pZCBtZXNvbl9uYW5kX2RldGFj aF9jaGlwKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQpCj4gPj4gIHsKPiA+PiArCXN0cnVjdCBtZXNv bl9uZmNfbmFuZF9jaGlwICptZXNvbl9jaGlwID0gdG9fbWVzb25fbmFuZChuYW5kKTsKPiA+PiAr Cj4gPj4gKwlrZnJlZShtZXNvbl9jaGlwLT5vb2JfYnVmKTsKPiA+PiAgCW1lc29uX25mY19mcmVl X2J1ZmZlcihuYW5kKTsKPiA+PiAgfQo+ID4+ICAKPiA+PiBAQCAtMTIyNSw5ICsxMzM2LDkgQEAg c3RhdGljIGludCBtZXNvbl9uYW5kX2F0dGFjaF9jaGlwKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQp Cj4gPj4gIAluYW5kLT5lY2MuZW5naW5lX3R5cGUgPSBOQU5EX0VDQ19FTkdJTkVfVFlQRV9PTl9I T1NUOwo+ID4+ICAJbmFuZC0+ZWNjLndyaXRlX3BhZ2VfcmF3ID0gbWVzb25fbmZjX3dyaXRlX3Bh Z2VfcmF3Owo+ID4+ICAJbmFuZC0+ZWNjLndyaXRlX3BhZ2UgPSBtZXNvbl9uZmNfd3JpdGVfcGFn ZV9od2VjYzsKPiA+PiAtCW5hbmQtPmVjYy53cml0ZV9vb2JfcmF3ID0gbmFuZF93cml0ZV9vb2Jf c3RkOwo+ID4+IC0JbmFuZC0+ZWNjLndyaXRlX29vYiA9IG5hbmRfd3JpdGVfb29iX3N0ZDsKPiA+ PiAgCj4gPj4gKwluYW5kLT5lY2Mud3JpdGVfb29iX3JhdyA9IG1lc29uX25mY193cml0ZV9vb2Jf cmF3Owo+ID4+ICsJbmFuZC0+ZWNjLndyaXRlX29vYiA9IG1lc29uX25mY193cml0ZV9vb2I7ICAK PiA+IAo+ID4gQWN0dWFsbHkgaWYgeW91IGRlZmluZSB0aGUgcmlnaHQgT09CIGxheW91dHMsIGFy ZSB0aGVzZSByZWFsbHkgbmVlZGVkCj4gPiA/PyBJIHdvdWxkIGV4cGVjdCB0aGUgcmlnaHQgYnl0 ZXMgdG8gYmUgcGlja2VkIHVwIGJ5IHRoZSBkZWZhdWx0Cj4gPiBpbXBsZW1lbnRhdGlvbi4gSSBz ZWUgbm90aGluZyBzcGVjaWZpYyBpbiB5b3VyIGN1cnJlbnQgaW1wbGVtZW50YXRpb24/ICAKPiAK PiBZb3UgbWVhbiB0byB1c2UgJ25hbmRfd3JpdGVfb29iX3N0ZCgpJz8gSWYgc28sIEkgdGhpbmsg aXQgd29uJ3Qgd29yaywKPiBiZWNhdXNlIGl0IHRyaWVzIHRvIHdyaXRlIE9PQiBkYXRhIHJpZ2h0 IGFmdGVyICdtdGQtPndyaXRlc2l6ZScsIGJ1dAo+IHBhZ2UgbGF5b3V0IGZvciB0aGlzIGNvbnRy b2xsZXIgaXMgbGlrZSB0aGlzOgo+IFsgICAgICAgMTAyNCBieXRlcyBvZiBkYXRhICAgICAgICBd Cj4gWyAxNCBieXRlcyBFQ0MgKyAyIGJ5dGVzIGZvciB1c2VyIF0gPC0gd2l0aCBuZXcgbGF5b3V0 IHdlIGRvbid0IHRvdWNoIHRoZXNlIDIgYnl0ZXMKPiBbICAgICAgIDEwMjQgYnl0ZXMgb2YgZGF0 YSAgICAgICAgXQo+IFsgMTQgYnl0ZXMgRUNDICsgMiBieXRlcyBmb3IgdXNlciBdIDwtIHdpdGgg bmV3IGxheW91dCB3ZSBkb24ndCB0b3VjaCB0aGVzZSAyIGJ5dGVzCj4gWyAgICAgIDMyIGJ5dGVz IG9mIHVzZXIgYnl0ZXMgICAgIF0gPC0gd2UgdXNlIHRoZXJlIDMyIGJ5dGVzIGFzIGZyZWUodXNl cikgYnl0ZXMgaW4gT09CCgpSaWdodC4KCj4gCj4gU28gd2l0aCAnbXRkLT53cml0ZXNpemUnIG9m IDIwNDggd2Ugd29uJ3QgZ2V0IGludG8gbGFzdCAzMiBieXRlcyBpbiB0aGUgcGljdHVyZSBhYm92 ZS4KPiBJJ20gbm90IGdvb3QgaW4gTkFORC9NVEQgYXJlYSwgYnV0IEkgdGhpbmsgdGhhdCB3aHkg aSBuZWVkIHNwZWNpYWwgT09CIGFjY2VzcyBjYWxsYmFja3MuCgpPay4KCj4gQWxzbyBpbiBwcmV2 aW91cyBwYXRjaGVzIEBMaWFuZyBzYWlkLCB0aGF0IGRlZmF1bHQgT09CIHJlYWQvd3JpdGUgZnVu Y3Rpb25zIHdvbid0IHdvcmsKPiBvbiB0aGlzIGNvbnRyb2xsZXIgYW5kIGl0IGlzIHdyb25nIHRv IHVzZSB0aGVtIGluIGN1cnJlbnRseSBtZXJnZWQgZHJpdmVyLgo+IAo+ID4gICAKPiA+PiAgCW5h bmQtPmVjYy5yZWFkX3BhZ2VfcmF3ID0gbWVzb25fbmZjX3JlYWRfcGFnZV9yYXc7Cj4gPj4gIAlu YW5kLT5lY2MucmVhZF9wYWdlID0gbWVzb25fbmZjX3JlYWRfcGFnZV9od2VjYzsKPiA+PiAgCW5h bmQtPmVjYy5yZWFkX29vYl9yYXcgPSBtZXNvbl9uZmNfcmVhZF9vb2JfcmF3Owo+ID4+IEBAIC0x MjM3LDkgKzEzNDgsMTYgQEAgc3RhdGljIGludCBtZXNvbl9uYW5kX2F0dGFjaF9jaGlwKHN0cnVj dCBuYW5kX2NoaXAgKm5hbmQpCj4gPj4gIAkJZGV2X2VycihuZmMtPmRldiwgIjE2Yml0cyBidXMg d2lkdGggbm90IHN1cHBvcnRlZCIpOwo+ID4+ICAJCXJldHVybiAtRUlOVkFMOwo+ID4+ICAJfQo+ ID4+ICsKPiA+PiArCW1lc29uX2NoaXAtPm9vYl9idWYgPSBrbWFsbG9jKG5hbmQtPmVjYy5ieXRl cywgR0ZQX0tFUk5FTCk7ICAKPiA+IAo+ID4gZGV2bV9rbWFsbG9jPyAgCj4gCj4gQWNrCj4gCj4g PiAgIAo+ID4+ICsJaWYgKCFtZXNvbl9jaGlwLT5vb2JfYnVmKQo+ID4+ICsJCXJldHVybiAtRU5P TUVNOwo+ID4+ICsKPiA+PiAgCXJldCA9IG1lc29uX2NoaXBfYnVmZmVyX2luaXQobmFuZCk7Cj4g Pj4gLQlpZiAocmV0KQo+ID4+ICsJaWYgKHJldCkgewo+ID4+ICsJCWtmcmVlKG1lc29uX2NoaXAt Pm9vYl9idWYpOwo+ID4+ICAJCXJldHVybiAtRU5PTUVNOwo+ID4+ICsJfQo+ID4+ICAKPiA+PiAg CXJldHVybiByZXQ7Cj4gPj4gIH0gIAo+ID4gCj4gPiAKPiA+IFRoYW5rcywKPiA+IE1pcXXDqGwg IAo+IAo+IFRoYW5rcywgQXJzZW5peQoKClRoYW5rcywKTWlxdcOobAoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5n IGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5p bmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo= 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 36FBBC77B73 for ; Fri, 26 May 2023 17:04:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230156AbjEZRD6 (ORCPT ); Fri, 26 May 2023 13:03:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56908 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229523AbjEZRD4 (ORCPT ); Fri, 26 May 2023 13:03:56 -0400 Received: from relay4-d.mail.gandi.net (relay4-d.mail.gandi.net [IPv6:2001:4b98:dc4:8::224]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AE50DBC for ; Fri, 26 May 2023 10:03:53 -0700 (PDT) X-GND-Sasl: miquel.raynal@bootlin.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1685120631; 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=wZAtIbKobVRsNsvxbSGu/98XFYPX6nWAdRcnWjHYmAc=; b=DWnWEw34M1++02P5eZv/kDxy9QYvXm7LFXTl0Cx9V9dF/KkiP9Q0z6vGT76rIgZuftGwtd soy8mqDa3fYzHl8BhtYghInOVmxbGJaWgtdFCuduC3UYks0rBIBk2Ow3U9lV9JZGN091bR OnRNB2eOTcssbygDV0LzJduArd/TflIb2T2bcGEbUli9kT9dL8TzrSxjZEgHs0kg4AdXrH ++NaOl9zOjA3Ep9ijnE8mm7ZwI1m85f6JaX+U8WKeGqmD2D/9J+m83Wu6CQ4FKxdmRdZ2h BVluWATk1+PduKzVekVvELsVvTs2i3bQp28gmXSq4I8+OJ+NBb8K6/2vLKTeEg== X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com X-GND-Sasl: miquel.raynal@bootlin.com Received: by mail.gandi.net (Postfix) with ESMTPSA id 112E1E0005; Fri, 26 May 2023 17:03:48 +0000 (UTC) Date: Fri, 26 May 2023 19:03:47 +0200 From: Miquel Raynal To: Arseniy Krasnov Cc: Liang Yang , Richard Weinberger , Vignesh Raghavendra , Neil Armstrong , Kevin Hilman , Jerome Brunet , Martin Blumenstingl , Yixun Lan , Jianxin Pan , , , , , , Subject: Re: [PATCH v4 2/5] mtd: rawnand: meson: move OOB to non-protected ECC area Message-ID: <20230526190347.6e34a2be@xps-13> In-Reply-To: References: <20230515094440.3552094-1-AVKrasnov@sberdevices.ru> <20230515094440.3552094-3-AVKrasnov@sberdevices.ru> <20230522173334.7aa6f917@xps-13> 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 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Arseniy, avkrasnov@sberdevices.ru wrote on Tue, 23 May 2023 20:17:14 +0300: > Hello Miquel! Thanks for detailed review! >=20 > On 22.05.2023 18:33, Miquel Raynal wrote: > > Hi Arseniy, > >=20 > > AVKrasnov@sberdevices.ru wrote on Mon, 15 May 2023 12:44:36 +0300: > >=20 > > The title should perhaps be "only expose unprotected user OOB bytes". > > =20 > >> This moves free bytes of OOB to non-protected ECC area. It is needed to > >> make JFFS2 works correctly with this NAND controller. Problem fires wh= en > >> JFFS2 driver writes cleanmarker to some page and later it tries to wri= te > >> to this page - write will be done successfully, but after that such pa= ge > >> becomes unreadable due to invalid ECC codes. This happens because seco= nd > >> write needs to update ECC codes, but it is impossible to do it correct= ly > >> without block erase. So idea of this patch is to =20 > >=20 > > "... is to use the unprotected OOB area to store the cleanmarkers, so > > that they can be written by the filesystem without caring much about > > the page being empty or not: the ECC codes will not be written anyway." > > ? =20 >=20 > Ok >=20 > >=20 > > JFFS2 is only useful on tiny NAND devices, where UBI does not fit, > > which are usually true SLC flashes, with the capability of writing > > a page with empty (0xFF) data, and still be able to write actual data > > to it later in a second write. =20 >=20 > You mean to include text above to commit message also? Yes, I believe this deserves to be in the commit message as well :) >=20 > > =20 > >> split accesses to OOB > >> free bytes and data on each page - now both of them does not depends on > >> each other. > >> > >> Signed-off-by: Arseniy Krasnov > >> --- > >> drivers/mtd/nand/raw/meson_nand.c | 192 ++++++++++++++++++++++++------ > >> 1 file changed, 155 insertions(+), 37 deletions(-) > >> > >> diff --git a/drivers/mtd/nand/raw/meson_nand.c b/drivers/mtd/nand/raw/= meson_nand.c > >> index 2f4d8c84186b..8526a6b87720 100644 > >> --- a/drivers/mtd/nand/raw/meson_nand.c > >> +++ b/drivers/mtd/nand/raw/meson_nand.c > >> @@ -108,6 +108,9 @@ > >> =20 > >> #define PER_INFO_BYTE 8 > >> =20 > >> +#define NFC_USER_BYTES 2 > >> +#define NFC_OOB_PER_ECC(nand) ((nand)->ecc.bytes + NFC_USER_BYTES) > >> + > >> struct meson_nfc_nand_chip { > >> struct list_head node; > >> struct nand_chip nand; > >> @@ -122,6 +125,7 @@ struct meson_nfc_nand_chip { > >> u8 *data_buf; > >> __le64 *info_buf; > >> u32 nsels; > >> + u8 *oob_buf; > >> u8 sels[]; > >> }; > >> =20 > >> @@ -338,7 +342,7 @@ static u8 *meson_nfc_oob_ptr(struct nand_chip *nan= d, int i) > >> struct meson_nfc_nand_chip *meson_chip =3D to_meson_nand(nand); > >> int len; > >> =20 > >> - len =3D nand->ecc.size * (i + 1) + (nand->ecc.bytes + 2) * i; > >> + len =3D nand->ecc.size * (i + 1) + NFC_OOB_PER_ECC(nand) * i; =20 > >=20 > > This... > > =20 > >> =20 > >> return meson_chip->data_buf + len; > >> } > >> @@ -349,7 +353,7 @@ static u8 *meson_nfc_data_ptr(struct nand_chip *na= nd, int i) > >> int len, temp; > >> =20 > >> temp =3D nand->ecc.size + nand->ecc.bytes; > >> - len =3D (temp + 2) * i; > >> + len =3D (temp + NFC_USER_BYTES) * i; =20 > >=20 > > ... and this (same below) > >=20 > > are purely cosmetic, should be in a patch aside. > > =20 >=20 > Ack, i'll move cosmetic updates to separate patch. >=20 > >> =20 > >> return meson_chip->data_buf + len; > >> } > >> @@ -357,29 +361,47 @@ static u8 *meson_nfc_data_ptr(struct nand_chip *= nand, int i) > >> static void meson_nfc_get_data_oob(struct nand_chip *nand, > >> u8 *buf, u8 *oobbuf) > >> { > >> + struct meson_nfc_nand_chip *meson_chip =3D to_meson_nand(nand); > >> + struct mtd_info *mtd =3D nand_to_mtd(nand); > >> int i, oob_len =3D 0; > >> u8 *dsrc, *osrc; > >> + u8 *oobtail; > >> =20 > >> - oob_len =3D nand->ecc.bytes + 2; > >> + oob_len =3D NFC_OOB_PER_ECC(nand); > >> for (i =3D 0; i < nand->ecc.steps; i++) { > >> if (buf) { > >> dsrc =3D meson_nfc_data_ptr(nand, i); > >> memcpy(buf, dsrc, nand->ecc.size); > >> buf +=3D nand->ecc.size; > >> } > >> - osrc =3D meson_nfc_oob_ptr(nand, i); > >> - memcpy(oobbuf, osrc, oob_len); > >> - oobbuf +=3D oob_len; > >> + > >> + if (oobbuf) { > >> + osrc =3D meson_nfc_oob_ptr(nand, i); > >> + memcpy(oobbuf, osrc, oob_len); > >> + oobbuf +=3D oob_len; > >> + } > >> } > >> + > >> + if (!oobbuf) > >> + return; =20 > >=20 > > The whole "if (oobbuf)" logic is nice to have, but should as well be in > > a dedicated patch. =20 >=20 > Sorry, You mean that this logic implements read of ECC codes? And not > related to OOB layout update in this patch? You need to make cosmetic changes in a first patch (or even in several patches if they are not related), then in another patch you might make additions like a better handling of the OOB, and any change in the layout might come last. I just want to split the patch to make understandable atomic changes (also easier to review). 1 atomic change =3D=3D 1 patch > > =20 > >> + > >> + oobtail =3D meson_chip->data_buf + nand->ecc.steps * > >> + (nand->ecc.size + oob_len); > >> + > >> + /* 'oobbuf' if already shifted to the start of unused area. */ =20 > >=20 > > is? > > s/unused/user/? I'm not sure I get the comment. =20 >=20 > Yes, not clear comment. >=20 > > =20 > >> + memcpy(oobbuf, oobtail, mtd->oobsize - nand->ecc.steps * oob_len); > >> } > >> =20 > >> static void meson_nfc_set_data_oob(struct nand_chip *nand, > >> const u8 *buf, u8 *oobbuf) > >> { > >> + struct meson_nfc_nand_chip *meson_chip =3D to_meson_nand(nand); > >> + struct mtd_info *mtd =3D nand_to_mtd(nand); > >> int i, oob_len =3D 0; > >> u8 *dsrc, *osrc; > >> + u8 *oobtail; > >> =20 > >> - oob_len =3D nand->ecc.bytes + 2; > >> + oob_len =3D NFC_OOB_PER_ECC(nand); > >> for (i =3D 0; i < nand->ecc.steps; i++) { > >> if (buf) { > >> dsrc =3D meson_nfc_data_ptr(nand, i); > >> @@ -390,6 +412,12 @@ static void meson_nfc_set_data_oob(struct nand_ch= ip *nand, > >> memcpy(osrc, oobbuf, oob_len); > >> oobbuf +=3D oob_len; > >> } > >> + > >> + oobtail =3D meson_chip->data_buf + nand->ecc.steps * > >> + (nand->ecc.size + oob_len); > >> + > >> + /* 'oobbuf' if already shifted to the start of unused area. */ > >> + memcpy(oobtail, oobbuf, mtd->oobsize - nand->ecc.steps * oob_len); > >> } > >> =20 > >> static int meson_nfc_queue_rb(struct meson_nfc *nfc, int timeout_ms, = int cmd_read0) > >> @@ -436,25 +464,12 @@ static void meson_nfc_set_user_byte(struct nand_= chip *nand, u8 *oob_buf) > >> { > >> struct meson_nfc_nand_chip *meson_chip =3D to_meson_nand(nand); > >> __le64 *info; > >> - int i, count; > >> - > >> - for (i =3D 0, count =3D 0; i < nand->ecc.steps; i++, count +=3D 2) { > >> - info =3D &meson_chip->info_buf[i]; > >> - *info |=3D oob_buf[count]; > >> - *info |=3D oob_buf[count + 1] << 8; > >> - } > >> -} > >> - > >> -static void meson_nfc_get_user_byte(struct nand_chip *nand, u8 *oob_b= uf) > >> -{ > >> - struct meson_nfc_nand_chip *meson_chip =3D to_meson_nand(nand); > >> - __le64 *info; > >> - int i, count; > >> + int i; > >> =20 > >> - for (i =3D 0, count =3D 0; i < nand->ecc.steps; i++, count +=3D 2) { > >> + for (i =3D 0; i < nand->ecc.steps; i++) { > >> info =3D &meson_chip->info_buf[i]; > >> - oob_buf[count] =3D *info; > >> - oob_buf[count + 1] =3D *info >> 8; > >> + /* Always ignore user bytes programming. */ =20 > >=20 > > Why? =20 >=20 > I think comment message is wrong a little bit. Here "user bytes" are > user bytes protected by ECC (e.g. location of these bytes differs from new > OOB layout introduced by this patch). During page write this hardware > always writes these bytes along with data. But, new OOB layout always ign= ores > these 4 bytes, so set them to 0xFF always. When performing page reads/writes, you need to take the data as it's been provided. You may move the data around in the buffer provided to the controller, so that it get the ECC data at the right location, and you need of course to reorganize the data when reading as well, so that the user sees XkiB of data + YB of OOB. That's all you need to do in these helpers. > > Also, maybe I should mention the helpers: > > mtd_ooblayout_get_eccbytes and co > > They are very useful to deal with OOB bytes. Everything seems extremely > > hardcoded in this driver, while the user can tune read/write OOB > > operations. =20 >=20 > Thanks for details, IIUC these helpers will work correctly with this driv= er. > What means "tune" here? The user can provide data for the OOB part and tell the mtd layer to place the bytes in the ->oob_buf following different constraints: - the user bytes are already when they need to be (MTD_OPS_PLACE_OOB and MTD_OPS_RAW) - the user bytes are packed at the beginning of the buffer, please move them where they belong (MTD_OPS_AUTO_OOB). So in the controller driver, what needs to be done is to make the switch between the "data1+data2+oob1+oob2" layout into your ECC controller's layout, eg "data1+oob1+data2+oob2". Hence you should not need anything like that: > >> + *info |=3D 0xffff; > >> } > >> } > >> =20 > >> @@ -698,18 +713,92 @@ static int meson_nfc_write_page_raw(struct nand_= chip *nand, const u8 *buf, > >> return meson_nfc_write_page_sub(nand, page, 1); > >> } > >> =20 > >> +static u32 meson_nfc_get_oob_bytes(struct nand_chip *nand) > >> +{ > >> + struct mtd_info *mtd =3D nand_to_mtd(nand); > >> + > >> + return mtd->oobsize - nand->ecc.steps * NFC_OOB_PER_ECC(nand); > >> +} > >> + > >> +static int __meson_nfc_write_oob(struct nand_chip *nand, int page, u8= *oob_buf) > >> +{ > >> + struct meson_nfc_nand_chip *meson_chip =3D to_meson_nand(nand); > >> + struct mtd_info *mtd =3D nand_to_mtd(nand); > >> + u32 page_size =3D mtd->writesize + mtd->oobsize; > >> + u32 oob_bytes =3D meson_nfc_get_oob_bytes(nand); > >> + int ret; > >> + > >> + if (!oob_bytes) > >> + return 0; > >> + > >> + ret =3D nand_prog_page_begin_op(nand, page, 0, NULL, 0); > >> + if (ret) > >> + return ret; > >> + > >> + memcpy(meson_chip->oob_buf, oob_buf + (mtd->oobsize - oob_bytes), > >> + oob_bytes); > >> + > >> + ret =3D nand_change_write_column_op(nand, page_size - oob_bytes, > >> + meson_chip->oob_buf, > >> + oob_bytes, false); > >> + if (ret) > >> + return ret; > >> + > >> + return nand_prog_page_end_op(nand); > >> +} > >> + > >> +static int __meson_nfc_read_oob(struct nand_chip *nand, int page, > >> + u8 *oob_buf) > >> +{ > >> + struct meson_nfc_nand_chip *meson_chip =3D to_meson_nand(nand); > >> + struct mtd_info *mtd =3D nand_to_mtd(nand); > >> + u32 oob_bytes; > >> + u32 page_size; > >> + int ret; > >> + > >> + oob_bytes =3D meson_nfc_get_oob_bytes(nand); > >> + > >> + if (!oob_bytes) > >> + return 0; > >> + > >> + ret =3D nand_read_page_op(nand, page, 0, NULL, 0); > >> + if (ret) > >> + return ret; > >> + > >> + page_size =3D mtd->writesize + mtd->oobsize; > >> + > >> + ret =3D nand_change_read_column_op(nand, page_size - oob_bytes, > >> + meson_chip->oob_buf, > >> + oob_bytes, false); > >> + > >> + if (!ret) > >> + memcpy(oob_buf + (mtd->oobsize - oob_bytes), > >> + meson_chip->oob_buf, > >> + oob_bytes); > >> + > >> + return ret; > >> +} > >> + > >> static int meson_nfc_write_page_hwecc(struct nand_chip *nand, > >> const u8 *buf, int oob_required, int page) > >> { > >> struct mtd_info *mtd =3D nand_to_mtd(nand); > >> struct meson_nfc_nand_chip *meson_chip =3D to_meson_nand(nand); > >> u8 *oob_buf =3D nand->oob_poi; > >> + int ret; > >> =20 > >> memcpy(meson_chip->data_buf, buf, mtd->writesize); > >> memset(meson_chip->info_buf, 0, nand->ecc.steps * PER_INFO_BYTE); > >> meson_nfc_set_user_byte(nand, oob_buf); > >> =20 > >> - return meson_nfc_write_page_sub(nand, page, 0); > >> + ret =3D meson_nfc_write_page_sub(nand, page, 0); > >> + if (ret) > >> + return ret; > >> + > >> + if (oob_required) > >> + ret =3D __meson_nfc_write_oob(nand, page, oob_buf); =20 > >=20 > > You should provide all the data including OOB bytes in a single write > > call, otherwise you perform two writes on the same page, that's not > > what this helper is expected to do. =20 >=20 > I see, so I need to check 'oob_required' here before programming page dat= a? Yes! > If it is set -> place OOB data to DMA buffer and then call PAGEPROG once? Exactly. >=20 > > =20 > >> + > >> + return ret; > >> } > >> =20 > >> static void meson_nfc_check_ecc_pages_valid(struct meson_nfc *nfc, > >> @@ -783,7 +872,7 @@ static int meson_nfc_read_page_raw(struct nand_chi= p *nand, u8 *buf, > >> if (ret) > >> return ret; > >> =20 > >> - meson_nfc_get_data_oob(nand, buf, oob_buf); > >> + meson_nfc_get_data_oob(nand, buf, oob_required ? oob_buf : NULL); > >> =20 > >> return 0; > >> } > >> @@ -803,12 +892,12 @@ static int meson_nfc_read_page_hwecc(struct nand= _chip *nand, u8 *buf, > >> if (ret) > >> return ret; > >> =20 > >> - meson_nfc_get_user_byte(nand, oob_buf); > >> ret =3D meson_nfc_ecc_correct(nand, &bitflips, &correct_bitmap); > >> if (ret =3D=3D ECC_CHECK_RETURN_FF) { > >> if (buf) > >> memset(buf, 0xff, mtd->writesize); > >> memset(oob_buf, 0xff, mtd->oobsize); > >> + return bitflips; =20 > >=20 > > That is something else =3D> other fix =3D> other patch? =20 >=20 > Idea of this 'return' is that when read fails, we return from this functi= on > without reading OOB below. It seemed like the "return bitflips" thing was new, if it's just due to the diff not being wide enough, then it's fine, otherwise if this is something new, it should be in a dedicated patch. >=20 > > =20 > >> } else if (ret < 0) { > >> if ((nand->options & NAND_NEED_SCRAMBLING) || !buf) { > >> mtd->ecc_stats.failed++; > >> @@ -820,12 +909,14 @@ static int meson_nfc_read_page_hwecc(struct nand= _chip *nand, u8 *buf, > >> =20 > >> for (i =3D 0; i < nand->ecc.steps ; i++) { > >> u8 *data =3D buf + i * ecc->size; > >> - u8 *oob =3D nand->oob_poi + i * (ecc->bytes + 2); > >> + u8 *oob =3D nand->oob_poi + i * NFC_OOB_PER_ECC(nand); > >> =20 > >> if (correct_bitmap & BIT_ULL(i)) > >> continue; > >> + > >> ret =3D nand_check_erased_ecc_chunk(data, ecc->size, > >> - oob, ecc->bytes + 2, > >> + oob, > >> + NFC_OOB_PER_ECC(nand), > >> NULL, 0, > >> ecc->strength); > >> if (ret < 0) { > >> @@ -839,17 +930,30 @@ static int meson_nfc_read_page_hwecc(struct nand= _chip *nand, u8 *buf, > >> memcpy(buf, meson_chip->data_buf, mtd->writesize); > >> } > >> =20 > >> + if (oob_required) > >> + __meson_nfc_read_oob(nand, page, oob_buf); =20 > >=20 > > In the standalone "read_oob" hook, you have to send a READ0 command, > > but not when you are in the read_page hook. It is a big waste of time. = =20 >=20 > IIUC approach here must be exactly the same as in write? E.g. i need to > send single READ0 and then fill provided OOB buffer if needed? Yes. For both reads and writes, the logic is: - there are commands which are actually time consuming: there is something happening on the nand array which either reads or writes data to/from the internal sram. - there are other commands which just change the "pointer" in the internal sram. So you can basically say "I want to write into the sram at offset X, then at offset Y" and when the sram has been filled you can commit the write and that's the operation which should happen only once. In the read path it's the opposite, you request a read from the NAND array into the sram cache, and you can then request data randomly. Of course both operations cannot be too random either, you need to follow the ECC engine pattern which must be fed with X bytes of data and then will produce the ECC bytes to write/compare. >=20 > > =20 > >> + > >> return bitflips; > >> } > >> =20 > >> static int meson_nfc_read_oob_raw(struct nand_chip *nand, int page) > >> { > >> - return meson_nfc_read_page_raw(nand, NULL, 1, page); > >> + return __meson_nfc_read_oob(nand, page, nand->oob_poi); > >> } > >> =20 > >> static int meson_nfc_read_oob(struct nand_chip *nand, int page) > >> { > >> - return meson_nfc_read_page_hwecc(nand, NULL, 1, page); > >> + return __meson_nfc_read_oob(nand, page, nand->oob_poi); > >> +} > >> + > >> +static int meson_nfc_write_oob_raw(struct nand_chip *nand, int page) > >> +{ > >> + return __meson_nfc_write_oob(nand, page, nand->oob_poi); > >> +} > >> + > >> +static int meson_nfc_write_oob(struct nand_chip *nand, int page) > >> +{ > >> + return __meson_nfc_write_oob(nand, page, nand->oob_poi); =20 > >=20 > > Do we really need these indirections? =20 >=20 > Right, I think I can use only one function for OOB write in both ECC and = raw modes. >=20 > > =20 > >> } > >> =20 > >> static bool meson_nfc_is_buffer_dma_safe(const void *buffer) > >> @@ -982,7 +1086,7 @@ static int meson_ooblayout_ecc(struct mtd_info *m= td, int section, > >> if (section >=3D nand->ecc.steps) > >> return -ERANGE; > >> =20 > >> - oobregion->offset =3D 2 + (section * (2 + nand->ecc.bytes)); > >> + oobregion->offset =3D NFC_USER_BYTES + section * NFC_OOB_PER_ECC(nan= d); =20 > >=20 > > The () are still needed around the '*' > > =20 > >> oobregion->length =3D nand->ecc.bytes; > >> =20 > >> return 0; > >> @@ -992,12 +1096,16 @@ static int meson_ooblayout_free(struct mtd_info= *mtd, int section, > >> struct mtd_oob_region *oobregion) > >> { > >> struct nand_chip *nand =3D mtd_to_nand(mtd); > >> + u32 oob_bytes =3D meson_nfc_get_oob_bytes(nand); > >> =20 > >> if (section >=3D nand->ecc.steps) > >> return -ERANGE; > >> =20 > >> - oobregion->offset =3D section * (2 + nand->ecc.bytes); > >> - oobregion->length =3D 2; > >> + /* Split rest of OOB area (not covered by ECC engine) per each > >> + * ECC section. This will be OOB data available to user. > >> + */ > >> + oobregion->offset =3D (section + nand->ecc.steps) * NFC_OOB_PER_ECC(= nand); > >> + oobregion->length =3D oob_bytes / nand->ecc.steps; > >> =20 > >> return 0; > >> } > >> @@ -1184,6 +1292,9 @@ static int meson_nand_bch_mode(struct nand_chip = *nand) > >> =20 > >> static void meson_nand_detach_chip(struct nand_chip *nand) > >> { > >> + struct meson_nfc_nand_chip *meson_chip =3D to_meson_nand(nand); > >> + > >> + kfree(meson_chip->oob_buf); > >> meson_nfc_free_buffer(nand); > >> } > >> =20 > >> @@ -1225,9 +1336,9 @@ static int meson_nand_attach_chip(struct nand_ch= ip *nand) > >> nand->ecc.engine_type =3D NAND_ECC_ENGINE_TYPE_ON_HOST; > >> nand->ecc.write_page_raw =3D meson_nfc_write_page_raw; > >> nand->ecc.write_page =3D meson_nfc_write_page_hwecc; > >> - nand->ecc.write_oob_raw =3D nand_write_oob_std; > >> - nand->ecc.write_oob =3D nand_write_oob_std; > >> =20 > >> + nand->ecc.write_oob_raw =3D meson_nfc_write_oob_raw; > >> + nand->ecc.write_oob =3D meson_nfc_write_oob; =20 > >=20 > > Actually if you define the right OOB layouts, are these really needed > > ?? I would expect the right bytes to be picked up by the default > > implementation. I see nothing specific in your current implementation? = =20 >=20 > You mean to use 'nand_write_oob_std()'? If so, I think it won't work, > because it tries to write OOB data right after 'mtd->writesize', but > page layout for this controller is like this: > [ 1024 bytes of data ] > [ 14 bytes ECC + 2 bytes for user ] <- with new layout we don't touch the= se 2 bytes > [ 1024 bytes of data ] > [ 14 bytes ECC + 2 bytes for user ] <- with new layout we don't touch the= se 2 bytes > [ 32 bytes of user bytes ] <- we use there 32 bytes as free(user= ) bytes in OOB Right. >=20 > So with 'mtd->writesize' of 2048 we won't get into last 32 bytes in the p= icture above. > I'm not goot in NAND/MTD area, but I think that why i need special OOB ac= cess callbacks. Ok. > Also in previous patches @Liang said, that default OOB read/write functio= ns won't work > on this controller and it is wrong to use them in currently merged driver. >=20 > > =20 > >> nand->ecc.read_page_raw =3D meson_nfc_read_page_raw; > >> nand->ecc.read_page =3D meson_nfc_read_page_hwecc; > >> nand->ecc.read_oob_raw =3D meson_nfc_read_oob_raw; > >> @@ -1237,9 +1348,16 @@ static int meson_nand_attach_chip(struct nand_c= hip *nand) > >> dev_err(nfc->dev, "16bits bus width not supported"); > >> return -EINVAL; > >> } > >> + > >> + meson_chip->oob_buf =3D kmalloc(nand->ecc.bytes, GFP_KERNEL); =20 > >=20 > > devm_kmalloc? =20 >=20 > Ack >=20 > > =20 > >> + if (!meson_chip->oob_buf) > >> + return -ENOMEM; > >> + > >> ret =3D meson_chip_buffer_init(nand); > >> - if (ret) > >> + if (ret) { > >> + kfree(meson_chip->oob_buf); > >> return -ENOMEM; > >> + } > >> =20 > >> return ret; > >> } =20 > >=20 > >=20 > > Thanks, > > Miqu=C3=A8l =20 >=20 > Thanks, Arseniy Thanks, Miqu=C3=A8l