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 820B135504D for ; Thu, 21 May 2026 14:15:04 +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=1779372905; cv=none; b=PI6ot7nO3mkk0pvi1aWLwrdwyPpa3gWE3ZsvPdj+mQwJbHWEcsQkG03Ptx5hysjdEBzDEWRq3GY9tHMdM8Ft48CfPJsrc0MwEDFig858p4EqwA9RAKg6NQuFWLAtV7r9HvvTpzN1aEC46hY2hMifFhu0xSfVFg2YcCaLbjEzxlk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779372905; c=relaxed/simple; bh=7vA5g6BlQqufnex/kCV+60AYvUBEzqUD8++odnBKtiQ=; h=From:Subject:To:Cc:In-Reply-To:References:Content-Type:Date: Message-Id; b=W4j1M6VtLFYJmIPPdaidiEP/Zn/D2QZRWXGxib38ze3b55Dvm1JIAI33rL1xRescpPUbT4udZ6wWisWzF053HWHepm4Y2RhufdSKc7xQK3UeYe4cT//V4/zm8bEtYSHJNXzKFLBQoapeMOLRZfbPsYXpZX1eENd1GINF9kd/hfM= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=LvDKhTW+; 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="LvDKhTW+" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DF7461F000E9; Thu, 21 May 2026 14:15:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1779372904; bh=d9OLDgAjE81Gf5UnBAayq6SLmtpglCrBffoDOsIOEck=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=LvDKhTW+9mRIwxcVChEF81dgpNHVzU5HwoVZ+2jPdUyG/atCjx//uhl8FNJ+hQw10 i/ZhIRstPqTORuL8eWGz9vWfZeBeQw3McJeCFvcMO8esZkGRywdyPC/wJqXUerG5J5 hZiUhC47WV/iDpEO07uFk5gOPeIuRlz74SP6UWuRWCB7Bhv8aPFV7gdvIzUA2kkw+N cCmaW1D/4EIgMm9GdWn8eW8ZziMUeMBPPqBCYc6sa+YSH0oTRBtw16MjxvjWP6N2um a0ErM1Y6zzzAgnt2o72eteTUCAG1+nkc94rjaFLDaNXXTKZX6GCTEFjohMfJWH56PO u8E1XTvlUiaRA== From: sashiko-bot@kernel.org Subject: Re: [PATCH v2 3/4] PCI: qcom: Add link retention support Reply-To: sashiko-reviews@lists.linux.dev To: "Krishna Chaitanya Chundru" Cc: vkoul@kernel.org, neil.armstrong@linaro.org, olteanv@gmail.com, linux-phy@lists.infradead.org, linux-pci@vger.kernel.org In-Reply-To: <20260521-link_retain-v2-3-08ed448b081c@oss.qualcomm.com> References: <20260521-link_retain-v2-3-08ed448b081c@oss.qualcomm.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Thu, 21 May 2026 14:15:03 +0000 Message-Id: <20260521141503.DF7461F000E9@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 3 potential issue(= s) to consider: - [High] Checking hardware link capabilities instead of negotiated link sta= tus to determine current link speed and width. - [High] Returning 0 instead of -EPROBE_DEFER defeats the probe deferral me= chanism and leaves the controller partially initialized. - [High] Early returns during link retention bypass critical controller sof= tware state initialization and hardware capabilities. -- commit 6dd7e9bfe9f104689a018777f9dcaa31b6e736f8 Author: Krishna Chaitanya Chundru PCI: qcom: Add link retention support This patch introduces link retention support for Qualcomm PCIe controllers, skipping reinitialization and PERST# toggling if the bootloader left the link active in L0 or L1 idle. It falls back to normal initialization and link retraining if the current link does not meet device tree constraints. > diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/control= ler/dwc/pcie-qcom.c > index bfe873cbf44f6..b061eaa227b39 100644 > --- a/drivers/pci/controller/dwc/pcie-qcom.c > +++ b/drivers/pci/controller/dwc/pcie-qcom.c [ ... ] > @@ -960,6 +962,42 @@ static int qcom_pcie_get_resources_2_7_0(struct qcom= _pcie *pcie) > return 0; > } > =20 > +/* > + * Determine whether the link established by the bootloader can be reuse= d. > + * > + * Reuse the existing link only if its current speed and lane count match > + * the max-link-speed and num-lanes specified in Device Tree; otherwise, > + * retrain the link. > + */ > +static bool qcom_pcie_check_link_retain(struct qcom_pcie *pcie) > +{ > + u32 cap, speed, val, ltssm, width; > + struct dw_pcie *pci =3D pcie->pci; > + u8 offset; > + > + val =3D readl(pcie->parf + PARF_LTSSM); > + ltssm =3D val & 0x1f; > + if ((val & LTSSM_EN) && > + (ltssm =3D=3D DW_PCIE_LTSSM_L0 || ltssm =3D=3D DW_PCIE_LTSSM_L1_IDL= E)) { > + qcom_pcie_configure_dbi_atu_base(pcie); > + > + offset =3D dw_pcie_find_capability(pci, PCI_CAP_ID_EXP); > + cap =3D dw_pcie_readl_dbi(pci, offset + PCI_EXP_LNKCAP); > + speed =3D FIELD_GET(PCI_EXP_LNKCAP_SLS, cap); > + width =3D dw_pcie_link_get_max_link_width(pci); [Severity: High] Does this check the maximum hardware capabilities instead of the currently negotiated link status? Reading PCI_EXP_LNKCAP (and using dw_pcie_link_get_max_link_width) retrieves the hardware capabilities rather than the current link speed and width from PCI_EXP_LNKSTA. If the bootloader brought up the link at a degraded speed (e.g., Gen1x1 on a port capable of Gen3x2), could this incorrectly pass the constraint checks and leave the system with severely degraded PCIe performance? > + > + if (pci->max_link_speed > 0 && speed > pci->max_link_speed) > + return false; > + > + if (pci->num_lanes > 0 && width > pci->num_lanes) > + return false; > + > + return true; > + } > + > + return false; > +} > + > static int qcom_pcie_init_2_7_0(struct qcom_pcie *pcie) > { > struct qcom_pcie_resources_2_7_0 *res =3D &pcie->res.v2_7_0; > @@ -978,6 +1016,14 @@ static int qcom_pcie_init_2_7_0(struct qcom_pcie *p= cie) > if (ret < 0) > goto err_disable_regulators; > =20 > + if (pcie->cfg->link_retain) { > + pci->pp.link_retain =3D qcom_pcie_check_link_retain(pcie); > + if (pci->pp.link_retain) { > + dev_info(dev, "Retaining PCIe link\n"); > + return 0; > + } > + } [Severity: High] Does this early return bypass critical software state initialization? Returning early here skips the assignment of pci->l1ss_support =3D true lat= er in this function. Because struct dw_pcie is zero-initialized, the downstream DesignWare core might falsely assume ASPM L1 Substates are unsupported and fail to configure them correctly. > + > ret =3D reset_control_assert(res->rst); > if (ret) { > dev_err(dev, "reset assert failed (%d)\n", ret); > @@ -1038,6 +1084,9 @@ static int qcom_pcie_post_init_2_7_0(struct qcom_pc= ie *pcie) > { > const struct qcom_pcie_cfg *pcie_cfg =3D pcie->cfg; > =20 > + if (pcie->pci->pp.link_retain) > + return 0; > + [Severity: High] Could this early return skip necessary hot-plug configurations? By returning early, this skips the call to qcom_pcie_set_slot_nccs() located further down. Missing the No Command Completed Support (NCCS) configuration could break PCIe hot-plug command completions and lead to timeouts during hot-plug operations. > if (pcie_cfg->override_no_snoop) > writel(WR_NO_SNOOP_OVERRIDE_EN | RD_NO_SNOOP_OVERRIDE_EN, > pcie->parf + PARF_NO_SNOOP_OVERRIDE); [ ... ] > @@ -1337,8 +1388,9 @@ static int qcom_pcie_host_init(struct dw_pcie_rp *p= p) > err_pwrctrl_power_off: > pci_pwrctrl_power_off_devices(pci->dev); > err_pwrctrl_destroy: > - if (ret !=3D -EPROBE_DEFER) > - pci_pwrctrl_destroy_devices(pci->dev); > + if (pp->link_retain && ret =3D=3D -EPROBE_DEFER) > + return 0; [Severity: High] Does returning 0 here defeat the probe deferral mechanism? If pci_pwrctrl_power_on_devices() earlier in this function returns -EPROBE_DEFER, returning 0 instead of propagating the error code causes the driver core to treat the probe as successful. This means the driver will not be re-probed when resources become available. Additionally, returning early from this error cleanup path leaves the rest of the host initialization incomplete (such as SMMU setup and removing MSIX/DPC capabilities), potentially leaving the controller in an unusable state while the kernel believes the probe succeeded. > + pci_pwrctrl_destroy_devices(pci->dev); > err_disable_phy: > qcom_pcie_phy_power_off(pcie); > err_deinit: --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20260521-link_retai= n-v2-0-08ed448b081c@oss.qualcomm.com?part=3D3 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 2C1EBCD4F3D for ; Thu, 21 May 2026 14:15:07 +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=pfpNGsMYKau+tZSDcnEkq4i7sLCzU7MZZfsJLsJcLH4=; b=fAx6SiXOe50rKX tWLPJeLnYTxSEcwrQw3tV9HZVVBfooRDEtev3xICOt537gdDKfuM1FHejNDRmN5AUZIy9XQ/7JcEh L/q5rxLTSW/fOP5ViicgCg2St/2NRE/DRbR/tXNO1xHO1V1FJuWzkozlFvtOrlaV784rViM0kW5xd cB19lYt+WJ655NwzhGYRU8OGJDyY/7kt01yNls0hdcLYwz1NVRPf7LY8YAo7SVYoKBgmiPOFbqc/T kRqKIGRW93XKqXn8CgI2sAyS5rxgKlpm9BeilS+zuF3SPE6Fh024LSLpE0OLTCbuv+XRl4HfE3+dW 0M3Fn3RFOTnjOhcJ4a3Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wQ4B0-000000081TX-3pUJ; Thu, 21 May 2026 14:15:06 +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 1wQ4Az-000000081T3-07tW for linux-phy@lists.infradead.org; Thu, 21 May 2026 14:15:05 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id 73BFC60122; Thu, 21 May 2026 14:15:04 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id DF7461F000E9; Thu, 21 May 2026 14:15:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1779372904; bh=d9OLDgAjE81Gf5UnBAayq6SLmtpglCrBffoDOsIOEck=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=LvDKhTW+9mRIwxcVChEF81dgpNHVzU5HwoVZ+2jPdUyG/atCjx//uhl8FNJ+hQw10 i/ZhIRstPqTORuL8eWGz9vWfZeBeQw3McJeCFvcMO8esZkGRywdyPC/wJqXUerG5J5 hZiUhC47WV/iDpEO07uFk5gOPeIuRlz74SP6UWuRWCB7Bhv8aPFV7gdvIzUA2kkw+N cCmaW1D/4EIgMm9GdWn8eW8ZziMUeMBPPqBCYc6sa+YSH0oTRBtw16MjxvjWP6N2um a0ErM1Y6zzzAgnt2o72eteTUCAG1+nkc94rjaFLDaNXXTKZX6GCTEFjohMfJWH56PO u8E1XTvlUiaRA== From: sashiko-bot@kernel.org Subject: Re: [PATCH v2 3/4] PCI: qcom: Add link retention support To: "Krishna Chaitanya Chundru" Cc: vkoul@kernel.org, neil.armstrong@linaro.org, olteanv@gmail.com, linux-phy@lists.infradead.org, linux-pci@vger.kernel.org In-Reply-To: <20260521-link_retain-v2-3-08ed448b081c@oss.qualcomm.com> References: <20260521-link_retain-v2-3-08ed448b081c@oss.qualcomm.com> Date: Thu, 21 May 2026 14:15:03 +0000 Message-Id: <20260521141503.DF7461F000E9@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 MyBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6Ci0gW0hpZ2hdIENoZWNraW5nIGhhcmR3 YXJlIGxpbmsgY2FwYWJpbGl0aWVzIGluc3RlYWQgb2YgbmVnb3RpYXRlZCBsaW5rIHN0YXR1cyB0 byBkZXRlcm1pbmUgY3VycmVudCBsaW5rIHNwZWVkIGFuZCB3aWR0aC4KLSBbSGlnaF0gUmV0dXJu aW5nIDAgaW5zdGVhZCBvZiAtRVBST0JFX0RFRkVSIGRlZmVhdHMgdGhlIHByb2JlIGRlZmVycmFs IG1lY2hhbmlzbSBhbmQgbGVhdmVzIHRoZSBjb250cm9sbGVyIHBhcnRpYWxseSBpbml0aWFsaXpl ZC4KLSBbSGlnaF0gRWFybHkgcmV0dXJucyBkdXJpbmcgbGluayByZXRlbnRpb24gYnlwYXNzIGNy aXRpY2FsIGNvbnRyb2xsZXIgc29mdHdhcmUgc3RhdGUgaW5pdGlhbGl6YXRpb24gYW5kIGhhcmR3 YXJlIGNhcGFiaWxpdGllcy4KLS0KCmNvbW1pdCA2ZGQ3ZTliZmU5ZjEwNDY4OWEwMTg3NzdmOWRj YWEzMWI2ZTczNmY4CkF1dGhvcjogS3Jpc2huYSBDaGFpdGFueWEgQ2h1bmRydSA8a3Jpc2huYS5j aHVuZHJ1QG9zcy5xdWFsY29tbS5jb20+ClBDSTogcWNvbTogQWRkIGxpbmsgcmV0ZW50aW9uIHN1 cHBvcnQKClRoaXMgcGF0Y2ggaW50cm9kdWNlcyBsaW5rIHJldGVudGlvbiBzdXBwb3J0IGZvciBR dWFsY29tbSBQQ0llIGNvbnRyb2xsZXJzLApza2lwcGluZyByZWluaXRpYWxpemF0aW9uIGFuZCBQ RVJTVCMgdG9nZ2xpbmcgaWYgdGhlIGJvb3Rsb2FkZXIgbGVmdCB0aGUKbGluayBhY3RpdmUgaW4g TDAgb3IgTDEgaWRsZS4gSXQgZmFsbHMgYmFjayB0byBub3JtYWwgaW5pdGlhbGl6YXRpb24gYW5k CmxpbmsgcmV0cmFpbmluZyBpZiB0aGUgY3VycmVudCBsaW5rIGRvZXMgbm90IG1lZXQgZGV2aWNl IHRyZWUgY29uc3RyYWludHMuCgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9jb250cm9sbGVy L2R3Yy9wY2llLXFjb20uYyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvZHdjL3BjaWUtcWNvbS5j Cj4gaW5kZXggYmZlODczY2JmNDRmNi4uYjA2MWVhYTIyN2IzOSAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9wY2llLXFjb20uYwo+ICsrKyBiL2RyaXZlcnMvcGNpL2Nv bnRyb2xsZXIvZHdjL3BjaWUtcWNvbS5jCgpbIC4uLiBdCgo+IEBAIC05NjAsNiArOTYyLDQyIEBA IHN0YXRpYyBpbnQgcWNvbV9wY2llX2dldF9yZXNvdXJjZXNfMl83XzAoc3RydWN0IHFjb21fcGNp ZSAqcGNpZSkKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+ICsvKgo+ICsgKiBEZXRlcm1pbmUgd2hl dGhlciB0aGUgbGluayBlc3RhYmxpc2hlZCBieSB0aGUgYm9vdGxvYWRlciBjYW4gYmUgcmV1c2Vk Lgo+ICsgKgo+ICsgKiBSZXVzZSB0aGUgZXhpc3RpbmcgbGluayBvbmx5IGlmIGl0cyBjdXJyZW50 IHNwZWVkIGFuZCBsYW5lIGNvdW50IG1hdGNoCj4gKyAqIHRoZSBtYXgtbGluay1zcGVlZCBhbmQg bnVtLWxhbmVzIHNwZWNpZmllZCBpbiBEZXZpY2UgVHJlZTsgb3RoZXJ3aXNlLAo+ICsgKiByZXRy YWluIHRoZSBsaW5rLgo+ICsgKi8KPiArc3RhdGljIGJvb2wgcWNvbV9wY2llX2NoZWNrX2xpbmtf cmV0YWluKHN0cnVjdCBxY29tX3BjaWUgKnBjaWUpCj4gK3sKPiArCXUzMiBjYXAsIHNwZWVkLCB2 YWwsIGx0c3NtLCB3aWR0aDsKPiArCXN0cnVjdCBkd19wY2llICpwY2kgPSBwY2llLT5wY2k7Cj4g Kwl1OCBvZmZzZXQ7Cj4gKwo+ICsJdmFsID0gcmVhZGwocGNpZS0+cGFyZiArIFBBUkZfTFRTU00p Owo+ICsJbHRzc20gPSB2YWwgJiAweDFmOwo+ICsJaWYgKCh2YWwgJiBMVFNTTV9FTikgJiYKPiAr CSAgICAobHRzc20gPT0gRFdfUENJRV9MVFNTTV9MMCB8fCBsdHNzbSA9PSBEV19QQ0lFX0xUU1NN X0wxX0lETEUpKSB7Cj4gKwkJcWNvbV9wY2llX2NvbmZpZ3VyZV9kYmlfYXR1X2Jhc2UocGNpZSk7 Cj4gKwo+ICsJCW9mZnNldCA9IGR3X3BjaWVfZmluZF9jYXBhYmlsaXR5KHBjaSwgUENJX0NBUF9J RF9FWFApOwo+ICsJCWNhcCA9IGR3X3BjaWVfcmVhZGxfZGJpKHBjaSwgb2Zmc2V0ICsgUENJX0VY UF9MTktDQVApOwo+ICsJCXNwZWVkID0gRklFTERfR0VUKFBDSV9FWFBfTE5LQ0FQX1NMUywgY2Fw KTsKPiArCQl3aWR0aCA9IGR3X3BjaWVfbGlua19nZXRfbWF4X2xpbmtfd2lkdGgocGNpKTsKCltT ZXZlcml0eTogSGlnaF0KRG9lcyB0aGlzIGNoZWNrIHRoZSBtYXhpbXVtIGhhcmR3YXJlIGNhcGFi aWxpdGllcyBpbnN0ZWFkIG9mIHRoZSBjdXJyZW50bHkKbmVnb3RpYXRlZCBsaW5rIHN0YXR1cz8K ClJlYWRpbmcgUENJX0VYUF9MTktDQVAgKGFuZCB1c2luZyBkd19wY2llX2xpbmtfZ2V0X21heF9s aW5rX3dpZHRoKSByZXRyaWV2ZXMKdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcyByYXRoZXIgdGhh biB0aGUgY3VycmVudCBsaW5rIHNwZWVkIGFuZCB3aWR0aCBmcm9tClBDSV9FWFBfTE5LU1RBLgoK SWYgdGhlIGJvb3Rsb2FkZXIgYnJvdWdodCB1cCB0aGUgbGluayBhdCBhIGRlZ3JhZGVkIHNwZWVk IChlLmcuLCBHZW4xeDEgb24gYQpwb3J0IGNhcGFibGUgb2YgR2VuM3gyKSwgY291bGQgdGhpcyBp bmNvcnJlY3RseSBwYXNzIHRoZSBjb25zdHJhaW50IGNoZWNrcwphbmQgbGVhdmUgdGhlIHN5c3Rl bSB3aXRoIHNldmVyZWx5IGRlZ3JhZGVkIFBDSWUgcGVyZm9ybWFuY2U/Cgo+ICsKPiArCQlpZiAo cGNpLT5tYXhfbGlua19zcGVlZCA+IDAgJiYgc3BlZWQgPiBwY2ktPm1heF9saW5rX3NwZWVkKQo+ ICsJCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJCWlmIChwY2ktPm51bV9sYW5lcyA+IDAgJiYgd2lk dGggPiBwY2ktPm51bV9sYW5lcykKPiArCQkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCQlyZXR1cm4g dHJ1ZTsKPiArCX0KPiArCj4gKwlyZXR1cm4gZmFsc2U7Cj4gK30KPiArCj4gIHN0YXRpYyBpbnQg cWNvbV9wY2llX2luaXRfMl83XzAoc3RydWN0IHFjb21fcGNpZSAqcGNpZSkKPiAgewo+ICAJc3Ry dWN0IHFjb21fcGNpZV9yZXNvdXJjZXNfMl83XzAgKnJlcyA9ICZwY2llLT5yZXMudjJfN18wOwo+ IEBAIC05NzgsNiArMTAxNiwxNCBAQCBzdGF0aWMgaW50IHFjb21fcGNpZV9pbml0XzJfN18wKHN0 cnVjdCBxY29tX3BjaWUgKnBjaWUpCj4gIAlpZiAocmV0IDwgMCkKPiAgCQlnb3RvIGVycl9kaXNh YmxlX3JlZ3VsYXRvcnM7Cj4gIAo+ICsJaWYgKHBjaWUtPmNmZy0+bGlua19yZXRhaW4pIHsKPiAr CQlwY2ktPnBwLmxpbmtfcmV0YWluID0gcWNvbV9wY2llX2NoZWNrX2xpbmtfcmV0YWluKHBjaWUp Owo+ICsJCWlmIChwY2ktPnBwLmxpbmtfcmV0YWluKSB7Cj4gKwkJCWRldl9pbmZvKGRldiwgIlJl dGFpbmluZyBQQ0llIGxpbmtcbiIpOwo+ICsJCQlyZXR1cm4gMDsKPiArCQl9Cj4gKwl9CgpbU2V2 ZXJpdHk6IEhpZ2hdCkRvZXMgdGhpcyBlYXJseSByZXR1cm4gYnlwYXNzIGNyaXRpY2FsIHNvZnR3 YXJlIHN0YXRlIGluaXRpYWxpemF0aW9uPwoKUmV0dXJuaW5nIGVhcmx5IGhlcmUgc2tpcHMgdGhl IGFzc2lnbm1lbnQgb2YgcGNpLT5sMXNzX3N1cHBvcnQgPSB0cnVlIGxhdGVyCmluIHRoaXMgZnVu Y3Rpb24uIEJlY2F1c2Ugc3RydWN0IGR3X3BjaWUgaXMgemVyby1pbml0aWFsaXplZCwgdGhlIGRv d25zdHJlYW0KRGVzaWduV2FyZSBjb3JlIG1pZ2h0IGZhbHNlbHkgYXNzdW1lIEFTUE0gTDEgU3Vi c3RhdGVzIGFyZSB1bnN1cHBvcnRlZCBhbmQKZmFpbCB0byBjb25maWd1cmUgdGhlbSBjb3JyZWN0 bHkuCgo+ICsKPiAgCXJldCA9IHJlc2V0X2NvbnRyb2xfYXNzZXJ0KHJlcy0+cnN0KTsKPiAgCWlm IChyZXQpIHsKPiAgCQlkZXZfZXJyKGRldiwgInJlc2V0IGFzc2VydCBmYWlsZWQgKCVkKVxuIiwg cmV0KTsKPiBAQCAtMTAzOCw2ICsxMDg0LDkgQEAgc3RhdGljIGludCBxY29tX3BjaWVfcG9zdF9p bml0XzJfN18wKHN0cnVjdCBxY29tX3BjaWUgKnBjaWUpCj4gIHsKPiAgCWNvbnN0IHN0cnVjdCBx Y29tX3BjaWVfY2ZnICpwY2llX2NmZyA9IHBjaWUtPmNmZzsKPiAgCj4gKwlpZiAocGNpZS0+cGNp LT5wcC5saW5rX3JldGFpbikKPiArCQlyZXR1cm4gMDsKPiArCgpbU2V2ZXJpdHk6IEhpZ2hdCkNv dWxkIHRoaXMgZWFybHkgcmV0dXJuIHNraXAgbmVjZXNzYXJ5IGhvdC1wbHVnIGNvbmZpZ3VyYXRp b25zPwoKQnkgcmV0dXJuaW5nIGVhcmx5LCB0aGlzIHNraXBzIHRoZSBjYWxsIHRvIHFjb21fcGNp ZV9zZXRfc2xvdF9uY2NzKCkgbG9jYXRlZApmdXJ0aGVyIGRvd24uIE1pc3NpbmcgdGhlIE5vIENv bW1hbmQgQ29tcGxldGVkIFN1cHBvcnQgKE5DQ1MpIGNvbmZpZ3VyYXRpb24KY291bGQgYnJlYWsg UENJZSBob3QtcGx1ZyBjb21tYW5kIGNvbXBsZXRpb25zIGFuZCBsZWFkIHRvIHRpbWVvdXRzIGR1 cmluZwpob3QtcGx1ZyBvcGVyYXRpb25zLgoKPiAgCWlmIChwY2llX2NmZy0+b3ZlcnJpZGVfbm9f c25vb3ApCj4gIAkJd3JpdGVsKFdSX05PX1NOT09QX09WRVJSSURFX0VOIHwgUkRfTk9fU05PT1Bf T1ZFUlJJREVfRU4sCj4gIAkJCQlwY2llLT5wYXJmICsgUEFSRl9OT19TTk9PUF9PVkVSUklERSk7 CgpbIC4uLiBdCgo+IEBAIC0xMzM3LDggKzEzODgsOSBAQCBzdGF0aWMgaW50IHFjb21fcGNpZV9o b3N0X2luaXQoc3RydWN0IGR3X3BjaWVfcnAgKnBwKQo+ICBlcnJfcHdyY3RybF9wb3dlcl9vZmY6 Cj4gIAlwY2lfcHdyY3RybF9wb3dlcl9vZmZfZGV2aWNlcyhwY2ktPmRldik7Cj4gIGVycl9wd3Jj dHJsX2Rlc3Ryb3k6Cj4gLQlpZiAocmV0ICE9IC1FUFJPQkVfREVGRVIpCj4gLQkJcGNpX3B3cmN0 cmxfZGVzdHJveV9kZXZpY2VzKHBjaS0+ZGV2KTsKPiArCWlmIChwcC0+bGlua19yZXRhaW4gJiYg cmV0ID09IC1FUFJPQkVfREVGRVIpCj4gKwkJcmV0dXJuIDA7CgpbU2V2ZXJpdHk6IEhpZ2hdCkRv ZXMgcmV0dXJuaW5nIDAgaGVyZSBkZWZlYXQgdGhlIHByb2JlIGRlZmVycmFsIG1lY2hhbmlzbT8K CklmIHBjaV9wd3JjdHJsX3Bvd2VyX29uX2RldmljZXMoKSBlYXJsaWVyIGluIHRoaXMgZnVuY3Rp b24gcmV0dXJucwotRVBST0JFX0RFRkVSLCByZXR1cm5pbmcgMCBpbnN0ZWFkIG9mIHByb3BhZ2F0 aW5nIHRoZSBlcnJvciBjb2RlIGNhdXNlcwp0aGUgZHJpdmVyIGNvcmUgdG8gdHJlYXQgdGhlIHBy b2JlIGFzIHN1Y2Nlc3NmdWwuIFRoaXMgbWVhbnMgdGhlIGRyaXZlcgp3aWxsIG5vdCBiZSByZS1w cm9iZWQgd2hlbiByZXNvdXJjZXMgYmVjb21lIGF2YWlsYWJsZS4KCkFkZGl0aW9uYWxseSwgcmV0 dXJuaW5nIGVhcmx5IGZyb20gdGhpcyBlcnJvciBjbGVhbnVwIHBhdGggbGVhdmVzIHRoZSByZXN0 Cm9mIHRoZSBob3N0IGluaXRpYWxpemF0aW9uIGluY29tcGxldGUgKHN1Y2ggYXMgU01NVSBzZXR1 cCBhbmQgcmVtb3ZpbmcKTVNJWC9EUEMgY2FwYWJpbGl0aWVzKSwgcG90ZW50aWFsbHkgbGVhdmlu ZyB0aGUgY29udHJvbGxlciBpbiBhbiB1bnVzYWJsZQpzdGF0ZSB3aGlsZSB0aGUga2VybmVsIGJl bGlldmVzIHRoZSBwcm9iZSBzdWNjZWVkZWQuCgo+ICsJcGNpX3B3cmN0cmxfZGVzdHJveV9kZXZp Y2VzKHBjaS0+ZGV2KTsKPiAgZXJyX2Rpc2FibGVfcGh5Ogo+ICAJcWNvbV9wY2llX3BoeV9wb3dl cl9vZmYocGNpZSk7Cj4gIGVycl9kZWluaXQ6CgotLSAKU2FzaGlrbyBBSSByZXZpZXcgwrcgaHR0 cHM6Ly9zYXNoaWtvLmRldi8jL3BhdGNoc2V0LzIwMjYwNTIxLWxpbmtfcmV0YWluLXYyLTAtMDhl ZDQ0OGIwODFjQG9zcy5xdWFsY29tbS5jb20/cGFydD0zCgotLSAKbGludXgtcGh5IG1haWxpbmcg bGlzdApsaW51eC1waHlAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwczovL2xpc3RzLmluZnJhZGVh ZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1waHkK