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 AB184C77B73 for ; Tue, 6 Jun 2023 07:11:46 +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=KYTCE79Q9CaE/gff6+FQXsyTut6Sy48cybyBJm1h8gc=; b=UqHPurU6vpjtGI aerJdpgcevhakWjghI3BGISHFR87ZTk9ijXS86D7HXScUViV9ka93l/cR7XB+QEl475K6DCVgCdif pX9xEio8j42B+GsrIUk8L1VuU6fkFpeF+LEa1cX+ZPLKj6TD+Nvmg/oPw6Aoo+ClXC3/CFYOdAkau ORBs5WLZDu8CkO5CvOgwOi36oPu3KjqtKqQvn8TvecMpFy6DBnyn0/XpQVwY69oaM2AJRwFhUoTNW /xpAnLKBdWUnBYJ3gDcN8KK8XObQmKq53C+U/yHL4NjJdy4PukNm2p0fG4rd0jOTk5DG4GNCcCBV4 m66DEs50FQqhXcAu0vCQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1q6Qqg-000UCZ-0w; Tue, 06 Jun 2023 07:11:22 +0000 Received: from relay1-d.mail.gandi.net ([2001:4b98:dc4:8::221]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1q6Qqb-000UAA-2Y; Tue, 06 Jun 2023 07:11:20 +0000 X-GND-Sasl: miquel.raynal@bootlin.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1686035471; 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=rFJmCcMrQ4DjHJjPGf914EBlWwvSR6LF8KLemTrPksU=; b=naaUZgc6f6dgY5UzpsA9KAQODJUQtw2fskLovj217gC8HaaeSwzxtIe+/DXyDkUgNxDSmM rAQ2xwRU3vmdnqnaZGX1chK7I/3lD2c2laZ/3azlYOSEWKczGLvi9RN1mbOcIm4qZxBklN yOYGe4H6a5XgSj/2mzgcQ+dvpcJpEMRtVEisRQjbowY/DDuZfWYkieuMmjOayZkv1ESuuZ Hk42JbB5OqWoRlFaAmCl+pcQIkRru/HCi8fufkllxjsbtV/5YMZLxQt7loMIMeFYocG1iC /RkRk7MVgVEkZUZv3zQdiwdl8jh4ebm8wdrcuRjTMcoJAz5ltiVIYSXJ6mLA8Q== 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 755CF240004; Tue, 6 Jun 2023 07:11:09 +0000 (UTC) Date: Tue, 6 Jun 2023 09:11:07 +0200 From: Miquel Raynal To: Arseniy Krasnov Cc: Liang Yang , Richard Weinberger , Vignesh Raghavendra , Neil Armstrong , Kevin Hilman , Jerome Brunet , Martin Blumenstingl , , , , , , Subject: Re: [RFC PATCH v5 3/6] mtd: rawnand: meson: only expose unprotected user OOB bytes Message-ID: <20230606091107.78c792ff@xps-13> In-Reply-To: <53f31185-70d9-7264-a99a-cf71f8fc52eb@sberdevices.ru> References: <20230601061850.3907800-1-AVKrasnov@sberdevices.ru> <20230601061850.3907800-4-AVKrasnov@sberdevices.ru> <20230601103111.6840acc0@xps-13> <8242530c-7b6b-29ce-581b-c5644a965b60@sberdevices.ru> <20230605114850.77cf9197@xps-13> <53f31185-70d9-7264-a99a-cf71f8fc52eb@sberdevices.ru> 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-20230606_001118_157735_C3CDB89E X-CRM114-Status: GOOD ( 61.94 ) 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 SGkgQXJzZW5peSwKCmF2a3Jhc25vdkBzYmVyZGV2aWNlcy5ydSB3cm90ZSBvbiBUdWUsIDYgSnVu IDIwMjMgMDc6NDI6NTggKzAzMDA6Cgo+IE9uIDA1LjA2LjIwMjMgMTI6NDgsIE1pcXVlbCBSYXlu YWwgd3JvdGU6Cj4gPiBIaSBBcnNlbml5LAo+ID4gCj4gPiBhdmtyYXNub3ZAc2JlcmRldmljZXMu cnUgd3JvdGUgb24gRnJpLCAyIEp1biAyMDIzIDExOjUzOjQ3ICswMzAwOgo+ID4gICAKPiA+PiBI ZWxsbyBNaXF1ZWwsIHRoYW5rcyBmb3IgcmV2aWV3IQo+ID4+Cj4gPj4gT24gMDEuMDYuMjAyMyAx MTozMSwgTWlxdWVsIFJheW5hbCB3cm90ZTogIAo+ID4+PiBIaSBBcnNlbml5LAo+ID4+Pgo+ID4+ PiBBVktyYXNub3ZAc2JlcmRldmljZXMucnUgd3JvdGUgb24gVGh1LCAxIEp1biAyMDIzIDA5OjE4 OjQ2ICswMzAwOgo+ID4+PiAgICAgCj4gPj4+PiBUaGlzIG1vdmVzIGZyZWUgYnl0ZXMgb2YgT09C IHRvIG5vbi1wcm90ZWN0ZWQgRUNDIGFyZWEuIEl0IGlzIG5lZWRlZCB0byAgICAKPiA+Pj4KPiA+ Pj4gQXMgd2UgZGlzY3Vzc2VkLCBJIGV4cGVjdCB0aGlzIGNvbW1pdCB0byBqdXN0IGNoYW5nZSB0 aGUgT09CIGxheW91dCB0bwo+ID4+PiBleHBvc2UgdW5wcm90ZWN0ZWQgT09CIGJ5dGVzIHRvIHRo ZSB1c2VyLCB0aGF0IGlzIHRoZSBvbmx5IGNoYW5nZSB0aGlzCj4gPj4+IGNvbW1pdCBzaG91bGQg Y2FycnkuIElmIHRoYXQgZG9lcyBub3Qgd29yaywgeW91IHNob3VsZCBhZGQgYQo+ID4+PiBwcmVw YXJhdGlvbiBwYXRjaC4gICAgCj4gPj4KPiA+PiBPaywgYnV0IEkgdGhvdWdodCwgaWYgaSBjaGFu Z2Ugb25seSBPT0IgbGF5b3V0LCBlLmcuIHVwZGF0ZSAnZnJlZScgY2FsbGJhY2sgb2YKPiA+PiBt dGRfb29ibGF5b3V0X29wcywgSSBhbHNvIG5lZWQgdG8gaW1wbGVtZW50IGNvZGUgd2hpY2ggcGVy Zm9ybXMgcmVhZC93cml0ZQo+ID4+IGFjY29yZGluZyBuZXcgbGF5b3V0IChpdCBtdXN0IGJlIGRv bmUgaW4gYSBzaW5nbGUgcGF0Y2gpPyAgCj4gPiAKPiA+IE5vLCB0aGlzIGlzIG9ydGhvZ29uYWwu Cj4gPiAKPiA+IFRoZSBkcml2ZXIgbXVzdCByZWFkIHRoZSB0aGUgd2hvbGUgT09CIGFyZWEgKGFu ZCBwZXJoYXBzIHJlb3JkZXIgdGhlCj4gPiBkYXRhKSwgYnV0IHlvdSBzaG91bGQgbm90IG1ha2Ug YW55IGRlY2lzaW9uIHJlZ2FyZGluZyB3aGF0IGJ5dGVzIHlvdQo+ID4gd2FudCBvciBub3Qgd2Fu dCB0byBleHBvc2UuCj4gPiAKPiA+IFRoZW4sIHRoZSB1c2VyIChubyBtYXR0ZXIgd2hhdCAidXNl ciIgaXMgaGVyZSkgd2lsbCBkZWNpZGUgaG93IHRvIGRlYWwKPiA+IHdpdGggdGhlIGRhdGEuICAK PiAKPiBIZWxsbyBNaXF1ZWwhCj4gCj4gT2ssIHNvIGluIGNhc2Ugb2Y6Cj4gMSkgcmVhZCBJIGp1 c3QgbmVlZCB0byByZWFkIE9PQiBkYXRhIHVzaW5nICduYW5kX2NoYW5nZV9yZWFkX2NvbHVtbl9v cCgpJyBhbmQgcGxhY2UgaXQgdG8gJ29vYl9idWYnLgo+IDIpIHdyaXRlIEkgbmVlZCB0byB3cml0 ZSBPT0IgZGF0YSB1c2luZyAnbmFuZF9jaGFuZ2Vfd3JpdGVfY29sdW1uX29wKCknIHRvIGNvbnRy b2xsZXIgaW50ZXJuYWwgUkFNIGFuZCB0aGVuIGNhbGwgUEFHRV9QUk9HLgo+ICAgIEV2ZW4gaW4g RUNDIG1vZGUsIGRhdGEgd2hpY2ggb2NjdXBpZXMgcGxhY2VzIG9mIEVDQyBjb2RlcyB3aWxsIGJl IHJlbW92ZWQgYnkgaHcgKCBhcyBZb3UgbWVudGlub2VkIGJlbG93KS4KPiAKPiBUaGF0J3MgYWxs PzopCgpTb3VuZHMgcmlnaHQgOikKCklmIHlvdSBmaW5kIHRvbyBjb3N0bHkgdG8gbWFrZSBtYW55 IG5hbmRfY2hhbmdlX3JlYWRfY29sdW1uX29wKCkgYW5kCndhbnQgdG8gbGV2ZXJhZ2UgRE1BIGlu c3RlYWQsIHlvdSBjYW4gYXMgd2VsbCByZWFkIGV2ZXJ5dGhpbmcKKGRhdGErb29iKSBpbiBvbmUg Z28gaW4gYSBib3VuY2UgYnVmZmVyIGFuZCB0aGVuIHBlcmZvcm0gbWVtY3B5J3MgaW50bwp5b3Vy IGZpbmFsIGJ1ZmZlciBpbiBvcmRlciB0byByZW9yZ2FuaXplIHRoZSBkYXRhLiBUaGF0J3MgZW50 aXJlbHkgdXAgdG8KeW91IChhbmQgc2FtZSBvZiBjb3Vyc2UgaW4gdGhlIHdyaXRlIHBhdGgsIHlv dSBjb3VsZCBmaXJzdAptZW1jcHkvcmVvcmRlciB0aGUgZGF0YSBpbnRvIGEgRE1BIGJvdW5jZSBi dWZmZXIgbG9jYWxseSwgYW5kIHRoZW4gc2VuZAphbGwgdGhlIGRhdGEgaW4gYSBzaW5nbGUgRE1B IHRyYW5zZmVyIGFuZCBjYWxsIFBBR0VfUFJPRykuCgo+IAo+ID4gICAKPiA+PiBNYWluIHRoaW5n IGlzOgo+ID4+Cj4gPj4gSSBndWVzcyB0aGF0IGdlbmVyYWwgY29uZnVzZSB3aXRoIHRoaXMgcGF0 Y2ggaXMgdGhhdCBZb3UgY29uc2lkZXIKPiA+PiB0aGF0IHdlIGNoYW5nZSBvbmx5IE9PQiBsYXlv dXQgYnkgbW92aW5nIHVzZXIgYnl0ZXMgb3V0IG9mIEVDQyBhcmVhLCBidXQgYXQgdGhlIHNhbWUK PiA+PiB0aW1lIEkgYWxzbyBpbmNyZWFzZWQgc2l6ZSBvZiBPT0IgZnJvbSA0IGJ5dGVzIChlLmcu IDIgeCAyIGJ5dGVzIGNsZWFuIG1hcmtlcnMpCj4gPj4gdG8gMzIgYnl0ZXMgKGUuZy4gdGFpbCBv ZiBwYWdlIGFmdGVyIGRhdGEgYW5kIEVDQyBjb2RlcyksIHNvIGlmIHRoaXMKPiA+PiBhc3N1bXB0 aW9uIGlzIGNvcnJlY3QsIGluIHRoZSBuZXh0IHZlcnNpb24gSSB3b24ndCBjaGFuZ2Ugc2l6ZSBv ZiB1c2VyIGFyZWEgaW4KPiA+PiBPT0IsIHRodXMgdGhpcyBwYXRjaCB3aWxsIGJlIHJlZHVjZWQg YXMgc29tZSBjb21tZW50cyBmcm9tIHRoaXMgcmV2aWV3LiAgCj4gPiAKPiA+IEV4cG9zaW5nIG9u bHkgNCBieXRlcyB3YXMgYSBtaXN0YWtlIGluIHRoZSBmaXJzdCBwbGFjZSwgcGxlYXNlIGZpeCB0 aGlzCj4gPiBpbiBhIGRlZGljYXRlZCBwYXRjaC4gIAo+IAo+IFNvIGN1cnJlbnQgKG5vdCBtZXJn ZWQpIHZlcnNpb24gZXhwb3NlcyBieXRlcyAwLDEsMTYsMTcgb2YgT09CLCBZb3UgbWVhbiB0aGlz IGlzIHdyb25nPwo+IENvcnJlY3Qgd2F5IGlzIHRvIGV4cG9zZSAzMiwzMyw0OCw0OSAoZS5nLiBz aGlmdGVkIGJ5IDMyKT8KPiAKPiBUaGFua3MsIEFyc2VuaXkKPiAKPiA+ICAgCj4gPj4+PiBtYWtl IEpGRlMyIHdvcmtzIGNvcnJlY3RseSB3aXRoIHRoaXMgTkFORCBjb250cm9sbGVyLiBQcm9ibGVt IGZpcmVzIHdoZW4KPiA+Pj4+IEpGRlMyIGRyaXZlciB3cml0ZXMgY2xlYW5tYXJrZXIgdG8gc29t ZSBwYWdlIGFuZCBsYXRlciBpdCB0cmllcyB0byB3cml0ZQo+ID4+Pj4gdG8gdGhpcyBwYWdlIC0g d3JpdGUgd2lsbCBiZSBkb25lIHN1Y2Nlc3NmdWxseSwgYnV0IGFmdGVyIHRoYXQgc3VjaCBwYWdl Cj4gPj4+PiBiZWNvbWVzIHVucmVhZGFibGUgZHVlIHRvIGludmFsaWQgRUNDIGNvZGVzLiBUaGlz IGhhcHBlbnMgYmVjYXVzZSBzZWNvbmQKPiA+Pj4+IHdyaXRlIG5lZWRzIHRvIHVwZGF0ZSBFQ0Mg Y29kZXMsIGJ1dCBpdCBpcyBpbXBvc3NpYmxlIHRvIGRvIGl0IGNvcnJlY3RseQo+ID4+Pj4gd2l0 aG91dCBibG9jayBlcmFzZS4gU28gaWRlYSBvZiB0aGlzIHBhdGNoIGlzIHRvIHVzZSB0aGUgdW5w cm90ZWN0ZWQgT09CCj4gPj4+PiBhcmVhIHRvIHN0b3JlIHRoZSBjbGVhbm1hcmtlcnMsIHNvIHRo YXQgdGhleSBjYW4gYmUgd3JpdHRlbiBieSB0aGUKPiA+Pj4+IGZpbGVzeXN0ZW0gd2l0aG91dCBj YXJpbmcgbXVjaCBhYm91dCB0aGUgcGFnZSBiZWluZyBlbXB0eSBvciBub3Q6IHRoZQo+ID4+Pj4g RUNDIGNvZGVzIHdpbGwgbm90IGJlIHdyaXR0ZW4gYW55d2F5Lgo+ID4+Pj4KPiA+Pj4+IEpGRlMy IGlzIG9ubHkgdXNlZnVsIG9uIHRpbnkgTkFORCBkZXZpY2VzLCB3aGVyZSBVQkkgZG9lcyBub3Qg Zml0LCB3aGljaAo+ID4+Pj4gYXJlIHVzdWFsbHkgdHJ1ZSBTTEMgZmxhc2hlcywgd2l0aCB0aGUg Y2FwYWJpbGl0eSBvZiB3cml0aW5nIGEgcGFnZSB3aXRoCj4gPj4+PiBlbXB0eSAoMHhGRikgZGF0 YSwgYW5kIHN0aWxsIGJlIGFibGUgdG8gd3JpdGUgYWN0dWFsIGRhdGEgdG8gaXQgbGF0ZXIgaW4K PiA+Pj4+IGEgc2Vjb25kIHdyaXRlLgo+ID4+Pj4KPiA+Pj4+IFNpZ25lZC1vZmYtYnk6IEFyc2Vu aXkgS3Jhc25vdiA8QVZLcmFzbm92QHNiZXJkZXZpY2VzLnJ1Pgo+ID4+Pj4gLS0tCj4gPj4+PiAg Q2hhbmdlbG9nIHY0LT52NToKPiA+Pj4+ICAqIERyb3AgY29zbWV0aWMgY2hhbmdlcyBmcm9tIHRo aXMgcGF0Y2guCj4gPj4+PiAgKiBEbyBub3QgaWdub3JlIEVDQyBwcm90ZWN0ZWQgdXNlciBieXRl cyBwcm92aWRlZCBieSBody4gRXZlbiB0aGVzZQo+ID4+Pj4gICAgYnl0ZXMgYXJlIG91dCBvZiB1 c2VyIGFyZWEgb2YgT09CLCBpdHMgdmFsdWVzIGFyZSBzdGlsbCByZWFkIGZyb20KPiA+Pj4+ICAg IHRoZSBwcm92aWRlZCBPT0IgYnVmZmVyIGFuZCB3cml0dGVuIGJ5IGhhcmR3YXJlLiBTYW1lIGJl aGF2aW91ciBpcwo+ID4+Pj4gICAgcHJlc2VydmVkIGZvciByZWFkIGFjY2VzcyAtIHN1Y2ggYnl0 ZXMgYXJlIHJlYWQgZnJvbSBETUEgYnVmZmVyIGFuZAo+ID4+Pj4gICAgcGxhY2VkIHRvIE9PQiBi dWZmZXIuCj4gPj4+PiAgKiBPT0IgcmVhZCBhbmQgd3JpdGUgYmVjb21lIG1vcmUgbGlnaHR3ZWln aHQgYmVjYXVzZSBJIHJlbW92ZWQgaGVhdnkKPiA+Pj4+ICAgIFJFQUQwIGFuZCBQQUdFUFJPRyBj b21tYW5kIGZyb20gaXQgKGJvdGggY29tbWFuZHMgYXJlIHN0aWxsIHNlbnQKPiA+Pj4+ICAgIHdo ZW4gT09CIGFjY2VzcyBpcyBwZXJmb3JtZWQgdXNpbmcgT09CIGNhbGxiYWNrcykuIEluIGNhc2Ug b2YgcGFnZQo+ID4+Pj4gICAgcmVhZC93cml0ZSBPT0IgZGF0YSBpcyBoYW5kbGVkIGluIHRoZSBp bnRlcm5hbCBTUkFNIG9mIHRoZSBjb250cm9sbGVyLgo+ID4+Pj4gICogQ29tbWl0IG1lc3NhZ2Ug dXBkYXRlZC4KPiA+Pj4+ICAqIFRlbXBvcmFyeSBidWZmZXIgZm9yIE9PQiByZWFkL3dyaXRlIGlz IHJlbW92ZWQuIFNlZW1zIGV2ZXJ5dGhpbmcKPiA+Pj4+ICAgIHdvcmtzIGNvcnJlY3RseSB3aXRo b3V0IGl0Lgo+ID4+Pj4KPiA+Pj4+ICBkcml2ZXJzL210ZC9uYW5kL3Jhdy9tZXNvbl9uYW5kLmMg fCAxMzQgKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tCj4gPj4+PiAgMSBmaWxlIGNoYW5n ZWQsIDExNyBpbnNlcnRpb25zKCspLCAxNyBkZWxldGlvbnMoLSkKPiA+Pj4+Cj4gPj4+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9yYXcvbWVzb25fbmFuZC5jIGIvZHJpdmVycy9tdGQv bmFuZC9yYXcvbWVzb25fbmFuZC5jCj4gPj4+PiBpbmRleCA4MmE2MjkwMjVhZGMuLmU0MmMyOGJl MDJmMyAxMDA2NDQKPiA+Pj4+IC0tLSBhL2RyaXZlcnMvbXRkL25hbmQvcmF3L21lc29uX25hbmQu Ywo+ID4+Pj4gKysrIGIvZHJpdmVycy9tdGQvbmFuZC9yYXcvbWVzb25fbmFuZC5jCj4gPj4+PiBA QCAtMzU4LDggKzM1OCwxMSBAQCBzdGF0aWMgdTggKm1lc29uX25mY19kYXRhX3B0cihzdHJ1Y3Qg bmFuZF9jaGlwICpuYW5kLCBpbnQgaSkKPiA+Pj4+ICBzdGF0aWMgdm9pZCBtZXNvbl9uZmNfZ2V0 X2RhdGFfb29iKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsCj4gPj4+PiAgCQkJCSAgIHU4ICpidWYs IHU4ICpvb2JidWYpCj4gPj4+PiAgewo+ID4+Pj4gKwlzdHJ1Y3QgbWVzb25fbmZjX25hbmRfY2hp cCAqbWVzb25fY2hpcCA9IHRvX21lc29uX25hbmQobmFuZCk7Cj4gPj4+PiArCXN0cnVjdCBtdGRf aW5mbyAqbXRkID0gbmFuZF90b19tdGQobmFuZCk7Cj4gPj4+PiAgCWludCBpLCBvb2JfbGVuID0g MDsKPiA+Pj4+ICAJdTggKmRzcmMsICpvc3JjOwo+ID4+Pj4gKwl1OCAqb29idGFpbDsKPiA+Pj4+ ICAKPiA+Pj4+ICAJb29iX2xlbiA9IG5hbmQtPmVjYy5ieXRlcyArIDI7Cj4gPj4+PiAgCWZvciAo aSA9IDA7IGkgPCBuYW5kLT5lY2Muc3RlcHM7IGkrKykgewo+ID4+Pj4gQEAgLTM2OCwxNyArMzcx LDI3IEBAIHN0YXRpYyB2b2lkIG1lc29uX25mY19nZXRfZGF0YV9vb2Ioc3RydWN0IG5hbmRfY2hp cCAqbmFuZCwKPiA+Pj4+ICAJCQltZW1jcHkoYnVmLCBkc3JjLCBuYW5kLT5lY2Muc2l6ZSk7Cj4g Pj4+PiAgCQkJYnVmICs9IG5hbmQtPmVjYy5zaXplOwo+ID4+Pj4gIAkJfQo+ID4+Pj4gKwo+ID4+ Pj4gIAkJb3NyYyA9IG1lc29uX25mY19vb2JfcHRyKG5hbmQsIGkpOwo+ID4+Pj4gIAkJbWVtY3B5 KG9vYmJ1Ziwgb3NyYywgb29iX2xlbik7Cj4gPj4+PiAgCQlvb2JidWYgKz0gb29iX2xlbjsKPiA+ Pj4+ICAJfQo+ID4+Pj4gKwo+ID4+Pj4gKwlvb2J0YWlsID0gbWVzb25fY2hpcC0+ZGF0YV9idWYg KyBuYW5kLT5lY2Muc3RlcHMgKgo+ID4+Pj4gKwkJICAobmFuZC0+ZWNjLnNpemUgKyBvb2JfbGVu KTsKPiA+Pj4+ICsKPiA+Pj4+ICsJLyogJ29vYmJ1ZicgcG9pbnRzIHRvIHRoZSBzdGFydCBvZiB1 c2VyIGFyZWEuICovCj4gPj4+PiArCW1lbWNweShvb2JidWYsIG9vYnRhaWwsIG10ZC0+b29ic2l6 ZSAtIG5hbmQtPmVjYy5zdGVwcyAqIG9vYl9sZW4pOwo+ID4+Pj4gIH0KPiA+Pj4+ICAKPiA+Pj4+ ICBzdGF0aWMgdm9pZCBtZXNvbl9uZmNfc2V0X2RhdGFfb29iKHN0cnVjdCBuYW5kX2NoaXAgKm5h bmQsCj4gPj4+PiAgCQkJCSAgIGNvbnN0IHU4ICpidWYsIHU4ICpvb2JidWYpCj4gPj4+PiAgewo+ ID4+Pj4gKwlzdHJ1Y3QgbWVzb25fbmZjX25hbmRfY2hpcCAqbWVzb25fY2hpcCA9IHRvX21lc29u X25hbmQobmFuZCk7Cj4gPj4+PiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQo bmFuZCk7Cj4gPj4+PiAgCWludCBpLCBvb2JfbGVuID0gMDsKPiA+Pj4+ICAJdTggKmRzcmMsICpv c3JjOwo+ID4+Pj4gKwl1OCAqb29idGFpbDsKPiA+Pj4+ICAKPiA+Pj4+ICAJb29iX2xlbiA9IG5h bmQtPmVjYy5ieXRlcyArIDI7Cj4gPj4+PiAgCWZvciAoaSA9IDA7IGkgPCBuYW5kLT5lY2Muc3Rl cHM7IGkrKykgewo+ID4+Pj4gQEAgLTM5MSw2ICs0MDQsMTIgQEAgc3RhdGljIHZvaWQgbWVzb25f bmZjX3NldF9kYXRhX29vYihzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLAo+ID4+Pj4gIAkJbWVtY3B5 KG9zcmMsIG9vYmJ1Ziwgb29iX2xlbik7Cj4gPj4+PiAgCQlvb2JidWYgKz0gb29iX2xlbjsKPiA+ Pj4+ICAJfQo+ID4+Pj4gKwo+ID4+Pj4gKwlvb2J0YWlsID0gbWVzb25fY2hpcC0+ZGF0YV9idWYg KyBuYW5kLT5lY2Muc3RlcHMgKgo+ID4+Pj4gKwkJICAobmFuZC0+ZWNjLnNpemUgKyBvb2JfbGVu KTsgICAgCj4gPj4+Cj4gPj4+IFRoaXMgaXMgYWx3YXlzIHRhcmdldGluZyB0aGUgc2FtZSBhcmVh LCBzbyBpdCBsb29rcyBzdHJhbmdlIHRvIG1lLgo+ID4+PiAgICAgCj4gPj4+PiArCj4gPj4+PiAr CS8qICdvb2JidWYnIHBvaW50cyB0byB0aGUgc3RhcnQgb2YgdXNlciBhcmVhLiAqLwo+ID4+Pj4g KwltZW1jcHkob29idGFpbCwgb29iYnVmLCBtdGQtPm9vYnNpemUgLSBuYW5kLT5lY2Muc3RlcHMg KiBvb2JfbGVuKTsgICAgCj4gPj4+Cj4gPj4+IFRCSCBJIGRvbid0IGdldCB3aGF0IHlvdSBkbyBo ZXJlLiAgICAKPiA+Pgo+ID4+IFRoaXMgY29kZSB3b3JrcyBpbiByYXcgbW9kZSBhbmQgcGxhY2Vz IE9PQiBkYXRhIGZyb20gcHJvdmlkZWQgT09CIGJ1ZmZlciB0byBETUEgYnVmZmVyLgo+ID4+IFRo aXMgaXMgYmVjYXVzZSBudW1iZXIgb2YgdXNlciBieXRlcyBpcyBpbmNyZWFzZWQgaW4gdGhpcyBw YXRjaC4KPiA+PiAgCj4gPj4+ICAgICAKPiA+Pj4+ICB9Cj4gPj4+PiAgCj4gPj4+PiAgc3RhdGlj IGludCBtZXNvbl9uZmNfcXVldWVfcmIoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgaW50IHRpbWVv dXRfbXMpCj4gPj4+PiBAQCAtNDMzLDcgKzQ1Miw3IEBAIHN0YXRpYyB2b2lkIG1lc29uX25mY19z ZXRfdXNlcl9ieXRlKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsIHU4ICpvb2JfYnVmKQo+ID4+Pj4g IAlfX2xlNjQgKmluZm87Cj4gPj4+PiAgCWludCBpLCBjb3VudDsKPiA+Pj4+ICAKPiA+Pj4+IC0J Zm9yIChpID0gMCwgY291bnQgPSAwOyBpIDwgbmFuZC0+ZWNjLnN0ZXBzOyBpKyssIGNvdW50ICs9 IDIpIHsKPiA+Pj4+ICsJZm9yIChpID0gMCwgY291bnQgPSAwOyBpIDwgbmFuZC0+ZWNjLnN0ZXBz OyBpKyssIGNvdW50ICs9IChuYW5kLT5lY2MuYnl0ZXMgKyAyKSkgewo+ID4+Pj4gIAkJaW5mbyA9 ICZtZXNvbl9jaGlwLT5pbmZvX2J1ZltpXTsKPiA+Pj4+ICAJCSppbmZvIHw9IG9vYl9idWZbY291 bnRdOwo+ID4+Pj4gIAkJKmluZm8gfD0gb29iX2J1Zltjb3VudCArIDFdIDw8IDg7Cj4gPj4+PiBA QCAtNDQ2LDcgKzQ2NSw3IEBAIHN0YXRpYyB2b2lkIG1lc29uX25mY19nZXRfdXNlcl9ieXRlKHN0 cnVjdCBuYW5kX2NoaXAgKm5hbmQsIHU4ICpvb2JfYnVmKQo+ID4+Pj4gIAlfX2xlNjQgKmluZm87 Cj4gPj4+PiAgCWludCBpLCBjb3VudDsKPiA+Pj4+ICAKPiA+Pj4+IC0JZm9yIChpID0gMCwgY291 bnQgPSAwOyBpIDwgbmFuZC0+ZWNjLnN0ZXBzOyBpKyssIGNvdW50ICs9IDIpIHsKPiA+Pj4+ICsJ Zm9yIChpID0gMCwgY291bnQgPSAwOyBpIDwgbmFuZC0+ZWNjLnN0ZXBzOyBpKyssIGNvdW50ICs9 IChuYW5kLT5lY2MuYnl0ZXMgKyAyKSkgewo+ID4+Pj4gIAkJaW5mbyA9ICZtZXNvbl9jaGlwLT5p bmZvX2J1ZltpXTsKPiA+Pj4+ICAJCW9vYl9idWZbY291bnRdID0gKmluZm87Cj4gPj4+PiAgCQlv b2JfYnVmW2NvdW50ICsgMV0gPSAqaW5mbyA+PiA4Owo+ID4+Pj4gQEAgLTYzOCw2ICs2NTcsODQg QEAgc3RhdGljIGludCBtZXNvbl9uZmNfcndfY21kX3ByZXBhcmVfYW5kX2V4ZWN1dGUoc3RydWN0 IG5hbmRfY2hpcCAqbmFuZCwKPiA+Pj4+ICAJcmV0dXJuIDA7Cj4gPj4+PiAgfQo+ID4+Pj4gIAo+ ID4+Pj4gK3N0YXRpYyB1MzIgbWVzb25fbmZjX29vYl9mcmVlX2J5dGVzKHN0cnVjdCBuYW5kX2No aXAgKm5hbmQpCj4gPj4+PiArewo+ID4+Pj4gKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5hbmRf dG9fbXRkKG5hbmQpOwo+ID4+Pj4gKwo+ID4+Pj4gKwlyZXR1cm4gbXRkLT5vb2JzaXplIC0gbmFu ZC0+ZWNjLnN0ZXBzICogKG5hbmQtPmVjYy5ieXRlcyArIDIpOyAgICAKPiA+Pj4KPiA+Pj4gVGhp cyBsb29rcyBsaWtlIGEgc3RhdGljIHZhbHVlLCBqdXN0IHNhdmUgaXQgc29tZXdoZXJlIGluc3Rl YWQgb2YKPiA+Pj4gcmVjb21wdXRpbmcgaXQ/ICAgIAo+ID4+Cj4gPj4gQWNrCj4gPj4gIAo+ID4+ PiAgICAgCj4gPj4+PiArfQo+ID4+Pj4gKwo+ID4+Pj4gK3N0YXRpYyBpbnQgbWVzb25fbmZjX3dy aXRlX29vYihzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLCBpbnQgcGFnZSkKPiA+Pj4+ICt7Cj4gPj4+ PiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQobmFuZCk7Cj4gPj4+PiArCXUz MiBwYWdlX3NpemUgPSBtdGQtPndyaXRlc2l6ZSArIG10ZC0+b29ic2l6ZTsKPiA+Pj4+ICsJdTMy IG9vYl9ieXRlcyA9IG1lc29uX25mY19vb2JfZnJlZV9ieXRlcyhuYW5kKTsKPiA+Pj4+ICsJdTgg Km9vYl9idWY7Cj4gPj4+PiArCWludCByZXQ7Cj4gPj4+PiArCj4gPj4+PiArCWlmICghb29iX2J5 dGVzKQo+ID4+Pj4gKwkJcmV0dXJuIDA7ICAgIAo+ID4+Pgo+ID4+PiBDYW4gdGhpcyBoYXBwZW4/ ICAgIAo+ID4+Cj4gPj4gQWNrLCBzZWVtcyBmb3JnZXQgdG8gcmVtb3ZlIGl0Cj4gPj4gIAo+ID4+ PiAgICAgCj4gPj4+PiArCj4gPj4+PiArCS8qIENhbGxlZCBhcyBPT0Igd3JpdGUgaGVscGVyLCB3 aWxsIHNlbmQgTkFORF9DTURfUEFHRVBST0cuICovCj4gPj4+PiArCWlmIChwYWdlICE9IC0xKSB7 Cj4gPj4+PiArCQlyZXQgPSBuYW5kX3Byb2dfcGFnZV9iZWdpbl9vcChuYW5kLCBwYWdlLCAwLCBO VUxMLCAwKTsKPiA+Pj4+ICsJCWlmIChyZXQpCj4gPj4+PiArCQkJcmV0dXJuIHJldDsKPiA+Pj4+ ICsJfQo+ID4+Pj4gKwo+ID4+Pj4gKwlvb2JfYnVmID0gbmFuZC0+b29iX3BvaTsKPiA+Pj4+ICsK PiA+Pj4+ICsJcmV0ID0gbmFuZF9jaGFuZ2Vfd3JpdGVfY29sdW1uX29wKG5hbmQsIHBhZ2Vfc2l6 ZSAtIG9vYl9ieXRlcywKPiA+Pj4+ICsJCQkJCSAgb29iX2J1ZiArIChtdGQtPm9vYnNpemUgLSBv b2JfYnl0ZXMpLAo+ID4+Pj4gKwkJCQkJICBvb2JfYnl0ZXMsIGZhbHNlKTsKPiA+Pj4+ICsJaWYg KHJldCkKPiA+Pj4+ICsJCXJldHVybiByZXQ7Cj4gPj4+PiArCj4gPj4+PiArCXJldHVybiAocGFn ZSAhPSAtMSkgPyBuYW5kX3Byb2dfcGFnZV9lbmRfb3AobmFuZCkgOiAwOwo+ID4+Pj4gK30KPiA+ Pj4+ICsKPiA+Pj4+ICtzdGF0aWMgaW50IG1lc29uX25mY19yZWFkX29vYihzdHJ1Y3QgbmFuZF9j aGlwICpuYW5kLCBpbnQgcGFnZSkKPiA+Pj4+ICt7Cj4gPj4+PiArCXN0cnVjdCBtdGRfaW5mbyAq bXRkID0gbmFuZF90b19tdGQobmFuZCk7Cj4gPj4+PiArCXU4ICpvb2JfYnVmID0gbmFuZC0+b29i X3BvaTsKPiA+Pj4+ICsJdTMyIG9vYl9ieXRlczsKPiA+Pj4+ICsJdTMyIHBhZ2Vfc2l6ZTsKPiA+ Pj4+ICsJaW50IHJldDsKPiA+Pj4+ICsJaW50IGk7Cj4gPj4+PiArCj4gPj4+PiArCS8qIENhbGxl ZCBhcyBPT0IgcmVhZCBoZWxwZXIsIHNlbmQgTkFORF9DTURfUkVBRDAuICovCj4gPj4+PiArCWlm IChwYWdlICE9IC0xKSB7ICAgIAo+ID4+Pgo+ID4+PiBJIGRvbid0IGxpa2UgdGhpcyBsb2dpYyB3 aXRoIHRoZSAiLTEiLCBpdCByZWFsbHkgaGlkZXMgd2hhdCB0aGUKPiA+Pj4gY29udHJvbGxlciBu ZWVkcyB0byBkbywgaWYgeW91IG5lZWQgYSBoZWxwZXIgdG8gc2VuZCBhIGNvbW1hbmQsIHRoZW4K PiA+Pj4gY3JlYXRlIHRoYXQgaGVscGVyIGFuZCBnaXZlIGl0IGEgZGVjZW50IG5hbWUuICAgIAo+ ID4+Cj4gPj4gSSBzZWUsIHNvIEkgdGhpbmsgSSBuZWVkIHRvIGltcGxlbWVudCB0aGlzIGluIHRo ZSBmb2xsb3dpbmcgd2F5Ogo+ID4+IDEpIEZvciBPT0IgY2FsbGJhY2sgaXQgYWx3YXlzIHNlbmRz IE5BTkRfQ01EX1JFQUQwIChlLmcuIHdpdGhvdXQgYW55ICdpZicpCj4gPj4gMikgRm9yIHJlYWQg T09CIHdpdGggZGF0YSBwYWdlIHdlIGRvbid0IG5lZWQgdG8gc2VuZCBOQU5EX0NNRF9SRUFEMC4g KGFsc28gd2l0aG91dCBhbnkgJ2lmJykKPiA+PiAgCj4gPj4+ICAgICAKPiA+Pj4+ICsJCXJldCA9 IG5hbmRfcmVhZF9wYWdlX29wKG5hbmQsIHBhZ2UsIDAsIE5VTEwsIDApOwo+ID4+Pj4gKwkJaWYg KHJldCkKPiA+Pj4+ICsJCQlyZXR1cm4gcmV0Owo+ID4+Pj4gKwl9Cj4gPj4+PiArCj4gPj4+PiAr CS8qIFJlYWQgRUNDIGNvZGVzIGFuZCB1c2VyIGJ5dGVzLiAqLwo+ID4+Pj4gKwlmb3IgKGkgPSAw OyBpIDwgbmFuZC0+ZWNjLnN0ZXBzOyBpKyspIHsKPiA+Pj4+ICsJCXUzMiBlY2Nfb2ZmcyA9IG5h bmQtPmVjYy5zaXplICogKGkgKyAxKSArCj4gPj4+PiArCQkJICAgICAgIChuYW5kLT5lY2MuYnl0 ZXMgKyAyKSAqIGk7Cj4gPj4+PiArCj4gPj4+PiArCQlyZXQgPSBuYW5kX2NoYW5nZV9yZWFkX2Nv bHVtbl9vcChuYW5kLCBlY2Nfb2ZmcywKPiA+Pj4+ICsJCQkJCQkgb29iX2J1ZiArIGkgKiAobmFu ZC0+ZWNjLmJ5dGVzICsgMiksCj4gPj4+PiArCQkJCQkJIChuYW5kLT5lY2MuYnl0ZXMgKyAyKSwg ZmFsc2UpOwo+ID4+Pj4gKwkJaWYgKHJldCkKPiA+Pj4+ICsJCQlyZXR1cm4gcmV0Owo+ID4+Pj4g Kwl9Cj4gPj4+PiArCj4gPj4+PiArCW9vYl9ieXRlcyA9IG1lc29uX25mY19vb2JfZnJlZV9ieXRl cyhuYW5kKTsKPiA+Pj4+ICsKPiA+Pj4+ICsJaWYgKCFvb2JfYnl0ZXMpCj4gPj4+PiArCQlyZXR1 cm4gMDsKPiA+Pj4+ICsKPiA+Pj4+ICsJcGFnZV9zaXplID0gbXRkLT53cml0ZXNpemUgKyBtdGQt Pm9vYnNpemU7Cj4gPj4+PiArCj4gPj4+PiArCXJldCA9IG5hbmRfY2hhbmdlX3JlYWRfY29sdW1u X29wKG5hbmQsIHBhZ2Vfc2l6ZSAtIG9vYl9ieXRlcywKPiA+Pj4+ICsJCQkJCSBvb2JfYnVmICsg KG10ZC0+b29ic2l6ZSAtIG9vYl9ieXRlcyksCj4gPj4+PiArCQkJCQkgb29iX2J5dGVzLCBmYWxz ZSk7Cj4gPj4+PiArCj4gPj4+PiArCXJldHVybiByZXQ7Cj4gPj4+PiArfQo+ID4+Pj4gKwo+ID4+ Pj4gIHN0YXRpYyBpbnQgbWVzb25fbmZjX3dyaXRlX3BhZ2Vfc3ViKHN0cnVjdCBuYW5kX2NoaXAg Km5hbmQsCj4gPj4+PiAgCQkJCSAgICBpbnQgcGFnZSwgaW50IHJhdykKPiA+Pj4+ICB7Cj4gPj4+ PiBAQCAtNjc0LDYgKzc3MSwxMiBAQCBzdGF0aWMgaW50IG1lc29uX25mY193cml0ZV9wYWdlX3N1 YihzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLAo+ID4+Pj4gIAkJCQkgICAgIE5GQ19DTURfU0NSQU1C TEVSX0RJU0FCTEUpOwo+ID4+Pj4gIAl9Cj4gPj4+PiAgCj4gPj4+PiArCWlmICghcmF3KSB7ICAg IAo+ID4+Pgo+ID4+PiBXaHkgdGhpcyBjaGVjaz8KPiA+Pj4KPiA+Pj4gWW91IHNob3VsZCBpbnN0 ZWFkIHByb3BhZ2F0ZSB0aGUgb29iX3JlcXVpcmVkIGZpZWxkIGFuZCBjaGVjayB0aGF0Cj4gPj4+ IHZhbHVlIEkgYmVsaWV2ZS4gICAgCj4gPj4KPiA+Pgo+ID4+IFRoaXMgY2hlY2sgaXMgZm9yIEVD QyBtb2RlLCBiZWNhdXNlIGluIHRoaXMgbW9kZSB3ZSB3cml0ZSB1c2VyIGJ5dGVzIG9mIE9PQi4K PiA+PiBFQ0MgYnl0ZXMgb2YgT09CIGFyZSB3cml0dGVuIGJ5IGhhcmR3YXJlLiAgCj4gPiAKPiA+ IEp1c3QgcHJvdmlkZSB0aGUgYnVmZmVyLiBUaGUgRUNDIGVuZ2luZSB3aWxsIHNtYXNoIGRhdGEg aWYgdGhlcmUgd2FzCj4gPiBhbnkgdGhlcmUuIE90aGVyd2lzZSBpdCB3aWxsIGZpbGwgdGhlIGhv bGVzLiBJdCdzIGV4cGVjdGVkLiBEb24ndCB0cnkKPiA+IHRvIGJlIHNtYXJ0ZXIgdGhhbiB5b3Ug c2hvdWxkIDopCj4gPiAgIAo+ID4+IEkgdGhpbmsgSSBtYWRlIGEgbWlzdGFrZSwgYmVjYXVzZQo+ ID4+IEkgbmVlZCBuZXcgY2FsbGJhY2sgdG8gd3JpdGUgT09CIGluIHJhdyBtb2RlIC0gaXQgd2ls bCB3cml0ZSBib3RoIEVDQyBhbmQgdXNlcgo+ID4+IHBhcnRzLCAgCj4gPiAKPiA+IFRoZXJlIGlz IG5vIHN1Y2ggdGhpbmcgYXMgdXNlciBhbmQgRUNDIHBhcnQgYXQgdGhlIGRyaXZlciBsZXZlbC4g WW91Cj4gPiBnZXQgYSBidWZmZXIsIHlvdSBuZWVkIHRvIHdyaXRlIGl0IHRvIHRoZSBmbGFzaC4K PiA+IAo+ID4gVGhlIHVzZXIgZXhwZWN0czoKPiA+IAo+ID4gfCBkYXRhIHwgT09CIHwKPiA+IAo+ ID4gVGhlIGNvbnRyb2xsZXIgZXhwZWN0cyBzb21ldGhpbmcgbGlrZToKPiA+IAo+ID4gfCBkYXRh MSB8IE9PQjEgfCBkYXRhMiB8IE9PQjIgfAo+ID4gCj4gPiBTbyBqdXN0IHBlcmZvcm0gdGhlIHJl b3JkZXJpbmcgYmV0d2VlbiBkYXRhIGFuZCBPT0IgaW4gdGhlIERNQSBidWZmZXIsCj4gPiB0aGF0 IGlzIF9hbGxfLgo+ID4gICAKPiA+PiBpbiBjdXJyZW50IHZlcnNpb24gSSB3cml0ZSBvbmx5IHVz ZXIgcGFydCBpbiByYXcgbW9kZS4KPiA+PiAgCj4gPj4+ICAgICAKPiA+Pj4+ICsJCXJldCA9IG1l c29uX25mY193cml0ZV9vb2IobmFuZCwgLTEpOwo+ID4+Pj4gKwkJaWYgKHJldCkKPiA+Pj4+ICsJ CQlyZXR1cm4gcmV0Owo+ID4+Pj4gKwl9Cj4gPj4+PiArCj4gPj4+PiAgCWNtZCA9IG5mYy0+cGFy YW0uY2hpcF9zZWxlY3QgfCBORkNfQ01EX0NMRSB8IE5BTkRfQ01EX1BBR0VQUk9HOwo+ID4+Pj4g IAl3cml0ZWwoY21kLCBuZmMtPnJlZ19iYXNlICsgTkZDX1JFR19DTUQpOwo+ID4+Pj4gIAltZXNv bl9uZmNfcXVldWVfcmIobmFuZCwgUFNFQ19UT19NU0VDKHNkci0+dFBST0dfbWF4KSk7Cj4gPj4+ PiBAQCAtODM0LDE3ICs5MzcsMTAgQEAgc3RhdGljIGludCBtZXNvbl9uZmNfcmVhZF9wYWdlX2h3 ZWNjKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsIHU4ICpidWYsCj4gPj4+PiAgCQltZW1jcHkoYnVm LCBtZXNvbl9jaGlwLT5kYXRhX2J1ZiwgbXRkLT53cml0ZXNpemUpOwo+ID4+Pj4gIAl9Cj4gPj4+ PiAgCj4gPj4+PiAtCXJldHVybiBiaXRmbGlwczsKPiA+Pj4+IC19Cj4gPj4+PiAtCj4gPj4+PiAt c3RhdGljIGludCBtZXNvbl9uZmNfcmVhZF9vb2JfcmF3KHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQs IGludCBwYWdlKQo+ID4+Pj4gLXsKPiA+Pj4+IC0JcmV0dXJuIG1lc29uX25mY19yZWFkX3BhZ2Vf cmF3KG5hbmQsIE5VTEwsIDEsIHBhZ2UpOwo+ID4+Pj4gLX0KPiA+Pj4+ICsJaWYgKG9vYl9yZXF1 aXJlZCAmJiByZXQpICAgIAo+ID4+Pgo+ID4+PiBVbmNsZWFyIHdoeSB5b3UgY2hlY2sgcmV0IGhl cmU/ICAKPiA+IAo+ID4gSW4gZ2VuZXJhbCwgaWYgKHJldCkgbWVhbnMgdGhlcmUgaXMgYW4gZXJy b3IuCj4gPiAKPiA+IFBsZWFzZSBjb25zaWRlciB1c2luZzoKPiA+IAo+ID4gaWYgKHJldCkKPiA+ IAlnb3RvIGVycm9yIHBhdGg7Cj4gPiAKPiA+IGRvIHNvbWV0aGluZyBlbHNlOwo+ID4gICAKPiA+ Pj4gICAgIAo+ID4+Cj4gPj4gSWYgcmVhZCB3YXMgc3VjY2Vzc2Z1bCwgd2UgcmVhZCBPT0IuIElm IG5vdCAtIHRoZXJlIGlzIG5vIHNlbnNlIGluIGl0Lgo+ID4+ICAKPiA+Pj4+ICsJCW1lc29uX25m Y19yZWFkX29vYihuYW5kLCAtMSk7Cj4gPj4+PiAgCj4gPj4+PiAtc3RhdGljIGludCBtZXNvbl9u ZmNfcmVhZF9vb2Ioc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgaW50IHBhZ2UpCj4gPj4+PiAtewo+ ID4+Pj4gLQlyZXR1cm4gbWVzb25fbmZjX3JlYWRfcGFnZV9od2VjYyhuYW5kLCBOVUxMLCAxLCBw YWdlKTsKPiA+Pj4+ICsJcmV0dXJuIGJpdGZsaXBzOwo+ID4+Pj4gIH0KPiA+Pj4+ICAKPiA+Pj4+ ICBzdGF0aWMgYm9vbCBtZXNvbl9uZmNfaXNfYnVmZmVyX2RtYV9zYWZlKGNvbnN0IHZvaWQgKmJ1 ZmZlcikKPiA+Pj4+IEBAIC05ODcsMTIgKzEwODMsMTYgQEAgc3RhdGljIGludCBtZXNvbl9vb2Js YXlvdXRfZnJlZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHNlY3Rpb24sCj4gPj4+PiAgCQkJ CXN0cnVjdCBtdGRfb29iX3JlZ2lvbiAqb29icmVnaW9uKQo+ID4+Pj4gIHsKPiA+Pj4+ICAJc3Ry dWN0IG5hbmRfY2hpcCAqbmFuZCA9IG10ZF90b19uYW5kKG10ZCk7Cj4gPj4+PiArCXUzMiBvb2Jf Ynl0ZXMgPSBtZXNvbl9uZmNfb29iX2ZyZWVfYnl0ZXMobmFuZCk7Cj4gPj4+PiAgCj4gPj4+PiAg CWlmIChzZWN0aW9uID49IG5hbmQtPmVjYy5zdGVwcykKPiA+Pj4+ICAJCXJldHVybiAtRVJBTkdF Owo+ID4+Pj4gIAo+ID4+Pj4gLQlvb2JyZWdpb24tPm9mZnNldCA9IHNlY3Rpb24gKiAoMiArIG5h bmQtPmVjYy5ieXRlcyk7ICAgIAo+ID4+Pgo+ID4+PiBUaGUgZmlyc3QgdHdvIGJ5dGVzIG9mIE9P QiBhcmUgcmVzZXJ2ZWQgZm9yIHRoZSBiYWQgYmxvY2sgbWFya2Vycy4gVGhpcwo+ID4+PiBpcyBu b3QgcmVsYXRlZCB0byB5b3VyIGNvbnRyb2xsZXIuICAgIAo+ID4+Cj4gPj4gSSB0aGluayBmaXJz dCB0d28gYnl0ZXMgKGluIGZhY3QgdGhlcmUgYXJlIDQgYnl0ZXMgYXQgcG9zaXRpb25zIDAsIDEs IDE2IGFuZCAxNykKPiA+PiBpcyBjb25zaWRlcmVkIGJ5IGhhcmR3YXJlIGFzIHVzZXIgYnl0ZXMg Y292ZXJlZCBieSBFQ0MuICAKPiA+IAo+ID4gVGhlIHR3byBmaXJzdCBieXRlcyBzaG91bGQgbm90 IGJlIGF2YWlsYWJsZS4gVGhleSBhcmUgbm90ICJFQ0MiIGJ5dGVzLAo+ID4gdGhleSBhcmUgbm90 ICJmcmVlIiBieXRlcy4gTm9uZSBvZiB0aGVzZSB0d28gY2FsbGJhY2tzIHNob3VsZCBnaXZlCj4g PiBhY2Nlc3MgdG8gdGhlc2UgdHdvIGJ5dGVzIHJlc2VydmVkIGZvciBiYWQgYmxvY2sgbWFya2Vy cy4KPiA+IAo+ID4gSnVzdCB0byBiZSBjbGVhcjogIkVDQyBieXRlcyIgYXMgaW4gIm1lc29uX29v YmxheW91dF9lY2MiIGRvICpub3QqIG1lYW4KPiA+ICJ0aGVzZSBhcmUgdGhlIHByb3RlY3RlZCBi eXRlcyIuIFRoZXkgbWVhbiAidGhlc2UgYXJlIHRoZSBieXRlcyBpbiBPT0IKPiA+IHRoZSBoYXJk d2FyZSBFQ0MgZW5naW5lIHdpbGwgdXNlIHRvIHBsYWNlIGl0cyBvd24gZGF0YSB0byBtYWtlIHRo ZQo+ID4gcmVjb3ZlcnkgcHJvY2VzcyB3b3JrIi4KPiA+IAo+ID4gVGhhbmtzLAo+ID4gTWlxdcOo bCAgCgoKVGhhbmtzLApNaXF1w6hsCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpsaW51eC1hbWxvZ2ljIG1haWxpbmcgbGlzdApsaW51eC1hbWxvZ2ljQGxp c3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0 aW5mby9saW51eC1hbWxvZ2ljCg== 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 A78F9C77B73 for ; Tue, 6 Jun 2023 07:12:06 +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=3KEZGbnDesRPSj7n6DLbY+FGFPtUWezATj4JHdhPT9s=; b=QnvtFJ8HM6/XwO gzxbQrNa3RA86zvdmQQtgB2eduMNRdBzV3pd+kef7CpUf9qurnXcFG8VPdF1x1e9eADsgjeFgsBhL UvUYN5y3aQtcw4bsP+feeRSgt1k3sZNSJqI6euU+MkrCohiksxBRvQaE8STpcPoJGhJegd6JmG3+A 9/9KMtP3JwOa/xjuW+y7qAHej5WZ/lff8k5IWzQ4XJ+5rhJX4e+msxE6+NzhuaUJLj4kwvwAUogqm luD5WNGiI1uAJQ9F4OCKCOGBC7eRbq0vBNKSiururUSBfA6SaXBaddCgb8tocfv6YduJomcrgygmV 5i5h/KfL3c8vJyCMGVtA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1q6Qqh-000UCr-0k; Tue, 06 Jun 2023 07:11:23 +0000 Received: from relay1-d.mail.gandi.net ([2001:4b98:dc4:8::221]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1q6Qqb-000UAA-2Y; Tue, 06 Jun 2023 07:11:20 +0000 X-GND-Sasl: miquel.raynal@bootlin.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1686035471; 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=rFJmCcMrQ4DjHJjPGf914EBlWwvSR6LF8KLemTrPksU=; b=naaUZgc6f6dgY5UzpsA9KAQODJUQtw2fskLovj217gC8HaaeSwzxtIe+/DXyDkUgNxDSmM rAQ2xwRU3vmdnqnaZGX1chK7I/3lD2c2laZ/3azlYOSEWKczGLvi9RN1mbOcIm4qZxBklN yOYGe4H6a5XgSj/2mzgcQ+dvpcJpEMRtVEisRQjbowY/DDuZfWYkieuMmjOayZkv1ESuuZ Hk42JbB5OqWoRlFaAmCl+pcQIkRru/HCi8fufkllxjsbtV/5YMZLxQt7loMIMeFYocG1iC /RkRk7MVgVEkZUZv3zQdiwdl8jh4ebm8wdrcuRjTMcoJAz5ltiVIYSXJ6mLA8Q== 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 755CF240004; Tue, 6 Jun 2023 07:11:09 +0000 (UTC) Date: Tue, 6 Jun 2023 09:11:07 +0200 From: Miquel Raynal To: Arseniy Krasnov Cc: Liang Yang , Richard Weinberger , Vignesh Raghavendra , Neil Armstrong , Kevin Hilman , Jerome Brunet , Martin Blumenstingl , , , , , , Subject: Re: [RFC PATCH v5 3/6] mtd: rawnand: meson: only expose unprotected user OOB bytes Message-ID: <20230606091107.78c792ff@xps-13> In-Reply-To: <53f31185-70d9-7264-a99a-cf71f8fc52eb@sberdevices.ru> References: <20230601061850.3907800-1-AVKrasnov@sberdevices.ru> <20230601061850.3907800-4-AVKrasnov@sberdevices.ru> <20230601103111.6840acc0@xps-13> <8242530c-7b6b-29ce-581b-c5644a965b60@sberdevices.ru> <20230605114850.77cf9197@xps-13> <53f31185-70d9-7264-a99a-cf71f8fc52eb@sberdevices.ru> 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-20230606_001118_157735_C3CDB89E X-CRM114-Status: GOOD ( 61.94 ) 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 SGkgQXJzZW5peSwKCmF2a3Jhc25vdkBzYmVyZGV2aWNlcy5ydSB3cm90ZSBvbiBUdWUsIDYgSnVu IDIwMjMgMDc6NDI6NTggKzAzMDA6Cgo+IE9uIDA1LjA2LjIwMjMgMTI6NDgsIE1pcXVlbCBSYXlu YWwgd3JvdGU6Cj4gPiBIaSBBcnNlbml5LAo+ID4gCj4gPiBhdmtyYXNub3ZAc2JlcmRldmljZXMu cnUgd3JvdGUgb24gRnJpLCAyIEp1biAyMDIzIDExOjUzOjQ3ICswMzAwOgo+ID4gICAKPiA+PiBI ZWxsbyBNaXF1ZWwsIHRoYW5rcyBmb3IgcmV2aWV3IQo+ID4+Cj4gPj4gT24gMDEuMDYuMjAyMyAx MTozMSwgTWlxdWVsIFJheW5hbCB3cm90ZTogIAo+ID4+PiBIaSBBcnNlbml5LAo+ID4+Pgo+ID4+ PiBBVktyYXNub3ZAc2JlcmRldmljZXMucnUgd3JvdGUgb24gVGh1LCAxIEp1biAyMDIzIDA5OjE4 OjQ2ICswMzAwOgo+ID4+PiAgICAgCj4gPj4+PiBUaGlzIG1vdmVzIGZyZWUgYnl0ZXMgb2YgT09C IHRvIG5vbi1wcm90ZWN0ZWQgRUNDIGFyZWEuIEl0IGlzIG5lZWRlZCB0byAgICAKPiA+Pj4KPiA+ Pj4gQXMgd2UgZGlzY3Vzc2VkLCBJIGV4cGVjdCB0aGlzIGNvbW1pdCB0byBqdXN0IGNoYW5nZSB0 aGUgT09CIGxheW91dCB0bwo+ID4+PiBleHBvc2UgdW5wcm90ZWN0ZWQgT09CIGJ5dGVzIHRvIHRo ZSB1c2VyLCB0aGF0IGlzIHRoZSBvbmx5IGNoYW5nZSB0aGlzCj4gPj4+IGNvbW1pdCBzaG91bGQg Y2FycnkuIElmIHRoYXQgZG9lcyBub3Qgd29yaywgeW91IHNob3VsZCBhZGQgYQo+ID4+PiBwcmVw YXJhdGlvbiBwYXRjaC4gICAgCj4gPj4KPiA+PiBPaywgYnV0IEkgdGhvdWdodCwgaWYgaSBjaGFu Z2Ugb25seSBPT0IgbGF5b3V0LCBlLmcuIHVwZGF0ZSAnZnJlZScgY2FsbGJhY2sgb2YKPiA+PiBt dGRfb29ibGF5b3V0X29wcywgSSBhbHNvIG5lZWQgdG8gaW1wbGVtZW50IGNvZGUgd2hpY2ggcGVy Zm9ybXMgcmVhZC93cml0ZQo+ID4+IGFjY29yZGluZyBuZXcgbGF5b3V0IChpdCBtdXN0IGJlIGRv bmUgaW4gYSBzaW5nbGUgcGF0Y2gpPyAgCj4gPiAKPiA+IE5vLCB0aGlzIGlzIG9ydGhvZ29uYWwu Cj4gPiAKPiA+IFRoZSBkcml2ZXIgbXVzdCByZWFkIHRoZSB0aGUgd2hvbGUgT09CIGFyZWEgKGFu ZCBwZXJoYXBzIHJlb3JkZXIgdGhlCj4gPiBkYXRhKSwgYnV0IHlvdSBzaG91bGQgbm90IG1ha2Ug YW55IGRlY2lzaW9uIHJlZ2FyZGluZyB3aGF0IGJ5dGVzIHlvdQo+ID4gd2FudCBvciBub3Qgd2Fu dCB0byBleHBvc2UuCj4gPiAKPiA+IFRoZW4sIHRoZSB1c2VyIChubyBtYXR0ZXIgd2hhdCAidXNl ciIgaXMgaGVyZSkgd2lsbCBkZWNpZGUgaG93IHRvIGRlYWwKPiA+IHdpdGggdGhlIGRhdGEuICAK PiAKPiBIZWxsbyBNaXF1ZWwhCj4gCj4gT2ssIHNvIGluIGNhc2Ugb2Y6Cj4gMSkgcmVhZCBJIGp1 c3QgbmVlZCB0byByZWFkIE9PQiBkYXRhIHVzaW5nICduYW5kX2NoYW5nZV9yZWFkX2NvbHVtbl9v cCgpJyBhbmQgcGxhY2UgaXQgdG8gJ29vYl9idWYnLgo+IDIpIHdyaXRlIEkgbmVlZCB0byB3cml0 ZSBPT0IgZGF0YSB1c2luZyAnbmFuZF9jaGFuZ2Vfd3JpdGVfY29sdW1uX29wKCknIHRvIGNvbnRy b2xsZXIgaW50ZXJuYWwgUkFNIGFuZCB0aGVuIGNhbGwgUEFHRV9QUk9HLgo+ICAgIEV2ZW4gaW4g RUNDIG1vZGUsIGRhdGEgd2hpY2ggb2NjdXBpZXMgcGxhY2VzIG9mIEVDQyBjb2RlcyB3aWxsIGJl IHJlbW92ZWQgYnkgaHcgKCBhcyBZb3UgbWVudGlub2VkIGJlbG93KS4KPiAKPiBUaGF0J3MgYWxs PzopCgpTb3VuZHMgcmlnaHQgOikKCklmIHlvdSBmaW5kIHRvbyBjb3N0bHkgdG8gbWFrZSBtYW55 IG5hbmRfY2hhbmdlX3JlYWRfY29sdW1uX29wKCkgYW5kCndhbnQgdG8gbGV2ZXJhZ2UgRE1BIGlu c3RlYWQsIHlvdSBjYW4gYXMgd2VsbCByZWFkIGV2ZXJ5dGhpbmcKKGRhdGErb29iKSBpbiBvbmUg Z28gaW4gYSBib3VuY2UgYnVmZmVyIGFuZCB0aGVuIHBlcmZvcm0gbWVtY3B5J3MgaW50bwp5b3Vy IGZpbmFsIGJ1ZmZlciBpbiBvcmRlciB0byByZW9yZ2FuaXplIHRoZSBkYXRhLiBUaGF0J3MgZW50 aXJlbHkgdXAgdG8KeW91IChhbmQgc2FtZSBvZiBjb3Vyc2UgaW4gdGhlIHdyaXRlIHBhdGgsIHlv dSBjb3VsZCBmaXJzdAptZW1jcHkvcmVvcmRlciB0aGUgZGF0YSBpbnRvIGEgRE1BIGJvdW5jZSBi dWZmZXIgbG9jYWxseSwgYW5kIHRoZW4gc2VuZAphbGwgdGhlIGRhdGEgaW4gYSBzaW5nbGUgRE1B IHRyYW5zZmVyIGFuZCBjYWxsIFBBR0VfUFJPRykuCgo+IAo+ID4gICAKPiA+PiBNYWluIHRoaW5n IGlzOgo+ID4+Cj4gPj4gSSBndWVzcyB0aGF0IGdlbmVyYWwgY29uZnVzZSB3aXRoIHRoaXMgcGF0 Y2ggaXMgdGhhdCBZb3UgY29uc2lkZXIKPiA+PiB0aGF0IHdlIGNoYW5nZSBvbmx5IE9PQiBsYXlv dXQgYnkgbW92aW5nIHVzZXIgYnl0ZXMgb3V0IG9mIEVDQyBhcmVhLCBidXQgYXQgdGhlIHNhbWUK PiA+PiB0aW1lIEkgYWxzbyBpbmNyZWFzZWQgc2l6ZSBvZiBPT0IgZnJvbSA0IGJ5dGVzIChlLmcu IDIgeCAyIGJ5dGVzIGNsZWFuIG1hcmtlcnMpCj4gPj4gdG8gMzIgYnl0ZXMgKGUuZy4gdGFpbCBv ZiBwYWdlIGFmdGVyIGRhdGEgYW5kIEVDQyBjb2RlcyksIHNvIGlmIHRoaXMKPiA+PiBhc3N1bXB0 aW9uIGlzIGNvcnJlY3QsIGluIHRoZSBuZXh0IHZlcnNpb24gSSB3b24ndCBjaGFuZ2Ugc2l6ZSBv ZiB1c2VyIGFyZWEgaW4KPiA+PiBPT0IsIHRodXMgdGhpcyBwYXRjaCB3aWxsIGJlIHJlZHVjZWQg YXMgc29tZSBjb21tZW50cyBmcm9tIHRoaXMgcmV2aWV3LiAgCj4gPiAKPiA+IEV4cG9zaW5nIG9u bHkgNCBieXRlcyB3YXMgYSBtaXN0YWtlIGluIHRoZSBmaXJzdCBwbGFjZSwgcGxlYXNlIGZpeCB0 aGlzCj4gPiBpbiBhIGRlZGljYXRlZCBwYXRjaC4gIAo+IAo+IFNvIGN1cnJlbnQgKG5vdCBtZXJn ZWQpIHZlcnNpb24gZXhwb3NlcyBieXRlcyAwLDEsMTYsMTcgb2YgT09CLCBZb3UgbWVhbiB0aGlz IGlzIHdyb25nPwo+IENvcnJlY3Qgd2F5IGlzIHRvIGV4cG9zZSAzMiwzMyw0OCw0OSAoZS5nLiBz aGlmdGVkIGJ5IDMyKT8KPiAKPiBUaGFua3MsIEFyc2VuaXkKPiAKPiA+ICAgCj4gPj4+PiBtYWtl IEpGRlMyIHdvcmtzIGNvcnJlY3RseSB3aXRoIHRoaXMgTkFORCBjb250cm9sbGVyLiBQcm9ibGVt IGZpcmVzIHdoZW4KPiA+Pj4+IEpGRlMyIGRyaXZlciB3cml0ZXMgY2xlYW5tYXJrZXIgdG8gc29t ZSBwYWdlIGFuZCBsYXRlciBpdCB0cmllcyB0byB3cml0ZQo+ID4+Pj4gdG8gdGhpcyBwYWdlIC0g d3JpdGUgd2lsbCBiZSBkb25lIHN1Y2Nlc3NmdWxseSwgYnV0IGFmdGVyIHRoYXQgc3VjaCBwYWdl Cj4gPj4+PiBiZWNvbWVzIHVucmVhZGFibGUgZHVlIHRvIGludmFsaWQgRUNDIGNvZGVzLiBUaGlz IGhhcHBlbnMgYmVjYXVzZSBzZWNvbmQKPiA+Pj4+IHdyaXRlIG5lZWRzIHRvIHVwZGF0ZSBFQ0Mg Y29kZXMsIGJ1dCBpdCBpcyBpbXBvc3NpYmxlIHRvIGRvIGl0IGNvcnJlY3RseQo+ID4+Pj4gd2l0 aG91dCBibG9jayBlcmFzZS4gU28gaWRlYSBvZiB0aGlzIHBhdGNoIGlzIHRvIHVzZSB0aGUgdW5w cm90ZWN0ZWQgT09CCj4gPj4+PiBhcmVhIHRvIHN0b3JlIHRoZSBjbGVhbm1hcmtlcnMsIHNvIHRo YXQgdGhleSBjYW4gYmUgd3JpdHRlbiBieSB0aGUKPiA+Pj4+IGZpbGVzeXN0ZW0gd2l0aG91dCBj YXJpbmcgbXVjaCBhYm91dCB0aGUgcGFnZSBiZWluZyBlbXB0eSBvciBub3Q6IHRoZQo+ID4+Pj4g RUNDIGNvZGVzIHdpbGwgbm90IGJlIHdyaXR0ZW4gYW55d2F5Lgo+ID4+Pj4KPiA+Pj4+IEpGRlMy IGlzIG9ubHkgdXNlZnVsIG9uIHRpbnkgTkFORCBkZXZpY2VzLCB3aGVyZSBVQkkgZG9lcyBub3Qg Zml0LCB3aGljaAo+ID4+Pj4gYXJlIHVzdWFsbHkgdHJ1ZSBTTEMgZmxhc2hlcywgd2l0aCB0aGUg Y2FwYWJpbGl0eSBvZiB3cml0aW5nIGEgcGFnZSB3aXRoCj4gPj4+PiBlbXB0eSAoMHhGRikgZGF0 YSwgYW5kIHN0aWxsIGJlIGFibGUgdG8gd3JpdGUgYWN0dWFsIGRhdGEgdG8gaXQgbGF0ZXIgaW4K PiA+Pj4+IGEgc2Vjb25kIHdyaXRlLgo+ID4+Pj4KPiA+Pj4+IFNpZ25lZC1vZmYtYnk6IEFyc2Vu aXkgS3Jhc25vdiA8QVZLcmFzbm92QHNiZXJkZXZpY2VzLnJ1Pgo+ID4+Pj4gLS0tCj4gPj4+PiAg Q2hhbmdlbG9nIHY0LT52NToKPiA+Pj4+ICAqIERyb3AgY29zbWV0aWMgY2hhbmdlcyBmcm9tIHRo aXMgcGF0Y2guCj4gPj4+PiAgKiBEbyBub3QgaWdub3JlIEVDQyBwcm90ZWN0ZWQgdXNlciBieXRl cyBwcm92aWRlZCBieSBody4gRXZlbiB0aGVzZQo+ID4+Pj4gICAgYnl0ZXMgYXJlIG91dCBvZiB1 c2VyIGFyZWEgb2YgT09CLCBpdHMgdmFsdWVzIGFyZSBzdGlsbCByZWFkIGZyb20KPiA+Pj4+ICAg IHRoZSBwcm92aWRlZCBPT0IgYnVmZmVyIGFuZCB3cml0dGVuIGJ5IGhhcmR3YXJlLiBTYW1lIGJl aGF2aW91ciBpcwo+ID4+Pj4gICAgcHJlc2VydmVkIGZvciByZWFkIGFjY2VzcyAtIHN1Y2ggYnl0 ZXMgYXJlIHJlYWQgZnJvbSBETUEgYnVmZmVyIGFuZAo+ID4+Pj4gICAgcGxhY2VkIHRvIE9PQiBi dWZmZXIuCj4gPj4+PiAgKiBPT0IgcmVhZCBhbmQgd3JpdGUgYmVjb21lIG1vcmUgbGlnaHR3ZWln aHQgYmVjYXVzZSBJIHJlbW92ZWQgaGVhdnkKPiA+Pj4+ICAgIFJFQUQwIGFuZCBQQUdFUFJPRyBj b21tYW5kIGZyb20gaXQgKGJvdGggY29tbWFuZHMgYXJlIHN0aWxsIHNlbnQKPiA+Pj4+ICAgIHdo ZW4gT09CIGFjY2VzcyBpcyBwZXJmb3JtZWQgdXNpbmcgT09CIGNhbGxiYWNrcykuIEluIGNhc2Ug b2YgcGFnZQo+ID4+Pj4gICAgcmVhZC93cml0ZSBPT0IgZGF0YSBpcyBoYW5kbGVkIGluIHRoZSBp bnRlcm5hbCBTUkFNIG9mIHRoZSBjb250cm9sbGVyLgo+ID4+Pj4gICogQ29tbWl0IG1lc3NhZ2Ug dXBkYXRlZC4KPiA+Pj4+ICAqIFRlbXBvcmFyeSBidWZmZXIgZm9yIE9PQiByZWFkL3dyaXRlIGlz IHJlbW92ZWQuIFNlZW1zIGV2ZXJ5dGhpbmcKPiA+Pj4+ICAgIHdvcmtzIGNvcnJlY3RseSB3aXRo b3V0IGl0Lgo+ID4+Pj4KPiA+Pj4+ICBkcml2ZXJzL210ZC9uYW5kL3Jhdy9tZXNvbl9uYW5kLmMg fCAxMzQgKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tCj4gPj4+PiAgMSBmaWxlIGNoYW5n ZWQsIDExNyBpbnNlcnRpb25zKCspLCAxNyBkZWxldGlvbnMoLSkKPiA+Pj4+Cj4gPj4+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9yYXcvbWVzb25fbmFuZC5jIGIvZHJpdmVycy9tdGQv bmFuZC9yYXcvbWVzb25fbmFuZC5jCj4gPj4+PiBpbmRleCA4MmE2MjkwMjVhZGMuLmU0MmMyOGJl MDJmMyAxMDA2NDQKPiA+Pj4+IC0tLSBhL2RyaXZlcnMvbXRkL25hbmQvcmF3L21lc29uX25hbmQu Ywo+ID4+Pj4gKysrIGIvZHJpdmVycy9tdGQvbmFuZC9yYXcvbWVzb25fbmFuZC5jCj4gPj4+PiBA QCAtMzU4LDggKzM1OCwxMSBAQCBzdGF0aWMgdTggKm1lc29uX25mY19kYXRhX3B0cihzdHJ1Y3Qg bmFuZF9jaGlwICpuYW5kLCBpbnQgaSkKPiA+Pj4+ICBzdGF0aWMgdm9pZCBtZXNvbl9uZmNfZ2V0 X2RhdGFfb29iKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsCj4gPj4+PiAgCQkJCSAgIHU4ICpidWYs IHU4ICpvb2JidWYpCj4gPj4+PiAgewo+ID4+Pj4gKwlzdHJ1Y3QgbWVzb25fbmZjX25hbmRfY2hp cCAqbWVzb25fY2hpcCA9IHRvX21lc29uX25hbmQobmFuZCk7Cj4gPj4+PiArCXN0cnVjdCBtdGRf aW5mbyAqbXRkID0gbmFuZF90b19tdGQobmFuZCk7Cj4gPj4+PiAgCWludCBpLCBvb2JfbGVuID0g MDsKPiA+Pj4+ICAJdTggKmRzcmMsICpvc3JjOwo+ID4+Pj4gKwl1OCAqb29idGFpbDsKPiA+Pj4+ ICAKPiA+Pj4+ICAJb29iX2xlbiA9IG5hbmQtPmVjYy5ieXRlcyArIDI7Cj4gPj4+PiAgCWZvciAo aSA9IDA7IGkgPCBuYW5kLT5lY2Muc3RlcHM7IGkrKykgewo+ID4+Pj4gQEAgLTM2OCwxNyArMzcx LDI3IEBAIHN0YXRpYyB2b2lkIG1lc29uX25mY19nZXRfZGF0YV9vb2Ioc3RydWN0IG5hbmRfY2hp cCAqbmFuZCwKPiA+Pj4+ICAJCQltZW1jcHkoYnVmLCBkc3JjLCBuYW5kLT5lY2Muc2l6ZSk7Cj4g Pj4+PiAgCQkJYnVmICs9IG5hbmQtPmVjYy5zaXplOwo+ID4+Pj4gIAkJfQo+ID4+Pj4gKwo+ID4+ Pj4gIAkJb3NyYyA9IG1lc29uX25mY19vb2JfcHRyKG5hbmQsIGkpOwo+ID4+Pj4gIAkJbWVtY3B5 KG9vYmJ1Ziwgb3NyYywgb29iX2xlbik7Cj4gPj4+PiAgCQlvb2JidWYgKz0gb29iX2xlbjsKPiA+ Pj4+ICAJfQo+ID4+Pj4gKwo+ID4+Pj4gKwlvb2J0YWlsID0gbWVzb25fY2hpcC0+ZGF0YV9idWYg KyBuYW5kLT5lY2Muc3RlcHMgKgo+ID4+Pj4gKwkJICAobmFuZC0+ZWNjLnNpemUgKyBvb2JfbGVu KTsKPiA+Pj4+ICsKPiA+Pj4+ICsJLyogJ29vYmJ1ZicgcG9pbnRzIHRvIHRoZSBzdGFydCBvZiB1 c2VyIGFyZWEuICovCj4gPj4+PiArCW1lbWNweShvb2JidWYsIG9vYnRhaWwsIG10ZC0+b29ic2l6 ZSAtIG5hbmQtPmVjYy5zdGVwcyAqIG9vYl9sZW4pOwo+ID4+Pj4gIH0KPiA+Pj4+ICAKPiA+Pj4+ ICBzdGF0aWMgdm9pZCBtZXNvbl9uZmNfc2V0X2RhdGFfb29iKHN0cnVjdCBuYW5kX2NoaXAgKm5h bmQsCj4gPj4+PiAgCQkJCSAgIGNvbnN0IHU4ICpidWYsIHU4ICpvb2JidWYpCj4gPj4+PiAgewo+ ID4+Pj4gKwlzdHJ1Y3QgbWVzb25fbmZjX25hbmRfY2hpcCAqbWVzb25fY2hpcCA9IHRvX21lc29u X25hbmQobmFuZCk7Cj4gPj4+PiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQo bmFuZCk7Cj4gPj4+PiAgCWludCBpLCBvb2JfbGVuID0gMDsKPiA+Pj4+ICAJdTggKmRzcmMsICpv c3JjOwo+ID4+Pj4gKwl1OCAqb29idGFpbDsKPiA+Pj4+ICAKPiA+Pj4+ICAJb29iX2xlbiA9IG5h bmQtPmVjYy5ieXRlcyArIDI7Cj4gPj4+PiAgCWZvciAoaSA9IDA7IGkgPCBuYW5kLT5lY2Muc3Rl cHM7IGkrKykgewo+ID4+Pj4gQEAgLTM5MSw2ICs0MDQsMTIgQEAgc3RhdGljIHZvaWQgbWVzb25f bmZjX3NldF9kYXRhX29vYihzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLAo+ID4+Pj4gIAkJbWVtY3B5 KG9zcmMsIG9vYmJ1Ziwgb29iX2xlbik7Cj4gPj4+PiAgCQlvb2JidWYgKz0gb29iX2xlbjsKPiA+ Pj4+ICAJfQo+ID4+Pj4gKwo+ID4+Pj4gKwlvb2J0YWlsID0gbWVzb25fY2hpcC0+ZGF0YV9idWYg KyBuYW5kLT5lY2Muc3RlcHMgKgo+ID4+Pj4gKwkJICAobmFuZC0+ZWNjLnNpemUgKyBvb2JfbGVu KTsgICAgCj4gPj4+Cj4gPj4+IFRoaXMgaXMgYWx3YXlzIHRhcmdldGluZyB0aGUgc2FtZSBhcmVh LCBzbyBpdCBsb29rcyBzdHJhbmdlIHRvIG1lLgo+ID4+PiAgICAgCj4gPj4+PiArCj4gPj4+PiAr CS8qICdvb2JidWYnIHBvaW50cyB0byB0aGUgc3RhcnQgb2YgdXNlciBhcmVhLiAqLwo+ID4+Pj4g KwltZW1jcHkob29idGFpbCwgb29iYnVmLCBtdGQtPm9vYnNpemUgLSBuYW5kLT5lY2Muc3RlcHMg KiBvb2JfbGVuKTsgICAgCj4gPj4+Cj4gPj4+IFRCSCBJIGRvbid0IGdldCB3aGF0IHlvdSBkbyBo ZXJlLiAgICAKPiA+Pgo+ID4+IFRoaXMgY29kZSB3b3JrcyBpbiByYXcgbW9kZSBhbmQgcGxhY2Vz IE9PQiBkYXRhIGZyb20gcHJvdmlkZWQgT09CIGJ1ZmZlciB0byBETUEgYnVmZmVyLgo+ID4+IFRo aXMgaXMgYmVjYXVzZSBudW1iZXIgb2YgdXNlciBieXRlcyBpcyBpbmNyZWFzZWQgaW4gdGhpcyBw YXRjaC4KPiA+PiAgCj4gPj4+ICAgICAKPiA+Pj4+ICB9Cj4gPj4+PiAgCj4gPj4+PiAgc3RhdGlj IGludCBtZXNvbl9uZmNfcXVldWVfcmIoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgaW50IHRpbWVv dXRfbXMpCj4gPj4+PiBAQCAtNDMzLDcgKzQ1Miw3IEBAIHN0YXRpYyB2b2lkIG1lc29uX25mY19z ZXRfdXNlcl9ieXRlKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsIHU4ICpvb2JfYnVmKQo+ID4+Pj4g IAlfX2xlNjQgKmluZm87Cj4gPj4+PiAgCWludCBpLCBjb3VudDsKPiA+Pj4+ICAKPiA+Pj4+IC0J Zm9yIChpID0gMCwgY291bnQgPSAwOyBpIDwgbmFuZC0+ZWNjLnN0ZXBzOyBpKyssIGNvdW50ICs9 IDIpIHsKPiA+Pj4+ICsJZm9yIChpID0gMCwgY291bnQgPSAwOyBpIDwgbmFuZC0+ZWNjLnN0ZXBz OyBpKyssIGNvdW50ICs9IChuYW5kLT5lY2MuYnl0ZXMgKyAyKSkgewo+ID4+Pj4gIAkJaW5mbyA9 ICZtZXNvbl9jaGlwLT5pbmZvX2J1ZltpXTsKPiA+Pj4+ICAJCSppbmZvIHw9IG9vYl9idWZbY291 bnRdOwo+ID4+Pj4gIAkJKmluZm8gfD0gb29iX2J1Zltjb3VudCArIDFdIDw8IDg7Cj4gPj4+PiBA QCAtNDQ2LDcgKzQ2NSw3IEBAIHN0YXRpYyB2b2lkIG1lc29uX25mY19nZXRfdXNlcl9ieXRlKHN0 cnVjdCBuYW5kX2NoaXAgKm5hbmQsIHU4ICpvb2JfYnVmKQo+ID4+Pj4gIAlfX2xlNjQgKmluZm87 Cj4gPj4+PiAgCWludCBpLCBjb3VudDsKPiA+Pj4+ICAKPiA+Pj4+IC0JZm9yIChpID0gMCwgY291 bnQgPSAwOyBpIDwgbmFuZC0+ZWNjLnN0ZXBzOyBpKyssIGNvdW50ICs9IDIpIHsKPiA+Pj4+ICsJ Zm9yIChpID0gMCwgY291bnQgPSAwOyBpIDwgbmFuZC0+ZWNjLnN0ZXBzOyBpKyssIGNvdW50ICs9 IChuYW5kLT5lY2MuYnl0ZXMgKyAyKSkgewo+ID4+Pj4gIAkJaW5mbyA9ICZtZXNvbl9jaGlwLT5p bmZvX2J1ZltpXTsKPiA+Pj4+ICAJCW9vYl9idWZbY291bnRdID0gKmluZm87Cj4gPj4+PiAgCQlv b2JfYnVmW2NvdW50ICsgMV0gPSAqaW5mbyA+PiA4Owo+ID4+Pj4gQEAgLTYzOCw2ICs2NTcsODQg QEAgc3RhdGljIGludCBtZXNvbl9uZmNfcndfY21kX3ByZXBhcmVfYW5kX2V4ZWN1dGUoc3RydWN0 IG5hbmRfY2hpcCAqbmFuZCwKPiA+Pj4+ICAJcmV0dXJuIDA7Cj4gPj4+PiAgfQo+ID4+Pj4gIAo+ ID4+Pj4gK3N0YXRpYyB1MzIgbWVzb25fbmZjX29vYl9mcmVlX2J5dGVzKHN0cnVjdCBuYW5kX2No aXAgKm5hbmQpCj4gPj4+PiArewo+ID4+Pj4gKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5hbmRf dG9fbXRkKG5hbmQpOwo+ID4+Pj4gKwo+ID4+Pj4gKwlyZXR1cm4gbXRkLT5vb2JzaXplIC0gbmFu ZC0+ZWNjLnN0ZXBzICogKG5hbmQtPmVjYy5ieXRlcyArIDIpOyAgICAKPiA+Pj4KPiA+Pj4gVGhp cyBsb29rcyBsaWtlIGEgc3RhdGljIHZhbHVlLCBqdXN0IHNhdmUgaXQgc29tZXdoZXJlIGluc3Rl YWQgb2YKPiA+Pj4gcmVjb21wdXRpbmcgaXQ/ICAgIAo+ID4+Cj4gPj4gQWNrCj4gPj4gIAo+ID4+ PiAgICAgCj4gPj4+PiArfQo+ID4+Pj4gKwo+ID4+Pj4gK3N0YXRpYyBpbnQgbWVzb25fbmZjX3dy aXRlX29vYihzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLCBpbnQgcGFnZSkKPiA+Pj4+ICt7Cj4gPj4+ PiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQobmFuZCk7Cj4gPj4+PiArCXUz MiBwYWdlX3NpemUgPSBtdGQtPndyaXRlc2l6ZSArIG10ZC0+b29ic2l6ZTsKPiA+Pj4+ICsJdTMy IG9vYl9ieXRlcyA9IG1lc29uX25mY19vb2JfZnJlZV9ieXRlcyhuYW5kKTsKPiA+Pj4+ICsJdTgg Km9vYl9idWY7Cj4gPj4+PiArCWludCByZXQ7Cj4gPj4+PiArCj4gPj4+PiArCWlmICghb29iX2J5 dGVzKQo+ID4+Pj4gKwkJcmV0dXJuIDA7ICAgIAo+ID4+Pgo+ID4+PiBDYW4gdGhpcyBoYXBwZW4/ ICAgIAo+ID4+Cj4gPj4gQWNrLCBzZWVtcyBmb3JnZXQgdG8gcmVtb3ZlIGl0Cj4gPj4gIAo+ID4+ PiAgICAgCj4gPj4+PiArCj4gPj4+PiArCS8qIENhbGxlZCBhcyBPT0Igd3JpdGUgaGVscGVyLCB3 aWxsIHNlbmQgTkFORF9DTURfUEFHRVBST0cuICovCj4gPj4+PiArCWlmIChwYWdlICE9IC0xKSB7 Cj4gPj4+PiArCQlyZXQgPSBuYW5kX3Byb2dfcGFnZV9iZWdpbl9vcChuYW5kLCBwYWdlLCAwLCBO VUxMLCAwKTsKPiA+Pj4+ICsJCWlmIChyZXQpCj4gPj4+PiArCQkJcmV0dXJuIHJldDsKPiA+Pj4+ ICsJfQo+ID4+Pj4gKwo+ID4+Pj4gKwlvb2JfYnVmID0gbmFuZC0+b29iX3BvaTsKPiA+Pj4+ICsK PiA+Pj4+ICsJcmV0ID0gbmFuZF9jaGFuZ2Vfd3JpdGVfY29sdW1uX29wKG5hbmQsIHBhZ2Vfc2l6 ZSAtIG9vYl9ieXRlcywKPiA+Pj4+ICsJCQkJCSAgb29iX2J1ZiArIChtdGQtPm9vYnNpemUgLSBv b2JfYnl0ZXMpLAo+ID4+Pj4gKwkJCQkJICBvb2JfYnl0ZXMsIGZhbHNlKTsKPiA+Pj4+ICsJaWYg KHJldCkKPiA+Pj4+ICsJCXJldHVybiByZXQ7Cj4gPj4+PiArCj4gPj4+PiArCXJldHVybiAocGFn ZSAhPSAtMSkgPyBuYW5kX3Byb2dfcGFnZV9lbmRfb3AobmFuZCkgOiAwOwo+ID4+Pj4gK30KPiA+ Pj4+ICsKPiA+Pj4+ICtzdGF0aWMgaW50IG1lc29uX25mY19yZWFkX29vYihzdHJ1Y3QgbmFuZF9j aGlwICpuYW5kLCBpbnQgcGFnZSkKPiA+Pj4+ICt7Cj4gPj4+PiArCXN0cnVjdCBtdGRfaW5mbyAq bXRkID0gbmFuZF90b19tdGQobmFuZCk7Cj4gPj4+PiArCXU4ICpvb2JfYnVmID0gbmFuZC0+b29i X3BvaTsKPiA+Pj4+ICsJdTMyIG9vYl9ieXRlczsKPiA+Pj4+ICsJdTMyIHBhZ2Vfc2l6ZTsKPiA+ Pj4+ICsJaW50IHJldDsKPiA+Pj4+ICsJaW50IGk7Cj4gPj4+PiArCj4gPj4+PiArCS8qIENhbGxl ZCBhcyBPT0IgcmVhZCBoZWxwZXIsIHNlbmQgTkFORF9DTURfUkVBRDAuICovCj4gPj4+PiArCWlm IChwYWdlICE9IC0xKSB7ICAgIAo+ID4+Pgo+ID4+PiBJIGRvbid0IGxpa2UgdGhpcyBsb2dpYyB3 aXRoIHRoZSAiLTEiLCBpdCByZWFsbHkgaGlkZXMgd2hhdCB0aGUKPiA+Pj4gY29udHJvbGxlciBu ZWVkcyB0byBkbywgaWYgeW91IG5lZWQgYSBoZWxwZXIgdG8gc2VuZCBhIGNvbW1hbmQsIHRoZW4K PiA+Pj4gY3JlYXRlIHRoYXQgaGVscGVyIGFuZCBnaXZlIGl0IGEgZGVjZW50IG5hbWUuICAgIAo+ ID4+Cj4gPj4gSSBzZWUsIHNvIEkgdGhpbmsgSSBuZWVkIHRvIGltcGxlbWVudCB0aGlzIGluIHRo ZSBmb2xsb3dpbmcgd2F5Ogo+ID4+IDEpIEZvciBPT0IgY2FsbGJhY2sgaXQgYWx3YXlzIHNlbmRz IE5BTkRfQ01EX1JFQUQwIChlLmcuIHdpdGhvdXQgYW55ICdpZicpCj4gPj4gMikgRm9yIHJlYWQg T09CIHdpdGggZGF0YSBwYWdlIHdlIGRvbid0IG5lZWQgdG8gc2VuZCBOQU5EX0NNRF9SRUFEMC4g KGFsc28gd2l0aG91dCBhbnkgJ2lmJykKPiA+PiAgCj4gPj4+ICAgICAKPiA+Pj4+ICsJCXJldCA9 IG5hbmRfcmVhZF9wYWdlX29wKG5hbmQsIHBhZ2UsIDAsIE5VTEwsIDApOwo+ID4+Pj4gKwkJaWYg KHJldCkKPiA+Pj4+ICsJCQlyZXR1cm4gcmV0Owo+ID4+Pj4gKwl9Cj4gPj4+PiArCj4gPj4+PiAr CS8qIFJlYWQgRUNDIGNvZGVzIGFuZCB1c2VyIGJ5dGVzLiAqLwo+ID4+Pj4gKwlmb3IgKGkgPSAw OyBpIDwgbmFuZC0+ZWNjLnN0ZXBzOyBpKyspIHsKPiA+Pj4+ICsJCXUzMiBlY2Nfb2ZmcyA9IG5h bmQtPmVjYy5zaXplICogKGkgKyAxKSArCj4gPj4+PiArCQkJICAgICAgIChuYW5kLT5lY2MuYnl0 ZXMgKyAyKSAqIGk7Cj4gPj4+PiArCj4gPj4+PiArCQlyZXQgPSBuYW5kX2NoYW5nZV9yZWFkX2Nv bHVtbl9vcChuYW5kLCBlY2Nfb2ZmcywKPiA+Pj4+ICsJCQkJCQkgb29iX2J1ZiArIGkgKiAobmFu ZC0+ZWNjLmJ5dGVzICsgMiksCj4gPj4+PiArCQkJCQkJIChuYW5kLT5lY2MuYnl0ZXMgKyAyKSwg ZmFsc2UpOwo+ID4+Pj4gKwkJaWYgKHJldCkKPiA+Pj4+ICsJCQlyZXR1cm4gcmV0Owo+ID4+Pj4g Kwl9Cj4gPj4+PiArCj4gPj4+PiArCW9vYl9ieXRlcyA9IG1lc29uX25mY19vb2JfZnJlZV9ieXRl cyhuYW5kKTsKPiA+Pj4+ICsKPiA+Pj4+ICsJaWYgKCFvb2JfYnl0ZXMpCj4gPj4+PiArCQlyZXR1 cm4gMDsKPiA+Pj4+ICsKPiA+Pj4+ICsJcGFnZV9zaXplID0gbXRkLT53cml0ZXNpemUgKyBtdGQt Pm9vYnNpemU7Cj4gPj4+PiArCj4gPj4+PiArCXJldCA9IG5hbmRfY2hhbmdlX3JlYWRfY29sdW1u X29wKG5hbmQsIHBhZ2Vfc2l6ZSAtIG9vYl9ieXRlcywKPiA+Pj4+ICsJCQkJCSBvb2JfYnVmICsg KG10ZC0+b29ic2l6ZSAtIG9vYl9ieXRlcyksCj4gPj4+PiArCQkJCQkgb29iX2J5dGVzLCBmYWxz ZSk7Cj4gPj4+PiArCj4gPj4+PiArCXJldHVybiByZXQ7Cj4gPj4+PiArfQo+ID4+Pj4gKwo+ID4+ Pj4gIHN0YXRpYyBpbnQgbWVzb25fbmZjX3dyaXRlX3BhZ2Vfc3ViKHN0cnVjdCBuYW5kX2NoaXAg Km5hbmQsCj4gPj4+PiAgCQkJCSAgICBpbnQgcGFnZSwgaW50IHJhdykKPiA+Pj4+ICB7Cj4gPj4+ PiBAQCAtNjc0LDYgKzc3MSwxMiBAQCBzdGF0aWMgaW50IG1lc29uX25mY193cml0ZV9wYWdlX3N1 YihzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLAo+ID4+Pj4gIAkJCQkgICAgIE5GQ19DTURfU0NSQU1C TEVSX0RJU0FCTEUpOwo+ID4+Pj4gIAl9Cj4gPj4+PiAgCj4gPj4+PiArCWlmICghcmF3KSB7ICAg IAo+ID4+Pgo+ID4+PiBXaHkgdGhpcyBjaGVjaz8KPiA+Pj4KPiA+Pj4gWW91IHNob3VsZCBpbnN0 ZWFkIHByb3BhZ2F0ZSB0aGUgb29iX3JlcXVpcmVkIGZpZWxkIGFuZCBjaGVjayB0aGF0Cj4gPj4+ IHZhbHVlIEkgYmVsaWV2ZS4gICAgCj4gPj4KPiA+Pgo+ID4+IFRoaXMgY2hlY2sgaXMgZm9yIEVD QyBtb2RlLCBiZWNhdXNlIGluIHRoaXMgbW9kZSB3ZSB3cml0ZSB1c2VyIGJ5dGVzIG9mIE9PQi4K PiA+PiBFQ0MgYnl0ZXMgb2YgT09CIGFyZSB3cml0dGVuIGJ5IGhhcmR3YXJlLiAgCj4gPiAKPiA+ IEp1c3QgcHJvdmlkZSB0aGUgYnVmZmVyLiBUaGUgRUNDIGVuZ2luZSB3aWxsIHNtYXNoIGRhdGEg aWYgdGhlcmUgd2FzCj4gPiBhbnkgdGhlcmUuIE90aGVyd2lzZSBpdCB3aWxsIGZpbGwgdGhlIGhv bGVzLiBJdCdzIGV4cGVjdGVkLiBEb24ndCB0cnkKPiA+IHRvIGJlIHNtYXJ0ZXIgdGhhbiB5b3Ug c2hvdWxkIDopCj4gPiAgIAo+ID4+IEkgdGhpbmsgSSBtYWRlIGEgbWlzdGFrZSwgYmVjYXVzZQo+ ID4+IEkgbmVlZCBuZXcgY2FsbGJhY2sgdG8gd3JpdGUgT09CIGluIHJhdyBtb2RlIC0gaXQgd2ls bCB3cml0ZSBib3RoIEVDQyBhbmQgdXNlcgo+ID4+IHBhcnRzLCAgCj4gPiAKPiA+IFRoZXJlIGlz IG5vIHN1Y2ggdGhpbmcgYXMgdXNlciBhbmQgRUNDIHBhcnQgYXQgdGhlIGRyaXZlciBsZXZlbC4g WW91Cj4gPiBnZXQgYSBidWZmZXIsIHlvdSBuZWVkIHRvIHdyaXRlIGl0IHRvIHRoZSBmbGFzaC4K PiA+IAo+ID4gVGhlIHVzZXIgZXhwZWN0czoKPiA+IAo+ID4gfCBkYXRhIHwgT09CIHwKPiA+IAo+ ID4gVGhlIGNvbnRyb2xsZXIgZXhwZWN0cyBzb21ldGhpbmcgbGlrZToKPiA+IAo+ID4gfCBkYXRh MSB8IE9PQjEgfCBkYXRhMiB8IE9PQjIgfAo+ID4gCj4gPiBTbyBqdXN0IHBlcmZvcm0gdGhlIHJl b3JkZXJpbmcgYmV0d2VlbiBkYXRhIGFuZCBPT0IgaW4gdGhlIERNQSBidWZmZXIsCj4gPiB0aGF0 IGlzIF9hbGxfLgo+ID4gICAKPiA+PiBpbiBjdXJyZW50IHZlcnNpb24gSSB3cml0ZSBvbmx5IHVz ZXIgcGFydCBpbiByYXcgbW9kZS4KPiA+PiAgCj4gPj4+ICAgICAKPiA+Pj4+ICsJCXJldCA9IG1l c29uX25mY193cml0ZV9vb2IobmFuZCwgLTEpOwo+ID4+Pj4gKwkJaWYgKHJldCkKPiA+Pj4+ICsJ CQlyZXR1cm4gcmV0Owo+ID4+Pj4gKwl9Cj4gPj4+PiArCj4gPj4+PiAgCWNtZCA9IG5mYy0+cGFy YW0uY2hpcF9zZWxlY3QgfCBORkNfQ01EX0NMRSB8IE5BTkRfQ01EX1BBR0VQUk9HOwo+ID4+Pj4g IAl3cml0ZWwoY21kLCBuZmMtPnJlZ19iYXNlICsgTkZDX1JFR19DTUQpOwo+ID4+Pj4gIAltZXNv bl9uZmNfcXVldWVfcmIobmFuZCwgUFNFQ19UT19NU0VDKHNkci0+dFBST0dfbWF4KSk7Cj4gPj4+ PiBAQCAtODM0LDE3ICs5MzcsMTAgQEAgc3RhdGljIGludCBtZXNvbl9uZmNfcmVhZF9wYWdlX2h3 ZWNjKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsIHU4ICpidWYsCj4gPj4+PiAgCQltZW1jcHkoYnVm LCBtZXNvbl9jaGlwLT5kYXRhX2J1ZiwgbXRkLT53cml0ZXNpemUpOwo+ID4+Pj4gIAl9Cj4gPj4+ PiAgCj4gPj4+PiAtCXJldHVybiBiaXRmbGlwczsKPiA+Pj4+IC19Cj4gPj4+PiAtCj4gPj4+PiAt c3RhdGljIGludCBtZXNvbl9uZmNfcmVhZF9vb2JfcmF3KHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQs IGludCBwYWdlKQo+ID4+Pj4gLXsKPiA+Pj4+IC0JcmV0dXJuIG1lc29uX25mY19yZWFkX3BhZ2Vf cmF3KG5hbmQsIE5VTEwsIDEsIHBhZ2UpOwo+ID4+Pj4gLX0KPiA+Pj4+ICsJaWYgKG9vYl9yZXF1 aXJlZCAmJiByZXQpICAgIAo+ID4+Pgo+ID4+PiBVbmNsZWFyIHdoeSB5b3UgY2hlY2sgcmV0IGhl cmU/ICAKPiA+IAo+ID4gSW4gZ2VuZXJhbCwgaWYgKHJldCkgbWVhbnMgdGhlcmUgaXMgYW4gZXJy b3IuCj4gPiAKPiA+IFBsZWFzZSBjb25zaWRlciB1c2luZzoKPiA+IAo+ID4gaWYgKHJldCkKPiA+ IAlnb3RvIGVycm9yIHBhdGg7Cj4gPiAKPiA+IGRvIHNvbWV0aGluZyBlbHNlOwo+ID4gICAKPiA+ Pj4gICAgIAo+ID4+Cj4gPj4gSWYgcmVhZCB3YXMgc3VjY2Vzc2Z1bCwgd2UgcmVhZCBPT0IuIElm IG5vdCAtIHRoZXJlIGlzIG5vIHNlbnNlIGluIGl0Lgo+ID4+ICAKPiA+Pj4+ICsJCW1lc29uX25m Y19yZWFkX29vYihuYW5kLCAtMSk7Cj4gPj4+PiAgCj4gPj4+PiAtc3RhdGljIGludCBtZXNvbl9u ZmNfcmVhZF9vb2Ioc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgaW50IHBhZ2UpCj4gPj4+PiAtewo+ ID4+Pj4gLQlyZXR1cm4gbWVzb25fbmZjX3JlYWRfcGFnZV9od2VjYyhuYW5kLCBOVUxMLCAxLCBw YWdlKTsKPiA+Pj4+ICsJcmV0dXJuIGJpdGZsaXBzOwo+ID4+Pj4gIH0KPiA+Pj4+ICAKPiA+Pj4+ ICBzdGF0aWMgYm9vbCBtZXNvbl9uZmNfaXNfYnVmZmVyX2RtYV9zYWZlKGNvbnN0IHZvaWQgKmJ1 ZmZlcikKPiA+Pj4+IEBAIC05ODcsMTIgKzEwODMsMTYgQEAgc3RhdGljIGludCBtZXNvbl9vb2Js YXlvdXRfZnJlZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHNlY3Rpb24sCj4gPj4+PiAgCQkJ CXN0cnVjdCBtdGRfb29iX3JlZ2lvbiAqb29icmVnaW9uKQo+ID4+Pj4gIHsKPiA+Pj4+ICAJc3Ry dWN0IG5hbmRfY2hpcCAqbmFuZCA9IG10ZF90b19uYW5kKG10ZCk7Cj4gPj4+PiArCXUzMiBvb2Jf Ynl0ZXMgPSBtZXNvbl9uZmNfb29iX2ZyZWVfYnl0ZXMobmFuZCk7Cj4gPj4+PiAgCj4gPj4+PiAg CWlmIChzZWN0aW9uID49IG5hbmQtPmVjYy5zdGVwcykKPiA+Pj4+ICAJCXJldHVybiAtRVJBTkdF Owo+ID4+Pj4gIAo+ID4+Pj4gLQlvb2JyZWdpb24tPm9mZnNldCA9IHNlY3Rpb24gKiAoMiArIG5h bmQtPmVjYy5ieXRlcyk7ICAgIAo+ID4+Pgo+ID4+PiBUaGUgZmlyc3QgdHdvIGJ5dGVzIG9mIE9P QiBhcmUgcmVzZXJ2ZWQgZm9yIHRoZSBiYWQgYmxvY2sgbWFya2Vycy4gVGhpcwo+ID4+PiBpcyBu b3QgcmVsYXRlZCB0byB5b3VyIGNvbnRyb2xsZXIuICAgIAo+ID4+Cj4gPj4gSSB0aGluayBmaXJz dCB0d28gYnl0ZXMgKGluIGZhY3QgdGhlcmUgYXJlIDQgYnl0ZXMgYXQgcG9zaXRpb25zIDAsIDEs IDE2IGFuZCAxNykKPiA+PiBpcyBjb25zaWRlcmVkIGJ5IGhhcmR3YXJlIGFzIHVzZXIgYnl0ZXMg Y292ZXJlZCBieSBFQ0MuICAKPiA+IAo+ID4gVGhlIHR3byBmaXJzdCBieXRlcyBzaG91bGQgbm90 IGJlIGF2YWlsYWJsZS4gVGhleSBhcmUgbm90ICJFQ0MiIGJ5dGVzLAo+ID4gdGhleSBhcmUgbm90 ICJmcmVlIiBieXRlcy4gTm9uZSBvZiB0aGVzZSB0d28gY2FsbGJhY2tzIHNob3VsZCBnaXZlCj4g PiBhY2Nlc3MgdG8gdGhlc2UgdHdvIGJ5dGVzIHJlc2VydmVkIGZvciBiYWQgYmxvY2sgbWFya2Vy cy4KPiA+IAo+ID4gSnVzdCB0byBiZSBjbGVhcjogIkVDQyBieXRlcyIgYXMgaW4gIm1lc29uX29v YmxheW91dF9lY2MiIGRvICpub3QqIG1lYW4KPiA+ICJ0aGVzZSBhcmUgdGhlIHByb3RlY3RlZCBi eXRlcyIuIFRoZXkgbWVhbiAidGhlc2UgYXJlIHRoZSBieXRlcyBpbiBPT0IKPiA+IHRoZSBoYXJk d2FyZSBFQ0MgZW5naW5lIHdpbGwgdXNlIHRvIHBsYWNlIGl0cyBvd24gZGF0YSB0byBtYWtlIHRo ZQo+ID4gcmVjb3ZlcnkgcHJvY2VzcyB3b3JrIi4KPiA+IAo+ID4gVGhhbmtzLAo+ID4gTWlxdcOo bCAgCgoKVGhhbmtzLApNaXF1w6hsCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KTGludXggTVREIGRpc2N1c3Npb24gbWFpbGluZyBsaXN0Cmh0 dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtbXRkLwo= 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 8F4F6C7EE2A for ; Tue, 6 Jun 2023 07:11:49 +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=RTVcmluvc3ayA2k6MFYhrVtpwrOLsICyOjPPlCu53vw=; b=VEGlOU+HaPrzCN 4Oe8zB8HnV/WVsMOrp3+v+6BKd43gF6jTBVLG7G8Ekkk4KPDaHCugTKO7bcR3ddHobkctqITvPTp8 OyFgIaVItXwY9p02bLcfCnVpvyt2sVXYcy+t7PWPvzcrx+KUwm//LOihbfn4QvVi/o260Mfz3iUMW XfiMBAbF2Ing7nw0qUzt1qDBXL7xeBMCqqOGfSN/qMx7FYpQJPdJYL1nCWTFD61qhuhyPoHijPGgs jAX+jCeS+fV3hqPz7TTWzRIIlvk+R1A1I0iNMtZEyIeTkJq+K9PyB7woJzthXXLr3DBpS08jWNZfr rLUjyw4LzAbcQXi90k7g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1q6Qqg-000UCl-2B; Tue, 06 Jun 2023 07:11:22 +0000 Received: from relay1-d.mail.gandi.net ([2001:4b98:dc4:8::221]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1q6Qqb-000UAA-2Y; Tue, 06 Jun 2023 07:11:20 +0000 X-GND-Sasl: miquel.raynal@bootlin.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1686035471; 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=rFJmCcMrQ4DjHJjPGf914EBlWwvSR6LF8KLemTrPksU=; b=naaUZgc6f6dgY5UzpsA9KAQODJUQtw2fskLovj217gC8HaaeSwzxtIe+/DXyDkUgNxDSmM rAQ2xwRU3vmdnqnaZGX1chK7I/3lD2c2laZ/3azlYOSEWKczGLvi9RN1mbOcIm4qZxBklN yOYGe4H6a5XgSj/2mzgcQ+dvpcJpEMRtVEisRQjbowY/DDuZfWYkieuMmjOayZkv1ESuuZ Hk42JbB5OqWoRlFaAmCl+pcQIkRru/HCi8fufkllxjsbtV/5YMZLxQt7loMIMeFYocG1iC /RkRk7MVgVEkZUZv3zQdiwdl8jh4ebm8wdrcuRjTMcoJAz5ltiVIYSXJ6mLA8Q== 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 755CF240004; Tue, 6 Jun 2023 07:11:09 +0000 (UTC) Date: Tue, 6 Jun 2023 09:11:07 +0200 From: Miquel Raynal To: Arseniy Krasnov Cc: Liang Yang , Richard Weinberger , Vignesh Raghavendra , Neil Armstrong , Kevin Hilman , Jerome Brunet , Martin Blumenstingl , , , , , , Subject: Re: [RFC PATCH v5 3/6] mtd: rawnand: meson: only expose unprotected user OOB bytes Message-ID: <20230606091107.78c792ff@xps-13> In-Reply-To: <53f31185-70d9-7264-a99a-cf71f8fc52eb@sberdevices.ru> References: <20230601061850.3907800-1-AVKrasnov@sberdevices.ru> <20230601061850.3907800-4-AVKrasnov@sberdevices.ru> <20230601103111.6840acc0@xps-13> <8242530c-7b6b-29ce-581b-c5644a965b60@sberdevices.ru> <20230605114850.77cf9197@xps-13> <53f31185-70d9-7264-a99a-cf71f8fc52eb@sberdevices.ru> 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-20230606_001118_157735_C3CDB89E X-CRM114-Status: GOOD ( 61.94 ) 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 SGkgQXJzZW5peSwKCmF2a3Jhc25vdkBzYmVyZGV2aWNlcy5ydSB3cm90ZSBvbiBUdWUsIDYgSnVu IDIwMjMgMDc6NDI6NTggKzAzMDA6Cgo+IE9uIDA1LjA2LjIwMjMgMTI6NDgsIE1pcXVlbCBSYXlu YWwgd3JvdGU6Cj4gPiBIaSBBcnNlbml5LAo+ID4gCj4gPiBhdmtyYXNub3ZAc2JlcmRldmljZXMu cnUgd3JvdGUgb24gRnJpLCAyIEp1biAyMDIzIDExOjUzOjQ3ICswMzAwOgo+ID4gICAKPiA+PiBI ZWxsbyBNaXF1ZWwsIHRoYW5rcyBmb3IgcmV2aWV3IQo+ID4+Cj4gPj4gT24gMDEuMDYuMjAyMyAx MTozMSwgTWlxdWVsIFJheW5hbCB3cm90ZTogIAo+ID4+PiBIaSBBcnNlbml5LAo+ID4+Pgo+ID4+ PiBBVktyYXNub3ZAc2JlcmRldmljZXMucnUgd3JvdGUgb24gVGh1LCAxIEp1biAyMDIzIDA5OjE4 OjQ2ICswMzAwOgo+ID4+PiAgICAgCj4gPj4+PiBUaGlzIG1vdmVzIGZyZWUgYnl0ZXMgb2YgT09C IHRvIG5vbi1wcm90ZWN0ZWQgRUNDIGFyZWEuIEl0IGlzIG5lZWRlZCB0byAgICAKPiA+Pj4KPiA+ Pj4gQXMgd2UgZGlzY3Vzc2VkLCBJIGV4cGVjdCB0aGlzIGNvbW1pdCB0byBqdXN0IGNoYW5nZSB0 aGUgT09CIGxheW91dCB0bwo+ID4+PiBleHBvc2UgdW5wcm90ZWN0ZWQgT09CIGJ5dGVzIHRvIHRo ZSB1c2VyLCB0aGF0IGlzIHRoZSBvbmx5IGNoYW5nZSB0aGlzCj4gPj4+IGNvbW1pdCBzaG91bGQg Y2FycnkuIElmIHRoYXQgZG9lcyBub3Qgd29yaywgeW91IHNob3VsZCBhZGQgYQo+ID4+PiBwcmVw YXJhdGlvbiBwYXRjaC4gICAgCj4gPj4KPiA+PiBPaywgYnV0IEkgdGhvdWdodCwgaWYgaSBjaGFu Z2Ugb25seSBPT0IgbGF5b3V0LCBlLmcuIHVwZGF0ZSAnZnJlZScgY2FsbGJhY2sgb2YKPiA+PiBt dGRfb29ibGF5b3V0X29wcywgSSBhbHNvIG5lZWQgdG8gaW1wbGVtZW50IGNvZGUgd2hpY2ggcGVy Zm9ybXMgcmVhZC93cml0ZQo+ID4+IGFjY29yZGluZyBuZXcgbGF5b3V0IChpdCBtdXN0IGJlIGRv bmUgaW4gYSBzaW5nbGUgcGF0Y2gpPyAgCj4gPiAKPiA+IE5vLCB0aGlzIGlzIG9ydGhvZ29uYWwu Cj4gPiAKPiA+IFRoZSBkcml2ZXIgbXVzdCByZWFkIHRoZSB0aGUgd2hvbGUgT09CIGFyZWEgKGFu ZCBwZXJoYXBzIHJlb3JkZXIgdGhlCj4gPiBkYXRhKSwgYnV0IHlvdSBzaG91bGQgbm90IG1ha2Ug YW55IGRlY2lzaW9uIHJlZ2FyZGluZyB3aGF0IGJ5dGVzIHlvdQo+ID4gd2FudCBvciBub3Qgd2Fu dCB0byBleHBvc2UuCj4gPiAKPiA+IFRoZW4sIHRoZSB1c2VyIChubyBtYXR0ZXIgd2hhdCAidXNl ciIgaXMgaGVyZSkgd2lsbCBkZWNpZGUgaG93IHRvIGRlYWwKPiA+IHdpdGggdGhlIGRhdGEuICAK PiAKPiBIZWxsbyBNaXF1ZWwhCj4gCj4gT2ssIHNvIGluIGNhc2Ugb2Y6Cj4gMSkgcmVhZCBJIGp1 c3QgbmVlZCB0byByZWFkIE9PQiBkYXRhIHVzaW5nICduYW5kX2NoYW5nZV9yZWFkX2NvbHVtbl9v cCgpJyBhbmQgcGxhY2UgaXQgdG8gJ29vYl9idWYnLgo+IDIpIHdyaXRlIEkgbmVlZCB0byB3cml0 ZSBPT0IgZGF0YSB1c2luZyAnbmFuZF9jaGFuZ2Vfd3JpdGVfY29sdW1uX29wKCknIHRvIGNvbnRy b2xsZXIgaW50ZXJuYWwgUkFNIGFuZCB0aGVuIGNhbGwgUEFHRV9QUk9HLgo+ICAgIEV2ZW4gaW4g RUNDIG1vZGUsIGRhdGEgd2hpY2ggb2NjdXBpZXMgcGxhY2VzIG9mIEVDQyBjb2RlcyB3aWxsIGJl IHJlbW92ZWQgYnkgaHcgKCBhcyBZb3UgbWVudGlub2VkIGJlbG93KS4KPiAKPiBUaGF0J3MgYWxs PzopCgpTb3VuZHMgcmlnaHQgOikKCklmIHlvdSBmaW5kIHRvbyBjb3N0bHkgdG8gbWFrZSBtYW55 IG5hbmRfY2hhbmdlX3JlYWRfY29sdW1uX29wKCkgYW5kCndhbnQgdG8gbGV2ZXJhZ2UgRE1BIGlu c3RlYWQsIHlvdSBjYW4gYXMgd2VsbCByZWFkIGV2ZXJ5dGhpbmcKKGRhdGErb29iKSBpbiBvbmUg Z28gaW4gYSBib3VuY2UgYnVmZmVyIGFuZCB0aGVuIHBlcmZvcm0gbWVtY3B5J3MgaW50bwp5b3Vy IGZpbmFsIGJ1ZmZlciBpbiBvcmRlciB0byByZW9yZ2FuaXplIHRoZSBkYXRhLiBUaGF0J3MgZW50 aXJlbHkgdXAgdG8KeW91IChhbmQgc2FtZSBvZiBjb3Vyc2UgaW4gdGhlIHdyaXRlIHBhdGgsIHlv dSBjb3VsZCBmaXJzdAptZW1jcHkvcmVvcmRlciB0aGUgZGF0YSBpbnRvIGEgRE1BIGJvdW5jZSBi dWZmZXIgbG9jYWxseSwgYW5kIHRoZW4gc2VuZAphbGwgdGhlIGRhdGEgaW4gYSBzaW5nbGUgRE1B IHRyYW5zZmVyIGFuZCBjYWxsIFBBR0VfUFJPRykuCgo+IAo+ID4gICAKPiA+PiBNYWluIHRoaW5n IGlzOgo+ID4+Cj4gPj4gSSBndWVzcyB0aGF0IGdlbmVyYWwgY29uZnVzZSB3aXRoIHRoaXMgcGF0 Y2ggaXMgdGhhdCBZb3UgY29uc2lkZXIKPiA+PiB0aGF0IHdlIGNoYW5nZSBvbmx5IE9PQiBsYXlv dXQgYnkgbW92aW5nIHVzZXIgYnl0ZXMgb3V0IG9mIEVDQyBhcmVhLCBidXQgYXQgdGhlIHNhbWUK PiA+PiB0aW1lIEkgYWxzbyBpbmNyZWFzZWQgc2l6ZSBvZiBPT0IgZnJvbSA0IGJ5dGVzIChlLmcu IDIgeCAyIGJ5dGVzIGNsZWFuIG1hcmtlcnMpCj4gPj4gdG8gMzIgYnl0ZXMgKGUuZy4gdGFpbCBv ZiBwYWdlIGFmdGVyIGRhdGEgYW5kIEVDQyBjb2RlcyksIHNvIGlmIHRoaXMKPiA+PiBhc3N1bXB0 aW9uIGlzIGNvcnJlY3QsIGluIHRoZSBuZXh0IHZlcnNpb24gSSB3b24ndCBjaGFuZ2Ugc2l6ZSBv ZiB1c2VyIGFyZWEgaW4KPiA+PiBPT0IsIHRodXMgdGhpcyBwYXRjaCB3aWxsIGJlIHJlZHVjZWQg YXMgc29tZSBjb21tZW50cyBmcm9tIHRoaXMgcmV2aWV3LiAgCj4gPiAKPiA+IEV4cG9zaW5nIG9u bHkgNCBieXRlcyB3YXMgYSBtaXN0YWtlIGluIHRoZSBmaXJzdCBwbGFjZSwgcGxlYXNlIGZpeCB0 aGlzCj4gPiBpbiBhIGRlZGljYXRlZCBwYXRjaC4gIAo+IAo+IFNvIGN1cnJlbnQgKG5vdCBtZXJn ZWQpIHZlcnNpb24gZXhwb3NlcyBieXRlcyAwLDEsMTYsMTcgb2YgT09CLCBZb3UgbWVhbiB0aGlz IGlzIHdyb25nPwo+IENvcnJlY3Qgd2F5IGlzIHRvIGV4cG9zZSAzMiwzMyw0OCw0OSAoZS5nLiBz aGlmdGVkIGJ5IDMyKT8KPiAKPiBUaGFua3MsIEFyc2VuaXkKPiAKPiA+ICAgCj4gPj4+PiBtYWtl IEpGRlMyIHdvcmtzIGNvcnJlY3RseSB3aXRoIHRoaXMgTkFORCBjb250cm9sbGVyLiBQcm9ibGVt IGZpcmVzIHdoZW4KPiA+Pj4+IEpGRlMyIGRyaXZlciB3cml0ZXMgY2xlYW5tYXJrZXIgdG8gc29t ZSBwYWdlIGFuZCBsYXRlciBpdCB0cmllcyB0byB3cml0ZQo+ID4+Pj4gdG8gdGhpcyBwYWdlIC0g d3JpdGUgd2lsbCBiZSBkb25lIHN1Y2Nlc3NmdWxseSwgYnV0IGFmdGVyIHRoYXQgc3VjaCBwYWdl Cj4gPj4+PiBiZWNvbWVzIHVucmVhZGFibGUgZHVlIHRvIGludmFsaWQgRUNDIGNvZGVzLiBUaGlz IGhhcHBlbnMgYmVjYXVzZSBzZWNvbmQKPiA+Pj4+IHdyaXRlIG5lZWRzIHRvIHVwZGF0ZSBFQ0Mg Y29kZXMsIGJ1dCBpdCBpcyBpbXBvc3NpYmxlIHRvIGRvIGl0IGNvcnJlY3RseQo+ID4+Pj4gd2l0 aG91dCBibG9jayBlcmFzZS4gU28gaWRlYSBvZiB0aGlzIHBhdGNoIGlzIHRvIHVzZSB0aGUgdW5w cm90ZWN0ZWQgT09CCj4gPj4+PiBhcmVhIHRvIHN0b3JlIHRoZSBjbGVhbm1hcmtlcnMsIHNvIHRo YXQgdGhleSBjYW4gYmUgd3JpdHRlbiBieSB0aGUKPiA+Pj4+IGZpbGVzeXN0ZW0gd2l0aG91dCBj YXJpbmcgbXVjaCBhYm91dCB0aGUgcGFnZSBiZWluZyBlbXB0eSBvciBub3Q6IHRoZQo+ID4+Pj4g RUNDIGNvZGVzIHdpbGwgbm90IGJlIHdyaXR0ZW4gYW55d2F5Lgo+ID4+Pj4KPiA+Pj4+IEpGRlMy IGlzIG9ubHkgdXNlZnVsIG9uIHRpbnkgTkFORCBkZXZpY2VzLCB3aGVyZSBVQkkgZG9lcyBub3Qg Zml0LCB3aGljaAo+ID4+Pj4gYXJlIHVzdWFsbHkgdHJ1ZSBTTEMgZmxhc2hlcywgd2l0aCB0aGUg Y2FwYWJpbGl0eSBvZiB3cml0aW5nIGEgcGFnZSB3aXRoCj4gPj4+PiBlbXB0eSAoMHhGRikgZGF0 YSwgYW5kIHN0aWxsIGJlIGFibGUgdG8gd3JpdGUgYWN0dWFsIGRhdGEgdG8gaXQgbGF0ZXIgaW4K PiA+Pj4+IGEgc2Vjb25kIHdyaXRlLgo+ID4+Pj4KPiA+Pj4+IFNpZ25lZC1vZmYtYnk6IEFyc2Vu aXkgS3Jhc25vdiA8QVZLcmFzbm92QHNiZXJkZXZpY2VzLnJ1Pgo+ID4+Pj4gLS0tCj4gPj4+PiAg Q2hhbmdlbG9nIHY0LT52NToKPiA+Pj4+ICAqIERyb3AgY29zbWV0aWMgY2hhbmdlcyBmcm9tIHRo aXMgcGF0Y2guCj4gPj4+PiAgKiBEbyBub3QgaWdub3JlIEVDQyBwcm90ZWN0ZWQgdXNlciBieXRl cyBwcm92aWRlZCBieSBody4gRXZlbiB0aGVzZQo+ID4+Pj4gICAgYnl0ZXMgYXJlIG91dCBvZiB1 c2VyIGFyZWEgb2YgT09CLCBpdHMgdmFsdWVzIGFyZSBzdGlsbCByZWFkIGZyb20KPiA+Pj4+ICAg IHRoZSBwcm92aWRlZCBPT0IgYnVmZmVyIGFuZCB3cml0dGVuIGJ5IGhhcmR3YXJlLiBTYW1lIGJl aGF2aW91ciBpcwo+ID4+Pj4gICAgcHJlc2VydmVkIGZvciByZWFkIGFjY2VzcyAtIHN1Y2ggYnl0 ZXMgYXJlIHJlYWQgZnJvbSBETUEgYnVmZmVyIGFuZAo+ID4+Pj4gICAgcGxhY2VkIHRvIE9PQiBi dWZmZXIuCj4gPj4+PiAgKiBPT0IgcmVhZCBhbmQgd3JpdGUgYmVjb21lIG1vcmUgbGlnaHR3ZWln aHQgYmVjYXVzZSBJIHJlbW92ZWQgaGVhdnkKPiA+Pj4+ICAgIFJFQUQwIGFuZCBQQUdFUFJPRyBj b21tYW5kIGZyb20gaXQgKGJvdGggY29tbWFuZHMgYXJlIHN0aWxsIHNlbnQKPiA+Pj4+ICAgIHdo ZW4gT09CIGFjY2VzcyBpcyBwZXJmb3JtZWQgdXNpbmcgT09CIGNhbGxiYWNrcykuIEluIGNhc2Ug b2YgcGFnZQo+ID4+Pj4gICAgcmVhZC93cml0ZSBPT0IgZGF0YSBpcyBoYW5kbGVkIGluIHRoZSBp bnRlcm5hbCBTUkFNIG9mIHRoZSBjb250cm9sbGVyLgo+ID4+Pj4gICogQ29tbWl0IG1lc3NhZ2Ug dXBkYXRlZC4KPiA+Pj4+ICAqIFRlbXBvcmFyeSBidWZmZXIgZm9yIE9PQiByZWFkL3dyaXRlIGlz IHJlbW92ZWQuIFNlZW1zIGV2ZXJ5dGhpbmcKPiA+Pj4+ICAgIHdvcmtzIGNvcnJlY3RseSB3aXRo b3V0IGl0Lgo+ID4+Pj4KPiA+Pj4+ICBkcml2ZXJzL210ZC9uYW5kL3Jhdy9tZXNvbl9uYW5kLmMg fCAxMzQgKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tCj4gPj4+PiAgMSBmaWxlIGNoYW5n ZWQsIDExNyBpbnNlcnRpb25zKCspLCAxNyBkZWxldGlvbnMoLSkKPiA+Pj4+Cj4gPj4+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9yYXcvbWVzb25fbmFuZC5jIGIvZHJpdmVycy9tdGQv bmFuZC9yYXcvbWVzb25fbmFuZC5jCj4gPj4+PiBpbmRleCA4MmE2MjkwMjVhZGMuLmU0MmMyOGJl MDJmMyAxMDA2NDQKPiA+Pj4+IC0tLSBhL2RyaXZlcnMvbXRkL25hbmQvcmF3L21lc29uX25hbmQu Ywo+ID4+Pj4gKysrIGIvZHJpdmVycy9tdGQvbmFuZC9yYXcvbWVzb25fbmFuZC5jCj4gPj4+PiBA QCAtMzU4LDggKzM1OCwxMSBAQCBzdGF0aWMgdTggKm1lc29uX25mY19kYXRhX3B0cihzdHJ1Y3Qg bmFuZF9jaGlwICpuYW5kLCBpbnQgaSkKPiA+Pj4+ICBzdGF0aWMgdm9pZCBtZXNvbl9uZmNfZ2V0 X2RhdGFfb29iKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsCj4gPj4+PiAgCQkJCSAgIHU4ICpidWYs IHU4ICpvb2JidWYpCj4gPj4+PiAgewo+ID4+Pj4gKwlzdHJ1Y3QgbWVzb25fbmZjX25hbmRfY2hp cCAqbWVzb25fY2hpcCA9IHRvX21lc29uX25hbmQobmFuZCk7Cj4gPj4+PiArCXN0cnVjdCBtdGRf aW5mbyAqbXRkID0gbmFuZF90b19tdGQobmFuZCk7Cj4gPj4+PiAgCWludCBpLCBvb2JfbGVuID0g MDsKPiA+Pj4+ICAJdTggKmRzcmMsICpvc3JjOwo+ID4+Pj4gKwl1OCAqb29idGFpbDsKPiA+Pj4+ ICAKPiA+Pj4+ICAJb29iX2xlbiA9IG5hbmQtPmVjYy5ieXRlcyArIDI7Cj4gPj4+PiAgCWZvciAo aSA9IDA7IGkgPCBuYW5kLT5lY2Muc3RlcHM7IGkrKykgewo+ID4+Pj4gQEAgLTM2OCwxNyArMzcx LDI3IEBAIHN0YXRpYyB2b2lkIG1lc29uX25mY19nZXRfZGF0YV9vb2Ioc3RydWN0IG5hbmRfY2hp cCAqbmFuZCwKPiA+Pj4+ICAJCQltZW1jcHkoYnVmLCBkc3JjLCBuYW5kLT5lY2Muc2l6ZSk7Cj4g Pj4+PiAgCQkJYnVmICs9IG5hbmQtPmVjYy5zaXplOwo+ID4+Pj4gIAkJfQo+ID4+Pj4gKwo+ID4+ Pj4gIAkJb3NyYyA9IG1lc29uX25mY19vb2JfcHRyKG5hbmQsIGkpOwo+ID4+Pj4gIAkJbWVtY3B5 KG9vYmJ1Ziwgb3NyYywgb29iX2xlbik7Cj4gPj4+PiAgCQlvb2JidWYgKz0gb29iX2xlbjsKPiA+ Pj4+ICAJfQo+ID4+Pj4gKwo+ID4+Pj4gKwlvb2J0YWlsID0gbWVzb25fY2hpcC0+ZGF0YV9idWYg KyBuYW5kLT5lY2Muc3RlcHMgKgo+ID4+Pj4gKwkJICAobmFuZC0+ZWNjLnNpemUgKyBvb2JfbGVu KTsKPiA+Pj4+ICsKPiA+Pj4+ICsJLyogJ29vYmJ1ZicgcG9pbnRzIHRvIHRoZSBzdGFydCBvZiB1 c2VyIGFyZWEuICovCj4gPj4+PiArCW1lbWNweShvb2JidWYsIG9vYnRhaWwsIG10ZC0+b29ic2l6 ZSAtIG5hbmQtPmVjYy5zdGVwcyAqIG9vYl9sZW4pOwo+ID4+Pj4gIH0KPiA+Pj4+ICAKPiA+Pj4+ ICBzdGF0aWMgdm9pZCBtZXNvbl9uZmNfc2V0X2RhdGFfb29iKHN0cnVjdCBuYW5kX2NoaXAgKm5h bmQsCj4gPj4+PiAgCQkJCSAgIGNvbnN0IHU4ICpidWYsIHU4ICpvb2JidWYpCj4gPj4+PiAgewo+ ID4+Pj4gKwlzdHJ1Y3QgbWVzb25fbmZjX25hbmRfY2hpcCAqbWVzb25fY2hpcCA9IHRvX21lc29u X25hbmQobmFuZCk7Cj4gPj4+PiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQo bmFuZCk7Cj4gPj4+PiAgCWludCBpLCBvb2JfbGVuID0gMDsKPiA+Pj4+ICAJdTggKmRzcmMsICpv c3JjOwo+ID4+Pj4gKwl1OCAqb29idGFpbDsKPiA+Pj4+ICAKPiA+Pj4+ICAJb29iX2xlbiA9IG5h bmQtPmVjYy5ieXRlcyArIDI7Cj4gPj4+PiAgCWZvciAoaSA9IDA7IGkgPCBuYW5kLT5lY2Muc3Rl cHM7IGkrKykgewo+ID4+Pj4gQEAgLTM5MSw2ICs0MDQsMTIgQEAgc3RhdGljIHZvaWQgbWVzb25f bmZjX3NldF9kYXRhX29vYihzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLAo+ID4+Pj4gIAkJbWVtY3B5 KG9zcmMsIG9vYmJ1Ziwgb29iX2xlbik7Cj4gPj4+PiAgCQlvb2JidWYgKz0gb29iX2xlbjsKPiA+ Pj4+ICAJfQo+ID4+Pj4gKwo+ID4+Pj4gKwlvb2J0YWlsID0gbWVzb25fY2hpcC0+ZGF0YV9idWYg KyBuYW5kLT5lY2Muc3RlcHMgKgo+ID4+Pj4gKwkJICAobmFuZC0+ZWNjLnNpemUgKyBvb2JfbGVu KTsgICAgCj4gPj4+Cj4gPj4+IFRoaXMgaXMgYWx3YXlzIHRhcmdldGluZyB0aGUgc2FtZSBhcmVh LCBzbyBpdCBsb29rcyBzdHJhbmdlIHRvIG1lLgo+ID4+PiAgICAgCj4gPj4+PiArCj4gPj4+PiAr CS8qICdvb2JidWYnIHBvaW50cyB0byB0aGUgc3RhcnQgb2YgdXNlciBhcmVhLiAqLwo+ID4+Pj4g KwltZW1jcHkob29idGFpbCwgb29iYnVmLCBtdGQtPm9vYnNpemUgLSBuYW5kLT5lY2Muc3RlcHMg KiBvb2JfbGVuKTsgICAgCj4gPj4+Cj4gPj4+IFRCSCBJIGRvbid0IGdldCB3aGF0IHlvdSBkbyBo ZXJlLiAgICAKPiA+Pgo+ID4+IFRoaXMgY29kZSB3b3JrcyBpbiByYXcgbW9kZSBhbmQgcGxhY2Vz IE9PQiBkYXRhIGZyb20gcHJvdmlkZWQgT09CIGJ1ZmZlciB0byBETUEgYnVmZmVyLgo+ID4+IFRo aXMgaXMgYmVjYXVzZSBudW1iZXIgb2YgdXNlciBieXRlcyBpcyBpbmNyZWFzZWQgaW4gdGhpcyBw YXRjaC4KPiA+PiAgCj4gPj4+ICAgICAKPiA+Pj4+ICB9Cj4gPj4+PiAgCj4gPj4+PiAgc3RhdGlj IGludCBtZXNvbl9uZmNfcXVldWVfcmIoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgaW50IHRpbWVv dXRfbXMpCj4gPj4+PiBAQCAtNDMzLDcgKzQ1Miw3IEBAIHN0YXRpYyB2b2lkIG1lc29uX25mY19z ZXRfdXNlcl9ieXRlKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsIHU4ICpvb2JfYnVmKQo+ID4+Pj4g IAlfX2xlNjQgKmluZm87Cj4gPj4+PiAgCWludCBpLCBjb3VudDsKPiA+Pj4+ICAKPiA+Pj4+IC0J Zm9yIChpID0gMCwgY291bnQgPSAwOyBpIDwgbmFuZC0+ZWNjLnN0ZXBzOyBpKyssIGNvdW50ICs9 IDIpIHsKPiA+Pj4+ICsJZm9yIChpID0gMCwgY291bnQgPSAwOyBpIDwgbmFuZC0+ZWNjLnN0ZXBz OyBpKyssIGNvdW50ICs9IChuYW5kLT5lY2MuYnl0ZXMgKyAyKSkgewo+ID4+Pj4gIAkJaW5mbyA9 ICZtZXNvbl9jaGlwLT5pbmZvX2J1ZltpXTsKPiA+Pj4+ICAJCSppbmZvIHw9IG9vYl9idWZbY291 bnRdOwo+ID4+Pj4gIAkJKmluZm8gfD0gb29iX2J1Zltjb3VudCArIDFdIDw8IDg7Cj4gPj4+PiBA QCAtNDQ2LDcgKzQ2NSw3IEBAIHN0YXRpYyB2b2lkIG1lc29uX25mY19nZXRfdXNlcl9ieXRlKHN0 cnVjdCBuYW5kX2NoaXAgKm5hbmQsIHU4ICpvb2JfYnVmKQo+ID4+Pj4gIAlfX2xlNjQgKmluZm87 Cj4gPj4+PiAgCWludCBpLCBjb3VudDsKPiA+Pj4+ICAKPiA+Pj4+IC0JZm9yIChpID0gMCwgY291 bnQgPSAwOyBpIDwgbmFuZC0+ZWNjLnN0ZXBzOyBpKyssIGNvdW50ICs9IDIpIHsKPiA+Pj4+ICsJ Zm9yIChpID0gMCwgY291bnQgPSAwOyBpIDwgbmFuZC0+ZWNjLnN0ZXBzOyBpKyssIGNvdW50ICs9 IChuYW5kLT5lY2MuYnl0ZXMgKyAyKSkgewo+ID4+Pj4gIAkJaW5mbyA9ICZtZXNvbl9jaGlwLT5p bmZvX2J1ZltpXTsKPiA+Pj4+ICAJCW9vYl9idWZbY291bnRdID0gKmluZm87Cj4gPj4+PiAgCQlv b2JfYnVmW2NvdW50ICsgMV0gPSAqaW5mbyA+PiA4Owo+ID4+Pj4gQEAgLTYzOCw2ICs2NTcsODQg QEAgc3RhdGljIGludCBtZXNvbl9uZmNfcndfY21kX3ByZXBhcmVfYW5kX2V4ZWN1dGUoc3RydWN0 IG5hbmRfY2hpcCAqbmFuZCwKPiA+Pj4+ICAJcmV0dXJuIDA7Cj4gPj4+PiAgfQo+ID4+Pj4gIAo+ ID4+Pj4gK3N0YXRpYyB1MzIgbWVzb25fbmZjX29vYl9mcmVlX2J5dGVzKHN0cnVjdCBuYW5kX2No aXAgKm5hbmQpCj4gPj4+PiArewo+ID4+Pj4gKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5hbmRf dG9fbXRkKG5hbmQpOwo+ID4+Pj4gKwo+ID4+Pj4gKwlyZXR1cm4gbXRkLT5vb2JzaXplIC0gbmFu ZC0+ZWNjLnN0ZXBzICogKG5hbmQtPmVjYy5ieXRlcyArIDIpOyAgICAKPiA+Pj4KPiA+Pj4gVGhp cyBsb29rcyBsaWtlIGEgc3RhdGljIHZhbHVlLCBqdXN0IHNhdmUgaXQgc29tZXdoZXJlIGluc3Rl YWQgb2YKPiA+Pj4gcmVjb21wdXRpbmcgaXQ/ICAgIAo+ID4+Cj4gPj4gQWNrCj4gPj4gIAo+ID4+ PiAgICAgCj4gPj4+PiArfQo+ID4+Pj4gKwo+ID4+Pj4gK3N0YXRpYyBpbnQgbWVzb25fbmZjX3dy aXRlX29vYihzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLCBpbnQgcGFnZSkKPiA+Pj4+ICt7Cj4gPj4+ PiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQobmFuZCk7Cj4gPj4+PiArCXUz MiBwYWdlX3NpemUgPSBtdGQtPndyaXRlc2l6ZSArIG10ZC0+b29ic2l6ZTsKPiA+Pj4+ICsJdTMy IG9vYl9ieXRlcyA9IG1lc29uX25mY19vb2JfZnJlZV9ieXRlcyhuYW5kKTsKPiA+Pj4+ICsJdTgg Km9vYl9idWY7Cj4gPj4+PiArCWludCByZXQ7Cj4gPj4+PiArCj4gPj4+PiArCWlmICghb29iX2J5 dGVzKQo+ID4+Pj4gKwkJcmV0dXJuIDA7ICAgIAo+ID4+Pgo+ID4+PiBDYW4gdGhpcyBoYXBwZW4/ ICAgIAo+ID4+Cj4gPj4gQWNrLCBzZWVtcyBmb3JnZXQgdG8gcmVtb3ZlIGl0Cj4gPj4gIAo+ID4+ PiAgICAgCj4gPj4+PiArCj4gPj4+PiArCS8qIENhbGxlZCBhcyBPT0Igd3JpdGUgaGVscGVyLCB3 aWxsIHNlbmQgTkFORF9DTURfUEFHRVBST0cuICovCj4gPj4+PiArCWlmIChwYWdlICE9IC0xKSB7 Cj4gPj4+PiArCQlyZXQgPSBuYW5kX3Byb2dfcGFnZV9iZWdpbl9vcChuYW5kLCBwYWdlLCAwLCBO VUxMLCAwKTsKPiA+Pj4+ICsJCWlmIChyZXQpCj4gPj4+PiArCQkJcmV0dXJuIHJldDsKPiA+Pj4+ ICsJfQo+ID4+Pj4gKwo+ID4+Pj4gKwlvb2JfYnVmID0gbmFuZC0+b29iX3BvaTsKPiA+Pj4+ICsK PiA+Pj4+ICsJcmV0ID0gbmFuZF9jaGFuZ2Vfd3JpdGVfY29sdW1uX29wKG5hbmQsIHBhZ2Vfc2l6 ZSAtIG9vYl9ieXRlcywKPiA+Pj4+ICsJCQkJCSAgb29iX2J1ZiArIChtdGQtPm9vYnNpemUgLSBv b2JfYnl0ZXMpLAo+ID4+Pj4gKwkJCQkJICBvb2JfYnl0ZXMsIGZhbHNlKTsKPiA+Pj4+ICsJaWYg KHJldCkKPiA+Pj4+ICsJCXJldHVybiByZXQ7Cj4gPj4+PiArCj4gPj4+PiArCXJldHVybiAocGFn ZSAhPSAtMSkgPyBuYW5kX3Byb2dfcGFnZV9lbmRfb3AobmFuZCkgOiAwOwo+ID4+Pj4gK30KPiA+ Pj4+ICsKPiA+Pj4+ICtzdGF0aWMgaW50IG1lc29uX25mY19yZWFkX29vYihzdHJ1Y3QgbmFuZF9j aGlwICpuYW5kLCBpbnQgcGFnZSkKPiA+Pj4+ICt7Cj4gPj4+PiArCXN0cnVjdCBtdGRfaW5mbyAq bXRkID0gbmFuZF90b19tdGQobmFuZCk7Cj4gPj4+PiArCXU4ICpvb2JfYnVmID0gbmFuZC0+b29i X3BvaTsKPiA+Pj4+ICsJdTMyIG9vYl9ieXRlczsKPiA+Pj4+ICsJdTMyIHBhZ2Vfc2l6ZTsKPiA+ Pj4+ICsJaW50IHJldDsKPiA+Pj4+ICsJaW50IGk7Cj4gPj4+PiArCj4gPj4+PiArCS8qIENhbGxl ZCBhcyBPT0IgcmVhZCBoZWxwZXIsIHNlbmQgTkFORF9DTURfUkVBRDAuICovCj4gPj4+PiArCWlm IChwYWdlICE9IC0xKSB7ICAgIAo+ID4+Pgo+ID4+PiBJIGRvbid0IGxpa2UgdGhpcyBsb2dpYyB3 aXRoIHRoZSAiLTEiLCBpdCByZWFsbHkgaGlkZXMgd2hhdCB0aGUKPiA+Pj4gY29udHJvbGxlciBu ZWVkcyB0byBkbywgaWYgeW91IG5lZWQgYSBoZWxwZXIgdG8gc2VuZCBhIGNvbW1hbmQsIHRoZW4K PiA+Pj4gY3JlYXRlIHRoYXQgaGVscGVyIGFuZCBnaXZlIGl0IGEgZGVjZW50IG5hbWUuICAgIAo+ ID4+Cj4gPj4gSSBzZWUsIHNvIEkgdGhpbmsgSSBuZWVkIHRvIGltcGxlbWVudCB0aGlzIGluIHRo ZSBmb2xsb3dpbmcgd2F5Ogo+ID4+IDEpIEZvciBPT0IgY2FsbGJhY2sgaXQgYWx3YXlzIHNlbmRz IE5BTkRfQ01EX1JFQUQwIChlLmcuIHdpdGhvdXQgYW55ICdpZicpCj4gPj4gMikgRm9yIHJlYWQg T09CIHdpdGggZGF0YSBwYWdlIHdlIGRvbid0IG5lZWQgdG8gc2VuZCBOQU5EX0NNRF9SRUFEMC4g KGFsc28gd2l0aG91dCBhbnkgJ2lmJykKPiA+PiAgCj4gPj4+ICAgICAKPiA+Pj4+ICsJCXJldCA9 IG5hbmRfcmVhZF9wYWdlX29wKG5hbmQsIHBhZ2UsIDAsIE5VTEwsIDApOwo+ID4+Pj4gKwkJaWYg KHJldCkKPiA+Pj4+ICsJCQlyZXR1cm4gcmV0Owo+ID4+Pj4gKwl9Cj4gPj4+PiArCj4gPj4+PiAr CS8qIFJlYWQgRUNDIGNvZGVzIGFuZCB1c2VyIGJ5dGVzLiAqLwo+ID4+Pj4gKwlmb3IgKGkgPSAw OyBpIDwgbmFuZC0+ZWNjLnN0ZXBzOyBpKyspIHsKPiA+Pj4+ICsJCXUzMiBlY2Nfb2ZmcyA9IG5h bmQtPmVjYy5zaXplICogKGkgKyAxKSArCj4gPj4+PiArCQkJICAgICAgIChuYW5kLT5lY2MuYnl0 ZXMgKyAyKSAqIGk7Cj4gPj4+PiArCj4gPj4+PiArCQlyZXQgPSBuYW5kX2NoYW5nZV9yZWFkX2Nv bHVtbl9vcChuYW5kLCBlY2Nfb2ZmcywKPiA+Pj4+ICsJCQkJCQkgb29iX2J1ZiArIGkgKiAobmFu ZC0+ZWNjLmJ5dGVzICsgMiksCj4gPj4+PiArCQkJCQkJIChuYW5kLT5lY2MuYnl0ZXMgKyAyKSwg ZmFsc2UpOwo+ID4+Pj4gKwkJaWYgKHJldCkKPiA+Pj4+ICsJCQlyZXR1cm4gcmV0Owo+ID4+Pj4g Kwl9Cj4gPj4+PiArCj4gPj4+PiArCW9vYl9ieXRlcyA9IG1lc29uX25mY19vb2JfZnJlZV9ieXRl cyhuYW5kKTsKPiA+Pj4+ICsKPiA+Pj4+ICsJaWYgKCFvb2JfYnl0ZXMpCj4gPj4+PiArCQlyZXR1 cm4gMDsKPiA+Pj4+ICsKPiA+Pj4+ICsJcGFnZV9zaXplID0gbXRkLT53cml0ZXNpemUgKyBtdGQt Pm9vYnNpemU7Cj4gPj4+PiArCj4gPj4+PiArCXJldCA9IG5hbmRfY2hhbmdlX3JlYWRfY29sdW1u X29wKG5hbmQsIHBhZ2Vfc2l6ZSAtIG9vYl9ieXRlcywKPiA+Pj4+ICsJCQkJCSBvb2JfYnVmICsg KG10ZC0+b29ic2l6ZSAtIG9vYl9ieXRlcyksCj4gPj4+PiArCQkJCQkgb29iX2J5dGVzLCBmYWxz ZSk7Cj4gPj4+PiArCj4gPj4+PiArCXJldHVybiByZXQ7Cj4gPj4+PiArfQo+ID4+Pj4gKwo+ID4+ Pj4gIHN0YXRpYyBpbnQgbWVzb25fbmZjX3dyaXRlX3BhZ2Vfc3ViKHN0cnVjdCBuYW5kX2NoaXAg Km5hbmQsCj4gPj4+PiAgCQkJCSAgICBpbnQgcGFnZSwgaW50IHJhdykKPiA+Pj4+ICB7Cj4gPj4+ PiBAQCAtNjc0LDYgKzc3MSwxMiBAQCBzdGF0aWMgaW50IG1lc29uX25mY193cml0ZV9wYWdlX3N1 YihzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLAo+ID4+Pj4gIAkJCQkgICAgIE5GQ19DTURfU0NSQU1C TEVSX0RJU0FCTEUpOwo+ID4+Pj4gIAl9Cj4gPj4+PiAgCj4gPj4+PiArCWlmICghcmF3KSB7ICAg IAo+ID4+Pgo+ID4+PiBXaHkgdGhpcyBjaGVjaz8KPiA+Pj4KPiA+Pj4gWW91IHNob3VsZCBpbnN0 ZWFkIHByb3BhZ2F0ZSB0aGUgb29iX3JlcXVpcmVkIGZpZWxkIGFuZCBjaGVjayB0aGF0Cj4gPj4+ IHZhbHVlIEkgYmVsaWV2ZS4gICAgCj4gPj4KPiA+Pgo+ID4+IFRoaXMgY2hlY2sgaXMgZm9yIEVD QyBtb2RlLCBiZWNhdXNlIGluIHRoaXMgbW9kZSB3ZSB3cml0ZSB1c2VyIGJ5dGVzIG9mIE9PQi4K PiA+PiBFQ0MgYnl0ZXMgb2YgT09CIGFyZSB3cml0dGVuIGJ5IGhhcmR3YXJlLiAgCj4gPiAKPiA+ IEp1c3QgcHJvdmlkZSB0aGUgYnVmZmVyLiBUaGUgRUNDIGVuZ2luZSB3aWxsIHNtYXNoIGRhdGEg aWYgdGhlcmUgd2FzCj4gPiBhbnkgdGhlcmUuIE90aGVyd2lzZSBpdCB3aWxsIGZpbGwgdGhlIGhv bGVzLiBJdCdzIGV4cGVjdGVkLiBEb24ndCB0cnkKPiA+IHRvIGJlIHNtYXJ0ZXIgdGhhbiB5b3Ug c2hvdWxkIDopCj4gPiAgIAo+ID4+IEkgdGhpbmsgSSBtYWRlIGEgbWlzdGFrZSwgYmVjYXVzZQo+ ID4+IEkgbmVlZCBuZXcgY2FsbGJhY2sgdG8gd3JpdGUgT09CIGluIHJhdyBtb2RlIC0gaXQgd2ls bCB3cml0ZSBib3RoIEVDQyBhbmQgdXNlcgo+ID4+IHBhcnRzLCAgCj4gPiAKPiA+IFRoZXJlIGlz IG5vIHN1Y2ggdGhpbmcgYXMgdXNlciBhbmQgRUNDIHBhcnQgYXQgdGhlIGRyaXZlciBsZXZlbC4g WW91Cj4gPiBnZXQgYSBidWZmZXIsIHlvdSBuZWVkIHRvIHdyaXRlIGl0IHRvIHRoZSBmbGFzaC4K PiA+IAo+ID4gVGhlIHVzZXIgZXhwZWN0czoKPiA+IAo+ID4gfCBkYXRhIHwgT09CIHwKPiA+IAo+ ID4gVGhlIGNvbnRyb2xsZXIgZXhwZWN0cyBzb21ldGhpbmcgbGlrZToKPiA+IAo+ID4gfCBkYXRh MSB8IE9PQjEgfCBkYXRhMiB8IE9PQjIgfAo+ID4gCj4gPiBTbyBqdXN0IHBlcmZvcm0gdGhlIHJl b3JkZXJpbmcgYmV0d2VlbiBkYXRhIGFuZCBPT0IgaW4gdGhlIERNQSBidWZmZXIsCj4gPiB0aGF0 IGlzIF9hbGxfLgo+ID4gICAKPiA+PiBpbiBjdXJyZW50IHZlcnNpb24gSSB3cml0ZSBvbmx5IHVz ZXIgcGFydCBpbiByYXcgbW9kZS4KPiA+PiAgCj4gPj4+ICAgICAKPiA+Pj4+ICsJCXJldCA9IG1l c29uX25mY193cml0ZV9vb2IobmFuZCwgLTEpOwo+ID4+Pj4gKwkJaWYgKHJldCkKPiA+Pj4+ICsJ CQlyZXR1cm4gcmV0Owo+ID4+Pj4gKwl9Cj4gPj4+PiArCj4gPj4+PiAgCWNtZCA9IG5mYy0+cGFy YW0uY2hpcF9zZWxlY3QgfCBORkNfQ01EX0NMRSB8IE5BTkRfQ01EX1BBR0VQUk9HOwo+ID4+Pj4g IAl3cml0ZWwoY21kLCBuZmMtPnJlZ19iYXNlICsgTkZDX1JFR19DTUQpOwo+ID4+Pj4gIAltZXNv bl9uZmNfcXVldWVfcmIobmFuZCwgUFNFQ19UT19NU0VDKHNkci0+dFBST0dfbWF4KSk7Cj4gPj4+ PiBAQCAtODM0LDE3ICs5MzcsMTAgQEAgc3RhdGljIGludCBtZXNvbl9uZmNfcmVhZF9wYWdlX2h3 ZWNjKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsIHU4ICpidWYsCj4gPj4+PiAgCQltZW1jcHkoYnVm LCBtZXNvbl9jaGlwLT5kYXRhX2J1ZiwgbXRkLT53cml0ZXNpemUpOwo+ID4+Pj4gIAl9Cj4gPj4+ PiAgCj4gPj4+PiAtCXJldHVybiBiaXRmbGlwczsKPiA+Pj4+IC19Cj4gPj4+PiAtCj4gPj4+PiAt c3RhdGljIGludCBtZXNvbl9uZmNfcmVhZF9vb2JfcmF3KHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQs IGludCBwYWdlKQo+ID4+Pj4gLXsKPiA+Pj4+IC0JcmV0dXJuIG1lc29uX25mY19yZWFkX3BhZ2Vf cmF3KG5hbmQsIE5VTEwsIDEsIHBhZ2UpOwo+ID4+Pj4gLX0KPiA+Pj4+ICsJaWYgKG9vYl9yZXF1 aXJlZCAmJiByZXQpICAgIAo+ID4+Pgo+ID4+PiBVbmNsZWFyIHdoeSB5b3UgY2hlY2sgcmV0IGhl cmU/ICAKPiA+IAo+ID4gSW4gZ2VuZXJhbCwgaWYgKHJldCkgbWVhbnMgdGhlcmUgaXMgYW4gZXJy b3IuCj4gPiAKPiA+IFBsZWFzZSBjb25zaWRlciB1c2luZzoKPiA+IAo+ID4gaWYgKHJldCkKPiA+ IAlnb3RvIGVycm9yIHBhdGg7Cj4gPiAKPiA+IGRvIHNvbWV0aGluZyBlbHNlOwo+ID4gICAKPiA+ Pj4gICAgIAo+ID4+Cj4gPj4gSWYgcmVhZCB3YXMgc3VjY2Vzc2Z1bCwgd2UgcmVhZCBPT0IuIElm IG5vdCAtIHRoZXJlIGlzIG5vIHNlbnNlIGluIGl0Lgo+ID4+ICAKPiA+Pj4+ICsJCW1lc29uX25m Y19yZWFkX29vYihuYW5kLCAtMSk7Cj4gPj4+PiAgCj4gPj4+PiAtc3RhdGljIGludCBtZXNvbl9u ZmNfcmVhZF9vb2Ioc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgaW50IHBhZ2UpCj4gPj4+PiAtewo+ ID4+Pj4gLQlyZXR1cm4gbWVzb25fbmZjX3JlYWRfcGFnZV9od2VjYyhuYW5kLCBOVUxMLCAxLCBw YWdlKTsKPiA+Pj4+ICsJcmV0dXJuIGJpdGZsaXBzOwo+ID4+Pj4gIH0KPiA+Pj4+ICAKPiA+Pj4+ ICBzdGF0aWMgYm9vbCBtZXNvbl9uZmNfaXNfYnVmZmVyX2RtYV9zYWZlKGNvbnN0IHZvaWQgKmJ1 ZmZlcikKPiA+Pj4+IEBAIC05ODcsMTIgKzEwODMsMTYgQEAgc3RhdGljIGludCBtZXNvbl9vb2Js YXlvdXRfZnJlZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHNlY3Rpb24sCj4gPj4+PiAgCQkJ CXN0cnVjdCBtdGRfb29iX3JlZ2lvbiAqb29icmVnaW9uKQo+ID4+Pj4gIHsKPiA+Pj4+ICAJc3Ry dWN0IG5hbmRfY2hpcCAqbmFuZCA9IG10ZF90b19uYW5kKG10ZCk7Cj4gPj4+PiArCXUzMiBvb2Jf Ynl0ZXMgPSBtZXNvbl9uZmNfb29iX2ZyZWVfYnl0ZXMobmFuZCk7Cj4gPj4+PiAgCj4gPj4+PiAg CWlmIChzZWN0aW9uID49IG5hbmQtPmVjYy5zdGVwcykKPiA+Pj4+ICAJCXJldHVybiAtRVJBTkdF Owo+ID4+Pj4gIAo+ID4+Pj4gLQlvb2JyZWdpb24tPm9mZnNldCA9IHNlY3Rpb24gKiAoMiArIG5h bmQtPmVjYy5ieXRlcyk7ICAgIAo+ID4+Pgo+ID4+PiBUaGUgZmlyc3QgdHdvIGJ5dGVzIG9mIE9P QiBhcmUgcmVzZXJ2ZWQgZm9yIHRoZSBiYWQgYmxvY2sgbWFya2Vycy4gVGhpcwo+ID4+PiBpcyBu b3QgcmVsYXRlZCB0byB5b3VyIGNvbnRyb2xsZXIuICAgIAo+ID4+Cj4gPj4gSSB0aGluayBmaXJz dCB0d28gYnl0ZXMgKGluIGZhY3QgdGhlcmUgYXJlIDQgYnl0ZXMgYXQgcG9zaXRpb25zIDAsIDEs IDE2IGFuZCAxNykKPiA+PiBpcyBjb25zaWRlcmVkIGJ5IGhhcmR3YXJlIGFzIHVzZXIgYnl0ZXMg Y292ZXJlZCBieSBFQ0MuICAKPiA+IAo+ID4gVGhlIHR3byBmaXJzdCBieXRlcyBzaG91bGQgbm90 IGJlIGF2YWlsYWJsZS4gVGhleSBhcmUgbm90ICJFQ0MiIGJ5dGVzLAo+ID4gdGhleSBhcmUgbm90 ICJmcmVlIiBieXRlcy4gTm9uZSBvZiB0aGVzZSB0d28gY2FsbGJhY2tzIHNob3VsZCBnaXZlCj4g PiBhY2Nlc3MgdG8gdGhlc2UgdHdvIGJ5dGVzIHJlc2VydmVkIGZvciBiYWQgYmxvY2sgbWFya2Vy cy4KPiA+IAo+ID4gSnVzdCB0byBiZSBjbGVhcjogIkVDQyBieXRlcyIgYXMgaW4gIm1lc29uX29v YmxheW91dF9lY2MiIGRvICpub3QqIG1lYW4KPiA+ICJ0aGVzZSBhcmUgdGhlIHByb3RlY3RlZCBi eXRlcyIuIFRoZXkgbWVhbiAidGhlc2UgYXJlIHRoZSBieXRlcyBpbiBPT0IKPiA+IHRoZSBoYXJk d2FyZSBFQ0MgZW5naW5lIHdpbGwgdXNlIHRvIHBsYWNlIGl0cyBvd24gZGF0YSB0byBtYWtlIHRo ZQo+ID4gcmVjb3ZlcnkgcHJvY2VzcyB3b3JrIi4KPiA+IAo+ID4gVGhhbmtzLAo+ID4gTWlxdcOo bCAgCgoKVGhhbmtzLApNaXF1w6hsCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2Vy bmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1h bi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg== 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 60741C77B73 for ; Tue, 6 Jun 2023 07:11:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235879AbjFFHLS (ORCPT ); Tue, 6 Jun 2023 03:11:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60824 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235871AbjFFHLP (ORCPT ); Tue, 6 Jun 2023 03:11:15 -0400 Received: from relay1-d.mail.gandi.net (relay1-d.mail.gandi.net [217.70.183.193]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 64E84118 for ; Tue, 6 Jun 2023 00:11:12 -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=1686035471; 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=rFJmCcMrQ4DjHJjPGf914EBlWwvSR6LF8KLemTrPksU=; b=naaUZgc6f6dgY5UzpsA9KAQODJUQtw2fskLovj217gC8HaaeSwzxtIe+/DXyDkUgNxDSmM rAQ2xwRU3vmdnqnaZGX1chK7I/3lD2c2laZ/3azlYOSEWKczGLvi9RN1mbOcIm4qZxBklN yOYGe4H6a5XgSj/2mzgcQ+dvpcJpEMRtVEisRQjbowY/DDuZfWYkieuMmjOayZkv1ESuuZ Hk42JbB5OqWoRlFaAmCl+pcQIkRru/HCi8fufkllxjsbtV/5YMZLxQt7loMIMeFYocG1iC /RkRk7MVgVEkZUZv3zQdiwdl8jh4ebm8wdrcuRjTMcoJAz5ltiVIYSXJ6mLA8Q== 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 755CF240004; Tue, 6 Jun 2023 07:11:09 +0000 (UTC) Date: Tue, 6 Jun 2023 09:11:07 +0200 From: Miquel Raynal To: Arseniy Krasnov Cc: Liang Yang , Richard Weinberger , Vignesh Raghavendra , Neil Armstrong , Kevin Hilman , Jerome Brunet , Martin Blumenstingl , , , , , , Subject: Re: [RFC PATCH v5 3/6] mtd: rawnand: meson: only expose unprotected user OOB bytes Message-ID: <20230606091107.78c792ff@xps-13> In-Reply-To: <53f31185-70d9-7264-a99a-cf71f8fc52eb@sberdevices.ru> References: <20230601061850.3907800-1-AVKrasnov@sberdevices.ru> <20230601061850.3907800-4-AVKrasnov@sberdevices.ru> <20230601103111.6840acc0@xps-13> <8242530c-7b6b-29ce-581b-c5644a965b60@sberdevices.ru> <20230605114850.77cf9197@xps-13> <53f31185-70d9-7264-a99a-cf71f8fc52eb@sberdevices.ru> 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, 6 Jun 2023 07:42:58 +0300: > On 05.06.2023 12:48, Miquel Raynal wrote: > > Hi Arseniy, > >=20 > > avkrasnov@sberdevices.ru wrote on Fri, 2 Jun 2023 11:53:47 +0300: > > =20 > >> Hello Miquel, thanks for review! > >> > >> On 01.06.2023 11:31, Miquel Raynal wrote: =20 > >>> Hi Arseniy, > >>> > >>> AVKrasnov@sberdevices.ru wrote on Thu, 1 Jun 2023 09:18:46 +0300: > >>> =20 > >>>> This moves free bytes of OOB to non-protected ECC area. It is needed= to =20 > >>> > >>> As we discussed, I expect this commit to just change the OOB layout to > >>> expose unprotected OOB bytes to the user, that is the only change this > >>> commit should carry. If that does not work, you should add a > >>> preparation patch. =20 > >> > >> Ok, but I thought, if i change only OOB layout, e.g. update 'free' cal= lback of > >> mtd_ooblayout_ops, I also need to implement code which performs read/w= rite > >> according new layout (it must be done in a single patch)? =20 > >=20 > > No, this is orthogonal. > >=20 > > The driver must read the the whole OOB area (and perhaps reorder the > > data), but you should not make any decision regarding what bytes you > > want or not want to expose. > >=20 > > Then, the user (no matter what "user" is here) will decide how to deal > > with the data. =20 >=20 > Hello Miquel! >=20 > Ok, so in case of: > 1) read I just need to read OOB data using 'nand_change_read_column_op()'= and place it to 'oob_buf'. > 2) write I need to write OOB data using 'nand_change_write_column_op()' t= o controller internal RAM and then call PAGE_PROG. > Even in ECC mode, data which occupies places of ECC codes will be remo= ved by hw ( as You mentinoed below). >=20 > That's all?:) Sounds right :) If you find too costly to make many nand_change_read_column_op() and want to leverage DMA instead, you can as well read everything (data+oob) in one go in a bounce buffer and then perform memcpy's into your final buffer in order to reorganize the data. That's entirely up to you (and same of course in the write path, you could first memcpy/reorder the data into a DMA bounce buffer locally, and then send all the data in a single DMA transfer and call PAGE_PROG). >=20 > > =20 > >> Main thing is: > >> > >> I guess that general confuse with this patch is that You consider > >> that we change only OOB layout by moving user bytes out of ECC area, b= ut at the same > >> time I also increased size of OOB from 4 bytes (e.g. 2 x 2 bytes clean= markers) > >> to 32 bytes (e.g. tail of page after data and ECC codes), so if this > >> assumption is correct, in the next version I won't change size of user= area in > >> OOB, thus this patch will be reduced as some comments from this review= . =20 > >=20 > > Exposing only 4 bytes was a mistake in the first place, please fix this > > in a dedicated patch. =20 >=20 > So current (not merged) version exposes bytes 0,1,16,17 of OOB, You mean = this is wrong? > Correct way is to expose 32,33,48,49 (e.g. shifted by 32)? >=20 > Thanks, Arseniy >=20 > > =20 > >>>> make JFFS2 works correctly with this NAND controller. Problem fires = when > >>>> JFFS2 driver writes cleanmarker to some page and later it tries to w= rite > >>>> to this page - write will be done successfully, but after that such = page > >>>> becomes unreadable due to invalid ECC codes. This happens because se= cond > >>>> write needs to update ECC codes, but it is impossible to do it corre= ctly > >>>> without block erase. So idea of this patch 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. > >>>> > >>>> JFFS2 is only useful on tiny NAND devices, where UBI does not fit, w= hich > >>>> 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 late= r in > >>>> a second write. > >>>> > >>>> Signed-off-by: Arseniy Krasnov > >>>> --- > >>>> Changelog v4->v5: > >>>> * Drop cosmetic changes from this patch. > >>>> * Do not ignore ECC protected user bytes provided by hw. Even these > >>>> bytes are out of user area of OOB, its values are still read from > >>>> the provided OOB buffer and written by hardware. Same behaviour is > >>>> preserved for read access - such bytes are read from DMA buffer a= nd > >>>> placed to OOB buffer. > >>>> * OOB read and write become more lightweight because I removed heavy > >>>> READ0 and PAGEPROG command from it (both commands are still sent > >>>> when OOB access is performed using OOB callbacks). In case of page > >>>> read/write OOB data is handled in the internal SRAM of the contro= ller. > >>>> * Commit message updated. > >>>> * Temporary buffer for OOB read/write is removed. Seems everything > >>>> works correctly without it. > >>>> > >>>> drivers/mtd/nand/raw/meson_nand.c | 134 ++++++++++++++++++++++++++-= --- > >>>> 1 file changed, 117 insertions(+), 17 deletions(-) > >>>> > >>>> diff --git a/drivers/mtd/nand/raw/meson_nand.c b/drivers/mtd/nand/ra= w/meson_nand.c > >>>> index 82a629025adc..e42c28be02f3 100644 > >>>> --- a/drivers/mtd/nand/raw/meson_nand.c > >>>> +++ b/drivers/mtd/nand/raw/meson_nand.c > >>>> @@ -358,8 +358,11 @@ 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; > >>>> for (i =3D 0; i < nand->ecc.steps; i++) { > >>>> @@ -368,17 +371,27 @@ static void meson_nfc_get_data_oob(struct nand= _chip *nand, > >>>> 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; > >>>> } > >>>> + > >>>> + oobtail =3D meson_chip->data_buf + nand->ecc.steps * > >>>> + (nand->ecc.size + oob_len); > >>>> + > >>>> + /* 'oobbuf' points to the start of user area. */ > >>>> + 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; > >>>> for (i =3D 0; i < nand->ecc.steps; i++) { > >>>> @@ -391,6 +404,12 @@ static void meson_nfc_set_data_oob(struct nand_= chip *nand, > >>>> memcpy(osrc, oobbuf, oob_len); > >>>> oobbuf +=3D oob_len; > >>>> } > >>>> + > >>>> + oobtail =3D meson_chip->data_buf + nand->ecc.steps * > >>>> + (nand->ecc.size + oob_len); =20 > >>> > >>> This is always targeting the same area, so it looks strange to me. > >>> =20 > >>>> + > >>>> + /* 'oobbuf' points to the start of user area. */ > >>>> + memcpy(oobtail, oobbuf, mtd->oobsize - nand->ecc.steps * oob_len);= =20 > >>> > >>> TBH I don't get what you do here. =20 > >> > >> This code works in raw mode and places OOB data from provided OOB buff= er to DMA buffer. > >> This is because number of user bytes is increased in this patch. > >> =20 > >>> =20 > >>>> } > >>>> =20 > >>>> static int meson_nfc_queue_rb(struct nand_chip *nand, int timeout_m= s) > >>>> @@ -433,7 +452,7 @@ static void meson_nfc_set_user_byte(struct nand_= chip *nand, u8 *oob_buf) > >>>> __le64 *info; > >>>> int i, count; > >>>> =20 > >>>> - for (i =3D 0, count =3D 0; i < nand->ecc.steps; i++, count +=3D 2)= { > >>>> + for (i =3D 0, count =3D 0; i < nand->ecc.steps; i++, count +=3D (n= and->ecc.bytes + 2)) { > >>>> info =3D &meson_chip->info_buf[i]; > >>>> *info |=3D oob_buf[count]; > >>>> *info |=3D oob_buf[count + 1] << 8; > >>>> @@ -446,7 +465,7 @@ static void meson_nfc_get_user_byte(struct nand_= chip *nand, u8 *oob_buf) > >>>> __le64 *info; > >>>> int i, count; > >>>> =20 > >>>> - for (i =3D 0, count =3D 0; i < nand->ecc.steps; i++, count +=3D 2)= { > >>>> + for (i =3D 0, count =3D 0; i < nand->ecc.steps; i++, count +=3D (n= and->ecc.bytes + 2)) { > >>>> info =3D &meson_chip->info_buf[i]; > >>>> oob_buf[count] =3D *info; > >>>> oob_buf[count + 1] =3D *info >> 8; > >>>> @@ -638,6 +657,84 @@ static int meson_nfc_rw_cmd_prepare_and_execute= (struct nand_chip *nand, > >>>> return 0; > >>>> } > >>>> =20 > >>>> +static u32 meson_nfc_oob_free_bytes(struct nand_chip *nand) > >>>> +{ > >>>> + struct mtd_info *mtd =3D nand_to_mtd(nand); > >>>> + > >>>> + return mtd->oobsize - nand->ecc.steps * (nand->ecc.bytes + 2); = =20 > >>> > >>> This looks like a static value, just save it somewhere instead of > >>> recomputing it? =20 > >> > >> Ack > >> =20 > >>> =20 > >>>> +} > >>>> + > >>>> +static int meson_nfc_write_oob(struct nand_chip *nand, int page) > >>>> +{ > >>>> + struct mtd_info *mtd =3D nand_to_mtd(nand); > >>>> + u32 page_size =3D mtd->writesize + mtd->oobsize; > >>>> + u32 oob_bytes =3D meson_nfc_oob_free_bytes(nand); > >>>> + u8 *oob_buf; > >>>> + int ret; > >>>> + > >>>> + if (!oob_bytes) > >>>> + return 0; =20 > >>> > >>> Can this happen? =20 > >> > >> Ack, seems forget to remove it > >> =20 > >>> =20 > >>>> + > >>>> + /* Called as OOB write helper, will send NAND_CMD_PAGEPROG. */ > >>>> + if (page !=3D -1) { > >>>> + ret =3D nand_prog_page_begin_op(nand, page, 0, NULL, 0); > >>>> + if (ret) > >>>> + return ret; > >>>> + } > >>>> + > >>>> + oob_buf =3D nand->oob_poi; > >>>> + > >>>> + ret =3D nand_change_write_column_op(nand, page_size - oob_bytes, > >>>> + oob_buf + (mtd->oobsize - oob_bytes), > >>>> + oob_bytes, false); > >>>> + if (ret) > >>>> + return ret; > >>>> + > >>>> + return (page !=3D -1) ? nand_prog_page_end_op(nand) : 0; > >>>> +} > >>>> + > >>>> +static int meson_nfc_read_oob(struct nand_chip *nand, int page) > >>>> +{ > >>>> + struct mtd_info *mtd =3D nand_to_mtd(nand); > >>>> + u8 *oob_buf =3D nand->oob_poi; > >>>> + u32 oob_bytes; > >>>> + u32 page_size; > >>>> + int ret; > >>>> + int i; > >>>> + > >>>> + /* Called as OOB read helper, send NAND_CMD_READ0. */ > >>>> + if (page !=3D -1) { =20 > >>> > >>> I don't like this logic with the "-1", it really hides what the > >>> controller needs to do, if you need a helper to send a command, then > >>> create that helper and give it a decent name. =20 > >> > >> I see, so I think I need to implement this in the following way: > >> 1) For OOB callback it always sends NAND_CMD_READ0 (e.g. without any '= if') > >> 2) For read OOB with data page we don't need to send NAND_CMD_READ0. (= also without any 'if') > >> =20 > >>> =20 > >>>> + ret =3D nand_read_page_op(nand, page, 0, NULL, 0); > >>>> + if (ret) > >>>> + return ret; > >>>> + } > >>>> + > >>>> + /* Read ECC codes and user bytes. */ > >>>> + for (i =3D 0; i < nand->ecc.steps; i++) { > >>>> + u32 ecc_offs =3D nand->ecc.size * (i + 1) + > >>>> + (nand->ecc.bytes + 2) * i; > >>>> + > >>>> + ret =3D nand_change_read_column_op(nand, ecc_offs, > >>>> + oob_buf + i * (nand->ecc.bytes + 2), > >>>> + (nand->ecc.bytes + 2), false); > >>>> + if (ret) > >>>> + return ret; > >>>> + } > >>>> + > >>>> + oob_bytes =3D meson_nfc_oob_free_bytes(nand); > >>>> + > >>>> + if (!oob_bytes) > >>>> + return 0; > >>>> + > >>>> + page_size =3D mtd->writesize + mtd->oobsize; > >>>> + > >>>> + ret =3D nand_change_read_column_op(nand, page_size - oob_bytes, > >>>> + oob_buf + (mtd->oobsize - oob_bytes), > >>>> + oob_bytes, false); > >>>> + > >>>> + return ret; > >>>> +} > >>>> + > >>>> static int meson_nfc_write_page_sub(struct nand_chip *nand, > >>>> int page, int raw) > >>>> { > >>>> @@ -674,6 +771,12 @@ static int meson_nfc_write_page_sub(struct nand= _chip *nand, > >>>> NFC_CMD_SCRAMBLER_DISABLE); > >>>> } > >>>> =20 > >>>> + if (!raw) { =20 > >>> > >>> Why this check? > >>> > >>> You should instead propagate the oob_required field and check that > >>> value I believe. =20 > >> > >> > >> This check is for ECC mode, because in this mode we write user bytes o= f OOB. > >> ECC bytes of OOB are written by hardware. =20 > >=20 > > Just provide the buffer. The ECC engine will smash data if there was > > any there. Otherwise it will fill the holes. It's expected. Don't try > > to be smarter than you should :) > > =20 > >> I think I made a mistake, because > >> I need new callback to write OOB in raw mode - it will write both ECC = and user > >> parts, =20 > >=20 > > There is no such thing as user and ECC part at the driver level. You > > get a buffer, you need to write it to the flash. > >=20 > > The user expects: > >=20 > > | data | OOB | > >=20 > > The controller expects something like: > >=20 > > | data1 | OOB1 | data2 | OOB2 | > >=20 > > So just perform the reordering between data and OOB in the DMA buffer, > > that is _all_. > > =20 > >> in current version I write only user part in raw mode. > >> =20 > >>> =20 > >>>> + ret =3D meson_nfc_write_oob(nand, -1); > >>>> + if (ret) > >>>> + return ret; > >>>> + } > >>>> + > >>>> cmd =3D nfc->param.chip_select | NFC_CMD_CLE | NAND_CMD_PAGEPROG; > >>>> writel(cmd, nfc->reg_base + NFC_REG_CMD); > >>>> meson_nfc_queue_rb(nand, PSEC_TO_MSEC(sdr->tPROG_max)); > >>>> @@ -834,17 +937,10 @@ static int meson_nfc_read_page_hwecc(struct na= nd_chip *nand, u8 *buf, > >>>> memcpy(buf, meson_chip->data_buf, mtd->writesize); > >>>> } > >>>> =20 > >>>> - return bitflips; > >>>> -} > >>>> - > >>>> -static int meson_nfc_read_oob_raw(struct nand_chip *nand, int page) > >>>> -{ > >>>> - return meson_nfc_read_page_raw(nand, NULL, 1, page); > >>>> -} > >>>> + if (oob_required && ret) =20 > >>> > >>> Unclear why you check ret here? =20 > >=20 > > In general, if (ret) means there is an error. > >=20 > > Please consider using: > >=20 > > if (ret) > > goto error path; > >=20 > > do something else; > > =20 > >>> =20 > >> > >> If read was successful, we read OOB. If not - there is no sense in it. > >> =20 > >>>> + meson_nfc_read_oob(nand, -1); > >>>> =20 > >>>> -static int meson_nfc_read_oob(struct nand_chip *nand, int page) > >>>> -{ > >>>> - return meson_nfc_read_page_hwecc(nand, NULL, 1, page); > >>>> + return bitflips; > >>>> } > >>>> =20 > >>>> static bool meson_nfc_is_buffer_dma_safe(const void *buffer) > >>>> @@ -987,12 +1083,16 @@ static int meson_ooblayout_free(struct mtd_in= fo *mtd, int section, > >>>> struct mtd_oob_region *oobregion) > >>>> { > >>>> struct nand_chip *nand =3D mtd_to_nand(mtd); > >>>> + u32 oob_bytes =3D meson_nfc_oob_free_bytes(nand); > >>>> =20 > >>>> if (section >=3D nand->ecc.steps) > >>>> return -ERANGE; > >>>> =20 > >>>> - oobregion->offset =3D section * (2 + nand->ecc.bytes); =20 > >>> > >>> The first two bytes of OOB are reserved for the bad block markers. Th= is > >>> is not related to your controller. =20 > >> > >> I think first two bytes (in fact there are 4 bytes at positions 0, 1, = 16 and 17) > >> is considered by hardware as user bytes covered by ECC. =20 > >=20 > > The two first bytes should not be available. They are not "ECC" bytes, > > they are not "free" bytes. None of these two callbacks should give > > access to these two bytes reserved for bad block markers. > >=20 > > Just to be clear: "ECC bytes" as in "meson_ooblayout_ecc" do *not* mean > > "these are the protected bytes". They mean "these are the bytes in OOB > > the hardware ECC engine will use to place its own data to make the > > recovery process work". > >=20 > > Thanks, > > Miqu=C3=A8l =20 Thanks, Miqu=C3=A8l