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 2B6143546E0 for ; Wed, 22 Jul 2026 14:01:57 +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=1784728919; cv=none; b=pT0VifEIAx+vvm85XET29/R7SBq9jrkVi7nb568eTQvDXXnxHccjiJDbC6JAPtXcyYoCElCmlcQAJiRJ724Kt7BoC7r2J8lcDgt7HAGf7eQjF++hvWGvI6C/Cq4QCGOFa8oavRcKIfykl8fuI5f0iLF67B2MofuCYO1LSLKTayY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784728919; c=relaxed/simple; bh=euWAh0ytWsiTLa9LjeWm7LGxAn7zLvto7OTIw+M1eHo=; h=From:Subject:To:Cc:In-Reply-To:References:Content-Type:Date: Message-Id; b=cRmDv9V7GMoytiFGk45M8cpek+KMgKyOtwtC3gi/IRsd7tx5SRUc3+VjN8wnBhk556im+6s9bP+5sheSwxNYH1p0C0BACPVyk7cXM/W9ZeQOYgMUlwlJaI0idyuejG3ejgyX4Gepu4OatKMain8wvBONjC8sEEun/OzcSGs1px8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=AeAobieH; 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="AeAobieH" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 619571F000E9; Wed, 22 Jul 2026 14:01:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1784728917; bh=T/Ebh9n6wMSSNQHytfNWJWj3bMOROvGvIor+jJYvW7c=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=AeAobieHgNyYEBEVp/iwGkhsbR/S7zQqeqxLQ12chiycacPlN8oCPhovfBxH4aVgR LB5xYjISrWjQIAyis1FCPKts4B1qzVmtTLCI75ztZRUqmuF8JTDhV4DOEljeaWcxDc P+m+t2qEwkl23wC3ipO+NrUOshCuDPrOoZ8lg4Uo8/dggZkYFDMMxAZ9zHDZLYpq0a VH2pPGU5Run3nvI9eFyOUSNJtUi6EpQk+DX7pFCRlALd6wY1UwDI8PT2NWsFJ7Ejrg 0NFjwB0jeRV2AwLVL3mvs5QqjP4JV8sU86zRF3ZlpJpo534qN692gtiX28d6KXn7/X i0H1lKdobvQLw== From: sashiko-bot@kernel.org Subject: Re: [PATCH v3 2/2] phy: qcom: qmp-usb: Add support for SA8255P Reply-To: sashiko-reviews@lists.linux.dev To: "Mattijs Korpershoek" Cc: conor+dt@kernel.org, neil.armstrong@linaro.org, olteanv@gmail.com, robh@kernel.org, vkoul@kernel.org, linux-phy@lists.infradead.org, devicetree@vger.kernel.org In-Reply-To: <20260722-phy-qcom-qmp-usb-8255-v3-2-e789070b48f7@kernel.org> References: <20260722-phy-qcom-qmp-usb-8255-v3-0-e789070b48f7@kernel.org> <20260722-phy-qcom-qmp-usb-8255-v3-2-e789070b48f7@kernel.org> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Wed, 22 Jul 2026 14:01:56 +0000 Message-Id: <20260722140157.619571F000E9@smtp.kernel.org> Precedence: bulk X-Mailing-List: devicetree@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Thank you for your contribution! Sashiko AI review found 2 potential issue(= s) to consider: New issues: - [High] Incorrect power domain sequencing in `d3_to_d0` and `d0_to_d3` tra= nsitions, violating hardware constraints. Pre-existing issues: - [High] Unbalanced clock prepare/enable and disable/unprepare, leading to = `pipe_clk` enable count leak. -- --- Patch [2]: [PATCH v3 2/2] phy: qcom: qmp-usb: Add support for SA8255P -= -- commit 2b06432a4f84c161e8379370587f792f91bca968 Author: Sriram Dash Subject: phy: qcom: qmp-usb: Add support for SA8255P The Qualcomm automotive SA8255p SoC relies on firmware to configure platform resources, including clocks, interconnects and TLMM. This commit adds support for the SA8255p SoC in the QMP USB driver by using SCMI power protocols to manage platform resources via runtime PM framework APIs. Two sets of resources are modeled as "core" and "transfer" power domain suppliers. > diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-usb.c b/drivers/phy/qualco= mm/phy-qcom-qmp-usb.c > index c5507168e1354..881f4ce23241e 100644 > --- a/drivers/phy/qualcomm/phy-qcom-qmp-usb.c > +++ b/drivers/phy/qualcomm/phy-qcom-qmp-usb.c [ ... ] > @@ -1865,6 +1890,77 @@ static const struct qmp_phy_cfg glymur_usb3_uniphy= _cfg =3D { > .regs =3D qmp_v7_usb3phy_regs_layout, > }; > =20 > +static int qmp_usb_domain_attach(struct qmp_usb *qmp) > +{ > + struct dev_pm_domain_attach_data pd_data =3D { > + .pd_flags =3D PD_FLAG_NO_DEV_LINK, > + .pd_names =3D (const char *[]) { "transfer", "core" }, > + .num_pd_names =3D 2, > + }; [ ... ] > +/* d3_to_d0 transition by turning on all the suppliers */ > +static int qmp_usb_d3_to_d0(struct qmp_usb *qmp) > +{ > + int ret; > + > + if (!qmp->pd_list) > + return 0; > + > + ret =3D pm_runtime_resume_and_get(qmp->pd_list->pd_devs[0]); > + if (ret) > + return ret; > + > + ret =3D pm_runtime_resume_and_get(qmp->pd_list->pd_devs[1]); [Severity: High] Does resuming the 'transfer' domain before the 'core' domain cause hardware bus hangs? The commit message states that the "core" domain controls the GDSC (power), while the "transfer" domain controls clocks. It appears this sequence turns on the clocks before enabling power to the logic. > + if (ret) > + pm_runtime_put_sync(qmp->pd_list->pd_devs[0]); > + > + return ret; > +} > + > +/* d0_to_d3 transition by turning off all the suppliers */ > +static void qmp_usb_d0_to_d3(struct qmp_usb *qmp) > +{ > + if (!qmp->pd_list) > + return; > + > + pm_runtime_put_sync(qmp->pd_list->pd_devs[1]); > + pm_runtime_put_sync(qmp->pd_list->pd_devs[0]); [Severity: High] Similarly, does suspending the 'core' domain before the 'transfer' domain cause issues? This sequence disables the GDSC (power) before disabling the clocks, which might also violate hardware constraints and lead to timeouts or freezes. > +} [ ... ] > @@ -2126,14 +2234,23 @@ static int __maybe_unused qmp_usb_runtime_resume(= struct device *dev) > return 0; > } [Severity: High] This is a pre-existing issue, but does this early bailout lead to a pipe_clk enable count leak? The code right above this addition in qmp_usb_runtime_resume() is: if (!qmp->phy->init_count) { dev_vdbg(dev, "PHY not initialized, bailing out\n"); return 0; } During the standard PHY lifecycle, this check appears to cause an unbalanced clock prepare/enable and disable/unprepare state: 1. phy_init() starts with init_count =3D=3D 0, so qmp_usb_runtime_resume() = skips enabling clocks. 2. After phy_init() completes, init_count is 1, so phy_pm_runtime_put() cau= ses qmp_usb_runtime_suspend() to disable pipe_clk, triggering a clock framew= ork underflow warning since it was never enabled. 3. Conversely, during phy_exit(), init_count is 1, so qmp_usb_runtime_resum= e() enables pipe_clk. Then qmp_usb_exit() decrements init_count to 0. 4. Finally, phy_pm_runtime_put() triggers qmp_usb_runtime_suspend() (which has a similar bailout check), leaving pipe_clk permanently enabled and preventing the system from hitting deep sleep states. Can this state tracking be fixed to ensure the clocks are properly matched during suspend and resume? > =20 > + ret =3D qmp_usb_d1_to_d0(qmp); > + if (ret < 0) { > + dev_err(qmp->dev, "Failed to transition to d0 state\n"); > + return ret; > + } > + > ret =3D clk_bulk_prepare_enable(qmp->num_clks, qmp->clks); > - if (ret) > + if (ret) { > + qmp_usb_d0_to_d1(qmp); > return ret; > + } --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20260722-phy-qcom-q= mp-usb-8255-v3-0-e789070b48f7@kernel.org?part=3D2 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 554BDC44536 for ; Wed, 22 Jul 2026 14:02:00 +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:Message-Id:Date: References:In-Reply-To:Cc:To:Subject:From:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=+rqNSh7JHRuD38/IRE9+BwBJTOffvLXBFFlxTQ1YQEE=; b=GMHsQjuvwfIOad DG7uwX3W95OFI/Yc2kwALpaffU3ti9v8v7B9+Qajjh0HNkve4uG/4LEc3w8gg74F+l03Q6vR+lGVG Um3K7eixpIo+bziYQXeTuP4TdRhp1QS1taQ85mAKfrlSxsMYeM+t4fycgcKd5jWqdcSKHK9btVev9 ji78vogy9xdJRCsYDneQFYRNXf641PuEgqsJZHtSo23SplViOwumHeRhwnpGe9X+iabapP81rl/5M nJY1okOGqAqghdd9sbtXoy7TmPThxVrYrXURKuIHzCfnK2HaDT3oXyrivK28l6sI8+HP0pfYjg9m9 OQmE87PtW9rFiV8T0NCQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wmXWJ-0000000Byjt-4B6y; Wed, 22 Jul 2026 14:01:59 +0000 Received: from sea.source.kernel.org ([2600:3c0a:e001:78e:0:1991:8:25]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wmXWI-0000000ByiT-1lPR for linux-phy@lists.infradead.org; Wed, 22 Jul 2026 14:01:58 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id E4A6140434; Wed, 22 Jul 2026 14:01:57 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 619571F000E9; Wed, 22 Jul 2026 14:01:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1784728917; bh=T/Ebh9n6wMSSNQHytfNWJWj3bMOROvGvIor+jJYvW7c=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=AeAobieHgNyYEBEVp/iwGkhsbR/S7zQqeqxLQ12chiycacPlN8oCPhovfBxH4aVgR LB5xYjISrWjQIAyis1FCPKts4B1qzVmtTLCI75ztZRUqmuF8JTDhV4DOEljeaWcxDc P+m+t2qEwkl23wC3ipO+NrUOshCuDPrOoZ8lg4Uo8/dggZkYFDMMxAZ9zHDZLYpq0a VH2pPGU5Run3nvI9eFyOUSNJtUi6EpQk+DX7pFCRlALd6wY1UwDI8PT2NWsFJ7Ejrg 0NFjwB0jeRV2AwLVL3mvs5QqjP4JV8sU86zRF3ZlpJpo534qN692gtiX28d6KXn7/X i0H1lKdobvQLw== From: sashiko-bot@kernel.org Subject: Re: [PATCH v3 2/2] phy: qcom: qmp-usb: Add support for SA8255P To: "Mattijs Korpershoek" Cc: conor+dt@kernel.org, neil.armstrong@linaro.org, olteanv@gmail.com, robh@kernel.org, vkoul@kernel.org, linux-phy@lists.infradead.org, devicetree@vger.kernel.org In-Reply-To: <20260722-phy-qcom-qmp-usb-8255-v3-2-e789070b48f7@kernel.org> References: <20260722-phy-qcom-qmp-usb-8255-v3-0-e789070b48f7@kernel.org> <20260722-phy-qcom-qmp-usb-8255-v3-2-e789070b48f7@kernel.org> Date: Wed, 22 Jul 2026 14:01:56 +0000 Message-Id: <20260722140157.619571F000E9@smtp.kernel.org> 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 MiBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6CgpOZXcgaXNzdWVzOgotIFtIaWdoXSBJ bmNvcnJlY3QgcG93ZXIgZG9tYWluIHNlcXVlbmNpbmcgaW4gYGQzX3RvX2QwYCBhbmQgYGQwX3Rv X2QzYCB0cmFuc2l0aW9ucywgdmlvbGF0aW5nIGhhcmR3YXJlIGNvbnN0cmFpbnRzLgoKUHJlLWV4 aXN0aW5nIGlzc3VlczoKLSBbSGlnaF0gVW5iYWxhbmNlZCBjbG9jayBwcmVwYXJlL2VuYWJsZSBh bmQgZGlzYWJsZS91bnByZXBhcmUsIGxlYWRpbmcgdG8gYHBpcGVfY2xrYCBlbmFibGUgY291bnQg bGVhay4KLS0KCi0tLSBQYXRjaCBbMl06IFtQQVRDSCB2MyAyLzJdIHBoeTogcWNvbTogcW1wLXVz YjogQWRkIHN1cHBvcnQgZm9yIFNBODI1NVAgLS0tCmNvbW1pdCAyYjA2NDMyYTRmODRjMTYxZTgz NzkzNzA1ODdmNzkyZjkxYmNhOTY4CkF1dGhvcjogU3JpcmFtIERhc2ggPHF1aWNfc3JpcmFtZEBx dWljaW5jLmNvbT4KU3ViamVjdDogcGh5OiBxY29tOiBxbXAtdXNiOiBBZGQgc3VwcG9ydCBmb3Ig U0E4MjU1UAoKVGhlIFF1YWxjb21tIGF1dG9tb3RpdmUgU0E4MjU1cCBTb0MgcmVsaWVzIG9uIGZp cm13YXJlIHRvIGNvbmZpZ3VyZQpwbGF0Zm9ybSByZXNvdXJjZXMsIGluY2x1ZGluZyBjbG9ja3Ms IGludGVyY29ubmVjdHMgYW5kIFRMTU0uClRoaXMgY29tbWl0IGFkZHMgc3VwcG9ydCBmb3IgdGhl IFNBODI1NXAgU29DIGluIHRoZSBRTVAgVVNCIGRyaXZlciBieQp1c2luZyBTQ01JIHBvd2VyIHBy b3RvY29scyB0byBtYW5hZ2UgcGxhdGZvcm0gcmVzb3VyY2VzIHZpYSBydW50aW1lIFBNCmZyYW1l d29yayBBUElzLiBUd28gc2V0cyBvZiByZXNvdXJjZXMgYXJlIG1vZGVsZWQgYXMgImNvcmUiIGFu ZCAidHJhbnNmZXIiCnBvd2VyIGRvbWFpbiBzdXBwbGllcnMuCgo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL3BoeS9xdWFsY29tbS9waHktcWNvbS1xbXAtdXNiLmMgYi9kcml2ZXJzL3BoeS9xdWFsY29t bS9waHktcWNvbS1xbXAtdXNiLmMKPiBpbmRleCBjNTUwNzE2OGUxMzU0Li44ODFmNGNlMjMyNDFl IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvcGh5L3F1YWxjb21tL3BoeS1xY29tLXFtcC11c2IuYwo+ ICsrKyBiL2RyaXZlcnMvcGh5L3F1YWxjb21tL3BoeS1xY29tLXFtcC11c2IuYwpbIC4uLiBdCj4g QEAgLTE4NjUsNiArMTg5MCw3NyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHFtcF9waHlfY2ZnIGds eW11cl91c2IzX3VuaXBoeV9jZmcgPSB7Cj4gIAkucmVncwkJCT0gcW1wX3Y3X3VzYjNwaHlfcmVn c19sYXlvdXQsCj4gIH07Cj4gIAo+ICtzdGF0aWMgaW50IHFtcF91c2JfZG9tYWluX2F0dGFjaChz dHJ1Y3QgcW1wX3VzYiAqcW1wKQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2X3BtX2RvbWFpbl9hdHRhY2hf ZGF0YSBwZF9kYXRhID0gewo+ICsJCS5wZF9mbGFncyAgICAgICA9IFBEX0ZMQUdfTk9fREVWX0xJ TkssCj4gKwkJLnBkX25hbWVzICAgICAgID0gKGNvbnN0IGNoYXIgKltdKSB7ICJ0cmFuc2ZlciIs ICJjb3JlIiB9LAo+ICsJCS5udW1fcGRfbmFtZXMgICA9IDIsCj4gKwl9OwpbIC4uLiBdCj4gKy8q IGQzX3RvX2QwIHRyYW5zaXRpb24gYnkgdHVybmluZyBvbiBhbGwgdGhlIHN1cHBsaWVycyAqLwo+ ICtzdGF0aWMgaW50IHFtcF91c2JfZDNfdG9fZDAoc3RydWN0IHFtcF91c2IgKnFtcCkKPiArewo+ ICsJaW50IHJldDsKPiArCj4gKwlpZiAoIXFtcC0+cGRfbGlzdCkKPiArCQlyZXR1cm4gMDsKPiAr Cj4gKwlyZXQgPSBwbV9ydW50aW1lX3Jlc3VtZV9hbmRfZ2V0KHFtcC0+cGRfbGlzdC0+cGRfZGV2 c1swXSk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0ID0gcG1fcnVu dGltZV9yZXN1bWVfYW5kX2dldChxbXAtPnBkX2xpc3QtPnBkX2RldnNbMV0pOwoKW1NldmVyaXR5 OiBIaWdoXQpEb2VzIHJlc3VtaW5nIHRoZSAndHJhbnNmZXInIGRvbWFpbiBiZWZvcmUgdGhlICdj b3JlJyBkb21haW4gY2F1c2UgaGFyZHdhcmUKYnVzIGhhbmdzPwoKVGhlIGNvbW1pdCBtZXNzYWdl IHN0YXRlcyB0aGF0IHRoZSAiY29yZSIgZG9tYWluIGNvbnRyb2xzIHRoZSBHRFNDIChwb3dlciks CndoaWxlIHRoZSAidHJhbnNmZXIiIGRvbWFpbiBjb250cm9scyBjbG9ja3MuIEl0IGFwcGVhcnMg dGhpcyBzZXF1ZW5jZSB0dXJucwpvbiB0aGUgY2xvY2tzIGJlZm9yZSBlbmFibGluZyBwb3dlciB0 byB0aGUgbG9naWMuCgo+ICsJaWYgKHJldCkKPiArCQlwbV9ydW50aW1lX3B1dF9zeW5jKHFtcC0+ cGRfbGlzdC0+cGRfZGV2c1swXSk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyog ZDBfdG9fZDMgdHJhbnNpdGlvbiBieSB0dXJuaW5nIG9mZiBhbGwgdGhlIHN1cHBsaWVycyAqLwo+ ICtzdGF0aWMgdm9pZCBxbXBfdXNiX2QwX3RvX2QzKHN0cnVjdCBxbXBfdXNiICpxbXApCj4gK3sK PiArCWlmICghcW1wLT5wZF9saXN0KQo+ICsJCXJldHVybjsKPiArCj4gKwlwbV9ydW50aW1lX3B1 dF9zeW5jKHFtcC0+cGRfbGlzdC0+cGRfZGV2c1sxXSk7Cj4gKwlwbV9ydW50aW1lX3B1dF9zeW5j KHFtcC0+cGRfbGlzdC0+cGRfZGV2c1swXSk7CgpbU2V2ZXJpdHk6IEhpZ2hdClNpbWlsYXJseSwg ZG9lcyBzdXNwZW5kaW5nIHRoZSAnY29yZScgZG9tYWluIGJlZm9yZSB0aGUgJ3RyYW5zZmVyJyBk b21haW4KY2F1c2UgaXNzdWVzPwoKVGhpcyBzZXF1ZW5jZSBkaXNhYmxlcyB0aGUgR0RTQyAocG93 ZXIpIGJlZm9yZSBkaXNhYmxpbmcgdGhlIGNsb2Nrcywgd2hpY2gKbWlnaHQgYWxzbyB2aW9sYXRl IGhhcmR3YXJlIGNvbnN0cmFpbnRzIGFuZCBsZWFkIHRvIHRpbWVvdXRzIG9yIGZyZWV6ZXMuCgo+ ICt9ClsgLi4uIF0KPiBAQCAtMjEyNiwxNCArMjIzNCwyMyBAQCBzdGF0aWMgaW50IF9fbWF5YmVf dW51c2VkIHFtcF91c2JfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQo+ICAJCXJl dHVybiAwOwo+ICAJfQoKW1NldmVyaXR5OiBIaWdoXQpUaGlzIGlzIGEgcHJlLWV4aXN0aW5nIGlz c3VlLCBidXQgZG9lcyB0aGlzIGVhcmx5IGJhaWxvdXQgbGVhZCB0byBhIHBpcGVfY2xrCmVuYWJs ZSBjb3VudCBsZWFrPwoKVGhlIGNvZGUgcmlnaHQgYWJvdmUgdGhpcyBhZGRpdGlvbiBpbiBxbXBf dXNiX3J1bnRpbWVfcmVzdW1lKCkgaXM6CgoJaWYgKCFxbXAtPnBoeS0+aW5pdF9jb3VudCkgewoJ CWRldl92ZGJnKGRldiwgIlBIWSBub3QgaW5pdGlhbGl6ZWQsIGJhaWxpbmcgb3V0XG4iKTsKCQly ZXR1cm4gMDsKCX0KCkR1cmluZyB0aGUgc3RhbmRhcmQgUEhZIGxpZmVjeWNsZSwgdGhpcyBjaGVj ayBhcHBlYXJzIHRvIGNhdXNlIGFuIHVuYmFsYW5jZWQKY2xvY2sgcHJlcGFyZS9lbmFibGUgYW5k IGRpc2FibGUvdW5wcmVwYXJlIHN0YXRlOgoKMS4gcGh5X2luaXQoKSBzdGFydHMgd2l0aCBpbml0 X2NvdW50ID09IDAsIHNvIHFtcF91c2JfcnVudGltZV9yZXN1bWUoKSBza2lwcwogICBlbmFibGlu ZyBjbG9ja3MuCjIuIEFmdGVyIHBoeV9pbml0KCkgY29tcGxldGVzLCBpbml0X2NvdW50IGlzIDEs IHNvIHBoeV9wbV9ydW50aW1lX3B1dCgpIGNhdXNlcwogICBxbXBfdXNiX3J1bnRpbWVfc3VzcGVu ZCgpIHRvIGRpc2FibGUgcGlwZV9jbGssIHRyaWdnZXJpbmcgYSBjbG9jayBmcmFtZXdvcmsKICAg dW5kZXJmbG93IHdhcm5pbmcgc2luY2UgaXQgd2FzIG5ldmVyIGVuYWJsZWQuCjMuIENvbnZlcnNl bHksIGR1cmluZyBwaHlfZXhpdCgpLCBpbml0X2NvdW50IGlzIDEsIHNvIHFtcF91c2JfcnVudGlt ZV9yZXN1bWUoKQogICBlbmFibGVzIHBpcGVfY2xrLiBUaGVuIHFtcF91c2JfZXhpdCgpIGRlY3Jl bWVudHMgaW5pdF9jb3VudCB0byAwLgo0LiBGaW5hbGx5LCBwaHlfcG1fcnVudGltZV9wdXQoKSB0 cmlnZ2VycyBxbXBfdXNiX3J1bnRpbWVfc3VzcGVuZCgpICh3aGljaAogICBoYXMgYSBzaW1pbGFy IGJhaWxvdXQgY2hlY2spLCBsZWF2aW5nIHBpcGVfY2xrIHBlcm1hbmVudGx5IGVuYWJsZWQgYW5k CiAgIHByZXZlbnRpbmcgdGhlIHN5c3RlbSBmcm9tIGhpdHRpbmcgZGVlcCBzbGVlcCBzdGF0ZXMu CgpDYW4gdGhpcyBzdGF0ZSB0cmFja2luZyBiZSBmaXhlZCB0byBlbnN1cmUgdGhlIGNsb2NrcyBh cmUgcHJvcGVybHkgbWF0Y2hlZApkdXJpbmcgc3VzcGVuZCBhbmQgcmVzdW1lPwoKPiAgCj4gKwly ZXQgPSBxbXBfdXNiX2QxX3RvX2QwKHFtcCk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCWRldl9l cnIocW1wLT5kZXYsICJGYWlsZWQgdG8gdHJhbnNpdGlvbiB0byBkMCBzdGF0ZVxuIik7Cj4gKwkJ cmV0dXJuIHJldDsKPiArCX0KPiArCj4gIAlyZXQgPSBjbGtfYnVsa19wcmVwYXJlX2VuYWJsZShx bXAtPm51bV9jbGtzLCBxbXAtPmNsa3MpOwo+IC0JaWYgKHJldCkKPiArCWlmIChyZXQpIHsKPiAr CQlxbXBfdXNiX2QwX3RvX2QxKHFtcCk7Cj4gIAkJcmV0dXJuIHJldDsKPiArCX0KCi0tIApTYXNo aWtvIEFJIHJldmlldyDCtyBodHRwczovL3Nhc2hpa28uZGV2LyMvcGF0Y2hzZXQvMjAyNjA3MjIt cGh5LXFjb20tcW1wLXVzYi04MjU1LXYzLTAtZTc4OTA3MGI0OGY3QGtlcm5lbC5vcmc/cGFydD0y CgotLSAKbGludXgtcGh5IG1haWxpbmcgbGlzdApsaW51eC1waHlAbGlzdHMuaW5mcmFkZWFkLm9y ZwpodHRwczovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1waHkK