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 96B583DAAC0; Sun, 20 Sep 2026 06:54:59 +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=1789887300; cv=none; b=IypszZhLJfiAPt9u/rlE76s8CVB5mUTP2ZajZEm7kLt7ihklvGhu6ypSbjbiYwCXyeIox2j/Tv0yjrUct/RfM1UGmEJNifDRq950ZwPW2GT1OVsdVZ7FOyWyCUPuDVffabv2sKMIkdHkitYumUuROAARHvbPxY7aUxkedkD0MZI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789887300; c=relaxed/simple; bh=vlQV4moENea9d6CLDNDz9aYqSkbU30plOIvFrHh/NVk=; h=From:Subject:To:Cc:In-Reply-To:References:Content-Type:Date: Message-Id; b=LOc9bHsROV0jiPkS/xMcZwvy523yS9G3gB5OrwBm2k6CVBM7M/1I5LCMc/WN/pnSQ5l7HMvIA7xMj6/qu0iyeEurR/JGXDChnqnvIO4+WfPMM/6M+rmy1KZ8/+Wm+xu9JMqZ0E5WW520FkguDNjLLYfdSNxE0A5WtUjblDC8EE4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=YRjFD8+s; 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="YRjFD8+s" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E16661F000FF; Sun, 20 Sep 2026 06:54:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789887299; bh=ybM0945rSh88HsdCn75C00Rf9SSOVXNSxqOyfr5cKhM=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=YRjFD8+sRHAaxgSPYg2O5c1x3orua8FyeVf1VIDpO7GEyUP5VFfy1AAJAetMQ4xAi qF3ayjJKDqSMHmfpjiDYl6wj2iVKO1J5vTWZmWM0Q1gl95ZNnf5RYO+fHc7isRpZ+J Phu1xp4sxH59a08lpUofnM6IZZ78wFarzG9Q2Bbgue5IKbjn7K7ZtaZrYHrUb2aI76 awhrqUtfwEi77fFZH9uMQY5HDtOorIHEZh1nP4VO+pwr2m+0B2NHJaYpMb1Gjrv3AW a14HJIO1hEUkl6mVjM9+3Gmj5ZbIZXtsP/4mLpPYNtXj05n8pSyEL4yS+XbE+rln2E 2VGJ/Ipa8T1mw== From: sashiko-bot@kernel.org Subject: Re: [PATCH RFC v3 04/12] net: pcs: add NXP SerDes XPCS shared core Reply-To: sashiko-reviews@lists.linux.dev To: =?utf-8?b?SmFuIFBldHJvdXMgKE9TUyk=?= Cc: devicetree@vger.kernel.org, linux-phy@lists.infradead.org, neil.armstrong@linaro.org, vkoul@kernel.org, olteanv@gmail.com, imx@lists.linux.dev, wsa+renesas@sang-engineering.com, robh@kernel.org, conor+dt@kernel.org, linux-pci@vger.kernel.org, Frank.Li@kernel.org In-Reply-To: <20260919-s32g_serdes-v3-4-9d68868c1e89@oss.nxp.com> References: <20260919-s32g_serdes-v3-0-9d68868c1e89@oss.nxp.com> <20260919-s32g_serdes-v3-4-9d68868c1e89@oss.nxp.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Sun, 20 Sep 2026 06:54:58 +0000 Message-Id: <20260920065458.E16661F000FF@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] net: pcs: Link flap and incorrect speed/duplex resolution in SGMII= AN - [High] net: pcs: USXGMII full-duplex configuration dropped by regmap mask - [Medium] net: pcs: Kernel panic on NULL pointer in nxp_serdes_xpcs_destroy -- commit fefa07f062a827745ea578ec9b3b8e4d9a1e9739 Author: Clark Wang net: pcs: add NXP SerDes XPCS shared core This commit adds a transport agnostic phylink PCS core for the Synopsys DesignWare Ethernet XPCS and Ethernet PHY found on NXP S32G and i.MX SoCs. It provides configuration and link state handling, operating on regmaps supplied by platform-specific glue drivers. > diff --git a/drivers/net/pcs/pcs-nxp-serdes-xpcs.c b/drivers/net/pcs/pcs-= nxp-serdes-xpcs.c > new file mode 100644 > --- /dev/null > +++ b/drivers/net/pcs/pcs-nxp-serdes-xpcs.c [ ... ] > +static int nxp_serdes_xpcs_get_state_c37_sgmii(struct nxp_serdes_xpcs *x= pcs, > + unsigned int neg_mode, > + struct phylink_link_state *state) > +{ [ ... ] > + if (ret & DW_VR_MII_C37_ANSGM_SP_LNKSTS) { [ ... ] > + } else if (ret =3D=3D DW_VR_MII_AN_STS_C37_ANCMPLT_INTR) { > + int speed, duplex; > + > + state->link =3D true; > + > + speed =3D nxp_serdes_xpcs_read(xpcs, MDIO_MMD_VEND2, MII_BMCR); > + if (speed < 0) > + return speed; > + > + speed &=3D BMCR_SPEED100 | BMCR_SPEED1000; > + if (speed =3D=3D BMCR_SPEED1000) > + state->speed =3D SPEED_1000; > + else if (speed =3D=3D BMCR_SPEED100) > + state->speed =3D SPEED_100; > + else if (speed =3D=3D 0) > + state->speed =3D SPEED_10; > + > + duplex =3D nxp_serdes_xpcs_read(xpcs, MDIO_MMD_VEND2, > + MII_ADVERTISE); > + if (duplex < 0) > + return duplex; > + > + if (duplex & ADVERTISE_1000XFULL) > + state->duplex =3D DUPLEX_FULL; > + else if (duplex & ADVERTISE_1000XHALF) > + state->duplex =3D DUPLEX_HALF; > + > + nxp_serdes_xpcs_write(xpcs, MDIO_MMD_VEND2, > + DW_VR_MII_AN_INTR_STS, 0); > + } > + > + return 0; > +} [Severity: High] Does this code override a valid link-down status and clear the interrupt, which could cause persistent link flaps? In nxp_serdes_xpcs_get_state_c37_sgmii(), if the link is actually down=20 (DW_VR_MII_C37_ANSGM_SP_LNKSTS is clear) but AN completed=20 (DW_VR_MII_AN_STS_C37_ANCMPLT_INTR is set), this block forces state->link to true and writes 0 to DW_VR_MII_AN_INTR_STS. The next poll might read 0 and report the link as down, creating an endless link flap. Additionally, can the auto-negotiated duplex be resolved incorrectly here by reading the local advertisement (MII_ADVERTISE) rather than the link partner's ability? [ ... ] > +static void nxp_serdes_xpcs_link_up_usxgmii(struct nxp_serdes_xpcs *xpcs, > + int speed) > +{ [ ... ] > + ret =3D nxp_serdes_xpcs_modify(xpcs, MDIO_MMD_VEND2, MII_BMCR, > + DW_USXGMII_SS_MASK, > + speed_sel | DW_USXGMII_FULL); [Severity: High] Does this regmap modification drop the DW_USXGMII_FULL configuration? Looking at nxp_serdes_xpcs_link_up_usxgmii(), the code attempts to set the duplex by passing DW_USXGMII_FULL to nxp_serdes_xpcs_modify(). However, DW_USXGMII_FULL is not included in DW_USXGMII_SS_MASK. Because nxp_serdes_xpcs_modify() masks the target value with the provided mask, the full-duplex configuration will be filtered out and never written to the hardware. [ ... ] > +void nxp_serdes_xpcs_destroy(struct phylink_pcs *pcs) > +{ > + struct nxp_serdes_xpcs *xpcs =3D phylink_pcs_to_nxp_serdes_xpcs(pcs); > + > + if (!xpcs) > + return; > + > + kfree(xpcs); > +} [Severity: Medium] Can this regression cause a panic due to evaluating container_of() before checking for NULL? In nxp_serdes_xpcs_destroy(), xpcs is extracted from pcs using phylink_pcs_to_nxp_serdes_xpcs() which is a container_of() wrapper. If a caller passes a NULL pcs pointer, container_of() will yield a negative offset. This bypasses the if (!xpcs) check, resulting in kfree() being called with an invalid pointer. --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20260919-s32g_serde= s-v3-0-9d68868c1e89@oss.nxp.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 25728C982CC for ; Sun, 20 Sep 2026 06:55:04 +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=jCySF5coCQwN8Ze+/RFuLvnrbg9ZJLi3rDjltV/n7Ks=; b=MJWEzkpZeQdl0N vWEBCchbzsPO4KMDzbYsvBardXSFa4fL4xa6MNx38pEr1FfbkaCrYFcvF6wtw1alXkDry90BbFHih 57wm1EJPcClj57hu8GYq2HS7FE6/ulDDXI64uClGtT3jkPbUeUn7hJ5G/ny5mEAdPZBC8EMbKBoCD 1yGNFHpAGvViVniduFrgVLPUQDuyw2TY6aQ+L9P4XqqJU0dPjWIuGzRCnf9/jummEo/ZctJaSosfF DL15z68+lawWPdHx7kd/E493i0HNOUt5q3JDu3WgWi0jjk9D4mGkpM+H+uvmynoNcooJkhepQL6ZN bltI8YFxCK8/LhRTOKDg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1x8BS3-0000000H0U8-3V4b; Sun, 20 Sep 2026 06:55:03 +0000 Received: from sea.source.kernel.org ([172.234.252.31]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1x8BS0-0000000H0S7-0eVR for linux-phy@lists.infradead.org; Sun, 20 Sep 2026 06:55:00 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 9B482408D4; Sun, 20 Sep 2026 06:54:59 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id E16661F000FF; Sun, 20 Sep 2026 06:54:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789887299; bh=ybM0945rSh88HsdCn75C00Rf9SSOVXNSxqOyfr5cKhM=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=YRjFD8+sRHAaxgSPYg2O5c1x3orua8FyeVf1VIDpO7GEyUP5VFfy1AAJAetMQ4xAi qF3ayjJKDqSMHmfpjiDYl6wj2iVKO1J5vTWZmWM0Q1gl95ZNnf5RYO+fHc7isRpZ+J Phu1xp4sxH59a08lpUofnM6IZZ78wFarzG9Q2Bbgue5IKbjn7K7ZtaZrYHrUb2aI76 awhrqUtfwEi77fFZH9uMQY5HDtOorIHEZh1nP4VO+pwr2m+0B2NHJaYpMb1Gjrv3AW a14HJIO1hEUkl6mVjM9+3Gmj5ZbIZXtsP/4mLpPYNtXj05n8pSyEL4yS+XbE+rln2E 2VGJ/Ipa8T1mw== From: sashiko-bot@kernel.org Subject: Re: [PATCH RFC v3 04/12] net: pcs: add NXP SerDes XPCS shared core To: =?utf-8?b?SmFuIFBldHJvdXMgKE9TUyk=?= Cc: devicetree@vger.kernel.org, linux-phy@lists.infradead.org, neil.armstrong@linaro.org, vkoul@kernel.org, olteanv@gmail.com, imx@lists.linux.dev, wsa+renesas@sang-engineering.com, robh@kernel.org, conor+dt@kernel.org, linux-pci@vger.kernel.org, Frank.Li@kernel.org In-Reply-To: <20260919-s32g_serdes-v3-4-9d68868c1e89@oss.nxp.com> References: <20260919-s32g_serdes-v3-0-9d68868c1e89@oss.nxp.com> <20260919-s32g_serdes-v3-4-9d68868c1e89@oss.nxp.com> Date: Sun, 20 Sep 2026 06:54:58 +0000 Message-Id: <20260920065458.E16661F000FF@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 MyBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6Ci0gW0hpZ2hdIG5ldDogcGNzOiBMaW5r IGZsYXAgYW5kIGluY29ycmVjdCBzcGVlZC9kdXBsZXggcmVzb2x1dGlvbiBpbiBTR01JSSBBTgot IFtIaWdoXSBuZXQ6IHBjczogVVNYR01JSSBmdWxsLWR1cGxleCBjb25maWd1cmF0aW9uIGRyb3Bw ZWQgYnkgcmVnbWFwIG1hc2sKLSBbTWVkaXVtXSBuZXQ6IHBjczogS2VybmVsIHBhbmljIG9uIE5V TEwgcG9pbnRlciBpbiBueHBfc2VyZGVzX3hwY3NfZGVzdHJveQotLQoKY29tbWl0IGZlZmEwN2Yw NjJhODI3NzQ1ZWE1NzhlYzliM2I4ZTRkOWExZTk3MzkKQXV0aG9yOiBDbGFyayBXYW5nIDx4aWFv bmluZy53YW5nQG54cC5jb20+CgpuZXQ6IHBjczogYWRkIE5YUCBTZXJEZXMgWFBDUyBzaGFyZWQg Y29yZQoKVGhpcyBjb21taXQgYWRkcyBhIHRyYW5zcG9ydCBhZ25vc3RpYyBwaHlsaW5rIFBDUyBj b3JlIGZvciB0aGUgU3lub3BzeXMKRGVzaWduV2FyZSBFdGhlcm5ldCBYUENTIGFuZCBFdGhlcm5l dCBQSFkgZm91bmQgb24gTlhQIFMzMkcgYW5kIGkuTVggU29Dcy4KSXQgcHJvdmlkZXMgY29uZmln dXJhdGlvbiBhbmQgbGluayBzdGF0ZSBoYW5kbGluZywgb3BlcmF0aW5nIG9uIHJlZ21hcHMKc3Vw cGxpZWQgYnkgcGxhdGZvcm0tc3BlY2lmaWMgZ2x1ZSBkcml2ZXJzLgoKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9uZXQvcGNzL3Bjcy1ueHAtc2VyZGVzLXhwY3MuYyBiL2RyaXZlcnMvbmV0L3Bjcy9w Y3MtbnhwLXNlcmRlcy14cGNzLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IC0tLSAvZGV2L251 bGwKPiArKysgYi9kcml2ZXJzL25ldC9wY3MvcGNzLW54cC1zZXJkZXMteHBjcy5jClsgLi4uIF0K PiArc3RhdGljIGludCBueHBfc2VyZGVzX3hwY3NfZ2V0X3N0YXRlX2MzN19zZ21paShzdHJ1Y3Qg bnhwX3NlcmRlc194cGNzICp4cGNzLAo+ICsJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbmVnX21v ZGUsCj4gKwkJCQkJICAgICAgIHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKQo+ICt7 ClsgLi4uIF0KPiArCWlmIChyZXQgJiBEV19WUl9NSUlfQzM3X0FOU0dNX1NQX0xOS1NUUykgewpb IC4uLiBdCj4gKwl9IGVsc2UgaWYgKHJldCA9PSBEV19WUl9NSUlfQU5fU1RTX0MzN19BTkNNUExU X0lOVFIpIHsKPiArCQlpbnQgc3BlZWQsIGR1cGxleDsKPiArCj4gKwkJc3RhdGUtPmxpbmsgPSB0 cnVlOwo+ICsKPiArCQlzcGVlZCA9IG54cF9zZXJkZXNfeHBjc19yZWFkKHhwY3MsIE1ESU9fTU1E X1ZFTkQyLCBNSUlfQk1DUik7Cj4gKwkJaWYgKHNwZWVkIDwgMCkKPiArCQkJcmV0dXJuIHNwZWVk Owo+ICsKPiArCQlzcGVlZCAmPSBCTUNSX1NQRUVEMTAwIHwgQk1DUl9TUEVFRDEwMDA7Cj4gKwkJ aWYgKHNwZWVkID09IEJNQ1JfU1BFRUQxMDAwKQo+ICsJCQlzdGF0ZS0+c3BlZWQgPSBTUEVFRF8x MDAwOwo+ICsJCWVsc2UgaWYgKHNwZWVkID09IEJNQ1JfU1BFRUQxMDApCj4gKwkJCXN0YXRlLT5z cGVlZCA9IFNQRUVEXzEwMDsKPiArCQllbHNlIGlmIChzcGVlZCA9PSAwKQo+ICsJCQlzdGF0ZS0+ c3BlZWQgPSBTUEVFRF8xMDsKPiArCj4gKwkJZHVwbGV4ID0gbnhwX3NlcmRlc194cGNzX3JlYWQo eHBjcywgTURJT19NTURfVkVORDIsCj4gKwkJCQkJICAgICAgTUlJX0FEVkVSVElTRSk7Cj4gKwkJ aWYgKGR1cGxleCA8IDApCj4gKwkJCXJldHVybiBkdXBsZXg7Cj4gKwo+ICsJCWlmIChkdXBsZXgg JiBBRFZFUlRJU0VfMTAwMFhGVUxMKQo+ICsJCQlzdGF0ZS0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7 Cj4gKwkJZWxzZSBpZiAoZHVwbGV4ICYgQURWRVJUSVNFXzEwMDBYSEFMRikKPiArCQkJc3RhdGUt PmR1cGxleCA9IERVUExFWF9IQUxGOwo+ICsKPiArCQlueHBfc2VyZGVzX3hwY3Nfd3JpdGUoeHBj cywgTURJT19NTURfVkVORDIsCj4gKwkJCQkgICAgICBEV19WUl9NSUlfQU5fSU5UUl9TVFMsIDAp Owo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9CgpbU2V2ZXJpdHk6IEhpZ2hdCkRvZXMgdGhp cyBjb2RlIG92ZXJyaWRlIGEgdmFsaWQgbGluay1kb3duIHN0YXR1cyBhbmQgY2xlYXIgdGhlIGlu dGVycnVwdCwKd2hpY2ggY291bGQgY2F1c2UgcGVyc2lzdGVudCBsaW5rIGZsYXBzPwoKSW4gbnhw X3NlcmRlc194cGNzX2dldF9zdGF0ZV9jMzdfc2dtaWkoKSwgaWYgdGhlIGxpbmsgaXMgYWN0dWFs bHkgZG93biAKKERXX1ZSX01JSV9DMzdfQU5TR01fU1BfTE5LU1RTIGlzIGNsZWFyKSBidXQgQU4g Y29tcGxldGVkIAooRFdfVlJfTUlJX0FOX1NUU19DMzdfQU5DTVBMVF9JTlRSIGlzIHNldCksIHRo aXMgYmxvY2sgZm9yY2VzIHN0YXRlLT5saW5rCnRvIHRydWUgYW5kIHdyaXRlcyAwIHRvIERXX1ZS X01JSV9BTl9JTlRSX1NUUy4gVGhlIG5leHQgcG9sbCBtaWdodCByZWFkIDAKYW5kIHJlcG9ydCB0 aGUgbGluayBhcyBkb3duLCBjcmVhdGluZyBhbiBlbmRsZXNzIGxpbmsgZmxhcC4KCkFkZGl0aW9u YWxseSwgY2FuIHRoZSBhdXRvLW5lZ290aWF0ZWQgZHVwbGV4IGJlIHJlc29sdmVkIGluY29ycmVj dGx5IGhlcmUKYnkgcmVhZGluZyB0aGUgbG9jYWwgYWR2ZXJ0aXNlbWVudCAoTUlJX0FEVkVSVElT RSkgcmF0aGVyIHRoYW4gdGhlIGxpbmsKcGFydG5lcidzIGFiaWxpdHk/CgpbIC4uLiBdCj4gK3N0 YXRpYyB2b2lkIG54cF9zZXJkZXNfeHBjc19saW5rX3VwX3VzeGdtaWkoc3RydWN0IG54cF9zZXJk ZXNfeHBjcyAqeHBjcywKPiArCQkJCQkgICAgaW50IHNwZWVkKQo+ICt7ClsgLi4uIF0KPiArCXJl dCA9IG54cF9zZXJkZXNfeHBjc19tb2RpZnkoeHBjcywgTURJT19NTURfVkVORDIsIE1JSV9CTUNS LAo+ICsJCQkJICAgICBEV19VU1hHTUlJX1NTX01BU0ssCj4gKwkJCQkgICAgIHNwZWVkX3NlbCB8 IERXX1VTWEdNSUlfRlVMTCk7CgpbU2V2ZXJpdHk6IEhpZ2hdCkRvZXMgdGhpcyByZWdtYXAgbW9k aWZpY2F0aW9uIGRyb3AgdGhlIERXX1VTWEdNSUlfRlVMTCBjb25maWd1cmF0aW9uPwoKTG9va2lu ZyBhdCBueHBfc2VyZGVzX3hwY3NfbGlua191cF91c3hnbWlpKCksIHRoZSBjb2RlIGF0dGVtcHRz IHRvIHNldCB0aGUKZHVwbGV4IGJ5IHBhc3NpbmcgRFdfVVNYR01JSV9GVUxMIHRvIG54cF9zZXJk ZXNfeHBjc19tb2RpZnkoKS4KCkhvd2V2ZXIsIERXX1VTWEdNSUlfRlVMTCBpcyBub3QgaW5jbHVk ZWQgaW4gRFdfVVNYR01JSV9TU19NQVNLLiBCZWNhdXNlCm54cF9zZXJkZXNfeHBjc19tb2RpZnko KSBtYXNrcyB0aGUgdGFyZ2V0IHZhbHVlIHdpdGggdGhlIHByb3ZpZGVkIG1hc2ssCnRoZSBmdWxs LWR1cGxleCBjb25maWd1cmF0aW9uIHdpbGwgYmUgZmlsdGVyZWQgb3V0IGFuZCBuZXZlciB3cml0 dGVuIHRvCnRoZSBoYXJkd2FyZS4KClsgLi4uIF0KPiArdm9pZCBueHBfc2VyZGVzX3hwY3NfZGVz dHJveShzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcykKPiArewo+ICsJc3RydWN0IG54cF9zZXJkZXNf eHBjcyAqeHBjcyA9IHBoeWxpbmtfcGNzX3RvX254cF9zZXJkZXNfeHBjcyhwY3MpOwo+ICsKPiAr CWlmICgheHBjcykKPiArCQlyZXR1cm47Cj4gKwo+ICsJa2ZyZWUoeHBjcyk7Cj4gK30KCltTZXZl cml0eTogTWVkaXVtXQpDYW4gdGhpcyByZWdyZXNzaW9uIGNhdXNlIGEgcGFuaWMgZHVlIHRvIGV2 YWx1YXRpbmcgY29udGFpbmVyX29mKCkgYmVmb3JlCmNoZWNraW5nIGZvciBOVUxMPwoKSW4gbnhw X3NlcmRlc194cGNzX2Rlc3Ryb3koKSwgeHBjcyBpcyBleHRyYWN0ZWQgZnJvbSBwY3MgdXNpbmcK cGh5bGlua19wY3NfdG9fbnhwX3NlcmRlc194cGNzKCkgd2hpY2ggaXMgYSBjb250YWluZXJfb2Yo KSB3cmFwcGVyLiBJZiBhCmNhbGxlciBwYXNzZXMgYSBOVUxMIHBjcyBwb2ludGVyLCBjb250YWlu ZXJfb2YoKSB3aWxsIHlpZWxkIGEgbmVnYXRpdmUKb2Zmc2V0LiBUaGlzIGJ5cGFzc2VzIHRoZSBp ZiAoIXhwY3MpIGNoZWNrLCByZXN1bHRpbmcgaW4ga2ZyZWUoKSBiZWluZwpjYWxsZWQgd2l0aCBh biBpbnZhbGlkIHBvaW50ZXIuCgotLSAKU2FzaGlrbyBBSSByZXZpZXcgwrcgaHR0cHM6Ly9zYXNo aWtvLmRldi8jL3BhdGNoc2V0LzIwMjYwOTE5LXMzMmdfc2VyZGVzLXYzLTAtOWQ2ODg2OGMxZTg5 QG9zcy5ueHAuY29tP3BhcnQ9NAoKLS0gCmxpbnV4LXBoeSBtYWlsaW5nIGxpc3QKbGludXgtcGh5 QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cHM6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4v bGlzdGluZm8vbGludXgtcGh5Cg==