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 B26FDC28D13 for ; Mon, 22 Aug 2022 10:37:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229953AbiHVKhT (ORCPT ); Mon, 22 Aug 2022 06:37:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59016 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229586AbiHVKhT (ORCPT ); Mon, 22 Aug 2022 06:37:19 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D6F802FFC0 for ; Mon, 22 Aug 2022 03:37:17 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 93678B81014 for ; Mon, 22 Aug 2022 10:37:16 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8AF61C433D6; Mon, 22 Aug 2022 10:37:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1661164635; bh=JrfXDin8nwR7I+erzg9qgAqZDGtE50sM8ODJ231ieO0=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=myPmnpl1Z70yXCl2pS5+rZhgfrvI7XGa4tddDWm31vw3tgwIblKgrqK0/1V9TS0Jf D2gR/H/os2H5tMS5ugaPLC8MjPlOW8g25uc/lfswkNaEmzRshXjQnL8FTv1QR/iXMR sJLvD3fi8vv1PJbdwL832wyrgJWmgxp1K7kXuPrTyEtH7rerSSOEEUFAfDEn+XLqUk OOHPtOVBHzsNH93FVE1Vmm08ti5xfysqx9Abx/Zj0ZJG+bEwZ2gnfQlr7JoC4Bv2R8 Jq4Ke1BeX1ZXTfYyGEnEYohb7Jdr1MIr2eS1Uz5Hosrm7/KU+WzhR4uSUbDmadiKcN NuNd4YSuo3HwA== Date: Mon, 22 Aug 2022 12:37:09 +0200 From: Marek =?UTF-8?B?QmVow7pu?= To: Lukas Wunner , Lorenzo Pieralisi Cc: Bjorn Helgaas , Krzysztof Wilczy??ski , pali@kernel.org, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: Re: [PATCH 01/11] PCI: pciehp: Enable DLLSC interrupt only if supported Message-ID: <20220822123709.5a014034@thinkpad> In-Reply-To: <20220821124621.GA23239@wunner.de> References: <20220818135140.5996-1-kabel@kernel.org> <20220818135140.5996-2-kabel@kernel.org> <20220821124621.GA23239@wunner.de> X-Mailer: Claws Mail 3.19.0 (GTK+ 2.24.33; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org On Sun, 21 Aug 2022 14:46:21 +0200 Lukas Wunner wrote: > On Thu, Aug 18, 2022 at 03:51:30PM +0200, Marek Beh=C3=BAn wrote: > > Don't enable Data Link Layer State Changed interrupt if it isn't > > supported. > >=20 > > Data Link Layer Link Active Reporting Capable bit in Link Capabilities > > register indicates if Data Link Layer State Changed Enable is supported. > >=20 > > Although Lukas Wunner says [1] > > According to PCIe r6.0, sec. 7.5.3.6, "For a hot-plug capable > > Downstream Port [...], this bit must be hardwired to 1b." > > the reason we want this is because of the pci-bridge-emul driver, which > > emulates a bridge, but does not support asynchronous operations (since > > implementing them is unneeded and would require massive changes to the > > whole driver). Therefore enabling DLLSC unconditionally makes the > > corresponding bit set only in the emulated configuration space of the > > pci-bridge-emul driver, which > > - results in confusing information when dumping the config space (it > > says that the interrupt is not supported but enabled), which may > > confuse developers when debugging PCIe issues, > > - may cause bugs in the future if someone adds code that checks whether > > DLLSC is enabled and then waits for the interrupt. =20 >=20 > Honestly I'm not sure this change adds value or is necessary: >=20 > advk_pci_bridge_emul_pcie_conf_read() unconditionally sets the DLLLARC > bit, so the change doesn't have any effect for aardvark. This is the status now, but it wasn't always so. The support for that was added in one of the previous batches of aardvark's changes. > Same for mvebu_pci_bridge_emul_pcie_conf_read(). > There are no other drivers using pci-bridge-emul. But there may be future users which won't support it and we were just thinking this could spare some confusion to the developers, since Pali spent nontrivial time on this when developing/debuggin aardvark last year. > Apart from that, it is legal to set the DLLSCE bit even on PCIe r1.0, > which did not define Data Link Layer Link Active Reporting yet. > (It defined the bit RsvdP.) Thus there's no reason for developers > to be confused. >=20 > We're also never depending *exclusively* on DLLSC events in pciehp, > we always react to either of PDC or DLLSC, whichever comes first. > So I don't see enabling DLLSCE on unsupporting hardware as a > potential source of error. >=20 >=20 > > [1] https://www.spinics.net/lists/linux-pci/msg124727.html =20 >=20 > Please always use lore.kernel.org links as they will likely outlast > 3rd party archives: >=20 > https://lore.kernel.org/linux-pci/20220509034216.GA26780@wunner.de/ Will do. > > --- a/drivers/pci/hotplug/pciehp_hpc.c > > +++ b/drivers/pci/hotplug/pciehp_hpc.c =20 > [...] > > + pcie_capability_read_dword(ctrl_dev(ctrl), PCI_EXP_LNKCAP, &link_cap); > > + =20 >=20 > Unfortunately this new version of the patch does not address > one of my comments on the previous version: >=20 > "The Data Link Layer Link Active Reporting Capable bit is cached > in ctrl_dev(ctrl)->link_active_reporting. Please use that > instead of re-reading it from the register." >=20 > (Verbatim quote from the above-linked e-mail.) Sorry, I forgot abbout this one. > > --- a/drivers/pci/hotplug/pnv_php.c > > +++ b/drivers/pci/hotplug/pnv_php.c > > @@ -841,6 +841,7 @@ static void pnv_php_init_irq(struct pnv_php_slot *p= hp_slot, int irq) > > struct pci_dev *pdev =3D php_slot->pdev; > > u32 broken_pdc =3D 0; > > u16 sts, ctrl; > > + u32 link_cap; > > int ret; > > =20 > > /* Allocate workqueue */ > > @@ -874,17 +875,21 @@ static void pnv_php_init_irq(struct pnv_php_slot = *php_slot, int irq) > > return; > > } > > =20 > > + pcie_capability_read_dword(pdev, PCI_EXP_LNKCAP, &link_cap); > > + > > /* Enable the interrupts */ > > pcie_capability_read_word(pdev, PCI_EXP_SLTCTL, &ctrl); > > if (php_slot->flags & PNV_PHP_FLAG_BROKEN_PDC) { > > ctrl &=3D ~PCI_EXP_SLTCTL_PDCE; > > - ctrl |=3D (PCI_EXP_SLTCTL_HPIE | > > - PCI_EXP_SLTCTL_DLLSCE); > > + ctrl |=3D PCI_EXP_SLTCTL_HPIE; > > } else { > > ctrl |=3D (PCI_EXP_SLTCTL_HPIE | > > - PCI_EXP_SLTCTL_PDCE | > > - PCI_EXP_SLTCTL_DLLSCE); > > + PCI_EXP_SLTCTL_PDCE); > > } > > + if (link_cap & PCI_EXP_LNKCAP_DLLLARC) > > + ctrl |=3D PCI_EXP_SLTCTL_DLLSCE; > > + else > > + ctrl &=3D ~PCI_EXP_SLTCTL_DLLSCE; > > pcie_capability_write_word(pdev, PCI_EXP_SLTCTL, ctrl); =20 >=20 > Note that the pnv_php.c driver is relying on DLLSC here if PDC > is broken (see PNV_PHP_FLAG_BROKEN_PDC). By not enabling DLLSC, > you may break hotplug altogether. But it would only break if those controllers did not report DLLLARC, right? > pnv_php.c is a PowerPC-specific hotplug controller, but you're not > cc'ing the driver's maintainers, which are: >=20 > $ scripts/get_maintainer.pl drivers/pci/hotplug/pnv_php.c > Michael Ellerman (supporter:LINUX FOR POWERPC (32-BI= T AND 64-BIT)) > Nicholas Piggin (reviewer:LINUX FOR POWERPC (32-BIT A= ND 64-BIT)) > Christophe Leroy (reviewer:LINUX FOR POWERP= C (32-BIT AND 64-BIT)) > linuxppc-dev@lists.ozlabs.org (open list:LINUX FOR POWERPC (32-BIT AND 64= -BIT)) Will do. Anyway, Lorenzo, this patch can be skipped now, the other patches do not depend on it. Marek 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 145E9C28D13 for ; Mon, 22 Aug 2022 10:38:32 +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:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=9t7g6jtjGLRJs5w14KjnKS8lapQze7eyodGY2jCeD58=; b=XKq6LomSwNytMk Coy2EzU0JR8okpGTRA2LvpPHjEvgd3rl6rgnzVNmuH5T3+YMxwPcV1olgjcwYBGW2HGgBgQC8lM3m oeJsyQmEo54UZlrh8oXxPoalzArv7DoOEzPj/UgQ/fdK8zDWgUTpO1qohxj55tAI6dAaFsuUnBHV1 1FugkX06YVIdh+D3e+GkFKTY0i8x9WlSlheD5UpVybu+0dyCBEG/kZz2SWBMXjNPX8DixRI7eGYYm Eze5r6SCfmbSiOjtygbrFo3XAjKhUCr17O9KNFYQboC5zTdwBKW5SeZfrGR2tC5iKgGJdnloHWvvi Hd7Q9tkE80RALpWObPUw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oQ4oB-007bho-Bf; Mon, 22 Aug 2022 10:37:27 +0000 Received: from sin.source.kernel.org ([2604:1380:40e1:4800::1]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oQ4o7-007bce-5y for linux-arm-kernel@lists.infradead.org; Mon, 22 Aug 2022 10:37:25 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sin.source.kernel.org (Postfix) with ESMTPS id D3B6DCE1057; Mon, 22 Aug 2022 10:37:16 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8AF61C433D6; Mon, 22 Aug 2022 10:37:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1661164635; bh=JrfXDin8nwR7I+erzg9qgAqZDGtE50sM8ODJ231ieO0=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=myPmnpl1Z70yXCl2pS5+rZhgfrvI7XGa4tddDWm31vw3tgwIblKgrqK0/1V9TS0Jf D2gR/H/os2H5tMS5ugaPLC8MjPlOW8g25uc/lfswkNaEmzRshXjQnL8FTv1QR/iXMR sJLvD3fi8vv1PJbdwL832wyrgJWmgxp1K7kXuPrTyEtH7rerSSOEEUFAfDEn+XLqUk OOHPtOVBHzsNH93FVE1Vmm08ti5xfysqx9Abx/Zj0ZJG+bEwZ2gnfQlr7JoC4Bv2R8 Jq4Ke1BeX1ZXTfYyGEnEYohb7Jdr1MIr2eS1Uz5Hosrm7/KU+WzhR4uSUbDmadiKcN NuNd4YSuo3HwA== Date: Mon, 22 Aug 2022 12:37:09 +0200 From: Marek =?UTF-8?B?QmVow7pu?= To: Lukas Wunner , Lorenzo Pieralisi Cc: Bjorn Helgaas , Krzysztof Wilczy??ski , pali@kernel.org, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: Re: [PATCH 01/11] PCI: pciehp: Enable DLLSC interrupt only if supported Message-ID: <20220822123709.5a014034@thinkpad> In-Reply-To: <20220821124621.GA23239@wunner.de> References: <20220818135140.5996-1-kabel@kernel.org> <20220818135140.5996-2-kabel@kernel.org> <20220821124621.GA23239@wunner.de> X-Mailer: Claws Mail 3.19.0 (GTK+ 2.24.33; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220822_033723_791399_08517785 X-CRM114-Status: GOOD ( 40.52 ) 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 T24gU3VuLCAyMSBBdWcgMjAyMiAxNDo0NjoyMSArMDIwMApMdWthcyBXdW5uZXIgPGx1a2FzQHd1 bm5lci5kZT4gd3JvdGU6Cgo+IE9uIFRodSwgQXVnIDE4LCAyMDIyIGF0IDAzOjUxOjMwUE0gKzAy MDAsIE1hcmVrIEJlaMO6biB3cm90ZToKPiA+IERvbid0IGVuYWJsZSBEYXRhIExpbmsgTGF5ZXIg U3RhdGUgQ2hhbmdlZCBpbnRlcnJ1cHQgaWYgaXQgaXNuJ3QKPiA+IHN1cHBvcnRlZC4KPiA+IAo+ ID4gRGF0YSBMaW5rIExheWVyIExpbmsgQWN0aXZlIFJlcG9ydGluZyBDYXBhYmxlIGJpdCBpbiBM aW5rIENhcGFiaWxpdGllcwo+ID4gcmVnaXN0ZXIgaW5kaWNhdGVzIGlmIERhdGEgTGluayBMYXll ciBTdGF0ZSBDaGFuZ2VkIEVuYWJsZSBpcyBzdXBwb3J0ZWQuCj4gPiAKPiA+IEFsdGhvdWdoIEx1 a2FzIFd1bm5lciBzYXlzIFsxXQo+ID4gICBBY2NvcmRpbmcgdG8gUENJZSByNi4wLCBzZWMuIDcu NS4zLjYsICJGb3IgYSBob3QtcGx1ZyBjYXBhYmxlCj4gPiAgIERvd25zdHJlYW0gUG9ydCBbLi4u XSwgdGhpcyBiaXQgbXVzdCBiZSBoYXJkd2lyZWQgdG8gMWIuIgo+ID4gdGhlIHJlYXNvbiB3ZSB3 YW50IHRoaXMgaXMgYmVjYXVzZSBvZiB0aGUgcGNpLWJyaWRnZS1lbXVsIGRyaXZlciwgd2hpY2gK PiA+IGVtdWxhdGVzIGEgYnJpZGdlLCBidXQgZG9lcyBub3Qgc3VwcG9ydCBhc3luY2hyb25vdXMg b3BlcmF0aW9ucyAoc2luY2UKPiA+IGltcGxlbWVudGluZyB0aGVtIGlzIHVubmVlZGVkIGFuZCB3 b3VsZCByZXF1aXJlIG1hc3NpdmUgY2hhbmdlcyB0byB0aGUKPiA+IHdob2xlIGRyaXZlcikuIFRo ZXJlZm9yZSBlbmFibGluZyBETExTQyB1bmNvbmRpdGlvbmFsbHkgbWFrZXMgdGhlCj4gPiBjb3Jy ZXNwb25kaW5nIGJpdCBzZXQgb25seSBpbiB0aGUgZW11bGF0ZWQgY29uZmlndXJhdGlvbiBzcGFj ZSBvZiB0aGUKPiA+IHBjaS1icmlkZ2UtZW11bCBkcml2ZXIsIHdoaWNoCj4gPiAtIHJlc3VsdHMg aW4gY29uZnVzaW5nIGluZm9ybWF0aW9uIHdoZW4gZHVtcGluZyB0aGUgY29uZmlnIHNwYWNlIChp dAo+ID4gICBzYXlzIHRoYXQgdGhlIGludGVycnVwdCBpcyBub3Qgc3VwcG9ydGVkIGJ1dCBlbmFi bGVkKSwgd2hpY2ggbWF5Cj4gPiAgIGNvbmZ1c2UgZGV2ZWxvcGVycyB3aGVuIGRlYnVnZ2luZyBQ Q0llIGlzc3VlcywKPiA+IC0gbWF5IGNhdXNlIGJ1Z3MgaW4gdGhlIGZ1dHVyZSBpZiBzb21lb25l IGFkZHMgY29kZSB0aGF0IGNoZWNrcyB3aGV0aGVyCj4gPiAgIERMTFNDIGlzIGVuYWJsZWQgYW5k IHRoZW4gd2FpdHMgZm9yIHRoZSBpbnRlcnJ1cHQuICAKPiAKPiBIb25lc3RseSBJJ20gbm90IHN1 cmUgdGhpcyBjaGFuZ2UgYWRkcyB2YWx1ZSBvciBpcyBuZWNlc3Nhcnk6Cj4gCj4gYWR2a19wY2lf YnJpZGdlX2VtdWxfcGNpZV9jb25mX3JlYWQoKSB1bmNvbmRpdGlvbmFsbHkgc2V0cyB0aGUgRExM TEFSQwo+IGJpdCwgc28gdGhlIGNoYW5nZSBkb2Vzbid0IGhhdmUgYW55IGVmZmVjdCBmb3IgYWFy ZHZhcmsuCgpUaGlzIGlzIHRoZSBzdGF0dXMgbm93LCBidXQgaXQgd2Fzbid0IGFsd2F5cyBzby4g VGhlIHN1cHBvcnQgZm9yCnRoYXQgd2FzIGFkZGVkIGluIG9uZSBvZiB0aGUgcHJldmlvdXMgYmF0 Y2hlcyBvZiBhYXJkdmFyaydzIGNoYW5nZXMuCgo+IFNhbWUgZm9yIG12ZWJ1X3BjaV9icmlkZ2Vf ZW11bF9wY2llX2NvbmZfcmVhZCgpLgo+IFRoZXJlIGFyZSBubyBvdGhlciBkcml2ZXJzIHVzaW5n IHBjaS1icmlkZ2UtZW11bC4KCkJ1dCB0aGVyZSBtYXkgYmUgZnV0dXJlIHVzZXJzIHdoaWNoIHdv bid0IHN1cHBvcnQgaXQgYW5kIHdlIHdlcmUganVzdAp0aGlua2luZyB0aGlzIGNvdWxkIHNwYXJl IHNvbWUgY29uZnVzaW9uIHRvIHRoZSBkZXZlbG9wZXJzLCBzaW5jZSBQYWxpCnNwZW50IG5vbnRy aXZpYWwgdGltZSBvbiB0aGlzIHdoZW4gZGV2ZWxvcGluZy9kZWJ1Z2dpbiBhYXJkdmFyayBsYXN0 CnllYXIuCgo+IEFwYXJ0IGZyb20gdGhhdCwgaXQgaXMgbGVnYWwgdG8gc2V0IHRoZSBETExTQ0Ug Yml0IGV2ZW4gb24gUENJZSByMS4wLAo+IHdoaWNoIGRpZCBub3QgZGVmaW5lIERhdGEgTGluayBM YXllciBMaW5rIEFjdGl2ZSBSZXBvcnRpbmcgeWV0Lgo+IChJdCBkZWZpbmVkIHRoZSBiaXQgUnN2 ZFAuKSAgVGh1cyB0aGVyZSdzIG5vIHJlYXNvbiBmb3IgZGV2ZWxvcGVycwo+IHRvIGJlIGNvbmZ1 c2VkLgo+IAo+IFdlJ3JlIGFsc28gbmV2ZXIgZGVwZW5kaW5nICpleGNsdXNpdmVseSogb24gRExM U0MgZXZlbnRzIGluIHBjaWVocCwKPiB3ZSBhbHdheXMgcmVhY3QgdG8gZWl0aGVyIG9mIFBEQyBv ciBETExTQywgd2hpY2hldmVyIGNvbWVzIGZpcnN0Lgo+IFNvIEkgZG9uJ3Qgc2VlIGVuYWJsaW5n IERMTFNDRSBvbiB1bnN1cHBvcnRpbmcgaGFyZHdhcmUgYXMgYQo+IHBvdGVudGlhbCBzb3VyY2Ug b2YgZXJyb3IuCj4gCj4gCj4gPiBbMV0gaHR0cHM6Ly93d3cuc3Bpbmljcy5uZXQvbGlzdHMvbGlu dXgtcGNpL21zZzEyNDcyNy5odG1sICAKPiAKPiBQbGVhc2UgYWx3YXlzIHVzZSBsb3JlLmtlcm5l bC5vcmcgbGlua3MgYXMgdGhleSB3aWxsIGxpa2VseSBvdXRsYXN0Cj4gM3JkIHBhcnR5IGFyY2hp dmVzOgo+IAo+IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xpbnV4LXBjaS8yMDIyMDUwOTAzNDIx Ni5HQTI2NzgwQHd1bm5lci5kZS8KCldpbGwgZG8uCgo+ID4gLS0tIGEvZHJpdmVycy9wY2kvaG90 cGx1Zy9wY2llaHBfaHBjLmMKPiA+ICsrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2hw Yy5jICAKPiBbLi4uXQo+ID4gKwlwY2llX2NhcGFiaWxpdHlfcmVhZF9kd29yZChjdHJsX2Rldihj dHJsKSwgUENJX0VYUF9MTktDQVAsICZsaW5rX2NhcCk7Cj4gPiArICAKPiAKPiBVbmZvcnR1bmF0 ZWx5IHRoaXMgbmV3IHZlcnNpb24gb2YgdGhlIHBhdGNoIGRvZXMgbm90IGFkZHJlc3MKPiBvbmUg b2YgbXkgY29tbWVudHMgb24gdGhlIHByZXZpb3VzIHZlcnNpb246Cj4gCj4gIlRoZSBEYXRhIExp bmsgTGF5ZXIgTGluayBBY3RpdmUgUmVwb3J0aW5nIENhcGFibGUgYml0IGlzIGNhY2hlZAo+IGlu IGN0cmxfZGV2KGN0cmwpLT5saW5rX2FjdGl2ZV9yZXBvcnRpbmcuICBQbGVhc2UgdXNlIHRoYXQK PiBpbnN0ZWFkIG9mIHJlLXJlYWRpbmcgaXQgZnJvbSB0aGUgcmVnaXN0ZXIuIgo+IAo+IChWZXJi YXRpbSBxdW90ZSBmcm9tIHRoZSBhYm92ZS1saW5rZWQgZS1tYWlsLikKClNvcnJ5LCBJIGZvcmdv dCBhYmJvdXQgdGhpcyBvbmUuCgo+ID4gLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wbnZfcGhw LmMKPiA+ICsrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcG52X3BocC5jCj4gPiBAQCAtODQxLDYg Kzg0MSw3IEBAIHN0YXRpYyB2b2lkIHBudl9waHBfaW5pdF9pcnEoc3RydWN0IHBudl9waHBfc2xv dCAqcGhwX3Nsb3QsIGludCBpcnEpCj4gPiAgCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gcGhwX3Ns b3QtPnBkZXY7Cj4gPiAgCXUzMiBicm9rZW5fcGRjID0gMDsKPiA+ICAJdTE2IHN0cywgY3RybDsK PiA+ICsJdTMyIGxpbmtfY2FwOwo+ID4gIAlpbnQgcmV0Owo+ID4gIAo+ID4gIAkvKiBBbGxvY2F0 ZSB3b3JrcXVldWUgKi8KPiA+IEBAIC04NzQsMTcgKzg3NSwyMSBAQCBzdGF0aWMgdm9pZCBwbnZf cGhwX2luaXRfaXJxKHN0cnVjdCBwbnZfcGhwX3Nsb3QgKnBocF9zbG90LCBpbnQgaXJxKQo+ID4g IAkJcmV0dXJuOwo+ID4gIAl9Cj4gPiAgCj4gPiArCXBjaWVfY2FwYWJpbGl0eV9yZWFkX2R3b3Jk KHBkZXYsIFBDSV9FWFBfTE5LQ0FQLCAmbGlua19jYXApOwo+ID4gKwo+ID4gIAkvKiBFbmFibGUg dGhlIGludGVycnVwdHMgKi8KPiA+ICAJcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChwZGV2LCBQ Q0lfRVhQX1NMVENUTCwgJmN0cmwpOwo+ID4gIAlpZiAocGhwX3Nsb3QtPmZsYWdzICYgUE5WX1BI UF9GTEFHX0JST0tFTl9QREMpIHsKPiA+ICAJCWN0cmwgJj0gflBDSV9FWFBfU0xUQ1RMX1BEQ0U7 Cj4gPiAtCQljdHJsIHw9IChQQ0lfRVhQX1NMVENUTF9IUElFIHwKPiA+IC0JCQkgUENJX0VYUF9T TFRDVExfRExMU0NFKTsKPiA+ICsJCWN0cmwgfD0gUENJX0VYUF9TTFRDVExfSFBJRTsKPiA+ICAJ fSBlbHNlIHsKPiA+ICAJCWN0cmwgfD0gKFBDSV9FWFBfU0xUQ1RMX0hQSUUgfAo+ID4gLQkJCSBQ Q0lfRVhQX1NMVENUTF9QRENFIHwKPiA+IC0JCQkgUENJX0VYUF9TTFRDVExfRExMU0NFKTsKPiA+ ICsJCQkgUENJX0VYUF9TTFRDVExfUERDRSk7Cj4gPiAgCX0KPiA+ICsJaWYgKGxpbmtfY2FwICYg UENJX0VYUF9MTktDQVBfRExMTEFSQykKPiA+ICsJCWN0cmwgfD0gUENJX0VYUF9TTFRDVExfRExM U0NFOwo+ID4gKwllbHNlCj4gPiArCQljdHJsICY9IH5QQ0lfRVhQX1NMVENUTF9ETExTQ0U7Cj4g PiAgCXBjaWVfY2FwYWJpbGl0eV93cml0ZV93b3JkKHBkZXYsIFBDSV9FWFBfU0xUQ1RMLCBjdHJs KTsgIAo+IAo+IE5vdGUgdGhhdCB0aGUgcG52X3BocC5jIGRyaXZlciBpcyByZWx5aW5nIG9uIERM TFNDIGhlcmUgaWYgUERDCj4gaXMgYnJva2VuIChzZWUgUE5WX1BIUF9GTEFHX0JST0tFTl9QREMp LiAgQnkgbm90IGVuYWJsaW5nIERMTFNDLAo+IHlvdSBtYXkgYnJlYWsgaG90cGx1ZyBhbHRvZ2V0 aGVyLgoKQnV0IGl0IHdvdWxkIG9ubHkgYnJlYWsgaWYgdGhvc2UgY29udHJvbGxlcnMgZGlkIG5v dCByZXBvcnQgRExMTEFSQywKcmlnaHQ/Cgo+IHBudl9waHAuYyBpcyBhIFBvd2VyUEMtc3BlY2lm aWMgaG90cGx1ZyBjb250cm9sbGVyLCBidXQgeW91J3JlIG5vdAo+IGNjJ2luZyB0aGUgZHJpdmVy J3MgbWFpbnRhaW5lcnMsIHdoaWNoIGFyZToKPiAKPiAkIHNjcmlwdHMvZ2V0X21haW50YWluZXIu cGwgZHJpdmVycy9wY2kvaG90cGx1Zy9wbnZfcGhwLmMKPiBNaWNoYWVsIEVsbGVybWFuIDxtcGVA ZWxsZXJtYW4uaWQuYXU+IChzdXBwb3J0ZXI6TElOVVggRk9SIFBPV0VSUEMgKDMyLUJJVCBBTkQg NjQtQklUKSkKPiBOaWNob2xhcyBQaWdnaW4gPG5waWdnaW5AZ21haWwuY29tPiAocmV2aWV3ZXI6 TElOVVggRk9SIFBPV0VSUEMgKDMyLUJJVCBBTkQgNjQtQklUKSkKPiBDaHJpc3RvcGhlIExlcm95 IDxjaHJpc3RvcGhlLmxlcm95QGNzZ3JvdXAuZXU+IChyZXZpZXdlcjpMSU5VWCBGT1IgUE9XRVJQ QyAoMzItQklUIEFORCA2NC1CSVQpKQo+IGxpbnV4cHBjLWRldkBsaXN0cy5vemxhYnMub3JnIChv cGVuIGxpc3Q6TElOVVggRk9SIFBPV0VSUEMgKDMyLUJJVCBBTkQgNjQtQklUKSkKCldpbGwgZG8u CgpBbnl3YXksIExvcmVuem8sIHRoaXMgcGF0Y2ggY2FuIGJlIHNraXBwZWQgbm93LCB0aGUgb3Ro ZXIgcGF0Y2hlcyBkbwpub3QgZGVwZW5kIG9uIGl0LgoKTWFyZWsKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBs aXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5m cmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK