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 X-Spam-Level: X-Spam-Status: No, score=-8.6 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D24F6C433E1 for ; Thu, 9 Jul 2020 12:22:13 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B1C212074B for ; Thu, 9 Jul 2020 12:22:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1594297333; bh=qOFNT6tblN8CGBYOHgoyMwlCS9ntBDtTAmhooTF7pYU=; h=Date:From:To:Cc:Subject:References:In-Reply-To:List-ID:From; b=GodRN+rBYP7bvJth5vyEa4v0M9wB7dKTREOQWdkYFHDKr7EiTATIAu6ktEsLkMKt7 0PZVa2mmLJlDYE22n/7OOVk/stPyoEMLk7ZL4oImxH/fDkrKBOU6//HGX7tQlic+7f rUq9NgI8mk4bsn/oOR3/rTOKG5xRnatEJiEqQiJk= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726746AbgGIMWM (ORCPT ); Thu, 9 Jul 2020 08:22:12 -0400 Received: from mail.kernel.org ([198.145.29.99]:54564 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726327AbgGIMWL (ORCPT ); Thu, 9 Jul 2020 08:22:11 -0400 Received: from pali.im (pali.im [31.31.79.79]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id DF662206DF; Thu, 9 Jul 2020 12:22:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1594297331; bh=qOFNT6tblN8CGBYOHgoyMwlCS9ntBDtTAmhooTF7pYU=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=KtxyWHHx+5ZItqJHRCkusAhW3YrwOy/2Y2xyNkI/pV3lEuRrgm+jS66grgjwvUf3l 9zwjAReLz1PRnsqUI7uu/bdBdiBVOERfDDyfKHwQNj28ljL4aqeNYexV+tZ35fJf8W 4UUg6xfkT59gMsoFAHOFOtpQuRcYBTDQeC40WSdg= Received: by pali.im (Postfix) id A25CE15A1; Thu, 9 Jul 2020 14:22:08 +0200 (CEST) Date: Thu, 9 Jul 2020 14:22:08 +0200 From: Pali =?utf-8?B?Um9ow6Fy?= To: Lorenzo Pieralisi Cc: Thomas Petazzoni , Andrew Murray , Bjorn Helgaas , Marek =?utf-8?B?QmVow7pu?= , Remi Pommarel , Tomasz Maciej Nowak , Xogium , linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v3] PCI: aardvark: Don't touch PCIe registers if no card connected Message-ID: <20200709122208.rmfeuu6zgbwh3fr5@pali> References: <20200528143141.29956-1-pali@kernel.org> <20200702083036.12230-1-pali@kernel.org> <20200709113509.GB19638@e121166-lin.cambridge.arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20200709113509.GB19638@e121166-lin.cambridge.arm.com> User-Agent: NeoMutt/20180716 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thursday 09 July 2020 12:35:09 Lorenzo Pieralisi wrote: > On Thu, Jul 02, 2020 at 10:30:36AM +0200, Pali Rohár wrote: > > When there is no PCIe card connected and advk_pcie_rd_conf() or > > advk_pcie_wr_conf() is called for PCI bus which doesn't belong to emulated > > root bridge, the aardvark driver throws the following error message: > > > > advk-pcie d0070000.pcie: config read/write timed out > > > > Obviously accessing PCIe registers of disconnected card is not possible. > > > > Extend check in advk_pcie_valid_device() function for validating > > availability of PCIe bus. If PCIe link is down, then the device is marked > > as Not Found and the driver does not try to access these registers. > > > > This is just an optimization to prevent accessing PCIe registers when card > > is disconnected. Trying to access PCIe registers of disconnected card does > > not cause any crash, kernel just needs to wait for a timeout. So if card > > disappear immediately after checking for PCIe link (before accessing PCIe > > registers), it does not cause any problems. > > > > Signed-off-by: Pali Rohár > > > > --- > > Changes in V3: > > * Add comment to the code > > Changes in V2: > > * Update commit message, mention that this is optimization > > --- > > drivers/pci/controller/pci-aardvark.c | 7 +++++++ > > 1 file changed, 7 insertions(+) > > > > diff --git a/drivers/pci/controller/pci-aardvark.c b/drivers/pci/controller/pci-aardvark.c > > index 90ff291c24f0..d18f389b36a1 100644 > > --- a/drivers/pci/controller/pci-aardvark.c > > +++ b/drivers/pci/controller/pci-aardvark.c > > @@ -644,6 +644,13 @@ static bool advk_pcie_valid_device(struct advk_pcie *pcie, struct pci_bus *bus, > > if ((bus->number == pcie->root_bus_nr) && PCI_SLOT(devfn) != 0) > > return false; > > > > + /* > > + * If the link goes down after we check for link-up, nothing bad > > + * happens but the config access times out. > > + */ > > + if (bus->number != pcie->root_bus_nr && !advk_pcie_link_up(pcie)) > > + return false; > > + > > return true; > > } > > Question: this basically means that you can only effectively enumerate > bus number == root_bus_nr and AFAICS if at probe the link did not > come up it will never do, will it ? > > Isn't this equivalent to limiting the bus numbers the bridge is capable > of handling ? > > Reworded: if in advk_pcie_setup_hw() the link does not come up, what's > the point of trying to enumerate the bus hierarchy below the root bus ? Hello Lorenzo! PCIe link can theoretically come up even after boot, but aardvark driver currently does not support link detection at runtime. So it checks and enumerate device only at probe time. I do not know if hardware has some mechanism to inform kernel that PCIe link come up (or down) and re-enumeration is required. Or the only option is polling via advk_pcie_link_up(). So if device is not visible at the probe time then it would not appear in system and cannot be used. This is current state. Just to note that our hardware does not support physical hotplug of mPCIe cards. You need to connect card when board is powered off. So if at the aardvark probe time PCIe link is not up then trying to enumerate devices under (software) root bridge is not needed. But it is needed to register/enumerate software root bridge device and currently both is done by one (recursive) call pci_host_probe(). 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 X-Spam-Level: X-Spam-Status: No, score=-8.5 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE, SPF_PASS,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D0E1FC433E0 for ; Thu, 9 Jul 2020 12:23:39 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 9DA08206DF for ; Thu, 9 Jul 2020 12:23:39 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="iVXPV6n3"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="KtxyWHHx" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9DA08206DF Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References:Message-ID: Subject: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=eAQeDaJPiU8XbwhMQ2agovp3K9U7EzM/1NOqDzMQzJM=; b=iVXPV6n3WvI3HPi3kHDFbxHbO hzy1Rhp8sxMB/9SHF7YFe47Rm32IMSZVwT2aUCyKIscmPtKOhjZwL2pQjtGArLUaz7e7oQ9DVHplv OTs6DlrIYSs2wepzFjkj+si60wAKIRIPl7ooaC8tJMxoIrl1yaMpwCCR99KOTQgcO7pcZvQvzD8zG gtLWaUficY7XyJBcRLi7KtW9ecPDQVnutf9Vz5ARwsNtxXmDyl9vLPXo1imgXet+uMX6/uJG+233z 8SrDx4syjI4tahrqjnNZsuEM2hAaEY5kPprf2wF4mdLOHy1FF7Jn3xxSFIrCpVczFy9+Sd0FYfK52 Y++ZBe0lQ==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jtVZ9-0004Wt-ED; Thu, 09 Jul 2020 12:22:15 +0000 Received: from mail.kernel.org ([198.145.29.99]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jtVZ7-0004W5-2U for linux-arm-kernel@lists.infradead.org; Thu, 09 Jul 2020 12:22:13 +0000 Received: from pali.im (pali.im [31.31.79.79]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id DF662206DF; Thu, 9 Jul 2020 12:22:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1594297331; bh=qOFNT6tblN8CGBYOHgoyMwlCS9ntBDtTAmhooTF7pYU=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=KtxyWHHx+5ZItqJHRCkusAhW3YrwOy/2Y2xyNkI/pV3lEuRrgm+jS66grgjwvUf3l 9zwjAReLz1PRnsqUI7uu/bdBdiBVOERfDDyfKHwQNj28ljL4aqeNYexV+tZ35fJf8W 4UUg6xfkT59gMsoFAHOFOtpQuRcYBTDQeC40WSdg= Received: by pali.im (Postfix) id A25CE15A1; Thu, 9 Jul 2020 14:22:08 +0200 (CEST) Date: Thu, 9 Jul 2020 14:22:08 +0200 From: Pali =?utf-8?B?Um9ow6Fy?= To: Lorenzo Pieralisi Subject: Re: [PATCH v3] PCI: aardvark: Don't touch PCIe registers if no card connected Message-ID: <20200709122208.rmfeuu6zgbwh3fr5@pali> References: <20200528143141.29956-1-pali@kernel.org> <20200702083036.12230-1-pali@kernel.org> <20200709113509.GB19638@e121166-lin.cambridge.arm.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20200709113509.GB19638@e121166-lin.cambridge.arm.com> User-Agent: NeoMutt/20180716 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200709_082213_242274_4F0163AA X-CRM114-Status: GOOD ( 31.07 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Tomasz Maciej Nowak , linux-pci@vger.kernel.org, Xogium , linux-kernel@vger.kernel.org, Marek =?utf-8?B?QmVow7pu?= , Remi Pommarel , Thomas Petazzoni , Bjorn Helgaas , linux-arm-kernel@lists.infradead.org, Andrew Murray 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 T24gVGh1cnNkYXkgMDkgSnVseSAyMDIwIDEyOjM1OjA5IExvcmVuem8gUGllcmFsaXNpIHdyb3Rl Ogo+IE9uIFRodSwgSnVsIDAyLCAyMDIwIGF0IDEwOjMwOjM2QU0gKzAyMDAsIFBhbGkgUm9ow6Fy IHdyb3RlOgo+ID4gV2hlbiB0aGVyZSBpcyBubyBQQ0llIGNhcmQgY29ubmVjdGVkIGFuZCBhZHZr X3BjaWVfcmRfY29uZigpIG9yCj4gPiBhZHZrX3BjaWVfd3JfY29uZigpIGlzIGNhbGxlZCBmb3Ig UENJIGJ1cyB3aGljaCBkb2Vzbid0IGJlbG9uZyB0byBlbXVsYXRlZAo+ID4gcm9vdCBicmlkZ2Us IHRoZSBhYXJkdmFyayBkcml2ZXIgdGhyb3dzIHRoZSBmb2xsb3dpbmcgZXJyb3IgbWVzc2FnZToK PiA+IAo+ID4gICBhZHZrLXBjaWUgZDAwNzAwMDAucGNpZTogY29uZmlnIHJlYWQvd3JpdGUgdGlt ZWQgb3V0Cj4gPiAKPiA+IE9idmlvdXNseSBhY2Nlc3NpbmcgUENJZSByZWdpc3RlcnMgb2YgZGlz Y29ubmVjdGVkIGNhcmQgaXMgbm90IHBvc3NpYmxlLgo+ID4gCj4gPiBFeHRlbmQgY2hlY2sgaW4g YWR2a19wY2llX3ZhbGlkX2RldmljZSgpIGZ1bmN0aW9uIGZvciB2YWxpZGF0aW5nCj4gPiBhdmFp bGFiaWxpdHkgb2YgUENJZSBidXMuIElmIFBDSWUgbGluayBpcyBkb3duLCB0aGVuIHRoZSBkZXZp Y2UgaXMgbWFya2VkCj4gPiBhcyBOb3QgRm91bmQgYW5kIHRoZSBkcml2ZXIgZG9lcyBub3QgdHJ5 IHRvIGFjY2VzcyB0aGVzZSByZWdpc3RlcnMuCj4gPiAKPiA+IFRoaXMgaXMganVzdCBhbiBvcHRp bWl6YXRpb24gdG8gcHJldmVudCBhY2Nlc3NpbmcgUENJZSByZWdpc3RlcnMgd2hlbiBjYXJkCj4g PiBpcyBkaXNjb25uZWN0ZWQuIFRyeWluZyB0byBhY2Nlc3MgUENJZSByZWdpc3RlcnMgb2YgZGlz Y29ubmVjdGVkIGNhcmQgZG9lcwo+ID4gbm90IGNhdXNlIGFueSBjcmFzaCwga2VybmVsIGp1c3Qg bmVlZHMgdG8gd2FpdCBmb3IgYSB0aW1lb3V0LiBTbyBpZiBjYXJkCj4gPiBkaXNhcHBlYXIgaW1t ZWRpYXRlbHkgYWZ0ZXIgY2hlY2tpbmcgZm9yIFBDSWUgbGluayAoYmVmb3JlIGFjY2Vzc2luZyBQ Q0llCj4gPiByZWdpc3RlcnMpLCBpdCBkb2VzIG5vdCBjYXVzZSBhbnkgcHJvYmxlbXMuCj4gPiAK PiA+IFNpZ25lZC1vZmYtYnk6IFBhbGkgUm9ow6FyIDxwYWxpQGtlcm5lbC5vcmc+Cj4gPiAKPiA+ IC0tLQo+ID4gQ2hhbmdlcyBpbiBWMzoKPiA+ICogQWRkIGNvbW1lbnQgdG8gdGhlIGNvZGUKPiA+ IENoYW5nZXMgaW4gVjI6Cj4gPiAqIFVwZGF0ZSBjb21taXQgbWVzc2FnZSwgbWVudGlvbiB0aGF0 IHRoaXMgaXMgb3B0aW1pemF0aW9uCj4gPiAtLS0KPiA+ICBkcml2ZXJzL3BjaS9jb250cm9sbGVy L3BjaS1hYXJkdmFyay5jIHwgNyArKysrKysrCj4gPiAgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0 aW9ucygrKQo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2kt YWFyZHZhcmsuYyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWFhcmR2YXJrLmMKPiA+IGlu ZGV4IDkwZmYyOTFjMjRmMC4uZDE4ZjM4OWIzNmExIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9w Y2kvY29udHJvbGxlci9wY2ktYWFyZHZhcmsuYwo+ID4gKysrIGIvZHJpdmVycy9wY2kvY29udHJv bGxlci9wY2ktYWFyZHZhcmsuYwo+ID4gQEAgLTY0NCw2ICs2NDQsMTMgQEAgc3RhdGljIGJvb2wg YWR2a19wY2llX3ZhbGlkX2RldmljZShzdHJ1Y3QgYWR2a19wY2llICpwY2llLCBzdHJ1Y3QgcGNp X2J1cyAqYnVzLAo+ID4gIAlpZiAoKGJ1cy0+bnVtYmVyID09IHBjaWUtPnJvb3RfYnVzX25yKSAm JiBQQ0lfU0xPVChkZXZmbikgIT0gMCkKPiA+ICAJCXJldHVybiBmYWxzZTsKPiA+ICAKPiA+ICsJ LyoKPiA+ICsJICogSWYgdGhlIGxpbmsgZ29lcyBkb3duIGFmdGVyIHdlIGNoZWNrIGZvciBsaW5r LXVwLCBub3RoaW5nIGJhZAo+ID4gKwkgKiBoYXBwZW5zIGJ1dCB0aGUgY29uZmlnIGFjY2VzcyB0 aW1lcyBvdXQuCj4gPiArCSAqLwo+ID4gKwlpZiAoYnVzLT5udW1iZXIgIT0gcGNpZS0+cm9vdF9i dXNfbnIgJiYgIWFkdmtfcGNpZV9saW5rX3VwKHBjaWUpKQo+ID4gKwkJcmV0dXJuIGZhbHNlOwo+ ID4gKwo+ID4gIAlyZXR1cm4gdHJ1ZTsKPiA+ICB9Cj4gCj4gUXVlc3Rpb246IHRoaXMgYmFzaWNh bGx5IG1lYW5zIHRoYXQgeW91IGNhbiBvbmx5IGVmZmVjdGl2ZWx5IGVudW1lcmF0ZQo+IGJ1cyBu dW1iZXIgPT0gcm9vdF9idXNfbnIgYW5kIEFGQUlDUyBpZiBhdCBwcm9iZSB0aGUgbGluayBkaWQg bm90Cj4gY29tZSB1cCBpdCB3aWxsIG5ldmVyIGRvLCB3aWxsIGl0ID8KPiAKPiBJc24ndCB0aGlz IGVxdWl2YWxlbnQgdG8gbGltaXRpbmcgdGhlIGJ1cyBudW1iZXJzIHRoZSBicmlkZ2UgaXMgY2Fw YWJsZQo+IG9mIGhhbmRsaW5nID8KPiAKPiBSZXdvcmRlZDogaWYgaW4gYWR2a19wY2llX3NldHVw X2h3KCkgdGhlIGxpbmsgZG9lcyBub3QgY29tZSB1cCwgd2hhdCdzCj4gdGhlIHBvaW50IG9mIHRy eWluZyB0byBlbnVtZXJhdGUgdGhlIGJ1cyBoaWVyYXJjaHkgYmVsb3cgdGhlIHJvb3QgYnVzID8K CkhlbGxvIExvcmVuem8hCgpQQ0llIGxpbmsgY2FuIHRoZW9yZXRpY2FsbHkgY29tZSB1cCBldmVu IGFmdGVyIGJvb3QsIGJ1dCBhYXJkdmFyayBkcml2ZXIKY3VycmVudGx5IGRvZXMgbm90IHN1cHBv cnQgbGluayBkZXRlY3Rpb24gYXQgcnVudGltZS4gU28gaXQgY2hlY2tzIGFuZAplbnVtZXJhdGUg ZGV2aWNlIG9ubHkgYXQgcHJvYmUgdGltZS4KCkkgZG8gbm90IGtub3cgaWYgaGFyZHdhcmUgaGFz IHNvbWUgbWVjaGFuaXNtIHRvIGluZm9ybSBrZXJuZWwgdGhhdCBQQ0llCmxpbmsgY29tZSB1cCAo b3IgZG93bikgYW5kIHJlLWVudW1lcmF0aW9uIGlzIHJlcXVpcmVkLiBPciB0aGUgb25seQpvcHRp b24gaXMgcG9sbGluZyB2aWEgYWR2a19wY2llX2xpbmtfdXAoKS4KClNvIGlmIGRldmljZSBpcyBu b3QgdmlzaWJsZSBhdCB0aGUgcHJvYmUgdGltZSB0aGVuIGl0IHdvdWxkIG5vdCBhcHBlYXIKaW4g c3lzdGVtIGFuZCBjYW5ub3QgYmUgdXNlZC4gVGhpcyBpcyBjdXJyZW50IHN0YXRlLgoKSnVzdCB0 byBub3RlIHRoYXQgb3VyIGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgcGh5c2ljYWwgaG90cGx1 ZyBvZgptUENJZSBjYXJkcy4gWW91IG5lZWQgdG8gY29ubmVjdCBjYXJkIHdoZW4gYm9hcmQgaXMg cG93ZXJlZCBvZmYuCgpTbyBpZiBhdCB0aGUgYWFyZHZhcmsgcHJvYmUgdGltZSBQQ0llIGxpbmsg aXMgbm90IHVwIHRoZW4gdHJ5aW5nIHRvCmVudW1lcmF0ZSBkZXZpY2VzIHVuZGVyIChzb2Z0d2Fy ZSkgcm9vdCBicmlkZ2UgaXMgbm90IG5lZWRlZC4gQnV0IGl0IGlzCm5lZWRlZCB0byByZWdpc3Rl ci9lbnVtZXJhdGUgc29mdHdhcmUgcm9vdCBicmlkZ2UgZGV2aWNlIGFuZCBjdXJyZW50bHkKYm90 aCBpcyBkb25lIGJ5IG9uZSAocmVjdXJzaXZlKSBjYWxsIHBjaV9ob3N0X3Byb2JlKCkuCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2Vy bmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0 cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVs Cg==