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 679FD3EB0E9 for ; Thu, 8 Oct 2026 07:32:56 +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=1791444789; cv=none; b=pcbw/rPCWNWPDJ5bEkNieK3iCVJDf+RBrNwX82wa9dcHdS6Cqo4JZdXZGU8bqgtQdcW7FAmAnHVMo6aQVHqp3bvno4WKXZGhT8jax+ERPBd7RWEF3M+73lVl2qjADcRzl9dbifyPjirIBNqaCKVcuv4FYN53EaCkVoPeMuS+TMM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1791444789; c=relaxed/simple; bh=iMCuWnYezqWEqZ1UgJ+xdDf7SYLllLuUKICSyH49QIo=; h=Message-ID:From:Subject:To:Cc:In-Reply-To:References:Content-Type: Date; b=h9UzVG29juVfSgkCm/ut6ZIJYn6ALw5uAskhrONEfSxVtMpgBIwFjjy3FMZjhCdY/66mMUZKPeOJz+6gt1iKNiZ6eIfo+mM3YDtQoS4E0wHl9r/LsDJrfW9FJsNxpNUT1eNPhlW/8maRCaJ7exoUKLiOrEmi8Vuf/I12ET7lfzU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=XHWR7bTg; 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="XHWR7bTg" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 214CE1F000FF; Thu, 8 Oct 2026 07:32:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1791444775; bh=qL0f3zWSOBG7sG3mN4VY8+QAxFs5hxiR8d+gHZ7b/vg=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=XHWR7bTg2sHfrnnyrhwKexYeO5rO5rLgshUh3cT/Bkz+lE6RxJVM7h9nc2SeW31v/ YSWMTVfGtcJ6o2JC9Ys9UU0tIKJpIlg8E1xIkGGRqgm0WopSJvxazhPutvsN/Bel/I fT3/IppnA03yNDr184jWLNRjAnoRcEwqfZJycl7RksWZU01M5w8/SUR/cZ5x/x3a8o dJUX/7JTRmXpP0ytJCemqIwwx40FaEKOtSGv2VOcJEI5T7q3phQg/ptFAfeD/ks4FN ocwMP+yOZsIS94gvVPWzQEeFPW9tkmmIDSSCYsbrVzzgexH3QS2OVVcCuRBT7947fO DoGg1zH1qfyaQ== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH v19 07/12] media: qcom: camss: csid: Add support for CSID 1080 Reply-To: sashiko-reviews@lists.linux.dev To: "Hangxiang Ma" Cc: vkoul@kernel.org, olteanv@gmail.com, media-ci@linuxtv.org, robh@kernel.org, neil.armstrong@linaro.org, linux-phy@lists.infradead.org, devicetree@vger.kernel.org, conor+dt@kernel.org In-Reply-To: <20261008-kaanapali-camss-v19-7-b2c583ef50e0@oss.qualcomm.com> References: <20261008-kaanapali-camss-v19-0-b2c583ef50e0@oss.qualcomm.com> <20261008-kaanapali-camss-v19-7-b2c583ef50e0@oss.qualcomm.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Thu, 08 Oct 2026 07:32:54 +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: data race on aup_update and rup_update masks between proces= s and IRQ context - [High] media: missing IRQ mask programming prevents INFO_RUP_DONE interru= pts - [Medium] media: camss: csid-1080: data race on aup_update and rup_update = bitmasks -- commit c1ffc650d77cc9e495d5b9cec2dfa9e85e2f485e Author: Hangxiang Ma media: qcom: camss: csid: Add support for CSID 1080 =20 Add support for the CSID 1080 hardware found on Kaanapali SoC. Introduce CSID 1080 hardware resource descriptions and implement the hardware-specific register programming, reset sequence, and BUF_DONE interrupt handling. > 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..46e443e05195a > --- /dev/null > +++ b/drivers/media/platform/qcom/camss/camss-csid-1080.c [ ... ] > +static void __csid_aup_rup_clear(struct csid_device *csid, int port_id) > +{ > + /* Hardware clears the registers upon consuming the settings */ > + csid->aup_update &=3D ~CSID_RUP_AUP_RDI(port_id); > + csid->rup_update &=3D ~CSID_RUP_AUP_RDI(port_id); > +} > + > +static void __csid_aup_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_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); > +} [Severity: High] Does this code introduce a data race between process and hard IRQ context? In process context, csid_configure_stream() updates these variables via non-atomic bitwise OR (|=3D) using __csid_aup_update() and __csid_reg_updat= e(). Concurrently, the hardware interrupt handler csid_isr() (running in hard IRQ context) clears bits in these exact same variables via non-atomic bitwise A= ND NOT (&=3D ~) through __csid_aup_rup_clear(). Because there is no spinlock or atomic bit operations protecting these read-modify-write sequences, an interrupt firing on the same or another CPU during stream configuration could cause a TOCTOU data race. Could this lead to lost bit updates, resulting in hardware commands being dropped or spuriously re-triggered? [ ... ] > +static irqreturn_t csid_isr(int irq, void *dev) > +{ > + struct csid_device *csid =3D dev; > + u32 val, buf_done_val; > + u8 reset_done; > + int i; > + > + val =3D readl(csid->base + CSID_TOP_IRQ_STATUS); > + writel(val, csid->base + CSID_TOP_IRQ_CLEAR); > + > + reset_done =3D val & INFO_RST_DONE; > + > + buf_done_val =3D readl(csid->base + CSID_BUF_DONE_IRQ_STATUS); > + writel(buf_done_val, csid->base + CSID_BUF_DONE_IRQ_CLEAR); > + > + for (i =3D 0; i < MSM_CSID_MAX_SRC_STREAMS_1080; i++) { > + if (csid->phy.en_vc & BIT(i)) { > + val =3D readl(csid->base + CSID_CSI2_RDIN_IRQ_STATUS(i)); > + writel(val, csid->base + CSID_CSI2_RDIN_IRQ_CLEAR(i)); > + > + if (val & INFO_RUP_DONE) > + csid_subdev_reg_update(csid, i, true); [Severity: High] Is the INFO_RUP_DONE interrupt properly unmasked? The driver relies on the INFO_RUP_DONE interrupt to clear the pending aup_update mask in the ISR via csid_subdev_reg_update(). However, the driver never writes to CSID_CSI2_RDIN_IRQ_MASK(i) to unmask these interrupts, nor does it enable the corresponding top-level aggregation bit (CSI2_RX_IRQ_STATUS) in CSID_TOP_IRQ_MASK during setup or reset. Because the interrupts appear to be permanently masked in hardware, the RUP_DONE interrupt might never trigger the csid_isr() independently. Could the aup_update state be left orphaned if no BUF_DONE interrupt happens to fire, breaking asynchronous updates? [ ... ] > +static int csid_reset(struct csid_device *csid) > +{ > + unsigned long time; > + u32 val; > + int i; > + > + reinit_completion(&csid->reset_complete); > + > + val =3D INFO_RST_DONE | BUF_DONE_IRQ_STATUS; > + writel(val, csid->base + CSID_TOP_IRQ_CLEAR); > + writel(val, csid->base + CSID_TOP_IRQ_MASK); > + > + val =3D 0; > + for (i =3D 0; i < MSM_CSID_MAX_SRC_STREAMS_1080; i++) { > + if (csid->phy.en_vc & BIT(i)) { > + /* > + * Only need to clear buf done IRQ status here, > + * RUP done IRQ status will be cleared once isr > + * strobe generated by CSID_RST_CMD > + */ > + val |=3D BIT(BUF_DONE_IRQ_STATUS_RDI_OFFSET + i); > + } > + } > + writel(val, csid->base + CSID_BUF_DONE_IRQ_CLEAR); > + writel(val, csid->base + CSID_BUF_DONE_IRQ_MASK); [Severity: High] This appears to be where top-level masking explicitly omits CSI2_RX_IRQ_STATUS, and CSID_CSI2_RDIN_IRQ_MASK is never programmed, as noted above. --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20261008-kaanapali-= camss-v19-0-b2c583ef50e0@oss.qualcomm.com?part=3D7 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 C50F3CA600B for ; Thu, 8 Oct 2026 07:32:57 +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=hFbQBu/05OQ/6gEkAWuZ0nSwP4v3DVtxgt4wQShevrI=; b=Ajvc2RmTXCNqF5 3FY6Cr5F4CnT0gQPqtLaZhfRPEaMRPcE7WN3fsX1pozI/Bun2UlgjklqKvnBPhE+cVyPkeS3lTVue 7H/4q1XUwLivK5GqkczEe9KOBjUwf/26omnTnzpYD/STzro9nxJsSIt4OgJpPIP9xCjqlRuNNN8rB beEwQmaumehVxxxmg9JpuSHAvPGivDyJNyJoQZKofa+3z9gwK+oA19UUkuIGXXj0SHmKyFGo5UN5V 7synSiJlGlLAMdDN0cveZ28OzzlPxh+Q5/BhRUP8Vb1nQ2/izlLOuIRBnR3jeHm6+Yyrl4gzIyW0P amrtAQAQsE0Kl5sHeNdw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1xEicb-00000003lXW-25xi; Thu, 08 Oct 2026 07:32:57 +0000 Received: from tor.source.kernel.org ([172.105.4.254]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1xEica-00000003lWz-2gh1 for linux-phy@lists.infradead.org; Thu, 08 Oct 2026 07:32:56 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id E4AC4601F9; Thu, 8 Oct 2026 07:32:55 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 214CE1F000FF; Thu, 8 Oct 2026 07:32:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1791444775; bh=qL0f3zWSOBG7sG3mN4VY8+QAxFs5hxiR8d+gHZ7b/vg=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=XHWR7bTg2sHfrnnyrhwKexYeO5rO5rLgshUh3cT/Bkz+lE6RxJVM7h9nc2SeW31v/ YSWMTVfGtcJ6o2JC9Ys9UU0tIKJpIlg8E1xIkGGRqgm0WopSJvxazhPutvsN/Bel/I fT3/IppnA03yNDr184jWLNRjAnoRcEwqfZJycl7RksWZU01M5w8/SUR/cZ5x/x3a8o dJUX/7JTRmXpP0ytJCemqIwwx40FaEKOtSGv2VOcJEI5T7q3phQg/ptFAfeD/ks4FN ocwMP+yOZsIS94gvVPWzQEeFPW9tkmmIDSSCYsbrVzzgexH3QS2OVVcCuRBT7947fO DoGg1zH1qfyaQ== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH v19 07/12] media: qcom: camss: csid: Add support for CSID 1080 To: "Hangxiang Ma" Cc: vkoul@kernel.org, olteanv@gmail.com, media-ci@linuxtv.org, robh@kernel.org, neil.armstrong@linaro.org, linux-phy@lists.infradead.org, devicetree@vger.kernel.org, conor+dt@kernel.org In-Reply-To: <20261008-kaanapali-camss-v19-7-b2c583ef50e0@oss.qualcomm.com> References: <20261008-kaanapali-camss-v19-0-b2c583ef50e0@oss.qualcomm.com> <20261008-kaanapali-camss-v19-7-b2c583ef50e0@oss.qualcomm.com> Date: Thu, 08 Oct 2026 07:32:54 +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 MyBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6Ci0gW0hpZ2hdIG1lZGlhOiBkYXRhIHJh Y2Ugb24gYXVwX3VwZGF0ZSBhbmQgcnVwX3VwZGF0ZSBtYXNrcyBiZXR3ZWVuIHByb2Nlc3MgYW5k IElSUSBjb250ZXh0Ci0gW0hpZ2hdIG1lZGlhOiBtaXNzaW5nIElSUSBtYXNrIHByb2dyYW1taW5n IHByZXZlbnRzIElORk9fUlVQX0RPTkUgaW50ZXJydXB0cwotIFtNZWRpdW1dIG1lZGlhOiBjYW1z czogY3NpZC0xMDgwOiBkYXRhIHJhY2Ugb24gYXVwX3VwZGF0ZSBhbmQgcnVwX3VwZGF0ZSBiaXRt YXNrcwotLQoKY29tbWl0IGMxZmZjNjUwZDc3Y2M5ZTQ5NWQ1YjljZWMyZGZhOWU4NWUyZjQ4NWUK QXV0aG9yOiBIYW5neGlhbmcgTWEgPGhhbmd4aWFuZy5tYUBvc3MucXVhbGNvbW0uY29tPgoKbWVk aWE6IHFjb206IGNhbXNzOiBjc2lkOiBBZGQgc3VwcG9ydCBmb3IgQ1NJRCAxMDgwCiAgICAKQWRk IHN1cHBvcnQgZm9yIHRoZSBDU0lEIDEwODAgaGFyZHdhcmUgZm91bmQgb24gS2FhbmFwYWxpIFNv Qy4KSW50cm9kdWNlIENTSUQgMTA4MCBoYXJkd2FyZSByZXNvdXJjZSBkZXNjcmlwdGlvbnMgYW5k IGltcGxlbWVudCB0aGUKaGFyZHdhcmUtc3BlY2lmaWMgcmVnaXN0ZXIgcHJvZ3JhbW1pbmcsIHJl c2V0IHNlcXVlbmNlLCBhbmQgQlVGX0RPTkUKaW50ZXJydXB0IGhhbmRsaW5nLgoKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9xY29tL2NhbXNzL2NhbXNzLWNzaWQtMTA4MC5j IGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9xY29tL2NhbXNzL2NhbXNzLWNzaWQtMTA4MC5jCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAwLi40NmU0NDNlMDUxOTVh Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vcWNvbS9jYW1z cy9jYW1zcy1jc2lkLTEwODAuYwoKWyAuLi4gXQoKPiArc3RhdGljIHZvaWQgX19jc2lkX2F1cF9y dXBfY2xlYXIoc3RydWN0IGNzaWRfZGV2aWNlICpjc2lkLCBpbnQgcG9ydF9pZCkKPiArewo+ICsJ LyogSGFyZHdhcmUgY2xlYXJzIHRoZSByZWdpc3RlcnMgdXBvbiBjb25zdW1pbmcgdGhlIHNldHRp bmdzICovCj4gKwljc2lkLT5hdXBfdXBkYXRlICY9IH5DU0lEX1JVUF9BVVBfUkRJKHBvcnRfaWQp Owo+ICsJY3NpZC0+cnVwX3VwZGF0ZSAmPSB+Q1NJRF9SVVBfQVVQX1JESShwb3J0X2lkKTsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgX19jc2lkX2F1cF91cGRhdGUoc3RydWN0IGNzaWRfZGV2aWNl ICpjc2lkLCBpbnQgcG9ydF9pZCkKPiArewo+ICsJY3NpZC0+YXVwX3VwZGF0ZSB8PSBDU0lEX1JV UF9BVVBfUkRJKHBvcnRfaWQpOwo+ICsJd3JpdGVsKGNzaWQtPmF1cF91cGRhdGUsIGNzaWQtPmJh c2UgKyBDU0lEX0FVUF9DTUQpOwo+ICsKPiArCV9fY3NpZF9hdXBfcnVwX3RyaWdnZXIoY3NpZCk7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIF9fY3NpZF9yZWdfdXBkYXRlKHN0cnVjdCBjc2lkX2Rl dmljZSAqY3NpZCwgaW50IHBvcnRfaWQpCj4gK3sKPiArCWNzaWQtPnJ1cF91cGRhdGUgfD0gQ1NJ RF9SVVBfQVVQX1JESShwb3J0X2lkKTsKPiArCXdyaXRlbChjc2lkLT5ydXBfdXBkYXRlLCBjc2lk LT5iYXNlICsgQ1NJRF9SVVBfQ01EKTsKPiArCj4gKwlfX2NzaWRfYXVwX3J1cF90cmlnZ2VyKGNz aWQpOwo+ICt9CgpbU2V2ZXJpdHk6IEhpZ2hdCkRvZXMgdGhpcyBjb2RlIGludHJvZHVjZSBhIGRh dGEgcmFjZSBiZXR3ZWVuIHByb2Nlc3MgYW5kIGhhcmQgSVJRIGNvbnRleHQ/CgpJbiBwcm9jZXNz IGNvbnRleHQsIGNzaWRfY29uZmlndXJlX3N0cmVhbSgpIHVwZGF0ZXMgdGhlc2UgdmFyaWFibGVz IHZpYQpub24tYXRvbWljIGJpdHdpc2UgT1IgKHw9KSB1c2luZyBfX2NzaWRfYXVwX3VwZGF0ZSgp IGFuZCBfX2NzaWRfcmVnX3VwZGF0ZSgpLgoKQ29uY3VycmVudGx5LCB0aGUgaGFyZHdhcmUgaW50 ZXJydXB0IGhhbmRsZXIgY3NpZF9pc3IoKSAocnVubmluZyBpbiBoYXJkIElSUQpjb250ZXh0KSBj bGVhcnMgYml0cyBpbiB0aGVzZSBleGFjdCBzYW1lIHZhcmlhYmxlcyB2aWEgbm9uLWF0b21pYyBi aXR3aXNlIEFORApOT1QgKCY9IH4pIHRocm91Z2ggX19jc2lkX2F1cF9ydXBfY2xlYXIoKS4KCkJl Y2F1c2UgdGhlcmUgaXMgbm8gc3BpbmxvY2sgb3IgYXRvbWljIGJpdCBvcGVyYXRpb25zIHByb3Rl Y3RpbmcgdGhlc2UKcmVhZC1tb2RpZnktd3JpdGUgc2VxdWVuY2VzLCBhbiBpbnRlcnJ1cHQgZmly aW5nIG9uIHRoZSBzYW1lIG9yIGFub3RoZXIgQ1BVCmR1cmluZyBzdHJlYW0gY29uZmlndXJhdGlv biBjb3VsZCBjYXVzZSBhIFRPQ1RPVSBkYXRhIHJhY2UuCgpDb3VsZCB0aGlzIGxlYWQgdG8gbG9z dCBiaXQgdXBkYXRlcywgcmVzdWx0aW5nIGluIGhhcmR3YXJlIGNvbW1hbmRzIGJlaW5nCmRyb3Bw ZWQgb3Igc3B1cmlvdXNseSByZS10cmlnZ2VyZWQ/CgpbIC4uLiBdCgo+ICtzdGF0aWMgaXJxcmV0 dXJuX3QgY3NpZF9pc3IoaW50IGlycSwgdm9pZCAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgY3NpZF9k ZXZpY2UgKmNzaWQgPSBkZXY7Cj4gKwl1MzIgdmFsLCBidWZfZG9uZV92YWw7Cj4gKwl1OCByZXNl dF9kb25lOwo+ICsJaW50IGk7Cj4gKwo+ICsJdmFsID0gcmVhZGwoY3NpZC0+YmFzZSArIENTSURf VE9QX0lSUV9TVEFUVVMpOwo+ICsJd3JpdGVsKHZhbCwgY3NpZC0+YmFzZSArIENTSURfVE9QX0lS UV9DTEVBUik7Cj4gKwo+ICsJcmVzZXRfZG9uZSA9IHZhbCAmIElORk9fUlNUX0RPTkU7Cj4gKwo+ ICsJYnVmX2RvbmVfdmFsID0gcmVhZGwoY3NpZC0+YmFzZSArIENTSURfQlVGX0RPTkVfSVJRX1NU QVRVUyk7Cj4gKwl3cml0ZWwoYnVmX2RvbmVfdmFsLCBjc2lkLT5iYXNlICsgQ1NJRF9CVUZfRE9O RV9JUlFfQ0xFQVIpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBNU01fQ1NJRF9NQVhfU1JDX1NU UkVBTVNfMTA4MDsgaSsrKSB7Cj4gKwkJaWYgKGNzaWQtPnBoeS5lbl92YyAmIEJJVChpKSkgewo+ ICsJCQl2YWwgPSByZWFkbChjc2lkLT5iYXNlICsgQ1NJRF9DU0kyX1JESU5fSVJRX1NUQVRVUyhp KSk7Cj4gKwkJCXdyaXRlbCh2YWwsIGNzaWQtPmJhc2UgKyBDU0lEX0NTSTJfUkRJTl9JUlFfQ0xF QVIoaSkpOwo+ICsKPiArCQkJaWYgKHZhbCAmIElORk9fUlVQX0RPTkUpCj4gKwkJCQljc2lkX3N1 YmRldl9yZWdfdXBkYXRlKGNzaWQsIGksIHRydWUpOwoKW1NldmVyaXR5OiBIaWdoXQpJcyB0aGUg SU5GT19SVVBfRE9ORSBpbnRlcnJ1cHQgcHJvcGVybHkgdW5tYXNrZWQ/CgpUaGUgZHJpdmVyIHJl bGllcyBvbiB0aGUgSU5GT19SVVBfRE9ORSBpbnRlcnJ1cHQgdG8gY2xlYXIgdGhlIHBlbmRpbmcK YXVwX3VwZGF0ZSBtYXNrIGluIHRoZSBJU1IgdmlhIGNzaWRfc3ViZGV2X3JlZ191cGRhdGUoKS4K Ckhvd2V2ZXIsIHRoZSBkcml2ZXIgbmV2ZXIgd3JpdGVzIHRvIENTSURfQ1NJMl9SRElOX0lSUV9N QVNLKGkpIHRvIHVubWFzawp0aGVzZSBpbnRlcnJ1cHRzLCBub3IgZG9lcyBpdCBlbmFibGUgdGhl IGNvcnJlc3BvbmRpbmcgdG9wLWxldmVsIGFnZ3JlZ2F0aW9uCmJpdCAoQ1NJMl9SWF9JUlFfU1RB VFVTKSBpbiBDU0lEX1RPUF9JUlFfTUFTSyBkdXJpbmcgc2V0dXAgb3IgcmVzZXQuCgpCZWNhdXNl IHRoZSBpbnRlcnJ1cHRzIGFwcGVhciB0byBiZSBwZXJtYW5lbnRseSBtYXNrZWQgaW4gaGFyZHdh cmUsIHRoZQpSVVBfRE9ORSBpbnRlcnJ1cHQgbWlnaHQgbmV2ZXIgdHJpZ2dlciB0aGUgY3NpZF9p c3IoKSBpbmRlcGVuZGVudGx5LgoKQ291bGQgdGhlIGF1cF91cGRhdGUgc3RhdGUgYmUgbGVmdCBv cnBoYW5lZCBpZiBubyBCVUZfRE9ORSBpbnRlcnJ1cHQgaGFwcGVucwp0byBmaXJlLCBicmVha2lu ZyBhc3luY2hyb25vdXMgdXBkYXRlcz8KClsgLi4uIF0KCj4gK3N0YXRpYyBpbnQgY3NpZF9yZXNl dChzdHJ1Y3QgY3NpZF9kZXZpY2UgKmNzaWQpCj4gK3sKPiArCXVuc2lnbmVkIGxvbmcgdGltZTsK PiArCXUzMiB2YWw7Cj4gKwlpbnQgaTsKPiArCj4gKwlyZWluaXRfY29tcGxldGlvbigmY3NpZC0+ cmVzZXRfY29tcGxldGUpOwo+ICsKPiArCXZhbCA9IElORk9fUlNUX0RPTkUgfCBCVUZfRE9ORV9J UlFfU1RBVFVTOwo+ICsJd3JpdGVsKHZhbCwgY3NpZC0+YmFzZSArIENTSURfVE9QX0lSUV9DTEVB Uik7Cj4gKwl3cml0ZWwodmFsLCBjc2lkLT5iYXNlICsgQ1NJRF9UT1BfSVJRX01BU0spOwo+ICsK PiArCXZhbCA9IDA7Cj4gKwlmb3IgKGkgPSAwOyBpIDwgTVNNX0NTSURfTUFYX1NSQ19TVFJFQU1T XzEwODA7IGkrKykgewo+ICsJCWlmIChjc2lkLT5waHkuZW5fdmMgJiBCSVQoaSkpIHsKPiArCQkJ LyoKPiArCQkJICogT25seSBuZWVkIHRvIGNsZWFyIGJ1ZiBkb25lIElSUSBzdGF0dXMgaGVyZSwK PiArCQkJICogUlVQIGRvbmUgSVJRIHN0YXR1cyB3aWxsIGJlIGNsZWFyZWQgb25jZSBpc3IKPiAr CQkJICogc3Ryb2JlIGdlbmVyYXRlZCBieSBDU0lEX1JTVF9DTUQKPiArCQkJICovCj4gKwkJCXZh bCB8PSBCSVQoQlVGX0RPTkVfSVJRX1NUQVRVU19SRElfT0ZGU0VUICsgaSk7Cj4gKwkJfQo+ICsJ fQo+ICsJd3JpdGVsKHZhbCwgY3NpZC0+YmFzZSArIENTSURfQlVGX0RPTkVfSVJRX0NMRUFSKTsK PiArCXdyaXRlbCh2YWwsIGNzaWQtPmJhc2UgKyBDU0lEX0JVRl9ET05FX0lSUV9NQVNLKTsKCltT ZXZlcml0eTogSGlnaF0KVGhpcyBhcHBlYXJzIHRvIGJlIHdoZXJlIHRvcC1sZXZlbCBtYXNraW5n IGV4cGxpY2l0bHkgb21pdHMKQ1NJMl9SWF9JUlFfU1RBVFVTLCBhbmQgQ1NJRF9DU0kyX1JESU5f SVJRX01BU0sgaXMgbmV2ZXIgcHJvZ3JhbW1lZCwKYXMgbm90ZWQgYWJvdmUuCgotLSAKU2FzaGlr byBBSSByZXZpZXcgwrcgaHR0cHM6Ly9zYXNoaWtvLmRldi8jL3BhdGNoc2V0LzIwMjYxMDA4LWth YW5hcGFsaS1jYW1zcy12MTktMC1iMmM1ODNlZjUwZTBAb3NzLnF1YWxjb21tLmNvbT9wYXJ0PTcK Ci0tIApsaW51eC1waHkgbWFpbGluZyBsaXN0CmxpbnV4LXBoeUBsaXN0cy5pbmZyYWRlYWQub3Jn Cmh0dHBzOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXBoeQo=