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=-13.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS 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 2BD45C433DB for ; Mon, 29 Mar 2021 14:49:52 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 06C956191F for ; Mon, 29 Mar 2021 14:49:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231327AbhC2Ot0 convert rfc822-to-8bit (ORCPT ); Mon, 29 Mar 2021 10:49:26 -0400 Received: from relay10.mail.gandi.net ([217.70.178.230]:52497 "EHLO relay10.mail.gandi.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231314AbhC2OtM (ORCPT ); Mon, 29 Mar 2021 10:49:12 -0400 Received: from localhost (91-175-115-186.subs.proxad.net [91.175.115.186]) (Authenticated sender: gregory.clement@bootlin.com) by relay10.mail.gandi.net (Postfix) with ESMTPSA id C086324000F; Mon, 29 Mar 2021 14:49:08 +0000 (UTC) From: Gregory CLEMENT To: Pali =?utf-8?Q?Roh=C3=A1r?= , Andrew Lunn , Michael Turquette , Stephen Boyd , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org Cc: Marek =?utf-8?Q?Beh=C3=BAn?= , Miquel Raynal , Tomasz Maciej Nowak , Luka Perkov , Andre Heider , Vladimir Vid , Russell King , =?utf-8?Q?G=C3=A9rald?= Kerma , Konstantin Porotchkin Subject: Re: [PATCH mvebu v3 06/10] clk: mvebu: armada-37xx-periph: Fix workaround for switching from L1 to L0 In-Reply-To: <20210222194158.12342-7-pali@kernel.org> References: <20210114124032.12765-1-pali@kernel.org> <20210222194158.12342-1-pali@kernel.org> <20210222194158.12342-7-pali@kernel.org> Date: Mon, 29 Mar 2021 16:49:08 +0200 Message-ID: <87v99adnh7.fsf@BL-laptop> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8BIT Precedence: bulk List-ID: X-Mailing-List: linux-clk@vger.kernel.org Pali Rohár writes: > When CPU frequency is at 250 MHz and set_rate() is called with 500 MHz (L1) > quickly followed by a call with 1 GHz (L0), the CPU does not necessarily > stay in L1 for at least 20ms as is required by Marvell errata. > > This situation happens frequently with the ondemand cpufreq governor and > can be also reproduced with userspace governor. In most cases it causes CPU > to crash. > > This change fixes the above issue and ensures that the CPU always stays in > L1 for at least 20ms when switching from any state to L0. > > Signed-off-by: Marek Behún > Signed-off-by: Pali Rohár > Acked-by: Stephen Boyd > Tested-by: Tomasz Maciej Nowak > Tested-by: Anders Trier Olesen > Tested-by: Philip Soares > Fixes: 61c40f35f5cd ("clk: mvebu: armada-37xx-periph: Fix switching CPU rate from 300Mhz to 1.2GHz") > Cc: stable@vger.kernel.org Acked-by: Gregory CLEMENT Thanks, Gregory > --- > drivers/clk/mvebu/armada-37xx-periph.c | 45 ++++++++++++++++++++++---- > 1 file changed, 39 insertions(+), 6 deletions(-) > > diff --git a/drivers/clk/mvebu/armada-37xx-periph.c b/drivers/clk/mvebu/armada-37xx-periph.c > index b15e177bea7e..32ac6b6b7530 100644 > --- a/drivers/clk/mvebu/armada-37xx-periph.c > +++ b/drivers/clk/mvebu/armada-37xx-periph.c > @@ -84,6 +84,7 @@ struct clk_pm_cpu { > void __iomem *reg_div; > u8 shift_div; > struct regmap *nb_pm_base; > + unsigned long l1_expiration; > }; > > #define to_clk_double_div(_hw) container_of(_hw, struct clk_double_div, hw) > @@ -504,22 +505,52 @@ static long clk_pm_cpu_round_rate(struct clk_hw *hw, unsigned long rate, > * 2. Sleep 20ms for stabling VDD voltage > * 3. Then switch from L1 (500/600 MHz) to L0 (1000/1200 MHz). > */ > -static void clk_pm_cpu_set_rate_wa(unsigned long rate, struct regmap *base) > +static void clk_pm_cpu_set_rate_wa(struct clk_pm_cpu *pm_cpu, > + unsigned int new_level, unsigned long rate, > + struct regmap *base) > { > unsigned int cur_level; > > - if (rate < 1000 * 1000 * 1000) > - return; > - > regmap_read(base, ARMADA_37XX_NB_CPU_LOAD, &cur_level); > cur_level &= ARMADA_37XX_NB_CPU_LOAD_MASK; > - if (cur_level <= ARMADA_37XX_DVFS_LOAD_1) > + > + if (cur_level == new_level) > + return; > + > + /* > + * System wants to go to L1 on its own. If we are going from L2/L3, > + * remember when 20ms will expire. If from L0, set the value so that > + * next switch to L0 won't have to wait. > + */ > + if (new_level == ARMADA_37XX_DVFS_LOAD_1) { > + if (cur_level == ARMADA_37XX_DVFS_LOAD_0) > + pm_cpu->l1_expiration = jiffies; > + else > + pm_cpu->l1_expiration = jiffies + msecs_to_jiffies(20); > return; > + } > + > + /* > + * If we are setting to L2/L3, just invalidate L1 expiration time, > + * sleeping is not needed. > + */ > + if (rate < 1000*1000*1000) > + goto invalidate_l1_exp; > + > + /* > + * We are going to L0 with rate >= 1GHz. Check whether we have been at > + * L1 for long enough time. If not, go to L1 for 20ms. > + */ > + if (pm_cpu->l1_expiration && jiffies >= pm_cpu->l1_expiration) > + goto invalidate_l1_exp; > > regmap_update_bits(base, ARMADA_37XX_NB_CPU_LOAD, > ARMADA_37XX_NB_CPU_LOAD_MASK, > ARMADA_37XX_DVFS_LOAD_1); > msleep(20); > + > +invalidate_l1_exp: > + pm_cpu->l1_expiration = 0; > } > > static int clk_pm_cpu_set_rate(struct clk_hw *hw, unsigned long rate, > @@ -553,7 +584,9 @@ static int clk_pm_cpu_set_rate(struct clk_hw *hw, unsigned long rate, > reg = ARMADA_37XX_NB_CPU_LOAD; > mask = ARMADA_37XX_NB_CPU_LOAD_MASK; > > - clk_pm_cpu_set_rate_wa(rate, base); > + /* Apply workaround when base CPU frequency is 1000 or 1200 MHz */ > + if (parent_rate >= 1000*1000*1000) > + clk_pm_cpu_set_rate_wa(pm_cpu, load_level, rate, base); > > regmap_update_bits(base, reg, mask, load_level); > > -- > 2.20.1 > -- Gregory Clement, Bootlin Embedded Linux and Kernel engineering http://bootlin.com 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=-14.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS 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 250E4C433DB for ; Mon, 29 Mar 2021 22:57:44 +0000 (UTC) Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) (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 9C9BB61919 for ; Mon, 29 Mar 2021 22:57:43 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9C9BB61919 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=bootlin.com 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=desiato.20200630; h=Sender:Content-Transfer-Encoding :Content-Type:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:Message-ID:Date:References:In-Reply-To: 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=6F+wewGMiD6bRQMjRDcW2WW/s4HWpErXS39RcsHfbTE=; b=HNogi2Ad3+d3xXnulzvQZm5jt i+OTnw+meGVOOO4u41UuZNX2OBQpJ9MSAoC3ZcIRvqa135sSHjO9odCBIKxcPn64l1m+LY0MlwC27 0mApCFjjyLFpBfO0CoDv6V6oKluAt0+DcdQkM+d+GDH3I7pDWysipjbKHvmiYEHgaAXHuv0BTDHLG Y1YgaDwf7WB9OkKRBhdOF2uopQagJtUsnn/3BZi6tCn+wlDHii/f4SWY2Cj6Dt9gjyoMUOvRTsVX9 9kurI67TeOcfOsCwe2tZY3lQjIYQZbh5LLQ2rcjYnfkDNtty83EVfULTHVUmnJ9nVAR43FbauTXFA z/krK2Waw==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lR0nC-001mhK-3e; Mon, 29 Mar 2021 22:55:30 +0000 Received: from relay10.mail.gandi.net ([217.70.178.230]) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lQtCb-000iiS-Sd for linux-arm-kernel@lists.infradead.org; Mon, 29 Mar 2021 14:49:16 +0000 Received: from localhost (91-175-115-186.subs.proxad.net [91.175.115.186]) (Authenticated sender: gregory.clement@bootlin.com) by relay10.mail.gandi.net (Postfix) with ESMTPSA id C086324000F; Mon, 29 Mar 2021 14:49:08 +0000 (UTC) From: Gregory CLEMENT To: Pali =?utf-8?Q?Roh=C3=A1r?= , Andrew Lunn , Michael Turquette , Stephen Boyd , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org Cc: Marek =?utf-8?Q?Beh=C3=BAn?= , Miquel Raynal , Tomasz Maciej Nowak , Luka Perkov , Andre Heider , Vladimir Vid , Russell King , =?utf-8?Q?G=C3=A9rald?= Kerma , Konstantin Porotchkin Subject: Re: [PATCH mvebu v3 06/10] clk: mvebu: armada-37xx-periph: Fix workaround for switching from L1 to L0 In-Reply-To: <20210222194158.12342-7-pali@kernel.org> References: <20210114124032.12765-1-pali@kernel.org> <20210222194158.12342-1-pali@kernel.org> <20210222194158.12342-7-pali@kernel.org> Date: Mon, 29 Mar 2021 16:49:08 +0200 Message-ID: <87v99adnh7.fsf@BL-laptop> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210329_154914_258588_B072617A X-CRM114-Status: GOOD ( 23.46 ) 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 UGFsaSBSb2jDoXIgPHBhbGlAa2VybmVsLm9yZz4gd3JpdGVzOgoKPiBXaGVuIENQVSBmcmVxdWVu Y3kgaXMgYXQgMjUwIE1IeiBhbmQgc2V0X3JhdGUoKSBpcyBjYWxsZWQgd2l0aCA1MDAgTUh6IChM MSkKPiBxdWlja2x5IGZvbGxvd2VkIGJ5IGEgY2FsbCB3aXRoIDEgR0h6IChMMCksIHRoZSBDUFUg ZG9lcyBub3QgbmVjZXNzYXJpbHkKPiBzdGF5IGluIEwxIGZvciBhdCBsZWFzdCAyMG1zIGFzIGlz IHJlcXVpcmVkIGJ5IE1hcnZlbGwgZXJyYXRhLgo+Cj4gVGhpcyBzaXR1YXRpb24gaGFwcGVucyBm cmVxdWVudGx5IHdpdGggdGhlIG9uZGVtYW5kIGNwdWZyZXEgZ292ZXJub3IgYW5kCj4gY2FuIGJl IGFsc28gcmVwcm9kdWNlZCB3aXRoIHVzZXJzcGFjZSBnb3Zlcm5vci4gSW4gbW9zdCBjYXNlcyBp dCBjYXVzZXMgQ1BVCj4gdG8gY3Jhc2guCj4KPiBUaGlzIGNoYW5nZSBmaXhlcyB0aGUgYWJvdmUg aXNzdWUgYW5kIGVuc3VyZXMgdGhhdCB0aGUgQ1BVIGFsd2F5cyBzdGF5cyBpbgo+IEwxIGZvciBh dCBsZWFzdCAyMG1zIHdoZW4gc3dpdGNoaW5nIGZyb20gYW55IHN0YXRlIHRvIEwwLgo+Cj4gU2ln bmVkLW9mZi1ieTogTWFyZWsgQmVow7puIDxrYWJlbEBrZXJuZWwub3JnPgo+IFNpZ25lZC1vZmYt Ynk6IFBhbGkgUm9ow6FyIDxwYWxpQGtlcm5lbC5vcmc+Cj4gQWNrZWQtYnk6IFN0ZXBoZW4gQm95 ZCA8c2JveWRAa2VybmVsLm9yZz4KPiBUZXN0ZWQtYnk6IFRvbWFzeiBNYWNpZWogTm93YWsgPHRt bjUwNUBnbWFpbC5jb20+Cj4gVGVzdGVkLWJ5OiBBbmRlcnMgVHJpZXIgT2xlc2VuIDxhbmRlcnMu dHJpZXIub2xlc2VuQGdtYWlsLmNvbT4KPiBUZXN0ZWQtYnk6IFBoaWxpcCBTb2FyZXMgPHBoaWxp cHNAbmV0aXNlbnNlLmNvbT4KPiBGaXhlczogNjFjNDBmMzVmNWNkICgiY2xrOiBtdmVidTogYXJt YWRhLTM3eHgtcGVyaXBoOiBGaXggc3dpdGNoaW5nIENQVSByYXRlIGZyb20gMzAwTWh6IHRvIDEu MkdIeiIpCj4gQ2M6IHN0YWJsZUB2Z2VyLmtlcm5lbC5vcmcKCkFja2VkLWJ5OiBHcmVnb3J5IENM RU1FTlQgPGdyZWdvcnkuY2xlbWVudEBib290bGluLmNvbT4KClRoYW5rcywKCkdyZWdvcnkKPiAt LS0KPiAgZHJpdmVycy9jbGsvbXZlYnUvYXJtYWRhLTM3eHgtcGVyaXBoLmMgfCA0NSArKysrKysr KysrKysrKysrKysrKysrLS0tLQo+ICAxIGZpbGUgY2hhbmdlZCwgMzkgaW5zZXJ0aW9ucygrKSwg NiBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9tdmVidS9hcm1hZGEt Mzd4eC1wZXJpcGguYyBiL2RyaXZlcnMvY2xrL212ZWJ1L2FybWFkYS0zN3h4LXBlcmlwaC5jCj4g aW5kZXggYjE1ZTE3N2JlYTdlLi4zMmFjNmI2Yjc1MzAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9j bGsvbXZlYnUvYXJtYWRhLTM3eHgtcGVyaXBoLmMKPiArKysgYi9kcml2ZXJzL2Nsay9tdmVidS9h cm1hZGEtMzd4eC1wZXJpcGguYwo+IEBAIC04NCw2ICs4NCw3IEBAIHN0cnVjdCBjbGtfcG1fY3B1 IHsKPiAgCXZvaWQgX19pb21lbSAqcmVnX2RpdjsKPiAgCXU4IHNoaWZ0X2RpdjsKPiAgCXN0cnVj dCByZWdtYXAgKm5iX3BtX2Jhc2U7Cj4gKwl1bnNpZ25lZCBsb25nIGwxX2V4cGlyYXRpb247Cj4g IH07Cj4gIAo+ICAjZGVmaW5lIHRvX2Nsa19kb3VibGVfZGl2KF9odykgY29udGFpbmVyX29mKF9o dywgc3RydWN0IGNsa19kb3VibGVfZGl2LCBodykKPiBAQCAtNTA0LDIyICs1MDUsNTIgQEAgc3Rh dGljIGxvbmcgY2xrX3BtX2NwdV9yb3VuZF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25l ZCBsb25nIHJhdGUsCj4gICAqIDIuIFNsZWVwIDIwbXMgZm9yIHN0YWJsaW5nIFZERCB2b2x0YWdl Cj4gICAqIDMuIFRoZW4gc3dpdGNoIGZyb20gTDEgKDUwMC82MDAgTUh6KSB0byBMMCAoMTAwMC8x MjAwIE1IeikuCj4gICAqLwo+IC1zdGF0aWMgdm9pZCBjbGtfcG1fY3B1X3NldF9yYXRlX3dhKHVu c2lnbmVkIGxvbmcgcmF0ZSwgc3RydWN0IHJlZ21hcCAqYmFzZSkKPiArc3RhdGljIHZvaWQgY2xr X3BtX2NwdV9zZXRfcmF0ZV93YShzdHJ1Y3QgY2xrX3BtX2NwdSAqcG1fY3B1LAo+ICsJCQkJICAg dW5zaWduZWQgaW50IG5ld19sZXZlbCwgdW5zaWduZWQgbG9uZyByYXRlLAo+ICsJCQkJICAgc3Ry dWN0IHJlZ21hcCAqYmFzZSkKPiAgewo+ICAJdW5zaWduZWQgaW50IGN1cl9sZXZlbDsKPiAgCj4g LQlpZiAocmF0ZSA8IDEwMDAgKiAxMDAwICogMTAwMCkKPiAtCQlyZXR1cm47Cj4gLQo+ICAJcmVn bWFwX3JlYWQoYmFzZSwgQVJNQURBXzM3WFhfTkJfQ1BVX0xPQUQsICZjdXJfbGV2ZWwpOwo+ICAJ Y3VyX2xldmVsICY9IEFSTUFEQV8zN1hYX05CX0NQVV9MT0FEX01BU0s7Cj4gLQlpZiAoY3VyX2xl dmVsIDw9IEFSTUFEQV8zN1hYX0RWRlNfTE9BRF8xKQo+ICsKPiArCWlmIChjdXJfbGV2ZWwgPT0g bmV3X2xldmVsKQo+ICsJCXJldHVybjsKPiArCj4gKwkvKgo+ICsJICogU3lzdGVtIHdhbnRzIHRv IGdvIHRvIEwxIG9uIGl0cyBvd24uIElmIHdlIGFyZSBnb2luZyBmcm9tIEwyL0wzLAo+ICsJICog cmVtZW1iZXIgd2hlbiAyMG1zIHdpbGwgZXhwaXJlLiBJZiBmcm9tIEwwLCBzZXQgdGhlIHZhbHVl IHNvIHRoYXQKPiArCSAqIG5leHQgc3dpdGNoIHRvIEwwIHdvbid0IGhhdmUgdG8gd2FpdC4KPiAr CSAqLwo+ICsJaWYgKG5ld19sZXZlbCA9PSBBUk1BREFfMzdYWF9EVkZTX0xPQURfMSkgewo+ICsJ CWlmIChjdXJfbGV2ZWwgPT0gQVJNQURBXzM3WFhfRFZGU19MT0FEXzApCj4gKwkJCXBtX2NwdS0+ bDFfZXhwaXJhdGlvbiA9IGppZmZpZXM7Cj4gKwkJZWxzZQo+ICsJCQlwbV9jcHUtPmwxX2V4cGly YXRpb24gPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygyMCk7Cj4gIAkJcmV0dXJuOwo+ICsJ fQo+ICsKPiArCS8qCj4gKwkgKiBJZiB3ZSBhcmUgc2V0dGluZyB0byBMMi9MMywganVzdCBpbnZh bGlkYXRlIEwxIGV4cGlyYXRpb24gdGltZSwKPiArCSAqIHNsZWVwaW5nIGlzIG5vdCBuZWVkZWQu Cj4gKwkgKi8KPiArCWlmIChyYXRlIDwgMTAwMCoxMDAwKjEwMDApCj4gKwkJZ290byBpbnZhbGlk YXRlX2wxX2V4cDsKPiArCj4gKwkvKgo+ICsJICogV2UgYXJlIGdvaW5nIHRvIEwwIHdpdGggcmF0 ZSA+PSAxR0h6LiBDaGVjayB3aGV0aGVyIHdlIGhhdmUgYmVlbiBhdAo+ICsJICogTDEgZm9yIGxv bmcgZW5vdWdoIHRpbWUuIElmIG5vdCwgZ28gdG8gTDEgZm9yIDIwbXMuCj4gKwkgKi8KPiArCWlm IChwbV9jcHUtPmwxX2V4cGlyYXRpb24gJiYgamlmZmllcyA+PSBwbV9jcHUtPmwxX2V4cGlyYXRp b24pCj4gKwkJZ290byBpbnZhbGlkYXRlX2wxX2V4cDsKPiAgCj4gIAlyZWdtYXBfdXBkYXRlX2Jp dHMoYmFzZSwgQVJNQURBXzM3WFhfTkJfQ1BVX0xPQUQsCj4gIAkJCSAgIEFSTUFEQV8zN1hYX05C X0NQVV9MT0FEX01BU0ssCj4gIAkJCSAgIEFSTUFEQV8zN1hYX0RWRlNfTE9BRF8xKTsKPiAgCW1z bGVlcCgyMCk7Cj4gKwo+ICtpbnZhbGlkYXRlX2wxX2V4cDoKPiArCXBtX2NwdS0+bDFfZXhwaXJh dGlvbiA9IDA7Cj4gIH0KPiAgCj4gIHN0YXRpYyBpbnQgY2xrX3BtX2NwdV9zZXRfcmF0ZShzdHJ1 Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAo+IEBAIC01NTMsNyArNTg0LDkgQEAg c3RhdGljIGludCBjbGtfcG1fY3B1X3NldF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25l ZCBsb25nIHJhdGUsCj4gIAkJCXJlZyA9IEFSTUFEQV8zN1hYX05CX0NQVV9MT0FEOwo+ICAJCQlt YXNrID0gQVJNQURBXzM3WFhfTkJfQ1BVX0xPQURfTUFTSzsKPiAgCj4gLQkJCWNsa19wbV9jcHVf c2V0X3JhdGVfd2EocmF0ZSwgYmFzZSk7Cj4gKwkJCS8qIEFwcGx5IHdvcmthcm91bmQgd2hlbiBi YXNlIENQVSBmcmVxdWVuY3kgaXMgMTAwMCBvciAxMjAwIE1IeiAqLwo+ICsJCQlpZiAocGFyZW50 X3JhdGUgPj0gMTAwMCoxMDAwKjEwMDApCj4gKwkJCQljbGtfcG1fY3B1X3NldF9yYXRlX3dhKHBt X2NwdSwgbG9hZF9sZXZlbCwgcmF0ZSwgYmFzZSk7Cj4gIAo+ICAJCQlyZWdtYXBfdXBkYXRlX2Jp dHMoYmFzZSwgcmVnLCBtYXNrLCBsb2FkX2xldmVsKTsKPiAgCj4gLS0gCj4gMi4yMC4xCj4KCi0t IApHcmVnb3J5IENsZW1lbnQsIEJvb3RsaW4KRW1iZWRkZWQgTGludXggYW5kIEtlcm5lbCBlbmdp bmVlcmluZwpodHRwOi8vYm9vdGxpbi5jb20KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFy bS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK