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=-6.8 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, 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 590C0C43381 for ; Thu, 28 Mar 2019 06:56:42 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 1C0BC2075E for ; Thu, 28 Mar 2019 06:56:42 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="key not found in DNS" (0-bit key) header.d=codeaurora.org header.i=@codeaurora.org header.b="hAyt+v/G"; dkim=fail reason="key not found in DNS" (0-bit key) header.d=codeaurora.org header.i=@codeaurora.org header.b="PJP5CayG" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726332AbfC1G4k (ORCPT ); Thu, 28 Mar 2019 02:56:40 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:40282 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725815AbfC1G4k (ORCPT ); Thu, 28 Mar 2019 02:56:40 -0400 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id C6622607C6; Thu, 28 Mar 2019 06:56:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1553756198; bh=pBMbbbvhiAwnjjwsEW9m0EDi0dDvM9XDa0w9M7jJN54=; h=Subject:To:Cc:References:From:Date:In-Reply-To:From; b=hAyt+v/GoB2KoAF/SZiVHwPKu+dsYj+5b7K8ufmsGN7jsI6i4UDe8k0Fyraq1Xzj8 QuPqeRj+it6YRV7aQ4MBykjnTnwA4NH1ocoFrFuOPdLoYLSpe3k1JYgqZM3RdLUdUm H5RXtdIde5pqaWaIe/66xkbeEiSgB7kz7RQ1m5XQ= Received: from [10.204.79.83] (blr-c-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.19.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: mojha@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 801FD60237; Thu, 28 Mar 2019 06:56:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1553756197; bh=pBMbbbvhiAwnjjwsEW9m0EDi0dDvM9XDa0w9M7jJN54=; h=Subject:To:Cc:References:From:Date:In-Reply-To:From; b=PJP5CayGbzC4na4enJHmV8jP7M7ampwm6mc/IkcR2YMq2Hf+xxu8zlzghHTCVZdq+ Dl4+kDkY0NazVxGxY7ql83P5J/y7AsyetupriAKbhM5HFrmz7HJyjRvzQXJSMQhmHE xGykofXI/YGEcJQQs+XH/HXGtxtC1BkO3jWWQxdA= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 801FD60237 Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=mojha@codeaurora.org Subject: Re: [PATCH v2] arch_topology: Make cpu_capacity sysfs node as ready-only To: Lingutla Chandrasekhar , gregkh@linuxfoundation.org, quentin.perret@arm.com, sudeep.holla@arm.com, dietmar.eggemann@arm.com Cc: juri.lelli@gmail.com, catalin.marinas@arm.com, jeremy.linton@arm.com, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org References: <20190328044705.16838-1-clingutla@codeaurora.org> From: Mukesh Ojha Message-ID: Date: Thu, 28 Mar 2019 12:26:30 +0530 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 MIME-Version: 1.0 In-Reply-To: <20190328044705.16838-1-clingutla@codeaurora.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Thanks for making the change suggested. Should not this be v3. Please add version detail properly including what changes you made in which version after ---,  that makes the patch easy to review. Thanks. Mukesh On 3/28/2019 10:17 AM, Lingutla Chandrasekhar wrote: > If user updates any cpu's cpu_capacity, then the new value is going to > be applied to all its online sibling cpus. But this need not to be correct > always, as sibling cpus (in ARM, same micro architecture cpus) would have > different cpu_capacity with different performance characteristics. > So, updating the user supplied cpu_capacity to all cpu siblings > is not correct. > > And another problem is, current code assumes that 'all cpus in a cluster > or with same package_id (core_siblings), would have same cpu_capacity'. > But with commit '5bdd2b3f0f8 ("arm64: topology: add support to remove > cpu topology sibling masks")', when a cpu hotplugged out, the cpu > information gets cleared in its sibling cpus. So, user supplied > cpu_capacity would be applied to only online sibling cpus at the time. > After that, if any cpu hotplugged in, it would have different cpu_capacity > than its siblings, which breaks the above assumption. > > So, instead of mucking around the core sibling mask for user supplied > value, use device-tree to set cpu capacity. And make the cpu_capacity > node as read-only to know the asymmetry between cpus in the system. > While at it, remove cpu_scale_mutex usage, which used for sysfs write > protection. > > Tested-by: Dietmar Eggemann > Tested-by: Quentin Perret > Reviewed-by: Quentin Perret > Acked-by: Sudeep Holla > Signed-off-by: Lingutla Chandrasekhar > > diff --git a/drivers/base/arch_topology.c b/drivers/base/arch_topology.c > index edfcf8d982e4..1739d7e1952a 100644 > --- a/drivers/base/arch_topology.c > +++ b/drivers/base/arch_topology.c > @@ -7,7 +7,6 @@ > */ > > #include > -#include > #include > #include > #include > @@ -31,7 +30,6 @@ void arch_set_freq_scale(struct cpumask *cpus, unsigned long cur_freq, > per_cpu(freq_scale, i) = scale; > } > > -static DEFINE_MUTEX(cpu_scale_mutex); > DEFINE_PER_CPU(unsigned long, cpu_scale) = SCHED_CAPACITY_SCALE; > > void topology_set_cpu_scale(unsigned int cpu, unsigned long capacity) > @@ -51,37 +49,7 @@ static ssize_t cpu_capacity_show(struct device *dev, > static void update_topology_flags_workfn(struct work_struct *work); > static DECLARE_WORK(update_topology_flags_work, update_topology_flags_workfn); > > -static ssize_t cpu_capacity_store(struct device *dev, > - struct device_attribute *attr, > - const char *buf, > - size_t count) > -{ > - struct cpu *cpu = container_of(dev, struct cpu, dev); > - int this_cpu = cpu->dev.id; > - int i; > - unsigned long new_capacity; > - ssize_t ret; > - > - if (!count) > - return 0; > - > - ret = kstrtoul(buf, 0, &new_capacity); > - if (ret) > - return ret; > - if (new_capacity > SCHED_CAPACITY_SCALE) > - return -EINVAL; > - > - mutex_lock(&cpu_scale_mutex); > - for_each_cpu(i, &cpu_topology[this_cpu].core_sibling) > - topology_set_cpu_scale(i, new_capacity); > - mutex_unlock(&cpu_scale_mutex); > - > - schedule_work(&update_topology_flags_work); > - > - return count; > -} > - > -static DEVICE_ATTR_RW(cpu_capacity); > +static DEVICE_ATTR_RO(cpu_capacity); > > static int register_cpu_capacity_sysctl(void) > { > @@ -141,7 +109,6 @@ void topology_normalize_cpu_scale(void) > return; > > pr_debug("cpu_capacity: capacity_scale=%u\n", capacity_scale); > - mutex_lock(&cpu_scale_mutex); > for_each_possible_cpu(cpu) { > pr_debug("cpu_capacity: cpu=%d raw_capacity=%u\n", > cpu, raw_capacity[cpu]); > @@ -151,7 +118,6 @@ void topology_normalize_cpu_scale(void) > pr_debug("cpu_capacity: CPU%d cpu_capacity=%lu\n", > cpu, topology_get_cpu_scale(NULL, cpu)); > } > - mutex_unlock(&cpu_scale_mutex); > } > > bool __init topology_parse_cpu_capacity(struct device_node *cpu_node, int cpu) 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=-7.0 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,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 9C092C43381 for ; Thu, 28 Mar 2019 06:56:47 +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 676B82075E for ; Thu, 28 Mar 2019 06:56:47 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="E3fmcSXm"; dkim=fail reason="key not found in DNS" (0-bit key) header.d=codeaurora.org header.i=@codeaurora.org header.b="hAyt+v/G"; dkim=fail reason="key not found in DNS" (0-bit key) header.d=codeaurora.org header.i=@codeaurora.org header.b="PJP5CayG" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 676B82075E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=codeaurora.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-Type: Content-Transfer-Encoding:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=TGr2u0/sySdML5xfsGjBogjQNrJsCyBtbvZOWu+a7d4=; b=E3fmcSXmSSmC0L2FoXyxmotyK A/K1GpGKmzOaDCZWDxO04TZijnbcIVQrBtxCYqIq4wEPqeQAElFPveJT7/mYrMXjm3TF3Bxc9A7XZ 2CH83tPSKaLtRrO5oMFmUJjfUUXxVLBgllNqIqmm1et8mX9mki340b3biKjneYP0EU1DsdW/xX9Qb v0xp4REPgr1YYN8zyFFaWwlG9r0IBFtqwnUHgwc2q0nLY01R7vbrZlfjLRnV6V4jsbYnTRcaPDI10 rB2pmgF99N38iEyHi3sbLlVxpCPZGDWuwVBc1ilSwmsfM2RTv8mA4xVoeBIOV9OMqqafy92W6X1QH wKJ14Ez1w==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1h9Oxu-0004BJ-5u; Thu, 28 Mar 2019 06:56:42 +0000 Received: from smtp.codeaurora.org ([198.145.29.96]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1h9Oxr-0004Ax-0k for linux-arm-kernel@lists.infradead.org; Thu, 28 Mar 2019 06:56:40 +0000 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id A6EAE6079C; Thu, 28 Mar 2019 06:56:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1553756198; bh=pBMbbbvhiAwnjjwsEW9m0EDi0dDvM9XDa0w9M7jJN54=; h=Subject:To:Cc:References:From:Date:In-Reply-To:From; b=hAyt+v/GoB2KoAF/SZiVHwPKu+dsYj+5b7K8ufmsGN7jsI6i4UDe8k0Fyraq1Xzj8 QuPqeRj+it6YRV7aQ4MBykjnTnwA4NH1ocoFrFuOPdLoYLSpe3k1JYgqZM3RdLUdUm H5RXtdIde5pqaWaIe/66xkbeEiSgB7kz7RQ1m5XQ= Received: from [10.204.79.83] (blr-c-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.19.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: mojha@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 801FD60237; Thu, 28 Mar 2019 06:56:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1553756197; bh=pBMbbbvhiAwnjjwsEW9m0EDi0dDvM9XDa0w9M7jJN54=; h=Subject:To:Cc:References:From:Date:In-Reply-To:From; b=PJP5CayGbzC4na4enJHmV8jP7M7ampwm6mc/IkcR2YMq2Hf+xxu8zlzghHTCVZdq+ Dl4+kDkY0NazVxGxY7ql83P5J/y7AsyetupriAKbhM5HFrmz7HJyjRvzQXJSMQhmHE xGykofXI/YGEcJQQs+XH/HXGtxtC1BkO3jWWQxdA= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 801FD60237 Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=mojha@codeaurora.org Subject: Re: [PATCH v2] arch_topology: Make cpu_capacity sysfs node as ready-only To: Lingutla Chandrasekhar , gregkh@linuxfoundation.org, quentin.perret@arm.com, sudeep.holla@arm.com, dietmar.eggemann@arm.com References: <20190328044705.16838-1-clingutla@codeaurora.org> From: Mukesh Ojha Message-ID: Date: Thu, 28 Mar 2019 12:26:30 +0530 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 MIME-Version: 1.0 In-Reply-To: <20190328044705.16838-1-clingutla@codeaurora.org> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190327_235639_098351_EFAE4EE6 X-CRM114-Status: GOOD ( 21.23 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-arm-kernel@lists.infradead.org, catalin.marinas@arm.com, linux-kernel@vger.kernel.org, jeremy.linton@arm.com, juri.lelli@gmail.com Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org VGhhbmtzIGZvciBtYWtpbmcgdGhlIGNoYW5nZSBzdWdnZXN0ZWQuCgpTaG91bGQgbm90IHRoaXMg YmUgdjMuCgpQbGVhc2UgYWRkIHZlcnNpb24gZGV0YWlsIHByb3Blcmx5IGluY2x1ZGluZyB3aGF0 IGNoYW5nZXMgeW91IG1hZGUgaW4gCndoaWNoIHZlcnNpb24gYWZ0ZXIgLS0tLMKgIHRoYXQgbWFr ZXMgdGhlIHBhdGNoIGVhc3kgdG8gcmV2aWV3LgoKVGhhbmtzLgpNdWtlc2gKCgpPbiAzLzI4LzIw MTkgMTA6MTcgQU0sIExpbmd1dGxhIENoYW5kcmFzZWtoYXIgd3JvdGU6Cj4gSWYgdXNlciB1cGRh dGVzIGFueSBjcHUncyBjcHVfY2FwYWNpdHksIHRoZW4gdGhlIG5ldyB2YWx1ZSBpcyBnb2luZyB0 bwo+IGJlIGFwcGxpZWQgdG8gYWxsIGl0cyBvbmxpbmUgc2libGluZyBjcHVzLiBCdXQgdGhpcyBu ZWVkIG5vdCB0byBiZSBjb3JyZWN0Cj4gYWx3YXlzLCBhcyBzaWJsaW5nIGNwdXMgKGluIEFSTSwg c2FtZSBtaWNybyBhcmNoaXRlY3R1cmUgY3B1cykgd291bGQgaGF2ZQo+IGRpZmZlcmVudCBjcHVf Y2FwYWNpdHkgd2l0aCBkaWZmZXJlbnQgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLgo+IFNv LCB1cGRhdGluZyB0aGUgdXNlciBzdXBwbGllZCBjcHVfY2FwYWNpdHkgdG8gYWxsIGNwdSBzaWJs aW5ncwo+IGlzIG5vdCBjb3JyZWN0Lgo+Cj4gQW5kIGFub3RoZXIgcHJvYmxlbSBpcywgY3VycmVu dCBjb2RlIGFzc3VtZXMgdGhhdCAnYWxsIGNwdXMgaW4gYSBjbHVzdGVyCj4gb3Igd2l0aCBzYW1l IHBhY2thZ2VfaWQgKGNvcmVfc2libGluZ3MpLCB3b3VsZCBoYXZlIHNhbWUgY3B1X2NhcGFjaXR5 Jy4KPiBCdXQgd2l0aCBjb21taXQgJzViZGQyYjNmMGY4ICgiYXJtNjQ6IHRvcG9sb2d5OiBhZGQg c3VwcG9ydCB0byByZW1vdmUKPiBjcHUgdG9wb2xvZ3kgc2libGluZyBtYXNrcyIpJywgd2hlbiBh IGNwdSBob3RwbHVnZ2VkIG91dCwgdGhlIGNwdQo+IGluZm9ybWF0aW9uIGdldHMgY2xlYXJlZCBp biBpdHMgc2libGluZyBjcHVzLiBTbywgdXNlciBzdXBwbGllZAo+IGNwdV9jYXBhY2l0eSB3b3Vs ZCBiZSBhcHBsaWVkIHRvIG9ubHkgb25saW5lIHNpYmxpbmcgY3B1cyBhdCB0aGUgdGltZS4KPiBB ZnRlciB0aGF0LCBpZiBhbnkgY3B1IGhvdHBsdWdnZWQgaW4sIGl0IHdvdWxkIGhhdmUgZGlmZmVy ZW50IGNwdV9jYXBhY2l0eQo+IHRoYW4gaXRzIHNpYmxpbmdzLCB3aGljaCBicmVha3MgdGhlIGFi b3ZlIGFzc3VtcHRpb24uCj4KPiBTbywgaW5zdGVhZCBvZiBtdWNraW5nIGFyb3VuZCB0aGUgY29y ZSBzaWJsaW5nIG1hc2sgZm9yIHVzZXIgc3VwcGxpZWQKPiB2YWx1ZSwgdXNlIGRldmljZS10cmVl IHRvIHNldCBjcHUgY2FwYWNpdHkuIEFuZCBtYWtlIHRoZSBjcHVfY2FwYWNpdHkKPiBub2RlIGFz IHJlYWQtb25seSB0byBrbm93IHRoZSBhc3ltbWV0cnkgYmV0d2VlbiBjcHVzIGluIHRoZSBzeXN0 ZW0uCj4gV2hpbGUgYXQgaXQsIHJlbW92ZSBjcHVfc2NhbGVfbXV0ZXggdXNhZ2UsIHdoaWNoIHVz ZWQgZm9yIHN5c2ZzIHdyaXRlCj4gcHJvdGVjdGlvbi4KPgo+IFRlc3RlZC1ieTogRGlldG1hciBF Z2dlbWFubiA8ZGlldG1hci5lZ2dlbWFubkBhcm0uY29tPgo+IFRlc3RlZC1ieTogUXVlbnRpbiBQ ZXJyZXQgPHF1ZW50aW4ucGVycmV0QGFybS5jb20+Cj4gUmV2aWV3ZWQtYnk6IFF1ZW50aW4gUGVy cmV0IDxxdWVudGluLnBlcnJldEBhcm0uY29tPgo+IEFja2VkLWJ5OiBTdWRlZXAgSG9sbGEgPHN1 ZGVlcC5ob2xsYUBhcm0uY29tPgo+IFNpZ25lZC1vZmYtYnk6IExpbmd1dGxhIENoYW5kcmFzZWto YXIgPGNsaW5ndXRsYUBjb2RlYXVyb3JhLm9yZz4KPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2Jh c2UvYXJjaF90b3BvbG9neS5jIGIvZHJpdmVycy9iYXNlL2FyY2hfdG9wb2xvZ3kuYwo+IGluZGV4 IGVkZmNmOGQ5ODJlNC4uMTczOWQ3ZTE5NTJhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvYmFzZS9h cmNoX3RvcG9sb2d5LmMKPiArKysgYi9kcml2ZXJzL2Jhc2UvYXJjaF90b3BvbG9neS5jCj4gQEAg LTcsNyArNyw2IEBACj4gICAgKi8KPiAgIAo+ICAgI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KPiAt I2luY2x1ZGUgPGxpbnV4L2FyY2hfdG9wb2xvZ3kuaD4KPiAgICNpbmNsdWRlIDxsaW51eC9jcHUu aD4KPiAgICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+Cj4gICAjaW5jbHVkZSA8bGludXgvZGV2 aWNlLmg+Cj4gQEAgLTMxLDcgKzMwLDYgQEAgdm9pZCBhcmNoX3NldF9mcmVxX3NjYWxlKHN0cnVj dCBjcHVtYXNrICpjcHVzLCB1bnNpZ25lZCBsb25nIGN1cl9mcmVxLAo+ICAgCQlwZXJfY3B1KGZy ZXFfc2NhbGUsIGkpID0gc2NhbGU7Cj4gICB9Cj4gICAKPiAtc3RhdGljIERFRklORV9NVVRFWChj cHVfc2NhbGVfbXV0ZXgpOwo+ICAgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgY3B1X3Nj YWxlKSA9IFNDSEVEX0NBUEFDSVRZX1NDQUxFOwo+ICAgCj4gICB2b2lkIHRvcG9sb2d5X3NldF9j cHVfc2NhbGUodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyBjYXBhY2l0eSkKPiBAQCAt NTEsMzcgKzQ5LDcgQEAgc3RhdGljIHNzaXplX3QgY3B1X2NhcGFjaXR5X3Nob3coc3RydWN0IGRl dmljZSAqZGV2LAo+ICAgc3RhdGljIHZvaWQgdXBkYXRlX3RvcG9sb2d5X2ZsYWdzX3dvcmtmbihz dHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwo+ICAgc3RhdGljIERFQ0xBUkVfV09SSyh1cGRhdGVf dG9wb2xvZ3lfZmxhZ3Nfd29yaywgdXBkYXRlX3RvcG9sb2d5X2ZsYWdzX3dvcmtmbik7Cj4gICAK PiAtc3RhdGljIHNzaXplX3QgY3B1X2NhcGFjaXR5X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwK PiAtCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCj4gLQkJCQkgIGNvbnN0IGNo YXIgKmJ1ZiwKPiAtCQkJCSAgc2l6ZV90IGNvdW50KQo+IC17Cj4gLQlzdHJ1Y3QgY3B1ICpjcHUg PSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgY3B1LCBkZXYpOwo+IC0JaW50IHRoaXNfY3B1ID0g Y3B1LT5kZXYuaWQ7Cj4gLQlpbnQgaTsKPiAtCXVuc2lnbmVkIGxvbmcgbmV3X2NhcGFjaXR5Owo+ IC0Jc3NpemVfdCByZXQ7Cj4gLQo+IC0JaWYgKCFjb3VudCkKPiAtCQlyZXR1cm4gMDsKPiAtCj4g LQlyZXQgPSBrc3RydG91bChidWYsIDAsICZuZXdfY2FwYWNpdHkpOwo+IC0JaWYgKHJldCkKPiAt CQlyZXR1cm4gcmV0Owo+IC0JaWYgKG5ld19jYXBhY2l0eSA+IFNDSEVEX0NBUEFDSVRZX1NDQUxF KQo+IC0JCXJldHVybiAtRUlOVkFMOwo+IC0KPiAtCW11dGV4X2xvY2soJmNwdV9zY2FsZV9tdXRl eCk7Cj4gLQlmb3JfZWFjaF9jcHUoaSwgJmNwdV90b3BvbG9neVt0aGlzX2NwdV0uY29yZV9zaWJs aW5nKQo+IC0JCXRvcG9sb2d5X3NldF9jcHVfc2NhbGUoaSwgbmV3X2NhcGFjaXR5KTsKPiAtCW11 dGV4X3VubG9jaygmY3B1X3NjYWxlX211dGV4KTsKPiAtCj4gLQlzY2hlZHVsZV93b3JrKCZ1cGRh dGVfdG9wb2xvZ3lfZmxhZ3Nfd29yayk7Cj4gLQo+IC0JcmV0dXJuIGNvdW50Owo+IC19Cj4gLQo+ IC1zdGF0aWMgREVWSUNFX0FUVFJfUlcoY3B1X2NhcGFjaXR5KTsKPiArc3RhdGljIERFVklDRV9B VFRSX1JPKGNwdV9jYXBhY2l0eSk7Cj4gICAKPiAgIHN0YXRpYyBpbnQgcmVnaXN0ZXJfY3B1X2Nh cGFjaXR5X3N5c2N0bCh2b2lkKQo+ICAgewo+IEBAIC0xNDEsNyArMTA5LDYgQEAgdm9pZCB0b3Bv bG9neV9ub3JtYWxpemVfY3B1X3NjYWxlKHZvaWQpCj4gICAJCXJldHVybjsKPiAgIAo+ICAgCXBy X2RlYnVnKCJjcHVfY2FwYWNpdHk6IGNhcGFjaXR5X3NjYWxlPSV1XG4iLCBjYXBhY2l0eV9zY2Fs ZSk7Cj4gLQltdXRleF9sb2NrKCZjcHVfc2NhbGVfbXV0ZXgpOwo+ICAgCWZvcl9lYWNoX3Bvc3Np YmxlX2NwdShjcHUpIHsKPiAgIAkJcHJfZGVidWcoImNwdV9jYXBhY2l0eTogY3B1PSVkIHJhd19j YXBhY2l0eT0ldVxuIiwKPiAgIAkJCSBjcHUsIHJhd19jYXBhY2l0eVtjcHVdKTsKPiBAQCAtMTUx LDcgKzExOCw2IEBAIHZvaWQgdG9wb2xvZ3lfbm9ybWFsaXplX2NwdV9zY2FsZSh2b2lkKQo+ICAg CQlwcl9kZWJ1ZygiY3B1X2NhcGFjaXR5OiBDUFUlZCBjcHVfY2FwYWNpdHk9JWx1XG4iLAo+ICAg CQkJY3B1LCB0b3BvbG9neV9nZXRfY3B1X3NjYWxlKE5VTEwsIGNwdSkpOwo+ICAgCX0KPiAtCW11 dGV4X3VubG9jaygmY3B1X3NjYWxlX211dGV4KTsKPiAgIH0KPiAgIAo+ICAgYm9vbCBfX2luaXQg dG9wb2xvZ3lfcGFyc2VfY3B1X2NhcGFjaXR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY3B1X25vZGUs IGludCBjcHUpCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmlu ZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9s aW51eC1hcm0ta2VybmVsCg==