From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=100.103.45.18 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793906002; b=HZy8ef0ooOBzf2vTOWYJSLU/YHUpBVvRuOgdd3Nybvw7pc9O0ITeU9HSHEDxApZuMmde OxnEl+wT7Y4TTCnvVj/nuPZAAd0wuvpkguPXJBkNpswPIeFCSujpP1UL6frJmQyVZRkLB 1ABkQhs0kP52LFtGqDWu+z49b6KX+YELVX+f2DXs5cEQ4aTGiXyF8UC0UpmAF9Z4bFUDL XB08ASnr1s+bNWuWQFReIEQODLPQJVcFx8dJF6cDx2IipKdxuqDCkhJsUgQ+fOQxyD5ZG lyuClre7adKWFE6c9TcUIj0hqCvwTzMoS8Oq51Zt38vX1+c3IQwiZhY8004b/LNtH4Q== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793906002; h=Received:DKIM-Signature:Message-ID:From:Subject:Reply-To:To:Cc: In-Reply-To:References:Content-Type:Content-Transfer-Encoding:Date; bh=bWoUw0v85zV3qDcWRLloegiWXI8H90sykJZsNR/TAqw=; b=fWz4G9UmphQ3f4VyyvhrwwRpr6sdHHCyZ0J5Ha+g4m13MxcSpJp0QQgRGE2Tq7FnxZ+f 3K51EfMvvmr7eDhylrvZnCajn3aUQ+5tZIqkT92em3xIYu/iaiNPr/EVjM0+6jX4yeBSU 9CBLTuFekYV9GPBjo7+q1jCwJUyMZ8C/nf10hfGlmDXGg9WGceDnebsyGT73yfWWGMecl HJxWCoB2Kc18e60LMNaOYI3TL9CCn94kNKY1grNITD4zk28zCh48LUUar+kv8IOnoTaIk H1ebib96WHO3BFShuTXr5DaxYvJMJj4/dbqDGdNRq0leTEmTfNXPtMdptmy03hfTjzg== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=lCgVm33R; arc=none smtp.remote-ip=100.103.45.18 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 60A20606A31B; Thu, 5 Nov 2026 19:13:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=lCgVm33R Received: by smtp.kernel.org (Postfix) with ESMTPSA id C9C151F000C1; Thu, 5 Nov 2026 19:13:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1793906001; bh=bWoUw0v85zV3qDcWRLloegiWXI8H90sykJZsNR/TAqw=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=lCgVm33RLYIh8TNpmuCn12/xAde129MgnsOWokB3gB6Rv91jNMzmtOSM257Ty9a7N 2e/SKFKpw1DOZe70ojYG0BZqOUu/bOxnqFqPKtSfGkfEDaakQFFeoQ6C4uiT3eIX+m FUVnkJnAIULk52NAqho+YjViL9OsMWyVhVU6dKdskJOqEt7fpnQJVTyHjAO2V+nFDA dhgTSRbkn4RZzfNe+5+HAHoPmopQe0uGJn1ylama7Q1583QpQpqYqTguX4twG4mfvr dsr9nonV2SFJUqJAgK5Lewr2vtbCbR65T5vRCoLXUS23ND2em+CVCdH+J0b2uAkdZq FcztQSYXaouUA== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH v10 01/26] mtd: rawnand: sunxi: centralize OOB handling Reply-To: sashiko-reviews@lists.linux.dev To: "James Hilliard" , "Miquel Raynal" , "Richard Weinberger" , "Vignesh Raghavendra" , "Sebastian Andrzej Siewior" , "Clark Williams" , "Steven Rostedt" , "Rob Herring" , "Krzysztof Kozlowski" , "Conor Dooley" , "Philipp Zabel" Cc: "Chen-Yu Tsai" , "Jernej Skrabec" , "Samuel Holland" , "Maxime Ripard" , "Richard Genoud" , "Boris Brezillon" , "Masahiro Yamada" , "Brian Norris" , linux-mtd@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-rt-devel@lists.linux.dev, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org In-Reply-To: <20261105-submit-sunxi-nand-vendor-oob-layout-v1-v10-1-dca1f6ed29a8@gmail.com> References: <20261105-submit-sunxi-nand-vendor-oob-layout-v1-v10-0-dca1f6ed29a8@gmail.com> <20261105-submit-sunxi-nand-vendor-oob-layout-v1-v10-1-dca1f6ed29a8@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Thu, 05 Nov 2026 19:13:20 +0000 X-Mailing-List: linux-rt-devel@lists.linux.dev List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list Thank you for your contribution! Sashiko AI review found 2 potential issue(= s) to consider: - [High] mtd: rawnand: sunxi: premature oob_ops selection in sunxi_nand_att= ach_chip() - [Medium] mtd: rawnand: sunxi: unaddressed maintainer NACK on vendor OOB l= ayout ops -- commit 8fda5c99d9befa1771418516828f040de60c5845 Author: James Hilliard mtd: rawnand: sunxi: centralize OOB handling This commit centralizes hardware ECC result interpretation, protected OOB retrieval, erased-chunk checking, and user-data layout reservation behind per-chip sunxi_nfc_oob_ops callbacks for both PIO and DMA paths. > diff --git a/drivers/mtd/nand/raw/sunxi_nand.c b/drivers/mtd/nand/raw/sun= xi_nand.c > index f41feebe42571..80006d1a33d68 100644 > --- a/drivers/mtd/nand/raw/sunxi_nand.c > +++ b/drivers/mtd/nand/raw/sunxi_nand.c [ ... ] > @@ -2066,6 +2096,58 @@ static int sunxi_nfc_maximize_user_data(struct nan= d_chip *nand, uint32_t oobsize [ ... ] > +/* > + * Both modes use the same layout and ECC policy. Scrambled transfers al= so > + * compensate the first two user bytes to keep the on-flash BBM unmodifi= ed. > + */ > +static const struct sunxi_nfc_oob_ops sunxi_nfc_plain_oob_ops =3D { > + .min_user_data =3D sunxi_nfc_oob_min_user_data, > + .init_user_data =3D sunxi_nfc_oob_init_user_data, > + .read_batch =3D sunxi_nfc_oob_read_batch, > + .finish_read =3D sunxi_nfc_oob_finish_read, > +}; > + > +static const struct sunxi_nfc_oob_ops sunxi_nfc_scrambled_plain_bbm_oob_= ops =3D { > + .min_user_data =3D sunxi_nfc_oob_min_user_data, > + .init_user_data =3D sunxi_nfc_oob_init_user_data, > + .transform_bbm =3D sunxi_nfc_randomize_bbm, > + .read_batch =3D sunxi_nfc_oob_read_batch, > + .finish_read =3D sunxi_nfc_oob_finish_read, > +}; [Severity: Medium] As reported by Miquel Raynal on v6 [1], the series adding support for the vendor-specific Allwinner randomized OOB layout was declined due to maintainability concerns and kernel policy against vendor-specific NAND layouts, with an invitation to submit only the standalone fixes outside of the randomized layout support. Here, sunxi_nfc_plain_oob_ops and sunxi_nfc_scrambled_plain_bbm_oob_ops use identical callbacks for min_user_data, init_user_data, read_batch, and finish_read, differing only in transform_bbm. The remaining indirection in struct sunxi_nfc_oob_ops is only used by the vendor-specific randomized OOB layout patch later in the series. Could the PIO and DMA ECC read helpers be shared directly and the standalone fixes split out without introducing the struct sunxi_nfc_oob_ops vtable? [ ... ] > @@ -2254,6 +2303,9 @@ static int sunxi_nand_attach_chip(struct nand_chip = *nand) > if (!ecc->size || !ecc->strength) > return -EINVAL; > =20 > + sunxi_nand->oob_ops =3D nand->options & NAND_NEED_SCRAMBLING ? > + &sunxi_nfc_scrambled_plain_bbm_oob_ops : &sunxi_nfc_plain_oob_ops; [Severity: High] Does selecting sunxi_nand->oob_ops in sunxi_nand_attach_chip() break bad block marker compensation for chips that set NAND_NEED_SCRAMBLING during nand_manufacturer_init()? In nand_scan_with_ids(), nand_attach() runs before nand_scan_tail(): nand_scan_with_ids() -> nand_scan_ident() -> nand_attach() -> sunxi_nand_attach_chip() -> nand_scan_tail() -> nand_manufacturer_init() For ONFI-compliant chips where nand_onfi_detect() succeeds in nand_detect() and jumps to ident_done without setting NAND_NEED_SCRAMBLING, the flag can be set later in nand_manufacturer_init(), such as in drivers/mtd/nand/raw/nand_toshiba.c: toshiba_nand_init() -> tc58teg5dclta00_init() chip->options |=3D NAND_NEED_SCRAMBLING; Because sunxi_nand_attach_chip() runs before nand_manufacturer_init(), sunxi_nand->oob_ops is latched to sunxi_nfc_plain_oob_ops (where transform_bbm is NULL). Later, during page and OOB reads and writes, sunxi_nfc_randomizer_config() and sunxi_nfc_randomizer_enable() dynamically check nand->options & NAND_NEED_SCRAMBLING and enable hardware scrambling, while sunxi_nfc_hw_ecc_get_prot_oob_bytes() and sunxi_nfc_hw_ecc_set_prot_oob_bytes() check sunxi_nand->oob_ops->transform_= bbm and skip calling sunxi_nfc_randomize_bbm(). [1] https://lore.kernel.org/r/871p9v4a1x.fsf@bootlin.com --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20261105-submit-sun= xi-nand-vendor-oob-layout-v1-v10-0-dca1f6ed29a8@gmail.com?part=3D1 From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0649D606A32E for ; Thu, 5 Nov 2026 19:13:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=3kKa+YYO; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=lCgVm33R 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:MIME-Version:Reply-To:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:Date:References: In-Reply-To:Cc:To:Subject:From:Message-ID:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Unsubscribe-Post:List-Owner; bh=PHCkakb/TcmDUWcGRY5t8jt224jdXO//0JF05RTveHw=; b=3kKa+YYOSLt2HYCdEXpn6fMqqK sRe2j0JhyNB4Hrmb/1uhwmMaICVOnWKoVS5pij9RrO3RXZxgv0Gcvz4uqDGrXlqxiNxA9PF0rM72K noT0CRGaoQ7gOynY86Gwvl7MYJDE84l4620Ea+W4/zBlDNVvNATt2kIT+6llL5ezWP/LVr+ags63Y 0c1z5R59ssGIweUkc8Gv6WIE7u/gZd79oUDaWEeQhdmgy1ShbW5FsZ183UGovBgDcM4DsGetkCeVT lUEUbTKFApNbwkuHkTM2JSn5vvErUXXv7jtLtiXhup7v2fWnPYwliM7/CQ8/hLznqEVVwdTiX73lz uGW+afCw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.100.1 #2 (Red Hat Linux)) id 1xP2tn-0000000AIg4-1q0p; Thu, 05 Nov 2026 19:13:23 +0000 Received: from sea.source.kernel.org ([2600:3c0a:e001:78e:0:1991:8:25]) by bombadil.infradead.org with esmtps (Exim 4.100.1 #2 (Red Hat Linux)) id 1xP2tm-0000000AIfx-32jR for linux-mtd@lists.infradead.org; Thu, 05 Nov 2026 19:13:22 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 0502441B33; Thu, 5 Nov 2026 19:13:22 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id C9C151F000C1; Thu, 5 Nov 2026 19:13:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1793906001; bh=bWoUw0v85zV3qDcWRLloegiWXI8H90sykJZsNR/TAqw=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=lCgVm33RLYIh8TNpmuCn12/xAde129MgnsOWokB3gB6Rv91jNMzmtOSM257Ty9a7N 2e/SKFKpw1DOZe70ojYG0BZqOUu/bOxnqFqPKtSfGkfEDaakQFFeoQ6C4uiT3eIX+m FUVnkJnAIULk52NAqho+YjViL9OsMWyVhVU6dKdskJOqEt7fpnQJVTyHjAO2V+nFDA dhgTSRbkn4RZzfNe+5+HAHoPmopQe0uGJn1ylama7Q1583QpQpqYqTguX4twG4mfvr dsr9nonV2SFJUqJAgK5Lewr2vtbCbR65T5vRCoLXUS23ND2em+CVCdH+J0b2uAkdZq FcztQSYXaouUA== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH v10 01/26] mtd: rawnand: sunxi: centralize OOB handling To: "James Hilliard" , "Miquel Raynal" , "Richard Weinberger" , "Vignesh Raghavendra" , "Sebastian Andrzej Siewior" , "Clark Williams" , "Steven Rostedt" , "Rob Herring" , "Krzysztof Kozlowski" , "Conor Dooley" , "Philipp Zabel" Cc: "Chen-Yu Tsai" , "Jernej Skrabec" , "Samuel Holland" , "Maxime Ripard" , "Richard Genoud" , "Boris Brezillon" , "Masahiro Yamada" , "Brian Norris" , linux-mtd@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-rt-devel@lists.linux.dev, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org In-Reply-To: <20261105-submit-sunxi-nand-vendor-oob-layout-v1-v10-1-dca1f6ed29a8@gmail.com> References: <20261105-submit-sunxi-nand-vendor-oob-layout-v1-v10-0-dca1f6ed29a8@gmail.com> <20261105-submit-sunxi-nand-vendor-oob-layout-v1-v10-1-dca1f6ed29a8@gmail.com> Date: Thu, 05 Nov 2026 19:13:20 +0000 X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux MTD discussion mailing list List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: sashiko-reviews@lists.linux.dev X-Archived-By: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-mtd" X-Spam-Status: No, score=-8.9 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=4.0.1 X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on aws-us-west-2-korg-listserv-alma10-1 VGhhbmsgeW91IGZvciB5b3VyIGNvbnRyaWJ1dGlvbiEgU2FzaGlrbyBBSSByZXZpZXcgZm91bmQg MiBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6Ci0gW0hpZ2hdIG10ZDogcmF3bmFuZDog c3VueGk6IHByZW1hdHVyZSBvb2Jfb3BzIHNlbGVjdGlvbiBpbiBzdW54aV9uYW5kX2F0dGFjaF9j aGlwKCkKLSBbTWVkaXVtXSBtdGQ6IHJhd25hbmQ6IHN1bnhpOiB1bmFkZHJlc3NlZCBtYWludGFp bmVyIE5BQ0sgb24gdmVuZG9yIE9PQiBsYXlvdXQgb3BzCi0tCgpjb21taXQgOGZkYTVjOTlkOWJl ZmExNzcxNDE4NTE2ODI4ZjA0MGRlNjBjNTg0NQpBdXRob3I6IEphbWVzIEhpbGxpYXJkIDxqYW1l cy5oaWxsaWFyZDFAZ21haWwuY29tPgoKbXRkOiByYXduYW5kOiBzdW54aTogY2VudHJhbGl6ZSBP T0IgaGFuZGxpbmcKClRoaXMgY29tbWl0IGNlbnRyYWxpemVzIGhhcmR3YXJlIEVDQyByZXN1bHQg aW50ZXJwcmV0YXRpb24sIHByb3RlY3RlZCBPT0IKcmV0cmlldmFsLCBlcmFzZWQtY2h1bmsgY2hl Y2tpbmcsIGFuZCB1c2VyLWRhdGEgbGF5b3V0IHJlc2VydmF0aW9uIGJlaGluZApwZXItY2hpcCBz dW54aV9uZmNfb29iX29wcyBjYWxsYmFja3MgZm9yIGJvdGggUElPIGFuZCBETUEgcGF0aHMuCgo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3Jhdy9zdW54aV9uYW5kLmMgYi9kcml2ZXJz L210ZC9uYW5kL3Jhdy9zdW54aV9uYW5kLmMKPiBpbmRleCBmNDFmZWViZTQyNTcxLi44MDAwNmQx YTMzZDY4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvbXRkL25hbmQvcmF3L3N1bnhpX25hbmQuYwo+ ICsrKyBiL2RyaXZlcnMvbXRkL25hbmQvcmF3L3N1bnhpX25hbmQuYwpbIC4uLiBdCj4gQEAgLTIw NjYsNiArMjA5Niw1OCBAQCBzdGF0aWMgaW50IHN1bnhpX25mY19tYXhpbWl6ZV91c2VyX2RhdGEo c3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgdWludDMyX3Qgb29ic2l6ZQpbIC4uLiBdCj4gKy8qCj4g KyAqIEJvdGggbW9kZXMgdXNlIHRoZSBzYW1lIGxheW91dCBhbmQgRUNDIHBvbGljeS4gU2NyYW1i bGVkIHRyYW5zZmVycyBhbHNvCj4gKyAqIGNvbXBlbnNhdGUgdGhlIGZpcnN0IHR3byB1c2VyIGJ5 dGVzIHRvIGtlZXAgdGhlIG9uLWZsYXNoIEJCTSB1bm1vZGlmaWVkLgo+ICsgKi8KPiArc3RhdGlj IGNvbnN0IHN0cnVjdCBzdW54aV9uZmNfb29iX29wcyBzdW54aV9uZmNfcGxhaW5fb29iX29wcyA9 IHsKPiArCS5taW5fdXNlcl9kYXRhID0gc3VueGlfbmZjX29vYl9taW5fdXNlcl9kYXRhLAo+ICsJ LmluaXRfdXNlcl9kYXRhID0gc3VueGlfbmZjX29vYl9pbml0X3VzZXJfZGF0YSwKPiArCS5yZWFk X2JhdGNoID0gc3VueGlfbmZjX29vYl9yZWFkX2JhdGNoLAo+ICsJLmZpbmlzaF9yZWFkID0gc3Vu eGlfbmZjX29vYl9maW5pc2hfcmVhZCwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg c3VueGlfbmZjX29vYl9vcHMgc3VueGlfbmZjX3NjcmFtYmxlZF9wbGFpbl9iYm1fb29iX29wcyA9 IHsKPiArCS5taW5fdXNlcl9kYXRhID0gc3VueGlfbmZjX29vYl9taW5fdXNlcl9kYXRhLAo+ICsJ LmluaXRfdXNlcl9kYXRhID0gc3VueGlfbmZjX29vYl9pbml0X3VzZXJfZGF0YSwKPiArCS50cmFu c2Zvcm1fYmJtID0gc3VueGlfbmZjX3JhbmRvbWl6ZV9iYm0sCj4gKwkucmVhZF9iYXRjaCA9IHN1 bnhpX25mY19vb2JfcmVhZF9iYXRjaCwKPiArCS5maW5pc2hfcmVhZCA9IHN1bnhpX25mY19vb2Jf ZmluaXNoX3JlYWQsCj4gK307CgpbU2V2ZXJpdHk6IE1lZGl1bV0KQXMgcmVwb3J0ZWQgYnkgTWlx dWVsIFJheW5hbCBvbiB2NiBbMV0sIHRoZSBzZXJpZXMgYWRkaW5nIHN1cHBvcnQgZm9yIHRoZQp2 ZW5kb3Itc3BlY2lmaWMgQWxsd2lubmVyIHJhbmRvbWl6ZWQgT09CIGxheW91dCB3YXMgZGVjbGlu ZWQgZHVlIHRvCm1haW50YWluYWJpbGl0eSBjb25jZXJucyBhbmQga2VybmVsIHBvbGljeSBhZ2Fp bnN0IHZlbmRvci1zcGVjaWZpYyBOQU5ECmxheW91dHMsIHdpdGggYW4gaW52aXRhdGlvbiB0byBz dWJtaXQgb25seSB0aGUgc3RhbmRhbG9uZSBmaXhlcyBvdXRzaWRlIG9mCnRoZSByYW5kb21pemVk IGxheW91dCBzdXBwb3J0LgoKSGVyZSwgc3VueGlfbmZjX3BsYWluX29vYl9vcHMgYW5kIHN1bnhp X25mY19zY3JhbWJsZWRfcGxhaW5fYmJtX29vYl9vcHMgdXNlCmlkZW50aWNhbCBjYWxsYmFja3Mg Zm9yIG1pbl91c2VyX2RhdGEsIGluaXRfdXNlcl9kYXRhLCByZWFkX2JhdGNoLCBhbmQKZmluaXNo X3JlYWQsIGRpZmZlcmluZyBvbmx5IGluIHRyYW5zZm9ybV9iYm0uIFRoZSByZW1haW5pbmcgaW5k aXJlY3Rpb24gaW4Kc3RydWN0IHN1bnhpX25mY19vb2Jfb3BzIGlzIG9ubHkgdXNlZCBieSB0aGUg dmVuZG9yLXNwZWNpZmljIHJhbmRvbWl6ZWQgT09CCmxheW91dCBwYXRjaCBsYXRlciBpbiB0aGUg c2VyaWVzLgoKQ291bGQgdGhlIFBJTyBhbmQgRE1BIEVDQyByZWFkIGhlbHBlcnMgYmUgc2hhcmVk IGRpcmVjdGx5IGFuZCB0aGUgc3RhbmRhbG9uZQpmaXhlcyBzcGxpdCBvdXQgd2l0aG91dCBpbnRy b2R1Y2luZyB0aGUgc3RydWN0IHN1bnhpX25mY19vb2Jfb3BzIHZ0YWJsZT8KClsgLi4uIF0KPiBA QCAtMjI1NCw2ICsyMzAzLDkgQEAgc3RhdGljIGludCBzdW54aV9uYW5kX2F0dGFjaF9jaGlwKHN0 cnVjdCBuYW5kX2NoaXAgKm5hbmQpCj4gIAlpZiAoIWVjYy0+c2l6ZSB8fCAhZWNjLT5zdHJlbmd0 aCkKPiAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgCj4gKwlzdW54aV9uYW5kLT5vb2Jfb3BzID0gbmFu ZC0+b3B0aW9ucyAmIE5BTkRfTkVFRF9TQ1JBTUJMSU5HID8KPiArCQkmc3VueGlfbmZjX3NjcmFt YmxlZF9wbGFpbl9iYm1fb29iX29wcyA6ICZzdW54aV9uZmNfcGxhaW5fb29iX29wczsKCltTZXZl cml0eTogSGlnaF0KRG9lcyBzZWxlY3Rpbmcgc3VueGlfbmFuZC0+b29iX29wcyBpbiBzdW54aV9u YW5kX2F0dGFjaF9jaGlwKCkgYnJlYWsgYmFkCmJsb2NrIG1hcmtlciBjb21wZW5zYXRpb24gZm9y IGNoaXBzIHRoYXQgc2V0IE5BTkRfTkVFRF9TQ1JBTUJMSU5HIGR1cmluZwpuYW5kX21hbnVmYWN0 dXJlcl9pbml0KCk/CgpJbiBuYW5kX3NjYW5fd2l0aF9pZHMoKSwgbmFuZF9hdHRhY2goKSBydW5z IGJlZm9yZSBuYW5kX3NjYW5fdGFpbCgpOgoKICBuYW5kX3NjYW5fd2l0aF9pZHMoKQogICAgLT4g bmFuZF9zY2FuX2lkZW50KCkKICAgIC0+IG5hbmRfYXR0YWNoKCkKICAgICAgLT4gc3VueGlfbmFu ZF9hdHRhY2hfY2hpcCgpCiAgICAtPiBuYW5kX3NjYW5fdGFpbCgpCiAgICAgIC0+IG5hbmRfbWFu dWZhY3R1cmVyX2luaXQoKQoKRm9yIE9ORkktY29tcGxpYW50IGNoaXBzIHdoZXJlIG5hbmRfb25m aV9kZXRlY3QoKSBzdWNjZWVkcyBpbiBuYW5kX2RldGVjdCgpCmFuZCBqdW1wcyB0byBpZGVudF9k b25lIHdpdGhvdXQgc2V0dGluZyBOQU5EX05FRURfU0NSQU1CTElORywgdGhlIGZsYWcgY2FuCmJl IHNldCBsYXRlciBpbiBuYW5kX21hbnVmYWN0dXJlcl9pbml0KCksIHN1Y2ggYXMgaW4KZHJpdmVy cy9tdGQvbmFuZC9yYXcvbmFuZF90b3NoaWJhLmM6CgogIHRvc2hpYmFfbmFuZF9pbml0KCkKICAg IC0+IHRjNTh0ZWc1ZGNsdGEwMF9pbml0KCkKICAgICAgY2hpcC0+b3B0aW9ucyB8PSBOQU5EX05F RURfU0NSQU1CTElORzsKCkJlY2F1c2Ugc3VueGlfbmFuZF9hdHRhY2hfY2hpcCgpIHJ1bnMgYmVm b3JlIG5hbmRfbWFudWZhY3R1cmVyX2luaXQoKSwKc3VueGlfbmFuZC0+b29iX29wcyBpcyBsYXRj aGVkIHRvIHN1bnhpX25mY19wbGFpbl9vb2Jfb3BzICh3aGVyZQp0cmFuc2Zvcm1fYmJtIGlzIE5V TEwpLiBMYXRlciwgZHVyaW5nIHBhZ2UgYW5kIE9PQiByZWFkcyBhbmQgd3JpdGVzLApzdW54aV9u ZmNfcmFuZG9taXplcl9jb25maWcoKSBhbmQgc3VueGlfbmZjX3JhbmRvbWl6ZXJfZW5hYmxlKCkg ZHluYW1pY2FsbHkKY2hlY2sgbmFuZC0+b3B0aW9ucyAmIE5BTkRfTkVFRF9TQ1JBTUJMSU5HIGFu ZCBlbmFibGUgaGFyZHdhcmUgc2NyYW1ibGluZywKd2hpbGUgc3VueGlfbmZjX2h3X2VjY19nZXRf cHJvdF9vb2JfYnl0ZXMoKSBhbmQKc3VueGlfbmZjX2h3X2VjY19zZXRfcHJvdF9vb2JfYnl0ZXMo KSBjaGVjayBzdW54aV9uYW5kLT5vb2Jfb3BzLT50cmFuc2Zvcm1fYmJtCmFuZCBza2lwIGNhbGxp bmcgc3VueGlfbmZjX3JhbmRvbWl6ZV9iYm0oKS4KClsxXSBodHRwczovL2xvcmUua2VybmVsLm9y Zy9yLzg3MXA5djRhMXguZnNmQGJvb3RsaW4uY29tCgotLSAKU2FzaGlrbyBBSSByZXZpZXcgwrcg aHR0cHM6Ly9zYXNoaWtvLmRldi8jL3BhdGNoc2V0LzIwMjYxMTA1LXN1Ym1pdC1zdW54aS1uYW5k LXZlbmRvci1vb2ItbGF5b3V0LXYxLXYxMC0wLWRjYTFmNmVkMjlhOEBnbWFpbC5jb20/cGFydD0x CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K TGludXggTVREIGRpc2N1c3Npb24gbWFpbGluZyBsaXN0Cmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQu b3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtbXRkLwo=