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 9CCC4C7EE23 for ; Wed, 7 Jun 2023 06:01:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231520AbjFGGB5 (ORCPT ); Wed, 7 Jun 2023 02:01:57 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43474 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231970AbjFGGBz (ORCPT ); Wed, 7 Jun 2023 02:01:55 -0400 Received: from comms.puri.sm (comms.puri.sm [159.203.221.185]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 116AE83; Tue, 6 Jun 2023 23:01:53 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by comms.puri.sm (Postfix) with ESMTP id 39AF6F02A5; Tue, 6 Jun 2023 23:01:23 -0700 (PDT) Received: from comms.puri.sm ([127.0.0.1]) by localhost (comms.puri.sm [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 6Vkz2YQVTD2t; Tue, 6 Jun 2023 23:01:22 -0700 (PDT) From: Sebastian Krzyszkowiak DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=puri.sm; s=comms; t=1686117682; bh=O/zY6nrU7+HTjpYMUtFjQrMmI4VyQoafvb7Oak+nsQg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=tL0Wnua/AJ8o6hZMURKpgqDELpV//ecZXVJFWl+AQFquPkohEnO+Lx0yqbfm0+yAR moIQq2iggqvU0lNjlqgLj+B+H5XNJbysRHvjwVbfXuQiZog/y13N0MJ1hoLX3KKHnd CHfg11vg2g+rdrePXt8xz+VcFlxBsMKTdyyUYwgce0BBsjEH9my0FX5JlWoN+inYH9 GHctBUJGLYnTjgeUtiCIBXt+EXBwI8e8UKIDOrfb3AptfZ5a5utYruC4LU+mTPwoqA sLHf75IArwU9KMvAHeEbkLELvUa77ysgs+UpBNFVLfSco+cl7Rr+L8BeIHtej6tiZH r3iHMOcpNQd/g== To: Peng Fan , "Peng Fan (OSS)" , "rafael@kernel.org" , "shawnguo@kernel.org" , "s.hauer@pengutronix.de" , Daniel Lezcano Cc: "amitk@kernel.org" , "rui.zhang@intel.com" , "andrew.smirnov@gmail.com" , "linux-pm@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "kernel@pengutronix.de" , "festevam@gmail.com" , dl-linux-imx , "linux-arm-kernel@lists.infradead.org" , Alice Guo Subject: Re: [PATCH 2/3] thermal: qoriq_thermal: only enable supported sensors Date: Wed, 07 Jun 2023 08:01:14 +0200 Message-ID: <21914890.EfDdHjke4D@pliszka> In-Reply-To: <0eb717ac-82b1-8a76-58a2-394167e69b28@linaro.org> References: <20230516083746.63436-1-peng.fan@oss.nxp.com> <0eb717ac-82b1-8a76-58a2-394167e69b28@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org On pi=C4=85tek, 2 czerwca 2023 15:11:37 CEST Daniel Lezcano wrote: > On 01/06/2023 11:52, Peng Fan wrote: > > Hi Daniel, > >=20 > >> Subject: RE: [PATCH 2/3] thermal: qoriq_thermal: only enable supported > >> sensors > >>=20 > >>> Subject: Re: [PATCH 2/3] thermal: qoriq_thermal: only enable supported > >>> sensors > >>>=20 > >>> On 31/05/2023 14:05, Peng Fan wrote: > >>>>> Subject: Re: [PATCH 2/3] thermal: qoriq_thermal: only enable > >>>>> supported sensors > >>>>>=20 > >>>>> On 16/05/2023 10:37, Peng Fan (OSS) wrote: > >>>>>> From: Peng Fan > >>>>>>=20 > >>>>>> There are MAX 16 sensors, but not all of them supported. Such as > >>>>>> i.MX8MQ, there are only 3 sensors. Enabling all 16 sensors will > >>>>>> touch reserved bits from i.MX8MQ reference mannual, and TMU will > >>>>>> stuck, temperature will not update anymore. > >>>>>>=20 > >>>>>> Fixes: 45038e03d633 ("thermal: qoriq: Enable all sensors before > >>>>>> registering them") > >>>>>> Signed-off-by: Peng Fan > >>>>>> --- > >>>>>>=20 > >>>>>> drivers/thermal/qoriq_thermal.c | 30 > >>>>>> +++++++++++++++++++---------- > >>=20 > >> - > >>=20 > >>>>>> 1 file changed, 19 insertions(+), 11 deletions(-) > >>>>>>=20 > >>>>>> diff --git a/drivers/thermal/qoriq_thermal.c > >>>>>> b/drivers/thermal/qoriq_thermal.c index > >>=20 > >> b806a0929459..53748c4a5be1 > >>=20 > >>>>>> 100644 > >>>>>> --- a/drivers/thermal/qoriq_thermal.c > >>>>>> +++ b/drivers/thermal/qoriq_thermal.c > >>>>>> @@ -31,7 +31,6 @@ > >>>>>>=20 > >>>>>> #define TMR_DISABLE 0x0 > >>>>>> #define TMR_ME 0x80000000 > >>>>>> #define TMR_ALPF 0x0c000000 > >>>>>>=20 > >>>>>> -#define TMR_MSITE_ALL GENMASK(15, 0) > >>>>>>=20 > >>>>>> #define REGS_TMTMIR 0x008 /* Temperature measurement > >>>>>=20 > >>>>> interval Register */ > >>>>>=20 > >>>>>> #define TMTMIR_DEFAULT 0x0000000f > >>>>>>=20 > >>>>>> @@ -105,6 +104,11 @@ static int tmu_get_temp(struct > >>>>>=20 > >>>>> thermal_zone_device *tz, int *temp) > >>>>>=20 > >>>>>> * within sensor range. TEMP is an 9 bit value representing > >>>>>> * temperature in KelVin. > >>>>>> */ > >>>>>>=20 > >>>>>> + > >>>>>> + regmap_read(qdata->regmap, REGS_TMR, &val); > >>>>>> + if (!(val & TMR_ME)) > >>>>>> + return -EAGAIN; > >>>>>=20 > >>>>> How is this change related to what is described in the changelog? > >>>>=20 > >>>> devm_thermal_zone_of_sensor_register will invoke get temp, since we > >>>> reverted the 45038e03d633 did, we need to check TMR_ME to avoid > >>>=20 > >>> return > >>>=20 > >>>> invalid temperature. > >>>>=20 > >>> From a higher perspective if the sensor won't be enabled, then the > >>>=20 > >>> thermal zone should not be registered, the get_temp won't happen on a > >>> disabled sensor and this test won't be necessary, no ? > >=20 > > After thinking more, I'd prefer current logic. > >=20 > > We rely on devm_thermal_of_zone_register's return value to know > > whether there is a valid zone, then set sites bit, and after collected > > all site bits, we enable the thermal IP. > >=20 > > If move the enabling thermal IP before devm_thermal_of_zone_register, > > We need check dtb thermal zone, to know which zone is valid for current > > thermal IP. This would complicate the design. > >=20 > > So just checking the enabling bit in get temperature would be much > > simpler, and there just a small window before enabling thermal IP. >=20 > If the thermal zone is not described, then the thermal zone won't be > created as it fails with -ENODEV and thus get_temp won't be called on a > disabled site, right? That's not what the problem is. It's about zones that *will* be created -=20 since the driver only knows that a thermal zone isn't described in the devi= ce=20 tree after it fails registering, it can't enable the site *before* the zone= =20 gets registered - so it happens afterwards. That's why it needs this check = to=20 not return a bogus initial value before the site gets actually enabled late= r=20 in qoriq_tmu_register_tmu_zone. > Having test in the get_temp() ops is usually the sign there is something > wrong with the driver initialization. I've sent a patch that solved this exact problem back in 2021 by checking=20 whether a zone is described first with thermal_zone_of_get_sensor_id, but i= t=20 was sitting out there ignored long enough that the function got removed fro= m=20 the kernel in 5d10f480f77b and I'm not exactly sure how to solve it cleanly= =20 without getting it back. Without a replacement, what Peng did seems like th= e=20 only way to not reintroduce the problem 45038e03d633 was supposed to fix. The patch: https://lore.kernel.org/linux-pm/20220301033402.415445-1-sebasti= an.krzyszkowiak@puri.sm/ Questions on how to proceed further: https://lore.kernel.org/linux-pm/ 5800115.iIbC2pHGDl@pliszka/ Would be nice to get this finally resolved, the mainline TMU driver has bee= n=20 completely unreliable on i.MX8MQ for years now. Thanks, Sebastian 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 EA3DDC7EE25 for ; Wed, 7 Jun 2023 06:02: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:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=oJ3d8giv+HLA5PywHSx/WB/0nUHCJ1jK+d0rLkksHVE=; b=2TGhTpcjKLhdDP awIJkWANKpvXZF9bmRLeb/t7xQS7abn/JHIixDTQHJXSTD3Pqfn/a74pKlh1Blet9iSXZCBXahDAH CPcMM1NFIEtaRZgo1UgdqbKAYZ7RrZ6/ovG90ejQ3ZPtCPAHuBjj9aI9I3Wx6sLkpm1FHKtBU4fDe CVG+8HVGYf4miLHcAaBCZ63qo0+i3swgDsJMe86+aPOemer/S85BWpNgRciBj83UZ62GyzFOLmRYm QCZ+H5WqFkhQGp0h3DwrZvKXZBPnWI2G6aU53D8hCZsxvYeUT+au9hS+oo7PBUpiS/eXk/eYe33Lf bYKiAd7JIPzutPEwepUA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1q6mEe-004V1Q-1i; Wed, 07 Jun 2023 06:01:32 +0000 Received: from comms.puri.sm ([159.203.221.185]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1q6mEa-004V0m-2Y for linux-arm-kernel@lists.infradead.org; Wed, 07 Jun 2023 06:01:30 +0000 Received: from localhost (localhost [127.0.0.1]) by comms.puri.sm (Postfix) with ESMTP id 39AF6F02A5; Tue, 6 Jun 2023 23:01:23 -0700 (PDT) Received: from comms.puri.sm ([127.0.0.1]) by localhost (comms.puri.sm [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 6Vkz2YQVTD2t; Tue, 6 Jun 2023 23:01:22 -0700 (PDT) From: Sebastian Krzyszkowiak DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=puri.sm; s=comms; t=1686117682; bh=O/zY6nrU7+HTjpYMUtFjQrMmI4VyQoafvb7Oak+nsQg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=tL0Wnua/AJ8o6hZMURKpgqDELpV//ecZXVJFWl+AQFquPkohEnO+Lx0yqbfm0+yAR moIQq2iggqvU0lNjlqgLj+B+H5XNJbysRHvjwVbfXuQiZog/y13N0MJ1hoLX3KKHnd CHfg11vg2g+rdrePXt8xz+VcFlxBsMKTdyyUYwgce0BBsjEH9my0FX5JlWoN+inYH9 GHctBUJGLYnTjgeUtiCIBXt+EXBwI8e8UKIDOrfb3AptfZ5a5utYruC4LU+mTPwoqA sLHf75IArwU9KMvAHeEbkLELvUa77ysgs+UpBNFVLfSco+cl7Rr+L8BeIHtej6tiZH r3iHMOcpNQd/g== To: Peng Fan , "Peng Fan (OSS)" , "rafael@kernel.org" , "shawnguo@kernel.org" , "s.hauer@pengutronix.de" , Daniel Lezcano Cc: "amitk@kernel.org" , "rui.zhang@intel.com" , "andrew.smirnov@gmail.com" , "linux-pm@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "kernel@pengutronix.de" , "festevam@gmail.com" , dl-linux-imx , "linux-arm-kernel@lists.infradead.org" , Alice Guo Subject: Re: [PATCH 2/3] thermal: qoriq_thermal: only enable supported sensors Date: Wed, 07 Jun 2023 08:01:14 +0200 Message-ID: <21914890.EfDdHjke4D@pliszka> In-Reply-To: <0eb717ac-82b1-8a76-58a2-394167e69b28@linaro.org> References: <20230516083746.63436-1-peng.fan@oss.nxp.com> <0eb717ac-82b1-8a76-58a2-394167e69b28@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230606_230128_840957_D66B01D8 X-CRM114-Status: GOOD ( 33.47 ) 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 T24gcGnEhXRlaywgMiBjemVyd2NhIDIwMjMgMTU6MTE6MzcgQ0VTVCBEYW5pZWwgTGV6Y2FubyB3 cm90ZToKPiBPbiAwMS8wNi8yMDIzIDExOjUyLCBQZW5nIEZhbiB3cm90ZToKPiA+IEhpIERhbmll bCwKPiA+IAo+ID4+IFN1YmplY3Q6IFJFOiBbUEFUQ0ggMi8zXSB0aGVybWFsOiBxb3JpcV90aGVy bWFsOiBvbmx5IGVuYWJsZSBzdXBwb3J0ZWQKPiA+PiBzZW5zb3JzCj4gPj4gCj4gPj4+IFN1Ympl Y3Q6IFJlOiBbUEFUQ0ggMi8zXSB0aGVybWFsOiBxb3JpcV90aGVybWFsOiBvbmx5IGVuYWJsZSBz dXBwb3J0ZWQKPiA+Pj4gc2Vuc29ycwo+ID4+PiAKPiA+Pj4gT24gMzEvMDUvMjAyMyAxNDowNSwg UGVuZyBGYW4gd3JvdGU6Cj4gPj4+Pj4gU3ViamVjdDogUmU6IFtQQVRDSCAyLzNdIHRoZXJtYWw6 IHFvcmlxX3RoZXJtYWw6IG9ubHkgZW5hYmxlCj4gPj4+Pj4gc3VwcG9ydGVkIHNlbnNvcnMKPiA+ Pj4+PiAKPiA+Pj4+PiBPbiAxNi8wNS8yMDIzIDEwOjM3LCBQZW5nIEZhbiAoT1NTKSB3cm90ZToK PiA+Pj4+Pj4gRnJvbTogUGVuZyBGYW4gPHBlbmcuZmFuQG54cC5jb20+Cj4gPj4+Pj4+IAo+ID4+ Pj4+PiBUaGVyZSBhcmUgTUFYIDE2IHNlbnNvcnMsIGJ1dCBub3QgYWxsIG9mIHRoZW0gc3VwcG9y dGVkLiBTdWNoIGFzCj4gPj4+Pj4+IGkuTVg4TVEsIHRoZXJlIGFyZSBvbmx5IDMgc2Vuc29ycy4g RW5hYmxpbmcgYWxsIDE2IHNlbnNvcnMgd2lsbAo+ID4+Pj4+PiB0b3VjaCByZXNlcnZlZCBiaXRz IGZyb20gaS5NWDhNUSByZWZlcmVuY2UgbWFubnVhbCwgYW5kIFRNVSB3aWxsCj4gPj4+Pj4+IHN0 dWNrLCB0ZW1wZXJhdHVyZSB3aWxsIG5vdCB1cGRhdGUgYW55bW9yZS4KPiA+Pj4+Pj4gCj4gPj4+ Pj4+IEZpeGVzOiA0NTAzOGUwM2Q2MzMgKCJ0aGVybWFsOiBxb3JpcTogRW5hYmxlIGFsbCBzZW5z b3JzIGJlZm9yZQo+ID4+Pj4+PiByZWdpc3RlcmluZyB0aGVtIikKPiA+Pj4+Pj4gU2lnbmVkLW9m Zi1ieTogUGVuZyBGYW4gPHBlbmcuZmFuQG54cC5jb20+Cj4gPj4+Pj4+IC0tLQo+ID4+Pj4+PiAK PiA+Pj4+Pj4gICAgIGRyaXZlcnMvdGhlcm1hbC9xb3JpcV90aGVybWFsLmMgfCAzMAo+ID4+Pj4+ PiAgICAgKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0KPiA+PiAKPiA+PiAtCj4gPj4gCj4g Pj4+Pj4+ICAgICAxIGZpbGUgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25z KC0pCj4gPj4+Pj4+IAo+ID4+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL3Fvcmlx X3RoZXJtYWwuYwo+ID4+Pj4+PiBiL2RyaXZlcnMvdGhlcm1hbC9xb3JpcV90aGVybWFsLmMgaW5k ZXgKPiA+PiAKPiA+PiBiODA2YTA5Mjk0NTkuLjUzNzQ4YzRhNWJlMQo+ID4+IAo+ID4+Pj4+PiAx MDA2NDQKPiA+Pj4+Pj4gLS0tIGEvZHJpdmVycy90aGVybWFsL3FvcmlxX3RoZXJtYWwuYwo+ID4+ Pj4+PiArKysgYi9kcml2ZXJzL3RoZXJtYWwvcW9yaXFfdGhlcm1hbC5jCj4gPj4+Pj4+IEBAIC0z MSw3ICszMSw2IEBACj4gPj4+Pj4+IAo+ID4+Pj4+PiAgICAgI2RlZmluZSBUTVJfRElTQUJMRQkw eDAKPiA+Pj4+Pj4gICAgICNkZWZpbmUgVE1SX01FCQkweDgwMDAwMDAwCj4gPj4+Pj4+ICAgICAj ZGVmaW5lIFRNUl9BTFBGCTB4MGMwMDAwMDAKPiA+Pj4+Pj4gCj4gPj4+Pj4+IC0jZGVmaW5lIFRN Ul9NU0lURV9BTEwJR0VOTUFTSygxNSwgMCkKPiA+Pj4+Pj4gCj4gPj4+Pj4+ICAgICAjZGVmaW5l IFJFR1NfVE1UTUlSCTB4MDA4CS8qIFRlbXBlcmF0dXJlIG1lYXN1cmVtZW50Cj4gPj4+Pj4gCj4g Pj4+Pj4gaW50ZXJ2YWwgUmVnaXN0ZXIgKi8KPiA+Pj4+PiAKPiA+Pj4+Pj4gICAgICNkZWZpbmUg VE1UTUlSX0RFRkFVTFQJMHgwMDAwMDAwZgo+ID4+Pj4+PiAKPiA+Pj4+Pj4gQEAgLTEwNSw2ICsx MDQsMTEgQEAgc3RhdGljIGludCB0bXVfZ2V0X3RlbXAoc3RydWN0Cj4gPj4+Pj4gCj4gPj4+Pj4g dGhlcm1hbF96b25lX2RldmljZSAqdHosIGludCAqdGVtcCkKPiA+Pj4+PiAKPiA+Pj4+Pj4gICAg IAkgKiB3aXRoaW4gc2Vuc29yIHJhbmdlLiBURU1QIGlzIGFuIDkgYml0IHZhbHVlIHJlcHJlc2Vu dGluZwo+ID4+Pj4+PiAgICAgCSAqIHRlbXBlcmF0dXJlIGluIEtlbFZpbi4KPiA+Pj4+Pj4gICAg IAkgKi8KPiA+Pj4+Pj4gCj4gPj4+Pj4+ICsKPiA+Pj4+Pj4gKwlyZWdtYXBfcmVhZChxZGF0YS0+ cmVnbWFwLCBSRUdTX1RNUiwgJnZhbCk7Cj4gPj4+Pj4+ICsJaWYgKCEodmFsICYgVE1SX01FKSkK PiA+Pj4+Pj4gKwkJcmV0dXJuIC1FQUdBSU47Cj4gPj4+Pj4gCj4gPj4+Pj4gSG93IGlzIHRoaXMg Y2hhbmdlIHJlbGF0ZWQgdG8gd2hhdCBpcyBkZXNjcmliZWQgaW4gdGhlIGNoYW5nZWxvZz8KPiA+ Pj4+IAo+ID4+Pj4gZGV2bV90aGVybWFsX3pvbmVfb2Zfc2Vuc29yX3JlZ2lzdGVyIHdpbGwgaW52 b2tlIGdldCB0ZW1wLCBzaW5jZSB3ZQo+ID4+Pj4gcmV2ZXJ0ZWQgdGhlIDQ1MDM4ZTAzZDYzMyBk aWQsIHdlIG5lZWQgdG8gY2hlY2sgVE1SX01FIHRvIGF2b2lkCj4gPj4+IAo+ID4+PiByZXR1cm4K PiA+Pj4gCj4gPj4+PiBpbnZhbGlkIHRlbXBlcmF0dXJlLgo+ID4+Pj4gCj4gPj4+ICAgRnJvbSBh IGhpZ2hlciBwZXJzcGVjdGl2ZSBpZiB0aGUgc2Vuc29yIHdvbid0IGJlIGVuYWJsZWQsIHRoZW4g dGhlCj4gPj4+IAo+ID4+PiB0aGVybWFsIHpvbmUgc2hvdWxkIG5vdCBiZSByZWdpc3RlcmVkLCB0 aGUgZ2V0X3RlbXAgd29uJ3QgaGFwcGVuIG9uIGEKPiA+Pj4gZGlzYWJsZWQgc2Vuc29yIGFuZCB0 aGlzIHRlc3Qgd29uJ3QgYmUgbmVjZXNzYXJ5LCBubyA/Cj4gPiAKPiA+IEFmdGVyIHRoaW5raW5n IG1vcmUsIEknZCBwcmVmZXIgY3VycmVudCBsb2dpYy4KPiA+IAo+ID4gV2UgcmVseSBvbiBkZXZt X3RoZXJtYWxfb2Zfem9uZV9yZWdpc3RlcidzIHJldHVybiB2YWx1ZSB0byBrbm93Cj4gPiB3aGV0 aGVyIHRoZXJlIGlzIGEgdmFsaWQgem9uZSwgdGhlbiBzZXQgc2l0ZXMgYml0LCBhbmQgYWZ0ZXIg Y29sbGVjdGVkCj4gPiBhbGwgc2l0ZSBiaXRzLCB3ZSBlbmFibGUgdGhlIHRoZXJtYWwgSVAuCj4g PiAKPiA+IElmIG1vdmUgdGhlIGVuYWJsaW5nIHRoZXJtYWwgSVAgYmVmb3JlIGRldm1fdGhlcm1h bF9vZl96b25lX3JlZ2lzdGVyLAo+ID4gV2UgbmVlZCBjaGVjayBkdGIgdGhlcm1hbCB6b25lLCB0 byBrbm93IHdoaWNoIHpvbmUgaXMgdmFsaWQgZm9yIGN1cnJlbnQKPiA+IHRoZXJtYWwgSVAuIFRo aXMgd291bGQgY29tcGxpY2F0ZSB0aGUgZGVzaWduLgo+ID4gCj4gPiBTbyBqdXN0IGNoZWNraW5n IHRoZSBlbmFibGluZyBiaXQgaW4gZ2V0IHRlbXBlcmF0dXJlIHdvdWxkIGJlIG11Y2gKPiA+IHNp bXBsZXIsIGFuZCB0aGVyZSBqdXN0IGEgc21hbGwgd2luZG93IGJlZm9yZSBlbmFibGluZyB0aGVy bWFsIElQLgo+IAo+IElmIHRoZSB0aGVybWFsIHpvbmUgaXMgbm90IGRlc2NyaWJlZCwgdGhlbiB0 aGUgdGhlcm1hbCB6b25lIHdvbid0IGJlCj4gY3JlYXRlZCBhcyBpdCBmYWlscyB3aXRoIC1FTk9E RVYgYW5kIHRodXMgZ2V0X3RlbXAgd29uJ3QgYmUgY2FsbGVkIG9uIGEKPiBkaXNhYmxlZCBzaXRl LCByaWdodD8KClRoYXQncyBub3Qgd2hhdCB0aGUgcHJvYmxlbSBpcy4gSXQncyBhYm91dCB6b25l cyB0aGF0ICp3aWxsKiBiZSBjcmVhdGVkIC0gCnNpbmNlIHRoZSBkcml2ZXIgb25seSBrbm93cyB0 aGF0IGEgdGhlcm1hbCB6b25lIGlzbid0IGRlc2NyaWJlZCBpbiB0aGUgZGV2aWNlIAp0cmVlIGFm dGVyIGl0IGZhaWxzIHJlZ2lzdGVyaW5nLCBpdCBjYW4ndCBlbmFibGUgdGhlIHNpdGUgKmJlZm9y ZSogdGhlIHpvbmUgCmdldHMgcmVnaXN0ZXJlZCAtIHNvIGl0IGhhcHBlbnMgYWZ0ZXJ3YXJkcy4g VGhhdCdzIHdoeSBpdCBuZWVkcyB0aGlzIGNoZWNrIHRvIApub3QgcmV0dXJuIGEgYm9ndXMgaW5p dGlhbCB2YWx1ZSBiZWZvcmUgdGhlIHNpdGUgZ2V0cyBhY3R1YWxseSBlbmFibGVkIGxhdGVyIApp biBxb3JpcV90bXVfcmVnaXN0ZXJfdG11X3pvbmUuCgo+IEhhdmluZyB0ZXN0IGluIHRoZSBnZXRf dGVtcCgpIG9wcyBpcyB1c3VhbGx5IHRoZSBzaWduIHRoZXJlIGlzIHNvbWV0aGluZwo+IHdyb25n IHdpdGggdGhlIGRyaXZlciBpbml0aWFsaXphdGlvbi4KCkkndmUgc2VudCBhIHBhdGNoIHRoYXQg c29sdmVkIHRoaXMgZXhhY3QgcHJvYmxlbSBiYWNrIGluIDIwMjEgYnkgY2hlY2tpbmcgCndoZXRo ZXIgYSB6b25lIGlzIGRlc2NyaWJlZCBmaXJzdCB3aXRoIHRoZXJtYWxfem9uZV9vZl9nZXRfc2Vu c29yX2lkLCBidXQgaXQgCndhcyBzaXR0aW5nIG91dCB0aGVyZSBpZ25vcmVkIGxvbmcgZW5vdWdo IHRoYXQgdGhlIGZ1bmN0aW9uIGdvdCByZW1vdmVkIGZyb20gCnRoZSBrZXJuZWwgaW4gNWQxMGY0 ODBmNzdiIGFuZCBJJ20gbm90IGV4YWN0bHkgc3VyZSBob3cgdG8gc29sdmUgaXQgY2xlYW5seSAK d2l0aG91dCBnZXR0aW5nIGl0IGJhY2suIFdpdGhvdXQgYSByZXBsYWNlbWVudCwgd2hhdCBQZW5n IGRpZCBzZWVtcyBsaWtlIHRoZSAKb25seSB3YXkgdG8gbm90IHJlaW50cm9kdWNlIHRoZSBwcm9i bGVtIDQ1MDM4ZTAzZDYzMyB3YXMgc3VwcG9zZWQgdG8gZml4LgoKVGhlIHBhdGNoOiBodHRwczov L2xvcmUua2VybmVsLm9yZy9saW51eC1wbS8yMDIyMDMwMTAzMzQwMi40MTU0NDUtMS1zZWJhc3Rp YW4ua3J6eXN6a293aWFrQHB1cmkuc20vCgpRdWVzdGlvbnMgb24gaG93IHRvIHByb2NlZWQgZnVy dGhlcjogaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvbGludXgtcG0vCjU4MDAxMTUuaUliQzJwSEdE bEBwbGlzemthLwoKV291bGQgYmUgbmljZSB0byBnZXQgdGhpcyBmaW5hbGx5IHJlc29sdmVkLCB0 aGUgbWFpbmxpbmUgVE1VIGRyaXZlciBoYXMgYmVlbiAKY29tcGxldGVseSB1bnJlbGlhYmxlIG9u IGkuTVg4TVEgZm9yIHllYXJzIG5vdy4KClRoYW5rcywKU2ViYXN0aWFuCgoKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFp bGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlz dHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK