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=-8.3 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, 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 E786CC432C2 for ; Wed, 25 Sep 2019 16:06:39 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id A59BA21D7B for ; Wed, 25 Sep 2019 16:06:39 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="SiRQPUJI" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387861AbfIYQGj (ORCPT ); Wed, 25 Sep 2019 12:06:39 -0400 Received: from mail-pf1-f196.google.com ([209.85.210.196]:42698 "EHLO mail-pf1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727682AbfIYQGi (ORCPT ); Wed, 25 Sep 2019 12:06:38 -0400 Received: by mail-pf1-f196.google.com with SMTP id q12so3750894pff.9 for ; Wed, 25 Sep 2019 09:06:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to :user-agent; bh=ZXwlHN+cbr1PURwp9A0vpaRIOg03ivAjHxGINgVn0Gw=; b=SiRQPUJIE0GADZO+hV9Bwof5oKB8U1lMy64PJCbZr5yPQveyOG5r6rR6UEk953Mbtt oq9GcJeKKJmAGlIySbKw6YlL1H2kFI7KIQb2o4odPH6uwVUChh7FJ02AFCt7b9yoyxnV /uAyjy8e4pnXWcxqNPV7kFxuFTbhvvEaG+Mf8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to:user-agent; bh=ZXwlHN+cbr1PURwp9A0vpaRIOg03ivAjHxGINgVn0Gw=; b=igVxYXiKHGvnBouOu7tBIIxlgYMDC3T7OgOPKfCKdYvAJnt5dSz7aBY8g1T5kEzrr4 3fZoYk9WngGr1kJtEWL8ra8MEg2sVsDR09hgOYyVy6DHJQ8XQDKhIkTNCS/BPNLqlZnN F+Y700fYcOtswb5keGaSdiPPMSiYLxipeAHIjUc3DkDg0huUOrGzwr/jUsExNhhhJp0m TnAswVwDlZkySAVG+bIVvYs46LzizRm7NxcF5uXROBR8ngx6ojANYEQH4P5WCCSg9qz1 rkzV+MOIIRkFQXSJkbwGKQIy51vLrsmHWev10RzR76YnV2UY2r9F6Y6L4r39DnHW6b+t BNog== X-Gm-Message-State: APjAAAVHBZPGpI8U/AMzLluwkGbp3ALokCVl+bP7zUjb2Ssd67PD/58X /42kFMx52J957pp06KtqAVdtHg== X-Google-Smtp-Source: APXvYqw8Xiv9X5Bo7oc6DrQrfiLeOBQkugcAwIgjj8Ixri04Io9byW4UI6sTgsawA1Nyq3twYxjDeQ== X-Received: by 2002:a17:90a:fa0d:: with SMTP id cm13mr7537616pjb.70.1569427596246; Wed, 25 Sep 2019 09:06:36 -0700 (PDT) Received: from localhost ([2620:15c:202:1:75a:3f6e:21d:9374]) by smtp.gmail.com with ESMTPSA id c128sm6485628pfc.166.2019.09.25.09.06.35 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 25 Sep 2019 09:06:35 -0700 (PDT) Date: Wed, 25 Sep 2019 09:06:31 -0700 From: Matthias Kaehlcke To: Chanwoo Choi Cc: Leonard Crestez , MyungJoo Ham , Kyungmin Park , Artur =?utf-8?B?xZp3aWdvxYQ=?= , Saravana Kannan , Krzysztof Kozlowski , Alexandre Bailon , Georgi Djakov , Abel Vesa , Jacky Bai , Viresh Kumar , Lukasz Luba , NXP Linux Team , linux-pm@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: Re: [PATCH v8 5/6] PM / devfreq: Add PM QoS support Message-ID: <20190925160631.GL133864@google.com> References: <58fdd2c226a4e76a3d9427baab7dd5c23af842ab.1569319738.git.leonard.crestez@nxp.com> <40885624-8f11-4eea-d5bf-d6bb50fa44dd@samsung.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <40885624-8f11-4eea-d5bf-d6bb50fa44dd@samsung.com> User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org On Wed, Sep 25, 2019 at 11:15:36AM +0900, Chanwoo Choi wrote: > On 19. 9. 24. 오후 7:11, Leonard Crestez wrote: > > Register notifiers with the PM QoS framework in order to respond to > > requests for DEV_PM_QOS_MIN_FREQUENCY and DEV_PM_QOS_MAX_FREQUENCY. > > > > No notifiers are added by this patch but PM QoS constraints can be > > imposed externally (for example from other devices). > > > > Signed-off-by: Leonard Crestez > > Reviewed-by: Matthias Kaehlcke > > --- > > drivers/devfreq/devfreq.c | 75 +++++++++++++++++++++++++++++++++++++++ > > include/linux/devfreq.h | 5 +++ > > 2 files changed, 80 insertions(+) > > > > diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c > > index eee403e70c84..784f3e40536a 100644 > > --- a/drivers/devfreq/devfreq.c > > +++ b/drivers/devfreq/devfreq.c > > @@ -22,15 +22,18 @@ > > #include > > #include > > #include > > #include > > #include > > +#include > > #include "governor.h" > > > > #define CREATE_TRACE_POINTS > > #include > > > > +#define HZ_PER_KHZ 1000 > > + > > static struct class *devfreq_class; > > > > /* > > * devfreq core provides delayed work based load monitoring helper > > * functions. Governors can use these or can implement their own > > @@ -109,10 +112,11 @@ static unsigned long find_available_max_freq(struct devfreq *devfreq) > > static void get_freq_range(struct devfreq *devfreq, > > unsigned long *min_freq, > > unsigned long *max_freq) > > { > > unsigned long *freq_table = devfreq->profile->freq_table; > > + unsigned long qos_min_freq, qos_max_freq; > > > > lockdep_assert_held(&devfreq->lock); > > > > /* > > * Init min/max frequency from freq table. > > @@ -125,10 +129,18 @@ static void get_freq_range(struct devfreq *devfreq, > > } else { > > *min_freq = freq_table[devfreq->profile->max_state - 1]; > > *max_freq = freq_table[0]; > > } > > > > + /* constraints from PM QoS */ > > As I commented on patch4, > 'constraints' -> 'Constraint' because first verb have to be used > as the sigular verbs. 'constraints' is not a verb in this case, but the plural of the noun constraint > I prefer to use following comments: > > /* Constraint minimum/maximum frequency from PM QoS constraints */ I'm not convinced that this is really an improvement. First there is the repeated use of 'Constraint ... constraints'. An improvement could be to use 'Limit' instead of 'Constraint'. Anyway from the code it is pretty obvious that the min/max frequencies are limited. Are you suggesting to also say further below "Limit minimum/maximum frequency from sysfs constraints" and the same for the OPP ones? If you really want a verb the comments could be something like "Apply constraints" or "Apply constraints from ". IMO the current comments provide enough information, unnecessarily verbose comments can rather get in the way of code readability. > > + qos_min_freq = dev_pm_qos_read_value(devfreq->dev.parent, > > + DEV_PM_QOS_MIN_FREQUENCY); > > + qos_max_freq = dev_pm_qos_read_value(devfreq->dev.parent, > > + DEV_PM_QOS_MIN_FREQUENCY); > > + *min_freq = max(*min_freq, HZ_PER_KHZ * qos_min_freq); > > + *max_freq = min(*max_freq, HZ_PER_KHZ * qos_max_freq); > > + > > /* constraints from sysfs */ > > *min_freq = max(*min_freq, devfreq->min_freq); > > *max_freq = min(*max_freq, devfreq->max_freq); > > > > /* constraints from OPP interface */ > > @@ -606,10 +618,49 @@ static int devfreq_notifier_call(struct notifier_block *nb, unsigned long type, > > mutex_unlock(&devfreq->lock); > > > > return ret; > > } > > > > +/** > > + * qos_notifier_call() - Common handler for QoS constraints. > > + * @devfreq: the devfreq instance. > > + */ > > +static int qos_notifier_call(struct devfreq *devfreq) > > +{ > > + int err; > > + > > + mutex_lock(&devfreq->lock); > > + err = update_devfreq(devfreq); > > + mutex_unlock(&devfreq->lock); > > + if (err) > > + dev_err(devfreq->dev.parent, > > + "failed to update frequency for PM QoS constraints (%d)\n", > > Is it not over 80 char? It is and Leonard split it up initially, however I asked him to not break it up because: 2) Breaking long lines and strings However, *never* break user-visible strings such as printk messages, because that breaks the ability to grep for them. Documentation/process/coding-style.rst Line length could be reduced a bit by adjusting indentation though. > > > + err); > > + > > + return NOTIFY_OK; > > +} > > + > > +/** > > + * qos_min_notifier_call() - Callback for QoS min_freq changes. > > + * @nb: Should be devfreq->nb_min > > + */ > > +static int qos_min_notifier_call(struct notifier_block *nb, > > + unsigned long val, void *ptr) > > +{ > > + return qos_notifier_call(container_of(nb, struct devfreq, nb_min)); > > +} > > + > > +/** > > + * qos_max_notifier_call() - Callback for QoS max_freq changes. > > + * @nb: Should be devfreq->nb_max > > + */ > > +static int qos_max_notifier_call(struct notifier_block *nb, > > + unsigned long val, void *ptr) > > +{ > > + return qos_notifier_call(container_of(nb, struct devfreq, nb_max)); > > +} > > + > > /** > > * devfreq_dev_release() - Callback for struct device to release the device. > > * @dev: the devfreq device > > * > > * Remove devfreq from the list and release its resources. > > @@ -620,10 +671,15 @@ static void devfreq_dev_release(struct device *dev) > > > > mutex_lock(&devfreq_list_lock); > > list_del(&devfreq->node); > > mutex_unlock(&devfreq_list_lock); > > > > + dev_pm_qos_remove_notifier(devfreq->dev.parent, &devfreq->nb_max, > > + DEV_PM_QOS_MAX_FREQUENCY); > > + dev_pm_qos_remove_notifier(devfreq->dev.parent, &devfreq->nb_min, > > + DEV_PM_QOS_MIN_FREQUENCY); > > + > > Just print error with dev_err() without stopping the release step. > > I prefer to handle the return value if kernel API provides > the error code. > > > if (devfreq->profile->exit) > > devfreq->profile->exit(devfreq->dev.parent); > > > > kfree(devfreq->time_in_state); > > kfree(devfreq->trans_table); > > @@ -733,10 +789,28 @@ struct devfreq *devfreq_add_device(struct device *dev, > > if (err) { > > put_device(&devfreq->dev); > > goto err_out; > > } > > > > + /* > > + * Register notifiers for updates to min/max_freq after device is > > + * initialized (and we can handle notifications) but before the > > + * governor is started (which should do an initial enforcement of > > + * constraints). > > + */ > > My previous comment is not enough why I prefer to remove it. Sorry. > Actually, until now, the devfreq_add_device() don't have the detailed > comments because the line code is not too long. But, at the present time, > devfreq_add_device() is too long. It means that the detailed comment > are necessary. > > So, I'll add the detailed comment for each step of devfreq_add_device() > on separate patch to keep the same style. I'll send the patch to you > for the review. > > > + devfreq->nb_min.notifier_call = qos_min_notifier_call; > > + err = dev_pm_qos_add_notifier(devfreq->dev.parent, &devfreq->nb_min, > > + DEV_PM_QOS_MIN_FREQUENCY); > > + if (err) > > + goto err_devfreq; > > + > > + devfreq->nb_max.notifier_call = qos_max_notifier_call; > > + err = dev_pm_qos_add_notifier(devfreq->dev.parent, &devfreq->nb_max, > > + DEV_PM_QOS_MAX_FREQUENCY); > > + if (err) > > + goto err_devfreq; > > + > > mutex_lock(&devfreq_list_lock); > > > > governor = try_then_request_governor(devfreq->governor_name); > > if (IS_ERR(governor)) { > > dev_err(dev, "%s: Unable to find governor for the device\n", > > @@ -760,10 +834,11 @@ struct devfreq *devfreq_add_device(struct device *dev, > > > > return devfreq; > > > > err_init: > > mutex_unlock(&devfreq_list_lock); > > +err_devfreq: > > devfreq_remove_device(devfreq); > > return ERR_PTR(err); > > > > err_dev: > > /* > > diff --git a/include/linux/devfreq.h b/include/linux/devfreq.h > > index c3cbc15fdf08..dac0dffeabb4 100644 > > --- a/include/linux/devfreq.h > > +++ b/include/linux/devfreq.h > > @@ -134,10 +134,12 @@ struct devfreq_dev_profile { > > * @total_trans: Number of devfreq transitions > > * @trans_table: Statistics of devfreq transitions > > * @time_in_state: Statistics of devfreq states > > * @last_stat_updated: The last time stat updated > > * @transition_notifier_list: list head of DEVFREQ_TRANSITION_NOTIFIER notifier > > + * @nb_min: Notifier block for DEV_PM_QOS_MIN_FREQUENCY > > + * @nb_max: Notifier block for DEV_PM_QOS_MAX_FREQUENCY > > * > > * This structure stores the devfreq information for a give device. > > * > > * Note that when a governor accesses entries in struct devfreq in its > > * functions except for the context of callbacks defined in struct > > @@ -176,10 +178,13 @@ struct devfreq { > > unsigned int *trans_table; > > unsigned long *time_in_state; > > unsigned long last_stat_updated; > > > > struct srcu_notifier_head transition_notifier_list; > > + > > + struct notifier_block nb_min; > > + struct notifier_block nb_max; > > }; > > > > struct devfreq_freqs { > > unsigned long old; > > unsigned long new; > > > > > -- > Best Regards, > Chanwoo Choi > Samsung Electronics 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=-8.2 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,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 4D1E2C4360D for ; Wed, 25 Sep 2019 16:07:17 +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 21C972146E for ; Wed, 25 Sep 2019 16:07:17 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="qAS5DhJj"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="SiRQPUJI" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 21C972146E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=chromium.org 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-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=xNQkTnOgB63B031aXp2hv4g4/NtKhpa4fuWCt+3C42o=; b=qAS5DhJjjb5+K6 DcPJpwDd0Y1TCrdiw4rz4+7cW3l7RHm2cPRGFxCEd6QDwDXUuel/NVNcmF9pysK1ARBZqyPzvIPot 9KkveQyQrg8fsAcycIHrsdA2F24KSPRqji3yJtIEdoYEhtmV4NEdP41QRs5KJlonYsLl71wegDMs4 UBK0awUbRuMF/1RBbfqQ/M9Fhf4yU/RLouQ4QbGBU8ur8WWrW/MMii5LARr4z30vP6nzYwM1uSuU3 TgCinli0yOa4HEhVT7cLVq6POD4Xazbl0/HjeYFyhqiv1JV17KxKb47VwTEKSt6/cRJfjbp7R3Uu+ t3sp+H644ZW0P4wh6jYA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.2 #3 (Red Hat Linux)) id 1iD9oU-0001tP-Tj; Wed, 25 Sep 2019 16:06:47 +0000 Received: from mail-pg1-x542.google.com ([2607:f8b0:4864:20::542]) by bombadil.infradead.org with esmtps (Exim 4.92.2 #3 (Red Hat Linux)) id 1iD9oL-0001st-K9 for linux-arm-kernel@lists.infradead.org; Wed, 25 Sep 2019 16:06:42 +0000 Received: by mail-pg1-x542.google.com with SMTP id y35so47366pgl.1 for ; Wed, 25 Sep 2019 09:06:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to :user-agent; bh=ZXwlHN+cbr1PURwp9A0vpaRIOg03ivAjHxGINgVn0Gw=; b=SiRQPUJIE0GADZO+hV9Bwof5oKB8U1lMy64PJCbZr5yPQveyOG5r6rR6UEk953Mbtt oq9GcJeKKJmAGlIySbKw6YlL1H2kFI7KIQb2o4odPH6uwVUChh7FJ02AFCt7b9yoyxnV /uAyjy8e4pnXWcxqNPV7kFxuFTbhvvEaG+Mf8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to:user-agent; bh=ZXwlHN+cbr1PURwp9A0vpaRIOg03ivAjHxGINgVn0Gw=; b=K9fap7TwhJmijae7tNiaKeuT/+jMVXokyyt9XiCGhHmSIvkVCZmekNnc2XmqjRkwWo El8jXZEpHNwYuHQ/hYp9mQ4bHcrTG45r5zLMvasy8n6DKb5Td7yDb5f+7jhYbzLCKo/W gaZVrRiePH0i+ecB+SgJW8ksNRYtmv5tATu2cLzdCRs4JjqxjT2Yb+D6sYUb5oWt4AXV KchJRDbHIUB7fILRrdXNj+lTgw5ndEUpjYw2Jh8/FoY0iGwTolUE/QfF4fpfic7KYJPv juy1xcueVcIdXattDcPCyFl3TKkNBu6ZzlP5J2KM5VGqkwNjtHCDU9j3eCqtF4JPLIhm NSEA== X-Gm-Message-State: APjAAAW/CaOB6gH29AWGwWB0YguvJ5FzLdP0kVmPnsDiAxOhl+L1C8mF I05qu+j/bnMJAr+oeQmO+1INGg== X-Google-Smtp-Source: APXvYqw8Xiv9X5Bo7oc6DrQrfiLeOBQkugcAwIgjj8Ixri04Io9byW4UI6sTgsawA1Nyq3twYxjDeQ== X-Received: by 2002:a17:90a:fa0d:: with SMTP id cm13mr7537616pjb.70.1569427596246; Wed, 25 Sep 2019 09:06:36 -0700 (PDT) Received: from localhost ([2620:15c:202:1:75a:3f6e:21d:9374]) by smtp.gmail.com with ESMTPSA id c128sm6485628pfc.166.2019.09.25.09.06.35 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 25 Sep 2019 09:06:35 -0700 (PDT) Date: Wed, 25 Sep 2019 09:06:31 -0700 From: Matthias Kaehlcke To: Chanwoo Choi Subject: Re: [PATCH v8 5/6] PM / devfreq: Add PM QoS support Message-ID: <20190925160631.GL133864@google.com> References: <58fdd2c226a4e76a3d9427baab7dd5c23af842ab.1569319738.git.leonard.crestez@nxp.com> <40885624-8f11-4eea-d5bf-d6bb50fa44dd@samsung.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <40885624-8f11-4eea-d5bf-d6bb50fa44dd@samsung.com> User-Agent: Mutt/1.10.1 (2018-07-13) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190925_090638_046256_C3316921 X-CRM114-Status: GOOD ( 33.93 ) 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: Artur =?utf-8?B?xZp3aWdvxYQ=?= , Abel Vesa , Saravana Kannan , linux-pm@vger.kernel.org, Viresh Kumar , NXP Linux Team , Krzysztof Kozlowski , Lukasz Luba , Kyungmin Park , MyungJoo Ham , Alexandre Bailon , Leonard Crestez , Georgi Djakov , linux-arm-kernel@lists.infradead.org, Jacky Bai Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gV2VkLCBTZXAgMjUsIDIwMTkgYXQgMTE6MTU6MzZBTSArMDkwMCwgQ2hhbndvbyBDaG9pIHdy b3RlOgo+IE9uIDE5LiA5LiAyNC4g7Jik7ZuEIDc6MTEsIExlb25hcmQgQ3Jlc3RleiB3cm90ZToK PiA+IFJlZ2lzdGVyIG5vdGlmaWVycyB3aXRoIHRoZSBQTSBRb1MgZnJhbWV3b3JrIGluIG9yZGVy IHRvIHJlc3BvbmQgdG8KPiA+IHJlcXVlc3RzIGZvciBERVZfUE1fUU9TX01JTl9GUkVRVUVOQ1kg YW5kIERFVl9QTV9RT1NfTUFYX0ZSRVFVRU5DWS4KPiA+IAo+ID4gTm8gbm90aWZpZXJzIGFyZSBh ZGRlZCBieSB0aGlzIHBhdGNoIGJ1dCBQTSBRb1MgY29uc3RyYWludHMgY2FuIGJlCj4gPiBpbXBv c2VkIGV4dGVybmFsbHkgKGZvciBleGFtcGxlIGZyb20gb3RoZXIgZGV2aWNlcykuCj4gPiAKPiA+ IFNpZ25lZC1vZmYtYnk6IExlb25hcmQgQ3Jlc3RleiA8bGVvbmFyZC5jcmVzdGV6QG54cC5jb20+ Cj4gPiBSZXZpZXdlZC1ieTogTWF0dGhpYXMgS2FlaGxja2UgPG1rYUBjaHJvbWl1bS5vcmc+Cj4g PiAtLS0KPiA+ICBkcml2ZXJzL2RldmZyZXEvZGV2ZnJlcS5jIHwgNzUgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCj4gPiAgaW5jbHVkZS9saW51eC9kZXZmcmVxLmggICB8 ICA1ICsrKwo+ID4gIDIgZmlsZXMgY2hhbmdlZCwgODAgaW5zZXJ0aW9ucygrKQo+ID4gCj4gPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9kZXZmcmVxL2RldmZyZXEuYyBiL2RyaXZlcnMvZGV2ZnJlcS9k ZXZmcmVxLmMKPiA+IGluZGV4IGVlZTQwM2U3MGM4NC4uNzg0ZjNlNDA1MzZhIDEwMDY0NAo+ID4g LS0tIGEvZHJpdmVycy9kZXZmcmVxL2RldmZyZXEuYwo+ID4gKysrIGIvZHJpdmVycy9kZXZmcmVx L2RldmZyZXEuYwo+ID4gQEAgLTIyLDE1ICsyMiwxOCBAQAo+ID4gICNpbmNsdWRlIDxsaW51eC9w bGF0Zm9ybV9kZXZpY2UuaD4KPiA+ICAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgo+ID4gICNpbmNs dWRlIDxsaW51eC9wcmludGsuaD4KPiA+ICAjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgo+ID4g ICNpbmNsdWRlIDxsaW51eC9vZi5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9wbV9xb3MuaD4KPiA+ ICAjaW5jbHVkZSAiZ292ZXJub3IuaCIKPiA+ICAKPiA+ICAjZGVmaW5lIENSRUFURV9UUkFDRV9Q T0lOVFMKPiA+ICAjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL2RldmZyZXEuaD4KPiA+ICAKPiA+ICsj ZGVmaW5lIEhaX1BFUl9LSFoJMTAwMAo+ID4gKwo+ID4gIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgKmRl dmZyZXFfY2xhc3M7Cj4gPiAgCj4gPiAgLyoKPiA+ICAgKiBkZXZmcmVxIGNvcmUgcHJvdmlkZXMg ZGVsYXllZCB3b3JrIGJhc2VkIGxvYWQgbW9uaXRvcmluZyBoZWxwZXIKPiA+ICAgKiBmdW5jdGlv bnMuIEdvdmVybm9ycyBjYW4gdXNlIHRoZXNlIG9yIGNhbiBpbXBsZW1lbnQgdGhlaXIgb3duCj4g PiBAQCAtMTA5LDEwICsxMTIsMTEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZmluZF9hdmFpbGFi bGVfbWF4X2ZyZXEoc3RydWN0IGRldmZyZXEgKmRldmZyZXEpCj4gPiAgc3RhdGljIHZvaWQgZ2V0 X2ZyZXFfcmFuZ2Uoc3RydWN0IGRldmZyZXEgKmRldmZyZXEsCj4gPiAgCQkJICAgdW5zaWduZWQg bG9uZyAqbWluX2ZyZXEsCj4gPiAgCQkJICAgdW5zaWduZWQgbG9uZyAqbWF4X2ZyZXEpCj4gPiAg ewo+ID4gIAl1bnNpZ25lZCBsb25nICpmcmVxX3RhYmxlID0gZGV2ZnJlcS0+cHJvZmlsZS0+ZnJl cV90YWJsZTsKPiA+ICsJdW5zaWduZWQgbG9uZyBxb3NfbWluX2ZyZXEsIHFvc19tYXhfZnJlcTsK PiA+ICAKPiA+ICAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2ZnJlcS0+bG9jayk7Cj4gPiAgCj4g PiAgCS8qCj4gPiAgCSAqIEluaXQgbWluL21heCBmcmVxdWVuY3kgZnJvbSBmcmVxIHRhYmxlLgo+ ID4gQEAgLTEyNSwxMCArMTI5LDE4IEBAIHN0YXRpYyB2b2lkIGdldF9mcmVxX3JhbmdlKHN0cnVj dCBkZXZmcmVxICpkZXZmcmVxLAo+ID4gIAl9IGVsc2Ugewo+ID4gIAkJKm1pbl9mcmVxID0gZnJl cV90YWJsZVtkZXZmcmVxLT5wcm9maWxlLT5tYXhfc3RhdGUgLSAxXTsKPiA+ICAJCSptYXhfZnJl cSA9IGZyZXFfdGFibGVbMF07Cj4gPiAgCX0KPiA+ICAKPiA+ICsJLyogY29uc3RyYWludHMgZnJv bSBQTSBRb1MgKi8KPiAKPiBBcyBJIGNvbW1lbnRlZCBvbiBwYXRjaDQsCj4gJ2NvbnN0cmFpbnRz JyAtPiAnQ29uc3RyYWludCcgYmVjYXVzZSBmaXJzdCB2ZXJiIGhhdmUgdG8gYmUgdXNlZAo+IGFz IHRoZSBzaWd1bGFyIHZlcmJzLgoKJ2NvbnN0cmFpbnRzJyBpcyBub3QgYSB2ZXJiIGluIHRoaXMg Y2FzZSwgYnV0IHRoZSBwbHVyYWwgb2YgdGhlIG5vdW4KY29uc3RyYWludAoKPiBJIHByZWZlciB0 byB1c2UgZm9sbG93aW5nIGNvbW1lbnRzOiAKPiAKPiAJLyogQ29uc3RyYWludCBtaW5pbXVtL21h eGltdW0gZnJlcXVlbmN5IGZyb20gUE0gUW9TIGNvbnN0cmFpbnRzICovCgpJJ20gbm90IGNvbnZp bmNlZCB0aGF0IHRoaXMgaXMgcmVhbGx5IGFuIGltcHJvdmVtZW50LiBGaXJzdCB0aGVyZSBpcyB0 aGUKcmVwZWF0ZWQgdXNlIG9mICdDb25zdHJhaW50IC4uLiBjb25zdHJhaW50cycuIEFuIGltcHJv dmVtZW50IGNvdWxkIGJlIHRvIHVzZQonTGltaXQnIGluc3RlYWQgb2YgJ0NvbnN0cmFpbnQnLiBB bnl3YXkgZnJvbSB0aGUgY29kZSBpdCBpcyBwcmV0dHkgb2J2aW91cwp0aGF0IHRoZSBtaW4vbWF4 IGZyZXF1ZW5jaWVzIGFyZSBsaW1pdGVkLiBBcmUgeW91IHN1Z2dlc3RpbmcgdG8gYWxzbyBzYXkK ZnVydGhlciBiZWxvdyAiTGltaXQgbWluaW11bS9tYXhpbXVtIGZyZXF1ZW5jeSBmcm9tIHN5c2Zz IGNvbnN0cmFpbnRzIgphbmQgdGhlIHNhbWUgZm9yIHRoZSBPUFAgb25lcz8KCklmIHlvdSByZWFs bHkgd2FudCBhIHZlcmIgdGhlIGNvbW1lbnRzIGNvdWxkIGJlIHNvbWV0aGluZyBsaWtlICJBcHBs eQo8aW50ZXJmYWNlPiBjb25zdHJhaW50cyIgb3IgIkFwcGx5IGNvbnN0cmFpbnRzIGZyb20gPGlu dGVyZmFjZT4iLgoKSU1PIHRoZSBjdXJyZW50IGNvbW1lbnRzIHByb3ZpZGUgZW5vdWdoIGluZm9y bWF0aW9uLCB1bm5lY2Vzc2FyaWx5IHZlcmJvc2UKY29tbWVudHMgY2FuIHJhdGhlciBnZXQgaW4g dGhlIHdheSBvZiBjb2RlIHJlYWRhYmlsaXR5LgoKPiA+ICsJcW9zX21pbl9mcmVxID0gZGV2X3Bt X3Fvc19yZWFkX3ZhbHVlKGRldmZyZXEtPmRldi5wYXJlbnQsCj4gPiArCQkJCQkgICAgIERFVl9Q TV9RT1NfTUlOX0ZSRVFVRU5DWSk7Cj4gPiArCXFvc19tYXhfZnJlcSA9IGRldl9wbV9xb3NfcmVh ZF92YWx1ZShkZXZmcmVxLT5kZXYucGFyZW50LAo+ID4gKwkJCQkJICAgICBERVZfUE1fUU9TX01J Tl9GUkVRVUVOQ1kpOwo+ID4gKwkqbWluX2ZyZXEgPSBtYXgoKm1pbl9mcmVxLCBIWl9QRVJfS0ha ICogcW9zX21pbl9mcmVxKTsKPiA+ICsJKm1heF9mcmVxID0gbWluKCptYXhfZnJlcSwgSFpfUEVS X0tIWiAqIHFvc19tYXhfZnJlcSk7Cj4gPiArCj4gPiAgCS8qIGNvbnN0cmFpbnRzIGZyb20gc3lz ZnMgKi8KPiA+ICAJKm1pbl9mcmVxID0gbWF4KCptaW5fZnJlcSwgZGV2ZnJlcS0+bWluX2ZyZXEp Owo+ID4gIAkqbWF4X2ZyZXEgPSBtaW4oKm1heF9mcmVxLCBkZXZmcmVxLT5tYXhfZnJlcSk7Cj4g PiAgCj4gPiAgCS8qIGNvbnN0cmFpbnRzIGZyb20gT1BQIGludGVyZmFjZSAqLwo+ID4gQEAgLTYw NiwxMCArNjE4LDQ5IEBAIHN0YXRpYyBpbnQgZGV2ZnJlcV9ub3RpZmllcl9jYWxsKHN0cnVjdCBu b3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgdHlwZSwKPiA+ICAJbXV0ZXhfdW5sb2Nr KCZkZXZmcmVxLT5sb2NrKTsKPiA+ICAKPiA+ICAJcmV0dXJuIHJldDsKPiA+ICB9Cj4gPiAgCj4g PiArLyoqCj4gPiArICogcW9zX25vdGlmaWVyX2NhbGwoKSAtIENvbW1vbiBoYW5kbGVyIGZvciBR b1MgY29uc3RyYWludHMuCj4gPiArICogQGRldmZyZXE6ICAgIHRoZSBkZXZmcmVxIGluc3RhbmNl Lgo+ID4gKyAqLwo+ID4gK3N0YXRpYyBpbnQgcW9zX25vdGlmaWVyX2NhbGwoc3RydWN0IGRldmZy ZXEgKmRldmZyZXEpCj4gPiArewo+ID4gKwlpbnQgZXJyOwo+ID4gKwo+ID4gKwltdXRleF9sb2Nr KCZkZXZmcmVxLT5sb2NrKTsKPiA+ICsJZXJyID0gdXBkYXRlX2RldmZyZXEoZGV2ZnJlcSk7Cj4g PiArCW11dGV4X3VubG9jaygmZGV2ZnJlcS0+bG9jayk7Cj4gPiArCWlmIChlcnIpCj4gPiArCQlk ZXZfZXJyKGRldmZyZXEtPmRldi5wYXJlbnQsCj4gPiArCQkJCSJmYWlsZWQgdG8gdXBkYXRlIGZy ZXF1ZW5jeSBmb3IgUE0gUW9TIGNvbnN0cmFpbnRzICglZClcbiIsCj4gCj4gSXMgaXQgbm90IG92 ZXIgODAgY2hhcj8KCkl0IGlzIGFuZCBMZW9uYXJkIHNwbGl0IGl0IHVwIGluaXRpYWxseSwgaG93 ZXZlciBJIGFza2VkIGhpbSB0byBub3QKYnJlYWsgaXQgdXAgYmVjYXVzZToKCiAgMikgQnJlYWtp bmcgbG9uZyBsaW5lcyBhbmQgc3RyaW5ncwoKICBIb3dldmVyLCAqbmV2ZXIqIGJyZWFrIHVzZXIt dmlzaWJsZSBzdHJpbmdzIHN1Y2ggYXMgcHJpbnRrIG1lc3NhZ2VzLAogIGJlY2F1c2UgdGhhdCBi cmVha3MgdGhlIGFiaWxpdHkgdG8gZ3JlcCBmb3IgdGhlbS4KCiAgRG9jdW1lbnRhdGlvbi9wcm9j ZXNzL2NvZGluZy1zdHlsZS5yc3QKCkxpbmUgbGVuZ3RoIGNvdWxkIGJlIHJlZHVjZWQgYSBiaXQg YnkgYWRqdXN0aW5nIGluZGVudGF0aW9uIHRob3VnaC4KCj4gCj4gPiArCQkJCWVycik7Cj4gPiAr Cj4gPiArCXJldHVybiBOT1RJRllfT0s7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIHFv c19taW5fbm90aWZpZXJfY2FsbCgpIC0gQ2FsbGJhY2sgZm9yIFFvUyBtaW5fZnJlcSBjaGFuZ2Vz Lgo+ID4gKyAqIEBuYjoJCVNob3VsZCBiZSBkZXZmcmVxLT5uYl9taW4KPiA+ICsgKi8KPiA+ICtz dGF0aWMgaW50IHFvc19taW5fbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5i LAo+ID4gKwkJCQkJIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpwdHIpCj4gPiArewo+ID4gKwly ZXR1cm4gcW9zX25vdGlmaWVyX2NhbGwoY29udGFpbmVyX29mKG5iLCBzdHJ1Y3QgZGV2ZnJlcSwg bmJfbWluKSk7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIHFvc19tYXhfbm90aWZpZXJf Y2FsbCgpIC0gQ2FsbGJhY2sgZm9yIFFvUyBtYXhfZnJlcSBjaGFuZ2VzLgo+ID4gKyAqIEBuYjoJ CVNob3VsZCBiZSBkZXZmcmVxLT5uYl9tYXgKPiA+ICsgKi8KPiA+ICtzdGF0aWMgaW50IHFvc19t YXhfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAo+ID4gKwkJCQkJIHVu c2lnbmVkIGxvbmcgdmFsLCB2b2lkICpwdHIpCj4gPiArewo+ID4gKwlyZXR1cm4gcW9zX25vdGlm aWVyX2NhbGwoY29udGFpbmVyX29mKG5iLCBzdHJ1Y3QgZGV2ZnJlcSwgbmJfbWF4KSk7Cj4gPiAr fQo+ID4gKwo+ID4gIC8qKgo+ID4gICAqIGRldmZyZXFfZGV2X3JlbGVhc2UoKSAtIENhbGxiYWNr IGZvciBzdHJ1Y3QgZGV2aWNlIHRvIHJlbGVhc2UgdGhlIGRldmljZS4KPiA+ICAgKiBAZGV2Ogl0 aGUgZGV2ZnJlcSBkZXZpY2UKPiA+ICAgKgo+ID4gICAqIFJlbW92ZSBkZXZmcmVxIGZyb20gdGhl IGxpc3QgYW5kIHJlbGVhc2UgaXRzIHJlc291cmNlcy4KPiA+IEBAIC02MjAsMTAgKzY3MSwxNSBA QCBzdGF0aWMgdm9pZCBkZXZmcmVxX2Rldl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKPiA+ ICAKPiA+ICAJbXV0ZXhfbG9jaygmZGV2ZnJlcV9saXN0X2xvY2spOwo+ID4gIAlsaXN0X2RlbCgm ZGV2ZnJlcS0+bm9kZSk7Cj4gPiAgCW11dGV4X3VubG9jaygmZGV2ZnJlcV9saXN0X2xvY2spOwo+ ID4gIAo+ID4gKwlkZXZfcG1fcW9zX3JlbW92ZV9ub3RpZmllcihkZXZmcmVxLT5kZXYucGFyZW50 LCAmZGV2ZnJlcS0+bmJfbWF4LAo+ID4gKwkJCURFVl9QTV9RT1NfTUFYX0ZSRVFVRU5DWSk7Cj4g PiArCWRldl9wbV9xb3NfcmVtb3ZlX25vdGlmaWVyKGRldmZyZXEtPmRldi5wYXJlbnQsICZkZXZm cmVxLT5uYl9taW4sCj4gPiArCQkJREVWX1BNX1FPU19NSU5fRlJFUVVFTkNZKTsKPiA+ICsKPiAK PiBKdXN0IHByaW50IGVycm9yIHdpdGggZGV2X2VycigpIHdpdGhvdXQgc3RvcHBpbmcgdGhlIHJl bGVhc2Ugc3RlcC4KPiAKPiBJIHByZWZlciB0byBoYW5kbGUgdGhlIHJldHVybiB2YWx1ZSBpZiBr ZXJuZWwgQVBJIHByb3ZpZGVzCj4gdGhlIGVycm9yIGNvZGUuCj4gCj4gPiAgCWlmIChkZXZmcmVx LT5wcm9maWxlLT5leGl0KQo+ID4gIAkJZGV2ZnJlcS0+cHJvZmlsZS0+ZXhpdChkZXZmcmVxLT5k ZXYucGFyZW50KTsKPiA+ICAKPiA+ICAJa2ZyZWUoZGV2ZnJlcS0+dGltZV9pbl9zdGF0ZSk7Cj4g PiAgCWtmcmVlKGRldmZyZXEtPnRyYW5zX3RhYmxlKTsKPiA+IEBAIC03MzMsMTAgKzc4OSwyOCBA QCBzdHJ1Y3QgZGV2ZnJlcSAqZGV2ZnJlcV9hZGRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwK PiA+ICAJaWYgKGVycikgewo+ID4gIAkJcHV0X2RldmljZSgmZGV2ZnJlcS0+ZGV2KTsKPiA+ICAJ CWdvdG8gZXJyX291dDsKPiA+ICAJfQo+ID4gIAo+ID4gKwkvKgo+ID4gKwkgKiBSZWdpc3RlciBu b3RpZmllcnMgZm9yIHVwZGF0ZXMgdG8gbWluL21heF9mcmVxIGFmdGVyIGRldmljZSBpcwo+ID4g KwkgKiBpbml0aWFsaXplZCAoYW5kIHdlIGNhbiBoYW5kbGUgbm90aWZpY2F0aW9ucykgYnV0IGJl Zm9yZSB0aGUKPiA+ICsJICogZ292ZXJub3IgaXMgc3RhcnRlZCAod2hpY2ggc2hvdWxkIGRvIGFu IGluaXRpYWwgZW5mb3JjZW1lbnQgb2YKPiA+ICsJICogY29uc3RyYWludHMpLgo+ID4gKwkgKi8K PiAKPiBNeSBwcmV2aW91cyBjb21tZW50IGlzIG5vdCBlbm91Z2ggd2h5IEkgcHJlZmVyIHRvIHJl bW92ZSBpdC4gU29ycnkuCj4gQWN0dWFsbHksIHVudGlsIG5vdywgdGhlIGRldmZyZXFfYWRkX2Rl dmljZSgpIGRvbid0IGhhdmUgdGhlIGRldGFpbGVkCj4gY29tbWVudHMgYmVjYXVzZSB0aGUgbGlu ZSBjb2RlIGlzIG5vdCB0b28gbG9uZy4gQnV0LCBhdCB0aGUgcHJlc2VudCB0aW1lLAo+IGRldmZy ZXFfYWRkX2RldmljZSgpIGlzIHRvbyBsb25nLiBJdCBtZWFucyB0aGF0IHRoZSBkZXRhaWxlZCBj b21tZW50Cj4gYXJlIG5lY2Vzc2FyeS4gCj4gCj4gU28sIEknbGwgYWRkIHRoZSBkZXRhaWxlZCBj b21tZW50IGZvciBlYWNoIHN0ZXAgb2YgZGV2ZnJlcV9hZGRfZGV2aWNlKCkKPiBvbiBzZXBhcmF0 ZSBwYXRjaCB0byBrZWVwIHRoZSBzYW1lIHN0eWxlLiBJJ2xsIHNlbmQgdGhlIHBhdGNoIHRvIHlv dQo+IGZvciB0aGUgcmV2aWV3Lgo+IAo+ID4gKwlkZXZmcmVxLT5uYl9taW4ubm90aWZpZXJfY2Fs bCA9IHFvc19taW5fbm90aWZpZXJfY2FsbDsKPiA+ICsJZXJyID0gZGV2X3BtX3Fvc19hZGRfbm90 aWZpZXIoZGV2ZnJlcS0+ZGV2LnBhcmVudCwgJmRldmZyZXEtPm5iX21pbiwKPiA+ICsJCQkJICAg ICAgREVWX1BNX1FPU19NSU5fRlJFUVVFTkNZKTsKPiA+ICsJaWYgKGVycikKPiA+ICsJCWdvdG8g ZXJyX2RldmZyZXE7Cj4gPiArCj4gPiArCWRldmZyZXEtPm5iX21heC5ub3RpZmllcl9jYWxsID0g cW9zX21heF9ub3RpZmllcl9jYWxsOwo+ID4gKwllcnIgPSBkZXZfcG1fcW9zX2FkZF9ub3RpZmll cihkZXZmcmVxLT5kZXYucGFyZW50LCAmZGV2ZnJlcS0+bmJfbWF4LAo+ID4gKwkJCQkgICAgICBE RVZfUE1fUU9TX01BWF9GUkVRVUVOQ1kpOwo+ID4gKwlpZiAoZXJyKQo+ID4gKwkJZ290byBlcnJf ZGV2ZnJlcTsKPiA+ICsKPiA+ICAJbXV0ZXhfbG9jaygmZGV2ZnJlcV9saXN0X2xvY2spOwo+ID4g IAo+ID4gIAlnb3Zlcm5vciA9IHRyeV90aGVuX3JlcXVlc3RfZ292ZXJub3IoZGV2ZnJlcS0+Z292 ZXJub3JfbmFtZSk7Cj4gPiAgCWlmIChJU19FUlIoZ292ZXJub3IpKSB7Cj4gPiAgCQlkZXZfZXJy KGRldiwgIiVzOiBVbmFibGUgdG8gZmluZCBnb3Zlcm5vciBmb3IgdGhlIGRldmljZVxuIiwKPiA+ IEBAIC03NjAsMTAgKzgzNCwxMSBAQCBzdHJ1Y3QgZGV2ZnJlcSAqZGV2ZnJlcV9hZGRfZGV2aWNl KHN0cnVjdCBkZXZpY2UgKmRldiwKPiA+ICAKPiA+ICAJcmV0dXJuIGRldmZyZXE7Cj4gPiAgCj4g PiAgZXJyX2luaXQ6Cj4gPiAgCW11dGV4X3VubG9jaygmZGV2ZnJlcV9saXN0X2xvY2spOwo+ID4g K2Vycl9kZXZmcmVxOgo+ID4gIAlkZXZmcmVxX3JlbW92ZV9kZXZpY2UoZGV2ZnJlcSk7Cj4gPiAg CXJldHVybiBFUlJfUFRSKGVycik7Cj4gPiAgCj4gPiAgZXJyX2RldjoKPiA+ICAJLyoKPiA+IGRp ZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmZyZXEuaCBiL2luY2x1ZGUvbGludXgvZGV2ZnJl cS5oCj4gPiBpbmRleCBjM2NiYzE1ZmRmMDguLmRhYzBkZmZlYWJiNCAxMDA2NDQKPiA+IC0tLSBh L2luY2x1ZGUvbGludXgvZGV2ZnJlcS5oCj4gPiArKysgYi9pbmNsdWRlL2xpbnV4L2RldmZyZXEu aAo+ID4gQEAgLTEzNCwxMCArMTM0LDEyIEBAIHN0cnVjdCBkZXZmcmVxX2Rldl9wcm9maWxlIHsK PiA+ICAgKiBAdG90YWxfdHJhbnM6CU51bWJlciBvZiBkZXZmcmVxIHRyYW5zaXRpb25zCj4gPiAg ICogQHRyYW5zX3RhYmxlOglTdGF0aXN0aWNzIG9mIGRldmZyZXEgdHJhbnNpdGlvbnMKPiA+ICAg KiBAdGltZV9pbl9zdGF0ZToJU3RhdGlzdGljcyBvZiBkZXZmcmVxIHN0YXRlcwo+ID4gICAqIEBs YXN0X3N0YXRfdXBkYXRlZDoJVGhlIGxhc3QgdGltZSBzdGF0IHVwZGF0ZWQKPiA+ICAgKiBAdHJh bnNpdGlvbl9ub3RpZmllcl9saXN0OiBsaXN0IGhlYWQgb2YgREVWRlJFUV9UUkFOU0lUSU9OX05P VElGSUVSIG5vdGlmaWVyCj4gPiArICogQG5iX21pbjoJCU5vdGlmaWVyIGJsb2NrIGZvciBERVZf UE1fUU9TX01JTl9GUkVRVUVOQ1kKPiA+ICsgKiBAbmJfbWF4OgkJTm90aWZpZXIgYmxvY2sgZm9y IERFVl9QTV9RT1NfTUFYX0ZSRVFVRU5DWQo+ID4gICAqCj4gPiAgICogVGhpcyBzdHJ1Y3R1cmUg c3RvcmVzIHRoZSBkZXZmcmVxIGluZm9ybWF0aW9uIGZvciBhIGdpdmUgZGV2aWNlLgo+ID4gICAq Cj4gPiAgICogTm90ZSB0aGF0IHdoZW4gYSBnb3Zlcm5vciBhY2Nlc3NlcyBlbnRyaWVzIGluIHN0 cnVjdCBkZXZmcmVxIGluIGl0cwo+ID4gICAqIGZ1bmN0aW9ucyBleGNlcHQgZm9yIHRoZSBjb250 ZXh0IG9mIGNhbGxiYWNrcyBkZWZpbmVkIGluIHN0cnVjdAo+ID4gQEAgLTE3NiwxMCArMTc4LDEz IEBAIHN0cnVjdCBkZXZmcmVxIHsKPiA+ICAJdW5zaWduZWQgaW50ICp0cmFuc190YWJsZTsKPiA+ ICAJdW5zaWduZWQgbG9uZyAqdGltZV9pbl9zdGF0ZTsKPiA+ICAJdW5zaWduZWQgbG9uZyBsYXN0 X3N0YXRfdXBkYXRlZDsKPiA+ICAKPiA+ICAJc3RydWN0IHNyY3Vfbm90aWZpZXJfaGVhZCB0cmFu c2l0aW9uX25vdGlmaWVyX2xpc3Q7Cj4gPiArCj4gPiArCXN0cnVjdCBub3RpZmllcl9ibG9jayBu Yl9taW47Cj4gPiArCXN0cnVjdCBub3RpZmllcl9ibG9jayBuYl9tYXg7Cj4gPiAgfTsKPiA+ICAK PiA+ICBzdHJ1Y3QgZGV2ZnJlcV9mcmVxcyB7Cj4gPiAgCXVuc2lnbmVkIGxvbmcgb2xkOwo+ID4g IAl1bnNpZ25lZCBsb25nIG5ldzsKPiA+IAo+IAo+IAo+IC0tIAo+IEJlc3QgUmVnYXJkcywKPiBD aGFud29vIENob2kKPiBTYW1zdW5nIEVsZWN0cm9uaWNzCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdAps aW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVh ZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==