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=-19.3 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,NICE_REPLY_A,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 03697C433DB for ; Tue, 9 Mar 2021 16:10:17 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B1B2D650BB for ; Tue, 9 Mar 2021 16:10:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232129AbhCIQJq (ORCPT ); Tue, 9 Mar 2021 11:09:46 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52322 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232161AbhCIQJZ (ORCPT ); Tue, 9 Mar 2021 11:09:25 -0500 Received: from mail-pj1-x102a.google.com (mail-pj1-x102a.google.com [IPv6:2607:f8b0:4864:20::102a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CF880C06174A; Tue, 9 Mar 2021 08:09:25 -0800 (PST) Received: by mail-pj1-x102a.google.com with SMTP id f2-20020a17090a4a82b02900c67bf8dc69so5255898pjh.1; Tue, 09 Mar 2021 08:09:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=KaMXn0pMS8J3mRJDLiSjS4fXXVlLK3DYv12RDA96f1Y=; b=BjBB+2zmUOvsaNw0J75MSqjzIyy0S0HKp4/lMVvKyCgeZQcuqktpU497AbTnQODZtZ dszHS8WQqIWOoO6f3H1SlfcETtbpKZxiCv7Cg6s+Nu+uGCbCJ9VAUV0bwrZ4hbZgmpqr 5147Mz5iCbrp+drCN83YBwD5ctJWsmSFWs3u5Vqy4gplwrGYPNFaatCamkSeVO+gX/Vz 1Z2uy0wFxPBzhasDHBGZPaoXa3vkHkK6fEPABXhT8eSrCUL2Oe+Iu7zv2iNGfeQ3/Oq+ dopTDxgd5o4VBt5V+/EJysTx+3CFqxHiDRAGh1HJvc2HwJQFf1CeS6Tz4iB5EDQA3p7F Wpag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=KaMXn0pMS8J3mRJDLiSjS4fXXVlLK3DYv12RDA96f1Y=; b=dl4H8lpCjvMcttrFEIRVZvUuexdsfV3SN2SpDaChNhaQBpRipE4TNwoqp0P1Q6XUl8 UR7BU0/Uw4T3/bTAqeRrw78eeu133TSNLNucvaZM99LQKmOwdr6xbD++RV5IkTJhEfw+ 4VODF2S5SWfBNisa5uMOMjqRtQRVmcCpL3TuoXt5fVEFS3zptcGqYMUrvmwGd2nKTOLa xMHyYCiP95UaYrEjaW4dv+l7ZW0l8OI8RHO1g1Kjhz8FRUw+Ea2zTENChC1mfJuBYnCz l+9nXsq9cDtK4j3zaJkRXzh2K4hAyvf+I+OzeFWE1GAPuuQO5NQ2wLjYKN1fya9m74+G d5WQ== X-Gm-Message-State: AOAM530KdWyn4FiyeGHyWtDHpk9+q9Z5vZ/R0JngUBPWyjpAwcDvq+oX TQUFd6XS5VIfQIN0xTyUGZk= X-Google-Smtp-Source: ABdhPJwh1Wt9ebON43/2XTRoDlfivpp2Dw9EAQBxTjT62yc/V58eq9Oc22zqnF21AlOo0oyxw2xjEA== X-Received: by 2002:a17:902:6944:b029:e6:190d:56cd with SMTP id k4-20020a1709026944b02900e6190d56cdmr12101463plt.53.1615306165363; Tue, 09 Mar 2021 08:09:25 -0800 (PST) Received: from [172.30.1.19] ([14.32.163.5]) by smtp.gmail.com with ESMTPSA id i20sm13105337pgg.65.2021.03.09.08.09.19 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 09 Mar 2021 08:09:24 -0800 (PST) Subject: Re: [PATCH 09/11] PM / devfreq: governor: optimize simpleondemand get_target_freq To: Dong Aisheng , linux-pm@vger.kernel.org, linux-arm-kernel@lists.infradead.org Cc: dongas86@gmail.com, kernel@pengutronix.de, shawnguo@kernel.org, linux-imx@nxp.com, linux-kernel@vger.kernel.org, myungjoo.ham@samsung.com, kyungmin.park@samsung.com, cw00.choi@samsung.com, abel.vesa@nxp.com References: <1615294733-22761-1-git-send-email-aisheng.dong@nxp.com> <1615294733-22761-10-git-send-email-aisheng.dong@nxp.com> From: Chanwoo Choi Message-ID: <4cee7ace-e6b9-fa0c-7cfe-d794ac9deabf@gmail.com> Date: Wed, 10 Mar 2021 01:09:18 +0900 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.7.1 MIME-Version: 1.0 In-Reply-To: <1615294733-22761-10-git-send-email-aisheng.dong@nxp.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 21. 3. 9. 오후 9:58, Dong Aisheng wrote: > devfreq_simple_ondemand_data only needs to be initialized once when > calling devm_devfreq_add_device. It's unnecessary to put the data > check logic in the hot path (.get_target_freq()) where it will be > called all the time during polling. Instead, we only check and initialize > it one time during DEVFREQ_GOV_START. > > This also helps check data validability in advance during DEVFREQ_GOV_START > rather than checking it later when running .get_target_freq(). > > Signed-off-by: Dong Aisheng > --- > drivers/devfreq/governor_simpleondemand.c | 50 +++++++++++++++-------- > 1 file changed, 34 insertions(+), 16 deletions(-) > > diff --git a/drivers/devfreq/governor_simpleondemand.c b/drivers/devfreq/governor_simpleondemand.c > index ea287b57cbf3..341eb7e9dc04 100644 > --- a/drivers/devfreq/governor_simpleondemand.c > +++ b/drivers/devfreq/governor_simpleondemand.c > @@ -15,15 +15,19 @@ > /* Default constants for DevFreq-Simple-Ondemand (DFSO) */ > #define DFSO_UPTHRESHOLD (90) > #define DFSO_DOWNDIFFERENCTIAL (5) > + > +static struct devfreq_simple_ondemand_data od_default = { > + .upthreshold = DFSO_UPTHRESHOLD, > + .downdifferential = DFSO_DOWNDIFFERENCTIAL, > +}; > + > static int devfreq_simple_ondemand_func(struct devfreq *df, > unsigned long *freq) > { > int err; > struct devfreq_dev_status *stat; > unsigned long long a, b; > - unsigned int dfso_upthreshold = DFSO_UPTHRESHOLD; > - unsigned int dfso_downdifferential = DFSO_DOWNDIFFERENCTIAL; > - struct devfreq_simple_ondemand_data *data = df->data; > + struct devfreq_simple_ondemand_data *od = df->data; > > err = devfreq_update_stats(df); > if (err) > @@ -31,16 +35,6 @@ static int devfreq_simple_ondemand_func(struct devfreq *df, > > stat = &df->last_status; > > - if (data) { > - if (data->upthreshold) > - dfso_upthreshold = data->upthreshold; > - if (data->downdifferential) > - dfso_downdifferential = data->downdifferential; > - } > - if (dfso_upthreshold > 100 || > - dfso_upthreshold < dfso_downdifferential) > - return -EINVAL; > - > /* Assume MAX if it is going to be divided by zero */ > if (stat->total_time == 0) { > *freq = DEVFREQ_MAX_FREQ; > @@ -55,7 +49,7 @@ static int devfreq_simple_ondemand_func(struct devfreq *df, > > /* Set MAX if it's busy enough */ > if (stat->busy_time * 100 > > - stat->total_time * dfso_upthreshold) { > + stat->total_time * od->upthreshold) { > *freq = DEVFREQ_MAX_FREQ; > return 0; > } > @@ -68,7 +62,7 @@ static int devfreq_simple_ondemand_func(struct devfreq *df, > > /* Keep the current frequency */ > if (stat->busy_time * 100 > > - stat->total_time * (dfso_upthreshold - dfso_downdifferential)) { > + stat->total_time * (od->upthreshold - od->downdifferential)) { > *freq = stat->current_frequency; > return 0; > } > @@ -78,17 +72,41 @@ static int devfreq_simple_ondemand_func(struct devfreq *df, > a *= stat->current_frequency; > b = div_u64(a, stat->total_time); > b *= 100; > - b = div_u64(b, (dfso_upthreshold - dfso_downdifferential / 2)); > + b = div_u64(b, (od->upthreshold - od->downdifferential / 2)); > *freq = (unsigned long) b; > > return 0; > } > > +static int devfreq_simple_ondemand_check_od(struct devfreq *devfreq) > +{ > + struct devfreq_simple_ondemand_data *od = devfreq->data; > + > + if (od) { > + if (!od->upthreshold) > + od->upthreshold = DFSO_UPTHRESHOLD; > + > + if (!od->downdifferential) > + od->downdifferential = DFSO_DOWNDIFFERENCTIAL; > + > + if (od->upthreshold > 100 || > + od->upthreshold < od->downdifferential) > + return -EINVAL; > + } else { > + od = &od_default; > + } > + > + return 0; > +} > + > static int devfreq_simple_ondemand_handler(struct devfreq *devfreq, > unsigned int event, void *data) > { > switch (event) { > case DEVFREQ_GOV_START: > + if (devfreq_simple_ondemand_check_od(devfreq)) > + return -EINVAL; > + > return devfreq_monitor_start(devfreq); > > case DEVFREQ_GOV_STOP: > I'm editing the upthreshold and downdifferential for exposing them via sysfs. So that after my work to expose them via sysfs, send the patches if you think that need to do more about them. [1] https://git.kernel.org/pub/scm/linux/kernel/git/chanwoo/linux.git/commit/?h=devfreq-testing&id=dc9e557845c17cee173a6adcc3ae14940da03f44 -- Best Regards, Samsung Electronics Chanwoo Choi 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=-17.2 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,NICE_REPLY_A, 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 1A44FC433E0 for ; Tue, 9 Mar 2021 16:10:50 +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 A6E6464FE2 for ; Tue, 9 Mar 2021 16:10:49 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A6E6464FE2 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.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-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:Cc:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=AFi4iXa1w5L4fIzcYUf8+QbN8j3bIERT3X2dlFivhMY=; b=gBran3H54Fy7mUXVqPME0RCF6 6HEc0mHCVCnQx0if+llnnuv5wGH1vrElDkv+paQbxLe6ZlSc52HC6p209G3A10bH5NmGClhyvKwFj 1j7LG3S1xKn7oeisH29hIeGbmWhZOsWVPSbE+pv9yxeCKvyW+b98eOsJA/R6KX6vI6pzKpiO7cAba HAccLOJBr6NzzML25IZssGFzboBnNHaN0fnIJUXIIf+atRQt23yEPsjsiE5dTrZZrw0Jo4SiQmcpq Wlkltmtr/aale9jI2aIzZAuvwFzLyX2IqLQVCpAiPMr81kCHqMbjcczTbmSD0WI/YZo1vkoNhjklg I2XB6+aag==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lJevM-0052ac-Ew; Tue, 09 Mar 2021 16:09:33 +0000 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lJevH-0052Zl-8C for linux-arm-kernel@lists.infradead.org; Tue, 09 Mar 2021 16:09:29 +0000 Received: by mail-pj1-x1031.google.com with SMTP id x7-20020a17090a2b07b02900c0ea793940so5257649pjc.2 for ; Tue, 09 Mar 2021 08:09:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=KaMXn0pMS8J3mRJDLiSjS4fXXVlLK3DYv12RDA96f1Y=; b=BjBB+2zmUOvsaNw0J75MSqjzIyy0S0HKp4/lMVvKyCgeZQcuqktpU497AbTnQODZtZ dszHS8WQqIWOoO6f3H1SlfcETtbpKZxiCv7Cg6s+Nu+uGCbCJ9VAUV0bwrZ4hbZgmpqr 5147Mz5iCbrp+drCN83YBwD5ctJWsmSFWs3u5Vqy4gplwrGYPNFaatCamkSeVO+gX/Vz 1Z2uy0wFxPBzhasDHBGZPaoXa3vkHkK6fEPABXhT8eSrCUL2Oe+Iu7zv2iNGfeQ3/Oq+ dopTDxgd5o4VBt5V+/EJysTx+3CFqxHiDRAGh1HJvc2HwJQFf1CeS6Tz4iB5EDQA3p7F Wpag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=KaMXn0pMS8J3mRJDLiSjS4fXXVlLK3DYv12RDA96f1Y=; b=UMXGmVlqiHhqGg6K6W/rbJIKA6TT0FvQ9gY/79YZCyDRRmahXqvYr8Zh7uVqOJSS9x TvofbnZwwCs072jVUlCsNo9IgO8GfK+PO7xhipjSIs/Dll2p54Ckrac1bTKQ9opDQStq Ycu+qzfD51mKcm7pX/bdkr2BoSFg5LsGAHYq/naVifArlfgOuqx3m5KIPDkLZWVm+H++ 5Nl1wFJPcDvhRVP2O7hByjmpFMQK6ApsrYXEMJgQ340c0hKkfqyQ8BpVDI3X09td/kHv TCgnSAzjQiRkSsfgtXQNpot1t0TTl5J+VUExNFFVhBm+u5GWlSoHAR7XuevXLJtruDOY VMrg== X-Gm-Message-State: AOAM532xiVOgRaCLOr+4Hv09InvlHu42s3wiKNX9utDyqdWgCXx6eP+d P6AHyVICmHr8nRt1b8jCrbo= X-Google-Smtp-Source: ABdhPJwh1Wt9ebON43/2XTRoDlfivpp2Dw9EAQBxTjT62yc/V58eq9Oc22zqnF21AlOo0oyxw2xjEA== X-Received: by 2002:a17:902:6944:b029:e6:190d:56cd with SMTP id k4-20020a1709026944b02900e6190d56cdmr12101463plt.53.1615306165363; Tue, 09 Mar 2021 08:09:25 -0800 (PST) Received: from [172.30.1.19] ([14.32.163.5]) by smtp.gmail.com with ESMTPSA id i20sm13105337pgg.65.2021.03.09.08.09.19 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 09 Mar 2021 08:09:24 -0800 (PST) Subject: Re: [PATCH 09/11] PM / devfreq: governor: optimize simpleondemand get_target_freq To: Dong Aisheng , linux-pm@vger.kernel.org, linux-arm-kernel@lists.infradead.org Cc: dongas86@gmail.com, kernel@pengutronix.de, shawnguo@kernel.org, linux-imx@nxp.com, linux-kernel@vger.kernel.org, myungjoo.ham@samsung.com, kyungmin.park@samsung.com, cw00.choi@samsung.com, abel.vesa@nxp.com References: <1615294733-22761-1-git-send-email-aisheng.dong@nxp.com> <1615294733-22761-10-git-send-email-aisheng.dong@nxp.com> From: Chanwoo Choi Message-ID: <4cee7ace-e6b9-fa0c-7cfe-d794ac9deabf@gmail.com> Date: Wed, 10 Mar 2021 01:09:18 +0900 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.7.1 MIME-Version: 1.0 In-Reply-To: <1615294733-22761-10-git-send-email-aisheng.dong@nxp.com> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210309_160927_333985_1434CCBF X-CRM114-Status: GOOD ( 30.01 ) 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gMjEuIDMuIDkuIOyYpO2bhCA5OjU4LCBEb25nIEFpc2hlbmcgd3JvdGU6Cj4gZGV2ZnJlcV9z aW1wbGVfb25kZW1hbmRfZGF0YSBvbmx5IG5lZWRzIHRvIGJlIGluaXRpYWxpemVkIG9uY2Ugd2hl bgo+IGNhbGxpbmcgZGV2bV9kZXZmcmVxX2FkZF9kZXZpY2UuIEl0J3MgdW5uZWNlc3NhcnkgdG8g cHV0IHRoZSBkYXRhCj4gY2hlY2sgbG9naWMgaW4gdGhlIGhvdCBwYXRoICguZ2V0X3RhcmdldF9m cmVxKCkpIHdoZXJlIGl0IHdpbGwgYmUKPiBjYWxsZWQgYWxsIHRoZSB0aW1lIGR1cmluZyBwb2xs aW5nLiBJbnN0ZWFkLCB3ZSBvbmx5IGNoZWNrIGFuZCBpbml0aWFsaXplCj4gaXQgb25lIHRpbWUg ZHVyaW5nIERFVkZSRVFfR09WX1NUQVJULgo+IAo+IFRoaXMgYWxzbyBoZWxwcyBjaGVjayBkYXRh IHZhbGlkYWJpbGl0eSBpbiBhZHZhbmNlIGR1cmluZyBERVZGUkVRX0dPVl9TVEFSVAo+IHJhdGhl ciB0aGFuIGNoZWNraW5nIGl0IGxhdGVyIHdoZW4gcnVubmluZyAuZ2V0X3RhcmdldF9mcmVxKCku Cj4gCj4gU2lnbmVkLW9mZi1ieTogRG9uZyBBaXNoZW5nIDxhaXNoZW5nLmRvbmdAbnhwLmNvbT4K PiAtLS0KPiAgIGRyaXZlcnMvZGV2ZnJlcS9nb3Zlcm5vcl9zaW1wbGVvbmRlbWFuZC5jIHwgNTAg KysrKysrKysrKysrKysrLS0tLS0tLS0KPiAgIDEgZmlsZSBjaGFuZ2VkLCAzNCBpbnNlcnRpb25z KCspLCAxNiBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9kZXZmcmVxL2dv dmVybm9yX3NpbXBsZW9uZGVtYW5kLmMgYi9kcml2ZXJzL2RldmZyZXEvZ292ZXJub3Jfc2ltcGxl b25kZW1hbmQuYwo+IGluZGV4IGVhMjg3YjU3Y2JmMy4uMzQxZWI3ZTlkYzA0IDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZGV2ZnJlcS9nb3Zlcm5vcl9zaW1wbGVvbmRlbWFuZC5jCj4gKysrIGIvZHJp dmVycy9kZXZmcmVxL2dvdmVybm9yX3NpbXBsZW9uZGVtYW5kLmMKPiBAQCAtMTUsMTUgKzE1LDE5 IEBACj4gICAvKiBEZWZhdWx0IGNvbnN0YW50cyBmb3IgRGV2RnJlcS1TaW1wbGUtT25kZW1hbmQg KERGU08pICovCj4gICAjZGVmaW5lIERGU09fVVBUSFJFU0hPTEQJKDkwKQo+ICAgI2RlZmluZSBE RlNPX0RPV05ESUZGRVJFTkNUSUFMCSg1KQo+ICsKPiArc3RhdGljIHN0cnVjdCBkZXZmcmVxX3Np bXBsZV9vbmRlbWFuZF9kYXRhIG9kX2RlZmF1bHQgPSB7Cj4gKwkudXB0aHJlc2hvbGQgPSBERlNP X1VQVEhSRVNIT0xELAo+ICsJLmRvd25kaWZmZXJlbnRpYWwgPSBERlNPX0RPV05ESUZGRVJFTkNU SUFMLAo+ICt9Owo+ICsKPiAgIHN0YXRpYyBpbnQgZGV2ZnJlcV9zaW1wbGVfb25kZW1hbmRfZnVu YyhzdHJ1Y3QgZGV2ZnJlcSAqZGYsCj4gICAJCQkJCXVuc2lnbmVkIGxvbmcgKmZyZXEpCj4gICB7 Cj4gICAJaW50IGVycjsKPiAgIAlzdHJ1Y3QgZGV2ZnJlcV9kZXZfc3RhdHVzICpzdGF0Owo+ICAg CXVuc2lnbmVkIGxvbmcgbG9uZyBhLCBiOwo+IC0JdW5zaWduZWQgaW50IGRmc29fdXB0aHJlc2hv bGQgPSBERlNPX1VQVEhSRVNIT0xEOwo+IC0JdW5zaWduZWQgaW50IGRmc29fZG93bmRpZmZlcmVu dGlhbCA9IERGU09fRE9XTkRJRkZFUkVOQ1RJQUw7Cj4gLQlzdHJ1Y3QgZGV2ZnJlcV9zaW1wbGVf b25kZW1hbmRfZGF0YSAqZGF0YSA9IGRmLT5kYXRhOwo+ICsJc3RydWN0IGRldmZyZXFfc2ltcGxl X29uZGVtYW5kX2RhdGEgKm9kID0gZGYtPmRhdGE7Cj4gICAKPiAgIAllcnIgPSBkZXZmcmVxX3Vw ZGF0ZV9zdGF0cyhkZik7Cj4gICAJaWYgKGVycikKPiBAQCAtMzEsMTYgKzM1LDYgQEAgc3RhdGlj IGludCBkZXZmcmVxX3NpbXBsZV9vbmRlbWFuZF9mdW5jKHN0cnVjdCBkZXZmcmVxICpkZiwKPiAg IAo+ICAgCXN0YXQgPSAmZGYtPmxhc3Rfc3RhdHVzOwo+ICAgCj4gLQlpZiAoZGF0YSkgewo+IC0J CWlmIChkYXRhLT51cHRocmVzaG9sZCkKPiAtCQkJZGZzb191cHRocmVzaG9sZCA9IGRhdGEtPnVw dGhyZXNob2xkOwo+IC0JCWlmIChkYXRhLT5kb3duZGlmZmVyZW50aWFsKQo+IC0JCQlkZnNvX2Rv d25kaWZmZXJlbnRpYWwgPSBkYXRhLT5kb3duZGlmZmVyZW50aWFsOwo+IC0JfQo+IC0JaWYgKGRm c29fdXB0aHJlc2hvbGQgPiAxMDAgfHwKPiAtCSAgICBkZnNvX3VwdGhyZXNob2xkIDwgZGZzb19k b3duZGlmZmVyZW50aWFsKQo+IC0JCXJldHVybiAtRUlOVkFMOwo+IC0KPiAgIAkvKiBBc3N1bWUg TUFYIGlmIGl0IGlzIGdvaW5nIHRvIGJlIGRpdmlkZWQgYnkgemVybyAqLwo+ICAgCWlmIChzdGF0 LT50b3RhbF90aW1lID09IDApIHsKPiAgIAkJKmZyZXEgPSBERVZGUkVRX01BWF9GUkVROwo+IEBA IC01NSw3ICs0OSw3IEBAIHN0YXRpYyBpbnQgZGV2ZnJlcV9zaW1wbGVfb25kZW1hbmRfZnVuYyhz dHJ1Y3QgZGV2ZnJlcSAqZGYsCj4gICAKPiAgIAkvKiBTZXQgTUFYIGlmIGl0J3MgYnVzeSBlbm91 Z2ggKi8KPiAgIAlpZiAoc3RhdC0+YnVzeV90aW1lICogMTAwID4KPiAtCSAgICBzdGF0LT50b3Rh bF90aW1lICogZGZzb191cHRocmVzaG9sZCkgewo+ICsJICAgIHN0YXQtPnRvdGFsX3RpbWUgKiBv ZC0+dXB0aHJlc2hvbGQpIHsKPiAgIAkJKmZyZXEgPSBERVZGUkVRX01BWF9GUkVROwo+ICAgCQly ZXR1cm4gMDsKPiAgIAl9Cj4gQEAgLTY4LDcgKzYyLDcgQEAgc3RhdGljIGludCBkZXZmcmVxX3Np bXBsZV9vbmRlbWFuZF9mdW5jKHN0cnVjdCBkZXZmcmVxICpkZiwKPiAgIAo+ICAgCS8qIEtlZXAg dGhlIGN1cnJlbnQgZnJlcXVlbmN5ICovCj4gICAJaWYgKHN0YXQtPmJ1c3lfdGltZSAqIDEwMCA+ Cj4gLQkgICAgc3RhdC0+dG90YWxfdGltZSAqIChkZnNvX3VwdGhyZXNob2xkIC0gZGZzb19kb3du ZGlmZmVyZW50aWFsKSkgewo+ICsJICAgIHN0YXQtPnRvdGFsX3RpbWUgKiAob2QtPnVwdGhyZXNo b2xkIC0gb2QtPmRvd25kaWZmZXJlbnRpYWwpKSB7Cj4gICAJCSpmcmVxID0gc3RhdC0+Y3VycmVu dF9mcmVxdWVuY3k7Cj4gICAJCXJldHVybiAwOwo+ICAgCX0KPiBAQCAtNzgsMTcgKzcyLDQxIEBA IHN0YXRpYyBpbnQgZGV2ZnJlcV9zaW1wbGVfb25kZW1hbmRfZnVuYyhzdHJ1Y3QgZGV2ZnJlcSAq ZGYsCj4gICAJYSAqPSBzdGF0LT5jdXJyZW50X2ZyZXF1ZW5jeTsKPiAgIAliID0gZGl2X3U2NChh LCBzdGF0LT50b3RhbF90aW1lKTsKPiAgIAliICo9IDEwMDsKPiAtCWIgPSBkaXZfdTY0KGIsIChk ZnNvX3VwdGhyZXNob2xkIC0gZGZzb19kb3duZGlmZmVyZW50aWFsIC8gMikpOwo+ICsJYiA9IGRp dl91NjQoYiwgKG9kLT51cHRocmVzaG9sZCAtIG9kLT5kb3duZGlmZmVyZW50aWFsIC8gMikpOwo+ ICAgCSpmcmVxID0gKHVuc2lnbmVkIGxvbmcpIGI7Cj4gICAKPiAgIAlyZXR1cm4gMDsKPiAgIH0K PiAgIAo+ICtzdGF0aWMgaW50IGRldmZyZXFfc2ltcGxlX29uZGVtYW5kX2NoZWNrX29kKHN0cnVj dCBkZXZmcmVxICpkZXZmcmVxKQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2ZnJlcV9zaW1wbGVfb25kZW1h bmRfZGF0YSAqb2QgPSBkZXZmcmVxLT5kYXRhOwo+ICsKPiArCWlmIChvZCkgewo+ICsJCWlmICgh b2QtPnVwdGhyZXNob2xkKQo+ICsJCQlvZC0+dXB0aHJlc2hvbGQgPSBERlNPX1VQVEhSRVNIT0xE Owo+ICsKPiArCQlpZiAoIW9kLT5kb3duZGlmZmVyZW50aWFsKQo+ICsJCQlvZC0+ZG93bmRpZmZl cmVudGlhbCA9IERGU09fRE9XTkRJRkZFUkVOQ1RJQUw7Cj4gKwo+ICsJCWlmIChvZC0+dXB0aHJl c2hvbGQgPiAxMDAgfHwKPiArCQkgICAgb2QtPnVwdGhyZXNob2xkIDwgb2QtPmRvd25kaWZmZXJl bnRpYWwpCj4gKwkJCXJldHVybiAtRUlOVkFMOwo+ICsJfSBlbHNlIHsKPiArCQlvZCA9ICZvZF9k ZWZhdWx0Owo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICAgc3RhdGljIGludCBk ZXZmcmVxX3NpbXBsZV9vbmRlbWFuZF9oYW5kbGVyKHN0cnVjdCBkZXZmcmVxICpkZXZmcmVxLAo+ ICAgCQkJCXVuc2lnbmVkIGludCBldmVudCwgdm9pZCAqZGF0YSkKPiAgIHsKPiAgIAlzd2l0Y2gg KGV2ZW50KSB7Cj4gICAJY2FzZSBERVZGUkVRX0dPVl9TVEFSVDoKPiArCQlpZiAoZGV2ZnJlcV9z aW1wbGVfb25kZW1hbmRfY2hlY2tfb2QoZGV2ZnJlcSkpCj4gKwkJCXJldHVybiAtRUlOVkFMOwo+ ICsKPiAgIAkJcmV0dXJuIGRldmZyZXFfbW9uaXRvcl9zdGFydChkZXZmcmVxKTsKPiAgIAo+ICAg CWNhc2UgREVWRlJFUV9HT1ZfU1RPUDoKPiAKCkknbSBlZGl0aW5nIHRoZSB1cHRocmVzaG9sZCBh bmQgZG93bmRpZmZlcmVudGlhbCBmb3IgZXhwb3NpbmcgdGhlbQp2aWEgc3lzZnMuIFNvIHRoYXQg YWZ0ZXIgbXkgd29yayB0byBleHBvc2UgdGhlbSB2aWEgc3lzZnMsCnNlbmQgdGhlIHBhdGNoZXMg aWYgeW91IHRoaW5rIHRoYXQgbmVlZCB0byBkbyBtb3JlIGFib3V0IHRoZW0uCgpbMV0gCmh0dHBz Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2NoYW53b28vbGludXgu Z2l0L2NvbW1pdC8/aD1kZXZmcmVxLXRlc3RpbmcmaWQ9ZGM5ZTU1Nzg0NWMxN2NlZTE3M2E2YWRj YzNhZTE0OTQwZGEwM2Y0NAoKLS0gCkJlc3QgUmVnYXJkcywKU2Ftc3VuZyBFbGVjdHJvbmljcwpD aGFud29vIENob2kKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMu aW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2xpbnV4LWFybS1rZXJuZWwK