From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3CC0243CE73 for ; Mon, 12 Oct 2026 07:01:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1791788480; cv=none; b=AG+d8AVOsio20YVS5P28bFlcXeFRi9GFhnbiavGFAu6AI2Uy923ihELetDQS56cGN6u47VCeuvE9nKFvoEOtp9FzZRr4lY+e9tkfsrm6kzhpaHrldByv5czuET48a1wvQ4TfaBwf3LvzgWUUJV3kkRNodIhxDcf3pPhA8U1K71o= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1791788480; c=relaxed/simple; bh=6xgXocSTJDb4kP1yCLAh9CFHjA2T3GV2zffVBEjHgIs=; h=Message-ID:From:Subject:To:Cc:In-Reply-To:References:Content-Type: Date; b=p5U4PXIdP73Asq56c8mtZjd+c0fymduCTnlMg6VCuwayGfdJ+s6GbDMW6UvtCsP1e7OUCw7FenPrClU2tReAjm9Cuny8R0DBwRnpQ1uEMCzwtug4PReUlx9A1fQ3Bs7t4ac/AA4niPczNHoX+GHDZYUiTXkN++L55Rd4GGnvs58= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ki+/6Jhq; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ki+/6Jhq" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5606E1F0089B; Mon, 12 Oct 2026 07:01:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1791788478; bh=JmlTjHa3NFGbxzvxsAjtJR37Ab92OQSWJ3FjBGdMndM=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=ki+/6Jhq8u7dfOQvYlOMPg1de3fomujPy5nWvoIvsn1/RR7rT096nIF02lzXQbUyg yFKDIQ1CxaKt0WjnbmFvBGRDebMQiwjP5LTVI9jFPII9q/G1b3Xk+AnmOEOZXIGTU6 D7Iq7DG3e0yaeODDsMjpIjGeAl0mR9EJ5Q9b96TrnQtTxdQTK0/yR4067PzadBnRmQ oK5rhQihdZD9Nlimw/lWvjnnwv0BTbE0tKXiK/f0foLLqW9nvtsvwK3mrOJ3cvBHlu nZ2MnUV/iSaOnjVekRPeIOwAlQZ31s0EVym58nsYfM3eWS1v0AZo6JUN3oO8QNQr9/ PgfMRXaYujCng== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH v21 04/14] media: qcom: camss: Issue stream-on REG_UPDATE from CSID Reply-To: sashiko-reviews@lists.linux.dev To: "Hangxiang Ma" Cc: vkoul@kernel.org, neil.armstrong@linaro.org, linux-phy@lists.infradead.org, robh@kernel.org, media-ci@linuxtv.org, devicetree@vger.kernel.org, olteanv@gmail.com, conor+dt@kernel.org In-Reply-To: <20261011-kaanapali-camss-v21-4-04fd28d815c6@oss.qualcomm.com> References: <20261011-kaanapali-camss-v21-0-04fd28d815c6@oss.qualcomm.com> <20261011-kaanapali-camss-v21-4-04fd28d815c6@oss.qualcomm.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Mon, 12 Oct 2026 07:01:17 +0000 Precedence: bulk X-Mailing-List: devicetree@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Thank you for your contribution! Sashiko AI review found 3 potential issue(= s) to consider: - [High] media: qcom: camss: lost initial buffer due to skipped REG_UPDATE - [High] media: data race on csid->reg_update in stream-on - [High] media: camss: cross-routing breaks due to hardcoded VFE ID in reg_= update -- commit cb036f0b44cb6248a2bce2553092074a74c00d9a Author: Hangxiang Ma Subject: media: qcom: camss: Issue stream-on REG_UPDATE from CSID This patch moves the stream-on REG_UPDATE from the VFE to the CSID for CSID 680 and CSID Gen3 platforms. It skips the VFE-side REG_UPDATE when the upstream CSID implements the reg_update callback. > diff --git a/drivers/media/platform/qcom/camss/camss-csid-gen3.c b/driver= s/media/platform/qcom/camss/camss-csid-gen3.c > index 0fdbf75fb27db..830c9c818d3d2 100644 > --- a/drivers/media/platform/qcom/camss/camss-csid-gen3.c > +++ b/drivers/media/platform/qcom/camss/camss-csid-gen3.c [ ... ] > @@ -230,6 +232,7 @@ static void csid_configure_stream(struct csid_device = *csid, u8 enable) > if (csid->phy.en_vc & BIT(i)) { > __csid_configure_rdi_stream(csid, enable, i, 0); > __csid_configure_rx(csid, &csid->phy, 0); > + csid_subdev_reg_update(csid, i, false); > __csid_ctrl_rdi(csid, enable, i); > } > } [Severity: High] Does this new process-context call expose csid->reg_update to a data race? Looking at csid_subdev_reg_update(), it performs non-atomic read-modify-write operations on the shared csid->reg_update mask: if (clear) { csid->reg_update &=3D ~CSID_RUP_AUP_RDI(port_id); } else { csid->reg_update |=3D CSID_RUP_AUP_RDI(port_id); writel(csid->reg_update, csid->base + CSID_RUP_AUP_CMD); } Concurrently, when the hardware generates a RUP_DONE interrupt, the hardirq handler csid_isr() calls this same function: if (val & RUP_DONE_IRQ_STATUS) csid_subdev_reg_update(csid, i, true); Since csid_configure_stream() is called in process context without holding a spinlock or disabling local interrupts, couldn't csid_isr() preempt it midway through its read-modify-write? This could cause corruptions to the mask, leading to lost or unintended hardware register updates, which might cause streams to fail to start or stop. > diff --git a/drivers/media/platform/qcom/camss/camss-vfe.c b/drivers/medi= a/platform/qcom/camss/camss-vfe.c > index 2680a9914765f..16a0b5663fe2b 100644 > --- a/drivers/media/platform/qcom/camss/camss-vfe.c > +++ b/drivers/media/platform/qcom/camss/camss-vfe.c [ ... ] > @@ -552,7 +586,8 @@ int vfe_enable_output_v2(struct vfe_line *line) > output->gen2.active_num++; > ops->vfe_wm_update(vfe, output->wm_idx[0], > output->buf[i]->addr[0], line); > - ops->reg_update(vfe, line->id); > + if (!rup_in_csid) > + ops->reg_update(vfe, line->id); > } [Severity: High] Will skipping the reg_update here cause the first queued buffer address to be permanently lost? During stream initialization, this loop runs CAMSS_INIT_BUF_COUNT (2) times. The vfe_wm_update() callback writes the buffer's address to a single hardwa= re shadow register (for example, VFE_BUS_IMAGE_ADDR). Previously, reg_update() was called after each write to latch the shadow register into the active hardware queue. With this patch, if rup_in_csid is true, reg_update() is skipped inside the loop. This means the second iteration will overwrite the first buffer's address in the shadow register before it is ever latched.=20 When the CSID eventually issues the single REG_UPDATE at stream-on, only the address of buf[1] will be latched. The hardware will then write the first captured frame to buf[1], but the driver's completion handler vfe_buf_done() expects buf[0] and will return that uninitialized buffer to userspace, resulting in silent data corruption and shifted frames. [Severity: High] Does this logic also need to be applied to the runtime buffer completion path to prevent cross-routing failures? While this patch correctly identifies the active upstream CSID for the stream-on phase by traversing the media graph, it appears the runtime path still uses the hardcoded ID. In vfe_buf_done(), when buffers complete, the driver unconditionally invoke= s: ops->vfe_wm_update(vfe, output->wm_idx[0], output->buf[index]->addr[0], line); ops->reg_update(vfe, line->id); On Gen3 and 680 platforms, this routes through vfe_reg_update() to camss_reg_update() using the hardcoded vfe->id: camss_reg_update(vfe->camss, vfe->id, port_id, false); If a user configures a cross-routed media graph linking CSID N to VFE M (where N is not equal to M), this hardcoded routing means the register updates for new buffers are sent to the wrong CSID. This leaves the active CSID's shadow registers unlatched and potentially corrupts the unrelated CSID's state, causing streams to freeze. --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20261011-kaanapali-= camss-v21-0-04fd28d815c6@oss.qualcomm.com?part=3D4 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 8500ECA9EC5 for ; Mon, 12 Oct 2026 07:01:21 +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: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-Owner; bh=v6d3wzVXZlSInBbkkvMqe0pJDGILlkAqHsDnpUtCrg4=; b=EtUHAs43kfSFZh Fj+pb091BgpySvpG4gpSpnrqWUhNxQa0indfBrM9c1X6zEzufP3M5gyrOXwXobqcoz7Ou4CtWfrfe 6xCMYWhZuHn55hqegjOWcX434RrwQfrW0V/WLPi4Lbk8iO1aRpEbgpCvThbjTiMifaGR+NAzsnqUs MqqSPE35dtT+UxeigZwTnJG1JQatktI9QVHRMnR1PFDQQxcG077f7100sHM7rXiYIe+j9jBP2Iwpf eQ+qEjjpm4b6Cz4B1cwWH4UG3e3ajkIoZr7tDq8sxvJY+St19AWbTw9frykAaUvo+afdHoNDDhlzE SWLfVpxcyrK0rx611HGQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1xGA2D-00000009nWl-0lYa; Mon, 12 Oct 2026 07:01:21 +0000 Received: from tor.source.kernel.org ([2600:3c04:e001:324:0:1991:8:25]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1xGA2B-00000009nWW-3N8H for linux-phy@lists.infradead.org; Mon, 12 Oct 2026 07:01:19 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id 27C2E60D8B; Mon, 12 Oct 2026 07:01:19 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5606E1F0089B; Mon, 12 Oct 2026 07:01:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1791788478; bh=JmlTjHa3NFGbxzvxsAjtJR37Ab92OQSWJ3FjBGdMndM=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=ki+/6Jhq8u7dfOQvYlOMPg1de3fomujPy5nWvoIvsn1/RR7rT096nIF02lzXQbUyg yFKDIQ1CxaKt0WjnbmFvBGRDebMQiwjP5LTVI9jFPII9q/G1b3Xk+AnmOEOZXIGTU6 D7Iq7DG3e0yaeODDsMjpIjGeAl0mR9EJ5Q9b96TrnQtTxdQTK0/yR4067PzadBnRmQ oK5rhQihdZD9Nlimw/lWvjnnwv0BTbE0tKXiK/f0foLLqW9nvtsvwK3mrOJ3cvBHlu nZ2MnUV/iSaOnjVekRPeIOwAlQZ31s0EVym58nsYfM3eWS1v0AZo6JUN3oO8QNQr9/ PgfMRXaYujCng== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH v21 04/14] media: qcom: camss: Issue stream-on REG_UPDATE from CSID To: "Hangxiang Ma" Cc: vkoul@kernel.org, neil.armstrong@linaro.org, linux-phy@lists.infradead.org, robh@kernel.org, media-ci@linuxtv.org, devicetree@vger.kernel.org, olteanv@gmail.com, conor+dt@kernel.org In-Reply-To: <20261011-kaanapali-camss-v21-4-04fd28d815c6@oss.qualcomm.com> References: <20261011-kaanapali-camss-v21-0-04fd28d815c6@oss.qualcomm.com> <20261011-kaanapali-camss-v21-4-04fd28d815c6@oss.qualcomm.com> Date: Mon, 12 Oct 2026 07:01:17 +0000 X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: sashiko-reviews@lists.linux.dev MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-phy" Errors-To: linux-phy-bounces+linux-phy=archiver.kernel.org@lists.infradead.org VGhhbmsgeW91IGZvciB5b3VyIGNvbnRyaWJ1dGlvbiEgU2FzaGlrbyBBSSByZXZpZXcgZm91bmQg MyBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6Ci0gW0hpZ2hdIG1lZGlhOiBxY29tOiBj YW1zczogbG9zdCBpbml0aWFsIGJ1ZmZlciBkdWUgdG8gc2tpcHBlZCBSRUdfVVBEQVRFCi0gW0hp Z2hdIG1lZGlhOiBkYXRhIHJhY2Ugb24gY3NpZC0+cmVnX3VwZGF0ZSBpbiBzdHJlYW0tb24KLSBb SGlnaF0gbWVkaWE6IGNhbXNzOiBjcm9zcy1yb3V0aW5nIGJyZWFrcyBkdWUgdG8gaGFyZGNvZGVk IFZGRSBJRCBpbiByZWdfdXBkYXRlCi0tCgpjb21taXQgY2IwMzZmMGI0NGNiNjI0OGEyYmNlMjU1 MzA5MjA3NGE3NGMwMGQ5YQpBdXRob3I6IEhhbmd4aWFuZyBNYSA8aGFuZ3hpYW5nLm1hQG9zcy5x dWFsY29tbS5jb20+ClN1YmplY3Q6IG1lZGlhOiBxY29tOiBjYW1zczogSXNzdWUgc3RyZWFtLW9u IFJFR19VUERBVEUgZnJvbSBDU0lECgpUaGlzIHBhdGNoIG1vdmVzIHRoZSBzdHJlYW0tb24gUkVH X1VQREFURSBmcm9tIHRoZSBWRkUgdG8gdGhlIENTSUQgZm9yCkNTSUQgNjgwIGFuZCBDU0lEIEdl bjMgcGxhdGZvcm1zLiBJdCBza2lwcyB0aGUgVkZFLXNpZGUgUkVHX1VQREFURSB3aGVuCnRoZSB1 cHN0cmVhbSBDU0lEIGltcGxlbWVudHMgdGhlIHJlZ191cGRhdGUgY2FsbGJhY2suCgo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Fjb20vY2Ftc3MvY2Ftc3MtY3NpZC1nZW4z LmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Fjb20vY2Ftc3MvY2Ftc3MtY3NpZC1nZW4zLmMK PiBpbmRleCAwZmRiZjc1ZmIyN2RiLi44MzBjOWM4MThkM2QyIDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvbWVkaWEvcGxhdGZvcm0vcWNvbS9jYW1zcy9jYW1zcy1jc2lkLWdlbjMuYwo+ICsrKyBiL2Ry aXZlcnMvbWVkaWEvcGxhdGZvcm0vcWNvbS9jYW1zcy9jYW1zcy1jc2lkLWdlbjMuYwoKWyAuLi4g XQoKPiBAQCAtMjMwLDYgKzIzMiw3IEBAIHN0YXRpYyB2b2lkIGNzaWRfY29uZmlndXJlX3N0cmVh bShzdHJ1Y3QgY3NpZF9kZXZpY2UgKmNzaWQsIHU4IGVuYWJsZSkKPiAgCQlpZiAoY3NpZC0+cGh5 LmVuX3ZjICYgQklUKGkpKSB7Cj4gIAkJCV9fY3NpZF9jb25maWd1cmVfcmRpX3N0cmVhbShjc2lk LCBlbmFibGUsIGksIDApOwo+ICAJCQlfX2NzaWRfY29uZmlndXJlX3J4KGNzaWQsICZjc2lkLT5w aHksIDApOwo+ICsJCQljc2lkX3N1YmRldl9yZWdfdXBkYXRlKGNzaWQsIGksIGZhbHNlKTsKPiAg CQkJX19jc2lkX2N0cmxfcmRpKGNzaWQsIGVuYWJsZSwgaSk7Cj4gIAkJfQo+ICB9CgpbU2V2ZXJp dHk6IEhpZ2hdCkRvZXMgdGhpcyBuZXcgcHJvY2Vzcy1jb250ZXh0IGNhbGwgZXhwb3NlIGNzaWQt PnJlZ191cGRhdGUgdG8gYSBkYXRhIHJhY2U/CgpMb29raW5nIGF0IGNzaWRfc3ViZGV2X3JlZ191 cGRhdGUoKSwgaXQgcGVyZm9ybXMgbm9uLWF0b21pYwpyZWFkLW1vZGlmeS13cml0ZSBvcGVyYXRp b25zIG9uIHRoZSBzaGFyZWQgY3NpZC0+cmVnX3VwZGF0ZSBtYXNrOgoKICAgIGlmIChjbGVhcikg ewogICAgICAgIGNzaWQtPnJlZ191cGRhdGUgJj0gfkNTSURfUlVQX0FVUF9SREkocG9ydF9pZCk7 CiAgICB9IGVsc2UgewogICAgICAgIGNzaWQtPnJlZ191cGRhdGUgfD0gQ1NJRF9SVVBfQVVQX1JE SShwb3J0X2lkKTsKICAgICAgICB3cml0ZWwoY3NpZC0+cmVnX3VwZGF0ZSwgY3NpZC0+YmFzZSAr IENTSURfUlVQX0FVUF9DTUQpOwogICAgfQoKQ29uY3VycmVudGx5LCB3aGVuIHRoZSBoYXJkd2Fy ZSBnZW5lcmF0ZXMgYSBSVVBfRE9ORSBpbnRlcnJ1cHQsIHRoZQpoYXJkaXJxIGhhbmRsZXIgY3Np ZF9pc3IoKSBjYWxscyB0aGlzIHNhbWUgZnVuY3Rpb246CgogICAgaWYgKHZhbCAmIFJVUF9ET05F X0lSUV9TVEFUVVMpCiAgICAgICAgY3NpZF9zdWJkZXZfcmVnX3VwZGF0ZShjc2lkLCBpLCB0cnVl KTsKClNpbmNlIGNzaWRfY29uZmlndXJlX3N0cmVhbSgpIGlzIGNhbGxlZCBpbiBwcm9jZXNzIGNv bnRleHQgd2l0aG91dCBob2xkaW5nCmEgc3BpbmxvY2sgb3IgZGlzYWJsaW5nIGxvY2FsIGludGVy cnVwdHMsIGNvdWxkbid0IGNzaWRfaXNyKCkgcHJlZW1wdCBpdAptaWR3YXkgdGhyb3VnaCBpdHMg cmVhZC1tb2RpZnktd3JpdGU/IFRoaXMgY291bGQgY2F1c2UgY29ycnVwdGlvbnMgdG8gdGhlCm1h c2ssIGxlYWRpbmcgdG8gbG9zdCBvciB1bmludGVuZGVkIGhhcmR3YXJlIHJlZ2lzdGVyIHVwZGF0 ZXMsIHdoaWNoIG1pZ2h0CmNhdXNlIHN0cmVhbXMgdG8gZmFpbCB0byBzdGFydCBvciBzdG9wLgoK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9xY29tL2NhbXNzL2NhbXNzLXZm ZS5jIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9xY29tL2NhbXNzL2NhbXNzLXZmZS5jCj4gaW5k ZXggMjY4MGE5OTE0NzY1Zi4uMTZhMGI1NjYzZmUyYiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL21l ZGlhL3BsYXRmb3JtL3Fjb20vY2Ftc3MvY2Ftc3MtdmZlLmMKPiArKysgYi9kcml2ZXJzL21lZGlh L3BsYXRmb3JtL3Fjb20vY2Ftc3MvY2Ftc3MtdmZlLmMKClsgLi4uIF0KCj4gQEAgLTU1Miw3ICs1 ODYsOCBAQCBpbnQgdmZlX2VuYWJsZV9vdXRwdXRfdjIoc3RydWN0IHZmZV9saW5lICpsaW5lKQo+ ICAJCW91dHB1dC0+Z2VuMi5hY3RpdmVfbnVtKys7Cj4gIAkJb3BzLT52ZmVfd21fdXBkYXRlKHZm ZSwgb3V0cHV0LT53bV9pZHhbMF0sCj4gIAkJCQkgICBvdXRwdXQtPmJ1ZltpXS0+YWRkclswXSwg bGluZSk7Cj4gLQkJb3BzLT5yZWdfdXBkYXRlKHZmZSwgbGluZS0+aWQpOwo+ICsJCWlmICghcnVw X2luX2NzaWQpCj4gKwkJCW9wcy0+cmVnX3VwZGF0ZSh2ZmUsIGxpbmUtPmlkKTsKPiAgCX0KCltT ZXZlcml0eTogSGlnaF0KV2lsbCBza2lwcGluZyB0aGUgcmVnX3VwZGF0ZSBoZXJlIGNhdXNlIHRo ZSBmaXJzdCBxdWV1ZWQgYnVmZmVyIGFkZHJlc3MgdG8KYmUgcGVybWFuZW50bHkgbG9zdD8KCkR1 cmluZyBzdHJlYW0gaW5pdGlhbGl6YXRpb24sIHRoaXMgbG9vcCBydW5zIENBTVNTX0lOSVRfQlVG X0NPVU5UICgyKSB0aW1lcy4KVGhlIHZmZV93bV91cGRhdGUoKSBjYWxsYmFjayB3cml0ZXMgdGhl IGJ1ZmZlcidzIGFkZHJlc3MgdG8gYSBzaW5nbGUgaGFyZHdhcmUKc2hhZG93IHJlZ2lzdGVyIChm b3IgZXhhbXBsZSwgVkZFX0JVU19JTUFHRV9BRERSKS4gUHJldmlvdXNseSwgcmVnX3VwZGF0ZSgp CndhcyBjYWxsZWQgYWZ0ZXIgZWFjaCB3cml0ZSB0byBsYXRjaCB0aGUgc2hhZG93IHJlZ2lzdGVy IGludG8gdGhlIGFjdGl2ZQpoYXJkd2FyZSBxdWV1ZS4KCldpdGggdGhpcyBwYXRjaCwgaWYgcnVw X2luX2NzaWQgaXMgdHJ1ZSwgcmVnX3VwZGF0ZSgpIGlzIHNraXBwZWQgaW5zaWRlIHRoZQpsb29w LiBUaGlzIG1lYW5zIHRoZSBzZWNvbmQgaXRlcmF0aW9uIHdpbGwgb3ZlcndyaXRlIHRoZSBmaXJz dCBidWZmZXIncwphZGRyZXNzIGluIHRoZSBzaGFkb3cgcmVnaXN0ZXIgYmVmb3JlIGl0IGlzIGV2 ZXIgbGF0Y2hlZC4gCgpXaGVuIHRoZSBDU0lEIGV2ZW50dWFsbHkgaXNzdWVzIHRoZSBzaW5nbGUg UkVHX1VQREFURSBhdCBzdHJlYW0tb24sIG9ubHkKdGhlIGFkZHJlc3Mgb2YgYnVmWzFdIHdpbGwg YmUgbGF0Y2hlZC4gVGhlIGhhcmR3YXJlIHdpbGwgdGhlbiB3cml0ZSB0aGUKZmlyc3QgY2FwdHVy ZWQgZnJhbWUgdG8gYnVmWzFdLCBidXQgdGhlIGRyaXZlcidzIGNvbXBsZXRpb24gaGFuZGxlcgp2 ZmVfYnVmX2RvbmUoKSBleHBlY3RzIGJ1ZlswXSBhbmQgd2lsbCByZXR1cm4gdGhhdCB1bmluaXRp YWxpemVkIGJ1ZmZlcgp0byB1c2Vyc3BhY2UsIHJlc3VsdGluZyBpbiBzaWxlbnQgZGF0YSBjb3Jy dXB0aW9uIGFuZCBzaGlmdGVkIGZyYW1lcy4KCltTZXZlcml0eTogSGlnaF0KRG9lcyB0aGlzIGxv Z2ljIGFsc28gbmVlZCB0byBiZSBhcHBsaWVkIHRvIHRoZSBydW50aW1lIGJ1ZmZlciBjb21wbGV0 aW9uCnBhdGggdG8gcHJldmVudCBjcm9zcy1yb3V0aW5nIGZhaWx1cmVzPwoKV2hpbGUgdGhpcyBw YXRjaCBjb3JyZWN0bHkgaWRlbnRpZmllcyB0aGUgYWN0aXZlIHVwc3RyZWFtIENTSUQgZm9yIHRo ZQpzdHJlYW0tb24gcGhhc2UgYnkgdHJhdmVyc2luZyB0aGUgbWVkaWEgZ3JhcGgsIGl0IGFwcGVh cnMgdGhlIHJ1bnRpbWUKcGF0aCBzdGlsbCB1c2VzIHRoZSBoYXJkY29kZWQgSUQuCgpJbiB2ZmVf YnVmX2RvbmUoKSwgd2hlbiBidWZmZXJzIGNvbXBsZXRlLCB0aGUgZHJpdmVyIHVuY29uZGl0aW9u YWxseSBpbnZva2VzOgoKICAgIG9wcy0+dmZlX3dtX3VwZGF0ZSh2ZmUsIG91dHB1dC0+d21faWR4 WzBdLAogICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC0+YnVmW2luZGV4XS0+YWRkclswXSwg bGluZSk7CiAgICBvcHMtPnJlZ191cGRhdGUodmZlLCBsaW5lLT5pZCk7CgpPbiBHZW4zIGFuZCA2 ODAgcGxhdGZvcm1zLCB0aGlzIHJvdXRlcyB0aHJvdWdoIHZmZV9yZWdfdXBkYXRlKCkgdG8KY2Ft c3NfcmVnX3VwZGF0ZSgpIHVzaW5nIHRoZSBoYXJkY29kZWQgdmZlLT5pZDoKCiAgICBjYW1zc19y ZWdfdXBkYXRlKHZmZS0+Y2Ftc3MsIHZmZS0+aWQsIHBvcnRfaWQsIGZhbHNlKTsKCklmIGEgdXNl ciBjb25maWd1cmVzIGEgY3Jvc3Mtcm91dGVkIG1lZGlhIGdyYXBoIGxpbmtpbmcgQ1NJRCBOIHRv IFZGRSBNCih3aGVyZSBOIGlzIG5vdCBlcXVhbCB0byBNKSwgdGhpcyBoYXJkY29kZWQgcm91dGlu ZyBtZWFucyB0aGUgcmVnaXN0ZXIKdXBkYXRlcyBmb3IgbmV3IGJ1ZmZlcnMgYXJlIHNlbnQgdG8g dGhlIHdyb25nIENTSUQuIFRoaXMgbGVhdmVzIHRoZSBhY3RpdmUKQ1NJRCdzIHNoYWRvdyByZWdp c3RlcnMgdW5sYXRjaGVkIGFuZCBwb3RlbnRpYWxseSBjb3JydXB0cyB0aGUgdW5yZWxhdGVkCkNT SUQncyBzdGF0ZSwgY2F1c2luZyBzdHJlYW1zIHRvIGZyZWV6ZS4KCi0tIApTYXNoaWtvIEFJIHJl dmlldyDCtyBodHRwczovL3Nhc2hpa28uZGV2LyMvcGF0Y2hzZXQvMjAyNjEwMTEta2FhbmFwYWxp LWNhbXNzLXYyMS0wLTA0ZmQyOGQ4MTVjNkBvc3MucXVhbGNvbW0uY29tP3BhcnQ9NAoKLS0gCmxp bnV4LXBoeSBtYWlsaW5nIGxpc3QKbGludXgtcGh5QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cHM6 Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcGh5Cg==