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=1794549144; b=1L++BGIuAm+ewYibAptfpbXq5Pd0rPcJ42knSrW2GzCiWokHn+rdIlNu0JtVVMM7bfwr Ooxzifjo1jCqjdVp4FjXZyPTftXg5+hazGH2Oxblr3cGK+BgT8NCpd9mFn289yKV9BqsZ fNqXru0XXjuM3Y5rlJueqRoVJX7y1vdmNWulmGrB1p6mHTIMqv96XqsUMqwmOPL38EIVQ COEL/EWfWUryQ8ANi7kcVkI7fJ5BNlHD61TRULjd88A6tFIdxe1x+jCJR6MksjLShwSA1 WqVYsj1ylbWmE2igfdfZ+rm6QJ5F9wdqQoEk1u8oOMRucC2KqNVWkNtvHtAntGHYHYA== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1794549144; h=Received:DKIM-Signature:Message-ID:From:Subject:Reply-To:To:Cc: In-Reply-To:References:Content-Type:Content-Transfer-Encoding:Date; bh=kT/nLejiu9Xixr+tSvXnotmS7RR128r8JdPr3tiLUaE=; b=diEfxVZT18qlfeSZe4iSXNy3Vc8Enw2ZRDIN9pPorusDQ5+fpA2GpIDhG6WvCrklMIv5 wjiZRNZ3mMhQt22NxwRrA0uQAdoGGqvsjdOY137V3Bk2xCVAYFNSsLV+i6RL7UKYbSabl OXt/VeTyFDV7euIxepz9id4VfbDYxQZlZqgyxVr/37aMm0C4UrofTOeyuGGQz48xqALhO LNzOaHLjGA6zLIVR3gFxhIQfHPqlnMmYWqHCixIlXJqwAhRiZerkbxqpD5+l7R5AnnuaB V2Jg/77qKT7LgWLBwqIZV/xGKieajLwFS2yFZfXpZWQeJ7m6JM7EORIMiEvMdWLJb7Q== 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=Jx6P+5XH; 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 1DC3D606A321 for ; Fri, 13 Nov 2026 05:52:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=Jx6P+5XH Received: by smtp.kernel.org (Postfix) with ESMTPSA id 65D1D1F000C4; Fri, 13 Nov 2026 05:52:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1794549143; bh=kT/nLejiu9Xixr+tSvXnotmS7RR128r8JdPr3tiLUaE=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=Jx6P+5XH+TTNVtQQKUSPe75ZpWpn9MfQNkYA4F6xYQQcH8UrmXHixcUdfVvYSFpIS RrET3NWXG9IZ8ClBdzSH5wqVufCU1u7qdtiWwzMCbNbhhjPWiGzUZoQQjgVvZcc9Jr L5EiZcUkIIVjzQPc37j+R9PGqTATLQxgXlAgATYnhj3zVoP7g2xrDME3ZlbVytaEl3 l8wYcvrY3hdRbJZBLWz2cmFB50yWuKrYWwMQsbRWP8ByqHIUVyvULq8DiwlGGbeP3A euqhrQ0ypfi2iudwC8obB1B9F8s+W/UkBDZJnnewML49eb3wTlUe+zPJYAGj2dfIUt oWOOKMircFSsg== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH v25 10/15] media: qcom: camss: vfe: Add support for VFE 1080 Reply-To: sashiko-reviews@lists.linux.dev To: "Hangxiang Ma" Cc: linux-phy@lists.infradead.org, devicetree@vger.kernel.org, robh@kernel.org, conor+dt@kernel.org, media-ci@linuxtv.org, vkoul@kernel.org, neil.armstrong@linaro.org, olteanv@gmail.com In-Reply-To: <20261112-kaanapali-camss-v25-10-1d709f57f370@oss.qualcomm.com> References: <20261112-kaanapali-camss-v25-0-1d709f57f370@oss.qualcomm.com> <20261112-kaanapali-camss-v25-10-1d709f57f370@oss.qualcomm.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Fri, 13 Nov 2026 05:52:23 +0000 X-Mailing-List: devicetree@vger.kernel.org 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 issues to consider: - [High] media: qcom: camss: unsynchronized CSID RUP/AUP updates in vfe_ops_1080 - [Medium] media: qcom: camss: AUP_UPDATE count mismatch in vfe_enable_output_v2() -- commit c95e0ff891b19f6115d3c4df041126b33e4f1889 Author: Hangxiang Ma media: qcom: camss: vfe: Add support for VFE 1080 This commit adds hardware ops and resource definitions to support VFE (TFE) 1080 on the Qualcomm Kaanapali SoC. > diff --git a/drivers/media/platform/qcom/camss/camss-vfe-1080.c b/drivers= /media/platform/qcom/camss/camss-vfe-1080.c > new file mode 100644 > index 0000000000000..68798f13fbea8 > --- /dev/null > +++ b/drivers/media/platform/qcom/camss/camss-vfe-1080.c [ ... ] > +static void vfe_reg_update(struct vfe_device *vfe, enum vfe_line_id line= _id) > +{ > + int port_id =3D line_id; > + > + camss_reg_update(vfe->camss, vfe->id, port_id, false); > +} > + > +static void vfe_reg_update_clear(struct vfe_device *vfe, > + enum vfe_line_id line_id) > +{ > + int port_id =3D line_id; > + > + camss_reg_update(vfe->camss, vfe->id, port_id, true); > +} > + > +static void vfe_addr_update(struct vfe_device *vfe, enum vfe_line_id lin= e_id) > +{ > + int port_id =3D line_id; > + > + camss_addr_update(vfe->camss, vfe->id, port_id, false); > +} > + > +static void vfe_addr_update_clear(struct vfe_device *vfe, enum vfe_line_= id line_id) > +{ > + int port_id =3D line_id; > + > + camss_addr_update(vfe->camss, vfe->id, port_id, true); > +} [Severity: High] Can vfe_addr_update() and vfe_reg_update() race with csid_isr() on csid->addr_update and csid->reg_update? vfe_queue_buffer_v2() calls ops->addr_update() and ops->reg_update() under vfe->output_lock, which forward to __csid_addr_update() and __csid_reg_update(). Meanwhile, in camss-csid-1080.c, csid_isr() clears bits in csid->addr_update and csid->reg_update before calling camss_buf_done() (where vfe->output_lock is acquired): CPU0 CPU1 () vfe_queue_buffer_v2() csid_isr() spin_lock_irqsave(&vfe->output_lock) vfe_addr_update() ... csid->addr_update |=3D BIT(...) if (val & INFO_RUP_DONE) __csid_addr_update_clear() csid->addr_update &=3D ~BIT(...) writel(csid->addr_update, csid->base + CSID_AUP_CMD) <-- writes 0, losing update __csid_aup_rup_trigger(csid) Because csid_reset() only unmasks INFO_RST_DONE | BUF_DONE_IRQ_STATUS in CSID_TOP_IRQ_MASK, INFO_RUP_DONE stays latched until csid_isr() runs on BUF_DONE_IRQ_STATUS at the end of the frame. If userspace queues a buffer when output->gen2.active_num =3D=3D 1, the lost CSID_AUP_CMD or CSID_RUP_CMD write leaves the hardware without the queued buffer address and stalls capture. Multiple active RDI lines on the same CSID can also clobber each other's csid->addr_update and csid->reg_update bits. [ ... ] > +const struct vfe_hw_ops vfe_ops_1080 =3D { > + .addr_update =3D vfe_addr_update, > + .addr_update_clear =3D vfe_addr_update_clear, [Severity: Medium] Can starting a stream with fewer than two queued buffers mismatch the number of AUP_UPDATE requests against the buffers written to the write master? In camss-video.c, msm_video_register() leaves q->min_queued_buffers at 0, so VIDIOC_STREAMON can run vfe_enable_output_v2() with 0 or 1 buffer pending: drivers/media/platform/qcom/camss/camss-vfe.c:vfe_enable_output_v2() { ... for (i =3D 0; i < CAMSS_INIT_BUF_COUNT; i++) { output->buf[i] =3D vfe_buf_get_pending(output); if (!output->buf[i]) break; output->gen2.active_num++; ops->vfe_wm_update(vfe, output->wm_idx[0], output->buf[i]->addr[0], line); if (!ops->addr_update) ops->reg_update(vfe, line->id); } ... } csid_configure_stream() in camss-csid-1080.c then unconditionally issues CAMSS_INIT_BUF_COUNT (2) __csid_addr_update() calls even if 0 or 1 buffer address was programmed into VFE_BUS_WM_IMAGE_ADDR. When userspace later queues buffers while output->gen2.active_num < 2, vfe_queue_buffer_v2() calls ops->addr_update() again for each buffer, issuing 3 or 4 AUP_UPDATE requests for the first two buffers and violating the requirement that AUP_UPDATE requests match the number of buffers queued to the write master. --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20261112-kaanapali-= camss-v25-0-1d709f57f370@oss.qualcomm.com?part=3D10 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 2AD47606A321 for ; Fri, 13 Nov 2026 05:52:26 +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=zGZFNCWy; 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=Jx6P+5XH 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=B9/alBv3ydH+RbtSX67zJ61+VwAlOp6ppwFiWQByHMI=; b=zGZFNCWyKZ+gJcuPsuVX0wzfsh DwdAr8OOOLKMEOO64sH6si+m18vUtND6nh1k1LxpCN3qwfJaGKOyHZr0vooXQKYEWxzSTgqx1UqSB gBZf60oT9S4CRzVaPZlrhYkjUglk2PtnRsbU8JqtoRIIziumOPy1yw6wGOweYJKXMfbdzbx7cTOs0 XeGn9MWei9iNzRbFvNxVnRTmI/uZk6Ug5Wjqb5c4omof5wLvBFZ1KTP59osu1BQHObYJM+fIg9LbG LAqppD93mh5G6ZL6Lo2yyQ6s9GZJq2bKOjxxusdbQGT5TwGrCoCd3nyPhQqZ21ShOpQQCaSBEzD3W CfmL0nqQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.100.1 #2 (Red Hat Linux)) id 1xRkD3-0000000BjBu-3DHs; Fri, 13 Nov 2026 05:52:25 +0000 Received: from tor.source.kernel.org ([172.105.4.254]) by bombadil.infradead.org with esmtps (Exim 4.100.1 #2 (Red Hat Linux)) id 1xRkD2-0000000BjBT-2Ncw for linux-phy@lists.infradead.org; Fri, 13 Nov 2026 05:52:24 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id 090B86184A; Fri, 13 Nov 2026 05:52:24 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 65D1D1F000C4; Fri, 13 Nov 2026 05:52:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1794549143; bh=kT/nLejiu9Xixr+tSvXnotmS7RR128r8JdPr3tiLUaE=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=Jx6P+5XH+TTNVtQQKUSPe75ZpWpn9MfQNkYA4F6xYQQcH8UrmXHixcUdfVvYSFpIS RrET3NWXG9IZ8ClBdzSH5wqVufCU1u7qdtiWwzMCbNbhhjPWiGzUZoQQjgVvZcc9Jr L5EiZcUkIIVjzQPc37j+R9PGqTATLQxgXlAgATYnhj3zVoP7g2xrDME3ZlbVytaEl3 l8wYcvrY3hdRbJZBLWz2cmFB50yWuKrYWwMQsbRWP8ByqHIUVyvULq8DiwlGGbeP3A euqhrQ0ypfi2iudwC8obB1B9F8s+W/UkBDZJnnewML49eb3wTlUe+zPJYAGj2dfIUt oWOOKMircFSsg== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH v25 10/15] media: qcom: camss: vfe: Add support for VFE 1080 To: "Hangxiang Ma" Cc: linux-phy@lists.infradead.org, devicetree@vger.kernel.org, robh@kernel.org, conor+dt@kernel.org, media-ci@linuxtv.org, vkoul@kernel.org, neil.armstrong@linaro.org, olteanv@gmail.com In-Reply-To: <20261112-kaanapali-camss-v25-10-1d709f57f370@oss.qualcomm.com> References: <20261112-kaanapali-camss-v25-0-1d709f57f370@oss.qualcomm.com> <20261112-kaanapali-camss-v25-10-1d709f57f370@oss.qualcomm.com> Date: Fri, 13 Nov 2026 05:52:23 +0000 X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy 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-phy" 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 MiBwb3RlbnRpYWwKaXNzdWVzIHRvIGNvbnNpZGVyOgotIFtIaWdoXSBtZWRpYTogcWNvbTogY2Ft c3M6IHVuc3luY2hyb25pemVkIENTSUQgUlVQL0FVUCB1cGRhdGVzIGluCiAgdmZlX29wc18xMDgw Ci0gW01lZGl1bV0gbWVkaWE6IHFjb206IGNhbXNzOiBBVVBfVVBEQVRFIGNvdW50IG1pc21hdGNo IGluCiAgdmZlX2VuYWJsZV9vdXRwdXRfdjIoKQotLQoKY29tbWl0IGM5NWUwZmY4OTFiMTlmNjEx NWQzYzRkZjA0MTEyNmIzM2U0ZjE4ODkKQXV0aG9yOiBIYW5neGlhbmcgTWEgPGhhbmd4aWFuZy5t YUBvc3MucXVhbGNvbW0uY29tPgoKbWVkaWE6IHFjb206IGNhbXNzOiB2ZmU6IEFkZCBzdXBwb3J0 IGZvciBWRkUgMTA4MAoKVGhpcyBjb21taXQgYWRkcyBoYXJkd2FyZSBvcHMgYW5kIHJlc291cmNl IGRlZmluaXRpb25zIHRvIHN1cHBvcnQgVkZFCihURkUpIDEwODAgb24gdGhlIFF1YWxjb21tIEth YW5hcGFsaSBTb0MuCgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Fjb20v Y2Ftc3MvY2Ftc3MtdmZlLTEwODAuYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vcWNvbS9jYW1z cy9jYW1zcy12ZmUtMTA4MC5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAw MDAwMDAwLi42ODc5OGYxM2ZiZWE4Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvbWVk aWEvcGxhdGZvcm0vcWNvbS9jYW1zcy9jYW1zcy12ZmUtMTA4MC5jCgpbIC4uLiBdCgo+ICtzdGF0 aWMgdm9pZCB2ZmVfcmVnX3VwZGF0ZShzdHJ1Y3QgdmZlX2RldmljZSAqdmZlLCBlbnVtIHZmZV9s aW5lX2lkIGxpbmVfaWQpCj4gK3sKPiArCWludCBwb3J0X2lkID0gbGluZV9pZDsKPiArCj4gKwlj YW1zc19yZWdfdXBkYXRlKHZmZS0+Y2Ftc3MsIHZmZS0+aWQsIHBvcnRfaWQsIGZhbHNlKTsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgdmZlX3JlZ191cGRhdGVfY2xlYXIoc3RydWN0IHZmZV9kZXZp Y2UgKnZmZSwKPiArCQkJCSBlbnVtIHZmZV9saW5lX2lkIGxpbmVfaWQpCj4gK3sKPiArCWludCBw b3J0X2lkID0gbGluZV9pZDsKPiArCj4gKwljYW1zc19yZWdfdXBkYXRlKHZmZS0+Y2Ftc3MsIHZm ZS0+aWQsIHBvcnRfaWQsIHRydWUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2ZmVfYWRkcl91 cGRhdGUoc3RydWN0IHZmZV9kZXZpY2UgKnZmZSwgZW51bSB2ZmVfbGluZV9pZCBsaW5lX2lkKQo+ ICt7Cj4gKwlpbnQgcG9ydF9pZCA9IGxpbmVfaWQ7Cj4gKwo+ICsJY2Ftc3NfYWRkcl91cGRhdGUo dmZlLT5jYW1zcywgdmZlLT5pZCwgcG9ydF9pZCwgZmFsc2UpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCB2ZmVfYWRkcl91cGRhdGVfY2xlYXIoc3RydWN0IHZmZV9kZXZpY2UgKnZmZSwgZW51bSB2 ZmVfbGluZV9pZCBsaW5lX2lkKQo+ICt7Cj4gKwlpbnQgcG9ydF9pZCA9IGxpbmVfaWQ7Cj4gKwo+ ICsJY2Ftc3NfYWRkcl91cGRhdGUodmZlLT5jYW1zcywgdmZlLT5pZCwgcG9ydF9pZCwgdHJ1ZSk7 Cj4gK30KCltTZXZlcml0eTogSGlnaF0KQ2FuIHZmZV9hZGRyX3VwZGF0ZSgpIGFuZCB2ZmVfcmVn X3VwZGF0ZSgpIHJhY2Ugd2l0aCBjc2lkX2lzcigpIG9uCmNzaWQtPmFkZHJfdXBkYXRlIGFuZCBj c2lkLT5yZWdfdXBkYXRlPwoKdmZlX3F1ZXVlX2J1ZmZlcl92MigpIGNhbGxzIG9wcy0+YWRkcl91 cGRhdGUoKSBhbmQgb3BzLT5yZWdfdXBkYXRlKCkgdW5kZXIKdmZlLT5vdXRwdXRfbG9jaywgd2hp Y2ggZm9yd2FyZCB0byBfX2NzaWRfYWRkcl91cGRhdGUoKSBhbmQKX19jc2lkX3JlZ191cGRhdGUo KS4gIE1lYW53aGlsZSwgaW4gY2Ftc3MtY3NpZC0xMDgwLmMsIGNzaWRfaXNyKCkgY2xlYXJzCmJp dHMgaW4gY3NpZC0+YWRkcl91cGRhdGUgYW5kIGNzaWQtPnJlZ191cGRhdGUgYmVmb3JlIGNhbGxp bmcKY2Ftc3NfYnVmX2RvbmUoKSAod2hlcmUgdmZlLT5vdXRwdXRfbG9jayBpcyBhY3F1aXJlZCk6 CgpDUFUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQVTEgKDxoYXJkaXJxPikK dmZlX3F1ZXVlX2J1ZmZlcl92MigpICAgICAgICAgICAgICAgICBjc2lkX2lzcigpCiAgc3Bpbl9s b2NrX2lycXNhdmUoJnZmZS0+b3V0cHV0X2xvY2spCiAgdmZlX2FkZHJfdXBkYXRlKCkKICAgIC4u LgogICAgICBjc2lkLT5hZGRyX3VwZGF0ZSB8PSBCSVQoLi4uKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCAmIElORk9fUlVQX0RPTkUpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3NpZF9hZGRyX3VwZGF0ZV9jbGVhcigp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NpZC0+YWRkcl91 cGRhdGUgJj0gfkJJVCguLi4pCiAgICAgIHdyaXRlbChjc2lkLT5hZGRyX3VwZGF0ZSwKICAgICAg ICAgICAgIGNzaWQtPmJhc2UgKyBDU0lEX0FVUF9DTUQpICA8LS0gd3JpdGVzIDAsIGxvc2luZyB1 cGRhdGUKICAgICAgX19jc2lkX2F1cF9ydXBfdHJpZ2dlcihjc2lkKQoKQmVjYXVzZSBjc2lkX3Jl c2V0KCkgb25seSB1bm1hc2tzIElORk9fUlNUX0RPTkUgfCBCVUZfRE9ORV9JUlFfU1RBVFVTIGlu CkNTSURfVE9QX0lSUV9NQVNLLCBJTkZPX1JVUF9ET05FIHN0YXlzIGxhdGNoZWQgdW50aWwgY3Np ZF9pc3IoKSBydW5zIG9uCkJVRl9ET05FX0lSUV9TVEFUVVMgYXQgdGhlIGVuZCBvZiB0aGUgZnJh bWUuICBJZiB1c2Vyc3BhY2UgcXVldWVzIGEgYnVmZmVyCndoZW4gb3V0cHV0LT5nZW4yLmFjdGl2 ZV9udW0gPT0gMSwgdGhlIGxvc3QgQ1NJRF9BVVBfQ01EIG9yIENTSURfUlVQX0NNRAp3cml0ZSBs ZWF2ZXMgdGhlIGhhcmR3YXJlIHdpdGhvdXQgdGhlIHF1ZXVlZCBidWZmZXIgYWRkcmVzcyBhbmQg c3RhbGxzCmNhcHR1cmUuICBNdWx0aXBsZSBhY3RpdmUgUkRJIGxpbmVzIG9uIHRoZSBzYW1lIENT SUQgY2FuIGFsc28gY2xvYmJlciBlYWNoCm90aGVyJ3MgY3NpZC0+YWRkcl91cGRhdGUgYW5kIGNz aWQtPnJlZ191cGRhdGUgYml0cy4KClsgLi4uIF0KCj4gK2NvbnN0IHN0cnVjdCB2ZmVfaHdfb3Bz IHZmZV9vcHNfMTA4MCA9IHsKPiArCS5hZGRyX3VwZGF0ZSA9IHZmZV9hZGRyX3VwZGF0ZSwKPiAr CS5hZGRyX3VwZGF0ZV9jbGVhciA9IHZmZV9hZGRyX3VwZGF0ZV9jbGVhciwKCltTZXZlcml0eTog TWVkaXVtXQpDYW4gc3RhcnRpbmcgYSBzdHJlYW0gd2l0aCBmZXdlciB0aGFuIHR3byBxdWV1ZWQg YnVmZmVycyBtaXNtYXRjaCB0aGUKbnVtYmVyIG9mIEFVUF9VUERBVEUgcmVxdWVzdHMgYWdhaW5z dCB0aGUgYnVmZmVycyB3cml0dGVuIHRvIHRoZSB3cml0ZQptYXN0ZXI/CgpJbiBjYW1zcy12aWRl by5jLCBtc21fdmlkZW9fcmVnaXN0ZXIoKSBsZWF2ZXMgcS0+bWluX3F1ZXVlZF9idWZmZXJzIGF0 IDAsCnNvIFZJRElPQ19TVFJFQU1PTiBjYW4gcnVuIHZmZV9lbmFibGVfb3V0cHV0X3YyKCkgd2l0 aCAwIG9yIDEgYnVmZmVyCnBlbmRpbmc6Cgpkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Fjb20vY2Ft c3MvY2Ftc3MtdmZlLmM6dmZlX2VuYWJsZV9vdXRwdXRfdjIoKSB7CiAgICAuLi4KCWZvciAoaSA9 IDA7IGkgPCBDQU1TU19JTklUX0JVRl9DT1VOVDsgaSsrKSB7CgkJb3V0cHV0LT5idWZbaV0gPSB2 ZmVfYnVmX2dldF9wZW5kaW5nKG91dHB1dCk7CgkJaWYgKCFvdXRwdXQtPmJ1ZltpXSkKCQkJYnJl YWs7CgkJb3V0cHV0LT5nZW4yLmFjdGl2ZV9udW0rKzsKCQlvcHMtPnZmZV93bV91cGRhdGUodmZl LCBvdXRwdXQtPndtX2lkeFswXSwKCQkJCSAgIG91dHB1dC0+YnVmW2ldLT5hZGRyWzBdLCBsaW5l KTsKCQlpZiAoIW9wcy0+YWRkcl91cGRhdGUpCgkJCW9wcy0+cmVnX3VwZGF0ZSh2ZmUsIGxpbmUt PmlkKTsKCX0KICAgIC4uLgp9Cgpjc2lkX2NvbmZpZ3VyZV9zdHJlYW0oKSBpbiBjYW1zcy1jc2lk LTEwODAuYyB0aGVuIHVuY29uZGl0aW9uYWxseSBpc3N1ZXMKQ0FNU1NfSU5JVF9CVUZfQ09VTlQg KDIpIF9fY3NpZF9hZGRyX3VwZGF0ZSgpIGNhbGxzIGV2ZW4gaWYgMCBvciAxIGJ1ZmZlcgphZGRy ZXNzIHdhcyBwcm9ncmFtbWVkIGludG8gVkZFX0JVU19XTV9JTUFHRV9BRERSLiAgV2hlbiB1c2Vy c3BhY2UgbGF0ZXIKcXVldWVzIGJ1ZmZlcnMgd2hpbGUgb3V0cHV0LT5nZW4yLmFjdGl2ZV9udW0g PCAyLCB2ZmVfcXVldWVfYnVmZmVyX3YyKCkKY2FsbHMgb3BzLT5hZGRyX3VwZGF0ZSgpIGFnYWlu IGZvciBlYWNoIGJ1ZmZlciwgaXNzdWluZyAzIG9yIDQgQVVQX1VQREFURQpyZXF1ZXN0cyBmb3Ig dGhlIGZpcnN0IHR3byBidWZmZXJzIGFuZCB2aW9sYXRpbmcgdGhlIHJlcXVpcmVtZW50IHRoYXQK QVVQX1VQREFURSByZXF1ZXN0cyBtYXRjaCB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgcXVldWVkIHRv IHRoZSB3cml0ZQptYXN0ZXIuCgotLSAKU2FzaGlrbyBBSSByZXZpZXcgwrcgaHR0cHM6Ly9zYXNo aWtvLmRldi8jL3BhdGNoc2V0LzIwMjYxMTEyLWthYW5hcGFsaS1jYW1zcy12MjUtMC0xZDcwOWY1 N2YzNzBAb3NzLnF1YWxjb21tLmNvbT9wYXJ0PTEwCgotLSAKbGludXgtcGh5IG1haWxpbmcgbGlz dApsaW51eC1waHlAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwczovL2xpc3RzLmluZnJhZGVhZC5v cmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1waHkK