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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 23245C001B0 for ; Mon, 14 Aug 2023 22:07:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233180AbjHNWHP (ORCPT ); Mon, 14 Aug 2023 18:07:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42252 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233200AbjHNWHC (ORCPT ); Mon, 14 Aug 2023 18:07:02 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6B410D1; Mon, 14 Aug 2023 15:07:01 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 055C36365C; Mon, 14 Aug 2023 22:07:01 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3B356C433C8; Mon, 14 Aug 2023 22:07:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1692050820; bh=48/dlFQB8VC8OlFHrcOt82tycaKer65es1u2ufvLD58=; h=Date:From:To:Cc:Subject:In-Reply-To:From; b=UWXDOGb+6lxSCIFUkhYUzHoFKnMvkonIzu77lc35b/bkXmfr9EvhQk9Oh42iH2jgJ PiU3eNOV7okYxO/Rq6denjg4BE0Nz/HZIoS1pKXdss3usGxi/O47grdSOtoEE0+uXx HgXIPSUKZNQRrJlWQXNUJufNA5oWJ5H8GRT0Xes7EXP6f5/LSmh1iDNvfqxwXcZGwy 45X/mzQ0t6zZh5voiG9Nx0OMenYSgrnzNhGaPef8q+Tsdhvc44ZOftcs2efA+m4PIi qoinwz2o4NMCUGE0dByVp7G+R1FyPLZWEsIG/ceA5vB4JzhlS67qkRkLkvcusSJ+cr /88ZA4FibG6FA== Date: Mon, 14 Aug 2023 17:06:58 -0500 From: Bjorn Helgaas To: Jim Quinlan Cc: Bjorn Helgaas , "open list:PCI NATIVE HOST BRIDGE AND ENDPOINT DRIVERS" , Nicolas Saenz Julienne , Lorenzo Pieralisi , Cyril Brulebois , Phil Elwell , "maintainer:BROADCOM BCM7XXX ARM ARCHITECTURE" , Florian Fainelli , Jim Quinlan , Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= , Lorenzo Pieralisi , Rob Herring , "moderated list:BROADCOM BCM2711/BCM2835 ARM ARCHITECTURE" , "moderated list:BROADCOM BCM2711/BCM2835 ARM ARCHITECTURE" , open list Subject: Re: [PATCH v6 3/5] PCI: brcmstb: Set higher value for internal bus timeout Message-ID: <20230814220658.GA193031@bhelgaas> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org On Mon, Aug 14, 2023 at 03:30:07PM -0400, Jim Quinlan wrote: > On Fri, Jul 28, 2023 at 12:15 PM Jim Quinlan wrote: > > On Thu, Jul 27, 2023, 10:44 PM Lorenzo Pieralisi wrote: > >> On Fri, Jun 23, 2023 at 10:40:56AM -0400, Jim Quinlan wrote: > >> > During long periods of the PCIe RC HW being in an L1SS sleep state, there > >> > may be a timeout on an internal bus access, even though there may not be > >> > any PCIe access involved. Such a timeout will cause a subsequent CPU > >> > abort. > >> > > >> > So, when "brcm,enable-l1ss" is observed, we increase the timeout value to > >> > four seconds instead of using its HW default. > >> > > >> > Signed-off-by: Jim Quinlan > >> > Tested-by: Florian Fainelli > >> > --- > >> > drivers/pci/controller/pcie-brcmstb.c | 16 ++++++++++++++++ > >> > 1 file changed, 16 insertions(+) > >> > > >> > diff --git a/drivers/pci/controller/pcie-brcmstb.c b/drivers/pci/controller/pcie-brcmstb.c > >> > index d30636a725d7..fe0415a98c63 100644 > >> > --- a/drivers/pci/controller/pcie-brcmstb.c > >> > +++ b/drivers/pci/controller/pcie-brcmstb.c > >> > @@ -1034,6 +1034,21 @@ static int brcm_pcie_setup(struct brcm_pcie *pcie) > >> > return 0; > >> > } > >> > > >> > +/* > >> > + * This extends the timeout period for an access to an internal bus. This > >> > + * access timeout may occur during L1SS sleep periods even without the > >> > + * presence of a PCIe access. > >> > + */ > >> > +static void brcm_extend_rbus_timeout(struct brcm_pcie *pcie) > >> > +{ > >> > + /* TIMEOUT register is two registers before RGR1_SW_INIT_1 */ > >> > + const unsigned int REG_OFFSET = PCIE_RGR1_SW_INIT_1(pcie) - 8; > >> > >> Nit: you could define an offset for the TIMEOUT register, if that makes > >> it any cleaner, up to you. > >> > >> > + u32 timeout_us = 4000000; /* 4 seconds, our setting for L1SS */ > >> > >> It would be useful to describe why this has to be 4 seconds in case > >> someone in the future will have to change it. > > > > IIRC our customer requested 2s and we doubled it. Bjorn, can you > > please add this comment or a paraphrase of it before applying -- > > I'm currently on vacation. > > Is the above request okay with you? What is the status of these > commits -- will they be applied to pci-next in the near future? The "brcm,enable-l1ss" DT property is either unnecessary or an indication of a hardware defect in the controller. Requiring the property is a terrible user experience, completely antithetical to the PCI compatibility story, and per the conversation at [1], there are no known problems that would occur if we ignored "brcm,enable-l1ss" and always configured mode (c) ("Bidirectional CLKREQ# for L1SS capable devices"). Even when configured as mode (c), L1SS is not *always* enabled. It's certainly not enabled before ASPM init, and users can always disable L1SS whenever they desire via the sysfs interfaces or pcie_aspm=off, so if there's some problem with running in mode (c) with L1SS disabled, we're still likely to see it. But if you want to require the DT property, I guess it's mainly an issue for you and your customers. So to answer your question, yes, I'm OK with this series. Bjorn [1] https://lore.kernel.org/r/20230428223500.23337-2-jim2101024@gmail.com > >> > + /* Each unit in timeout register is 1/216,000,000 seconds */ > >> > + writel(216 * timeout_us, pcie->base + REG_OFFSET); > >> > +} > >> > + > >> > static void brcm_config_clkreq(struct brcm_pcie *pcie) > >> > { > >> > bool l1ss = of_property_read_bool(pcie->np, "brcm,enable-l1ss"); > >> > @@ -1059,6 +1074,7 @@ static void brcm_config_clkreq(struct brcm_pcie *pcie) > >> > * of 400ns, as specified in 3.2.5.2.2 of the PCI Express > >> > * Mini CEM 2.0 specification. > >> > */ > >> > + brcm_extend_rbus_timeout(pcie); > >> > clkreq_set |= PCIE_MISC_HARD_PCIE_HARD_DEBUG_L1SS_ENABLE_MASK; > >> > dev_info(pcie->dev, "bi-dir CLKREQ# for L1SS power savings"); > >> > } else { 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 00F83C001B0 for ; Mon, 14 Aug 2023 22:07:28 +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:In-Reply-To:MIME-Version:Message-ID: Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:References: List-Owner; bh=GTRO3TL4pU1vMRbwfM/wu2cOoXMVaH58QTDk1YTeCFQ=; b=xiOV9DH5dIsiY8 rL4FArP7Yw4wNaPoPs6+3wUtNKFSUZKJDVMKhrCWSv+NaUEy6UE6AOpSIx7R7VENRWMCj2NpY/UtO uV6Mo3jDp01WqAbxKVZ67KRpp4AeUxt0LE38xQg/aZrt7j4ICaJl6vxKvpqa2wVwa1MvhHI4B4ODE M9HhSr82+7D8g9lHr5+rmEp3z4GNyL5loNeO9DMS9tX2YyVeRDV7CEAoKgx6lWLPRchgYJAACdBwR AZKzBjFZn0fIFKZXpKXxaUVyiA0HuSZaKcM0X8QaHg1m0I7F8uVsy8M6JEYjwvibEMxKejSmbRFgg SFnr15BT4HiJA5Cxst8A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qVfiL-000R7v-11; Mon, 14 Aug 2023 22:07:05 +0000 Received: from dfw.source.kernel.org ([2604:1380:4641:c500::1]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qVfiI-000R7R-0v; Mon, 14 Aug 2023 22:07:03 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 08A8E63828; Mon, 14 Aug 2023 22:07:01 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3B356C433C8; Mon, 14 Aug 2023 22:07:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1692050820; bh=48/dlFQB8VC8OlFHrcOt82tycaKer65es1u2ufvLD58=; h=Date:From:To:Cc:Subject:In-Reply-To:From; b=UWXDOGb+6lxSCIFUkhYUzHoFKnMvkonIzu77lc35b/bkXmfr9EvhQk9Oh42iH2jgJ PiU3eNOV7okYxO/Rq6denjg4BE0Nz/HZIoS1pKXdss3usGxi/O47grdSOtoEE0+uXx HgXIPSUKZNQRrJlWQXNUJufNA5oWJ5H8GRT0Xes7EXP6f5/LSmh1iDNvfqxwXcZGwy 45X/mzQ0t6zZh5voiG9Nx0OMenYSgrnzNhGaPef8q+Tsdhvc44ZOftcs2efA+m4PIi qoinwz2o4NMCUGE0dByVp7G+R1FyPLZWEsIG/ceA5vB4JzhlS67qkRkLkvcusSJ+cr /88ZA4FibG6FA== Date: Mon, 14 Aug 2023 17:06:58 -0500 From: Bjorn Helgaas To: Jim Quinlan Cc: Bjorn Helgaas , "open list:PCI NATIVE HOST BRIDGE AND ENDPOINT DRIVERS" , Nicolas Saenz Julienne , Lorenzo Pieralisi , Cyril Brulebois , Phil Elwell , "maintainer:BROADCOM BCM7XXX ARM ARCHITECTURE" , Florian Fainelli , Jim Quinlan , Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= , Lorenzo Pieralisi , Rob Herring , "moderated list:BROADCOM BCM2711/BCM2835 ARM ARCHITECTURE" , "moderated list:BROADCOM BCM2711/BCM2835 ARM ARCHITECTURE" , open list Subject: Re: [PATCH v6 3/5] PCI: brcmstb: Set higher value for internal bus timeout Message-ID: <20230814220658.GA193031@bhelgaas> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230814_150702_429279_9DE61626 X-CRM114-Status: GOOD ( 36.08 ) 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: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gTW9uLCBBdWcgMTQsIDIwMjMgYXQgMDM6MzA6MDdQTSAtMDQwMCwgSmltIFF1aW5sYW4gd3Jv dGU6Cj4gT24gRnJpLCBKdWwgMjgsIDIwMjMgYXQgMTI6MTXigK9QTSBKaW0gUXVpbmxhbiA8amFt ZXMucXVpbmxhbkBicm9hZGNvbS5jb20+IHdyb3RlOgo+ID4gT24gVGh1LCBKdWwgMjcsIDIwMjMs IDEwOjQ0IFBNIExvcmVuem8gUGllcmFsaXNpIDxscGllcmFsaXNpQGtlcm5lbC5vcmc+IHdyb3Rl Ogo+ID4+IE9uIEZyaSwgSnVuIDIzLCAyMDIzIGF0IDEwOjQwOjU2QU0gLTA0MDAsIEppbSBRdWlu bGFuIHdyb3RlOgo+ID4+ID4gRHVyaW5nIGxvbmcgcGVyaW9kcyBvZiB0aGUgUENJZSBSQyBIVyBi ZWluZyBpbiBhbiBMMVNTIHNsZWVwIHN0YXRlLCB0aGVyZQo+ID4+ID4gbWF5IGJlIGEgdGltZW91 dCBvbiBhbiBpbnRlcm5hbCBidXMgYWNjZXNzLCBldmVuIHRob3VnaCB0aGVyZSBtYXkgbm90IGJl Cj4gPj4gPiBhbnkgUENJZSBhY2Nlc3MgaW52b2x2ZWQuICBTdWNoIGEgdGltZW91dCB3aWxsIGNh dXNlIGEgc3Vic2VxdWVudCBDUFUKPiA+PiA+IGFib3J0Lgo+ID4+ID4KPiA+PiA+IFNvLCB3aGVu ICJicmNtLGVuYWJsZS1sMXNzIiBpcyBvYnNlcnZlZCwgd2UgaW5jcmVhc2UgdGhlIHRpbWVvdXQg dmFsdWUgdG8KPiA+PiA+IGZvdXIgc2Vjb25kcyBpbnN0ZWFkIG9mIHVzaW5nIGl0cyBIVyBkZWZh dWx0Lgo+ID4+ID4KPiA+PiA+IFNpZ25lZC1vZmYtYnk6IEppbSBRdWlubGFuIDxqYW1lcy5xdWlu bGFuQGJyb2FkY29tLmNvbT4KPiA+PiA+IFRlc3RlZC1ieTogRmxvcmlhbiBGYWluZWxsaSA8Zi5m YWluZWxsaUBnbWFpbC5jb20+Cj4gPj4gPiAtLS0KPiA+PiA+ICBkcml2ZXJzL3BjaS9jb250cm9s bGVyL3BjaWUtYnJjbXN0Yi5jIHwgMTYgKysrKysrKysrKysrKysrKwo+ID4+ID4gIDEgZmlsZSBj aGFuZ2VkLCAxNiBpbnNlcnRpb25zKCspCj4gPj4gPgo+ID4+ID4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1icmNtc3RiLmMgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVy L3BjaWUtYnJjbXN0Yi5jCj4gPj4gPiBpbmRleCBkMzA2MzZhNzI1ZDcuLmZlMDQxNWE5OGM2MyAx MDA2NDQKPiA+PiA+IC0tLSBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1icmNtc3RiLmMK PiA+PiA+ICsrKyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1icmNtc3RiLmMKPiA+PiA+ IEBAIC0xMDM0LDYgKzEwMzQsMjEgQEAgc3RhdGljIGludCBicmNtX3BjaWVfc2V0dXAoc3RydWN0 IGJyY21fcGNpZSAqcGNpZSkKPiA+PiA+ICAgICAgIHJldHVybiAwOwo+ID4+ID4gIH0KPiA+PiA+ Cj4gPj4gPiArLyoKPiA+PiA+ICsgKiBUaGlzIGV4dGVuZHMgdGhlIHRpbWVvdXQgcGVyaW9kIGZv ciBhbiBhY2Nlc3MgdG8gYW4gaW50ZXJuYWwgYnVzLiAgVGhpcwo+ID4+ID4gKyAqIGFjY2VzcyB0 aW1lb3V0IG1heSBvY2N1ciBkdXJpbmcgTDFTUyBzbGVlcCBwZXJpb2RzIGV2ZW4gd2l0aG91dCB0 aGUKPiA+PiA+ICsgKiBwcmVzZW5jZSBvZiBhIFBDSWUgYWNjZXNzLgo+ID4+ID4gKyAqLwo+ID4+ ID4gK3N0YXRpYyB2b2lkIGJyY21fZXh0ZW5kX3JidXNfdGltZW91dChzdHJ1Y3QgYnJjbV9wY2ll ICpwY2llKQo+ID4+ID4gK3sKPiA+PiA+ICsgICAgIC8qIFRJTUVPVVQgcmVnaXN0ZXIgaXMgdHdv IHJlZ2lzdGVycyBiZWZvcmUgUkdSMV9TV19JTklUXzEgKi8KPiA+PiA+ICsgICAgIGNvbnN0IHVu c2lnbmVkIGludCBSRUdfT0ZGU0VUID0gUENJRV9SR1IxX1NXX0lOSVRfMShwY2llKSAtIDg7Cj4g Pj4KPiA+PiBOaXQ6IHlvdSBjb3VsZCBkZWZpbmUgYW4gb2Zmc2V0IGZvciB0aGUgVElNRU9VVCBy ZWdpc3RlciwgaWYgdGhhdCBtYWtlcwo+ID4+IGl0IGFueSBjbGVhbmVyLCB1cCB0byB5b3UuCj4g Pj4KPiA+PiA+ICsgICAgIHUzMiB0aW1lb3V0X3VzID0gNDAwMDAwMDsgLyogNCBzZWNvbmRzLCBv dXIgc2V0dGluZyBmb3IgTDFTUyAqLwo+ID4+Cj4gPj4gSXQgd291bGQgYmUgdXNlZnVsIHRvIGRl c2NyaWJlIHdoeSB0aGlzIGhhcyB0byBiZSA0IHNlY29uZHMgaW4gY2FzZQo+ID4+IHNvbWVvbmUg aW4gdGhlIGZ1dHVyZSB3aWxsIGhhdmUgdG8gY2hhbmdlIGl0Lgo+ID4KPiA+IElJUkMgb3VyIGN1 c3RvbWVyIHJlcXVlc3RlZCAycyBhbmQgd2UgZG91YmxlZCBpdC4gIEJqb3JuLCBjYW4geW91Cj4g PiBwbGVhc2UgYWRkIHRoaXMgY29tbWVudCBvciBhIHBhcmFwaHJhc2Ugb2YgaXQgYmVmb3JlIGFw cGx5aW5nIC0tCj4gPiBJJ20gY3VycmVudGx5IG9uIHZhY2F0aW9uLgo+IAo+IElzIHRoZSBhYm92 ZSByZXF1ZXN0IG9rYXkgd2l0aCB5b3U/ICBXaGF0IGlzIHRoZSBzdGF0dXMgb2YgdGhlc2UKPiBj b21taXRzIC0tIHdpbGwgdGhleSBiZSBhcHBsaWVkIHRvIHBjaS1uZXh0IGluIHRoZSBuZWFyIGZ1 dHVyZT8KClRoZSAiYnJjbSxlbmFibGUtbDFzcyIgRFQgcHJvcGVydHkgaXMgZWl0aGVyIHVubmVj ZXNzYXJ5IG9yIGFuCmluZGljYXRpb24gb2YgYSBoYXJkd2FyZSBkZWZlY3QgaW4gdGhlIGNvbnRy b2xsZXIuCgpSZXF1aXJpbmcgdGhlIHByb3BlcnR5IGlzIGEgdGVycmlibGUgdXNlciBleHBlcmll bmNlLCBjb21wbGV0ZWx5CmFudGl0aGV0aWNhbCB0byB0aGUgUENJIGNvbXBhdGliaWxpdHkgc3Rv cnksIGFuZCBwZXIgdGhlIGNvbnZlcnNhdGlvbgphdCBbMV0sIHRoZXJlIGFyZSBubyBrbm93biBw cm9ibGVtcyB0aGF0IHdvdWxkIG9jY3VyIGlmIHdlIGlnbm9yZWQKImJyY20sZW5hYmxlLWwxc3Mi IGFuZCBhbHdheXMgY29uZmlndXJlZCBtb2RlIChjKSAoIkJpZGlyZWN0aW9uYWwKQ0xLUkVRIyBm b3IgTDFTUyBjYXBhYmxlIGRldmljZXMiKS4KCkV2ZW4gd2hlbiBjb25maWd1cmVkIGFzIG1vZGUg KGMpLCBMMVNTIGlzIG5vdCAqYWx3YXlzKiBlbmFibGVkLiAgSXQncwpjZXJ0YWlubHkgbm90IGVu YWJsZWQgYmVmb3JlIEFTUE0gaW5pdCwgYW5kIHVzZXJzIGNhbiBhbHdheXMgZGlzYWJsZQpMMVNT IHdoZW5ldmVyIHRoZXkgZGVzaXJlIHZpYSB0aGUgc3lzZnMgaW50ZXJmYWNlcyBvciBwY2llX2Fz cG09b2ZmLApzbyBpZiB0aGVyZSdzIHNvbWUgcHJvYmxlbSB3aXRoIHJ1bm5pbmcgaW4gbW9kZSAo Yykgd2l0aCBMMVNTCmRpc2FibGVkLCB3ZSdyZSBzdGlsbCBsaWtlbHkgdG8gc2VlIGl0LgoKQnV0 IGlmIHlvdSB3YW50IHRvIHJlcXVpcmUgdGhlIERUIHByb3BlcnR5LCBJIGd1ZXNzIGl0J3MgbWFp bmx5IGFuCmlzc3VlIGZvciB5b3UgYW5kIHlvdXIgY3VzdG9tZXJzLgoKU28gdG8gYW5zd2VyIHlv dXIgcXVlc3Rpb24sIHllcywgSSdtIE9LIHdpdGggdGhpcyBzZXJpZXMuCgpCam9ybgoKWzFdIGh0 dHBzOi8vbG9yZS5rZXJuZWwub3JnL3IvMjAyMzA0MjgyMjM1MDAuMjMzMzctMi1qaW0yMTAxMDI0 QGdtYWlsLmNvbQoKPiA+PiA+ICsgICAgIC8qIEVhY2ggdW5pdCBpbiB0aW1lb3V0IHJlZ2lzdGVy IGlzIDEvMjE2LDAwMCwwMDAgc2Vjb25kcyAqLwo+ID4+ID4gKyAgICAgd3JpdGVsKDIxNiAqIHRp bWVvdXRfdXMsIHBjaWUtPmJhc2UgKyBSRUdfT0ZGU0VUKTsKPiA+PiA+ICt9Cj4gPj4gPiArCj4g Pj4gPiAgc3RhdGljIHZvaWQgYnJjbV9jb25maWdfY2xrcmVxKHN0cnVjdCBicmNtX3BjaWUgKnBj aWUpCj4gPj4gPiAgewo+ID4+ID4gICAgICAgYm9vbCBsMXNzID0gb2ZfcHJvcGVydHlfcmVhZF9i b29sKHBjaWUtPm5wLCAiYnJjbSxlbmFibGUtbDFzcyIpOwo+ID4+ID4gQEAgLTEwNTksNiArMTA3 NCw3IEBAIHN0YXRpYyB2b2lkIGJyY21fY29uZmlnX2Nsa3JlcShzdHJ1Y3QgYnJjbV9wY2llICpw Y2llKQo+ID4+ID4gICAgICAgICAgICAgICAgKiBvZiA0MDBucywgYXMgc3BlY2lmaWVkIGluIDMu Mi41LjIuMiBvZiB0aGUgUENJIEV4cHJlc3MKPiA+PiA+ICAgICAgICAgICAgICAgICogTWluaSBD RU0gMi4wIHNwZWNpZmljYXRpb24uCj4gPj4gPiAgICAgICAgICAgICAgICAqLwo+ID4+ID4gKyAg ICAgICAgICAgICBicmNtX2V4dGVuZF9yYnVzX3RpbWVvdXQocGNpZSk7Cj4gPj4gPiAgICAgICAg ICAgICAgIGNsa3JlcV9zZXQgfD0gUENJRV9NSVNDX0hBUkRfUENJRV9IQVJEX0RFQlVHX0wxU1Nf RU5BQkxFX01BU0s7Cj4gPj4gPiAgICAgICAgICAgICAgIGRldl9pbmZvKHBjaWUtPmRldiwgImJp LWRpciBDTEtSRVEjIGZvciBMMVNTIHBvd2VyIHNhdmluZ3MiKTsKPiA+PiA+ICAgICAgIH0gZWxz ZSB7CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51 eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVh ZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1h cm0ta2VybmVsCg==