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 042C35237A4; Wed, 9 Sep 2026 12:07:28 +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=1788955650; cv=none; b=JsdoGY/K7Z0gfkIet9HhpPlLtwu/TUZ0ufE9di8NI+Gs3MWE1D5MHYJiW2zNgPRooP/lfUof8kzQMt20YsTRhszIlIsLbBuPQzNDzYgSVmQ+C3+H5PpoiPc/PYdg3MebqEx82PJK2HpTTipU97LnHAjLMn4E4a7lfHugPL3GNIg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788955650; c=relaxed/simple; bh=2h8XIstbQQAAwItgV1Dpxh958hOmAz/lfHtGxpdZuOc=; h=From:Subject:To:Cc:In-Reply-To:References:Content-Type:Date: Message-Id; b=LJ4xeUUwzLcUf6Y4XODUxDHPJT97+Y8LDj5KUbVhuDjChvtjKUOyh0LnXOtvc3qXmD3yXaftAYwRYaC96ukPKmprw4lZBISGr2mlKy4wp1nYAFbCdWkPLSV0RuXUVZENvvqy050hvEu6SUzihfZcN3NMOF0Rz6M6y9RIMM4i+dg= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=hrQSlYjs; 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="hrQSlYjs" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3D2FC1F00A3D; Wed, 9 Sep 2026 12:07:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788955648; bh=eWdprPw1IAwyZg2T0oKk+X/h6rbzr2IN/8PYX7S7qQU=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=hrQSlYjsg7LIQ485IzaZ/UX4LsV1qN6Q8wEFsitUnwfek7GRn6yQNByh5hNkBoC0i i2e0ezG7Z0oo9IcV6OvGcqIHGdqbmWdXSEDO+za6P/jPcav4mBE/AlOEo6xMET4ij3 uLSSVGyYZwP8Endj9LlTRN7WcAB4n1CY0lnwHMtQrjkfPcft52E/k5/9K99Mopztg4 rXdGg6DD+fYoQzPYkR+G+JCjYt/39/RmAdCbhEEg4SNKKbJKo0AhByzvyk/zn7AmfP tulSgVpJvFgNeAXwBtW+qrnTPUqes+7hLiV3bBOSPKWLivkvtL3fbFhuA4FD/bc/DJ baodBaYGJimjA== From: sashiko-bot@kernel.org Subject: Re: [PATCH v3 5/5] phy: qcom: qmp-pcie: Add Nord Gen5x16 PCIe multi-PHY support Reply-To: sashiko-reviews@lists.linux.dev To: "Krishna Chaitanya Chundru" Cc: devicetree@vger.kernel.org, vkoul@kernel.org, olteanv@gmail.com, conor+dt@kernel.org, robh@kernel.org, neil.armstrong@linaro.org, linux-phy@lists.infradead.org, linux-pci@vger.kernel.org In-Reply-To: <20260909-nord-v3-5-b0a82721c547@oss.qualcomm.com> References: <20260909-nord-v3-0-b0a82721c547@oss.qualcomm.com> <20260909-nord-v3-5-b0a82721c547@oss.qualcomm.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Wed, 09 Sep 2026 12:07:27 +0000 Message-Id: <20260909120728.3D2FC1F00A3D@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: - [Critical] The `skip_init` logic is flawed for the existing Glymur PHY pl= atform, leading to a guaranteed NULL pointer dereference and unintended reg= ister corruption during initialization. - [High] Accessing PHY PCS registers in `qmp_pcie_init()` before explicitly= enabling the required AHB clocks leads to a synchronous external abort. -- commit e58c7fedd872d7c03646f577c8b3832e397473b6 Author: Krishna Chaitanya Chundru phy: qcom: qmp-pcie: Add Nord Gen5x16 PCIe multi-PHY support This commit adds support for the Nord Gen5x16 bifurcated QMP PCIe PHY. It implements the PHY initialization sequencing including PLL, TXRXZ, and PCS tables, handling PHY power domains against their own device. > diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-pcie-multiphy.c b/drivers/= phy/qualcomm/phy-qcom-qmp-pcie-multiphy.c > --- a/drivers/phy/qualcomm/phy-qcom-qmp-pcie-multiphy.c > +++ b/drivers/phy/qualcomm/phy-qcom-qmp-pcie-multiphy.c [ ... ] > +static void qmp_pcie_init_port_registers(struct qmp_pcie *qmp) > +{ > + const struct qmp_phy_cfg *cfg =3D qmp->cfg; > + const struct qmp_pcie_offsets *offs =3D cfg->offsets; > + const struct qmp_phy_cfg_tbls *tbls =3D &cfg->tbls; > + int i; > + > + for (i =3D 0; i < cfg->num_regs; i++) { > + void __iomem *port =3D qmp->base[i]; [ ... ] > + qmp_configure(qmp->dev, port + offs->pll, > + tbls->pll_common, tbls->pll_common_num); > + qmp_configure(qmp->dev, port + offs->pll, > + cfg->pll_tbls[i], cfg->pll_nums[i]); [Severity: Critical] If the existing Glymur platform calls qmp_pcie_init_port_registers(), could this dereference a null pointer? Looking at glymur_qmp_gen5x8_pciephy_cfg, cfg->pll_tbls is not initialized and remains null. [ ... ] > @@ -953,6 +953,30 @@ static int qmp_pcie_init(struct phy *phy) > { > struct qmp_pcie *qmp =3D phy_get_drvdata(phy); > const struct qmp_phy_cfg *cfg =3D qmp->cfg; > + const struct qmp_pcie_offsets *offs =3D cfg->offsets; > + int i, ret; > =20 > ret =3D qmp_pcie_pd_power_on(qmp); > if (ret) > return ret; > =20 > + /* > + * We can skip PHY initialization if all of the following conditions > + * are met: > + * 1. The PHY supports the nocsr_reset that preserves the PHY config. > + * 2. The PHY was started (and not powered down again) by the > + * bootloader, with all of the expected bits set correctly. > + * In this case, we can continue without having the init sequence > + * defined in the driver. > + */ > + qmp->skip_init =3D cfg->pll_tbls && qmp->nocsr_resets; [Severity: Critical] Because cfg->pll_tbls is null for the Glymur platform, qmp->skip_init will always evaluate to false. Does this unintentionally force the Glymur platform to attempt the port register initialization in qmp_pcie_power_on()? > + for (i =3D 0; qmp->skip_init && i < cfg->num_regs; i++) { > + void __iomem *port =3D qmp->base[i]; > + > + if (!qphy_checkbits(port + offs->pcs, cfg->regs[QPHY_PCS_START_CONTROL= ], > + SERDES_START | PCS_START) || > + !qphy_checkbits(port + offs->pcs, cfg->regs[QPHY_PCS_POWER_DOWN_CO= NTROL], > + SW_PWRDN | REFCLK_DRV_DSBL)) > + qmp->skip_init =3D false; > + } [Severity: High] Does reading QPHY_PCS_START_CONTROL here happen before the required AHB/APB clocks are enabled? The call to clk_bulk_prepare_enable() occurs further down in qmp_pcie_init(). If the clocks are currently disabled, such as during boot or after a suspen= d=20 cycle, will accessing these memory-mapped registers trigger a synchronous=20 external abort? [ ... ] > @@ -1067,6 +1067,20 @@ static int qmp_pcie_power_on(struct phy *phy) > goto err_disable_pipe_clk; > } > =20 > + if (!qmp->skip_init) { > + qmp_pcie_init_port_registers(qmp); > + > + for (i =3D 0; i < cfg->num_regs; i++) { > + qphy_clrbits(qmp->base[i] + offs->pcs, > + cfg->regs[QPHY_PCS_SW_RESET], SW_RESET); [Severity: Critical] If Glymur falls into this block due to skip_init being false, it reads from cfg->regs[QPHY_PCS_SW_RESET]. The Glymur register layout (pciephy_v8_50_regs_layout) does not define QPHY_PCS_SW_RESET. Can this result in reading index 0 (which maps to QPHY_PCS_STATUS) and writing to an undefined offset, thereby corrupting the PHY register at offset 0x0? > + qphy_setbits(qmp->base[i] + offs->pcs, > + cfg->regs[QPHY_PCS_START_CONTROL], > + SERDES_START | PCS_START); > + } > + > + usleep_range(2000, 2500); > + } --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20260909-nord-v3-0-= b0a82721c547@oss.qualcomm.com?part=3D5 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 35205C79FAD for ; Wed, 9 Sep 2026 12:07:31 +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=5HbXjHLLY8Km+ukgm1cxRhgjBwtKdRKTpx5QyKFZbFk=; b=Zcl/0TA/XpJrmf tYj/WTR/N+bvVkoA7giuSH7Ynh+Feo+Sak7KFBocNYoXDv6Yne2ep0rtek8Eh9ZRwqibT6WRg4ste BwW+JPT7rXPvuzSNC0B6IKUBtOWKrpzBWcIMuKkgV5dild8Snc/Ul/jv0/uU7kgKQlPipL3oWPyxl OAavn6g193Ls8XLt3TbbRYkdpgq+yzhFFIrxEtru21h+aluZpYI770mqOXV0QljSoKEE6z+mybSn9 hCNTVBsqnyrfWIblyRb/j7GJow+JRMC9Nwj4beXLGJmRTMZ98F8fDN1T++w2MkaUqkLMi+tID6ahY WDDSTs6WoCBDlYuuA+5w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1x4H5O-0000000BdkI-3ERm; Wed, 09 Sep 2026 12:07:30 +0000 Received: from tor.source.kernel.org ([2600:3c04:e001:324:0:1991:8:25]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1x4H5N-0000000BdkA-3yFs for linux-phy@lists.infradead.org; Wed, 09 Sep 2026 12:07:30 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id 0328160207; Wed, 9 Sep 2026 12:07:29 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3D2FC1F00A3D; Wed, 9 Sep 2026 12:07:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788955648; bh=eWdprPw1IAwyZg2T0oKk+X/h6rbzr2IN/8PYX7S7qQU=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=hrQSlYjsg7LIQ485IzaZ/UX4LsV1qN6Q8wEFsitUnwfek7GRn6yQNByh5hNkBoC0i i2e0ezG7Z0oo9IcV6OvGcqIHGdqbmWdXSEDO+za6P/jPcav4mBE/AlOEo6xMET4ij3 uLSSVGyYZwP8Endj9LlTRN7WcAB4n1CY0lnwHMtQrjkfPcft52E/k5/9K99Mopztg4 rXdGg6DD+fYoQzPYkR+G+JCjYt/39/RmAdCbhEEg4SNKKbJKo0AhByzvyk/zn7AmfP tulSgVpJvFgNeAXwBtW+qrnTPUqes+7hLiV3bBOSPKWLivkvtL3fbFhuA4FD/bc/DJ baodBaYGJimjA== From: sashiko-bot@kernel.org Subject: Re: [PATCH v3 5/5] phy: qcom: qmp-pcie: Add Nord Gen5x16 PCIe multi-PHY support To: "Krishna Chaitanya Chundru" Cc: devicetree@vger.kernel.org, vkoul@kernel.org, olteanv@gmail.com, conor+dt@kernel.org, robh@kernel.org, neil.armstrong@linaro.org, linux-phy@lists.infradead.org, linux-pci@vger.kernel.org In-Reply-To: <20260909-nord-v3-5-b0a82721c547@oss.qualcomm.com> References: <20260909-nord-v3-0-b0a82721c547@oss.qualcomm.com> <20260909-nord-v3-5-b0a82721c547@oss.qualcomm.com> Date: Wed, 09 Sep 2026 12:07:27 +0000 Message-Id: <20260909120728.3D2FC1F00A3D@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 MiBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6Ci0gW0NyaXRpY2FsXSBUaGUgYHNraXBf aW5pdGAgbG9naWMgaXMgZmxhd2VkIGZvciB0aGUgZXhpc3RpbmcgR2x5bXVyIFBIWSBwbGF0Zm9y bSwgbGVhZGluZyB0byBhIGd1YXJhbnRlZWQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGFuZCB1 bmludGVuZGVkIHJlZ2lzdGVyIGNvcnJ1cHRpb24gZHVyaW5nIGluaXRpYWxpemF0aW9uLgotIFtI aWdoXSBBY2Nlc3NpbmcgUEhZIFBDUyByZWdpc3RlcnMgaW4gYHFtcF9wY2llX2luaXQoKWAgYmVm b3JlIGV4cGxpY2l0bHkgZW5hYmxpbmcgdGhlIHJlcXVpcmVkIEFIQiBjbG9ja3MgbGVhZHMgdG8g YSBzeW5jaHJvbm91cyBleHRlcm5hbCBhYm9ydC4KLS0KCmNvbW1pdCBlNThjN2ZlZGQ4NzJkN2Mw MzY0NmY1NzdjOGIzODMyZTM5NzQ3M2I2CkF1dGhvcjogS3Jpc2huYSBDaGFpdGFueWEgQ2h1bmRy dSA8a3Jpc2huYS5jaHVuZHJ1QG9zcy5xdWFsY29tbS5jb20+CgpwaHk6IHFjb206IHFtcC1wY2ll OiBBZGQgTm9yZCBHZW41eDE2IFBDSWUgbXVsdGktUEhZIHN1cHBvcnQKClRoaXMgY29tbWl0IGFk ZHMgc3VwcG9ydCBmb3IgdGhlIE5vcmQgR2VuNXgxNiBiaWZ1cmNhdGVkIFFNUCBQQ0llIFBIWS4K SXQgaW1wbGVtZW50cyB0aGUgUEhZIGluaXRpYWxpemF0aW9uIHNlcXVlbmNpbmcgaW5jbHVkaW5n IFBMTCwgVFhSWFosCmFuZCBQQ1MgdGFibGVzLCBoYW5kbGluZyBQSFkgcG93ZXIgZG9tYWlucyBh Z2FpbnN0IHRoZWlyIG93biBkZXZpY2UuCgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9xdWFs Y29tbS9waHktcWNvbS1xbXAtcGNpZS1tdWx0aXBoeS5jIGIvZHJpdmVycy9waHkvcXVhbGNvbW0v cGh5LXFjb20tcW1wLXBjaWUtbXVsdGlwaHkuYwo+IC0tLSBhL2RyaXZlcnMvcGh5L3F1YWxjb21t L3BoeS1xY29tLXFtcC1wY2llLW11bHRpcGh5LmMKPiArKysgYi9kcml2ZXJzL3BoeS9xdWFsY29t bS9waHktcWNvbS1xbXAtcGNpZS1tdWx0aXBoeS5jClsgLi4uIF0KPiArc3RhdGljIHZvaWQgcW1w X3BjaWVfaW5pdF9wb3J0X3JlZ2lzdGVycyhzdHJ1Y3QgcW1wX3BjaWUgKnFtcCkKPiArewo+ICsJ Y29uc3Qgc3RydWN0IHFtcF9waHlfY2ZnICpjZmcgPSBxbXAtPmNmZzsKPiArCWNvbnN0IHN0cnVj dCBxbXBfcGNpZV9vZmZzZXRzICpvZmZzID0gY2ZnLT5vZmZzZXRzOwo+ICsJY29uc3Qgc3RydWN0 IHFtcF9waHlfY2ZnX3RibHMgKnRibHMgPSAmY2ZnLT50YmxzOwo+ICsJaW50IGk7Cj4gKwo+ICsJ Zm9yIChpID0gMDsgaSA8IGNmZy0+bnVtX3JlZ3M7IGkrKykgewo+ICsJCXZvaWQgX19pb21lbSAq cG9ydCA9IHFtcC0+YmFzZVtpXTsKWyAuLi4gXQo+ICsJCXFtcF9jb25maWd1cmUocW1wLT5kZXYs IHBvcnQgKyBvZmZzLT5wbGwsCj4gKwkJCSAgICAgIHRibHMtPnBsbF9jb21tb24sIHRibHMtPnBs bF9jb21tb25fbnVtKTsKPiArCQlxbXBfY29uZmlndXJlKHFtcC0+ZGV2LCBwb3J0ICsgb2Zmcy0+ cGxsLAo+ICsJCQkgICAgICBjZmctPnBsbF90YmxzW2ldLCBjZmctPnBsbF9udW1zW2ldKTsKCltT ZXZlcml0eTogQ3JpdGljYWxdCklmIHRoZSBleGlzdGluZyBHbHltdXIgcGxhdGZvcm0gY2FsbHMg cW1wX3BjaWVfaW5pdF9wb3J0X3JlZ2lzdGVycygpLCBjb3VsZAp0aGlzIGRlcmVmZXJlbmNlIGEg bnVsbCBwb2ludGVyPyBMb29raW5nIGF0IGdseW11cl9xbXBfZ2VuNXg4X3BjaWVwaHlfY2ZnLApj ZmctPnBsbF90YmxzIGlzIG5vdCBpbml0aWFsaXplZCBhbmQgcmVtYWlucyBudWxsLgoKWyAuLi4g XQo+IEBAIC05NTMsNiArOTUzLDMwIEBAIHN0YXRpYyBpbnQgcW1wX3BjaWVfaW5pdChzdHJ1Y3Qg cGh5ICpwaHkpCj4gIHsKPiAgCXN0cnVjdCBxbXBfcGNpZSAqcW1wID0gcGh5X2dldF9kcnZkYXRh KHBoeSk7Cj4gIAljb25zdCBzdHJ1Y3QgcW1wX3BoeV9jZmcgKmNmZyA9IHFtcC0+Y2ZnOwo+ICsJ Y29uc3Qgc3RydWN0IHFtcF9wY2llX29mZnNldHMgKm9mZnMgPSBjZmctPm9mZnNldHM7Cj4gKwlp bnQgaSwgcmV0Owo+ICAKPiAgCXJldCA9IHFtcF9wY2llX3BkX3Bvd2VyX29uKHFtcCk7Cj4gIAlp ZiAocmV0KQo+ICAJCXJldHVybiByZXQ7Cj4gIAo+ICsJLyoKPiArCSAqIFdlIGNhbiBza2lwIFBI WSBpbml0aWFsaXphdGlvbiBpZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCj4gKwkg KiBhcmUgbWV0Ogo+ICsJICogIDEuIFRoZSBQSFkgc3VwcG9ydHMgdGhlIG5vY3NyX3Jlc2V0IHRo YXQgcHJlc2VydmVzIHRoZSBQSFkgY29uZmlnLgo+ICsJICogIDIuIFRoZSBQSFkgd2FzIHN0YXJ0 ZWQgKGFuZCBub3QgcG93ZXJlZCBkb3duIGFnYWluKSBieSB0aGUKPiArCSAqICAgICBib290bG9h ZGVyLCB3aXRoIGFsbCBvZiB0aGUgZXhwZWN0ZWQgYml0cyBzZXQgY29ycmVjdGx5Lgo+ICsJICog SW4gdGhpcyBjYXNlLCB3ZSBjYW4gY29udGludWUgd2l0aG91dCBoYXZpbmcgdGhlIGluaXQgc2Vx dWVuY2UKPiArCSAqIGRlZmluZWQgaW4gdGhlIGRyaXZlci4KPiArCSAqLwo+ICsJcW1wLT5za2lw X2luaXQgPSBjZmctPnBsbF90YmxzICYmIHFtcC0+bm9jc3JfcmVzZXRzOwoKW1NldmVyaXR5OiBD cml0aWNhbF0KQmVjYXVzZSBjZmctPnBsbF90YmxzIGlzIG51bGwgZm9yIHRoZSBHbHltdXIgcGxh dGZvcm0sIHFtcC0+c2tpcF9pbml0IHdpbGwKYWx3YXlzIGV2YWx1YXRlIHRvIGZhbHNlLiBEb2Vz IHRoaXMgdW5pbnRlbnRpb25hbGx5IGZvcmNlIHRoZSBHbHltdXIKcGxhdGZvcm0gdG8gYXR0ZW1w dCB0aGUgcG9ydCByZWdpc3RlciBpbml0aWFsaXphdGlvbiBpbiBxbXBfcGNpZV9wb3dlcl9vbigp PwoKPiArCWZvciAoaSA9IDA7IHFtcC0+c2tpcF9pbml0ICYmIGkgPCBjZmctPm51bV9yZWdzOyBp KyspIHsKPiArCQl2b2lkIF9faW9tZW0gKnBvcnQgPSBxbXAtPmJhc2VbaV07Cj4gKwo+ICsJCWlm ICghcXBoeV9jaGVja2JpdHMocG9ydCArIG9mZnMtPnBjcywgY2ZnLT5yZWdzW1FQSFlfUENTX1NU QVJUX0NPTlRST0xdLAo+ICsJCQkJICAgICBTRVJERVNfU1RBUlQgfCBQQ1NfU1RBUlQpIHx8Cj4g KwkJICAgICFxcGh5X2NoZWNrYml0cyhwb3J0ICsgb2Zmcy0+cGNzLCBjZmctPnJlZ3NbUVBIWV9Q Q1NfUE9XRVJfRE9XTl9DT05UUk9MXSwKPiArCQkJCSAgICAgU1dfUFdSRE4gfCBSRUZDTEtfRFJW X0RTQkwpKQo+ICsJCQlxbXAtPnNraXBfaW5pdCA9IGZhbHNlOwo+ICsJfQoKW1NldmVyaXR5OiBI aWdoXQpEb2VzIHJlYWRpbmcgUVBIWV9QQ1NfU1RBUlRfQ09OVFJPTCBoZXJlIGhhcHBlbiBiZWZv cmUgdGhlIHJlcXVpcmVkIEFIQi9BUEIKY2xvY2tzIGFyZSBlbmFibGVkPyBUaGUgY2FsbCB0byBj bGtfYnVsa19wcmVwYXJlX2VuYWJsZSgpIG9jY3VycyBmdXJ0aGVyCmRvd24gaW4gcW1wX3BjaWVf aW5pdCgpLgoKSWYgdGhlIGNsb2NrcyBhcmUgY3VycmVudGx5IGRpc2FibGVkLCBzdWNoIGFzIGR1 cmluZyBib290IG9yIGFmdGVyIGEgc3VzcGVuZCAKY3ljbGUsIHdpbGwgYWNjZXNzaW5nIHRoZXNl IG1lbW9yeS1tYXBwZWQgcmVnaXN0ZXJzIHRyaWdnZXIgYSBzeW5jaHJvbm91cyAKZXh0ZXJuYWwg YWJvcnQ/CgpbIC4uLiBdCj4gQEAgLTEwNjcsNiArMTA2NywyMCBAQCBzdGF0aWMgaW50IHFtcF9w Y2llX3Bvd2VyX29uKHN0cnVjdCBwaHkgKnBoeSkKPiAgCQlnb3RvIGVycl9kaXNhYmxlX3BpcGVf Y2xrOwo+ICAJfQo+ICAKPiArCWlmICghcW1wLT5za2lwX2luaXQpIHsKPiArCQlxbXBfcGNpZV9p bml0X3BvcnRfcmVnaXN0ZXJzKHFtcCk7Cj4gKwo+ICsJCWZvciAoaSA9IDA7IGkgPCBjZmctPm51 bV9yZWdzOyBpKyspIHsKPiArCQkJcXBoeV9jbHJiaXRzKHFtcC0+YmFzZVtpXSArIG9mZnMtPnBj cywKPiArCQkJCSAgICAgY2ZnLT5yZWdzW1FQSFlfUENTX1NXX1JFU0VUXSwgU1dfUkVTRVQpOwoK W1NldmVyaXR5OiBDcml0aWNhbF0KSWYgR2x5bXVyIGZhbGxzIGludG8gdGhpcyBibG9jayBkdWUg dG8gc2tpcF9pbml0IGJlaW5nIGZhbHNlLCBpdCByZWFkcwpmcm9tIGNmZy0+cmVnc1tRUEhZX1BD U19TV19SRVNFVF0uIFRoZSBHbHltdXIgcmVnaXN0ZXIgbGF5b3V0CihwY2llcGh5X3Y4XzUwX3Jl Z3NfbGF5b3V0KSBkb2VzIG5vdCBkZWZpbmUgUVBIWV9QQ1NfU1dfUkVTRVQuCgpDYW4gdGhpcyBy ZXN1bHQgaW4gcmVhZGluZyBpbmRleCAwICh3aGljaCBtYXBzIHRvIFFQSFlfUENTX1NUQVRVUykg YW5kCndyaXRpbmcgdG8gYW4gdW5kZWZpbmVkIG9mZnNldCwgdGhlcmVieSBjb3JydXB0aW5nIHRo ZSBQSFkgcmVnaXN0ZXIgYXQKb2Zmc2V0IDB4MD8KCj4gKwkJCXFwaHlfc2V0Yml0cyhxbXAtPmJh c2VbaV0gKyBvZmZzLT5wY3MsCj4gKwkJCQkgICAgIGNmZy0+cmVnc1tRUEhZX1BDU19TVEFSVF9D T05UUk9MXSwKPiArCQkJCSAgICAgU0VSREVTX1NUQVJUIHwgUENTX1NUQVJUKTsKPiArCQl9Cj4g Kwo+ICsJCXVzbGVlcF9yYW5nZSgyMDAwLCAyNTAwKTsKPiArCX0KCi0tIApTYXNoaWtvIEFJIHJl dmlldyDCtyBodHRwczovL3Nhc2hpa28uZGV2LyMvcGF0Y2hzZXQvMjAyNjA5MDktbm9yZC12My0w LWIwYTgyNzIxYzU0N0Bvc3MucXVhbGNvbW0uY29tP3BhcnQ9NQoKLS0gCmxpbnV4LXBoeSBtYWls aW5nIGxpc3QKbGludXgtcGh5QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cHM6Ly9saXN0cy5pbmZy YWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcGh5Cg==