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 1C65A3CBE7C for ; Wed, 16 Sep 2026 06:17:03 +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=1789539425; cv=none; b=KRU/MzgIOO4D/FWcJDyC+tnIeTx4xZiP3EM+PGsk20r54Pl0qPPwpyR+mbir4orN+yv+ZQbk0I9UYb0B0tltcoQ/Ht5koYrmCfyNx/Ga3PIZZGfEvSbH5DiKbZ4PpEFXttujc78r9hAXoBH97X8mHWqeDkkGedG75WIQBNmHAZ0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789539425; c=relaxed/simple; bh=EzlN4mRHijKBMn2ktzQ/aax0nldjxNN36Bvs2XAUN1E=; h=From:Subject:To:Cc:In-Reply-To:References:Content-Type:Date: Message-Id; b=NbAumfqalVL4FVIX6JPqRzpKid5dBet8H1jrkjsSH+IYu3vZsq9nLB0CxejqU8LeEaMRNJ268KY+tfl40dyIUf+v6PTlohVDQsXy0JEABkfzQTpSejxtAh2MDhkUO44LztXtPVT8guLUs/nEwj0blHluS2C/xbOLWduPM+wSHic= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=WMHWlkYJ; 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="WMHWlkYJ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5F02C1F000FF; Wed, 16 Sep 2026 06:17:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789539423; bh=lYUL43qC1fa3U1LOOBs0pqpAXFYLD6HLTTr9i50HNws=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=WMHWlkYJENdJ1pss0rtlpdQtU3icvWkVQYL3fugjfTf58N6RUMGT+Mrtv/B9QEXzc 3XhyjgPmqFQKaWZu0PSPKzBq4pATyk77lkqS8hOTIROV911Rhef1wyxKBkoTQbHKPB dmsqCptC/qOPVzoYVYSc1Sz+CDuCL7FwHXyMVwxqEnsnHaiGL4XmoJ6GFa2LB/gCOV mj5ru5E0SK7M+9FpVHU2x/NHWULw5kQUT50jHBz/s5W79lo5LLr9X9tVnEt5LA5GG3 mwHr3xm2kfzujsPdRvfk0biq2RJ9uV2M+6iAC0rNt2agjP4R52RGR2j3hQsO27dxNT mHc5XV4u6MfjQ== From: sashiko-bot@kernel.org Subject: Re: [PATCH 4/4] phy: qcom-qmp-pcie: Split phy_ops into init/exit/reset/power_on Reply-To: sashiko-reviews@lists.linux.dev To: "Qiang Yu" Cc: olteanv@gmail.com, vkoul@kernel.org, linux-pci@vger.kernel.org, linux-phy@lists.infradead.org, neil.armstrong@linaro.org In-Reply-To: <20260915-align_pcie_init_sequence_0916-v1-4-0b2195836f30@oss.qualcomm.com> References: <20260915-align_pcie_init_sequence_0916-v1-0-0b2195836f30@oss.qualcomm.com> <20260915-align_pcie_init_sequence_0916-v1-4-0b2195836f30@oss.qualcomm.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Wed, 16 Sep 2026 06:17:02 +0000 Message-Id: <20260916061703.5F02C1F000FF@smtp.kernel.org> Precedence: bulk X-Mailing-List: linux-pci@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Thank you for your contribution! Sashiko AI review found 1 potential issue(= s) to consider: - [High] phy: qcom-qmp-pcie: nocsr_reset left asserted when skip_init is fa= lse -- commit 09fee607f4ad44d50cee755a3e356ff08d5879e2 Author: Qiang Yu phy: qcom-qmp-pcie: Split phy_ops into init/exit/reset/power_on This commit splits the combined power_on and power_off operations into separate init, exit, reset, and power_on functions. It reorders regulator, clock, and reset toggling to align with HPG requirements. It also introduces a skip_reset field to share the initialization state between functions. > diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-pcie.c b/drivers/phy/qualc= omm/phy-qcom-qmp-pcie.c > index d30194c6ed17f..2b6741a4120c5 100644 > --- a/drivers/phy/qualcomm/phy-qcom-qmp-pcie.c > +++ b/drivers/phy/qualcomm/phy-qcom-qmp-pcie.c [ ... ] > @@ -5833,12 +5809,62 @@ static int qmp_pcie_exit(struct phy *phy) > reset_control_bulk_assert(cfg->num_resets, qmp->resets); > =20 > clk_bulk_disable_unprepare(ARRAY_SIZE(qmp_pciephy_clk_l), qmp->clks); > + clk_bulk_disable_unprepare(qmp->num_pipe_clks, qmp->pipe_clks); > =20 > regulator_bulk_disable(cfg->num_vregs, qmp->vregs); > =20 > return 0; > } > =20 > +static int qmp_pcie_reset(struct phy *phy) > +{ > + struct qmp_pcie *qmp =3D phy_get_drvdata(phy); > + const struct qmp_phy_cfg *cfg =3D qmp->cfg; > + int ret; > + > + if (qmp->skip_reset) > + return 0; > + > + if (qmp->skip_init) { > + ret =3D reset_control_assert(qmp->nocsr_reset); > + if (ret) { > + dev_err(qmp->dev, "no-csr reset assert failed\n"); > + return ret; > + } > + > + usleep_range(200, 300); > + > + ret =3D reset_control_deassert(qmp->nocsr_reset); > + if (ret) { > + dev_err(qmp->dev, "no-csr reset deassert failed\n"); > + return ret; > + } > + > + return 0; > + } > + > + /* > + * Toggle BCR reset for PHY that doesn't support no_csr reset or has not > + * been initialized. > + */ > + ret =3D reset_control_bulk_assert(cfg->num_resets, qmp->resets); [Severity: High] Does this fallback path in qmp_pcie_reset() fail to deassert nocsr_reset when skip_init evaluates to false? Since qmp_pcie_exit() explicitly asserts nocsr_reset on exit, if skip_init is false on the next initialization (for example, after a system suspend or resume where power loss clears PHY CSRs like QPHY_START_CTRL), wouldn't this execution path only toggle the bulk resets and leave nocsr_reset stuck in the asserted state? > + if (ret) { > + dev_err(qmp->dev, "reset assert failed\n"); > + return ret; > + } > + > + usleep_range(200, 300); > + > + ret =3D reset_control_bulk_deassert(cfg->num_resets, qmp->resets); > + if (ret) { > + dev_err(qmp->dev, "reset deassert failed\n"); > + reset_control_bulk_assert(cfg->num_resets, qmp->resets); > + return ret; > + } > + > + return 0; > +} > + > static int qmp_pcie_power_on(struct phy *phy) > { > struct qmp_pcie *qmp =3D phy_get_drvdata(phy); [ ... ] > @@ -5870,22 +5893,6 @@ static int qmp_pcie_power_on(struct phy *phy) > qmp_pcie_init_registers(qmp, &cfg->tbls); > qmp_pcie_init_registers(qmp, mode_tbls); > =20 > -skip_tbls_init: > - ret =3D clk_bulk_prepare_enable(qmp->num_pipe_clks, qmp->pipe_clks); > - if (ret) > - return ret; > - > - if (!skip_reset) { > - ret =3D reset_control_deassert(qmp->nocsr_reset); > - if (ret) { > - dev_err(qmp->dev, "no-csr reset deassert failed\n"); > - goto err_disable_pipe_clk; > - } > - } > - > - if (qmp->skip_init) > - goto skip_serdes_start; > - > /* Pull PHY out of reset state */ > qphy_clrbits(pcs, cfg->regs[QPHY_SW_RESET], SW_RESET); [Severity: High] With the explicit nocsr_reset deassertion removed from qmp_pcie_power_on(), does the code now rely entirely on qmp_pcie_reset() to deassert it? Since qmp_pcie_reset() doesn't seem to deassert nocsr_reset when skip_init is false, this appears to set the PHY up to silently fail or time out on initialization. > --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20260915-align_pcie= _init_sequence_0916-v1-0-0b2195836f30@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 0A937C88E5C for ; Wed, 16 Sep 2026 06:17:08 +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=ZHVga7//spzK0V7vJHnPLbBynYF1Z5cGaGV6eMNqMuk=; b=FM2Vp9dsWr0Cgk w/ZwdDaKZ0m9EO5B7mQ50J2pGmheKq/HNH5+4UQReHEAkNdPkY5xXcuOpQaDuKhHHmHdp/c7AbbpE /TmSPed+eQM3x5GBM1BusKpHHSkuJW99Od47z4N+dF063L+BMaX8RhsVQWzqLl44Zl9uUo5ytXP5o jVdYiRwiz0RZenL/nspOd1NWgX4DKVNoRPjwh++AAxVPzjifuBUmKuNsnXPBwsSS/XbCsAyLADbnk sj8o3Y+hgA1v0KHlvo/2ZCTEWiaFcmrnyXv4oVtUWCiqn9B+cNr4RmD0tF+/q709jKXukiKEPjO/a BYo/3GMPJqJ+cNdjvG4w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1x6ix9-00000008T0J-1Ddm; Wed, 16 Sep 2026 06:17:07 +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 1x6ix6-00000008T07-384M for linux-phy@lists.infradead.org; Wed, 16 Sep 2026 06:17:05 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id 00FE560008; Wed, 16 Sep 2026 06:17:04 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5F02C1F000FF; Wed, 16 Sep 2026 06:17:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789539423; bh=lYUL43qC1fa3U1LOOBs0pqpAXFYLD6HLTTr9i50HNws=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=WMHWlkYJENdJ1pss0rtlpdQtU3icvWkVQYL3fugjfTf58N6RUMGT+Mrtv/B9QEXzc 3XhyjgPmqFQKaWZu0PSPKzBq4pATyk77lkqS8hOTIROV911Rhef1wyxKBkoTQbHKPB dmsqCptC/qOPVzoYVYSc1Sz+CDuCL7FwHXyMVwxqEnsnHaiGL4XmoJ6GFa2LB/gCOV mj5ru5E0SK7M+9FpVHU2x/NHWULw5kQUT50jHBz/s5W79lo5LLr9X9tVnEt5LA5GG3 mwHr3xm2kfzujsPdRvfk0biq2RJ9uV2M+6iAC0rNt2agjP4R52RGR2j3hQsO27dxNT mHc5XV4u6MfjQ== From: sashiko-bot@kernel.org Subject: Re: [PATCH 4/4] phy: qcom-qmp-pcie: Split phy_ops into init/exit/reset/power_on To: "Qiang Yu" Cc: olteanv@gmail.com, vkoul@kernel.org, linux-pci@vger.kernel.org, linux-phy@lists.infradead.org, neil.armstrong@linaro.org In-Reply-To: <20260915-align_pcie_init_sequence_0916-v1-4-0b2195836f30@oss.qualcomm.com> References: <20260915-align_pcie_init_sequence_0916-v1-0-0b2195836f30@oss.qualcomm.com> <20260915-align_pcie_init_sequence_0916-v1-4-0b2195836f30@oss.qualcomm.com> Date: Wed, 16 Sep 2026 06:17:02 +0000 Message-Id: <20260916061703.5F02C1F000FF@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 MSBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6Ci0gW0hpZ2hdIHBoeTogcWNvbS1xbXAt cGNpZTogbm9jc3JfcmVzZXQgbGVmdCBhc3NlcnRlZCB3aGVuIHNraXBfaW5pdCBpcyBmYWxzZQot LQoKY29tbWl0IDA5ZmVlNjA3ZjRhZDQ0ZDUwY2VlNzU1YTNlMzU2ZmYwOGQ1ODc5ZTIKQXV0aG9y OiBRaWFuZyBZdSA8cWlhbmcueXVAb3NzLnF1YWxjb21tLmNvbT4KCnBoeTogcWNvbS1xbXAtcGNp ZTogU3BsaXQgcGh5X29wcyBpbnRvIGluaXQvZXhpdC9yZXNldC9wb3dlcl9vbgoKVGhpcyBjb21t aXQgc3BsaXRzIHRoZSBjb21iaW5lZCBwb3dlcl9vbiBhbmQgcG93ZXJfb2ZmIG9wZXJhdGlvbnMg aW50bwpzZXBhcmF0ZSBpbml0LCBleGl0LCByZXNldCwgYW5kIHBvd2VyX29uIGZ1bmN0aW9ucy4g SXQgcmVvcmRlcnMgcmVndWxhdG9yLApjbG9jaywgYW5kIHJlc2V0IHRvZ2dsaW5nIHRvIGFsaWdu IHdpdGggSFBHIHJlcXVpcmVtZW50cy4gSXQgYWxzbyBpbnRyb2R1Y2VzCmEgc2tpcF9yZXNldCBm aWVsZCB0byBzaGFyZSB0aGUgaW5pdGlhbGl6YXRpb24gc3RhdGUgYmV0d2VlbiBmdW5jdGlvbnMu Cgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9xdWFsY29tbS9waHktcWNvbS1xbXAtcGNpZS5j IGIvZHJpdmVycy9waHkvcXVhbGNvbW0vcGh5LXFjb20tcW1wLXBjaWUuYwo+IGluZGV4IGQzMDE5 NGM2ZWQxN2YuLjJiNjc0MWE0MTIwYzUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9waHkvcXVhbGNv bW0vcGh5LXFjb20tcW1wLXBjaWUuYwo+ICsrKyBiL2RyaXZlcnMvcGh5L3F1YWxjb21tL3BoeS1x Y29tLXFtcC1wY2llLmMKClsgLi4uIF0KCj4gQEAgLTU4MzMsMTIgKzU4MDksNjIgQEAgc3RhdGlj IGludCBxbXBfcGNpZV9leGl0KHN0cnVjdCBwaHkgKnBoeSkKPiAgCQlyZXNldF9jb250cm9sX2J1 bGtfYXNzZXJ0KGNmZy0+bnVtX3Jlc2V0cywgcW1wLT5yZXNldHMpOwo+ICAKPiAgCWNsa19idWxr X2Rpc2FibGVfdW5wcmVwYXJlKEFSUkFZX1NJWkUocW1wX3BjaWVwaHlfY2xrX2wpLCBxbXAtPmNs a3MpOwo+ICsJY2xrX2J1bGtfZGlzYWJsZV91bnByZXBhcmUocW1wLT5udW1fcGlwZV9jbGtzLCBx bXAtPnBpcGVfY2xrcyk7Cj4gIAo+ICAJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShjZmctPm51bV92 cmVncywgcW1wLT52cmVncyk7Cj4gIAo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gK3N0YXRpYyBp bnQgcW1wX3BjaWVfcmVzZXQoc3RydWN0IHBoeSAqcGh5KQo+ICt7Cj4gKwlzdHJ1Y3QgcW1wX3Bj aWUgKnFtcCA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOwo+ICsJY29uc3Qgc3RydWN0IHFtcF9waHlf Y2ZnICpjZmcgPSBxbXAtPmNmZzsKPiArCWludCByZXQ7Cj4gKwo+ICsJaWYgKHFtcC0+c2tpcF9y ZXNldCkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlpZiAocW1wLT5za2lwX2luaXQpIHsKPiArCQly ZXQgPSByZXNldF9jb250cm9sX2Fzc2VydChxbXAtPm5vY3NyX3Jlc2V0KTsKPiArCQlpZiAocmV0 KSB7Cj4gKwkJCWRldl9lcnIocW1wLT5kZXYsICJuby1jc3IgcmVzZXQgYXNzZXJ0IGZhaWxlZFxu Iik7Cj4gKwkJCXJldHVybiByZXQ7Cj4gKwkJfQo+ICsKPiArCQl1c2xlZXBfcmFuZ2UoMjAwLCAz MDApOwo+ICsKPiArCQlyZXQgPSByZXNldF9jb250cm9sX2RlYXNzZXJ0KHFtcC0+bm9jc3JfcmVz ZXQpOwo+ICsJCWlmIChyZXQpIHsKPiArCQkJZGV2X2VycihxbXAtPmRldiwgIm5vLWNzciByZXNl dCBkZWFzc2VydCBmYWlsZWRcbiIpOwo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJCX0KPiArCj4gKwkJ cmV0dXJuIDA7Cj4gKwl9Cj4gKwo+ICsJLyoKPiArCSAqIFRvZ2dsZSBCQ1IgcmVzZXQgZm9yIFBI WSB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBub19jc3IgcmVzZXQgb3IgaGFzIG5vdAo+ICsJICogYmVl biBpbml0aWFsaXplZC4KPiArCSAqLwo+ICsJcmV0ID0gcmVzZXRfY29udHJvbF9idWxrX2Fzc2Vy dChjZmctPm51bV9yZXNldHMsIHFtcC0+cmVzZXRzKTsKW1NldmVyaXR5OiBIaWdoXQpEb2VzIHRo aXMgZmFsbGJhY2sgcGF0aCBpbiBxbXBfcGNpZV9yZXNldCgpIGZhaWwgdG8gZGVhc3NlcnQgbm9j c3JfcmVzZXQKd2hlbiBza2lwX2luaXQgZXZhbHVhdGVzIHRvIGZhbHNlPwoKU2luY2UgcW1wX3Bj aWVfZXhpdCgpIGV4cGxpY2l0bHkgYXNzZXJ0cyBub2Nzcl9yZXNldCBvbiBleGl0LCBpZiBza2lw X2luaXQKaXMgZmFsc2Ugb24gdGhlIG5leHQgaW5pdGlhbGl6YXRpb24gKGZvciBleGFtcGxlLCBh ZnRlciBhIHN5c3RlbSBzdXNwZW5kIG9yCnJlc3VtZSB3aGVyZSBwb3dlciBsb3NzIGNsZWFycyBQ SFkgQ1NScyBsaWtlIFFQSFlfU1RBUlRfQ1RSTCksIHdvdWxkbid0IHRoaXMKZXhlY3V0aW9uIHBh dGggb25seSB0b2dnbGUgdGhlIGJ1bGsgcmVzZXRzIGFuZCBsZWF2ZSBub2Nzcl9yZXNldCBzdHVj ayBpbgp0aGUgYXNzZXJ0ZWQgc3RhdGU/Cgo+ICsJaWYgKHJldCkgewo+ICsJCWRldl9lcnIocW1w LT5kZXYsICJyZXNldCBhc3NlcnQgZmFpbGVkXG4iKTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ ICsKPiArCXVzbGVlcF9yYW5nZSgyMDAsIDMwMCk7Cj4gKwo+ICsJcmV0ID0gcmVzZXRfY29udHJv bF9idWxrX2RlYXNzZXJ0KGNmZy0+bnVtX3Jlc2V0cywgcW1wLT5yZXNldHMpOwo+ICsJaWYgKHJl dCkgewo+ICsJCWRldl9lcnIocW1wLT5kZXYsICJyZXNldCBkZWFzc2VydCBmYWlsZWRcbiIpOwo+ ICsJCXJlc2V0X2NvbnRyb2xfYnVsa19hc3NlcnQoY2ZnLT5udW1fcmVzZXRzLCBxbXAtPnJlc2V0 cyk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAg c3RhdGljIGludCBxbXBfcGNpZV9wb3dlcl9vbihzdHJ1Y3QgcGh5ICpwaHkpCj4gIHsKPiAgCXN0 cnVjdCBxbXBfcGNpZSAqcW1wID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7CgpbIC4uLiBdCgo+IEBA IC01ODcwLDIyICs1ODkzLDYgQEAgc3RhdGljIGludCBxbXBfcGNpZV9wb3dlcl9vbihzdHJ1Y3Qg cGh5ICpwaHkpCj4gIAlxbXBfcGNpZV9pbml0X3JlZ2lzdGVycyhxbXAsICZjZmctPnRibHMpOwo+ ICAJcW1wX3BjaWVfaW5pdF9yZWdpc3RlcnMocW1wLCBtb2RlX3RibHMpOwo+ICAKPiAtc2tpcF90 YmxzX2luaXQ6Cj4gLQlyZXQgPSBjbGtfYnVsa19wcmVwYXJlX2VuYWJsZShxbXAtPm51bV9waXBl X2Nsa3MsIHFtcC0+cGlwZV9jbGtzKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIHJldDsKPiAt Cj4gLQlpZiAoIXNraXBfcmVzZXQpIHsKPiAtCQlyZXQgPSByZXNldF9jb250cm9sX2RlYXNzZXJ0 KHFtcC0+bm9jc3JfcmVzZXQpOwo+IC0JCWlmIChyZXQpIHsKPiAtCQkJZGV2X2VycihxbXAtPmRl diwgIm5vLWNzciByZXNldCBkZWFzc2VydCBmYWlsZWRcbiIpOwo+IC0JCQlnb3RvIGVycl9kaXNh YmxlX3BpcGVfY2xrOwo+IC0JCX0KPiAtCX0KPiAtCj4gLQlpZiAocW1wLT5za2lwX2luaXQpCj4g LQkJZ290byBza2lwX3NlcmRlc19zdGFydDsKPiAtCj4gIAkvKiBQdWxsIFBIWSBvdXQgb2YgcmVz ZXQgc3RhdGUgKi8KPiAgCXFwaHlfY2xyYml0cyhwY3MsIGNmZy0+cmVnc1tRUEhZX1NXX1JFU0VU XSwgU1dfUkVTRVQpOwpbU2V2ZXJpdHk6IEhpZ2hdCldpdGggdGhlIGV4cGxpY2l0IG5vY3NyX3Jl c2V0IGRlYXNzZXJ0aW9uIHJlbW92ZWQgZnJvbSBxbXBfcGNpZV9wb3dlcl9vbigpLApkb2VzIHRo ZSBjb2RlIG5vdyByZWx5IGVudGlyZWx5IG9uIHFtcF9wY2llX3Jlc2V0KCkgdG8gZGVhc3NlcnQg aXQ/CgpTaW5jZSBxbXBfcGNpZV9yZXNldCgpIGRvZXNuJ3Qgc2VlbSB0byBkZWFzc2VydCBub2Nz cl9yZXNldCB3aGVuIHNraXBfaW5pdAppcyBmYWxzZSwgdGhpcyBhcHBlYXJzIHRvIHNldCB0aGUg UEhZIHVwIHRvIHNpbGVudGx5IGZhaWwgb3IgdGltZSBvdXQgb24KaW5pdGlhbGl6YXRpb24uCgo+ CgotLSAKU2FzaGlrbyBBSSByZXZpZXcgwrcgaHR0cHM6Ly9zYXNoaWtvLmRldi8jL3BhdGNoc2V0 LzIwMjYwOTE1LWFsaWduX3BjaWVfaW5pdF9zZXF1ZW5jZV8wOTE2LXYxLTAtMGIyMTk1ODM2ZjMw QG9zcy5xdWFsY29tbS5jb20/cGFydD00CgotLSAKbGludXgtcGh5IG1haWxpbmcgbGlzdApsaW51 eC1waHlAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwczovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFp bG1hbi9saXN0aW5mby9saW51eC1waHkK