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=1792899894; b=dP8Q6tWTqoRYb/Dt88vnLn0y8iv2VMlBXA3JjVVTIQQcDwSfKQA6PHx2Ey/5yYo2RCbA hwgwsd0htzYlWoSSzUqnsW9Qa222MvszoxgZly95Tut3x0nPigOTRsVEBNL1fCkxWPkFw iQm30frgUnvPS29XgemUHjjB9RxXUjVnLCpnVURSImqRgxbnFmA6ayYhACuLNRPYKvOIB 8EcmJFd3V9Zb7JnZtJ9J2xkSmQiPoiXncwK5CaGQYFsoywrDmPqfAgg6qrWCIgPrhgHfy EH50wBoYsB3sQG7uH1AoBi2UWwoCg4Zv8gzqwQfycA/bdXRA1cLKGh+1ERgywZYQEEQ== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792899894; h=Received:DKIM-Signature:Message-ID:From:Subject:Reply-To:To:Cc: In-Reply-To:References:Content-Type:Content-Transfer-Encoding:Date; bh=04Aa1UWoYBk/386uOW/AdhSWVgGEI5LqU0bsisYlue4=; b=nYYd2qrhJ85Z+z3g6ba0w6gHhgX5QiQuo4Z68e+lHzNDof7bCxE0MQoJQWHgEB7bRnAz AbiZCBIBDUMgeAivDfgEyu38PB38E987v7WG0IxfnZ2WQNoQ0EN9/ZcTJEV/KkAay3T5D 26HDzM0zcYmAucEJOXuEGk5vSoEPvVxsV3X4rY0XD1P6wInYuBGy8Rxrsy0u7P1Jxa7as 7fOxTTB9V2XjM+f4VY+LjRmV24Q3oxqSWEfEKfQZFf48x0kmSw9vija2rMefkBRC57GLK f8Pg72Zi39uYAOSLFv1mSKgwt1JPEeZBTZvHzbi747+9guq4F3BPpaXmXA+eB7fSoIA== 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=KWZqzkMf; 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 52E88606A31A for ; Sun, 25 Oct 2026 03:44:54 +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=KWZqzkMf Received: by smtp.kernel.org (Postfix) with ESMTPSA id 737F21F01825; Sun, 25 Oct 2026 03:44:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1792899893; bh=04Aa1UWoYBk/386uOW/AdhSWVgGEI5LqU0bsisYlue4=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=KWZqzkMfG41rk3tnLHuNf7z4kXf1r2BZt1wFgRRyXGDp/avlJVKRmnWO0dsMrY62k 0b9ynfeG1p6HE0kmtRrq2UHiE1jw2ZW5opJGL8Cdjpdtr2VdJyTd6PN70hyW/64y5b fROuoGx+hZrd8GsNhSPHu8w9D2b2JoURbnzS2mThdbXwm9uryx4iH54Pk1bzkKh7Ap XIdFamA5pehSk75+axLEvnyQIsbfR7pUeKGt1gzxqcWl0JouPuUrNa3BnTbrmqRv7q 6NuYKkLFXo7g9AGpByUA8z5vwNfqMX4aWFFyHJAQ5kqPsp6+irtliRPO63hDtefSfW I4iO0JQ8b5YNw== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH v22 08/14] media: qcom: camss: csid: Add support for CSID 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: <20261024-kaanapali-camss-v22-8-7da3ea49c8a1@oss.qualcomm.com> References: <20261024-kaanapali-camss-v22-0-7da3ea49c8a1@oss.qualcomm.com> <20261024-kaanapali-camss-v22-8-7da3ea49c8a1@oss.qualcomm.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Sun, 25 Oct 2026 03:44:53 +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 issue(= s) to consider: - [High] media: qcom: camss: out-of-bounds fmt[] read in __csid_configure_r= di_stream() - [Medium] media: qcom: camss: unsynchronized aup_update and rup_update in = csid-1080 -- commit 1c1d5d42b8b4ca9551e5451d2fb39377493b3ca8 Author: Hangxiang Ma media: qcom: camss: csid: Add support for CSID 1080 This commit adds hardware resource definitions, register programming, reset handling, and interrupt handling for the CSID 1080 module found on the Kaanapali SoC. It also extends the CSID interface to support separate RUP a= nd AUP update registers committed via a shared SET register. > diff --git a/drivers/media/platform/qcom/camss/camss-csid-1080.c b/driver= s/media/platform/qcom/camss/camss-csid-1080.c > new file mode 100644 > index 0000000000000..9830fa0f8d24e > --- /dev/null > +++ b/drivers/media/platform/qcom/camss/camss-csid-1080.c > @@ -0,0 +1,402 @@ [ ... ] > +#define MSM_CSID_MAX_SRC_STREAMS_1080 (csid_is_lite(csid) ? 4 : 5) [ ... ] > +static void __csid_aup_rup_trigger(struct csid_device *csid) > +{ > + /* trigger SET in combined register */ > + writel(RUP_SET, csid->base + CSID_RUP_AUP_CMD); > +} > + > +static void __csid_addr_update(struct csid_device *csid, int port_id) > +{ > + csid->aup_update |=3D CSID_RUP_AUP_RDI(port_id); > + writel(csid->aup_update, csid->base + CSID_AUP_CMD); > + > + __csid_aup_rup_trigger(csid); > +} > + > +static void __csid_addr_update_clear(struct csid_device *csid, int port_= id) > +{ > + csid->aup_update &=3D ~CSID_RUP_AUP_RDI(port_id); > +} > + > +static void __csid_reg_update(struct csid_device *csid, int port_id) > +{ > + csid->rup_update |=3D CSID_RUP_AUP_RDI(port_id); > + writel(csid->rup_update, csid->base + CSID_RUP_CMD); > + > + __csid_aup_rup_trigger(csid); > +} > + > +static void __csid_reg_update_clear(struct csid_device *csid, int port_i= d) > +{ > + csid->rup_update &=3D ~CSID_RUP_AUP_RDI(port_id); > +} [Severity: Medium] Can concurrent updates to csid->aup_update and csid->rup_update race with csid_isr()? During streaming, vfe_queue_buffer_v2() and vfe_enable_output_v2() in drivers/media/platform/qcom/camss/camss-vfe.c call ops->addr_update(), ops->reg_update(), ops->addr_update_clear(), and ops->reg_update_clear() while holding vfe->output_lock. However, csid_isr() in drivers/media/platform/qcom/camss/camss-csid-1080.c clears those same bitmasks in hardirq context when INFO_RUP_DONE is set, without holding vfe->output_lock or any CSID-level spinlock: drivers/media/platform/qcom/camss/camss-csid-1080.c:csid_isr() { ... if (val & INFO_RUP_DONE) { __csid_addr_update_clear(csid, i); __csid_reg_update_clear(csid, i); } ... } In addition, csid_configure_stream() calls __csid_addr_update() and __csid_reg_update() in process context without holding a lock after vfe_enable_output_v2() has already set output->state to VFE_OUTPUT_ON and while csid->irq is enabled. Could these unsynchronized read-modify-write operations on csid->aup_update and csid->rup_update, along with the writes to CSID_AUP_CMD, CSID_RUP_CMD, and CSID_RUP_AUP_CMD, clobber a newly set RDI bit or write a just-cleared R= DI bit back into the command registers? [ ... ] > +static void __csid_configure_rdi_stream(struct csid_device *csid, u8 ena= ble, u8 port, u8 vc) > +{ > + u8 lane_cnt =3D csid->phy.lane_cnt; > + u32 val; > + > + /* Source pads matching RDI channels on hardware. > + * E.g. Pad 1 -> RDI0, Pad 2 -> RDI1, etc. > + */ > + struct v4l2_mbus_framefmt *input_format =3D &csid->fmt[MSM_CSID_PAD_FIR= ST_SRC + port]; > + const struct csid_format_info *format =3D csid_get_fmt_entry(csid->res-= >formats->formats, > + csid->res->formats->nformats, > + input_format->code); [Severity: High] Does __csid_configure_rdi_stream() read past the end of csid->fmt[] when configuring the fifth stream on non-lite CSID 1080 instances? For non-lite CSID 1080 instances (CSID0, CSID1, and CSID2 in csid_res_kaanapali), MSM_CSID_MAX_SRC_STREAMS_1080 evaluates to 5. In csid_configure_stream(), the loop iterates i from 0 to 4 and calls __csid_configure_rdi_stream(csid, enable, i, 0) when BIT(i) is set in csid->phy.en_vc. However, in drivers/media/platform/qcom/camss/camss-csid.h, MSM_CSID_PADS_N= UM is still defined as 5: #define MSM_CSID_PAD_SINK 0 #define MSM_CSID_PAD_FIRST_SRC 1 #define MSM_CSID_PADS_NUM 5 struct csid_device { ... struct media_pad pads[MSM_CSID_PADS_NUM]; ... struct v4l2_mbus_framefmt fmt[MSM_CSID_PADS_NUM]; ... }; When port is 4 (RDI4), MSM_CSID_PAD_FIRST_SRC + port evaluates to 5, which = is one element past the end of the 5-element csid->fmt[] array. In addition, msm_csid_register_entity() in drivers/media/platform/qcom/camss/camss-csid.c only initializes MSM_CSID_PADS_NUM pads on the media entity, leaving RDI4 without a source media pad. --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20261024-kaanapali-= camss-v22-0-7da3ea49c8a1@oss.qualcomm.com?part=3D8 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 C82D7606A31A for ; Sun, 25 Oct 2026 03:44:56 +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=YdvOJSYu; 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=KWZqzkMf 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=CE8p7bhGUW3qArEzQVdspRYV4uV+QkhnJACx9bC/adI=; b=YdvOJSYu8fdSueHEywg+6BxcD8 Pt5TVmHDok0NC8YgAh9yHTtdiLVrz+qekvtoAuPzVUOVre0ujC4Eco4K2u7aRxDUd98uR2QmFg3qw GQuUbpPi4DrI/fjCJ+RN4f4kWQTH8XeapBFPBhPzkOIMzp+1vdNSNds/1sHCJyR8QJrwLjAx1na7v i8Cuhjc50wiSGKD57o461016AsACui9rOWcK3iZ0cT2/VWYDnxZ+z2yzZw4Ucb0eHwgeAhlzdq/Dp 92Ido46SIjyWN6rtLntCVD8H/dEMFTA0jyX+N5UM5k/bVE0F/vYR4utIFJSmtoWvshBOOwS+CR+t8 LTOCMJ3Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.100.1 #2 (Red Hat Linux)) id 1xKpAG-00000000hYA-0XbC; Sun, 25 Oct 2026 03:44:56 +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 1xKpAE-00000000hY0-3Ti5 for linux-phy@lists.infradead.org; Sun, 25 Oct 2026 03:44:54 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 036AC401DA; Sun, 25 Oct 2026 03:44:54 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 737F21F01825; Sun, 25 Oct 2026 03:44:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1792899893; bh=04Aa1UWoYBk/386uOW/AdhSWVgGEI5LqU0bsisYlue4=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=KWZqzkMfG41rk3tnLHuNf7z4kXf1r2BZt1wFgRRyXGDp/avlJVKRmnWO0dsMrY62k 0b9ynfeG1p6HE0kmtRrq2UHiE1jw2ZW5opJGL8Cdjpdtr2VdJyTd6PN70hyW/64y5b fROuoGx+hZrd8GsNhSPHu8w9D2b2JoURbnzS2mThdbXwm9uryx4iH54Pk1bzkKh7Ap XIdFamA5pehSk75+axLEvnyQIsbfR7pUeKGt1gzxqcWl0JouPuUrNa3BnTbrmqRv7q 6NuYKkLFXo7g9AGpByUA8z5vwNfqMX4aWFFyHJAQ5kqPsp6+irtliRPO63hDtefSfW I4iO0JQ8b5YNw== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH v22 08/14] media: qcom: camss: csid: Add support for CSID 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: <20261024-kaanapali-camss-v22-8-7da3ea49c8a1@oss.qualcomm.com> References: <20261024-kaanapali-camss-v22-0-7da3ea49c8a1@oss.qualcomm.com> <20261024-kaanapali-camss-v22-8-7da3ea49c8a1@oss.qualcomm.com> Date: Sun, 25 Oct 2026 03:44:53 +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=-9.2 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 MiBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6Ci0gW0hpZ2hdIG1lZGlhOiBxY29tOiBj YW1zczogb3V0LW9mLWJvdW5kcyBmbXRbXSByZWFkIGluIF9fY3NpZF9jb25maWd1cmVfcmRpX3N0 cmVhbSgpCi0gW01lZGl1bV0gbWVkaWE6IHFjb206IGNhbXNzOiB1bnN5bmNocm9uaXplZCBhdXBf dXBkYXRlIGFuZCBydXBfdXBkYXRlIGluIGNzaWQtMTA4MAotLQoKY29tbWl0IDFjMWQ1ZDQyYjhi NGNhOTU1MWU1NDUxZDJmYjM5Mzc3NDkzYjNjYTgKQXV0aG9yOiBIYW5neGlhbmcgTWEgPGhhbmd4 aWFuZy5tYUBvc3MucXVhbGNvbW0uY29tPgoKbWVkaWE6IHFjb206IGNhbXNzOiBjc2lkOiBBZGQg c3VwcG9ydCBmb3IgQ1NJRCAxMDgwCgpUaGlzIGNvbW1pdCBhZGRzIGhhcmR3YXJlIHJlc291cmNl IGRlZmluaXRpb25zLCByZWdpc3RlciBwcm9ncmFtbWluZywgcmVzZXQKaGFuZGxpbmcsIGFuZCBp bnRlcnJ1cHQgaGFuZGxpbmcgZm9yIHRoZSBDU0lEIDEwODAgbW9kdWxlIGZvdW5kIG9uIHRoZQpL YWFuYXBhbGkgU29DLiBJdCBhbHNvIGV4dGVuZHMgdGhlIENTSUQgaW50ZXJmYWNlIHRvIHN1cHBv cnQgc2VwYXJhdGUgUlVQIGFuZApBVVAgdXBkYXRlIHJlZ2lzdGVycyBjb21taXR0ZWQgdmlhIGEg c2hhcmVkIFNFVCByZWdpc3Rlci4KCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZv cm0vcWNvbS9jYW1zcy9jYW1zcy1jc2lkLTEwODAuYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0v cWNvbS9jYW1zcy9jYW1zcy1jc2lkLTEwODAuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5k ZXggMDAwMDAwMDAwMDAwMC4uOTgzMGZhMGY4ZDI0ZQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9k cml2ZXJzL21lZGlhL3BsYXRmb3JtL3Fjb20vY2Ftc3MvY2Ftc3MtY3NpZC0xMDgwLmMKPiBAQCAt MCwwICsxLDQwMiBAQAoKWyAuLi4gXQoKPiArI2RlZmluZSBNU01fQ1NJRF9NQVhfU1JDX1NUUkVB TVNfMTA4MAkJKGNzaWRfaXNfbGl0ZShjc2lkKSA/IDQgOiA1KQoKWyAuLi4gXQoKPiArc3RhdGlj IHZvaWQgX19jc2lkX2F1cF9ydXBfdHJpZ2dlcihzdHJ1Y3QgY3NpZF9kZXZpY2UgKmNzaWQpCj4g K3sKPiArCS8qIHRyaWdnZXIgU0VUIGluIGNvbWJpbmVkIHJlZ2lzdGVyICovCj4gKwl3cml0ZWwo UlVQX1NFVCwgY3NpZC0+YmFzZSArIENTSURfUlVQX0FVUF9DTUQpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBfX2NzaWRfYWRkcl91cGRhdGUoc3RydWN0IGNzaWRfZGV2aWNlICpjc2lkLCBpbnQg cG9ydF9pZCkKPiArewo+ICsJY3NpZC0+YXVwX3VwZGF0ZSB8PSBDU0lEX1JVUF9BVVBfUkRJKHBv cnRfaWQpOwo+ICsJd3JpdGVsKGNzaWQtPmF1cF91cGRhdGUsIGNzaWQtPmJhc2UgKyBDU0lEX0FV UF9DTUQpOwo+ICsKPiArCV9fY3NpZF9hdXBfcnVwX3RyaWdnZXIoY3NpZCk7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIF9fY3NpZF9hZGRyX3VwZGF0ZV9jbGVhcihzdHJ1Y3QgY3NpZF9kZXZpY2Ug KmNzaWQsIGludCBwb3J0X2lkKQo+ICt7Cj4gKwljc2lkLT5hdXBfdXBkYXRlICY9IH5DU0lEX1JV UF9BVVBfUkRJKHBvcnRfaWQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBfX2NzaWRfcmVnX3Vw ZGF0ZShzdHJ1Y3QgY3NpZF9kZXZpY2UgKmNzaWQsIGludCBwb3J0X2lkKQo+ICt7Cj4gKwljc2lk LT5ydXBfdXBkYXRlIHw9IENTSURfUlVQX0FVUF9SREkocG9ydF9pZCk7Cj4gKwl3cml0ZWwoY3Np ZC0+cnVwX3VwZGF0ZSwgY3NpZC0+YmFzZSArIENTSURfUlVQX0NNRCk7Cj4gKwo+ICsJX19jc2lk X2F1cF9ydXBfdHJpZ2dlcihjc2lkKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgX19jc2lkX3Jl Z191cGRhdGVfY2xlYXIoc3RydWN0IGNzaWRfZGV2aWNlICpjc2lkLCBpbnQgcG9ydF9pZCkKPiAr ewo+ICsJY3NpZC0+cnVwX3VwZGF0ZSAmPSB+Q1NJRF9SVVBfQVVQX1JESShwb3J0X2lkKTsKPiAr fQoKW1NldmVyaXR5OiBNZWRpdW1dCkNhbiBjb25jdXJyZW50IHVwZGF0ZXMgdG8gY3NpZC0+YXVw X3VwZGF0ZSBhbmQgY3NpZC0+cnVwX3VwZGF0ZSByYWNlIHdpdGgKY3NpZF9pc3IoKT8KCkR1cmlu ZyBzdHJlYW1pbmcsIHZmZV9xdWV1ZV9idWZmZXJfdjIoKSBhbmQgdmZlX2VuYWJsZV9vdXRwdXRf djIoKSBpbgpkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Fjb20vY2Ftc3MvY2Ftc3MtdmZlLmMgY2Fs bCBvcHMtPmFkZHJfdXBkYXRlKCksCm9wcy0+cmVnX3VwZGF0ZSgpLCBvcHMtPmFkZHJfdXBkYXRl X2NsZWFyKCksIGFuZCBvcHMtPnJlZ191cGRhdGVfY2xlYXIoKQp3aGlsZSBob2xkaW5nIHZmZS0+ b3V0cHV0X2xvY2suCgpIb3dldmVyLCBjc2lkX2lzcigpIGluIGRyaXZlcnMvbWVkaWEvcGxhdGZv cm0vcWNvbS9jYW1zcy9jYW1zcy1jc2lkLTEwODAuYwpjbGVhcnMgdGhvc2Ugc2FtZSBiaXRtYXNr cyBpbiBoYXJkaXJxIGNvbnRleHQgd2hlbiBJTkZPX1JVUF9ET05FIGlzIHNldCwKd2l0aG91dCBo b2xkaW5nIHZmZS0+b3V0cHV0X2xvY2sgb3IgYW55IENTSUQtbGV2ZWwgc3BpbmxvY2s6Cgpkcml2 ZXJzL21lZGlhL3BsYXRmb3JtL3Fjb20vY2Ftc3MvY2Ftc3MtY3NpZC0xMDgwLmM6Y3NpZF9pc3Io KSB7CgkuLi4KCQkJaWYgKHZhbCAmIElORk9fUlVQX0RPTkUpIHsKCQkJCV9fY3NpZF9hZGRyX3Vw ZGF0ZV9jbGVhcihjc2lkLCBpKTsKCQkJCV9fY3NpZF9yZWdfdXBkYXRlX2NsZWFyKGNzaWQsIGkp OwoJCQl9CgkuLi4KfQoKSW4gYWRkaXRpb24sIGNzaWRfY29uZmlndXJlX3N0cmVhbSgpIGNhbGxz IF9fY3NpZF9hZGRyX3VwZGF0ZSgpIGFuZApfX2NzaWRfcmVnX3VwZGF0ZSgpIGluIHByb2Nlc3Mg Y29udGV4dCB3aXRob3V0IGhvbGRpbmcgYSBsb2NrIGFmdGVyCnZmZV9lbmFibGVfb3V0cHV0X3Yy KCkgaGFzIGFscmVhZHkgc2V0IG91dHB1dC0+c3RhdGUgdG8gVkZFX09VVFBVVF9PTiBhbmQKd2hp bGUgY3NpZC0+aXJxIGlzIGVuYWJsZWQuCgpDb3VsZCB0aGVzZSB1bnN5bmNocm9uaXplZCByZWFk LW1vZGlmeS13cml0ZSBvcGVyYXRpb25zIG9uIGNzaWQtPmF1cF91cGRhdGUKYW5kIGNzaWQtPnJ1 cF91cGRhdGUsIGFsb25nIHdpdGggdGhlIHdyaXRlcyB0byBDU0lEX0FVUF9DTUQsIENTSURfUlVQ X0NNRCwKYW5kIENTSURfUlVQX0FVUF9DTUQsIGNsb2JiZXIgYSBuZXdseSBzZXQgUkRJIGJpdCBv ciB3cml0ZSBhIGp1c3QtY2xlYXJlZCBSREkKYml0IGJhY2sgaW50byB0aGUgY29tbWFuZCByZWdp c3RlcnM/CgpbIC4uLiBdCgo+ICtzdGF0aWMgdm9pZCBfX2NzaWRfY29uZmlndXJlX3JkaV9zdHJl YW0oc3RydWN0IGNzaWRfZGV2aWNlICpjc2lkLCB1OCBlbmFibGUsIHU4IHBvcnQsIHU4IHZjKQo+ ICt7Cj4gKwl1OCBsYW5lX2NudCA9IGNzaWQtPnBoeS5sYW5lX2NudDsKPiArCXUzMiB2YWw7Cj4g Kwo+ICsJLyogU291cmNlIHBhZHMgbWF0Y2hpbmcgUkRJIGNoYW5uZWxzIG9uIGhhcmR3YXJlLgo+ ICsJICogRS5nLiBQYWQgMSAtPiBSREkwLCBQYWQgMiAtPiBSREkxLCBldGMuCj4gKwkgKi8KPiAr CXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKmlucHV0X2Zvcm1hdCA9ICZjc2lkLT5mbXRbTVNN X0NTSURfUEFEX0ZJUlNUX1NSQyArIHBvcnRdOwo+ICsJY29uc3Qgc3RydWN0IGNzaWRfZm9ybWF0 X2luZm8gKmZvcm1hdCA9IGNzaWRfZ2V0X2ZtdF9lbnRyeShjc2lkLT5yZXMtPmZvcm1hdHMtPmZv cm1hdHMsCj4gKwkJCQkJCQkJICAgY3NpZC0+cmVzLT5mb3JtYXRzLT5uZm9ybWF0cywKPiArCQkJ CQkJCQkgICBpbnB1dF9mb3JtYXQtPmNvZGUpOwoKW1NldmVyaXR5OiBIaWdoXQpEb2VzIF9fY3Np ZF9jb25maWd1cmVfcmRpX3N0cmVhbSgpIHJlYWQgcGFzdCB0aGUgZW5kIG9mIGNzaWQtPmZtdFtd IHdoZW4KY29uZmlndXJpbmcgdGhlIGZpZnRoIHN0cmVhbSBvbiBub24tbGl0ZSBDU0lEIDEwODAg aW5zdGFuY2VzPwoKRm9yIG5vbi1saXRlIENTSUQgMTA4MCBpbnN0YW5jZXMgKENTSUQwLCBDU0lE MSwgYW5kIENTSUQyIGluCmNzaWRfcmVzX2thYW5hcGFsaSksIE1TTV9DU0lEX01BWF9TUkNfU1RS RUFNU18xMDgwIGV2YWx1YXRlcyB0byA1LiBJbgpjc2lkX2NvbmZpZ3VyZV9zdHJlYW0oKSwgdGhl IGxvb3AgaXRlcmF0ZXMgaSBmcm9tIDAgdG8gNCBhbmQgY2FsbHMKX19jc2lkX2NvbmZpZ3VyZV9y ZGlfc3RyZWFtKGNzaWQsIGVuYWJsZSwgaSwgMCkgd2hlbiBCSVQoaSkgaXMgc2V0IGluCmNzaWQt PnBoeS5lbl92Yy4KCkhvd2V2ZXIsIGluIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vcWNvbS9jYW1z cy9jYW1zcy1jc2lkLmgsIE1TTV9DU0lEX1BBRFNfTlVNCmlzIHN0aWxsIGRlZmluZWQgYXMgNToK CiNkZWZpbmUgTVNNX0NTSURfUEFEX1NJTksgMAojZGVmaW5lIE1TTV9DU0lEX1BBRF9GSVJTVF9T UkMgMQojZGVmaW5lIE1TTV9DU0lEX1BBRFNfTlVNIDUKCnN0cnVjdCBjc2lkX2RldmljZSB7Cgku Li4KCXN0cnVjdCBtZWRpYV9wYWQgcGFkc1tNU01fQ1NJRF9QQURTX05VTV07CgkuLi4KCXN0cnVj dCB2NGwyX21idXNfZnJhbWVmbXQgZm10W01TTV9DU0lEX1BBRFNfTlVNXTsKCS4uLgp9OwoKV2hl biBwb3J0IGlzIDQgKFJESTQpLCBNU01fQ1NJRF9QQURfRklSU1RfU1JDICsgcG9ydCBldmFsdWF0 ZXMgdG8gNSwgd2hpY2ggaXMKb25lIGVsZW1lbnQgcGFzdCB0aGUgZW5kIG9mIHRoZSA1LWVsZW1l bnQgY3NpZC0+Zm10W10gYXJyYXkuIEluIGFkZGl0aW9uLAptc21fY3NpZF9yZWdpc3Rlcl9lbnRp dHkoKSBpbiBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Fjb20vY2Ftc3MvY2Ftc3MtY3NpZC5jCm9u bHkgaW5pdGlhbGl6ZXMgTVNNX0NTSURfUEFEU19OVU0gcGFkcyBvbiB0aGUgbWVkaWEgZW50aXR5 LCBsZWF2aW5nIFJESTQKd2l0aG91dCBhIHNvdXJjZSBtZWRpYSBwYWQuCgotLSAKU2FzaGlrbyBB SSByZXZpZXcgwrcgaHR0cHM6Ly9zYXNoaWtvLmRldi8jL3BhdGNoc2V0LzIwMjYxMDI0LWthYW5h cGFsaS1jYW1zcy12MjItMC03ZGEzZWE0OWM4YTFAb3NzLnF1YWxjb21tLmNvbT9wYXJ0PTgKCi0t IApsaW51eC1waHkgbWFpbGluZyBsaXN0CmxpbnV4LXBoeUBsaXN0cy5pbmZyYWRlYWQub3JnCmh0 dHBzOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXBoeQo=