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=1794430278; b=J6RTIHkNVA0VFfykvFvwjhMAkNcTCO8UKrxNbivoEiMAfZx8edJLq35fxo6DvqY3rOTK 3tYGS1AC6ZyHe5Q0znpkHKfCD/eevhxpB/ULVZYCBeVG7C3tNedpedvrm1JcEKcliF8V5 ePgF2mZiD5IaJPk6CiobPZuLfXqGZYuMkYCgCFNxzJeQhEK8XASt8WmOZFEVwammhVslE T6ZzlPcCEfgxUM5ABANfaHwBghJr+qB0dtmzGalfVnwpQpWC8eZ3sD3+zFJoA7PT+ygNf lmqVmrrFb+yIGuRmwufBjPi0CxVl+o0/m5AoGDxl4bg59sUxro+w9gYwLoRNoOQKOZQ== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1794430278; h=Received:DKIM-Signature:Message-ID:From:Subject:Reply-To:To:Cc: In-Reply-To:References:Content-Type:Content-Transfer-Encoding:Date; bh=WOiuDiF2XEYlTdQA27sRYfJM0Crm9B+gOIZsE4HZATc=; b=WlTIlmOzbe9nd+HYU6V1O88y1Jt32zYMPC8XDNuKx50ZOHTtIr+YpSQYUVVS2VZ8JThl fY8QLX9SK90cNt+GYZuGufifenVC2Zm0oj6NvhV7Ksg+SQ3cdlDetFiwRukUciT4wl+na 4MNwLJdVZ29uv6KARGg8wcKzxB+FHmuPQSvXg2gXSwaO+ndbejYtJmgl7sRzfXUk43J1I BudZyu/IQJhM3CkowBSBrInRS9dYpNv53QmAXblFXnw51gPoiw814BW1Juy/spYCUqiV/ wXxKNR2ihPaRZivPpVKyqyK24Ju74l0y3ACJvw+HnZGw/yRYyDfn+n4vGHURYOo3zJQ== 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=CrfDc+Hy; 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 C2270606A31C for ; Wed, 11 Nov 2026 20:51:18 +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=CrfDc+Hy Received: by smtp.kernel.org (Postfix) with ESMTPSA id B3F181F00A05; Wed, 11 Nov 2026 20:51:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1794430278; bh=WOiuDiF2XEYlTdQA27sRYfJM0Crm9B+gOIZsE4HZATc=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=CrfDc+Hy+9PQ3UXYy2/DTgGxdwZDhnT289vcSjto+DnwAzJaXUHgMkg0WlwIC0/iN rPxmfnSFjIRMk0/URrPPXWwHgOJRqlOezVYmEvHfVghNTXHoFh7l4pMvdAj5akn1mZ /VjclswGdk1PJVtefiHkXEGNHU9K/D5wLnj9ciZMy5gNF+VMUt/9+0MowM+6+qYDKr svgtFMOwe4n6FT6X/UHo+JheV8lpBP6qjUUvV7fZLow2bRMVkd21o3RlbV2wobwQMH IIPmAHWxgVz4YW8SrWd99XfAHJ2QVb0KRWlls7/Ns8P4eufSoHz+I3Ghqpk6LYHjbl 0cyxukZMjRZ+g== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH 1/1] mtd: nand: raw: use dmaengine accessor API functions Reply-To: sashiko-reviews@lists.linux.dev To: Frank.Li@oss.nxp.com, "Miquel Raynal" , "Richard Weinberger" , "Vignesh Raghavendra" , "Frank Li" , "Alok Tiwari" , "Runyu Xiao" , "Chen Ni" , "Kees Cook" , "Hemanth Selam" , =?utf-8?b?b3BlbiBsaXN0OkNBREVOQ0UgTkFO?= =?utf-8?b?RCBEUklWRVI=?= Cc: imx@lists.linux.dev, Frank.Li@kernel.org In-Reply-To: <20261111202502.3860647-1-Frank.Li@oss.nxp.com> References: <20261111202502.3860647-1-Frank.Li@oss.nxp.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Wed, 11 Nov 2026 20:51:17 +0000 X-Mailing-List: imx@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 1 potential issue to consider: - [Medium] mtd: rawnand: cadence: unmap device mismatch in cadence_nand_remove() It also noticed 1 related pre-existing issue this patch does not introduce: - [Critical] mtd: rawnand: fsmc: missing reinit_completion() in dma_xfer() [1] -- commit 9eda52238f6d5af7214b32eeb0870d65126ccf3d Author: Frank Li mtd: nand: raw: use dmaengine accessor API functions This commit replaces direct chan->device and device_prep_dma_memcpy() accesses in the Cadence and FSMC raw NAND drivers with dmaengine_get_dma_device() and dmaengine_prep_dma_memcpy(). > diff --git a/drivers/mtd/nand/raw/cadence-nand-controller.c b/drivers/mtd= /nand/raw/cadence-nand-controller.c > index 2085632631c02..5e3d34f24f9d9 100644 > --- a/drivers/mtd/nand/raw/cadence-nand-controller.c > +++ b/drivers/mtd/nand/raw/cadence-nand-controller.c [ ... ] > @@ -3170,12 +3170,12 @@ static int cadence_nand_init(struct cdns_nand_ctr= l *cdns_ctrl) > } > } > =20 > - dma_dev =3D cdns_ctrl->dmac->device; > - cdns_ctrl->io.iova_dma =3D dma_map_resource(dma_dev->dev, cdns_ctrl->io= .dma, > + dma_dev =3D dmaengine_get_dma_device(cdns_ctrl->dmac); > + cdns_ctrl->io.iova_dma =3D dma_map_resource(dma_dev, cdns_ctrl->io.dma, > cdns_ctrl->io.size, > DMA_BIDIRECTIONAL, 0); > =20 > - ret =3D dma_mapping_error(dma_dev->dev, cdns_ctrl->io.iova_dma); > + ret =3D dma_mapping_error(dma_dev, cdns_ctrl->io.iova_dma); > if (ret) { > dev_err(cdns_ctrl->dev, "Failed to map I/O resource to DMA\n"); > goto dma_release_chnl; > @@ -3204,7 +3204,7 @@ static int cadence_nand_init(struct cdns_nand_ctrl = *cdns_ctrl) > return 0; > =20 > unmap_dma_resource: > - dma_unmap_resource(dma_dev->dev, cdns_ctrl->io.iova_dma, > + dma_unmap_resource(dma_dev, cdns_ctrl->io.iova_dma, > cdns_ctrl->io.size, DMA_BIDIRECTIONAL, 0); > =20 > dma_release_chnl: [Severity: Medium] Should cadence_nand_remove() also use dmaengine_get_dma_device() when unmapping cdns_ctrl->io.iova_dma? drivers/mtd/nand/raw/cadence-nand-controller.c:cadence_nand_remove() { ... if (cdns_ctrl->dmac) dma_unmap_resource(cdns_ctrl->dmac->device->dev, cdns_ctrl->io.iova_dma, cdns_ctrl->io.size, DMA_BIDIRECTIONAL, 0); ... } When chan->dev->chan_dma_dev is set, dmaengine_get_dma_device() returns &chan->dev->device rather than chan->device->dev, so cadence_nand_remove() unmaps the resource against a different struct device than cadence_nand_init() used to map it, leaking the mapping on driver removal. It also leaves a direct dereference of struct dma_device. > diff --git a/drivers/mtd/nand/raw/fsmc_nand.c b/drivers/mtd/nand/raw/fsmc= _nand.c > index b13b2b0c3f300..831293a5bd814 100644 > --- a/drivers/mtd/nand/raw/fsmc_nand.c > +++ b/drivers/mtd/nand/raw/fsmc_nand.c > @@ -486,7 +486,7 @@ static int dma_xfer(struct fsmc_nand_data *host, void= *buffer, int len, > enum dma_data_direction direction) > { > struct dma_chan *chan; > - struct dma_device *dma_dev; > + struct device *dma_dev; > struct dma_async_tx_descriptor *tx; > dma_addr_t dma_dst, dma_src, dma_addr; > dma_cookie_t cookie; > @@ -501,9 +501,9 @@ static int dma_xfer(struct fsmc_nand_data *host, void= *buffer, int len, > else > return -EINVAL; > =20 > - dma_dev =3D chan->device; > - dma_addr =3D dma_map_single(dma_dev->dev, buffer, len, direction); > - if (dma_mapping_error(dma_dev->dev, dma_addr)) > + dma_dev =3D dmaengine_get_dma_device(chan); > + dma_addr =3D dma_map_single(dma_dev, buffer, len, direction); > + if (dma_mapping_error(dma_dev, dma_addr)) > return -EINVAL; > =20 > if (direction =3D=3D DMA_TO_DEVICE) { > @@ -514,8 +514,7 @@ static int dma_xfer(struct fsmc_nand_data *host, void= *buffer, int len, > dma_dst =3D dma_addr; > } > =20 > - tx =3D dma_dev->device_prep_dma_memcpy(chan, dma_dst, dma_src, > - len, flags); > + tx =3D dmaengine_prep_dma_memcpy(chan, dma_dst, dma_src, len, flags); > if (!tx) { > dev_err(host->dev, "device_prep_dma_memcpy error\n"); > ret =3D -EIO; > @@ -547,7 +546,7 @@ static int dma_xfer(struct fsmc_nand_data *host, void= *buffer, int len, > ret =3D 0; > =20 > unmap_dma: > - dma_unmap_single(dma_dev->dev, dma_addr, len, direction); > + dma_unmap_single(dma_dev, dma_addr, len, direction); > =20 > return ret; > } [Severity: Critical] This problem wasn't introduced by this patch, but can dma_xfer() unmap dma_addr while the DMA transfer is still in flight [1]? If an earlier transfer times out and its callback fires late, host->dma_access_complete is left signaled. Because dma_xfer() does not call reinit_completion(&host->dma_access_complete) before submitting a new transfer, wait_for_completion_timeout() consumes the stale completion and returns immediately, so dma_unmap_single() runs while hardware DMA is still active on buffer. [1] https://sashiko.dev/#/bug/linux-836e69de-023a-4bd2-8b41-03e05feb8137 --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20261111202502.3860= 647-1-Frank.Li@oss.nxp.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 682D3606A321 for ; Wed, 11 Nov 2026 20:51:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=3Th7d5KB; dkim=fail reason="signature verification failed" (2048-bit key) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=CrfDc+Hy 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=LKA6Fgwun7VtTYeM2+tSFQNOH9/JX6Q/1Wx2gsG+Mwk=; b=3Th7d5KBsmxPJ1iDmQo7kANK9l xxMJq316yE7FaV5Sovfn4gAo7p3mdcApX1DxMWZAQ7viiO36ZKXybU1tecE5B3j1S8XRldiVfMm/M oZEnlOJmIOFx46uWcBY7Zm3x+fhptrftg5JQzOPrZTRdhAbgwVIopaWz32CZHTNzlJd08UqFaizRY 7OPhZs8maNCI7Q6DrIF5vM9Jl78+tpUZQcgNixOcZrnx8QbQKT1NX4RYcY88SFm53UUvMpSD3JwpJ 7vFIcbQTQug0M2LvtWDtERQ63UP3S5Bs/I51+OVbWxymZfgbzqZo+WD8DLo4IlPKcEJQU0bHsIM1Y SMiKAlPA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.100.1 #2 (Red Hat Linux)) id 1xRFHs-00000007gjD-1uZ0; Wed, 11 Nov 2026 20:51:20 +0000 Received: from sea.source.kernel.org ([172.234.252.31]) by bombadil.infradead.org with esmtps (Exim 4.100.1 #2 (Red Hat Linux)) id 1xRFHr-00000007gj7-0Swm for linux-mtd@lists.infradead.org; Wed, 11 Nov 2026 20:51:19 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 8BCA042DF7; Wed, 11 Nov 2026 20:51:18 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id B3F181F00A05; Wed, 11 Nov 2026 20:51:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1794430278; bh=WOiuDiF2XEYlTdQA27sRYfJM0Crm9B+gOIZsE4HZATc=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=CrfDc+Hy+9PQ3UXYy2/DTgGxdwZDhnT289vcSjto+DnwAzJaXUHgMkg0WlwIC0/iN rPxmfnSFjIRMk0/URrPPXWwHgOJRqlOezVYmEvHfVghNTXHoFh7l4pMvdAj5akn1mZ /VjclswGdk1PJVtefiHkXEGNHU9K/D5wLnj9ciZMy5gNF+VMUt/9+0MowM+6+qYDKr svgtFMOwe4n6FT6X/UHo+JheV8lpBP6qjUUvV7fZLow2bRMVkd21o3RlbV2wobwQMH IIPmAHWxgVz4YW8SrWd99XfAHJ2QVb0KRWlls7/Ns8P4eufSoHz+I3Ghqpk6LYHjbl 0cyxukZMjRZ+g== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH 1/1] mtd: nand: raw: use dmaengine accessor API functions To: Frank.Li@oss.nxp.com, "Miquel Raynal" , "Richard Weinberger" , "Vignesh Raghavendra" , "Frank Li" , "Alok Tiwari" , "Runyu Xiao" , "Chen Ni" , "Kees Cook" , "Hemanth Selam" , =?utf-8?b?b3BlbiBsaXN0OkNBREVOQ0UgTkFO?= =?utf-8?b?RCBEUklWRVI=?= Cc: imx@lists.linux.dev, Frank.Li@kernel.org In-Reply-To: <20261111202502.3860647-1-Frank.Li@oss.nxp.com> References: <20261111202502.3860647-1-Frank.Li@oss.nxp.com> Date: Wed, 11 Nov 2026 20:51:17 +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 MSBwb3RlbnRpYWwKaXNzdWUgdG8gY29uc2lkZXI6Ci0gW01lZGl1bV0gbXRkOiByYXduYW5kOiBj YWRlbmNlOiB1bm1hcCBkZXZpY2UgbWlzbWF0Y2ggaW4KICBjYWRlbmNlX25hbmRfcmVtb3ZlKCkK SXQgYWxzbyBub3RpY2VkIDEgcmVsYXRlZCBwcmUtZXhpc3RpbmcgaXNzdWUgdGhpcyBwYXRjaCBk b2VzIG5vdAppbnRyb2R1Y2U6Ci0gW0NyaXRpY2FsXSBtdGQ6IHJhd25hbmQ6IGZzbWM6IG1pc3Np bmcgcmVpbml0X2NvbXBsZXRpb24oKSBpbgogIGRtYV94ZmVyKCkgWzFdCi0tCgpjb21taXQgOWVk YTUyMjM4ZjZkNWFmNzIxNGIzMmVlYjA4NzBkNjUxMjZjY2YzZApBdXRob3I6IEZyYW5rIExpIDxG cmFuay5MaUBueHAuY29tPgoKbXRkOiBuYW5kOiByYXc6IHVzZSBkbWFlbmdpbmUgYWNjZXNzb3Ig QVBJIGZ1bmN0aW9ucwoKVGhpcyBjb21taXQgcmVwbGFjZXMgZGlyZWN0IGNoYW4tPmRldmljZSBh bmQgZGV2aWNlX3ByZXBfZG1hX21lbWNweSgpCmFjY2Vzc2VzIGluIHRoZSBDYWRlbmNlIGFuZCBG U01DIHJhdyBOQU5EIGRyaXZlcnMgd2l0aApkbWFlbmdpbmVfZ2V0X2RtYV9kZXZpY2UoKSBhbmQg ZG1hZW5naW5lX3ByZXBfZG1hX21lbWNweSgpLgoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQv bmFuZC9yYXcvY2FkZW5jZS1uYW5kLWNvbnRyb2xsZXIuYyBiL2RyaXZlcnMvbXRkL25hbmQvcmF3 L2NhZGVuY2UtbmFuZC1jb250cm9sbGVyLmMKPiBpbmRleCAyMDg1NjMyNjMxYzAyLi41ZTNkMzRm MjRmOWQ5IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvbXRkL25hbmQvcmF3L2NhZGVuY2UtbmFuZC1j b250cm9sbGVyLmMKPiArKysgYi9kcml2ZXJzL210ZC9uYW5kL3Jhdy9jYWRlbmNlLW5hbmQtY29u dHJvbGxlci5jClsgLi4uIF0KPiBAQCAtMzE3MCwxMiArMzE3MCwxMiBAQCBzdGF0aWMgaW50IGNh ZGVuY2VfbmFuZF9pbml0KHN0cnVjdCBjZG5zX25hbmRfY3RybCAqY2Ruc19jdHJsKQo+ICAJCX0K PiAgCX0KPiAgCj4gLQlkbWFfZGV2ID0gY2Ruc19jdHJsLT5kbWFjLT5kZXZpY2U7Cj4gLQljZG5z X2N0cmwtPmlvLmlvdmFfZG1hID0gZG1hX21hcF9yZXNvdXJjZShkbWFfZGV2LT5kZXYsIGNkbnNf Y3RybC0+aW8uZG1hLAo+ICsJZG1hX2RldiA9IGRtYWVuZ2luZV9nZXRfZG1hX2RldmljZShjZG5z X2N0cmwtPmRtYWMpOwo+ICsJY2Ruc19jdHJsLT5pby5pb3ZhX2RtYSA9IGRtYV9tYXBfcmVzb3Vy Y2UoZG1hX2RldiwgY2Ruc19jdHJsLT5pby5kbWEsCj4gIAkJCQkJCSAgY2Ruc19jdHJsLT5pby5z aXplLAo+ICAJCQkJCQkgIERNQV9CSURJUkVDVElPTkFMLCAwKTsKPiAgCj4gLQlyZXQgPSBkbWFf bWFwcGluZ19lcnJvcihkbWFfZGV2LT5kZXYsIGNkbnNfY3RybC0+aW8uaW92YV9kbWEpOwo+ICsJ cmV0ID0gZG1hX21hcHBpbmdfZXJyb3IoZG1hX2RldiwgY2Ruc19jdHJsLT5pby5pb3ZhX2RtYSk7 Cj4gIAlpZiAocmV0KSB7Cj4gIAkJZGV2X2VycihjZG5zX2N0cmwtPmRldiwgIkZhaWxlZCB0byBt YXAgSS9PIHJlc291cmNlIHRvIERNQVxuIik7Cj4gIAkJZ290byBkbWFfcmVsZWFzZV9jaG5sOwo+ IEBAIC0zMjA0LDcgKzMyMDQsNyBAQCBzdGF0aWMgaW50IGNhZGVuY2VfbmFuZF9pbml0KHN0cnVj dCBjZG5zX25hbmRfY3RybCAqY2Ruc19jdHJsKQo+ICAJcmV0dXJuIDA7Cj4gIAo+ICB1bm1hcF9k bWFfcmVzb3VyY2U6Cj4gLQlkbWFfdW5tYXBfcmVzb3VyY2UoZG1hX2Rldi0+ZGV2LCBjZG5zX2N0 cmwtPmlvLmlvdmFfZG1hLAo+ICsJZG1hX3VubWFwX3Jlc291cmNlKGRtYV9kZXYsIGNkbnNfY3Ry bC0+aW8uaW92YV9kbWEsCj4gIAkJCSAgIGNkbnNfY3RybC0+aW8uc2l6ZSwgRE1BX0JJRElSRUNU SU9OQUwsIDApOwo+ICAKPiAgZG1hX3JlbGVhc2VfY2hubDoKCltTZXZlcml0eTogTWVkaXVtXQpT aG91bGQgY2FkZW5jZV9uYW5kX3JlbW92ZSgpIGFsc28gdXNlIGRtYWVuZ2luZV9nZXRfZG1hX2Rl dmljZSgpIHdoZW4KdW5tYXBwaW5nIGNkbnNfY3RybC0+aW8uaW92YV9kbWE/Cgpkcml2ZXJzL210 ZC9uYW5kL3Jhdy9jYWRlbmNlLW5hbmQtY29udHJvbGxlci5jOmNhZGVuY2VfbmFuZF9yZW1vdmUo KSB7CgkuLi4KCWlmIChjZG5zX2N0cmwtPmRtYWMpCgkJZG1hX3VubWFwX3Jlc291cmNlKGNkbnNf Y3RybC0+ZG1hYy0+ZGV2aWNlLT5kZXYsCgkJCQkgICBjZG5zX2N0cmwtPmlvLmlvdmFfZG1hLCBj ZG5zX2N0cmwtPmlvLnNpemUsCgkJCQkgICBETUFfQklESVJFQ1RJT05BTCwgMCk7CgkuLi4KfQoK V2hlbiBjaGFuLT5kZXYtPmNoYW5fZG1hX2RldiBpcyBzZXQsIGRtYWVuZ2luZV9nZXRfZG1hX2Rl dmljZSgpIHJldHVybnMKJmNoYW4tPmRldi0+ZGV2aWNlIHJhdGhlciB0aGFuIGNoYW4tPmRldmlj ZS0+ZGV2LCBzbyBjYWRlbmNlX25hbmRfcmVtb3ZlKCkKdW5tYXBzIHRoZSByZXNvdXJjZSBhZ2Fp bnN0IGEgZGlmZmVyZW50IHN0cnVjdCBkZXZpY2UgdGhhbgpjYWRlbmNlX25hbmRfaW5pdCgpIHVz ZWQgdG8gbWFwIGl0LCBsZWFraW5nIHRoZSBtYXBwaW5nIG9uIGRyaXZlciByZW1vdmFsLgpJdCBh bHNvIGxlYXZlcyBhIGRpcmVjdCBkZXJlZmVyZW5jZSBvZiBzdHJ1Y3QgZG1hX2RldmljZS4KCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvcmF3L2ZzbWNfbmFuZC5jIGIvZHJpdmVycy9t dGQvbmFuZC9yYXcvZnNtY19uYW5kLmMKPiBpbmRleCBiMTNiMmIwYzNmMzAwLi44MzEyOTNhNWJk ODE0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvbXRkL25hbmQvcmF3L2ZzbWNfbmFuZC5jCj4gKysr IGIvZHJpdmVycy9tdGQvbmFuZC9yYXcvZnNtY19uYW5kLmMKPiBAQCAtNDg2LDcgKzQ4Niw3IEBA IHN0YXRpYyBpbnQgZG1hX3hmZXIoc3RydWN0IGZzbWNfbmFuZF9kYXRhICpob3N0LCB2b2lkICpi dWZmZXIsIGludCBsZW4sCj4gIAkJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlv bikKPiAgewo+ICAJc3RydWN0IGRtYV9jaGFuICpjaGFuOwo+IC0Jc3RydWN0IGRtYV9kZXZpY2Ug KmRtYV9kZXY7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2Owo+ICAJc3RydWN0IGRtYV9hc3lu Y190eF9kZXNjcmlwdG9yICp0eDsKPiAgCWRtYV9hZGRyX3QgZG1hX2RzdCwgZG1hX3NyYywgZG1h X2FkZHI7Cj4gIAlkbWFfY29va2llX3QgY29va2llOwo+IEBAIC01MDEsOSArNTAxLDkgQEAgc3Rh dGljIGludCBkbWFfeGZlcihzdHJ1Y3QgZnNtY19uYW5kX2RhdGEgKmhvc3QsIHZvaWQgKmJ1ZmZl ciwgaW50IGxlbiwKPiAgCWVsc2UKPiAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgCj4gLQlkbWFfZGV2 ID0gY2hhbi0+ZGV2aWNlOwo+IC0JZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShkbWFfZGV2LT5k ZXYsIGJ1ZmZlciwgbGVuLCBkaXJlY3Rpb24pOwo+IC0JaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRt YV9kZXYtPmRldiwgZG1hX2FkZHIpKQo+ICsJZG1hX2RldiA9IGRtYWVuZ2luZV9nZXRfZG1hX2Rl dmljZShjaGFuKTsKPiArCWRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUoZG1hX2RldiwgYnVmZmVy LCBsZW4sIGRpcmVjdGlvbik7Cj4gKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZG1hX2RldiwgZG1h X2FkZHIpKQo+ICAJCXJldHVybiAtRUlOVkFMOwo+ICAKPiAgCWlmIChkaXJlY3Rpb24gPT0gRE1B X1RPX0RFVklDRSkgewo+IEBAIC01MTQsOCArNTE0LDcgQEAgc3RhdGljIGludCBkbWFfeGZlcihz dHJ1Y3QgZnNtY19uYW5kX2RhdGEgKmhvc3QsIHZvaWQgKmJ1ZmZlciwgaW50IGxlbiwKPiAgCQlk bWFfZHN0ID0gZG1hX2FkZHI7Cj4gIAl9Cj4gIAo+IC0JdHggPSBkbWFfZGV2LT5kZXZpY2VfcHJl cF9kbWFfbWVtY3B5KGNoYW4sIGRtYV9kc3QsIGRtYV9zcmMsCj4gLQkJCWxlbiwgZmxhZ3MpOwo+ ICsJdHggPSBkbWFlbmdpbmVfcHJlcF9kbWFfbWVtY3B5KGNoYW4sIGRtYV9kc3QsIGRtYV9zcmMs IGxlbiwgZmxhZ3MpOwo+ICAJaWYgKCF0eCkgewo+ICAJCWRldl9lcnIoaG9zdC0+ZGV2LCAiZGV2 aWNlX3ByZXBfZG1hX21lbWNweSBlcnJvclxuIik7Cj4gIAkJcmV0ID0gLUVJTzsKPiBAQCAtNTQ3 LDcgKzU0Niw3IEBAIHN0YXRpYyBpbnQgZG1hX3hmZXIoc3RydWN0IGZzbWNfbmFuZF9kYXRhICpo b3N0LCB2b2lkICpidWZmZXIsIGludCBsZW4sCj4gIAlyZXQgPSAwOwo+ICAKPiAgdW5tYXBfZG1h Ogo+IC0JZG1hX3VubWFwX3NpbmdsZShkbWFfZGV2LT5kZXYsIGRtYV9hZGRyLCBsZW4sIGRpcmVj dGlvbik7Cj4gKwlkbWFfdW5tYXBfc2luZ2xlKGRtYV9kZXYsIGRtYV9hZGRyLCBsZW4sIGRpcmVj dGlvbik7Cj4gIAo+ICAJcmV0dXJuIHJldDsKPiAgfQoKW1NldmVyaXR5OiBDcml0aWNhbF0KVGhp cyBwcm9ibGVtIHdhc24ndCBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIGJ1dCBjYW4gZG1hX3hm ZXIoKSB1bm1hcApkbWFfYWRkciB3aGlsZSB0aGUgRE1BIHRyYW5zZmVyIGlzIHN0aWxsIGluIGZs aWdodCBbMV0/CgpJZiBhbiBlYXJsaWVyIHRyYW5zZmVyIHRpbWVzIG91dCBhbmQgaXRzIGNhbGxi YWNrIGZpcmVzIGxhdGUsCmhvc3QtPmRtYV9hY2Nlc3NfY29tcGxldGUgaXMgbGVmdCBzaWduYWxl ZC4gIEJlY2F1c2UgZG1hX3hmZXIoKSBkb2VzIG5vdApjYWxsIHJlaW5pdF9jb21wbGV0aW9uKCZo b3N0LT5kbWFfYWNjZXNzX2NvbXBsZXRlKSBiZWZvcmUgc3VibWl0dGluZyBhIG5ldwp0cmFuc2Zl ciwgd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCkgY29uc3VtZXMgdGhlIHN0YWxlIGNvbXBs ZXRpb24gYW5kCnJldHVybnMgaW1tZWRpYXRlbHksIHNvIGRtYV91bm1hcF9zaW5nbGUoKSBydW5z IHdoaWxlIGhhcmR3YXJlIERNQSBpcwpzdGlsbCBhY3RpdmUgb24gYnVmZmVyLgoKWzFdIGh0dHBz Oi8vc2FzaGlrby5kZXYvIy9idWcvbGludXgtODM2ZTY5ZGUtMDIzYS00YmQyLThiNDEtMDNlMDVm ZWI4MTM3CgotLSAKU2FzaGlrbyBBSSByZXZpZXcgwrcgaHR0cHM6Ly9zYXNoaWtvLmRldi8jL3Bh dGNoc2V0LzIwMjYxMTExMjAyNTAyLjM4NjA2NDctMS1GcmFuay5MaUBvc3MubnhwLmNvbT9wYXJ0 PTEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpMaW51eCBNVEQgZGlzY3Vzc2lvbiBtYWlsaW5nIGxpc3QKaHR0cDovL2xpc3RzLmluZnJhZGVh ZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1tdGQvCg==