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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7849AC197A0 for ; Thu, 16 Nov 2023 06:30:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229900AbjKPGaI (ORCPT ); Thu, 16 Nov 2023 01:30:08 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34642 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229749AbjKPGaH (ORCPT ); Thu, 16 Nov 2023 01:30:07 -0500 Received: from mail-qv1-xf2e.google.com (mail-qv1-xf2e.google.com [IPv6:2607:f8b0:4864:20::f2e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6702D127 for ; Wed, 15 Nov 2023 22:30:03 -0800 (PST) Received: by mail-qv1-xf2e.google.com with SMTP id 6a1803df08f44-66cfd874520so2412596d6.2 for ; Wed, 15 Nov 2023 22:30:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1700116202; x=1700721002; 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=PB/tb7x/wwBfMXKFlAwdEXt9fJqb2hzUXhb3693FMFI=; b=pM70wgon19wcKb2jRCMBD6WKF4W4YezlxwnqWKgKbq36CTXgbzotfjlsyDcYK/tC6o M8JSRRdCTO6W90KL4Rnpuh1Yb0ja6wLMr+dZjeo+k4EjLiE7K/fJyhGCfqq/A1JoD1nL aG8beuDtlDLyEJBwbmd1q1hUzt67ALCkAt/XBpAGRJ39ft05utlZOEailKOH5CCg+A6l SPLUIwhM58jX724aRkVMsdlUf0FPzZUvfMTto1OrGtgRIIDqjBTK5e6lp6kpXVOCym5D fdPWv4Ot13PymrC/a/jjfyNn/D0IM6IUWbslGE/bBooJ1ADFNGVzDfWL0BJelY/SnKbT +JAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700116202; x=1700721002; 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=PB/tb7x/wwBfMXKFlAwdEXt9fJqb2hzUXhb3693FMFI=; b=CFSc3Mh19U7lE5bm22DQmywG/q2UfTy1LvX793RGm+edDntRb5iY7jPBwy6wv6foYU DOaHvOPJ8VJjJ7RL4XaWtjQvhpk6Sr8flVFDeP+fE9WyhWG7pKbOiA3NW8ARdTFlFOdd HWIzm1fT51CuvhLzsOvnK3CmnTh3coyFFQ1GnSCu2NF+d+CTC5lFC7DLYKKkMfokWFJg wr4u4DKddiMZHEEJKtVR0nv3XyZPe1RcfX9EcR2Srd+1bQa8/UwNGvu1+jLxy7ptoQmo Zg3vL6mu3QX/w1zuWRmIiHyG3axVoRDCyMXUK2sBGj89RWzenFtzNea38K38o3H0z/4B rYOw== X-Gm-Message-State: AOJu0YwmbNTByyKwCmGJbRAhGo2V7NatDh/5yRu9EZdP6ie1A6Swhup1 hOdwM0L5wPhvRH3RXqUWGcL7 X-Google-Smtp-Source: AGHT+IEt8cECYm2VNPS0pn16zEsLLLHhSV0cG4YvuKehpByAru6JTwlYnq7ZubFBquXWqDAvW7VJjA== X-Received: by 2002:a0c:ec50:0:b0:66d:544d:8e68 with SMTP id n16-20020a0cec50000000b0066d544d8e68mr8276026qvq.3.1700116202454; Wed, 15 Nov 2023 22:30:02 -0800 (PST) Received: from thinkpad ([117.207.24.140]) by smtp.gmail.com with ESMTPSA id u3-20020ad44983000000b00677ad5a91e1sm1149979qvx.53.2023.11.15.22.29.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Nov 2023 22:30:01 -0800 (PST) Date: Thu, 16 Nov 2023 11:59:51 +0530 From: 'Manivannan Sadhasivam' To: Marek Szyprowski Cc: Shradha Todi , jingoohan1@gmail.com, lpieralisi@kernel.org, kw@linux.com, robh@kernel.org, bhelgaas@google.com, krzysztof.kozlowski@linaro.org, alim.akhtar@samsung.com, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org, pankaj.dubey@samsung.com Subject: Re: [PATCH] PCI: exynos: Adapt to clk_bulk_* APIs Message-ID: <20231116062951.GD3443@thinkpad> References: <20231009062216.6729-1-shradha.t@samsung.com> <20231027134849.GA23716@thinkpad> <000b01da178e$a43088d0$ec919a70$@samsung.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org On Wed, Nov 15, 2023 at 10:06:19AM +0100, Marek Szyprowski wrote: > Hi! > > On 15.11.2023 07:40, Shradha Todi wrote: > >> -----Original Message----- > >> From: Manivannan Sadhasivam [mailto:manivannan.sadhasivam@linaro.org] > >> Sent: 27 October 2023 19:19 > >> To: Shradha Todi > >> Cc:jingoohan1@gmail.com;lpieralisi@kernel.org;kw@linux.com; > >> robh@kernel.org;bhelgaas@google.com;krzysztof.kozlowski@linaro.org; > >> alim.akhtar@samsung.com;linux-pci@vger.kernel.org; linux-arm- > >> kernel@lists.infradead.org;linux-samsung-soc@vger.kernel.org; linux- > >> kernel@vger.kernel.org;pankaj.dubey@samsung.com > >> Subject: Re: [PATCH] PCI: exynos: Adapt to clk_bulk_* APIs > >> > >> On Mon, Oct 09, 2023 at 11:52:16AM +0530, Shradha Todi wrote: > >>> There is no need to hardcode the clock info in the driver as driver > >>> can rely on the devicetree to supply the clocks required for the > >>> functioning of the peripheral. Get rid of the static clock info and > >>> obtain the platform supplied clocks. The total number of clocks > >>> supplied is obtained using the devm_clk_bulk_get_all() API and used > >>> for the rest of the clk_bulk_* APIs. > >>> > >>> Signed-off-by: Shradha Todi > >>> --- > >>> drivers/pci/controller/dwc/pci-exynos.c | 46 > >>> ++++++------------------- > >>> 1 file changed, 11 insertions(+), 35 deletions(-) > >>> > >>> diff --git a/drivers/pci/controller/dwc/pci-exynos.c > >>> b/drivers/pci/controller/dwc/pci-exynos.c > >>> index 9e42cfcd99cc..023cf41fccd7 100644 > >>> --- a/drivers/pci/controller/dwc/pci-exynos.c > >>> +++ b/drivers/pci/controller/dwc/pci-exynos.c > >>> @@ -54,8 +54,8 @@ > >>> struct exynos_pcie { > >>> struct dw_pcie pci; > >>> void __iomem *elbi_base; > >>> - struct clk *clk; > >>> - struct clk *bus_clk; > >>> + struct clk_bulk_data *clks; > >>> + int clk_cnt; > >>> struct phy *phy; > >>> struct regulator_bulk_data supplies[2]; > >>> }; > >>> @@ -65,30 +65,18 @@ static int exynos_pcie_init_clk_resources(struct > >> exynos_pcie *ep) > >>> struct device *dev = ep->pci.dev; > >>> int ret; > >>> > >>> - ret = clk_prepare_enable(ep->clk); > >>> - if (ret) { > >>> - dev_err(dev, "cannot enable pcie rc clock"); > >>> + ret = devm_clk_bulk_get_all(dev, &ep->clks); > >>> + if (ret < 0) > >> Please use !(ret) here and below to be consistent with the driver. > >> > > In this case, only negative values indicate failure. Hence we cannot use (!ret) here. > > > >>> return ret; > >>> - } > >>> > >>> - ret = clk_prepare_enable(ep->bus_clk); > >>> - if (ret) { > >>> - dev_err(dev, "cannot enable pcie bus clock"); > >>> - goto err_bus_clk; > >>> - } > >>> + ep->clk_cnt = ret; > >> Since clk_cnt is "int", you can just use it directly instead of "ret". > >> > > Thanks for this suggestion! Will take care in v2. > > > >>> - return 0; > >>> - > >>> -err_bus_clk: > >>> - clk_disable_unprepare(ep->clk); > >>> - > >>> - return ret; > >>> + return clk_bulk_prepare_enable(ep->clk_cnt, ep->clks); > >>> } > >>> > >>> static void exynos_pcie_deinit_clk_resources(struct exynos_pcie *ep) > >>> { > >>> - clk_disable_unprepare(ep->bus_clk); > >>> - clk_disable_unprepare(ep->clk); > >>> + clk_bulk_disable_unprepare(ep->clk_cnt, ep->clks); > >>> } > >>> > >>> static void exynos_pcie_writel(void __iomem *base, u32 val, u32 reg) > >>> @@ -332,17 +320,9 @@ static int exynos_pcie_probe(struct > >> platform_device *pdev) > >>> if (IS_ERR(ep->elbi_base)) > >>> return PTR_ERR(ep->elbi_base); > >>> > >>> - ep->clk = devm_clk_get(dev, "pcie"); > >>> - if (IS_ERR(ep->clk)) { > >>> - dev_err(dev, "Failed to get pcie rc clock\n"); > >>> - return PTR_ERR(ep->clk); > >>> - } > >>> - > >>> - ep->bus_clk = devm_clk_get(dev, "pcie_bus"); > >>> - if (IS_ERR(ep->bus_clk)) { > >>> - dev_err(dev, "Failed to get pcie bus clock\n"); > >>> - return PTR_ERR(ep->bus_clk); > >>> - } > >>> + ret = exynos_pcie_init_clk_resources(ep); > >>> + if (ret < 0) > >>> + return ret; > >>> > >>> ep->supplies[0].supply = "vdd18"; > >>> ep->supplies[1].supply = "vdd10"; > >>> @@ -351,10 +331,6 @@ static int exynos_pcie_probe(struct > >> platform_device *pdev) > >>> if (ret) > >>> return ret; > >>> > >>> - ret = exynos_pcie_init_clk_resources(ep); > >>> - if (ret) > >>> - return ret; > >>> - > >>> ret = regulator_bulk_enable(ARRAY_SIZE(ep->supplies), ep- > >>> supplies); > >>> if (ret) > >> You need to disable_unprepare() clocks in error path here and above. > >> > > Thanks for pointing out! Will take care in v2. > > > Maybe it would make sense to add devm_clk_bulk_get_all_enabled() to > clock framework, similar to the existing devm_clk_get_enabled()? > > It is really a common pattern to get all clocks and enable them for the > time of driver operation. > Right. Someone may argue that the users would need to check the number of clocks returned by the devm_clk_bulk_get_all() API, before enabling them. But I don't think the drivers should check those values as they need to rely on the firmware (unless accessing the clocks manually later). Even for those cases, the individual APIs can be used. So IMO it is worth to give it a shot. - Mani > Best regards > -- > Marek Szyprowski, PhD > Samsung R&D Institute Poland -- மணிவண்ணன் சதாசிவம் 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 3B0EDC197A0 for ; Thu, 16 Nov 2023 06:30:52 +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=ylA6mKgfq4BY4R26cgTB9P4X6QiGvd41W0iy4K71G4w=; b=qB9p4Z5/B+/EF8 E+uX10FU+esfl+fXxylX6vnoP3AvMxxu6RHYTt5VomrRh7hkIcJ1lgt050f6HZe2N7lx0kXoxgSWm hCyhBOwb8eKF5/eoDAd0T3bepj7cG8bdSlGDgmhapNQ5R8HGZ2mNGE/G8QwqmQJe8WmYCXBIenCtO WYCG2Jn443hsk7O0swtl3O1b3wOLTZgTfbGAzZ2Fe5VMIjBES7vNEBP/lLky/IPD1OGMm+TpcCkIN dVXjYvSjU8W2AdrBoVeWznj81A+q4fmIEOwQoAJWGwQcRHgoGxc8c4tsD0u9rqf30ATmToPgIAhXm 6+Yv62RP0S/q5n+gB81w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r3VtI-002Zvg-2a; Thu, 16 Nov 2023 06:30:16 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1r3VtH-002ZvJ-2y for linux-arm-kernel@bombadil.infradead.org; Thu, 16 Nov 2023 06:30:16 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=In-Reply-To:Content-Transfer-Encoding: Content-Type:MIME-Version:References:Message-ID:Subject:Cc:To:From:Date: Sender:Reply-To:Content-ID:Content-Description; bh=PB/tb7x/wwBfMXKFlAwdEXt9fJqb2hzUXhb3693FMFI=; b=AWhs+4Tszckg38mH382f2mkoxA yAoC+HBgCyhSC67lIJOVvgQrWMBfCQbj/+s+1Pvwq7ZUKNv5EXFHxAf+qZEstC1i9TvA365Nz1LEa xNyj9WAeQTTqxhfX2FKbSd+0SEpUso5jNeClXpVAsK3tjVFdIObXZyy1pkWgTCGFkHa6MTTFIattK pL5uQvsLUe09MaaN7Uing7+dywsrB17QLaGgaPWx3wfJBApMWHUMLShNZyO2hlqFE1bccFGYItdsC Nsn5pQgcGJBAQuh7f8czw4QBPBXYOHSwpzz6QFosed8LGeaTdlppFyIio6azZZXXE29tR6Bp/J+bf Fdir6hvQ==; Received: from mail-qk1-x734.google.com ([2607:f8b0:4864:20::734]) by desiato.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1r3VtB-005Kh2-0I for linux-arm-kernel@lists.infradead.org; Thu, 16 Nov 2023 06:30:14 +0000 Received: by mail-qk1-x734.google.com with SMTP id af79cd13be357-778a47bc09aso24859785a.3 for ; Wed, 15 Nov 2023 22:30:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1700116202; x=1700721002; 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=PB/tb7x/wwBfMXKFlAwdEXt9fJqb2hzUXhb3693FMFI=; b=ZapUb2VTlzrAJ0JdlLS+ey2tL49sDVjvS0Cu91MyX5OmJh5Yc7cDgDUmFKDETiBj2X QsnNVHJmA488zriWkKeDZIqH3L/tWvm3hiQUNXjxurWxk6vm7ovvk+r6ALphm7nxOeem Mt/61EWgKv2TzbIBfP4sovNQy4hwtoNZE6Q+DNZRBUGNZmrxi9jYIWaP+i58E8mxPOLp bv5mnBoOsWY2Omu5/v3Kr2JrBPFE/ljDd0r8vlkhKoVJrLZMz9bvYL/y/7jl56KIXt1E w7eHzuMWs0B6dQYL5JCxFOLZEBCNF4BOew9GtNt3Vni1qW0H2QMEVwnaT92hCVou9oD2 ZAYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700116202; x=1700721002; 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=PB/tb7x/wwBfMXKFlAwdEXt9fJqb2hzUXhb3693FMFI=; b=PWLxm803ZwvQEhMqsVkE/7rZKSTz1aAw4p97BcQxGyyY4oI71mEu61+Inu5qBFcjPn Fxd+bzi05XpbpKSqVmyE7B3YJOyLDfCEldwCNb2Ewhb+ek2eEUghadyxCd4wGnu+723s SnNrTda1RPqcpUNjIaABfupHXoNrXd0e3hIoeV48IXv1ct9tJZ3Kby7me1DtqUAzMhOk Gdj/Foft/eyE20t33uPMqSGjfjR5BgatntIprqvsH9+NtQxmnhHvKWRI53Vhkdqc5OCX etLoiEc5KHVElq+dLpW9prilCS0dkXfX+07LfQW9od9zIWy/GRYMLCEiFGb+WPywHYVh XOBw== X-Gm-Message-State: AOJu0YzpnaiASloFN8Q4FyozHCTE+ehtOMX3DTZav6PLEs5J65wmd5t6 H4+utcPjwVBW7Ni2kR1UAdxi X-Google-Smtp-Source: AGHT+IEt8cECYm2VNPS0pn16zEsLLLHhSV0cG4YvuKehpByAru6JTwlYnq7ZubFBquXWqDAvW7VJjA== X-Received: by 2002:a0c:ec50:0:b0:66d:544d:8e68 with SMTP id n16-20020a0cec50000000b0066d544d8e68mr8276026qvq.3.1700116202454; Wed, 15 Nov 2023 22:30:02 -0800 (PST) Received: from thinkpad ([117.207.24.140]) by smtp.gmail.com with ESMTPSA id u3-20020ad44983000000b00677ad5a91e1sm1149979qvx.53.2023.11.15.22.29.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Nov 2023 22:30:01 -0800 (PST) Date: Thu, 16 Nov 2023 11:59:51 +0530 From: 'Manivannan Sadhasivam' To: Marek Szyprowski Cc: Shradha Todi , jingoohan1@gmail.com, lpieralisi@kernel.org, kw@linux.com, robh@kernel.org, bhelgaas@google.com, krzysztof.kozlowski@linaro.org, alim.akhtar@samsung.com, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org, pankaj.dubey@samsung.com Subject: Re: [PATCH] PCI: exynos: Adapt to clk_bulk_* APIs Message-ID: <20231116062951.GD3443@thinkpad> References: <20231009062216.6729-1-shradha.t@samsung.com> <20231027134849.GA23716@thinkpad> <000b01da178e$a43088d0$ec919a70$@samsung.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231116_063009_484110_49367B3E X-CRM114-Status: GOOD ( 31.98 ) 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 T24gV2VkLCBOb3YgMTUsIDIwMjMgYXQgMTA6MDY6MTlBTSArMDEwMCwgTWFyZWsgU3p5cHJvd3Nr aSB3cm90ZToKPiBIaSEKPiAKPiBPbiAxNS4xMS4yMDIzIDA3OjQwLCBTaHJhZGhhIFRvZGkgd3Jv dGU6Cj4gPj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KPiA+PiBGcm9tOiBNYW5pdmFubmFu IFNhZGhhc2l2YW0gW21haWx0bzptYW5pdmFubmFuLnNhZGhhc2l2YW1AbGluYXJvLm9yZ10KPiA+ PiBTZW50OiAyNyBPY3RvYmVyIDIwMjMgMTk6MTkKPiA+PiBUbzogU2hyYWRoYSBUb2RpPHNocmFk aGEudEBzYW1zdW5nLmNvbT4KPiA+PiBDYzpqaW5nb29oYW4xQGdtYWlsLmNvbTtscGllcmFsaXNp QGtlcm5lbC5vcmc7a3dAbGludXguY29tOwo+ID4+IHJvYmhAa2VybmVsLm9yZztiaGVsZ2Fhc0Bn b29nbGUuY29tO2tyenlzenRvZi5rb3psb3dza2lAbGluYXJvLm9yZzsKPiA+PiBhbGltLmFraHRh ckBzYW1zdW5nLmNvbTtsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnOyBsaW51eC1hcm0tCj4gPj4g a2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmc7bGludXgtc2Ftc3VuZy1zb2NAdmdlci5rZXJuZWwu b3JnOyBsaW51eC0KPiA+PiBrZXJuZWxAdmdlci5rZXJuZWwub3JnO3Bhbmthai5kdWJleUBzYW1z dW5nLmNvbQo+ID4+IFN1YmplY3Q6IFJlOiBbUEFUQ0hdIFBDSTogZXh5bm9zOiBBZGFwdCB0byBj bGtfYnVsa18qIEFQSXMKPiA+Pgo+ID4+IE9uIE1vbiwgT2N0IDA5LCAyMDIzIGF0IDExOjUyOjE2 QU0gKzA1MzAsIFNocmFkaGEgVG9kaSB3cm90ZToKPiA+Pj4gVGhlcmUgaXMgbm8gbmVlZCB0byBo YXJkY29kZSB0aGUgY2xvY2sgaW5mbyBpbiB0aGUgZHJpdmVyIGFzIGRyaXZlcgo+ID4+PiBjYW4g cmVseSBvbiB0aGUgZGV2aWNldHJlZSB0byBzdXBwbHkgdGhlIGNsb2NrcyByZXF1aXJlZCBmb3Ig dGhlCj4gPj4+IGZ1bmN0aW9uaW5nIG9mIHRoZSBwZXJpcGhlcmFsLiBHZXQgcmlkIG9mIHRoZSBz dGF0aWMgY2xvY2sgaW5mbyBhbmQKPiA+Pj4gb2J0YWluIHRoZSBwbGF0Zm9ybSBzdXBwbGllZCBj bG9ja3MuIFRoZSB0b3RhbCBudW1iZXIgb2YgY2xvY2tzCj4gPj4+IHN1cHBsaWVkIGlzIG9idGFp bmVkIHVzaW5nIHRoZSBkZXZtX2Nsa19idWxrX2dldF9hbGwoKSBBUEkgYW5kIHVzZWQKPiA+Pj4g Zm9yIHRoZSByZXN0IG9mIHRoZSBjbGtfYnVsa18qIEFQSXMuCj4gPj4+Cj4gPj4+IFNpZ25lZC1v ZmYtYnk6IFNocmFkaGEgVG9kaTxzaHJhZGhhLnRAc2Ftc3VuZy5jb20+Cj4gPj4+IC0tLQo+ID4+ PiAgIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvZHdjL3BjaS1leHlub3MuYyB8IDQ2Cj4gPj4+ICsr KysrKy0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+Pj4gICAxIGZpbGUgY2hhbmdlZCwgMTEgaW5zZXJ0 aW9ucygrKSwgMzUgZGVsZXRpb25zKC0pCj4gPj4+Cj4gPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L3BjaS9jb250cm9sbGVyL2R3Yy9wY2ktZXh5bm9zLmMKPiA+Pj4gYi9kcml2ZXJzL3BjaS9jb250 cm9sbGVyL2R3Yy9wY2ktZXh5bm9zLmMKPiA+Pj4gaW5kZXggOWU0MmNmY2Q5OWNjLi4wMjNjZjQx ZmNjZDcgMTAwNjQ0Cj4gPj4+IC0tLSBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvZHdjL3BjaS1l eHlub3MuYwo+ID4+PiArKysgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9wY2ktZXh5bm9z LmMKPiA+Pj4gQEAgLTU0LDggKzU0LDggQEAKPiA+Pj4gICBzdHJ1Y3QgZXh5bm9zX3BjaWUgewo+ ID4+PiAgIAlzdHJ1Y3QgZHdfcGNpZQkJCXBjaTsKPiA+Pj4gICAJdm9pZCBfX2lvbWVtCQkJKmVs YmlfYmFzZTsKPiA+Pj4gLQlzdHJ1Y3QgY2xrCQkJKmNsazsKPiA+Pj4gLQlzdHJ1Y3QgY2xrCQkJ KmJ1c19jbGs7Cj4gPj4+ICsJc3RydWN0IGNsa19idWxrX2RhdGEJCSpjbGtzOwo+ID4+PiArCWlu dAkJCQljbGtfY250Owo+ID4+PiAgIAlzdHJ1Y3QgcGh5CQkJKnBoeTsKPiA+Pj4gICAJc3RydWN0 IHJlZ3VsYXRvcl9idWxrX2RhdGEJc3VwcGxpZXNbMl07Cj4gPj4+ICAgfTsKPiA+Pj4gQEAgLTY1 LDMwICs2NSwxOCBAQCBzdGF0aWMgaW50IGV4eW5vc19wY2llX2luaXRfY2xrX3Jlc291cmNlcyhz dHJ1Y3QKPiA+PiBleHlub3NfcGNpZSAqZXApCj4gPj4+ICAgCXN0cnVjdCBkZXZpY2UgKmRldiA9 IGVwLT5wY2kuZGV2Owo+ID4+PiAgIAlpbnQgcmV0Owo+ID4+Pgo+ID4+PiAtCXJldCA9IGNsa19w cmVwYXJlX2VuYWJsZShlcC0+Y2xrKTsKPiA+Pj4gLQlpZiAocmV0KSB7Cj4gPj4+IC0JCWRldl9l cnIoZGV2LCAiY2Fubm90IGVuYWJsZSBwY2llIHJjIGNsb2NrIik7Cj4gPj4+ICsJcmV0ID0gZGV2 bV9jbGtfYnVsa19nZXRfYWxsKGRldiwgJmVwLT5jbGtzKTsKPiA+Pj4gKwlpZiAocmV0IDwgMCkK PiA+PiBQbGVhc2UgdXNlICEocmV0KSBoZXJlIGFuZCBiZWxvdyB0byBiZSBjb25zaXN0ZW50IHdp dGggdGhlIGRyaXZlci4KPiA+Pgo+ID4gSW4gdGhpcyBjYXNlLCBvbmx5IG5lZ2F0aXZlIHZhbHVl cyBpbmRpY2F0ZSBmYWlsdXJlLiBIZW5jZSB3ZSBjYW5ub3QgdXNlICghcmV0KSBoZXJlLgo+ID4K PiA+Pj4gICAJCXJldHVybiByZXQ7Cj4gPj4+IC0JfQo+ID4+Pgo+ID4+PiAtCXJldCA9IGNsa19w cmVwYXJlX2VuYWJsZShlcC0+YnVzX2Nsayk7Cj4gPj4+IC0JaWYgKHJldCkgewo+ID4+PiAtCQlk ZXZfZXJyKGRldiwgImNhbm5vdCBlbmFibGUgcGNpZSBidXMgY2xvY2siKTsKPiA+Pj4gLQkJZ290 byBlcnJfYnVzX2NsazsKPiA+Pj4gLQl9Cj4gPj4+ICsJZXAtPmNsa19jbnQgPSByZXQ7Cj4gPj4g U2luY2UgY2xrX2NudCBpcyAiaW50IiwgeW91IGNhbiBqdXN0IHVzZSBpdCBkaXJlY3RseSBpbnN0 ZWFkIG9mICJyZXQiLgo+ID4+Cj4gPiBUaGFua3MgZm9yIHRoaXMgc3VnZ2VzdGlvbiEgV2lsbCB0 YWtlIGNhcmUgaW4gdjIuCj4gPgo+ID4+PiAtCXJldHVybiAwOwo+ID4+PiAtCj4gPj4+IC1lcnJf YnVzX2NsazoKPiA+Pj4gLQljbGtfZGlzYWJsZV91bnByZXBhcmUoZXAtPmNsayk7Cj4gPj4+IC0K PiA+Pj4gLQlyZXR1cm4gcmV0Owo+ID4+PiArCXJldHVybiBjbGtfYnVsa19wcmVwYXJlX2VuYWJs ZShlcC0+Y2xrX2NudCwgZXAtPmNsa3MpOwo+ID4+PiAgIH0KPiA+Pj4KPiA+Pj4gICBzdGF0aWMg dm9pZCBleHlub3NfcGNpZV9kZWluaXRfY2xrX3Jlc291cmNlcyhzdHJ1Y3QgZXh5bm9zX3BjaWUg KmVwKQo+ID4+PiB7Cj4gPj4+IC0JY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGVwLT5idXNfY2xrKTsK PiA+Pj4gLQljbGtfZGlzYWJsZV91bnByZXBhcmUoZXAtPmNsayk7Cj4gPj4+ICsJY2xrX2J1bGtf ZGlzYWJsZV91bnByZXBhcmUoZXAtPmNsa19jbnQsIGVwLT5jbGtzKTsKPiA+Pj4gICB9Cj4gPj4+ Cj4gPj4+ICAgc3RhdGljIHZvaWQgZXh5bm9zX3BjaWVfd3JpdGVsKHZvaWQgX19pb21lbSAqYmFz ZSwgdTMyIHZhbCwgdTMyIHJlZykKPiA+Pj4gQEAgLTMzMiwxNyArMzIwLDkgQEAgc3RhdGljIGlu dCBleHlub3NfcGNpZV9wcm9iZShzdHJ1Y3QKPiA+PiBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4g Pj4+ICAgCWlmIChJU19FUlIoZXAtPmVsYmlfYmFzZSkpCj4gPj4+ICAgCQlyZXR1cm4gUFRSX0VS UihlcC0+ZWxiaV9iYXNlKTsKPiA+Pj4KPiA+Pj4gLQllcC0+Y2xrID0gZGV2bV9jbGtfZ2V0KGRl diwgInBjaWUiKTsKPiA+Pj4gLQlpZiAoSVNfRVJSKGVwLT5jbGspKSB7Cj4gPj4+IC0JCWRldl9l cnIoZGV2LCAiRmFpbGVkIHRvIGdldCBwY2llIHJjIGNsb2NrXG4iKTsKPiA+Pj4gLQkJcmV0dXJu IFBUUl9FUlIoZXAtPmNsayk7Cj4gPj4+IC0JfQo+ID4+PiAtCj4gPj4+IC0JZXAtPmJ1c19jbGsg PSBkZXZtX2Nsa19nZXQoZGV2LCAicGNpZV9idXMiKTsKPiA+Pj4gLQlpZiAoSVNfRVJSKGVwLT5i dXNfY2xrKSkgewo+ID4+PiAtCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgcGNpZSBidXMg Y2xvY2tcbiIpOwo+ID4+PiAtCQlyZXR1cm4gUFRSX0VSUihlcC0+YnVzX2Nsayk7Cj4gPj4+IC0J fQo+ID4+PiArCXJldCA9IGV4eW5vc19wY2llX2luaXRfY2xrX3Jlc291cmNlcyhlcCk7Cj4gPj4+ ICsJaWYgKHJldCA8IDApCj4gPj4+ICsJCXJldHVybiByZXQ7Cj4gPj4+Cj4gPj4+ICAgCWVwLT5z dXBwbGllc1swXS5zdXBwbHkgPSAidmRkMTgiOwo+ID4+PiAgIAllcC0+c3VwcGxpZXNbMV0uc3Vw cGx5ID0gInZkZDEwIjsKPiA+Pj4gQEAgLTM1MSwxMCArMzMxLDYgQEAgc3RhdGljIGludCBleHlu b3NfcGNpZV9wcm9iZShzdHJ1Y3QKPiA+PiBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gPj4+ICAg CWlmIChyZXQpCj4gPj4+ICAgCQlyZXR1cm4gcmV0Owo+ID4+Pgo+ID4+PiAtCXJldCA9IGV4eW5v c19wY2llX2luaXRfY2xrX3Jlc291cmNlcyhlcCk7Cj4gPj4+IC0JaWYgKHJldCkKPiA+Pj4gLQkJ cmV0dXJuIHJldDsKPiA+Pj4gLQo+ID4+PiAgIAlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUo QVJSQVlfU0laRShlcC0+c3VwcGxpZXMpLCBlcC0KPiA+Pj4gc3VwcGxpZXMpOwo+ID4+PiAgIAlp ZiAocmV0KQo+ID4+IFlvdSBuZWVkIHRvIGRpc2FibGVfdW5wcmVwYXJlKCkgY2xvY2tzIGluIGVy cm9yIHBhdGggaGVyZSBhbmQgYWJvdmUuCj4gPj4KPiA+IFRoYW5rcyBmb3IgcG9pbnRpbmcgb3V0 ISBXaWxsIHRha2UgY2FyZSBpbiB2Mi4KPiAKPiAKPiBNYXliZSBpdCB3b3VsZCBtYWtlIHNlbnNl IHRvIGFkZCBkZXZtX2Nsa19idWxrX2dldF9hbGxfZW5hYmxlZCgpIHRvIAo+IGNsb2NrIGZyYW1l d29yaywgc2ltaWxhciB0byB0aGUgZXhpc3RpbmcgZGV2bV9jbGtfZ2V0X2VuYWJsZWQoKT8KPiAK PiBJdCBpcyByZWFsbHkgYSBjb21tb24gcGF0dGVybiB0byBnZXQgYWxsIGNsb2NrcyBhbmQgZW5h YmxlIHRoZW0gZm9yIHRoZSAKPiB0aW1lIG9mIGRyaXZlciBvcGVyYXRpb24uCj4gCgpSaWdodC4g U29tZW9uZSBtYXkgYXJndWUgdGhhdCB0aGUgdXNlcnMgd291bGQgbmVlZCB0byBjaGVjayB0aGUg bnVtYmVyIG9mIGNsb2NrcwpyZXR1cm5lZCBieSB0aGUgZGV2bV9jbGtfYnVsa19nZXRfYWxsKCkg QVBJLCBiZWZvcmUgZW5hYmxpbmcgdGhlbS4gQnV0IEkgZG9uJ3QKdGhpbmsgdGhlIGRyaXZlcnMg c2hvdWxkIGNoZWNrIHRob3NlIHZhbHVlcyBhcyB0aGV5IG5lZWQgdG8gcmVseSBvbiB0aGUKZmly bXdhcmUgKHVubGVzcyBhY2Nlc3NpbmcgdGhlIGNsb2NrcyBtYW51YWxseSBsYXRlcikuIEV2ZW4g Zm9yIHRob3NlIGNhc2VzLCB0aGUKaW5kaXZpZHVhbCBBUElzIGNhbiBiZSB1c2VkLgoKU28gSU1P IGl0IGlzIHdvcnRoIHRvIGdpdmUgaXQgYSBzaG90LgoKLSBNYW5pCgo+IEJlc3QgcmVnYXJkcwo+ IC0tIAo+IE1hcmVrIFN6eXByb3dza2ksIFBoRAo+IFNhbXN1bmcgUiZEIEluc3RpdHV0ZSBQb2xh bmQKCi0tIArgrq7grqPgrr/grrXgrqPgr43grqPgrqngr40g4K6a4K6k4K6+4K6a4K6/4K614K6u 4K+NCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51 eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVh ZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1h cm0ta2VybmVsCg==