From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pg1-f179.google.com (mail-pg1-f179.google.com [209.85.215.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9A768DF69 for ; Sat, 20 Jan 2024 15:03:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.179 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705762995; cv=none; b=tMcIuEmLA3Ao8nAn5H3V5IPhEwTtxRLSaUgLcVkaOKEauqVftqszP6xaI+sY3EW185Sez2thHnOBRMvIMcDgGrJRV0iXKnTF5KayX0NhbSFGtsCyknVjfVrYeULcdTaf/DNbtQqzIxyv1Iz5pmRMvXNQ0qZUiHCPMogbsJMtMjk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705762995; c=relaxed/simple; bh=9Nc4TyqG+r5zlvwlDzv/990T6nw9lYMWHgz1H2lzc8g=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=AzptGkg/7xkdabaF4KBGxqiDrSANMt4m2+pymVr6souGWpDBL44IIrwIlgAWvmWPGpslCPd7glCprak9RJTf+ZSxpyuH8qMfb3MgjrZOIRxQR9CAtHWNZKK2TAZ1UCSwuZFdgYhk5FXj4mXVh8Y3NrDTj9+CUGksu4V8V9Djgeo= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=k1oQCuF7; arc=none smtp.client-ip=209.85.215.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="k1oQCuF7" Received: by mail-pg1-f179.google.com with SMTP id 41be03b00d2f7-5cf2d73a183so2039975a12.1 for ; Sat, 20 Jan 2024 07:03:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1705762993; x=1706367793; darn=vger.kernel.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=aqeZN7shB1TWVe9IvpTxqZEMMVop3gcQDbpsLD1ei1I=; b=k1oQCuF7VUbfuyx/cjq3lXh/rPXIKV2bYbv8s004C/K5uVQeIK5hnOSpNqq3MBjzyz L/ort3QKMBKNVZzmCJctqOyqwJuP5j0tGJvJaVi5l7IPrS/gDYc5o5/4ETSQbuwwKN/x a99rcM02DhOYX/Cf0tJ845v8j1nxMyUlJmhn008oMJVvlRbcEhrHiDeq8afn54PjfLfk MSOt+J4yakeBavo9yUPGIeGU+TxjsOJKUVdA7dAb+0rw1oyUp3R05jZBmNtvznnJpjpU q/LMhF7eNqaPJASUVRUFT16BYxPz+F7JzE6WV1OWnV20vQcNgdnljDiIfzonK21W2YuS waXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705762993; x=1706367793; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=aqeZN7shB1TWVe9IvpTxqZEMMVop3gcQDbpsLD1ei1I=; b=nJaZ8v70APC85kWWmbcjcRCxAInHDwhNj6fcWQSiM1NtumkYAQK8sPixJEql1LAMCV mLWPZkKoC79DFKbtdkPvC6DMddcAYuseebyfpcBJBq9L9z1E6GCKnb8c10nAIHDhAsHA 1bHJg7xxovRuuWMv9jqxGsGl5EBuZTFpQMnVjcaBAP0OWaWWcnPnQFP2agwuC1Ecv1qx U0mN5mokqerCVFyfqaO/uExVGUi7LbrpqPQQG7rJNulm31Igo9dI9NrC02zS5gJnWs+n 9sbO6EYnI7iDnProa9HwTuKsZigxVgBfW2us8knHZ2QdSVGsDJlpXdNZWPzvfIRPtmhm zHyA== X-Gm-Message-State: AOJu0YzKuZTDniSeMCK5lQ23GF/DHwHUXlCSuXSoSuLDBfIN3GbeVKKi aGMERdrmQAP/IYqrqtipTPm0f1PLsvEMt9AI9XOz3oc0xwX8fiPfBGK4o/R6/gxOt6kpvcTZpyA = X-Google-Smtp-Source: AGHT+IF9elycQzObJiXmLQq+7kgsfP/837fqR12nEVd9AChjMfbf9gdfFJ76v0f/vydjEopzP9fHtQ== X-Received: by 2002:a17:90a:c001:b0:28e:8e78:8ba6 with SMTP id p1-20020a17090ac00100b0028e8e788ba6mr1979052pjt.43.1705762992906; Sat, 20 Jan 2024 07:03:12 -0800 (PST) Received: from thinkpad ([117.202.189.10]) by smtp.gmail.com with ESMTPSA id sl7-20020a17090b2e0700b0028b6759d8c1sm6219778pjb.29.2024.01.20.07.03.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Jan 2024 07:03:12 -0800 (PST) Date: Sat, 20 Jan 2024 20:33:03 +0530 From: Manivannan Sadhasivam To: Shradha Todi Cc: linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, mturquette@baylibre.com, sboyd@kernel.org, jingoohan1@gmail.com, lpieralisi@kernel.org, kw@linux.com, robh@kernel.org, bhelgaas@google.com, krzysztof.kozlowski@linaro.org, alim.akhtar@samsung.com, linux@armlinux.org.uk, m.szyprowski@samsung.com Subject: Re: [PATCH v3 1/2] clk: Provide managed helper to get and enable bulk clocks Message-ID: <20240120150303.GB5405@thinkpad> References: <20240110110115.56270-1-shradha.t@samsung.com> <20240110110115.56270-2-shradha.t@samsung.com> Precedence: bulk X-Mailing-List: linux-clk@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20240110110115.56270-2-shradha.t@samsung.com> On Wed, Jan 10, 2024 at 04:31:14PM +0530, Shradha Todi wrote: > Provide a managed devm_clk_bulk* wrapper to get and enable all > bulk clocks in order to simplify drivers that keeps all clocks > enabled for the time of driver operation. > > Suggested-by: Marek Szyprowski > Signed-off-by: Shradha Todi > --- > drivers/clk/clk-devres.c | 41 ++++++++++++++++++++++++++++++++++++++++ > include/linux/clk.h | 25 ++++++++++++++++++++++++ > 2 files changed, 66 insertions(+) > > diff --git a/drivers/clk/clk-devres.c b/drivers/clk/clk-devres.c > index 4fb4fd4b06bd..05b0ff4bc1d4 100644 > --- a/drivers/clk/clk-devres.c > +++ b/drivers/clk/clk-devres.c > @@ -102,6 +102,7 @@ EXPORT_SYMBOL_GPL(devm_clk_get_optional_enabled); > struct clk_bulk_devres { > struct clk_bulk_data *clks; > int num_clks; > + void (*exit)(int num_clks, const struct clk_bulk_data *clks); > }; > > static void devm_clk_bulk_release(struct device *dev, void *res) > @@ -182,6 +183,46 @@ int __must_check devm_clk_bulk_get_all(struct device *dev, > } > EXPORT_SYMBOL_GPL(devm_clk_bulk_get_all); > > +static void devm_clk_bulk_release_all_enabled(struct device *dev, void *res) > +{ > + struct clk_bulk_devres *devres = res; > + > + if (devres->exit) > + devres->exit(devres->num_clks, devres->clks); > + > + clk_bulk_put_all(devres->num_clks, devres->clks); > +} > + > +int __must_check devm_clk_bulk_get_all_enabled(struct device *dev, > + struct clk_bulk_data **clks, int *num_clks) What is the user supposed to do with "num_clks" when you are already handling the enable part? > +{ > + struct clk_bulk_devres *devres; > + int ret; > + > + devres = devres_alloc(devm_clk_bulk_release_all_enabled, > + sizeof(*devres), GFP_KERNEL); > + if (!devres) > + return -ENOMEM; > + > + ret = clk_bulk_get_all(dev, &devres->clks); > + if (ret > 0) { > + *clks = devres->clks; > + devres->num_clks = ret; > + *num_clks = ret; > + devres_add(dev, devres); If you move the statements inside this condition to the end of this function, you could get rid of the exit() callback and directly use clk_bulk_disable_unprepare() in devm_clk_bulk_release_all_enabled(). > + } else { > + devres_free(devres); > + return ret; > + } > + > + ret = clk_bulk_prepare_enable(devres->num_clks, *clks); > + if (!ret) > + devres->exit = clk_bulk_disable_unprepare; Here you can just do clk_bulk_put_all() and devres_free() directly because you know that the driver won't proceed after this error. - Mani > + > + return ret; > +} > +EXPORT_SYMBOL_GPL(devm_clk_bulk_get_all_enabled); > + > static int devm_clk_match(struct device *dev, void *res, void *data) > { > struct clk **c = res; > diff --git a/include/linux/clk.h b/include/linux/clk.h > index 1ef013324237..bf3e9bee5754 100644 > --- a/include/linux/clk.h > +++ b/include/linux/clk.h > @@ -438,6 +438,24 @@ int __must_check devm_clk_bulk_get_optional(struct device *dev, int num_clks, > int __must_check devm_clk_bulk_get_all(struct device *dev, > struct clk_bulk_data **clks); > > +/** > + * devm_clk_bulk_get_all_enabled - managed get multiple clk consumers and > + * enable all clk > + * @dev: device for clock "consumer" > + * @clks: pointer to the clk_bulk_data table of consumer > + * @num_clks: out parameter to store the number of clk_bulk_data > + * > + * Returns success (0) or negative errno. > + * > + * This helper function allows drivers to get several clk > + * consumers and enable all of them in one operation with management. > + * The clks will automatically be disabled and freed when the device > + * is unbound. > + */ > + > +int __must_check devm_clk_bulk_get_all_enabled(struct device *dev, > + struct clk_bulk_data **clks, int *num_clks); > + > /** > * devm_clk_get - lookup and obtain a managed reference to a clock producer. > * @dev: device for clock "consumer" > @@ -960,6 +978,13 @@ static inline int __must_check devm_clk_bulk_get_all(struct device *dev, > return 0; > } > > +static inline int __must_check devm_clk_bulk_get_all_enabled(struct device *dev, > + struct clk_bulk_data **clks, int *num_clks) > +{ > + > + return 0; > +} > + > static inline struct clk *devm_get_clk_from_child(struct device *dev, > struct device_node *np, const char *con_id) > { > -- > 2.17.1 > -- மணிவண்ணன் சதாசிவம் 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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id 2DC28C47258 for ; Sat, 20 Jan 2024 15:03:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc: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=scURcjqcOoJ/Z22z9VPc/toB2CY+rGV9h2VaEA61/vk=; b=Tt2uxRmjA3tAEJ TDWQG9sJBdNCkF78CEP/YyZEKtQIgwPYbois7sP7vMPXW4ZJoIMLbsm2yYB77XI7idHnCHZSaA8l+ /0rvO0C9+nVqpJ86rP/unAMA2lQ/t3vtTy67IscGIL1YrrVuTFm5WRX6NU8xXUdWyj0uHcCM1ADUX KfrYs/xFDjezq2TZI0EcsBWzxaj/uBlWmK2GrE7q3fSLsPRkE+ap1ZQ5k2I+ds+zB/dihRQibshnd 8/9yGSKz80bvEy69SuHTyC1PB+jLLBypFWP8omKKV5k+UShAYdqYoMXr6bT4Iq95zC8ewDMcnR7fz pg/BFfHPbNqzZstR0iHA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rRCsS-0080Aa-1C; Sat, 20 Jan 2024 15:03:20 +0000 Received: from mail-pj1-x102f.google.com ([2607:f8b0:4864:20::102f]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rRCsM-0080A9-26 for linux-arm-kernel@lists.infradead.org; Sat, 20 Jan 2024 15:03:18 +0000 Received: by mail-pj1-x102f.google.com with SMTP id 98e67ed59e1d1-2906bd9f2ebso246419a91.0 for ; Sat, 20 Jan 2024 07:03:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1705762993; x=1706367793; darn=lists.infradead.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=aqeZN7shB1TWVe9IvpTxqZEMMVop3gcQDbpsLD1ei1I=; b=JLuPiS0px7sCQ/HxdusfHt9nvBMf9C9EO0thIHcEgO0X+yE5u7V5bQlR/92WXwBINa kkvcvp1SbgDK3lY+m0Bu/rByuhKF2vt9N2lfTPnZVPhp4L7GSOAwTkSpN3Kli+7RBncr 0DMlEi9lWKOGcv2QERPYtS/2hvknTn/CbiNsr3odO5SwIdUhyss0AWlbPA1WhThIdROH mR0XDHHKOMHLCdwAmteTTAdzfDWthuL+ESdXaeTqWvrA+IiT3DqVMBE8XMwH0rqAFPQh 6v6U3P8bCZUGCBEZ6eBLAgxCMBnwl/x+JcHePiKSODsB72rPTHvEA/7OdhOoVXtN3b2o 8fGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705762993; x=1706367793; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=aqeZN7shB1TWVe9IvpTxqZEMMVop3gcQDbpsLD1ei1I=; b=SZAmE7mo74PRVVSypmolT9v4EOmC3KOu/RbjrA4nyz+0rIgPUGVc2J4MuSNc+XRZhO D+kMfEpRJa/cx+Zo+hpFV5PrJWK8+SSN/NZTSgCPS4ErPuKzs9NhiEKmH/+DkHxzoXAW CC+xeto6HELfroDL+VO15Lv6jXi8F9D3s6S4jRrUc7N8txoR51A96YDUdalA9ecp3L/2 dMIGuTWOOB1S3I2FBonULBaxSQC7Rf/rboilxOKTY8WcrPGWD7lqUbfrrGD5sSqI+BCi KO1UOMjoEU/HOMipnCgfXMgxns2Q/sQ/iWbA+fhVTMubRIHtDLGuDcclkkJNHSMtYTCt wS4w== X-Gm-Message-State: AOJu0YzaX6bA9OdR0VkBfTxw29Oo71bgu9V3tmbw77trHt8L+lS64s+n lsOhDtyzTM3yy+yL7U/PAhyXZ2JiQ0RWWlJzd7SwMNLJFRgR2udutHetsOjHaw== X-Google-Smtp-Source: AGHT+IF9elycQzObJiXmLQq+7kgsfP/837fqR12nEVd9AChjMfbf9gdfFJ76v0f/vydjEopzP9fHtQ== X-Received: by 2002:a17:90a:c001:b0:28e:8e78:8ba6 with SMTP id p1-20020a17090ac00100b0028e8e788ba6mr1979052pjt.43.1705762992906; Sat, 20 Jan 2024 07:03:12 -0800 (PST) Received: from thinkpad ([117.202.189.10]) by smtp.gmail.com with ESMTPSA id sl7-20020a17090b2e0700b0028b6759d8c1sm6219778pjb.29.2024.01.20.07.03.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Jan 2024 07:03:12 -0800 (PST) Date: Sat, 20 Jan 2024 20:33:03 +0530 From: Manivannan Sadhasivam To: Shradha Todi Cc: linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, mturquette@baylibre.com, sboyd@kernel.org, jingoohan1@gmail.com, lpieralisi@kernel.org, kw@linux.com, robh@kernel.org, bhelgaas@google.com, krzysztof.kozlowski@linaro.org, alim.akhtar@samsung.com, linux@armlinux.org.uk, m.szyprowski@samsung.com Subject: Re: [PATCH v3 1/2] clk: Provide managed helper to get and enable bulk clocks Message-ID: <20240120150303.GB5405@thinkpad> References: <20240110110115.56270-1-shradha.t@samsung.com> <20240110110115.56270-2-shradha.t@samsung.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20240110110115.56270-2-shradha.t@samsung.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240120_070314_711678_A1A7A18B X-CRM114-Status: GOOD ( 27.49 ) 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 T24gV2VkLCBKYW4gMTAsIDIwMjQgYXQgMDQ6MzE6MTRQTSArMDUzMCwgU2hyYWRoYSBUb2RpIHdy b3RlOgo+IFByb3ZpZGUgYSBtYW5hZ2VkIGRldm1fY2xrX2J1bGsqIHdyYXBwZXIgdG8gZ2V0IGFu ZCBlbmFibGUgYWxsCj4gYnVsayBjbG9ja3MgaW4gb3JkZXIgdG8gc2ltcGxpZnkgZHJpdmVycyB0 aGF0IGtlZXBzIGFsbCBjbG9ja3MKPiBlbmFibGVkIGZvciB0aGUgdGltZSBvZiBkcml2ZXIgb3Bl cmF0aW9uLgo+IAo+IFN1Z2dlc3RlZC1ieTogTWFyZWsgU3p5cHJvd3NraSA8bS5zenlwcm93c2tp QHNhbXN1bmcuY29tPgo+IFNpZ25lZC1vZmYtYnk6IFNocmFkaGEgVG9kaSA8c2hyYWRoYS50QHNh bXN1bmcuY29tPgo+IC0tLQo+ICBkcml2ZXJzL2Nsay9jbGstZGV2cmVzLmMgfCA0MSArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIGluY2x1ZGUvbGludXgvY2xrLmgg ICAgICB8IDI1ICsrKysrKysrKysrKysrKysrKysrKysrKwo+ICAyIGZpbGVzIGNoYW5nZWQsIDY2 IGluc2VydGlvbnMoKykKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvY2xrLWRldnJlcy5j IGIvZHJpdmVycy9jbGsvY2xrLWRldnJlcy5jCj4gaW5kZXggNGZiNGZkNGIwNmJkLi4wNWIwZmY0 YmMxZDQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9jbGsvY2xrLWRldnJlcy5jCj4gKysrIGIvZHJp dmVycy9jbGsvY2xrLWRldnJlcy5jCj4gQEAgLTEwMiw2ICsxMDIsNyBAQCBFWFBPUlRfU1lNQk9M X0dQTChkZXZtX2Nsa19nZXRfb3B0aW9uYWxfZW5hYmxlZCk7Cj4gIHN0cnVjdCBjbGtfYnVsa19k ZXZyZXMgewo+ICAJc3RydWN0IGNsa19idWxrX2RhdGEgKmNsa3M7Cj4gIAlpbnQgbnVtX2Nsa3M7 Cj4gKwl2b2lkICgqZXhpdCkoaW50IG51bV9jbGtzLCBjb25zdCBzdHJ1Y3QgY2xrX2J1bGtfZGF0 YSAqY2xrcyk7Cj4gIH07Cj4gIAo+ICBzdGF0aWMgdm9pZCBkZXZtX2Nsa19idWxrX3JlbGVhc2Uo c3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpyZXMpCj4gQEAgLTE4Miw2ICsxODMsNDYgQEAgaW50 IF9fbXVzdF9jaGVjayBkZXZtX2Nsa19idWxrX2dldF9hbGwoc3RydWN0IGRldmljZSAqZGV2LAo+ ICB9Cj4gIEVYUE9SVF9TWU1CT0xfR1BMKGRldm1fY2xrX2J1bGtfZ2V0X2FsbCk7Cj4gIAo+ICtz dGF0aWMgdm9pZCBkZXZtX2Nsa19idWxrX3JlbGVhc2VfYWxsX2VuYWJsZWQoc3RydWN0IGRldmlj ZSAqZGV2LCB2b2lkICpyZXMpCj4gK3sKPiArCXN0cnVjdCBjbGtfYnVsa19kZXZyZXMgKmRldnJl cyA9IHJlczsKPiArCj4gKwlpZiAoZGV2cmVzLT5leGl0KQo+ICsJCWRldnJlcy0+ZXhpdChkZXZy ZXMtPm51bV9jbGtzLCBkZXZyZXMtPmNsa3MpOwo+ICsKPiArCWNsa19idWxrX3B1dF9hbGwoZGV2 cmVzLT5udW1fY2xrcywgZGV2cmVzLT5jbGtzKTsKPiArfQo+ICsKPiAraW50IF9fbXVzdF9jaGVj ayBkZXZtX2Nsa19idWxrX2dldF9hbGxfZW5hYmxlZChzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gKwkJ CQkgIHN0cnVjdCBjbGtfYnVsa19kYXRhICoqY2xrcywgaW50ICpudW1fY2xrcykKCldoYXQgaXMg dGhlIHVzZXIgc3VwcG9zZWQgdG8gZG8gd2l0aCAibnVtX2Nsa3MiIHdoZW4geW91IGFyZSBhbHJl YWR5IGhhbmRsaW5nCnRoZSBlbmFibGUgcGFydD8KCj4gK3sKPiArCXN0cnVjdCBjbGtfYnVsa19k ZXZyZXMgKmRldnJlczsKPiArCWludCByZXQ7Cj4gKwo+ICsJZGV2cmVzID0gZGV2cmVzX2FsbG9j KGRldm1fY2xrX2J1bGtfcmVsZWFzZV9hbGxfZW5hYmxlZCwKPiArCQkJICAgICAgc2l6ZW9mKCpk ZXZyZXMpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghZGV2cmVzKQo+ICsJCXJldHVybiAtRU5PTUVN Owo+ICsKPiArCXJldCA9IGNsa19idWxrX2dldF9hbGwoZGV2LCAmZGV2cmVzLT5jbGtzKTsKPiAr CWlmIChyZXQgPiAwKSB7Cj4gKwkJKmNsa3MgPSBkZXZyZXMtPmNsa3M7Cj4gKwkJZGV2cmVzLT5u dW1fY2xrcyA9IHJldDsKPiArCQkqbnVtX2Nsa3MgPSByZXQ7Cj4gKwkJZGV2cmVzX2FkZChkZXYs IGRldnJlcyk7CgpJZiB5b3UgbW92ZSB0aGUgc3RhdGVtZW50cyBpbnNpZGUgdGhpcyBjb25kaXRp b24gdG8gdGhlIGVuZCBvZiB0aGlzIGZ1bmN0aW9uLAp5b3UgY291bGQgZ2V0IHJpZCBvZiB0aGUg ZXhpdCgpIGNhbGxiYWNrIGFuZCBkaXJlY3RseSB1c2UKY2xrX2J1bGtfZGlzYWJsZV91bnByZXBh cmUoKSBpbiBkZXZtX2Nsa19idWxrX3JlbGVhc2VfYWxsX2VuYWJsZWQoKS4KCj4gKwl9IGVsc2Ug ewo+ICsJCWRldnJlc19mcmVlKGRldnJlcyk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4g KwlyZXQgPSBjbGtfYnVsa19wcmVwYXJlX2VuYWJsZShkZXZyZXMtPm51bV9jbGtzLCAqY2xrcyk7 Cj4gKwlpZiAoIXJldCkKPiArCQlkZXZyZXMtPmV4aXQgPSBjbGtfYnVsa19kaXNhYmxlX3VucHJl cGFyZTsKCkhlcmUgeW91IGNhbiBqdXN0IGRvIGNsa19idWxrX3B1dF9hbGwoKSBhbmQgZGV2cmVz X2ZyZWUoKSBkaXJlY3RseSBiZWNhdXNlIHlvdQprbm93IHRoYXQgdGhlIGRyaXZlciB3b24ndCBw cm9jZWVkIGFmdGVyIHRoaXMgZXJyb3IuCgotIE1hbmkKCj4gKwo+ICsJcmV0dXJuIHJldDsKPiAr fQo+ICtFWFBPUlRfU1lNQk9MX0dQTChkZXZtX2Nsa19idWxrX2dldF9hbGxfZW5hYmxlZCk7Cj4g Kwo+ICBzdGF0aWMgaW50IGRldm1fY2xrX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAq cmVzLCB2b2lkICpkYXRhKQo+ICB7Cj4gIAlzdHJ1Y3QgY2xrICoqYyA9IHJlczsKPiBkaWZmIC0t Z2l0IGEvaW5jbHVkZS9saW51eC9jbGsuaCBiL2luY2x1ZGUvbGludXgvY2xrLmgKPiBpbmRleCAx ZWYwMTMzMjQyMzcuLmJmM2U5YmVlNTc1NCAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2xpbnV4L2Ns ay5oCj4gKysrIGIvaW5jbHVkZS9saW51eC9jbGsuaAo+IEBAIC00MzgsNiArNDM4LDI0IEBAIGlu dCBfX211c3RfY2hlY2sgZGV2bV9jbGtfYnVsa19nZXRfb3B0aW9uYWwoc3RydWN0IGRldmljZSAq ZGV2LCBpbnQgbnVtX2Nsa3MsCj4gIGludCBfX211c3RfY2hlY2sgZGV2bV9jbGtfYnVsa19nZXRf YWxsKHN0cnVjdCBkZXZpY2UgKmRldiwKPiAgCQkJCSAgICAgICBzdHJ1Y3QgY2xrX2J1bGtfZGF0 YSAqKmNsa3MpOwo+ICAKPiArLyoqCj4gKyAqIGRldm1fY2xrX2J1bGtfZ2V0X2FsbF9lbmFibGVk IC0gbWFuYWdlZCBnZXQgbXVsdGlwbGUgY2xrIGNvbnN1bWVycyBhbmQKPiArICoJCQkJCWVuYWJs ZSBhbGwgY2xrCj4gKyAqIEBkZXY6IGRldmljZSBmb3IgY2xvY2sgImNvbnN1bWVyIgo+ICsgKiBA Y2xrczogcG9pbnRlciB0byB0aGUgY2xrX2J1bGtfZGF0YSB0YWJsZSBvZiBjb25zdW1lcgo+ICsg KiBAbnVtX2Nsa3M6IG91dCBwYXJhbWV0ZXIgdG8gc3RvcmUgdGhlIG51bWJlciBvZiBjbGtfYnVs a19kYXRhCj4gKyAqCj4gKyAqIFJldHVybnMgc3VjY2VzcyAoMCkgb3IgbmVnYXRpdmUgZXJybm8u Cj4gKyAqCj4gKyAqIFRoaXMgaGVscGVyIGZ1bmN0aW9uIGFsbG93cyBkcml2ZXJzIHRvIGdldCBz ZXZlcmFsIGNsawo+ICsgKiBjb25zdW1lcnMgYW5kIGVuYWJsZSBhbGwgb2YgdGhlbSBpbiBvbmUg b3BlcmF0aW9uIHdpdGggbWFuYWdlbWVudC4KPiArICogVGhlIGNsa3Mgd2lsbCBhdXRvbWF0aWNh bGx5IGJlIGRpc2FibGVkIGFuZCBmcmVlZCB3aGVuIHRoZSBkZXZpY2UKPiArICogaXMgdW5ib3Vu ZC4KPiArICovCj4gKwo+ICtpbnQgX19tdXN0X2NoZWNrIGRldm1fY2xrX2J1bGtfZ2V0X2FsbF9l bmFibGVkKHN0cnVjdCBkZXZpY2UgKmRldiwKPiArCQkJCXN0cnVjdCBjbGtfYnVsa19kYXRhICoq Y2xrcywgaW50ICpudW1fY2xrcyk7Cj4gKwo+ICAvKioKPiAgICogZGV2bV9jbGtfZ2V0IC0gbG9v a3VwIGFuZCBvYnRhaW4gYSBtYW5hZ2VkIHJlZmVyZW5jZSB0byBhIGNsb2NrIHByb2R1Y2VyLgo+ ICAgKiBAZGV2OiBkZXZpY2UgZm9yIGNsb2NrICJjb25zdW1lciIKPiBAQCAtOTYwLDYgKzk3OCwx MyBAQCBzdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgZGV2bV9jbGtfYnVsa19nZXRfYWxs KHN0cnVjdCBkZXZpY2UgKmRldiwKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+ICtzdGF0aWMgaW5s aW5lIGludCBfX211c3RfY2hlY2sgZGV2bV9jbGtfYnVsa19nZXRfYWxsX2VuYWJsZWQoc3RydWN0 IGRldmljZSAqZGV2LAo+ICsJCQkJc3RydWN0IGNsa19idWxrX2RhdGEgKipjbGtzLCBpbnQgKm51 bV9jbGtzKQo+ICt7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gIHN0YXRpYyBpbmxpbmUg c3RydWN0IGNsayAqZGV2bV9nZXRfY2xrX2Zyb21fY2hpbGQoc3RydWN0IGRldmljZSAqZGV2LAo+ ICAJCQkJc3RydWN0IGRldmljZV9ub2RlICpucCwgY29uc3QgY2hhciAqY29uX2lkKQo+ICB7Cj4g LS0gCj4gMi4xNy4xCj4gCgotLSAK4K6u4K6j4K6/4K614K6j4K+N4K6j4K6p4K+NIOCumuCupOCu vuCumuCuv+CuteCuruCvjQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBs aXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlz dGluZm8vbGludXgtYXJtLWtlcm5lbAo=