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 F0F89CDB47E for ; Wed, 11 Oct 2023 20:05:17 +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=TgJSnVDk7TPWiV/rxuq2FAKEFVNAwhD6szvELSMhiNE=; b=VFuO6ucsvBfdH7 VX9gpM7d2v3/aY5hzslK65/rpnL/ql50wkZDUKTqhCcjhMPj5Smem4AppEjS2uYDpAlRanhuOgPN9 9sLa+pTPBc95S+NrzLB49Pf8KqWs0VMPCj0prVFhe4LVBq/t5nJaDOZVi2Bo2wo6xp7PdOysGxXQU BTfMTWbwx299AnIuxLJAnoKua6d+omtAqYyikgiE9/g4kS7yZsVcZrwE2CSD7VEtCkC47XGANjdfm zDxXsJlrefZRSuxlA48GIsWsJeIHl0wA9jP11zSGML1PJpesXRY+UnN5/fH+Fuh5zM44Dau352O0b 0OCK5+VSoE/tkqa7PsjA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qqfRs-00Gbl8-2a; Wed, 11 Oct 2023 20:04:52 +0000 Received: from dfw.source.kernel.org ([139.178.84.217]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qqfRo-00Gbil-1n; Wed, 11 Oct 2023 20:04:50 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 8991261717; Wed, 11 Oct 2023 20:04:45 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id C058EC433C9; Wed, 11 Oct 2023 20:04:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1697054685; bh=t2sCnofhI5I34TZiS4s4NHjldG0nyqjMLSLnRs5CtWE=; h=Date:From:To:Cc:Subject:In-Reply-To:From; b=UY/5BqjjHcpXPAmr7QKoHAYWU1fIi3bcQa2ocPxFmtEy00FccPy1ytLe6GRpDBxHd 2cTbNjBrJTNUdToEBDxcUSzaoYeoPDjVN3gfWLc43XA1Ly1t4lFuI/f5CxLUJNNr6t gf7sZzyaOhrBlFVLaM7ZGuZub0mDErySLAFUojE28e0ZtFhDBsv9WKURqpkLkqMJdQ mYJ0vzxHpU7PFtLQDMIVaDLiOj3wPGRN35RqDcfBML64GW9CTvPKlZgLpcVC4DeotT ihJfhl/yrCSwFwuxX+f1NRhXUb2f67KEzSWLkuULmUO1oYjBIfhhO+Sa/HYwpGklof wLnqE4QtkAYOA== Date: Wed, 11 Oct 2023 15:04:42 -0500 From: Bjorn Helgaas To: Ilpo =?utf-8?B?SsOkcnZpbmVu?= Cc: linux-pci@vger.kernel.org, Lorenzo Pieralisi , Rob Herring , Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= , Lukas Wunner , "Rafael J . Wysocki" , Heiner Kallweit , Emmanuel Grumbach , linux-kernel@vger.kernel.org, Bjorn Helgaas , ath10k@lists.infradead.org, ath11k@lists.infradead.org, ath12k@lists.infradead.org, intel-wired-lan@lists.osuosl.org, linux-arm-kernel@lists.infradead.org, linux-bluetooth@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-rdma@vger.kernel.org, linux-wireless@vger.kernel.org, netdev@vger.kernel.org Subject: Re: [PATCH v2 03/13] PCI/ASPM: Disable ASPM when driver requests it Message-ID: <20231011200442.GA1040348@bhelgaas> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20230918131103.24119-4-ilpo.jarvinen@linux.intel.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231011_130448_690604_23C4CA95 X-CRM114-Status: GOOD ( 45.63 ) 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 T24gTW9uLCBTZXAgMTgsIDIwMjMgYXQgMDQ6MTA6NTNQTSArMDMwMCwgSWxwbyBKw6RydmluZW4g d3JvdGU6Cj4gUENJIGNvcmUvQVNQTSBzZXJ2aWNlIGRyaXZlciBhbGxvd3MgY29udHJvbGxpbmcg QVNQTSBzdGF0ZSB0aHJvdWdoCj4gcGNpX2Rpc2FibGVfbGlua19zdGF0ZSgpIGFuZCBwY2lfZW5h YmxlX2xpbmtfc3RhdGUoKSBBUEkuIEl0IHdhcwo+IGRlY2lkZWQgZWFybGllciAoc2VlIHRoZSBM aW5rIGJlbG93KSwgdG8gbm90IGFsbG93IEFTUE0gY2hhbmdlcyB3aGVuIE9TCj4gZG9lcyBub3Qg aGF2ZSBjb250cm9sIG92ZXIgaXQgYnV0IG9ubHkgbG9nIGEgd2FybmluZyBhYm91dCB0aGUgcHJv YmxlbQo+IChjb21taXQgMmFkZDBlYzE0YzI1ICgiUENJL0FTUE06IFdhcm4gd2hlbiBkcml2ZXIg YXNrcyB0byBkaXNhYmxlIEFTUE0sCj4gYnV0IHdlIGNhbid0IGRvIGl0IikpLiBTaW1pbGFybHks IGlmIEFTUE0gaXMgbm90IGVuYWJsZWQgdGhyb3VnaAo+IGNvbmZpZywgQVNQTSBjYW5ub3QgYmUg ZGlzYWJsZWQuCj4gCj4gQSBudW1iZXIgb2YgZHJpdmVycyBoYXZlIGFkZGVkIHdvcmthcm91bmRz IHRvIGZvcmNlIEFTUE0gb2ZmIHdpdGggb3duCj4gd3JpdGVzIGludG8gdGhlIExpbmsgQ29udHJv bCBSZWdpc3RlciAoc29tZSBldmVuIHdpdGggY29tbWVudHMKPiBleHBsYWluaW5nIHdoeSBQQ0kg Y29yZSBkb2VzIG5vdCBkaXNhYmxlIGl0IHVuZGVyIHNvbWUgY2lyY3Vtc3RhbmNlcykuCj4gQWNj b3JkaW5nIHRvIHRoZSBjb21tZW50cywgc29tZSBkcml2ZXJzIHJlcXVpcmUgQVNQTSB0byBiZSBv ZmYgZm9yCj4gcmVsaWFibGUgb3BlcmF0aW9uLgo+IAo+IEhhdmluZyBjdXN0b20gQVNQTSBoYW5k bGluZyBpbiBkcml2ZXJzIGlzIHByb2JsZW1hdGljIGJlY2F1c2UgdGhlIHN0YXRlCj4ga2VwdCBp biB0aGUgQVNQTSBzZXJ2aWNlIGRyaXZlciBpcyBub3QgdXBkYXRlZCBieSB0aGUgY2hhbmdlcyBt YWRlCj4gb3V0c2lkZSB0aGUgbGluayBzdGF0ZSBtYW5hZ2VtZW50IEFQSS4KPiAKPiBBcyB0aGUg Zmlyc3Qgc3RlcCB0byBhZGRyZXNzIHRoaXMgaXNzdWUsIG1ha2UgcGNpX2Rpc2FibGVfbGlua19z dGF0ZSgpCj4gdG8gdW5jb25kaXRpb25hbGx5IGRpc2FibGUgQVNQTSBzbyB0aGUgbW90aXZhdGlv biBmb3IgZHJpdmVycyB0byBjb21lCj4gdXAgd2l0aCBjdXN0b20gQVNQTSBoYW5kbGluZyBjb2Rl IGlzIGVsaW1pbmF0ZWQuCj4gCj4gUGxhY2UgdGhlIG1pbmltYWwgQVNQTSBkaXNhYmxlIGhhbmRs aW5nIGludG8gb3duIGZpbGUgYXMgaXQgaXMgdG9vCj4gY29tcGxpY2F0ZWQgdG8gZml0IGludG8g YSBoZWFkZXIgYXMgc3RhdGljIGlubGluZSBhbmQgaXQgaGFzIGFsbW9zdCBubwo+IG92ZXJsYXAg d2l0aCB0aGUgZXhpc3RpbmcsIG1vcmUgY29tcGxpY2F0ZWQgQVNQTSBjb2RlIGluCj4gZHJpdmVy cy9wY2kvcGNlL2FzcG0uYy4KPiAKPiBNYWtlIHBjaV9kaXNhYmxlX2xpbmtfc3RhdGUoKSBmdW5j dGlvbiBjb21tZW50IHRvIGNvbXBseSBrZXJuZWxkb2MKPiBmb3JtYXR0aW5nIHdoaWxlIGNoYW5n aW5nIHRoZSBkZXNjcmlwdGlvbi4KPiAKPiBMaW5rOiBodHRwczovL2xvcmUua2VybmVsLm9yZy9h bGwvQ0FOVVhfUDNGNVloYlpYM1dHVS1qMUFHcGJYYl9UOUJpczJFcmh2S2tGTXREdnphdFZRQG1h aWwuZ21haWwuY29tLwo+IExpbms6IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2FsbC8yMDIzMDUx MTEzMTQ0MS40NTcwNC0xLWlscG8uamFydmluZW5AbGludXguaW50ZWwuY29tLwo+IFNpZ25lZC1v ZmYtYnk6IElscG8gSsOkcnZpbmVuIDxpbHBvLmphcnZpbmVuQGxpbnV4LmludGVsLmNvbT4KPiAt LS0KPiAgZHJpdmVycy9wY2kvcGNpZS9NYWtlZmlsZSAgICAgICB8ICAxICsKPiAgZHJpdmVycy9w Y2kvcGNpZS9hc3BtLmMgICAgICAgICB8IDMzICsrKysrKysrKystLS0tLS0tCj4gIGRyaXZlcnMv cGNpL3BjaWUvYXNwbV9taW5pbWFsLmMgfCA2NiArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKPiAgaW5jbHVkZS9saW51eC9wY2kuaCAgICAgICAgICAgICB8ICA2ICstLQo+ICA0IGZp bGVzIGNoYW5nZWQsIDg4IGluc2VydGlvbnMoKyksIDE4IGRlbGV0aW9ucygtKQo+ICBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9wY2kvcGNpZS9hc3BtX21pbmltYWwuYwo+IAo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL3BjaS9wY2llL01ha2VmaWxlIGIvZHJpdmVycy9wY2kvcGNpZS9NYWtlZmls ZQo+IGluZGV4IDhkZTRlZDVmOThmMS4uZWM3ZjA0MDM3YjAxIDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvcGNpL3BjaWUvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL3BjaS9wY2llL01ha2VmaWxlCj4g QEAgLTYsNiArNiw3IEBAIHBjaWVwb3J0ZHJ2LXkJCQk6PSBwb3J0ZHJ2Lm8gcmNlYy5vCj4gIAo+ ICBvYmotJChDT05GSUdfUENJRVBPUlRCVVMpCSs9IHBjaWVwb3J0ZHJ2Lm8KPiAgCj4gK29iai15 CQkJCSs9IGFzcG1fbWluaW1hbC5vCgpDYW4gd2UgcHV0IHRoaXMgY29kZSBpbiBkcml2ZXJzL3Bj aS9wY2kuYyBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgbmV3CmZpbGUgZm9yIGl0PyAgcGNpLmMgaXMg a2luZCBvZiBhIGR1bXBpbmcgZ3JvdW5kIGFuZCBpc24ndCBpZGVhbAplaXRoZXIsIGJ1dCB3ZSBk byBoYXZlIGEgZmV3IG90aGVyIHRoaW5ncyB0aGVyZSB0aGF0IHdlICphbHdheXMqIHdhbnQKZXZl biB0aG91Z2ggdGhleSdyZSByZWxhdGVkIHRvIGEgc2VwYXJhdGUgS2NvbmZpZyBmZWF0dXJlLCBl LmcuLApwY2lfYnJpZGdlX3JlY29uZmlndXJlX2x0cigpLCBwY2llX2NsZWFyX2RldmljZV9zdGF0 dXMoKSwKcGNpZV9jbGVhcl9yb290X3BtZV9zdGF0dXMoKS4KCj4gIG9iai0kKENPTkZJR19QQ0lF QVNQTSkJCSs9IGFzcG0ubwoKT3IgbWF5YmUgaXQgd291bGQgYmUgYmV0dGVyIHRvIGp1c3QgcHV0 IGl0IGluIGFzcG0uYywgZHJvcCB0aGlzCmNvbXBpbGF0aW9uIGd1YXJkLCBhbmQgd3JhcCB0aGUg cmVzdCBvZiB0aGUgZmlsZSBpbiAjaWZkZWYKQ09ORklHX1BDSUVBU1BNLiAgVGhlbiBldmVyeXRo aW5nIHdvdWxkIGJlIGluIG9uZSBmaWxlLCB3aGljaCBpcyBhCm1ham9yIGJvb24gZm9yIGNvZGUg cmVhZGVycy4KCldoYXQgZG8geW91IHRoaW5rPwoKPiAgb2JqLSQoQ09ORklHX1BDSUVBRVIpCQkr PSBhZXIubyBlcnIubwo+ICBvYmotJChDT05GSUdfUENJRUFFUl9JTkpFQ1QpCSs9IGFlcl9pbmpl Y3Qubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL2FzcG0uYyBiL2RyaXZlcnMvcGNp L3BjaWUvYXNwbS5jCj4gaW5kZXggODYwYmM5NDk3NGVjLi5lYzZkN2EwOTJhYzEgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9wY2kvcGNpZS9hc3BtLmMKPiArKysgYi9kcml2ZXJzL3BjaS9wY2llL2Fz cG0uYwo+IEBAIC0xMDQyLDE2ICsxMDQyLDIzIEBAIHN0YXRpYyBpbnQgX19wY2lfZGlzYWJsZV9s aW5rX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgc3RhdGUsIGJvb2wgc2VtKQo+ICAJ CXJldHVybiAtRUlOVkFMOwo+ICAJLyoKPiAgCSAqIEEgZHJpdmVyIHJlcXVlc3RlZCB0aGF0IEFT UE0gYmUgZGlzYWJsZWQgb24gdGhpcyBkZXZpY2UsIGJ1dAo+IC0JICogaWYgd2UgZG9uJ3QgaGF2 ZSBwZXJtaXNzaW9uIHRvIG1hbmFnZSBBU1BNIChlLmcuLCBvbiBBQ1BJCj4gKwkgKiBpZiB3ZSBt aWdodCBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG1hbmFnZSBBU1BNIChlLmcuLCBvbiBBQ1BJCj4g IAkgKiBzeXN0ZW1zIHdlIGhhdmUgdG8gb2JzZXJ2ZSB0aGUgRkFEVCBBQ1BJX0ZBRFRfTk9fQVNQ TSBiaXQgYW5kCj4gLQkgKiB0aGUgX09TQyBtZXRob2QpLCB3ZSBjYW4ndCBob25vciB0aGF0IHJl cXVlc3QuICBXaW5kb3dzIGhhcwo+IC0JICogYSBzaW1pbGFyIG1lY2hhbmlzbSB1c2luZyAiUGNp QVNQTU9wdE91dCIsIHdoaWNoIGlzIGFsc28KPiAtCSAqIGlnbm9yZWQgaW4gdGhpcyBzaXR1YXRp b24uCj4gKwkgKiB0aGUgX09TQyBtZXRob2QpLCBwcmV2aW91c2x5IHdlIGNob3NlIHRvIG5vdCBo b25vciBkaXNhYmxlCj4gKwkgKiByZXF1ZXN0IGluIHRoYXQgY2FzZS4gV2luZG93cyBoYXMgYSBz aW1pbGFyIG1lY2hhbmlzbSB1c2luZwo+ICsJICogIlBjaUFTUE1PcHRPdXQiLCB3aGljaCBpcyBh bHNvIGlnbm9yZWQgaW4gdGhpcyBzaXR1YXRpb24uCj4gKwkgKgo+ICsJICogTm90IGhvbm9yaW5n IHRoZSByZXF1ZXN0cyB0byBkaXNhYmxlIEFTUE0sIGhvd2V2ZXIsIGxlZCB0bwo+ICsJICogZHJp dmVycyBmb3JjaW5nIEFTUE0gb2ZmIG9uIHRoZWlyIG93bi4gQXMgc3VjaCBjaGFuZ2VzIG9mIEFT UE0KPiArCSAqIHN0YXRlIGFyZSBub3QgdHJhY2tlZCBieSB0aGlzIHNlcnZpY2UgZHJpdmVyLCB0 aGUgc3RhdGUga2VwdCBoZXJlCj4gKwkgKiBiZWNhbWUgb3V0IG9mIHN5bmMuCj4gKwkgKgo+ICsJ ICogVGhlcmVmb3JlLCBob25vciBBU1BNIGRpc2FibGUgcmVxdWVzdHMgZXZlbiB3aGVuIE9TIGRv ZXMgbm90IGhhdmUKPiArCSAqIEFTUE0gY29udHJvbC4gUGxhaW4gZGlzYWJsZSBmb3IgQVNQTSBp cyBhc3N1bWVkIHRvIGJlIHNsaWdodGx5Cj4gKwkgKiBzYWZlciB0aGFuIGZ1bGx5IG1hbmFnaW5n IGl0Lgo+ICAJICovCj4gLQlpZiAoYXNwbV9kaXNhYmxlZCkgewo+IC0JCXBjaV93YXJuKHBkZXYs ICJjYW4ndCBkaXNhYmxlIEFTUE07IE9TIGRvZXNuJ3QgaGF2ZSBBU1BNIGNvbnRyb2xcbiIpOwo+ IC0JCXJldHVybiAtRVBFUk07Cj4gLQl9Cj4gKwlpZiAoYXNwbV9kaXNhYmxlZCkKPiArCQlwY2lf d2FybihwZGV2LCAiT1MgZG9lc24ndCBoYXZlIEFTUE0gY29udHJvbCwgZGlzYWJsaW5nIEFTUE0g YW55d2F5XG4iKTsKCkkgdGhpbmsgdGhpcyBpcyBiZXR0ZXIgdGhhbiB0aGUgcHJldmlvdXMgc2l0 dWF0aW9uLCBidXQgSSB0aGluayB3ZQpzaG91bGQgdGFpbnQgdGhlIGtlcm5lbCBoZXJlIGJlY2F1 c2UgaXQncyBwb3NzaWJsZSB0aGUgZmlybXdhcmUgaGFkIGEKcmVhc29uIGZvciByZXRhaW5pbmcg QVNQTSBjb250cm9sLCBzbyB3ZSBtaWdodCBiZSBzdGVwcGluZyBvbgpzb21ldGhpbmcuICBBcmd1 YWJseSB0aGUgbWVzc2FnZSBpcyBhbHJlYWR5IGVub3VnaCBvZiBhIHNpZ25hbCwgYnV0CmNoZWNr aW5nIGZvciBhIHRhaW50IGlzIHBvdGVudGlhbGx5IGEgbGl0dGxlIG1vcmUgYXV0b21hdGFibGUu Cgo+ICtpbnQgcGNpX2Rpc2FibGVfbGlua19zdGF0ZV9sb2NrZWQoc3RydWN0IHBjaV9kZXYgKnBk ZXYsIGludCBzdGF0ZSkKPiArewo+ICsJc3RydWN0IHBjaV9kZXYgKnBhcmVudCA9IHBkZXYtPmJ1 cy0+c2VsZjsKPiArCXN0cnVjdCBwY2lfYnVzICpsaW5rYnVzID0gcGRldi0+YnVzOwo+ICsJc3Ry dWN0IHBjaV9kZXYgKmNoaWxkOwo+ICsJdTE2IGFzcG1fZW5hYmxlZCwgbGlua2N0bDsKPiArCWlu dCByZXQ7Cj4gKwo+ICsJaWYgKCFwYXJlbnQpCj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwo+ICsJ cmV0ID0gcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChwYXJlbnQsIFBDSV9FWFBfTE5LQ1RMLCAm bGlua2N0bCk7Cj4gKwlpZiAocmV0ICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkKPiArCQlyZXR1cm4g cGNpYmlvc19lcnJfdG9fZXJybm8ocmV0KTsKPiArCWFzcG1fZW5hYmxlZCA9IGxpbmtjdGwgJiBQ Q0lfRVhQX0xOS0NUTF9BU1BNQzsKCkluIHRoaXMgY2FzZSwgd2UgZG9uJ3QgY2FyZSBhYm91dCB0 aGUgc2hpZnQgb2Zmc2V0IG9mIHRoZQpQQ0lfRVhQX0xOS0NUTF9BU1BNQyBiaXRmaWVsZCwgYnV0 IGlmIHdlIHVzZSBGSUVMRF9HRVQoKSBpbiBtb3N0L2FsbApvdGhlciBjYXNlcyB3aGVyZSB3ZSBs b29rIGF0IFBDSV9FWFBfTE5LQ1RMLCBtYXliZSBpdCB3b3VsZCBiZSB3b3J0aAp1c2luZyBpdCBo ZXJlIGFzIHdlbGw/CgpUYW5nZW50LCBidXQgSSdtIGFsd2F5cyBkdWJpb3VzIGFib3V0IHRoZSBp ZGVhIHRoYXQgZTEwMDBlIGlzIHNvCnNwZWNpYWwgdGhhdCBvbmx5IHRoZXJlIGRvIHdlIG5lZWQg dGhlICJfbG9ja2VkIiB2YXJpYW50IG9mIHRoaXMKZnVuY3Rpb24uICBObyBzdWdnZXN0aW9uIHRo b3VnaDsgbm8gbmVlZCB0byBkbyBhbnl0aGluZyBhYm91dCBpdCBpbgp0aGlzIHNlcmllcyA7KQoK PiArCXJldCA9IHBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQocGRldiwgUENJX0VYUF9MTktDVEws ICZsaW5rY3RsKTsKPiArCWlmIChyZXQgIT0gUENJQklPU19TVUNDRVNTRlVMKQo+ICsJCXJldHVy biBwY2liaW9zX2Vycl90b19lcnJubyhyZXQpOwo+ICsJYXNwbV9lbmFibGVkIHw9IGxpbmtjdGwg JiBQQ0lfRVhQX0xOS0NUTF9BU1BNQzsKPiArCj4gKwkvKiBJZiBubyBzdGF0ZXMgbmVlZCB0byBi ZSBkaXNhYmxlZCwgZG9uJ3QgdG91Y2ggTE5LQ1RMICovCj4gKwlpZiAoc3RhdGUgJiBhc3BtX2Vu YWJsZWQpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJcmV0ID0gcGNpZV9jYXBhYmlsaXR5X2NsZWFy X3dvcmQocGFyZW50LCBQQ0lfRVhQX0xOS0NUTCwgUENJX0VYUF9MTktDVExfQVNQTUMpOwo+ICsJ aWYgKHJldCAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpCj4gKwkJcmV0dXJuIHBjaWJpb3NfZXJyX3Rv X2Vycm5vKHJldCk7Cj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoaWxkLCAmbGlua2J1cy0+ZGV2 aWNlcywgYnVzX2xpc3QpCj4gKwkJcGNpZV9jYXBhYmlsaXR5X2NsZWFyX3dvcmQoY2hpbGQsIFBD SV9FWFBfTE5LQ1RMLCBQQ0lfRVhQX0xOS0NUTF9BU1BNQyk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4g K30KPiArRVhQT1JUX1NZTUJPTChwY2lfZGlzYWJsZV9saW5rX3N0YXRlX2xvY2tlZCk7CgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2Vy bmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0 cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVs Cg==