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 8ACCCC433EF for ; Tue, 12 Apr 2022 17:55:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237885AbiDLR6H (ORCPT ); Tue, 12 Apr 2022 13:58:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35990 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230389AbiDLR6G (ORCPT ); Tue, 12 Apr 2022 13:58:06 -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 C84F354693 for ; Tue, 12 Apr 2022 10:55:47 -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 80F46B81FAE for ; Tue, 12 Apr 2022 17:55:46 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id E4339C385A5; Tue, 12 Apr 2022 17:55:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1649786145; bh=6DUb+Auwo8PS9JJgZX7P0VYq8gYaKnuROll+O4J7rSU=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=Ah9OmWBqbo8yTqlmemU2iiZd7MYPNIvQarylPIP3e9FVsJboK2WUki58547OVaSnA ispF7eezOs5TrAVEgvBtfuQmsLGbc0sPXq4ObEAFgjUTjAEPOTrjVVyhY7/tRfIkJD ZcWkLCrEqn640eYLfSrwfSe7EQZJjH2UaxNXmaYs8LA498miNxEPXDoVwnepvTCRLF Sub29o+HTXoxAwFDlmI8pbQDkhHBNAeUjji9Fb9TB/j9Lsh+3uZNK4y31e9aAP2lGq F/crUjRWPM/Q7JdkP3vINVzsPkwPiMfGdqa+HbCpzR/u0IGZUMvksmjfcvGlXTq5Gz t646K5QnTkbZw== Received: by pali.im (Postfix) id C81D9A75; Tue, 12 Apr 2022 19:55:41 +0200 (CEST) Date: Tue, 12 Apr 2022 19:55:41 +0200 From: Pali =?utf-8?B?Um9ow6Fy?= To: Lorenzo Pieralisi Cc: Marek =?utf-8?B?QmVow7pu?= , Bjorn Helgaas , Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= , Marc Zyngier , linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Gregory CLEMENT Subject: Re: [PATCH 17/18] PCI: aardvark: Run link training in separate worker Message-ID: <20220412175541.gnrynogn3s2llari@pali> References: <20220220193346.23789-1-kabel@kernel.org> <20220220193346.23789-18-kabel@kernel.org> <20220412152524.GB20749@lpieralisi> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20220412152524.GB20749@lpieralisi> User-Agent: NeoMutt/20180716 Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org On Tuesday 12 April 2022 16:25:24 Lorenzo Pieralisi wrote: > On Sun, Feb 20, 2022 at 08:33:45PM +0100, Marek Behún wrote: > > From: Pali Rohár > > > > Link training and PCIe card reset routines in Aardvark contain several > > delays, resulting in rather slow PCIe card probing. The worst case is > > when there is no card connected: the driver tries link training at all > > possible speeds and waits until all timers expire. > > > > Since probe methods for all system devices are called sequentially, this > > results in noticeably longer boot time. > > > > Move card reset and link training code from driver probe function into > > a separate worker, so that kernel can do something different while the > > driver is waiting during reset or training. > > > > On ESPRESSObin and Turris MOX this decreases boot time by 0.4s with > > plugged PCIe card and by 2.2s if no card is connected. > > I believe this is what the PROBE_PREFER_ASYNCHRONOUS flag in > struct device_driver.probe_type flag is there for unless I am > missing something obvious here. > > Can you give it a try and report back please ? Hello Lorenzo. During testing patches 17 and 18 I saw that following race condition https://lore.kernel.org/linux-pci/20210407144146.rl7x2h5l2cc3escy@pali/ (which cause kernel oops) was triggered more often. I'm not sure if above race condition was fully fixed by the last Krzysztof's patches or there is also other issue which cause oops. As both patches 17 and 18 are just optimizations, I would suggest to skip it for now, until all these issues are resolved or verified that they are not triggered anymore. I guess that at this time we can look at PROBE_PREFER_ASYNCHRONOUS flag and decide how to implement this optimization. Do you agree, or do you have other opinion? > Thanks, > Lorenzo > > > Signed-off-by: Pali Rohár > > Signed-off-by: Marek Behún > > --- > > drivers/pci/controller/pci-aardvark.c | 42 ++++++++++++++++++--------- > > 1 file changed, 28 insertions(+), 14 deletions(-) > > > > diff --git a/drivers/pci/controller/pci-aardvark.c b/drivers/pci/controller/pci-aardvark.c > > index 8c9ac7766ac7..056f49d0e3a4 100644 > > --- a/drivers/pci/controller/pci-aardvark.c > > +++ b/drivers/pci/controller/pci-aardvark.c > > @@ -26,6 +26,7 @@ > > #include > > #include > > #include > > +#include > > > > #include "../pci.h" > > #include "../pci-bridge-emul.h" > > @@ -296,6 +297,8 @@ struct advk_pcie { > > int link_gen; > > bool link_was_up; > > struct timer_list link_irq_timer; > > + struct delayed_work probe_card_work; > > + bool host_bridge_probed; > > struct pci_bridge_emul bridge; > > struct gpio_desc *reset_gpio; > > struct clk *clk; > > @@ -497,6 +500,21 @@ static void advk_pcie_train_link(struct advk_pcie *pcie) > > dev_err(dev, "link never came up\n"); > > } > > > > +static void advk_pcie_probe_card_work(struct work_struct *work) > > +{ > > + struct delayed_work *dwork = container_of(work, struct delayed_work, > > + work); > > + struct advk_pcie *pcie = container_of(dwork, struct advk_pcie, > > + probe_card_work); > > + struct pci_host_bridge *bridge = pci_host_bridge_from_priv(pcie); > > + int ret; > > + > > + advk_pcie_train_link(pcie); > > + ret = pci_host_probe(bridge); > > + if (!ret) > > + pcie->host_bridge_probed = true; > > +} > > + > > /* > > * Set PCIe address window register which could be used for memory > > * mapping. > > @@ -701,8 +719,6 @@ static void advk_pcie_setup_hw(struct advk_pcie *pcie) > > /* Disable remaining PCIe outbound windows */ > > for (i = pcie->wins_count; i < OB_WIN_COUNT; i++) > > advk_pcie_disable_ob_win(pcie, i); > > - > > - advk_pcie_train_link(pcie); > > } > > > > static int advk_pcie_check_pio_status(struct advk_pcie *pcie, bool allow_crs, u32 *val) > > @@ -2112,14 +2128,8 @@ static int advk_pcie_probe(struct platform_device *pdev) > > bridge->ops = &advk_pcie_ops; > > bridge->map_irq = advk_pcie_map_irq; > > > > - ret = pci_host_probe(bridge); > > - if (ret < 0) { > > - irq_set_chained_handler_and_data(pcie->irq, NULL, NULL); > > - advk_pcie_remove_rp_irq_domain(pcie); > > - advk_pcie_remove_msi_irq_domain(pcie); > > - advk_pcie_remove_irq_domain(pcie); > > - return ret; > > - } > > + INIT_DELAYED_WORK(&pcie->probe_card_work, advk_pcie_probe_card_work); > > + schedule_delayed_work(&pcie->probe_card_work, 1); > > > > return 0; > > } > > @@ -2131,11 +2141,15 @@ static int advk_pcie_remove(struct platform_device *pdev) > > u32 val; > > int i; > > > > + cancel_delayed_work_sync(&pcie->probe_card_work); > > + > > /* Remove PCI bus with all devices */ > > - pci_lock_rescan_remove(); > > - pci_stop_root_bus(bridge->bus); > > - pci_remove_root_bus(bridge->bus); > > - pci_unlock_rescan_remove(); > > + if (pcie->host_bridge_probed) { > > + pci_lock_rescan_remove(); > > + pci_stop_root_bus(bridge->bus); > > + pci_remove_root_bus(bridge->bus); > > + pci_unlock_rescan_remove(); > > + } > > > > /* Disable Root Bridge I/O space, memory space and bus mastering */ > > val = advk_readl(pcie, PCIE_CORE_CMD_STATUS_REG); > > -- > > 2.34.1 > > 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 0B8B4C433EF for ; Tue, 12 Apr 2022 17:57:00 +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:References: 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=PfDsCr9HW5vdRdEVkxOGVcNLbl+iWoDptecQrTjxs54=; b=auX9376w1YkyvK euyjq5TyJCXpjR//M13zkqmKEQkmMZm84wgcHDa4/G9kUH8HpQlWNVEy2q/iXlVEljjL4lw3Ltlwa VpNhuD6ZbiGqbsh9yjWDETtiHeBSL2o18STUSyvnX9W/fk7oY2RXKH0p891Xu3y3U5yDWqRfNMOtt pikiNqeEXK7tdoi1NLCHUYKdsWp6ybtr38B7RzULzpJuNNV5pQcfySjLuMgMTUcvoCaOMgvH862HI F6Bfv4z2vxL9QuHa2UqbEvV6aRPSkad4AoYYx8QCdYbXaewVZgBpnL5R1aIjMvPH0r3hFuoX+JqLJ /hUpBHPtPA7CU4BkRJBw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1neKk6-00FOzH-1y; Tue, 12 Apr 2022 17:55:54 +0000 Received: from ams.source.kernel.org ([2604:1380:4601:e00::1]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1neKk2-00FOyE-Qu for linux-arm-kernel@lists.infradead.org; Tue, 12 Apr 2022 17:55:52 +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 ams.source.kernel.org (Postfix) with ESMTPS id 78C3FB81FAD; Tue, 12 Apr 2022 17:55:46 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id E4339C385A5; Tue, 12 Apr 2022 17:55:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1649786145; bh=6DUb+Auwo8PS9JJgZX7P0VYq8gYaKnuROll+O4J7rSU=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=Ah9OmWBqbo8yTqlmemU2iiZd7MYPNIvQarylPIP3e9FVsJboK2WUki58547OVaSnA ispF7eezOs5TrAVEgvBtfuQmsLGbc0sPXq4ObEAFgjUTjAEPOTrjVVyhY7/tRfIkJD ZcWkLCrEqn640eYLfSrwfSe7EQZJjH2UaxNXmaYs8LA498miNxEPXDoVwnepvTCRLF Sub29o+HTXoxAwFDlmI8pbQDkhHBNAeUjji9Fb9TB/j9Lsh+3uZNK4y31e9aAP2lGq F/crUjRWPM/Q7JdkP3vINVzsPkwPiMfGdqa+HbCpzR/u0IGZUMvksmjfcvGlXTq5Gz t646K5QnTkbZw== Received: by pali.im (Postfix) id C81D9A75; Tue, 12 Apr 2022 19:55:41 +0200 (CEST) Date: Tue, 12 Apr 2022 19:55:41 +0200 From: Pali =?utf-8?B?Um9ow6Fy?= To: Lorenzo Pieralisi Cc: Marek =?utf-8?B?QmVow7pu?= , Bjorn Helgaas , Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= , Marc Zyngier , linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Gregory CLEMENT Subject: Re: [PATCH 17/18] PCI: aardvark: Run link training in separate worker Message-ID: <20220412175541.gnrynogn3s2llari@pali> References: <20220220193346.23789-1-kabel@kernel.org> <20220220193346.23789-18-kabel@kernel.org> <20220412152524.GB20749@lpieralisi> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20220412152524.GB20749@lpieralisi> User-Agent: NeoMutt/20180716 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220412_105551_208318_0B12E88D X-CRM114-Status: GOOD ( 37.31 ) 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 T24gVHVlc2RheSAxMiBBcHJpbCAyMDIyIDE2OjI1OjI0IExvcmVuem8gUGllcmFsaXNpIHdyb3Rl Ogo+IE9uIFN1biwgRmViIDIwLCAyMDIyIGF0IDA4OjMzOjQ1UE0gKzAxMDAsIE1hcmVrIEJlaMO6 biB3cm90ZToKPiA+IEZyb206IFBhbGkgUm9ow6FyIDxwYWxpQGtlcm5lbC5vcmc+Cj4gPiAKPiA+ IExpbmsgdHJhaW5pbmcgYW5kIFBDSWUgY2FyZCByZXNldCByb3V0aW5lcyBpbiBBYXJkdmFyayBj b250YWluIHNldmVyYWwKPiA+IGRlbGF5cywgcmVzdWx0aW5nIGluIHJhdGhlciBzbG93IFBDSWUg Y2FyZCBwcm9iaW5nLiBUaGUgd29yc3QgY2FzZSBpcwo+ID4gd2hlbiB0aGVyZSBpcyBubyBjYXJk IGNvbm5lY3RlZDogdGhlIGRyaXZlciB0cmllcyBsaW5rIHRyYWluaW5nIGF0IGFsbAo+ID4gcG9z c2libGUgc3BlZWRzIGFuZCB3YWl0cyB1bnRpbCBhbGwgdGltZXJzIGV4cGlyZS4KPiA+IAo+ID4g U2luY2UgcHJvYmUgbWV0aG9kcyBmb3IgYWxsIHN5c3RlbSBkZXZpY2VzIGFyZSBjYWxsZWQgc2Vx dWVudGlhbGx5LCB0aGlzCj4gPiByZXN1bHRzIGluIG5vdGljZWFibHkgbG9uZ2VyIGJvb3QgdGlt ZS4KPiA+IAo+ID4gTW92ZSBjYXJkIHJlc2V0IGFuZCBsaW5rIHRyYWluaW5nIGNvZGUgZnJvbSBk cml2ZXIgcHJvYmUgZnVuY3Rpb24gaW50bwo+ID4gYSBzZXBhcmF0ZSB3b3JrZXIsIHNvIHRoYXQg a2VybmVsIGNhbiBkbyBzb21ldGhpbmcgZGlmZmVyZW50IHdoaWxlIHRoZQo+ID4gZHJpdmVyIGlz IHdhaXRpbmcgZHVyaW5nIHJlc2V0IG9yIHRyYWluaW5nLgo+ID4gCj4gPiBPbiBFU1BSRVNTT2Jp biBhbmQgVHVycmlzIE1PWCB0aGlzIGRlY3JlYXNlcyBib290IHRpbWUgYnkgMC40cyB3aXRoCj4g PiBwbHVnZ2VkIFBDSWUgY2FyZCBhbmQgYnkgMi4ycyBpZiBubyBjYXJkIGlzIGNvbm5lY3RlZC4K PiAKPiBJIGJlbGlldmUgdGhpcyBpcyB3aGF0IHRoZSBQUk9CRV9QUkVGRVJfQVNZTkNIUk9OT1VT IGZsYWcgaW4KPiBzdHJ1Y3QgZGV2aWNlX2RyaXZlci5wcm9iZV90eXBlIGZsYWcgaXMgdGhlcmUg Zm9yIHVubGVzcyBJIGFtCj4gbWlzc2luZyBzb21ldGhpbmcgb2J2aW91cyBoZXJlLgo+IAo+IENh biB5b3UgZ2l2ZSBpdCBhIHRyeSBhbmQgcmVwb3J0IGJhY2sgcGxlYXNlID8KCkhlbGxvIExvcmVu em8uCgpEdXJpbmcgdGVzdGluZyBwYXRjaGVzIDE3IGFuZCAxOCBJIHNhdyB0aGF0IGZvbGxvd2lu ZyByYWNlIGNvbmRpdGlvbgpodHRwczovL2xvcmUua2VybmVsLm9yZy9saW51eC1wY2kvMjAyMTA0 MDcxNDQxNDYucmw3eDJoNWwyY2MzZXNjeUBwYWxpLwood2hpY2ggY2F1c2Uga2VybmVsIG9vcHMp IHdhcyB0cmlnZ2VyZWQgbW9yZSBvZnRlbi4KCkknbSBub3Qgc3VyZSBpZiBhYm92ZSByYWNlIGNv bmRpdGlvbiB3YXMgZnVsbHkgZml4ZWQgYnkgdGhlIGxhc3QKS3J6eXN6dG9mJ3MgcGF0Y2hlcyBv ciB0aGVyZSBpcyBhbHNvIG90aGVyIGlzc3VlIHdoaWNoIGNhdXNlIG9vcHMuCgpBcyBib3RoIHBh dGNoZXMgMTcgYW5kIDE4IGFyZSBqdXN0IG9wdGltaXphdGlvbnMsIEkgd291bGQgc3VnZ2VzdCB0 bwpza2lwIGl0IGZvciBub3csIHVudGlsIGFsbCB0aGVzZSBpc3N1ZXMgYXJlIHJlc29sdmVkIG9y IHZlcmlmaWVkIHRoYXQKdGhleSBhcmUgbm90IHRyaWdnZXJlZCBhbnltb3JlLgoKSSBndWVzcyB0 aGF0IGF0IHRoaXMgdGltZSB3ZSBjYW4gbG9vayBhdCBQUk9CRV9QUkVGRVJfQVNZTkNIUk9OT1VT IGZsYWcKYW5kIGRlY2lkZSBob3cgdG8gaW1wbGVtZW50IHRoaXMgb3B0aW1pemF0aW9uLgoKRG8g eW91IGFncmVlLCBvciBkbyB5b3UgaGF2ZSBvdGhlciBvcGluaW9uPwoKPiBUaGFua3MsCj4gTG9y ZW56bwo+IAo+ID4gU2lnbmVkLW9mZi1ieTogUGFsaSBSb2jDoXIgPHBhbGlAa2VybmVsLm9yZz4K PiA+IFNpZ25lZC1vZmYtYnk6IE1hcmVrIEJlaMO6biA8a2FiZWxAa2VybmVsLm9yZz4KPiA+IC0t LQo+ID4gIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWFhcmR2YXJrLmMgfCA0MiArKysrKysr KysrKysrKysrKystLS0tLS0tLS0KPiA+ICAxIGZpbGUgY2hhbmdlZCwgMjggaW5zZXJ0aW9ucygr KSwgMTQgZGVsZXRpb25zKC0pCj4gPiAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9jb250 cm9sbGVyL3BjaS1hYXJkdmFyay5jIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktYWFyZHZh cmsuYwo+ID4gaW5kZXggOGM5YWM3NzY2YWM3Li4wNTZmNDlkMGUzYTQgMTAwNjQ0Cj4gPiAtLS0g YS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1hYXJkdmFyay5jCj4gPiArKysgYi9kcml2ZXJz L3BjaS9jb250cm9sbGVyL3BjaS1hYXJkdmFyay5jCj4gPiBAQCAtMjYsNiArMjYsNyBAQAo+ID4g ICNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+Cj4gPiAgI2luY2x1ZGUgPGxpbnV4L29mX3BjaS5o Pgo+ID4gICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC93b3Jr cXVldWUuaD4KPiA+ICAKPiA+ICAjaW5jbHVkZSAiLi4vcGNpLmgiCj4gPiAgI2luY2x1ZGUgIi4u L3BjaS1icmlkZ2UtZW11bC5oIgo+ID4gQEAgLTI5Niw2ICsyOTcsOCBAQCBzdHJ1Y3QgYWR2a19w Y2llIHsKPiA+ICAJaW50IGxpbmtfZ2VuOwo+ID4gIAlib29sIGxpbmtfd2FzX3VwOwo+ID4gIAlz dHJ1Y3QgdGltZXJfbGlzdCBsaW5rX2lycV90aW1lcjsKPiA+ICsJc3RydWN0IGRlbGF5ZWRfd29y ayBwcm9iZV9jYXJkX3dvcms7Cj4gPiArCWJvb2wgaG9zdF9icmlkZ2VfcHJvYmVkOwo+ID4gIAlz dHJ1Y3QgcGNpX2JyaWRnZV9lbXVsIGJyaWRnZTsKPiA+ICAJc3RydWN0IGdwaW9fZGVzYyAqcmVz ZXRfZ3BpbzsKPiA+ICAJc3RydWN0IGNsayAqY2xrOwo+ID4gQEAgLTQ5Nyw2ICs1MDAsMjEgQEAg c3RhdGljIHZvaWQgYWR2a19wY2llX3RyYWluX2xpbmsoc3RydWN0IGFkdmtfcGNpZSAqcGNpZSkK PiA+ICAJCWRldl9lcnIoZGV2LCAibGluayBuZXZlciBjYW1lIHVwXG4iKTsKPiA+ICB9Cj4gPiAg Cj4gPiArc3RhdGljIHZvaWQgYWR2a19wY2llX3Byb2JlX2NhcmRfd29yayhzdHJ1Y3Qgd29ya19z dHJ1Y3QgKndvcmspCj4gPiArewo+ID4gKwlzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9IGNv bnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLAo+ID4gKwkJCQkJCSAgd29yayk7 Cj4gPiArCXN0cnVjdCBhZHZrX3BjaWUgKnBjaWUgPSBjb250YWluZXJfb2YoZHdvcmssIHN0cnVj dCBhZHZrX3BjaWUsCj4gPiArCQkJCQkgICAgICBwcm9iZV9jYXJkX3dvcmspOwo+ID4gKwlzdHJ1 Y3QgcGNpX2hvc3RfYnJpZGdlICpicmlkZ2UgPSBwY2lfaG9zdF9icmlkZ2VfZnJvbV9wcml2KHBj aWUpOwo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4gKwlhZHZrX3BjaWVfdHJhaW5fbGluayhwY2ll KTsKPiA+ICsJcmV0ID0gcGNpX2hvc3RfcHJvYmUoYnJpZGdlKTsKPiA+ICsJaWYgKCFyZXQpCj4g PiArCQlwY2llLT5ob3N0X2JyaWRnZV9wcm9iZWQgPSB0cnVlOwo+ID4gK30KPiA+ICsKPiA+ICAv Kgo+ID4gICAqIFNldCBQQ0llIGFkZHJlc3Mgd2luZG93IHJlZ2lzdGVyIHdoaWNoIGNvdWxkIGJl IHVzZWQgZm9yIG1lbW9yeQo+ID4gICAqIG1hcHBpbmcuCj4gPiBAQCAtNzAxLDggKzcxOSw2IEBA IHN0YXRpYyB2b2lkIGFkdmtfcGNpZV9zZXR1cF9odyhzdHJ1Y3QgYWR2a19wY2llICpwY2llKQo+ ID4gIAkvKiBEaXNhYmxlIHJlbWFpbmluZyBQQ0llIG91dGJvdW5kIHdpbmRvd3MgKi8KPiA+ICAJ Zm9yIChpID0gcGNpZS0+d2luc19jb3VudDsgaSA8IE9CX1dJTl9DT1VOVDsgaSsrKQo+ID4gIAkJ YWR2a19wY2llX2Rpc2FibGVfb2Jfd2luKHBjaWUsIGkpOwo+ID4gLQo+ID4gLQlhZHZrX3BjaWVf dHJhaW5fbGluayhwY2llKTsKPiA+ICB9Cj4gPiAgCj4gPiAgc3RhdGljIGludCBhZHZrX3BjaWVf Y2hlY2tfcGlvX3N0YXR1cyhzdHJ1Y3QgYWR2a19wY2llICpwY2llLCBib29sIGFsbG93X2Nycywg dTMyICp2YWwpCj4gPiBAQCAtMjExMiwxNCArMjEyOCw4IEBAIHN0YXRpYyBpbnQgYWR2a19wY2ll X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gPiAgCWJyaWRnZS0+b3BzID0g JmFkdmtfcGNpZV9vcHM7Cj4gPiAgCWJyaWRnZS0+bWFwX2lycSA9IGFkdmtfcGNpZV9tYXBfaXJx Owo+ID4gIAo+ID4gLQlyZXQgPSBwY2lfaG9zdF9wcm9iZShicmlkZ2UpOwo+ID4gLQlpZiAocmV0 IDwgMCkgewo+ID4gLQkJaXJxX3NldF9jaGFpbmVkX2hhbmRsZXJfYW5kX2RhdGEocGNpZS0+aXJx LCBOVUxMLCBOVUxMKTsKPiA+IC0JCWFkdmtfcGNpZV9yZW1vdmVfcnBfaXJxX2RvbWFpbihwY2ll KTsKPiA+IC0JCWFkdmtfcGNpZV9yZW1vdmVfbXNpX2lycV9kb21haW4ocGNpZSk7Cj4gPiAtCQlh ZHZrX3BjaWVfcmVtb3ZlX2lycV9kb21haW4ocGNpZSk7Cj4gPiAtCQlyZXR1cm4gcmV0Owo+ID4g LQl9Cj4gPiArCUlOSVRfREVMQVlFRF9XT1JLKCZwY2llLT5wcm9iZV9jYXJkX3dvcmssIGFkdmtf cGNpZV9wcm9iZV9jYXJkX3dvcmspOwo+ID4gKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnBjaWUt PnByb2JlX2NhcmRfd29yaywgMSk7Cj4gPiAgCj4gPiAgCXJldHVybiAwOwo+ID4gIH0KPiA+IEBA IC0yMTMxLDExICsyMTQxLDE1IEBAIHN0YXRpYyBpbnQgYWR2a19wY2llX3JlbW92ZShzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ID4gIAl1MzIgdmFsOwo+ID4gIAlpbnQgaTsKPiA+ICAK PiA+ICsJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwY2llLT5wcm9iZV9jYXJkX3dvcmspOwo+ ID4gKwo+ID4gIAkvKiBSZW1vdmUgUENJIGJ1cyB3aXRoIGFsbCBkZXZpY2VzICovCj4gPiAtCXBj aV9sb2NrX3Jlc2Nhbl9yZW1vdmUoKTsKPiA+IC0JcGNpX3N0b3Bfcm9vdF9idXMoYnJpZGdlLT5i dXMpOwo+ID4gLQlwY2lfcmVtb3ZlX3Jvb3RfYnVzKGJyaWRnZS0+YnVzKTsKPiA+IC0JcGNpX3Vu bG9ja19yZXNjYW5fcmVtb3ZlKCk7Cj4gPiArCWlmIChwY2llLT5ob3N0X2JyaWRnZV9wcm9iZWQp IHsKPiA+ICsJCXBjaV9sb2NrX3Jlc2Nhbl9yZW1vdmUoKTsKPiA+ICsJCXBjaV9zdG9wX3Jvb3Rf YnVzKGJyaWRnZS0+YnVzKTsKPiA+ICsJCXBjaV9yZW1vdmVfcm9vdF9idXMoYnJpZGdlLT5idXMp Owo+ID4gKwkJcGNpX3VubG9ja19yZXNjYW5fcmVtb3ZlKCk7Cj4gPiArCX0KPiA+ICAKPiA+ICAJ LyogRGlzYWJsZSBSb290IEJyaWRnZSBJL08gc3BhY2UsIG1lbW9yeSBzcGFjZSBhbmQgYnVzIG1h c3RlcmluZyAqLwo+ID4gIAl2YWwgPSBhZHZrX3JlYWRsKHBjaWUsIFBDSUVfQ09SRV9DTURfU1RB VFVTX1JFRyk7Cj4gPiAtLSAKPiA+IDIuMzQuMQo+ID4gCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdAps aW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVh ZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==