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 D425CCA600D for ; Thu, 8 Oct 2026 16:33:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version: Content-Transfer-Encoding:Content-Type:References:In-Reply-To:Message-ID:Date :Cc:To:From:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=uaNaa9Tn58yyTSAMBp+pidOqkG6cVxAP3V+r3sTN9A0=; b=V5lqpmtYuQbVsqhLewLU27wziq m7AtbyjfA5uVDoonG3SsvcmGDY2LC4PJ4/hDht3557plk/rGmSc9WXMxrLWtM7OxpJFrLqqgjFvDs XWMNGUQ7/tobA2rIGsj+/HpWyngE5dJdfDcsyMv7CuhXwnh+seTA7kV2h45Tec+XEx4CycP3a8JAF 9gjEmq3B2IFLkIFh+rLdq3E37/50U6jZgB2OljvY2C+2rA26QPf8iz9Le+38GGRpR5LaP/lDpYrwj KVI1myKm3ZeLlDwVlDVVRe5AXFqIgxshqcOJAvtSUSwQiZkpNaEaJpDLsna/PwJ3uNHuXMakiCAkk vdD5Ve8A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1xEr3C-00000004hMM-2tVH; Thu, 08 Oct 2026 16:32:58 +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 1xEr39-00000004hKh-07lk; Thu, 08 Oct 2026 16:32:55 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 7B07B43C4A; Thu, 8 Oct 2026 16:32:54 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4B3241F00893; Thu, 8 Oct 2026 16:32:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1791477174; bh=uaNaa9Tn58yyTSAMBp+pidOqkG6cVxAP3V+r3sTN9A0=; h=Subject:From:To:Cc:Date:In-Reply-To:References; b=QiQKgjxRRf9tJvBoefNoxF5aewDt6d/O2/i/GA1w4yFcMQfSYI16bB0123CNEB257 Ac/xfEMnbG1/OouPWijBVSRMyBHljsnLxf0vZyRGEIBiQXr+CB9WuAcD5/cYIt3quz PrJhnTKJiOVIJfBP5MItzIcWlafYCLB93hQ+0omLNVJt6648g7+g8oljTvhmIljAvD PpGnXHnR9OklzP+F76H5pZFKVmCVQLp+X49gSZMuK3T1fv8fgoWTwuJh/L7GamgEby b8OkneTI6PDBPNV607dsdx7H157TR7s3893UdXOJRdCSe8ALOwfVAVIiXhN6QWo13X nJOmSZYe5Dmcw== Subject: Re: [PATCH net-next v10 2/6] net: pcs: xpcs: add ANRESTART support for SGMII link recovery From: netdev-bot+sashiko@kernel.org To: coiaprant@gmail.com Cc: kuba@kernel.org, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@kernel.org, pabeni@redhat.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, heiko@sntech.de, maxime.chevallier@bootlin.com, hkallweit1@gmail.com, linux@armlinux.org.uk, david.wu@rock-chips.com, netdev@vger.kernel.org, linux-rockchip@lists.infradead.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Date: Thu, 08 Oct 2026 16:32:52 +0000 Message-ID: <179147717283.434549.13991419652494046497@kernel.org> In-Reply-To: <20261005223011.1124347-3-coiaprant@gmail.com> References: <20261005223011.1124347-3-coiaprant@gmail.com> X-sashiko-severity: Low Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit MIME-Version: 1.0 X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Thank you for your contribution! Sashiko AI review found more severe issue(s) in other patches of this series. This mail is only an FYI, in case you want to address the nit picks below when you respin. Low priority / nit picks for your consideration: - [Low] Concern: the patch goes against the phylink_pcs_ops contract. - [Low] Race between concurrent pcs_get_state() callers. -- net: pcs: xpcs: add ANRESTART support for SGMII link recovery This patch sets BMCR_ANRESTART together with BMCR_ANENABLE in xpcs_config_aneg_c37_sgmii(), and clears DW_VR_MII_AN_INTR_STS there as well. It also restarts AN from xpcs_get_state_c37_sgmii() when the link is down and AN completion is latched. The goal is to recover the link on RK3568 XPCS hardware, which does not restart SGMII AN by itself after a disconnect. > diff --git a/drivers/net/pcs/pcs-xpcs.c b/drivers/net/pcs/pcs-xpcs.c > index b415b93d77c15..6466e0ff2a98b 100644 > --- a/drivers/net/pcs/pcs-xpcs.c > +++ b/drivers/net/pcs/pcs-xpcs.c [ ... ] > @@ -816,9 +825,14 @@ static int xpcs_config_aneg_c37_sgmii(struct dw_xpcs *xpcs, > if (ret < 0) > return ret; > > + /* Clear CL37 AN complete status */ > + ret = xpcs_write(xpcs, MDIO_MMD_VEND2, DW_VR_MII_AN_INTR_STS, 0); > + if (ret < 0) > + return ret; > + > if (neg_mode == PHYLINK_PCS_NEG_INBAND_ENABLED) > ret = xpcs_write(xpcs, MDIO_MMD_VEND2, MII_BMCR, > - mdio_ctrl | BMCR_ANENABLE); > + mdio_ctrl | BMCR_ANENABLE | BMCR_ANRESTART); [Severity: Low] This is a small question about the phylink_pcs_ops contract, not a functional regression. The pcs_config() kernel-doc in include/linux/phylink.h says: * pcs_config() will be called when configuration of the PCS is required * or when the advertisement is possibly updated. It must not unnecessarily * disrupt an established link. As far as I can tell, the existing code earlier in xpcs_config_aneg_c37_sgmii() already clears BMCR_ANENABLE and sets it again on every in-band call, and that alone restarts CL37 AN: if (mdio_ctrl & BMCR_ANENABLE) { ret = xpcs_write(xpcs, MDIO_MMD_VEND2, MII_BMCR, mdio_ctrl & ~BMCR_ANENABLE); Returning a positive value from pcs_config() to request a restart is also not an option for SGMII. phylink_pcs_an_restart() only calls pcs_an_restart() when phy_interface_mode_is_8023z() is true. So the added BMCR_ANRESTART should not disrupt an established link any more than before. Is the extra bit expected to have an effect beyond the existing ANENABLE toggle on RK3568? If so, would it help to say so in the comment above? > > return ret; > } > @@ -1093,9 +1107,18 @@ static int xpcs_get_state_c37_sgmii(struct dw_xpcs *xpcs, > return 0; > } > > - /* Clear AN complete status or interrupt */ > - if (state->an_complete) > - xpcs_write(xpcs, MDIO_MMD_VEND2, DW_VR_MII_AN_INTR_STS, 0); > + if (state->an_complete) { > + /* Clear AN complete status or interrupt */ > + ret = xpcs_write(xpcs, MDIO_MMD_VEND2, DW_VR_MII_AN_INTR_STS, 0); > + if (ret < 0) > + return ret; > + > + /* Initiate the next round of AN */ > + ret = xpcs_modify(xpcs, MDIO_MMD_VEND2, MII_BMCR, BMCR_ANRESTART, > + BMCR_ANRESTART); > + if (ret < 0) > + return ret; > + } [Severity: Low] Can two pcs_get_state() callers running at the same time race on this sequence? xpcs_get_state_c37_sgmii() reads DW_VR_MII_AN_INTR_STS to compute an_complete. It then clears the register and sets BMCR_ANRESTART, each in its own MDIO transaction. The MDIO bus lock only covers one access at a time. Nothing serialises the callers against each other: phylink_resolve() -> phylink_mac_pcs_get_state() holds pl->state_mutex but not RTNL phylink_ethtool_ksettings_get() -> phylink_mac_pcs_get_state() holds only RTNL (MLO_AN_INBAND with no pl->phydev) phylink_mii_ioctl() -> phylink_mii_read() -> phylink_mac_pcs_get_state() holds only RTNL One possible interleaving: ethtool path phylink_resolve() xpcs_get_state_c37_sgmii() read AN_INTR_STS: ANCMPLT, no link xpcs_get_state_c37_sgmii() read AN_INTR_STS: ANCMPLT write AN_INTR_STS = 0 set BMCR_ANRESTART new AN completes, link up write AN_INTR_STS = 0 set BMCR_ANRESTART Here, would the late write from the ethtool path discard the newly latched ANCMPLT? Would its ANRESTART then abort the negotiation that just succeeded? The same interleaving looks possible against xpcs_config_aneg_c37_sgmii(). That function now also clears DW_VR_MII_AN_INTR_STS and sets BMCR_ANENABLE | BMCR_ANRESTART while holding only state_mutex. The commit message says: The latch is cleared before issuing the restart, not after: clearing it afterwards would discard a freshly latched ANCMPLT from the new negotiation. Doesn't that reasoning assume a single caller? Before this patch, the clear in get_state was not followed by a restart, so this race had no visible effect. With the restart, the result would be a spurious AN restart. That can delay link-up, or briefly flap a link that was just reported up, until the next negotiation completes. > > return 0; > } -- Sashiko AI review ยท https://netdev-ai.bots.linux.dev/sashiko/#/patchset/20261005223011.1124347-1-coiaprant%40gmail.com 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 6699BCA6011 for ; Thu, 8 Oct 2026 16:33:02 +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:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Cc:To:From:Subject:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=OB97PHdeDmbvOrwGzqDp9gGtsf3yfpo8Mz8S3b9qknU=; b=25f0Kha2XhXS47 jH4VvvqPM5zgPj5VVYkOlGGT/PkMjdDYdAMjdSOiG85zv/lrt5z8gXhqaTGjdNZ+fhxynHYH2EMSL jGquvgX9juy6ZyVYE1GLUvH44H/34MeRe63ON0fixXJmdbShW8bAFi87Rt6JZslkWJZvuJGZL8cvy ztXvSTRv9rZzIvtAROT9ote5DOIUXRfIkFR189whDNJ05kcG55A12seING6uLVjPhuxPUHc4fVV8a SnGTngX+bzJb99OgNOPElU500hn444nWs7MRw6kUVvd7QcCFZxqyKlCuzPDk5h6ljxy+cAcpZAIpV XkJ08Dw7iq9POHYCCiaQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1xEr3C-00000004hMT-3Q13; Thu, 08 Oct 2026 16:32:58 +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 1xEr39-00000004hKh-07lk; Thu, 08 Oct 2026 16:32:55 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 7B07B43C4A; Thu, 8 Oct 2026 16:32:54 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4B3241F00893; Thu, 8 Oct 2026 16:32:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1791477174; bh=uaNaa9Tn58yyTSAMBp+pidOqkG6cVxAP3V+r3sTN9A0=; h=Subject:From:To:Cc:Date:In-Reply-To:References; b=QiQKgjxRRf9tJvBoefNoxF5aewDt6d/O2/i/GA1w4yFcMQfSYI16bB0123CNEB257 Ac/xfEMnbG1/OouPWijBVSRMyBHljsnLxf0vZyRGEIBiQXr+CB9WuAcD5/cYIt3quz PrJhnTKJiOVIJfBP5MItzIcWlafYCLB93hQ+0omLNVJt6648g7+g8oljTvhmIljAvD PpGnXHnR9OklzP+F76H5pZFKVmCVQLp+X49gSZMuK3T1fv8fgoWTwuJh/L7GamgEby b8OkneTI6PDBPNV607dsdx7H157TR7s3893UdXOJRdCSe8ALOwfVAVIiXhN6QWo13X nJOmSZYe5Dmcw== Subject: Re: [PATCH net-next v10 2/6] net: pcs: xpcs: add ANRESTART support for SGMII link recovery From: netdev-bot+sashiko@kernel.org To: coiaprant@gmail.com Cc: kuba@kernel.org, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@kernel.org, pabeni@redhat.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, heiko@sntech.de, maxime.chevallier@bootlin.com, hkallweit1@gmail.com, linux@armlinux.org.uk, david.wu@rock-chips.com, netdev@vger.kernel.org, linux-rockchip@lists.infradead.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Date: Thu, 08 Oct 2026 16:32:52 +0000 Message-ID: <179147717283.434549.13991419652494046497@kernel.org> In-Reply-To: <20261005223011.1124347-3-coiaprant@gmail.com> References: <20261005223011.1124347-3-coiaprant@gmail.com> X-sashiko-severity: Low MIME-Version: 1.0 X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org VGhhbmsgeW91IGZvciB5b3VyIGNvbnRyaWJ1dGlvbiEgU2FzaGlrbyBBSSByZXZpZXcgZm91bmQg bW9yZSBzZXZlcmUKaXNzdWUocykgaW4gb3RoZXIgcGF0Y2hlcyBvZiB0aGlzIHNlcmllcy4gVGhp cyBtYWlsIGlzIG9ubHkgYW4gRllJLCBpbiBjYXNlCnlvdSB3YW50IHRvIGFkZHJlc3MgdGhlIG5p dCBwaWNrcyBiZWxvdyB3aGVuIHlvdSByZXNwaW4uCgpMb3cgcHJpb3JpdHkgLyBuaXQgcGlja3Mg Zm9yIHlvdXIgY29uc2lkZXJhdGlvbjoKCi0gW0xvd10gQ29uY2VybjogdGhlIHBhdGNoIGdvZXMg YWdhaW5zdCB0aGUgcGh5bGlua19wY3Nfb3BzIGNvbnRyYWN0LgotIFtMb3ddIFJhY2UgYmV0d2Vl biBjb25jdXJyZW50IHBjc19nZXRfc3RhdGUoKSBjYWxsZXJzLgoKLS0KCm5ldDogcGNzOiB4cGNz OiBhZGQgQU5SRVNUQVJUIHN1cHBvcnQgZm9yIFNHTUlJIGxpbmsgcmVjb3ZlcnkKClRoaXMgcGF0 Y2ggc2V0cyBCTUNSX0FOUkVTVEFSVCB0b2dldGhlciB3aXRoIEJNQ1JfQU5FTkFCTEUgaW4KeHBj c19jb25maWdfYW5lZ19jMzdfc2dtaWkoKSwgYW5kIGNsZWFycyBEV19WUl9NSUlfQU5fSU5UUl9T VFMgdGhlcmUgYXMKd2VsbC4gSXQgYWxzbyByZXN0YXJ0cyBBTiBmcm9tIHhwY3NfZ2V0X3N0YXRl X2MzN19zZ21paSgpIHdoZW4gdGhlIGxpbmsgaXMKZG93biBhbmQgQU4gY29tcGxldGlvbiBpcyBs YXRjaGVkLiBUaGUgZ29hbCBpcyB0byByZWNvdmVyIHRoZSBsaW5rIG9uClJLMzU2OCBYUENTIGhh cmR3YXJlLCB3aGljaCBkb2VzIG5vdCByZXN0YXJ0IFNHTUlJIEFOIGJ5IGl0c2VsZiBhZnRlciBh CmRpc2Nvbm5lY3QuCgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYyBi L2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jCj4gaW5kZXggYjQxNWI5M2Q3N2MxNS4uNjQ2NmUw ZmYyYTk4YiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYwo+ICsrKyBi L2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jCgpbIC4uLiBdCgo+IEBAIC04MTYsOSArODI1LDE0 IEBAIHN0YXRpYyBpbnQgeHBjc19jb25maWdfYW5lZ19jMzdfc2dtaWkoc3RydWN0IGR3X3hwY3Mg KnhwY3MsCj4gIAlpZiAocmV0IDwgMCkKPiAgCQlyZXR1cm4gcmV0Owo+Cj4gKwkvKiBDbGVhciBD TDM3IEFOIGNvbXBsZXRlIHN0YXR1cyAqLwo+ICsJcmV0ID0geHBjc193cml0ZSh4cGNzLCBNRElP X01NRF9WRU5EMiwgRFdfVlJfTUlJX0FOX0lOVFJfU1RTLCAwKTsKPiArCWlmIChyZXQgPCAwKQo+ ICsJCXJldHVybiByZXQ7Cj4gKwo+ICAJaWYgKG5lZ19tb2RlID09IFBIWUxJTktfUENTX05FR19J TkJBTkRfRU5BQkxFRCkKPiAgCQlyZXQgPSB4cGNzX3dyaXRlKHhwY3MsIE1ESU9fTU1EX1ZFTkQy LCBNSUlfQk1DUiwKPiAtCQkJCSBtZGlvX2N0cmwgfCBCTUNSX0FORU5BQkxFKTsKPiArCQkJCSBt ZGlvX2N0cmwgfCBCTUNSX0FORU5BQkxFIHwgQk1DUl9BTlJFU1RBUlQpOwoKW1NldmVyaXR5OiBM b3ddClRoaXMgaXMgYSBzbWFsbCBxdWVzdGlvbiBhYm91dCB0aGUgcGh5bGlua19wY3Nfb3BzIGNv bnRyYWN0LCBub3QgYQpmdW5jdGlvbmFsIHJlZ3Jlc3Npb24uIFRoZSBwY3NfY29uZmlnKCkga2Vy bmVsLWRvYyBpbgppbmNsdWRlL2xpbnV4L3BoeWxpbmsuaCBzYXlzOgoKICogcGNzX2NvbmZpZygp IHdpbGwgYmUgY2FsbGVkIHdoZW4gY29uZmlndXJhdGlvbiBvZiB0aGUgUENTIGlzIHJlcXVpcmVk CiAqIG9yIHdoZW4gdGhlIGFkdmVydGlzZW1lbnQgaXMgcG9zc2libHkgdXBkYXRlZC4gSXQgbXVz dCBub3QgdW5uZWNlc3NhcmlseQogKiBkaXNydXB0IGFuIGVzdGFibGlzaGVkIGxpbmsuCgpBcyBm YXIgYXMgSSBjYW4gdGVsbCwgdGhlIGV4aXN0aW5nIGNvZGUgZWFybGllciBpbgp4cGNzX2NvbmZp Z19hbmVnX2MzN19zZ21paSgpIGFscmVhZHkgY2xlYXJzIEJNQ1JfQU5FTkFCTEUgYW5kIHNldHMg aXQgYWdhaW4Kb24gZXZlcnkgaW4tYmFuZCBjYWxsLCBhbmQgdGhhdCBhbG9uZSByZXN0YXJ0cyBD TDM3IEFOOgoKCWlmIChtZGlvX2N0cmwgJiBCTUNSX0FORU5BQkxFKSB7CgkJcmV0ID0geHBjc193 cml0ZSh4cGNzLCBNRElPX01NRF9WRU5EMiwgTUlJX0JNQ1IsCgkJCQkgbWRpb19jdHJsICYgfkJN Q1JfQU5FTkFCTEUpOwoKUmV0dXJuaW5nIGEgcG9zaXRpdmUgdmFsdWUgZnJvbSBwY3NfY29uZmln KCkgdG8gcmVxdWVzdCBhIHJlc3RhcnQgaXMgYWxzbwpub3QgYW4gb3B0aW9uIGZvciBTR01JSS4g cGh5bGlua19wY3NfYW5fcmVzdGFydCgpIG9ubHkgY2FsbHMKcGNzX2FuX3Jlc3RhcnQoKSB3aGVu IHBoeV9pbnRlcmZhY2VfbW9kZV9pc184MDIzeigpIGlzIHRydWUuCgpTbyB0aGUgYWRkZWQgQk1D Ul9BTlJFU1RBUlQgc2hvdWxkIG5vdCBkaXNydXB0IGFuIGVzdGFibGlzaGVkIGxpbmsgYW55IG1v cmUKdGhhbiBiZWZvcmUuIElzIHRoZSBleHRyYSBiaXQgZXhwZWN0ZWQgdG8gaGF2ZSBhbiBlZmZl Y3QgYmV5b25kIHRoZQpleGlzdGluZyBBTkVOQUJMRSB0b2dnbGUgb24gUkszNTY4PyBJZiBzbywg d291bGQgaXQgaGVscCB0byBzYXkgc28gaW4gdGhlCmNvbW1lbnQgYWJvdmU/Cgo+Cj4gIAlyZXR1 cm4gcmV0Owo+ICB9Cj4gQEAgLTEwOTMsOSArMTEwNywxOCBAQCBzdGF0aWMgaW50IHhwY3NfZ2V0 X3N0YXRlX2MzN19zZ21paShzdHJ1Y3QgZHdfeHBjcyAqeHBjcywKPiAgCQlyZXR1cm4gMDsKPiAg CX0KPgo+IC0JLyogQ2xlYXIgQU4gY29tcGxldGUgc3RhdHVzIG9yIGludGVycnVwdCAqLwo+IC0J aWYgKHN0YXRlLT5hbl9jb21wbGV0ZSkKPiAtCQl4cGNzX3dyaXRlKHhwY3MsIE1ESU9fTU1EX1ZF TkQyLCBEV19WUl9NSUlfQU5fSU5UUl9TVFMsIDApOwo+ICsJaWYgKHN0YXRlLT5hbl9jb21wbGV0 ZSkgewo+ICsJCS8qIENsZWFyIEFOIGNvbXBsZXRlIHN0YXR1cyBvciBpbnRlcnJ1cHQgKi8KPiAr CQlyZXQgPSB4cGNzX3dyaXRlKHhwY3MsIE1ESU9fTU1EX1ZFTkQyLCBEV19WUl9NSUlfQU5fSU5U Ul9TVFMsIDApOwo+ICsJCWlmIChyZXQgPCAwKQo+ICsJCQlyZXR1cm4gcmV0Owo+ICsKPiArCQkv KiBJbml0aWF0ZSB0aGUgbmV4dCByb3VuZCBvZiBBTiAqLwo+ICsJCXJldCA9IHhwY3NfbW9kaWZ5 KHhwY3MsIE1ESU9fTU1EX1ZFTkQyLCBNSUlfQk1DUiwgQk1DUl9BTlJFU1RBUlQsCj4gKwkJCQkg IEJNQ1JfQU5SRVNUQVJUKTsKPiArCQlpZiAocmV0IDwgMCkKPiArCQkJcmV0dXJuIHJldDsKPiAr CX0KCltTZXZlcml0eTogTG93XQpDYW4gdHdvIHBjc19nZXRfc3RhdGUoKSBjYWxsZXJzIHJ1bm5p bmcgYXQgdGhlIHNhbWUgdGltZSByYWNlIG9uIHRoaXMKc2VxdWVuY2U/Cgp4cGNzX2dldF9zdGF0 ZV9jMzdfc2dtaWkoKSByZWFkcyBEV19WUl9NSUlfQU5fSU5UUl9TVFMgdG8gY29tcHV0ZQphbl9j b21wbGV0ZS4gSXQgdGhlbiBjbGVhcnMgdGhlIHJlZ2lzdGVyIGFuZCBzZXRzIEJNQ1JfQU5SRVNU QVJULCBlYWNoIGluCml0cyBvd24gTURJTyB0cmFuc2FjdGlvbi4gVGhlIE1ESU8gYnVzIGxvY2sg b25seSBjb3ZlcnMgb25lIGFjY2VzcyBhdCBhCnRpbWUuCgpOb3RoaW5nIHNlcmlhbGlzZXMgdGhl IGNhbGxlcnMgYWdhaW5zdCBlYWNoIG90aGVyOgoKICBwaHlsaW5rX3Jlc29sdmUoKSAtPiBwaHls aW5rX21hY19wY3NfZ2V0X3N0YXRlKCkKICAgIGhvbGRzIHBsLT5zdGF0ZV9tdXRleCBidXQgbm90 IFJUTkwKCiAgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19nZXQoKSAtPiBwaHlsaW5rX21hY19w Y3NfZ2V0X3N0YXRlKCkKICAgIGhvbGRzIG9ubHkgUlROTCAoTUxPX0FOX0lOQkFORCB3aXRoIG5v IHBsLT5waHlkZXYpCgogIHBoeWxpbmtfbWlpX2lvY3RsKCkgLT4gcGh5bGlua19taWlfcmVhZCgp IC0+IHBoeWxpbmtfbWFjX3Bjc19nZXRfc3RhdGUoKQogICAgaG9sZHMgb25seSBSVE5MCgpPbmUg cG9zc2libGUgaW50ZXJsZWF2aW5nOgoKZXRodG9vbCBwYXRoICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBoeWxpbmtfcmVzb2x2ZSgpCnhwY3NfZ2V0X3N0YXRlX2MzN19zZ21paSgpCiAgcmVh ZCBBTl9JTlRSX1NUUzogQU5DTVBMVCwgbm8gbGluawogIDxkZWxheWVkPgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgeHBjc19nZXRfc3RhdGVfYzM3X3NnbWlpKCkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZCBBTl9JTlRSX1NUUzog QU5DTVBMVAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSBB Tl9JTlRSX1NUUyA9IDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2V0IEJNQ1JfQU5SRVNUQVJUCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuZXcgQU4gY29tcGxldGVzLCBsaW5rIHVwCiAgd3JpdGUgQU5fSU5UUl9TVFMgPSAwCiAgc2V0 IEJNQ1JfQU5SRVNUQVJUCgpIZXJlLCB3b3VsZCB0aGUgbGF0ZSB3cml0ZSBmcm9tIHRoZSBldGh0 b29sIHBhdGggZGlzY2FyZCB0aGUgbmV3bHkgbGF0Y2hlZApBTkNNUExUPyBXb3VsZCBpdHMgQU5S RVNUQVJUIHRoZW4gYWJvcnQgdGhlIG5lZ290aWF0aW9uIHRoYXQganVzdApzdWNjZWVkZWQ/CgpU aGUgc2FtZSBpbnRlcmxlYXZpbmcgbG9va3MgcG9zc2libGUgYWdhaW5zdCB4cGNzX2NvbmZpZ19h bmVnX2MzN19zZ21paSgpLgpUaGF0IGZ1bmN0aW9uIG5vdyBhbHNvIGNsZWFycyBEV19WUl9NSUlf QU5fSU5UUl9TVFMgYW5kIHNldHMKQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUIHdoaWxl IGhvbGRpbmcgb25seSBzdGF0ZV9tdXRleC4KClRoZSBjb21taXQgbWVzc2FnZSBzYXlzOgoKICAg IFRoZSBsYXRjaCBpcyBjbGVhcmVkIGJlZm9yZSBpc3N1aW5nIHRoZSByZXN0YXJ0LCBub3QgYWZ0 ZXI6IGNsZWFyaW5nIGl0CiAgICBhZnRlcndhcmRzIHdvdWxkIGRpc2NhcmQgYSBmcmVzaGx5IGxh dGNoZWQgQU5DTVBMVCBmcm9tIHRoZSBuZXcKICAgIG5lZ290aWF0aW9uLgoKRG9lc24ndCB0aGF0 IHJlYXNvbmluZyBhc3N1bWUgYSBzaW5nbGUgY2FsbGVyPyBCZWZvcmUgdGhpcyBwYXRjaCwgdGhl IGNsZWFyCmluIGdldF9zdGF0ZSB3YXMgbm90IGZvbGxvd2VkIGJ5IGEgcmVzdGFydCwgc28gdGhp cyByYWNlIGhhZCBubyB2aXNpYmxlCmVmZmVjdC4KCldpdGggdGhlIHJlc3RhcnQsIHRoZSByZXN1 bHQgd291bGQgYmUgYSBzcHVyaW91cyBBTiByZXN0YXJ0LiBUaGF0IGNhbiBkZWxheQpsaW5rLXVw LCBvciBicmllZmx5IGZsYXAgYSBsaW5rIHRoYXQgd2FzIGp1c3QgcmVwb3J0ZWQgdXAsIHVudGls IHRoZSBuZXh0Cm5lZ290aWF0aW9uIGNvbXBsZXRlcy4KCj4KPiAgCXJldHVybiAwOwo+ICB9Cgot LSAKU2FzaGlrbyBBSSByZXZpZXcgwrcgaHR0cHM6Ly9uZXRkZXYtYWkuYm90cy5saW51eC5kZXYv c2FzaGlrby8jL3BhdGNoc2V0LzIwMjYxMDA1MjIzMDExLjExMjQzNDctMS1jb2lhcHJhbnQlNDBn bWFpbC5jb20KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CkxpbnV4LXJvY2tjaGlwIG1haWxpbmcgbGlzdApMaW51eC1yb2NrY2hpcEBsaXN0cy5pbmZyYWRl YWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgt cm9ja2NoaXAK