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=-12.7 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,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 340A5C433E0 for ; Thu, 18 Mar 2021 08:04:09 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id EA23C64F40 for ; Thu, 18 Mar 2021 08:04:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229646AbhCRIDh (ORCPT ); Thu, 18 Mar 2021 04:03:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56034 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229739AbhCRIDf (ORCPT ); Thu, 18 Mar 2021 04:03:35 -0400 Received: from mail-ot1-x32f.google.com (mail-ot1-x32f.google.com [IPv6:2607:f8b0:4864:20::32f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E7B72C06174A; Thu, 18 Mar 2021 01:03:34 -0700 (PDT) Received: by mail-ot1-x32f.google.com with SMTP id l23-20020a05683004b7b02901b529d1a2fdso4389740otd.8; Thu, 18 Mar 2021 01:03:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=gj4OmdN5tx/5+tDZuwuPTYidKcyw8/yUcVPVnhwQIVE=; b=q1ki6sh1O5Qj9m2qmex0zXq5sjCeqvN6FjyK1HFxhzA583gUVH4Akb+ZPWZHsE8MDa Y8/Qcg1ARj/8r6LJWpmuPYUxqyzj/lCXkr8vhKLsZUM7xV/QdUuSIeSmPRo6lF9npSnz GBeI6pUkgAWU3u2OLUqTRQ2zcLKcIjQzJlvVbiuqFmUw3q5/qIrGj7pykviYnvzEWvap eXymyj6EuCu7TIld9rhegV6F2XDOpUvFYcjDkpnPHKRg93NTGSXhg6YpTvLPuWWo3gnV bbXU7IrJtKWUgdmekVMbb5xQ5eojq4Q7fkqh7hCiOe5hMMBef9KjZDLEoh/Ex27hDptk UHMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=gj4OmdN5tx/5+tDZuwuPTYidKcyw8/yUcVPVnhwQIVE=; b=JuhZGp+DdyHkGLPVesnDJ6IKHtUtlqPWR2HE1YOj0NjUgxrP9yS8e4v7EI4F+ozyyx 2kv5JPOKVkcqCXlXAtbwU6bfE2WgaACwVI1faYwlVb0XSiqWpxfZ6XSRLl9E2v0uNQjR qom6Dqc3gX576yrIAxA7mz9jfbz9GiBufPQVVM0LXmGxkl+tRBDYof37pkXNzCchGP4h m3alnIsNblGsR0NdZCc9nrsncF81+Hk2XAZX6OSWsQNbuCowXok4IYRTtfDTSeTJPsOU lKELkoOI9t0+1Cbvu0nThujrWQy3G/XR0dmaPhvvLxBs3G/3WJMAsgh4V6ZKOyfyG26n uUaQ== X-Gm-Message-State: AOAM533Oi2TJLcUyQ8y7zDi3Jyr5UbP1Nc+CHWEpdX6AUz640+smHOtY fNae6NJR55rI1mRl4BJhAazcXQD3VQJFe/zG318= X-Google-Smtp-Source: ABdhPJyzUk4k5Kpwrfg3/mGnfb4AXTnNw16Pzp7nvYDVsBVynnJiNrUmd1QGZ+KgUnhOf/y8WRtj8JfjMeBgfMR38uY= X-Received: by 2002:a05:6830:408a:: with SMTP id x10mr6494198ott.248.1616054614328; Thu, 18 Mar 2021 01:03:34 -0700 (PDT) MIME-Version: 1.0 References: <1615294733-22761-1-git-send-email-aisheng.dong@nxp.com> <1615294733-22761-8-git-send-email-aisheng.dong@nxp.com> <31be2267-8988-f162-f5a6-6e6389bbf1fb@samsung.com> In-Reply-To: From: Dong Aisheng Date: Thu, 18 Mar 2021 16:03:22 +0800 Message-ID: Subject: Re: [PATCH 07/11] PM / devfreq: check get_dev_status before start monitor To: Chanwoo Choi Cc: Chanwoo Choi , Dong Aisheng , Linux PM , "moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" , Sascha Hauer , Shawn Guo , dl-linux-imx , open list , myungjoo.ham@samsung.com, kyungmin.park@samsung.com, Abel Vesa Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Chanwoo, On Sat, Mar 13, 2021 at 2:45 PM Dong Aisheng wrote: > > On Sat, Mar 13, 2021 at 12:09 AM Chanwoo Choi wrote: > > > > On 21. 3. 12. =EC=98=A4=ED=9B=84 7:57, Dong Aisheng wrote: > > > On Thu, Mar 11, 2021 at 2:54 PM Chanwoo Choi = wrote: > > >> > > >> On 3/10/21 1:56 PM, Dong Aisheng wrote: > > >>> On Wed, Mar 10, 2021 at 11:08 AM Chanwoo Choi wrote: > > >>>> > > >>>> On 3/10/21 11:56 AM, Dong Aisheng wrote: > > >>>>> On Wed, Mar 10, 2021 at 12:12 AM Chanwoo Choi wrote: > > >>>>>> > > >>>>>> On 21. 3. 10. =EC=98=A4=EC=A0=84 12:58, Chanwoo Choi wrote: > > >>>>>>> On 21. 3. 9. =EC=98=A4=ED=9B=84 9:58, Dong Aisheng wrote: > > >>>>>>>> The devfreq monitor depends on the device to provide load info= rmation > > >>>>>>>> by .get_dev_status() to calculate the next target freq. > > >>>>>>>> > > >>>>>>>> And this will cause changing governor to simple ondemand fail > > >>>>>>>> if device can't support. > > >>>>>>>> > > >>>>>>>> Signed-off-by: Dong Aisheng > > >>>>>>>> --- > > >>>>>>>> drivers/devfreq/devfreq.c | 10 +++++++--- > > >>>>>>>> drivers/devfreq/governor.h | 2 +- > > >>>>>>>> drivers/devfreq/governor_simpleondemand.c | 3 +-- > > >>>>>>>> 3 files changed, 9 insertions(+), 6 deletions(-) > > >>>>>>>> > > >>>>>>>> diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfr= eq.c > > >>>>>>>> index 7231fe6862a2..d1787b6c7d7c 100644 > > >>>>>>>> --- a/drivers/devfreq/devfreq.c > > >>>>>>>> +++ b/drivers/devfreq/devfreq.c > > >>>>>>>> @@ -482,10 +482,13 @@ static void devfreq_monitor(struct work_= struct > > >>>>>>>> *work) > > >>>>>>>> * to be called from governor in response to DEVFREQ_GOV_ST= ART > > >>>>>>>> * event when device is added to devfreq framework. > > >>>>>>>> */ > > >>>>>>>> -void devfreq_monitor_start(struct devfreq *devfreq) > > >>>>>>>> +int devfreq_monitor_start(struct devfreq *devfreq) > > >>>>>>>> { > > >>>>>>>> if (IS_SUPPORTED_FLAG(devfreq->governor->flags, IRQ_DRI= VEN)) > > >>>>>>>> - return; > > >>>>>>>> + return 0; > > >>>>>>>> + > > >>>>>>>> + if (!devfreq->profile->get_dev_status) > > >>>>>>>> + return -EINVAL; > > >>>>>> > > >>>>>> Again, I think that get_dev_status is not used for all governors= . > > >>>>>> So that it cause the governor start fail. Don't check whether > > >>>>>> .get_dev_status is NULL or not. > > >>>>>> > > >>>>> > > >>>>> I'm not quite understand your point. > > >>>>> it is used by governor_simpleondemand.c and tegra_devfreq_governo= r. > > >>>>> get_target_freq -> devfreq_update_stats -> get_dev_status > > >>>> > > >>>> The devfreq can add the new governor by anyone. > > >>>> So these functions like devfreq_monitor_* have to support > > >>>> the governors and also must support the governor to be added > > >>>> in the future. > > >>> > > >>> Yes, but devfreq_monitor_* is only used by polling mode, right? > > >>> The governor using it has to implement get_dev_status unless > > >>> there's an exception in the future. > > >>> > > >>> Currently this patch wants to address the issue that user can switc= h > > >>> to ondemand governor (polling mode) by sysfs even devices does > > >>> not support it (no get_dev_status implemented). > > >> > > >> As I commented, I'll fix this issue. If devfreq driver doesn't imple= ment > > >> the .get_dev_status, don't show it via available_governors. I think = that > > >> it is fundamental solution to fix this issue. > > > > > > Sounds good > > > > > >> So on this version, > > >> don't add the this conditional statement on this function > > >> > > > > > > Almost all this patch did is adding a checking for get_dev_status. > > > So do you mean drop this patch? > > > I wonder it's still a necessary checking to explicitly tell devfreq m= onitor > > > users that get_dev_status is needed during governor startup. > > > > I think that the it is enough to check .get_dev_status in > > devfreq_update_stats. We have to check it on where it is used. > > > > I think the drawback of only checking .get_dev_status in > devfreq_update_stats is: > 1. devfreq will still register successfully and ondemand governor starts = ok > 2. ondemand governor will still be shown in sysfs which is something > you want to fix > 3. devfreq will end up printing endless error messages in devfreq_monitor= worker > "dvfs failed with (%d) error" as the possible missing .get_dev_status > > So i wonder if you don't like changing the common devfreq_monitor_start i= n order > to make it look common for all governors, then we probably still need > to fix it in > ondemand governor in order to avoid the possible above issues. > > static int devfreq_simple_ondemand_handler(struct devfreq *devfreq, > unsigned int event, void *data) > { > switch (event) { > case DEVFREQ_GOV_START: > if (!devfreq->profile->get_dev_status) > return -EINVAL; > > return devfreq_monitor_start(devfreq); > ... > } > > How do you think? Any feedback? I'm waiting for your confirmation whether dropping this one, then I can re-sent the series. Regards Aisheng > > Regards > Aisheng > > > > > > > >> And on next version, please use the capital letter for first charact= er > > >> on patch title as following: > > >> > > >> - PM / devfreq: Check get_dev_status before start monitor > > >> > > > > > > Okay to me. > > > Thanks for the suggestion. > > > > > > Regards > > > Aisheng > > > > > >>> > > >>> Regards > > >>> Aisheng > > >>> > > >>>> > > >>>>> > > >>>>> Without checking, device can switch to ondemand governor if it do= es not support. > > >>>>> > > >>>>> Am i missed something? > > >>>>> > > >>>>> Regards > > >>>>> Aisheng > > >>>>> > > >>>>>>>> switch (devfreq->profile->timer) { > > >>>>>>>> case DEVFREQ_TIMER_DEFERRABLE: > > >>>>>>>> @@ -495,12 +498,13 @@ void devfreq_monitor_start(struct devfre= q *devfreq) > > >>>>>>>> INIT_DELAYED_WORK(&devfreq->work, devfreq_monitor); > > >>>>>>>> break; > > >>>>>>>> default: > > >>>>>>>> - return; > > >>>>>>>> + return -EINVAL; > > >>>>>>>> } > > >>>>>>>> if (devfreq->profile->polling_ms) > > >>>>>>>> queue_delayed_work(devfreq_wq, &devfreq->work, > > >>>>>>>> msecs_to_jiffies(devfreq->profile->polling_ms))= ; > > >>>>>>>> + return 0; > > >>>>>>>> } > > >>>>>>>> EXPORT_SYMBOL(devfreq_monitor_start); > > >>>>>>>> diff --git a/drivers/devfreq/governor.h b/drivers/devfreq/gove= rnor.h > > >>>>>>>> index 5cee3f64fe2b..31af6d072a10 100644 > > >>>>>>>> --- a/drivers/devfreq/governor.h > > >>>>>>>> +++ b/drivers/devfreq/governor.h > > >>>>>>>> @@ -75,7 +75,7 @@ struct devfreq_governor { > > >>>>>>>> unsigned int event, void *data); > > >>>>>>>> }; > > >>>>>>>> -void devfreq_monitor_start(struct devfreq *devfreq); > > >>>>>>>> +int devfreq_monitor_start(struct devfreq *devfreq); > > >>>>>>>> void devfreq_monitor_stop(struct devfreq *devfreq); > > >>>>>>>> void devfreq_monitor_suspend(struct devfreq *devfreq); > > >>>>>>>> void devfreq_monitor_resume(struct devfreq *devfreq); > > >>>>>>>> diff --git a/drivers/devfreq/governor_simpleondemand.c > > >>>>>>>> b/drivers/devfreq/governor_simpleondemand.c > > >>>>>>>> index d57b82a2b570..ea287b57cbf3 100644 > > >>>>>>>> --- a/drivers/devfreq/governor_simpleondemand.c > > >>>>>>>> +++ b/drivers/devfreq/governor_simpleondemand.c > > >>>>>>>> @@ -89,8 +89,7 @@ static int devfreq_simple_ondemand_handler(s= truct > > >>>>>>>> devfreq *devfreq, > > >>>>>>>> { > > >>>>>>>> switch (event) { > > >>>>>>>> case DEVFREQ_GOV_START: > > >>>>>>>> - devfreq_monitor_start(devfreq); > > >>>>>>>> - break; > > >>>>>>>> + return devfreq_monitor_start(devfreq); > > >>>>>>>> case DEVFREQ_GOV_STOP: > > >>>>>>>> devfreq_monitor_stop(devfreq); > > >>>>>>>> > > >>>>>>> > > >>>>>>> Need to handle the all points of devfreq_monitor_start() usage. > > >>>>>>> please check the tegra30-devfreq.c for this update. > > >>>>>>> > > >>>>>>> $ grep -rn "devfreq_monitor_start" drivers/ > > >>>>>>> drivers/devfreq/governor_simpleondemand.c:92: > > >>>>>>> devfreq_monitor_start(devfreq); > > >>>>>>> drivers/devfreq/tegra30-devfreq.c:744: > > >>>>>>> devfreq_monitor_start(devfreq); > > >>>>>>> ...... > > >>>>>>> > > >>>>>> > > >>>>>> > > >>>>>> -- > > >>>>>> Best Regards, > > >>>>>> Samsung Electronics > > >>>>>> Chanwoo Choi > > >>>>> > > >>>>> > > >>>> > > >>>> > > >>>> -- > > >>>> Best Regards, > > >>>> Chanwoo Choi > > >>>> Samsung Electronics > > >>> > > >>> > > >> > > >> > > >> -- > > >> Best Regards, > > >> Chanwoo Choi > > >> Samsung Electronics > > > > > > -- > > 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=-10.7 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,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 37B80C433E0 for ; Thu, 18 Mar 2021 08:05:14 +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 9C96164F18 for ; Thu, 18 Mar 2021 08:05:13 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9C96164F18 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-Transfer-Encoding :Content-Type:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:Cc:To:Subject:Message-ID:Date:From:In-Reply-To: References:MIME-Version:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=A7BKYfEIJ0HpxvoxnHDgletqnLK9mFBEw5aSWxCr+xM=; b=eY2iQ6PDzCVLkJgMAypeNQpoo NojPU0ixZY6Lg93nBvrmxyoaC8gzTTDECSrpE6kwWmxX9O4wPeLtWT+rEyFsQkB2mIkMbuTlJ5f/y mR04j1kmvJuQjuMBqlx5kkMZJ5ZYR0aXMBmyZVRYO70HJ0bCgxT2WXFn8xqhS+kgS2eQMkgFTfcis EmbqFfxkReFMKXAC4bca+3XBUVp0bo0uduJZOuzj77ipcGGYJzWW7Pke/KycARv2+CPD3jla2Vla9 33nUO2XR2e8nTd5fWNf1O5Uv9mqA2oLnE7NTyQjdXuUY5R59TAxB9yrrqsqroCKQGNx6nxeUDRS+x GMWjahr/g==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lMnd6-004ieZ-HS; Thu, 18 Mar 2021 08:03:40 +0000 Received: from mail-ot1-x32a.google.com ([2607:f8b0:4864:20::32a]) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lMnd2-004idx-4S for linux-arm-kernel@lists.infradead.org; Thu, 18 Mar 2021 08:03:38 +0000 Received: by mail-ot1-x32a.google.com with SMTP id w31-20020a9d36220000b02901f2cbfc9743so4115474otb.7 for ; Thu, 18 Mar 2021 01:03:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=gj4OmdN5tx/5+tDZuwuPTYidKcyw8/yUcVPVnhwQIVE=; b=q1ki6sh1O5Qj9m2qmex0zXq5sjCeqvN6FjyK1HFxhzA583gUVH4Akb+ZPWZHsE8MDa Y8/Qcg1ARj/8r6LJWpmuPYUxqyzj/lCXkr8vhKLsZUM7xV/QdUuSIeSmPRo6lF9npSnz GBeI6pUkgAWU3u2OLUqTRQ2zcLKcIjQzJlvVbiuqFmUw3q5/qIrGj7pykviYnvzEWvap eXymyj6EuCu7TIld9rhegV6F2XDOpUvFYcjDkpnPHKRg93NTGSXhg6YpTvLPuWWo3gnV bbXU7IrJtKWUgdmekVMbb5xQ5eojq4Q7fkqh7hCiOe5hMMBef9KjZDLEoh/Ex27hDptk UHMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=gj4OmdN5tx/5+tDZuwuPTYidKcyw8/yUcVPVnhwQIVE=; b=CLsSCFW0e6hU6GZy1S3H2Ovf3wcP8mSp64hbSo0W6m1HC3L1YPiqP41bKDpyc/RNe8 +FAFfTHtaeUdsRV2/3fNpHDtM1dbngqHb0+I7jGDEaEejrIpy//e9dKxdhchqXJfBlmD xtXfekLuuSZLCQ4jxjEiy6reWevJscekVBfVewz9q69ldVRb9cKFSzvXhfJUWlkKnJw3 +LSTcnP09u6HBtPuMLQg2urJx0VQMY/tJymcQcI5SZ1hGPVUg1Gl94+Cni0p/wClOnsW ZJKzBf7dJDhra3mTFTF4wsjgIfEabr+JVYfzIAhR7xSNZINUBfoWVW8AYq6smu+A6230 sYMA== X-Gm-Message-State: AOAM531GzFbH231o/eMb3ED0ueuPxp5HxVfTnX/+rrvaGOgPV7V8Fi6A nAAlcrkIssu+bvg3LXASYh7212K+nutDSJF/YtzMpqjK X-Google-Smtp-Source: ABdhPJyzUk4k5Kpwrfg3/mGnfb4AXTnNw16Pzp7nvYDVsBVynnJiNrUmd1QGZ+KgUnhOf/y8WRtj8JfjMeBgfMR38uY= X-Received: by 2002:a05:6830:408a:: with SMTP id x10mr6494198ott.248.1616054614328; Thu, 18 Mar 2021 01:03:34 -0700 (PDT) MIME-Version: 1.0 References: <1615294733-22761-1-git-send-email-aisheng.dong@nxp.com> <1615294733-22761-8-git-send-email-aisheng.dong@nxp.com> <31be2267-8988-f162-f5a6-6e6389bbf1fb@samsung.com> In-Reply-To: From: Dong Aisheng Date: Thu, 18 Mar 2021 16:03:22 +0800 Message-ID: Subject: Re: [PATCH 07/11] PM / devfreq: check get_dev_status before start monitor To: Chanwoo Choi Cc: Chanwoo Choi , Dong Aisheng , Linux PM , "moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" , Sascha Hauer , Shawn Guo , dl-linux-imx , open list , myungjoo.ham@samsung.com, kyungmin.park@samsung.com, Abel Vesa X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210318_080336_345932_77731F96 X-CRM114-Status: GOOD ( 52.73 ) 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 SGkgQ2hhbndvbywKCk9uIFNhdCwgTWFyIDEzLCAyMDIxIGF0IDI6NDUgUE0gRG9uZyBBaXNoZW5n IDxkb25nYXM4NkBnbWFpbC5jb20+IHdyb3RlOgo+Cj4gT24gU2F0LCBNYXIgMTMsIDIwMjEgYXQg MTI6MDkgQU0gQ2hhbndvbyBDaG9pIDxjd2Nob2kwMEBnbWFpbC5jb20+IHdyb3RlOgo+ID4KPiA+ IE9uIDIxLiAzLiAxMi4g7Jik7ZuEIDc6NTcsIERvbmcgQWlzaGVuZyB3cm90ZToKPiA+ID4gT24g VGh1LCBNYXIgMTEsIDIwMjEgYXQgMjo1NCBQTSBDaGFud29vIENob2kgPGN3MDAuY2hvaUBzYW1z dW5nLmNvbT4gd3JvdGU6Cj4gPiA+Pgo+ID4gPj4gT24gMy8xMC8yMSAxOjU2IFBNLCBEb25nIEFp c2hlbmcgd3JvdGU6Cj4gPiA+Pj4gT24gV2VkLCBNYXIgMTAsIDIwMjEgYXQgMTE6MDggQU0gQ2hh bndvbyBDaG9pIDxjdzAwLmNob2lAc2Ftc3VuZy5jb20+IHdyb3RlOgo+ID4gPj4+Pgo+ID4gPj4+ PiBPbiAzLzEwLzIxIDExOjU2IEFNLCBEb25nIEFpc2hlbmcgd3JvdGU6Cj4gPiA+Pj4+PiBPbiBX ZWQsIE1hciAxMCwgMjAyMSBhdCAxMjoxMiBBTSBDaGFud29vIENob2kgPGN3Y2hvaTAwQGdtYWls LmNvbT4gd3JvdGU6Cj4gPiA+Pj4+Pj4KPiA+ID4+Pj4+PiBPbiAyMS4gMy4gMTAuIOyYpOyghCAx Mjo1OCwgQ2hhbndvbyBDaG9pIHdyb3RlOgo+ID4gPj4+Pj4+PiBPbiAyMS4gMy4gOS4g7Jik7ZuE IDk6NTgsIERvbmcgQWlzaGVuZyB3cm90ZToKPiA+ID4+Pj4+Pj4+IFRoZSBkZXZmcmVxIG1vbml0 b3IgZGVwZW5kcyBvbiB0aGUgZGV2aWNlIHRvIHByb3ZpZGUgbG9hZCBpbmZvcm1hdGlvbgo+ID4g Pj4+Pj4+Pj4gYnkgLmdldF9kZXZfc3RhdHVzKCkgdG8gY2FsY3VsYXRlIHRoZSBuZXh0IHRhcmdl dCBmcmVxLgo+ID4gPj4+Pj4+Pj4KPiA+ID4+Pj4+Pj4+IEFuZCB0aGlzIHdpbGwgY2F1c2UgY2hh bmdpbmcgZ292ZXJub3IgdG8gc2ltcGxlIG9uZGVtYW5kIGZhaWwKPiA+ID4+Pj4+Pj4+IGlmIGRl dmljZSBjYW4ndCBzdXBwb3J0Lgo+ID4gPj4+Pj4+Pj4KPiA+ID4+Pj4+Pj4+IFNpZ25lZC1vZmYt Ynk6IERvbmcgQWlzaGVuZyA8YWlzaGVuZy5kb25nQG54cC5jb20+Cj4gPiA+Pj4+Pj4+PiAtLS0K PiA+ID4+Pj4+Pj4+ICAgIGRyaXZlcnMvZGV2ZnJlcS9kZXZmcmVxLmMgICAgICAgICAgICAgICAg IHwgMTAgKysrKysrKy0tLQo+ID4gPj4+Pj4+Pj4gICAgZHJpdmVycy9kZXZmcmVxL2dvdmVybm9y LmggICAgICAgICAgICAgICAgfCAgMiArLQo+ID4gPj4+Pj4+Pj4gICAgZHJpdmVycy9kZXZmcmVx L2dvdmVybm9yX3NpbXBsZW9uZGVtYW5kLmMgfCAgMyArLS0KPiA+ID4+Pj4+Pj4+ICAgIDMgZmls ZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQo+ID4gPj4+Pj4+Pj4K PiA+ID4+Pj4+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2RldmZyZXEvZGV2ZnJlcS5jIGIvZHJp dmVycy9kZXZmcmVxL2RldmZyZXEuYwo+ID4gPj4+Pj4+Pj4gaW5kZXggNzIzMWZlNjg2MmEyLi5k MTc4N2I2YzdkN2MgMTAwNjQ0Cj4gPiA+Pj4+Pj4+PiAtLS0gYS9kcml2ZXJzL2RldmZyZXEvZGV2 ZnJlcS5jCj4gPiA+Pj4+Pj4+PiArKysgYi9kcml2ZXJzL2RldmZyZXEvZGV2ZnJlcS5jCj4gPiA+ Pj4+Pj4+PiBAQCAtNDgyLDEwICs0ODIsMTMgQEAgc3RhdGljIHZvaWQgZGV2ZnJlcV9tb25pdG9y KHN0cnVjdCB3b3JrX3N0cnVjdAo+ID4gPj4+Pj4+Pj4gKndvcmspCj4gPiA+Pj4+Pj4+PiAgICAg KiB0byBiZSBjYWxsZWQgZnJvbSBnb3Zlcm5vciBpbiByZXNwb25zZSB0byBERVZGUkVRX0dPVl9T VEFSVAo+ID4gPj4+Pj4+Pj4gICAgICogZXZlbnQgd2hlbiBkZXZpY2UgaXMgYWRkZWQgdG8gZGV2 ZnJlcSBmcmFtZXdvcmsuCj4gPiA+Pj4+Pj4+PiAgICAgKi8KPiA+ID4+Pj4+Pj4+IC12b2lkIGRl dmZyZXFfbW9uaXRvcl9zdGFydChzdHJ1Y3QgZGV2ZnJlcSAqZGV2ZnJlcSkKPiA+ID4+Pj4+Pj4+ ICtpbnQgZGV2ZnJlcV9tb25pdG9yX3N0YXJ0KHN0cnVjdCBkZXZmcmVxICpkZXZmcmVxKQo+ID4g Pj4+Pj4+Pj4gICAgewo+ID4gPj4+Pj4+Pj4gICAgICAgIGlmIChJU19TVVBQT1JURURfRkxBRyhk ZXZmcmVxLT5nb3Zlcm5vci0+ZmxhZ3MsIElSUV9EUklWRU4pKQo+ID4gPj4+Pj4+Pj4gLSAgICAg ICAgcmV0dXJuOwo+ID4gPj4+Pj4+Pj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gPiA+Pj4+Pj4+PiAr Cj4gPiA+Pj4+Pj4+PiArICAgIGlmICghZGV2ZnJlcS0+cHJvZmlsZS0+Z2V0X2Rldl9zdGF0dXMp Cj4gPiA+Pj4+Pj4+PiArICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiA+ID4+Pj4+Pgo+ID4gPj4+ Pj4+IEFnYWluLCBJIHRoaW5rIHRoYXQgZ2V0X2Rldl9zdGF0dXMgaXMgbm90IHVzZWQgZm9yIGFs bCBnb3Zlcm5vcnMuCj4gPiA+Pj4+Pj4gU28gdGhhdCBpdCBjYXVzZSB0aGUgZ292ZXJub3Igc3Rh cnQgZmFpbC4gRG9uJ3QgY2hlY2sgd2hldGhlcgo+ID4gPj4+Pj4+IC5nZXRfZGV2X3N0YXR1cyBp cyBOVUxMIG9yIG5vdC4KPiA+ID4+Pj4+Pgo+ID4gPj4+Pj4KPiA+ID4+Pj4+IEknbSBub3QgcXVp dGUgdW5kZXJzdGFuZCB5b3VyIHBvaW50Lgo+ID4gPj4+Pj4gaXQgaXMgdXNlZCBieSBnb3Zlcm5v cl9zaW1wbGVvbmRlbWFuZC5jIGFuZCB0ZWdyYV9kZXZmcmVxX2dvdmVybm9yLgo+ID4gPj4+Pj4g Z2V0X3RhcmdldF9mcmVxIC0+IGRldmZyZXFfdXBkYXRlX3N0YXRzIC0+IGdldF9kZXZfc3RhdHVz Cj4gPiA+Pj4+Cj4gPiA+Pj4+IFRoZSBkZXZmcmVxIGNhbiBhZGQgdGhlIG5ldyBnb3Zlcm5vciBi eSBhbnlvbmUuCj4gPiA+Pj4+IFNvIHRoZXNlIGZ1bmN0aW9ucyBsaWtlIGRldmZyZXFfbW9uaXRv cl8qIGhhdmUgdG8gc3VwcG9ydAo+ID4gPj4+PiB0aGUgZ292ZXJub3JzIGFuZCBhbHNvIG11c3Qg c3VwcG9ydCB0aGUgZ292ZXJub3IgdG8gYmUgYWRkZWQKPiA+ID4+Pj4gaW4gdGhlIGZ1dHVyZS4K PiA+ID4+Pgo+ID4gPj4+IFllcywgYnV0IGRldmZyZXFfbW9uaXRvcl8qIGlzIG9ubHkgdXNlZCBi eSBwb2xsaW5nIG1vZGUsIHJpZ2h0Pwo+ID4gPj4+IFRoZSBnb3Zlcm5vciB1c2luZyBpdCBoYXMg dG8gaW1wbGVtZW50IGdldF9kZXZfc3RhdHVzIHVubGVzcwo+ID4gPj4+IHRoZXJlJ3MgYW4gZXhj ZXB0aW9uIGluIHRoZSBmdXR1cmUuCj4gPiA+Pj4KPiA+ID4+PiBDdXJyZW50bHkgdGhpcyBwYXRj aCB3YW50cyB0byBhZGRyZXNzIHRoZSBpc3N1ZSB0aGF0IHVzZXIgY2FuIHN3aXRjaAo+ID4gPj4+ IHRvIG9uZGVtYW5kIGdvdmVybm9yIChwb2xsaW5nIG1vZGUpIGJ5IHN5c2ZzIGV2ZW4gZGV2aWNl cyBkb2VzCj4gPiA+Pj4gbm90IHN1cHBvcnQgaXQgKG5vIGdldF9kZXZfc3RhdHVzIGltcGxlbWVu dGVkKS4KPiA+ID4+Cj4gPiA+PiBBcyBJIGNvbW1lbnRlZCwgSSdsbCBmaXggdGhpcyBpc3N1ZS4g SWYgZGV2ZnJlcSBkcml2ZXIgZG9lc24ndCBpbXBsZW1lbnQKPiA+ID4+IHRoZSAuZ2V0X2Rldl9z dGF0dXMsIGRvbid0IHNob3cgaXQgdmlhIGF2YWlsYWJsZV9nb3Zlcm5vcnMuIEkgdGhpbmsgdGhh dAo+ID4gPj4gaXQgaXMgZnVuZGFtZW50YWwgc29sdXRpb24gdG8gZml4IHRoaXMgaXNzdWUuCj4g PiA+Cj4gPiA+IFNvdW5kcyBnb29kCj4gPiA+Cj4gPiA+PiBTbyBvbiB0aGlzIHZlcnNpb24sCj4g PiA+PiBkb24ndCBhZGQgdGhlIHRoaXMgY29uZGl0aW9uYWwgc3RhdGVtZW50IG9uIHRoaXMgZnVu Y3Rpb24KPiA+ID4+Cj4gPiA+Cj4gPiA+IEFsbW9zdCBhbGwgdGhpcyBwYXRjaCBkaWQgaXMgYWRk aW5nIGEgY2hlY2tpbmcgZm9yIGdldF9kZXZfc3RhdHVzLgo+ID4gPiBTbyBkbyB5b3UgbWVhbiBk cm9wIHRoaXMgcGF0Y2g/Cj4gPiA+IEkgd29uZGVyIGl0J3Mgc3RpbGwgYSBuZWNlc3NhcnkgY2hl Y2tpbmcgdG8gZXhwbGljaXRseSB0ZWxsIGRldmZyZXEgbW9uaXRvcgo+ID4gPiB1c2VycyB0aGF0 IGdldF9kZXZfc3RhdHVzIGlzIG5lZWRlZCBkdXJpbmcgZ292ZXJub3Igc3RhcnR1cC4KPiA+Cj4g PiBJIHRoaW5rIHRoYXQgdGhlIGl0IGlzIGVub3VnaCB0byBjaGVjayAuZ2V0X2Rldl9zdGF0dXMg aW4KPiA+IGRldmZyZXFfdXBkYXRlX3N0YXRzLiBXZSBoYXZlIHRvIGNoZWNrIGl0IG9uIHdoZXJl IGl0IGlzIHVzZWQuCj4gPgo+Cj4gSSB0aGluayB0aGUgZHJhd2JhY2sgb2Ygb25seSBjaGVja2lu ZyAuZ2V0X2Rldl9zdGF0dXMgaW4KPiBkZXZmcmVxX3VwZGF0ZV9zdGF0cyBpczoKPiAxLiBkZXZm cmVxIHdpbGwgc3RpbGwgcmVnaXN0ZXIgc3VjY2Vzc2Z1bGx5IGFuZCBvbmRlbWFuZCBnb3Zlcm5v ciBzdGFydHMgb2sKPiAyLiBvbmRlbWFuZCBnb3Zlcm5vciB3aWxsIHN0aWxsIGJlIHNob3duIGlu IHN5c2ZzIHdoaWNoIGlzIHNvbWV0aGluZwo+IHlvdSB3YW50IHRvIGZpeAo+IDMuIGRldmZyZXEg d2lsbCBlbmQgdXAgcHJpbnRpbmcgZW5kbGVzcyBlcnJvciBtZXNzYWdlcyBpbiBkZXZmcmVxX21v bml0b3Igd29ya2VyCj4gICAgICJkdmZzIGZhaWxlZCB3aXRoICglZCkgZXJyb3IiIGFzIHRoZSBw b3NzaWJsZSBtaXNzaW5nIC5nZXRfZGV2X3N0YXR1cwo+Cj4gU28gaSB3b25kZXIgaWYgeW91IGRv bid0IGxpa2UgY2hhbmdpbmcgdGhlIGNvbW1vbiBkZXZmcmVxX21vbml0b3Jfc3RhcnQgaW4gb3Jk ZXIKPiB0byBtYWtlIGl0IGxvb2sgY29tbW9uIGZvciBhbGwgZ292ZXJub3JzLCB0aGVuIHdlIHBy b2JhYmx5IHN0aWxsIG5lZWQKPiB0byBmaXggaXQgaW4KPiBvbmRlbWFuZCBnb3Zlcm5vciBpbiBv cmRlciB0byBhdm9pZCB0aGUgcG9zc2libGUgYWJvdmUgaXNzdWVzLgo+Cj4gc3RhdGljIGludCBk ZXZmcmVxX3NpbXBsZV9vbmRlbWFuZF9oYW5kbGVyKHN0cnVjdCBkZXZmcmVxICpkZXZmcmVxLAo+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGV2ZW50LCB2b2lk ICpkYXRhKQo+IHsKPiAgICAgICAgIHN3aXRjaCAoZXZlbnQpIHsKPiAgICAgICAgIGNhc2UgREVW RlJFUV9HT1ZfU1RBUlQ6Cj4gICAgICAgICAgICAgICAgIGlmICghZGV2ZnJlcS0+cHJvZmlsZS0+ Z2V0X2Rldl9zdGF0dXMpCj4gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7 Cj4KPiAgICAgICAgICAgICAgICAgcmV0dXJuIGRldmZyZXFfbW9uaXRvcl9zdGFydChkZXZmcmVx KTsKPiAuLi4KPiB9Cj4KPiBIb3cgZG8geW91IHRoaW5rPwoKQW55IGZlZWRiYWNrPwoKSSdtIHdh aXRpbmcgZm9yIHlvdXIgY29uZmlybWF0aW9uIHdoZXRoZXIgZHJvcHBpbmcgdGhpcyBvbmUsCnRo ZW4gSSBjYW4gcmUtc2VudCB0aGUgc2VyaWVzLgoKUmVnYXJkcwpBaXNoZW5nCgo+Cj4gUmVnYXJk cwo+IEFpc2hlbmcKPgo+Cj4gPiA+Cj4gPiA+PiBBbmQgb24gbmV4dCB2ZXJzaW9uLCBwbGVhc2Ug dXNlIHRoZSBjYXBpdGFsIGxldHRlciBmb3IgZmlyc3QgY2hhcmFjdGVyCj4gPiA+PiBvbiBwYXRj aCB0aXRsZSBhcyBmb2xsb3dpbmc6Cj4gPiA+Pgo+ID4gPj4gLSBQTSAvIGRldmZyZXE6IENoZWNr IGdldF9kZXZfc3RhdHVzIGJlZm9yZSBzdGFydCBtb25pdG9yCj4gPiA+Pgo+ID4gPgo+ID4gPiBP a2F5IHRvIG1lLgo+ID4gPiBUaGFua3MgZm9yIHRoZSBzdWdnZXN0aW9uLgo+ID4gPgo+ID4gPiBS ZWdhcmRzCj4gPiA+IEFpc2hlbmcKPiA+ID4KPiA+ID4+Pgo+ID4gPj4+IFJlZ2FyZHMKPiA+ID4+ PiBBaXNoZW5nCj4gPiA+Pj4KPiA+ID4+Pj4KPiA+ID4+Pj4+Cj4gPiA+Pj4+PiBXaXRob3V0IGNo ZWNraW5nLCBkZXZpY2UgY2FuIHN3aXRjaCB0byBvbmRlbWFuZCBnb3Zlcm5vciBpZiBpdCBkb2Vz IG5vdCBzdXBwb3J0Lgo+ID4gPj4+Pj4KPiA+ID4+Pj4+IEFtIGkgbWlzc2VkIHNvbWV0aGluZz8K PiA+ID4+Pj4+Cj4gPiA+Pj4+PiBSZWdhcmRzCj4gPiA+Pj4+PiBBaXNoZW5nCj4gPiA+Pj4+Pgo+ ID4gPj4+Pj4+Pj4gICAgICAgIHN3aXRjaCAoZGV2ZnJlcS0+cHJvZmlsZS0+dGltZXIpIHsKPiA+ ID4+Pj4+Pj4+ICAgICAgICBjYXNlIERFVkZSRVFfVElNRVJfREVGRVJSQUJMRToKPiA+ID4+Pj4+ Pj4+IEBAIC00OTUsMTIgKzQ5OCwxMyBAQCB2b2lkIGRldmZyZXFfbW9uaXRvcl9zdGFydChzdHJ1 Y3QgZGV2ZnJlcSAqZGV2ZnJlcSkKPiA+ID4+Pj4+Pj4+ICAgICAgICAgICAgSU5JVF9ERUxBWUVE X1dPUksoJmRldmZyZXEtPndvcmssIGRldmZyZXFfbW9uaXRvcik7Cj4gPiA+Pj4+Pj4+PiAgICAg ICAgICAgIGJyZWFrOwo+ID4gPj4+Pj4+Pj4gICAgICAgIGRlZmF1bHQ6Cj4gPiA+Pj4+Pj4+PiAt ICAgICAgICByZXR1cm47Cj4gPiA+Pj4+Pj4+PiArICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiA+ ID4+Pj4+Pj4+ICAgICAgICB9Cj4gPiA+Pj4+Pj4+PiAgICAgICAgaWYgKGRldmZyZXEtPnByb2Zp bGUtPnBvbGxpbmdfbXMpCj4gPiA+Pj4+Pj4+PiAgICAgICAgICAgIHF1ZXVlX2RlbGF5ZWRfd29y ayhkZXZmcmVxX3dxLCAmZGV2ZnJlcS0+d29yaywKPiA+ID4+Pj4+Pj4+ICAgICAgICAgICAgICAg IG1zZWNzX3RvX2ppZmZpZXMoZGV2ZnJlcS0+cHJvZmlsZS0+cG9sbGluZ19tcykpOwo+ID4gPj4+ Pj4+Pj4gKyAgICByZXR1cm4gMDsKPiA+ID4+Pj4+Pj4+ICAgIH0KPiA+ID4+Pj4+Pj4+ICAgIEVY UE9SVF9TWU1CT0woZGV2ZnJlcV9tb25pdG9yX3N0YXJ0KTsKPiA+ID4+Pj4+Pj4+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2RldmZyZXEvZ292ZXJub3IuaCBiL2RyaXZlcnMvZGV2ZnJlcS9nb3Zlcm5v ci5oCj4gPiA+Pj4+Pj4+PiBpbmRleCA1Y2VlM2Y2NGZlMmIuLjMxYWY2ZDA3MmExMCAxMDA2NDQK PiA+ID4+Pj4+Pj4+IC0tLSBhL2RyaXZlcnMvZGV2ZnJlcS9nb3Zlcm5vci5oCj4gPiA+Pj4+Pj4+ PiArKysgYi9kcml2ZXJzL2RldmZyZXEvZ292ZXJub3IuaAo+ID4gPj4+Pj4+Pj4gQEAgLTc1LDcg Kzc1LDcgQEAgc3RydWN0IGRldmZyZXFfZ292ZXJub3Igewo+ID4gPj4+Pj4+Pj4gICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGludCBldmVudCwgdm9pZCAqZGF0YSk7Cj4gPiA+Pj4+Pj4+PiAg ICB9Owo+ID4gPj4+Pj4+Pj4gLXZvaWQgZGV2ZnJlcV9tb25pdG9yX3N0YXJ0KHN0cnVjdCBkZXZm cmVxICpkZXZmcmVxKTsKPiA+ID4+Pj4+Pj4+ICtpbnQgZGV2ZnJlcV9tb25pdG9yX3N0YXJ0KHN0 cnVjdCBkZXZmcmVxICpkZXZmcmVxKTsKPiA+ID4+Pj4+Pj4+ICAgIHZvaWQgZGV2ZnJlcV9tb25p dG9yX3N0b3Aoc3RydWN0IGRldmZyZXEgKmRldmZyZXEpOwo+ID4gPj4+Pj4+Pj4gICAgdm9pZCBk ZXZmcmVxX21vbml0b3Jfc3VzcGVuZChzdHJ1Y3QgZGV2ZnJlcSAqZGV2ZnJlcSk7Cj4gPiA+Pj4+ Pj4+PiAgICB2b2lkIGRldmZyZXFfbW9uaXRvcl9yZXN1bWUoc3RydWN0IGRldmZyZXEgKmRldmZy ZXEpOwo+ID4gPj4+Pj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGV2ZnJlcS9nb3Zlcm5vcl9z aW1wbGVvbmRlbWFuZC5jCj4gPiA+Pj4+Pj4+PiBiL2RyaXZlcnMvZGV2ZnJlcS9nb3Zlcm5vcl9z aW1wbGVvbmRlbWFuZC5jCj4gPiA+Pj4+Pj4+PiBpbmRleCBkNTdiODJhMmI1NzAuLmVhMjg3YjU3 Y2JmMyAxMDA2NDQKPiA+ID4+Pj4+Pj4+IC0tLSBhL2RyaXZlcnMvZGV2ZnJlcS9nb3Zlcm5vcl9z aW1wbGVvbmRlbWFuZC5jCj4gPiA+Pj4+Pj4+PiArKysgYi9kcml2ZXJzL2RldmZyZXEvZ292ZXJu b3Jfc2ltcGxlb25kZW1hbmQuYwo+ID4gPj4+Pj4+Pj4gQEAgLTg5LDggKzg5LDcgQEAgc3RhdGlj IGludCBkZXZmcmVxX3NpbXBsZV9vbmRlbWFuZF9oYW5kbGVyKHN0cnVjdAo+ID4gPj4+Pj4+Pj4g ZGV2ZnJlcSAqZGV2ZnJlcSwKPiA+ID4+Pj4+Pj4+ICAgIHsKPiA+ID4+Pj4+Pj4+ICAgICAgICBz d2l0Y2ggKGV2ZW50KSB7Cj4gPiA+Pj4+Pj4+PiAgICAgICAgY2FzZSBERVZGUkVRX0dPVl9TVEFS VDoKPiA+ID4+Pj4+Pj4+IC0gICAgICAgIGRldmZyZXFfbW9uaXRvcl9zdGFydChkZXZmcmVxKTsK PiA+ID4+Pj4+Pj4+IC0gICAgICAgIGJyZWFrOwo+ID4gPj4+Pj4+Pj4gKyAgICAgICAgcmV0dXJu IGRldmZyZXFfbW9uaXRvcl9zdGFydChkZXZmcmVxKTsKPiA+ID4+Pj4+Pj4+ICAgICAgICBjYXNl IERFVkZSRVFfR09WX1NUT1A6Cj4gPiA+Pj4+Pj4+PiAgICAgICAgICAgIGRldmZyZXFfbW9uaXRv cl9zdG9wKGRldmZyZXEpOwo+ID4gPj4+Pj4+Pj4KPiA+ID4+Pj4+Pj4KPiA+ID4+Pj4+Pj4gTmVl ZCB0byBoYW5kbGUgdGhlIGFsbCBwb2ludHMgb2YgZGV2ZnJlcV9tb25pdG9yX3N0YXJ0KCkgdXNh Z2UuCj4gPiA+Pj4+Pj4+IHBsZWFzZSBjaGVjayB0aGUgdGVncmEzMC1kZXZmcmVxLmMgZm9yIHRo aXMgdXBkYXRlLgo+ID4gPj4+Pj4+Pgo+ID4gPj4+Pj4+PiAkIGdyZXAgLXJuICJkZXZmcmVxX21v bml0b3Jfc3RhcnQiIGRyaXZlcnMvCj4gPiA+Pj4+Pj4+IGRyaXZlcnMvZGV2ZnJlcS9nb3Zlcm5v cl9zaW1wbGVvbmRlbWFuZC5jOjkyOgo+ID4gPj4+Pj4+PiBkZXZmcmVxX21vbml0b3Jfc3RhcnQo ZGV2ZnJlcSk7Cj4gPiA+Pj4+Pj4+IGRyaXZlcnMvZGV2ZnJlcS90ZWdyYTMwLWRldmZyZXEuYzo3 NDQ6Cj4gPiA+Pj4+Pj4+IGRldmZyZXFfbW9uaXRvcl9zdGFydChkZXZmcmVxKTsKPiA+ID4+Pj4+ Pj4gLi4uLi4uCj4gPiA+Pj4+Pj4+Cj4gPiA+Pj4+Pj4KPiA+ID4+Pj4+Pgo+ID4gPj4+Pj4+IC0t Cj4gPiA+Pj4+Pj4gQmVzdCBSZWdhcmRzLAo+ID4gPj4+Pj4+IFNhbXN1bmcgRWxlY3Ryb25pY3MK PiA+ID4+Pj4+PiBDaGFud29vIENob2kKPiA+ID4+Pj4+Cj4gPiA+Pj4+Pgo+ID4gPj4+Pgo+ID4g Pj4+Pgo+ID4gPj4+PiAtLQo+ID4gPj4+PiBCZXN0IFJlZ2FyZHMsCj4gPiA+Pj4+IENoYW53b28g Q2hvaQo+ID4gPj4+PiBTYW1zdW5nIEVsZWN0cm9uaWNzCj4gPiA+Pj4KPiA+ID4+Pgo+ID4gPj4K PiA+ID4+Cj4gPiA+PiAtLQo+ID4gPj4gQmVzdCBSZWdhcmRzLAo+ID4gPj4gQ2hhbndvbyBDaG9p Cj4gPiA+PiBTYW1zdW5nIEVsZWN0cm9uaWNzCj4gPgo+ID4KPiA+IC0tCj4gPiBCZXN0IFJlZ2Fy ZHMsCj4gPiBTYW1zdW5nIEVsZWN0cm9uaWNzCj4gPiBDaGFud29vIENob2kKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFp bGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlz dHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK