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=-2.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=no 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 2CE23C4CECD for ; Mon, 27 Apr 2020 18:34:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 122BD205C9 for ; Mon, 27 Apr 2020 18:34:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726456AbgD0Sep (ORCPT ); Mon, 27 Apr 2020 14:34:45 -0400 Received: from bhuna.collabora.co.uk ([46.235.227.227]:40318 "EHLO bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726230AbgD0Seo (ORCPT ); Mon, 27 Apr 2020 14:34:44 -0400 Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: andrzej.p) with ESMTPSA id BAEC52A0D29 Subject: Re: [PATCH v3 2/2] thermal: core: Stop polling DISABLED thermal devices To: "Zhang, Rui" , "'linux-pm@vger.kernel.org'" Cc: "'Rafael J . Wysocki'" , 'Len Brown' , 'Jiri Pirko' , 'Ido Schimmel' , "'David S . Miller'" , 'Peter Kaestle' , 'Darren Hart' , 'Andy Shevchenko' , 'Support Opensource' , 'Daniel Lezcano' , 'Amit Kucheria' , 'Shawn Guo' , 'Sascha Hauer' , 'Pengutronix Kernel Team' , 'Fabio Estevam' , 'NXP Linux Team' , 'Heiko Stuebner' , 'Orson Zhai' , 'Baolin Wang' , 'Chunyan Zhang' , "'linux-acpi@vger.kernel.org'" , "'netdev@vger.kernel.org'" , "'platform-driver-x86@vger.kernel.org'" , "'linux-arm-kernel@lists.infradead.org'" , "'kernel@collabora.com'" , 'Barlomiej Zolnierkiewicz' References: <20200423165705.13585-1-andrzej.p@collabora.com> <20200423165705.13585-3-andrzej.p@collabora.com> <744357E9AAD1214791ACBA4B0B90926377CF60E3@SHSMSX108.ccr.corp.intel.com> <744357E9AAD1214791ACBA4B0B90926377CF9A10@SHSMSX108.ccr.corp.intel.com> From: Andrzej Pietrasiewicz Message-ID: Date: Mon, 27 Apr 2020 20:34:35 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: <744357E9AAD1214791ACBA4B0B90926377CF9A10@SHSMSX108.ccr.corp.intel.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Sender: linux-acpi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org Hi, W dniu 27.04.2020 o 16:20, Zhang, Rui pisze: > > >> -----Original Message----- >> From: Zhang, Rui >> Sent: Friday, April 24, 2020 5:03 PM >> To: Andrzej Pietrasiewicz ; linux- >> pm@vger.kernel.org >> Cc: Rafael J . Wysocki ; Len Brown ; >> Jiri Pirko ; Ido Schimmel ; David >> S . Miller ; Peter Kaestle ; Darren >> Hart ; Andy Shevchenko ; >> Support Opensource ; Daniel Lezcano >> ; Amit Kucheria >> ; Shawn Guo ; >> Sascha Hauer ; Pengutronix Kernel Team >> ; Fabio Estevam ; NXP >> Linux Team ; Heiko Stuebner ; >> Orson Zhai ; Baolin Wang >> ; Chunyan Zhang ; linux- >> acpi@vger.kernel.org; netdev@vger.kernel.org; platform-driver- >> x86@vger.kernel.org; linux-arm-kernel@lists.infradead.org; >> kernel@collabora.com; Barlomiej Zolnierkiewicz >> Subject: RE: [PATCH v3 2/2] thermal: core: Stop polling DISABLED thermal >> devices >> >> Hi, Andrzej, >> >> Thanks for the patches. My Linux laptop was broken and won't get fixed till >> next week, so I may lost some of the discussions previously. >> >>> -----Original Message----- >>> From: Andrzej Pietrasiewicz >>> Sent: Friday, April 24, 2020 12:57 AM >>> To: linux-pm@vger.kernel.org >>> Cc: Zhang, Rui ; Rafael J . Wysocki >>> ; Len Brown ; Jiri Pirko >>> ; Ido Schimmel ; David S . >>> Miller ; Peter Kaestle ; Darren >>> Hart ; Andy Shevchenko ; >>> Support Opensource ; Daniel Lezcano >>> ; Amit Kucheria >>> ; Shawn Guo ; >> Sascha >>> Hauer ; Pengutronix Kernel Team >>> ; Fabio Estevam ; NXP >> Linux >>> Team ; Heiko Stuebner ; Orson >> Zhai >>> ; Baolin Wang ; >> Chunyan >>> Zhang ; linux- acpi@vger.kernel.org; >>> netdev@vger.kernel.org; platform-driver- x86@vger.kernel.org; >>> linux-arm-kernel@lists.infradead.org; >>> kernel@collabora.com; Andrzej Pietrasiewicz ; >>> Barlomiej Zolnierkiewicz >>> Subject: [PATCH v3 2/2] thermal: core: Stop polling DISABLED thermal >>> devices >>> Importance: High >>> >>> Polling DISABLED devices is not desired, as all such "disabled" >>> devices are meant to be handled by userspace. This patch introduces >>> and uses >>> should_stop_polling() to decide whether the device should be polled or >> not. >>> >> Thanks for the fix, and IMO, this reveal some more problems. >> Say, we need to define "DISABLED" thermal zone. >> Can we read the temperature? Can we trust the trip point value? >> >> IMO, a disabled thermal zone does not mean it is handled by userspace, >> because that is what the userspace governor designed for. >> Instead, if a thermal zone is disabled, in thermal_zone_device_update(), we >> should basically skip all the other operations as well. >> > I overlooked the last line of the patch. So thermal_zone_device_update() returns > immediately if the thermal zone is disabled, right? > > But how can we stop polling in this case? It does stop. However, I indeed observe an extra call to thermal_zone_device_update() before it fully stops. I think what happens is this: - storing "disabled" in mode ends up in thermal_zone_device_set_mode(), which calls driver's ->set_mode() and then calls thermal_zone_device_update(), which returns immediately and does not touch the tz->poll_queue delayed work - thermal_zone_device_update() is called from the delayed work when its time comes and this time it also returns immediately, not modifying the said delayed work, so polling effectively stops now. > There is no chance to call into monitor_thermal_zone() in thermal_zone_device_update(), > or do I miss something? Without the last "if" statement in this patch polling stops with the first call to thermal_zone_device_update() because it indeed disables the delayed work. So you are probably right - that last "if" should not be introduced. > >> I'll try your patches and probably make an incremental patch. > > I have finished a small patch set to improve this based on my understanding, and will post it > tomorrow after testing. > Is your small patchset based on top of this series or is it a completely rewritten version? Andrzej From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrzej Pietrasiewicz Subject: Re: [PATCH v3 2/2] thermal: core: Stop polling DISABLED thermal devices Date: Mon, 27 Apr 2020 20:34:35 +0200 Message-ID: References: <20200423165705.13585-1-andrzej.p@collabora.com> <20200423165705.13585-3-andrzej.p@collabora.com> <744357E9AAD1214791ACBA4B0B90926377CF60E3@SHSMSX108.ccr.corp.intel.com> <744357E9AAD1214791ACBA4B0B90926377CF9A10@SHSMSX108.ccr.corp.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Return-path: In-Reply-To: <744357E9AAD1214791ACBA4B0B90926377CF9A10@SHSMSX108.ccr.corp.intel.com> Content-Language: en-US Sender: netdev-owner@vger.kernel.org To: "Zhang, Rui" , "'linux-pm@vger.kernel.org'" Cc: "'Rafael J . Wysocki'" , 'Len Brown' , 'Jiri Pirko' , 'Ido Schimmel' , "'David S . Miller'" , 'Peter Kaestle' , 'Darren Hart' , 'Andy Shevchenko' , 'Support Opensource' , 'Daniel Lezcano' , 'Amit Kucheria' , 'Shawn Guo' , 'Sascha Hauer' , 'Pengutronix Kernel Team' , 'Fabio Estevam' , 'NXP Linux Team' , 'Heiko Stuebner' , 'Orson Zhai' , 'Baolin Wang' List-Id: platform-driver-x86.vger.kernel.org Hi, W dniu 27.04.2020 o 16:20, Zhang, Rui pisze: > > >> -----Original Message----- >> From: Zhang, Rui >> Sent: Friday, April 24, 2020 5:03 PM >> To: Andrzej Pietrasiewicz ; linux- >> pm@vger.kernel.org >> Cc: Rafael J . Wysocki ; Len Brown ; >> Jiri Pirko ; Ido Schimmel ; David >> S . Miller ; Peter Kaestle ; Darren >> Hart ; Andy Shevchenko ; >> Support Opensource ; Daniel Lezcano >> ; Amit Kucheria >> ; Shawn Guo ; >> Sascha Hauer ; Pengutronix Kernel Team >> ; Fabio Estevam ; NXP >> Linux Team ; Heiko Stuebner ; >> Orson Zhai ; Baolin Wang >> ; Chunyan Zhang ; linux- >> acpi@vger.kernel.org; netdev@vger.kernel.org; platform-driver- >> x86@vger.kernel.org; linux-arm-kernel@lists.infradead.org; >> kernel@collabora.com; Barlomiej Zolnierkiewicz >> Subject: RE: [PATCH v3 2/2] thermal: core: Stop polling DISABLED thermal >> devices >> >> Hi, Andrzej, >> >> Thanks for the patches. My Linux laptop was broken and won't get fixed till >> next week, so I may lost some of the discussions previously. >> >>> -----Original Message----- >>> From: Andrzej Pietrasiewicz >>> Sent: Friday, April 24, 2020 12:57 AM >>> To: linux-pm@vger.kernel.org >>> Cc: Zhang, Rui ; Rafael J . Wysocki >>> ; Len Brown ; Jiri Pirko >>> ; Ido Schimmel ; David S . >>> Miller ; Peter Kaestle ; Darren >>> Hart ; Andy Shevchenko ; >>> Support Opensource ; Daniel Lezcano >>> ; Amit Kucheria >>> ; Shawn Guo ; >> Sascha >>> Hauer ; Pengutronix Kernel Team >>> ; Fabio Estevam ; NXP >> Linux >>> Team ; Heiko Stuebner ; Orson >> Zhai >>> ; Baolin Wang ; >> Chunyan >>> Zhang ; linux- acpi@vger.kernel.org; >>> netdev@vger.kernel.org; platform-driver- x86@vger.kernel.org; >>> linux-arm-kernel@lists.infradead.org; >>> kernel@collabora.com; Andrzej Pietrasiewicz ; >>> Barlomiej Zolnierkiewicz >>> Subject: [PATCH v3 2/2] thermal: core: Stop polling DISABLED thermal >>> devices >>> Importance: High >>> >>> Polling DISABLED devices is not desired, as all such "disabled" >>> devices are meant to be handled by userspace. This patch introduces >>> and uses >>> should_stop_polling() to decide whether the device should be polled or >> not. >>> >> Thanks for the fix, and IMO, this reveal some more problems. >> Say, we need to define "DISABLED" thermal zone. >> Can we read the temperature? Can we trust the trip point value? >> >> IMO, a disabled thermal zone does not mean it is handled by userspace, >> because that is what the userspace governor designed for. >> Instead, if a thermal zone is disabled, in thermal_zone_device_update(), we >> should basically skip all the other operations as well. >> > I overlooked the last line of the patch. So thermal_zone_device_update() returns > immediately if the thermal zone is disabled, right? > > But how can we stop polling in this case? It does stop. However, I indeed observe an extra call to thermal_zone_device_update() before it fully stops. I think what happens is this: - storing "disabled" in mode ends up in thermal_zone_device_set_mode(), which calls driver's ->set_mode() and then calls thermal_zone_device_update(), which returns immediately and does not touch the tz->poll_queue delayed work - thermal_zone_device_update() is called from the delayed work when its time comes and this time it also returns immediately, not modifying the said delayed work, so polling effectively stops now. > There is no chance to call into monitor_thermal_zone() in thermal_zone_device_update(), > or do I miss something? Without the last "if" statement in this patch polling stops with the first call to thermal_zone_device_update() because it indeed disables the delayed work. So you are probably right - that last "if" should not be introduced. > >> I'll try your patches and probably make an incremental patch. > > I have finished a small patch set to improve this based on my understanding, and will post it > tomorrow after testing. > Is your small patchset based on top of this series or is it a completely rewritten version? Andrzej 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=-2.2 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,UNPARSEABLE_RELAY,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=no 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 057F9C54EEB for ; Mon, 27 Apr 2020 18:34:49 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id C06F2217BA for ; Mon, 27 Apr 2020 18:34:48 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="JngeeRk0" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C06F2217BA Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=collabora.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-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=bombadil.20170209; h=Sender:Content-Type: Content-Transfer-Encoding:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=3M2HocSuJFrs9jLVOhp5feOvS8jdeqsLstgA2gYiSw0=; b=JngeeRk093+RRAHkIryqpAu/q C7fqbbA9axnQLlB5FF0CENT428tqkBQu+iPWxNKs0FROxbNofSIIW4urX7wQbl4AqJzP9zYjBDB5U wSxHYbrBgmK938GgrmpcU4QREWvCLzkWAA8f69BTsVCGQQt3jqagVGoAUa7u86vna9/XrEy9oQNqh Z9beIsE5lPNbK0Vtc14dVKi/dDqQRreNG8kcZORCLvkvnq+bkLVOzjZWEx44Q63cWPrbJgpbRVRxN SbMlse2E0X+kWnE5xl7JvHZDqSJ0w3Hb/HlwicDhvu7njGe+vCoJMwN97zceeLUpJ9cxaWFVUzCYJ 7dxdEcxcA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jT8ae-0005a5-BS; Mon, 27 Apr 2020 18:34:48 +0000 Received: from bhuna.collabora.co.uk ([46.235.227.227]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jT8aa-0005YV-Dh for linux-arm-kernel@lists.infradead.org; Mon, 27 Apr 2020 18:34:46 +0000 Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: andrzej.p) with ESMTPSA id BAEC52A0D29 Subject: Re: [PATCH v3 2/2] thermal: core: Stop polling DISABLED thermal devices To: "Zhang, Rui" , "'linux-pm@vger.kernel.org'" References: <20200423165705.13585-1-andrzej.p@collabora.com> <20200423165705.13585-3-andrzej.p@collabora.com> <744357E9AAD1214791ACBA4B0B90926377CF60E3@SHSMSX108.ccr.corp.intel.com> <744357E9AAD1214791ACBA4B0B90926377CF9A10@SHSMSX108.ccr.corp.intel.com> From: Andrzej Pietrasiewicz Message-ID: Date: Mon, 27 Apr 2020 20:34:35 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: <744357E9AAD1214791ACBA4B0B90926377CF9A10@SHSMSX108.ccr.corp.intel.com> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200427_113444_723090_F3A85338 X-CRM114-Status: GOOD ( 18.44 ) 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: 'Heiko Stuebner' , 'Peter Kaestle' , "'platform-driver-x86@vger.kernel.org'" , "'kernel@collabora.com'" , 'Fabio Estevam' , 'Amit Kucheria' , 'Chunyan Zhang' , 'Daniel Lezcano' , "'linux-acpi@vger.kernel.org'" , 'NXP Linux Team' , 'Orson Zhai' , 'Len Brown' , 'Barlomiej Zolnierkiewicz' , 'Sascha Hauer' , 'Ido Schimmel' , 'Jiri Pirko' , 'Darren Hart' , "'linux-arm-kernel@lists.infradead.org'" , 'Support Opensource' , "'netdev@vger.kernel.org'" , "'Rafael J . Wysocki'" , 'Pengutronix Kernel Team' , 'Baolin Wang' , 'Shawn Guo' , "'David S . Miller'" , 'Andy Shevchenko' Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGksCgpXIGRuaXUgMjcuMDQuMjAyMCBvwqAxNjoyMCwgWmhhbmcsIFJ1aSBwaXN6ZToKPiAKPiAK Pj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KPj4gRnJvbTogWmhhbmcsIFJ1aQo+PiBTZW50 OiBGcmlkYXksIEFwcmlsIDI0LCAyMDIwIDU6MDMgUE0KPj4gVG86IEFuZHJ6ZWogUGlldHJhc2ll d2ljeiA8YW5kcnplai5wQGNvbGxhYm9yYS5jb20+OyBsaW51eC0KPj4gcG1Admdlci5rZXJuZWwu b3JnCj4+IENjOiBSYWZhZWwgSiAuIFd5c29ja2kgPHJqd0Byand5c29ja2kubmV0PjsgTGVuIEJy b3duIDxsZW5iQGtlcm5lbC5vcmc+Owo+PiBKaXJpIFBpcmtvIDxqaXJpQG1lbGxhbm94LmNvbT47 IElkbyBTY2hpbW1lbCA8aWRvc2NoQG1lbGxhbm94LmNvbT47IERhdmlkCj4+IFMgLiBNaWxsZXIg PGRhdmVtQGRhdmVtbG9mdC5uZXQ+OyBQZXRlciBLYWVzdGxlIDxwZXRlckBwaWllLm5ldD47IERh cnJlbgo+PiBIYXJ0IDxkdmhhcnRAaW5mcmFkZWFkLm9yZz47IEFuZHkgU2hldmNoZW5rbyA8YW5k eUBpbmZyYWRlYWQub3JnPjsKPj4gU3VwcG9ydCBPcGVuc291cmNlIDxzdXBwb3J0Lm9wZW5zb3Vy Y2VAZGlhc2VtaS5jb20+OyBEYW5pZWwgTGV6Y2Fubwo+PiA8ZGFuaWVsLmxlemNhbm9AbGluYXJv Lm9yZz47IEFtaXQgS3VjaGVyaWEKPj4gPGFtaXQua3VjaGVyaWFAdmVyZHVyZW50LmNvbT47IFNo YXduIEd1byA8c2hhd25ndW9Aa2VybmVsLm9yZz47Cj4+IFNhc2NoYSBIYXVlciA8cy5oYXVlckBw ZW5ndXRyb25peC5kZT47IFBlbmd1dHJvbml4IEtlcm5lbCBUZWFtCj4+IDxrZXJuZWxAcGVuZ3V0 cm9uaXguZGU+OyBGYWJpbyBFc3RldmFtIDxmZXN0ZXZhbUBnbWFpbC5jb20+OyBOWFAKPj4gTGlu dXggVGVhbSA8bGludXgtaW14QG54cC5jb20+OyBIZWlrbyBTdHVlYm5lciA8aGVpa29Ac250ZWNo LmRlPjsKPj4gT3Jzb24gWmhhaSA8b3Jzb256aGFpQGdtYWlsLmNvbT47IEJhb2xpbiBXYW5nCj4+ IDxiYW9saW4ud2FuZzdAZ21haWwuY29tPjsgQ2h1bnlhbiBaaGFuZyA8emhhbmcubHlyYUBnbWFp bC5jb20+OyBsaW51eC0KPj4gYWNwaUB2Z2VyLmtlcm5lbC5vcmc7IG5ldGRldkB2Z2VyLmtlcm5l bC5vcmc7IHBsYXRmb3JtLWRyaXZlci0KPj4geDg2QHZnZXIua2VybmVsLm9yZzsgbGludXgtYXJt LWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnOwo+PiBrZXJuZWxAY29sbGFib3JhLmNvbTsgQmFy bG9taWVqIFpvbG5pZXJraWV3aWN6IDxiLnpvbG5pZXJraWVAc2Ftc3VuZy5jb20+Cj4+IFN1Ympl Y3Q6IFJFOiBbUEFUQ0ggdjMgMi8yXSB0aGVybWFsOiBjb3JlOiBTdG9wIHBvbGxpbmcgRElTQUJM RUQgdGhlcm1hbAo+PiBkZXZpY2VzCj4+Cj4+IEhpLCBBbmRyemVqLAo+Pgo+PiBUaGFua3MgZm9y IHRoZSBwYXRjaGVzLiBNeSBMaW51eCBsYXB0b3Agd2FzIGJyb2tlbiBhbmQgd29uJ3QgZ2V0IGZp eGVkIHRpbGwKPj4gbmV4dCB3ZWVrLCBzbyBJIG1heSBsb3N0IHNvbWUgb2YgdGhlIGRpc2N1c3Np b25zIHByZXZpb3VzbHkuCj4+Cj4+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+Pj4gRnJv bTogQW5kcnplaiBQaWV0cmFzaWV3aWN6IDxhbmRyemVqLnBAY29sbGFib3JhLmNvbT4KPj4+IFNl bnQ6IEZyaWRheSwgQXByaWwgMjQsIDIwMjAgMTI6NTcgQU0KPj4+IFRvOiBsaW51eC1wbUB2Z2Vy Lmtlcm5lbC5vcmcKPj4+IENjOiBaaGFuZywgUnVpIDxydWkuemhhbmdAaW50ZWwuY29tPjsgUmFm YWVsIEogLiBXeXNvY2tpCj4+PiA8cmp3QHJqd3lzb2NraS5uZXQ+OyBMZW4gQnJvd24gPGxlbmJA a2VybmVsLm9yZz47IEppcmkgUGlya28KPj4+IDxqaXJpQG1lbGxhbm94LmNvbT47IElkbyBTY2hp bW1lbCA8aWRvc2NoQG1lbGxhbm94LmNvbT47IERhdmlkIFMgLgo+Pj4gTWlsbGVyIDxkYXZlbUBk YXZlbWxvZnQubmV0PjsgUGV0ZXIgS2Flc3RsZSA8cGV0ZXJAcGlpZS5uZXQ+OyBEYXJyZW4KPj4+ IEhhcnQgPGR2aGFydEBpbmZyYWRlYWQub3JnPjsgQW5keSBTaGV2Y2hlbmtvIDxhbmR5QGluZnJh ZGVhZC5vcmc+Owo+Pj4gU3VwcG9ydCBPcGVuc291cmNlIDxzdXBwb3J0Lm9wZW5zb3VyY2VAZGlh c2VtaS5jb20+OyBEYW5pZWwgTGV6Y2Fubwo+Pj4gPGRhbmllbC5sZXpjYW5vQGxpbmFyby5vcmc+ OyBBbWl0IEt1Y2hlcmlhCj4+PiA8YW1pdC5rdWNoZXJpYUB2ZXJkdXJlbnQuY29tPjsgU2hhd24g R3VvIDxzaGF3bmd1b0BrZXJuZWwub3JnPjsKPj4gU2FzY2hhCj4+PiBIYXVlciA8cy5oYXVlckBw ZW5ndXRyb25peC5kZT47IFBlbmd1dHJvbml4IEtlcm5lbCBUZWFtCj4+PiA8a2VybmVsQHBlbmd1 dHJvbml4LmRlPjsgRmFiaW8gRXN0ZXZhbSA8ZmVzdGV2YW1AZ21haWwuY29tPjsgTlhQCj4+IExp bnV4Cj4+PiBUZWFtIDxsaW51eC1pbXhAbnhwLmNvbT47IEhlaWtvIFN0dWVibmVyIDxoZWlrb0Bz bnRlY2guZGU+OyBPcnNvbgo+PiBaaGFpCj4+PiA8b3Jzb256aGFpQGdtYWlsLmNvbT47IEJhb2xp biBXYW5nIDxiYW9saW4ud2FuZzdAZ21haWwuY29tPjsKPj4gQ2h1bnlhbgo+Pj4gWmhhbmcgPHpo YW5nLmx5cmFAZ21haWwuY29tPjsgbGludXgtIGFjcGlAdmdlci5rZXJuZWwub3JnOwo+Pj4gbmV0 ZGV2QHZnZXIua2VybmVsLm9yZzsgcGxhdGZvcm0tZHJpdmVyLSB4ODZAdmdlci5rZXJuZWwub3Jn Owo+Pj4gbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnOwo+Pj4ga2VybmVsQGNv bGxhYm9yYS5jb207IEFuZHJ6ZWogUGlldHJhc2lld2ljeiA8YW5kcnplai5wQGNvbGxhYm9yYS5j b20+Owo+Pj4gQmFybG9taWVqIFpvbG5pZXJraWV3aWN6IDxiLnpvbG5pZXJraWVAc2Ftc3VuZy5j b20+Cj4+PiBTdWJqZWN0OiBbUEFUQ0ggdjMgMi8yXSB0aGVybWFsOiBjb3JlOiBTdG9wIHBvbGxp bmcgRElTQUJMRUQgdGhlcm1hbAo+Pj4gZGV2aWNlcwo+Pj4gSW1wb3J0YW5jZTogSGlnaAo+Pj4K Pj4+IFBvbGxpbmcgRElTQUJMRUQgZGV2aWNlcyBpcyBub3QgZGVzaXJlZCwgYXMgYWxsIHN1Y2gg ImRpc2FibGVkIgo+Pj4gZGV2aWNlcyBhcmUgbWVhbnQgdG8gYmUgaGFuZGxlZCBieSB1c2Vyc3Bh Y2UuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcwo+Pj4gYW5kIHVzZXMKPj4+IHNob3VsZF9zdG9wX3Bv bGxpbmcoKSB0byBkZWNpZGUgd2hldGhlciB0aGUgZGV2aWNlIHNob3VsZCBiZSBwb2xsZWQgb3IK Pj4gbm90Lgo+Pj4KPj4gVGhhbmtzIGZvciB0aGUgZml4LCBhbmQgSU1PLCB0aGlzIHJldmVhbCBz b21lIG1vcmUgcHJvYmxlbXMuCj4+IFNheSwgd2UgbmVlZCB0byBkZWZpbmUgIkRJU0FCTEVEIiB0 aGVybWFsIHpvbmUuCj4+IENhbiB3ZSByZWFkIHRoZSB0ZW1wZXJhdHVyZT8gQ2FuIHdlIHRydXN0 IHRoZSB0cmlwIHBvaW50IHZhbHVlPwo+Pgo+PiBJTU8sIGEgZGlzYWJsZWQgdGhlcm1hbCB6b25l IGRvZXMgbm90IG1lYW4gaXQgaXMgaGFuZGxlZCBieSB1c2Vyc3BhY2UsCj4+IGJlY2F1c2UgdGhh dCBpcyB3aGF0IHRoZSB1c2Vyc3BhY2UgZ292ZXJub3IgZGVzaWduZWQgZm9yLgo+PiBJbnN0ZWFk LCBpZiBhIHRoZXJtYWwgem9uZSBpcyBkaXNhYmxlZCwgaW4gdGhlcm1hbF96b25lX2RldmljZV91 cGRhdGUoKSwgd2UKPj4gc2hvdWxkIGJhc2ljYWxseSBza2lwIGFsbCB0aGUgb3RoZXIgb3BlcmF0 aW9ucyBhcyB3ZWxsLgo+Pgo+IEkgb3Zlcmxvb2tlZCB0aGUgbGFzdCBsaW5lIG9mIHRoZSBwYXRj aC4gU28gdGhlcm1hbF96b25lX2RldmljZV91cGRhdGUoKSByZXR1cm5zCj4gaW1tZWRpYXRlbHkg aWYgdGhlIHRoZXJtYWwgem9uZSBpcyBkaXNhYmxlZCwgcmlnaHQ/Cj4gCj4gQnV0IGhvdyBjYW4g d2Ugc3RvcCBwb2xsaW5nIGluIHRoaXMgY2FzZT8KCkl0IGRvZXMgc3RvcC4gSG93ZXZlciwgSSBp bmRlZWQgb2JzZXJ2ZSBhbiBleHRyYSBjYWxsIHRvCnRoZXJtYWxfem9uZV9kZXZpY2VfdXBkYXRl KCkgYmVmb3JlIGl0IGZ1bGx5IHN0b3BzLgpJIHRoaW5rIHdoYXQgaGFwcGVucyBpcyB0aGlzOgoK LSBzdG9yaW5nICJkaXNhYmxlZCIgaW4gbW9kZSBlbmRzIHVwIGluIHRoZXJtYWxfem9uZV9kZXZp Y2Vfc2V0X21vZGUoKSwKd2hpY2ggY2FsbHMgZHJpdmVyJ3MgLT5zZXRfbW9kZSgpIGFuZCB0aGVu IGNhbGxzIHRoZXJtYWxfem9uZV9kZXZpY2VfdXBkYXRlKCksCndoaWNoIHJldHVybnMgaW1tZWRp YXRlbHkgYW5kIGRvZXMgbm90IHRvdWNoIHRoZSB0ei0+cG9sbF9xdWV1ZSBkZWxheWVkCndvcmsK Ci0gdGhlcm1hbF96b25lX2RldmljZV91cGRhdGUoKSBpcyBjYWxsZWQgZnJvbSB0aGUgZGVsYXll ZCB3b3JrIHdoZW4gaXRzCnRpbWUgY29tZXMgYW5kIHRoaXMgdGltZSBpdCBhbHNvIHJldHVybnMg aW1tZWRpYXRlbHksIG5vdCBtb2RpZnlpbmcgdGhlCnNhaWQgZGVsYXllZCB3b3JrLCBzbyBwb2xs aW5nIGVmZmVjdGl2ZWx5IHN0b3BzIG5vdy4KCj4gVGhlcmUgaXMgbm8gY2hhbmNlIHRvIGNhbGwg aW50byBtb25pdG9yX3RoZXJtYWxfem9uZSgpIGluIHRoZXJtYWxfem9uZV9kZXZpY2VfdXBkYXRl KCksCj4gb3IgZG8gSSBtaXNzIHNvbWV0aGluZz8KCldpdGhvdXQgdGhlIGxhc3QgImlmIiBzdGF0 ZW1lbnQgaW4gdGhpcyBwYXRjaCBwb2xsaW5nIHN0b3BzIHdpdGggdGhlCmZpcnN0IGNhbGwgdG8g dGhlcm1hbF96b25lX2RldmljZV91cGRhdGUoKSBiZWNhdXNlIGl0IGluZGVlZCBkaXNhYmxlcwp0 aGUgZGVsYXllZCB3b3JrLgoKU28geW91IGFyZSBwcm9iYWJseSByaWdodCAtIHRoYXQgbGFzdCAi aWYiIHNob3VsZCBub3QgYmUgaW50cm9kdWNlZC4KCj4gCj4+IEknbGwgdHJ5IHlvdXIgcGF0Y2hl cyBhbmQgcHJvYmFibHkgbWFrZSBhbiBpbmNyZW1lbnRhbCBwYXRjaC4KPiAKPiBJIGhhdmUgZmlu aXNoZWQgYSBzbWFsbCBwYXRjaCBzZXQgdG8gaW1wcm92ZSB0aGlzIGJhc2VkIG9uIG15IHVuZGVy c3RhbmRpbmcsIGFuZCB3aWxsIHBvc3QgaXQKPiB0b21vcnJvdyBhZnRlciB0ZXN0aW5nLgo+IAoK SXMgeW91ciBzbWFsbCBwYXRjaHNldCBiYXNlZCBvbiB0b3Agb2YgdGhpcyBzZXJpZXMgb3IgaXMg aXQgYSBjb21wbGV0ZWx5CnJld3JpdHRlbiB2ZXJzaW9uPwoKQW5kcnplagoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWls aW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0 cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=