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=-11.2 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_2 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 209D1C433E6 for ; Fri, 28 Aug 2020 09:10:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id DD3D42100A for ; Fri, 28 Aug 2020 09:10:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728722AbgH1JK3 convert rfc822-to-8bit (ORCPT ); Fri, 28 Aug 2020 05:10:29 -0400 Received: from lhrrgout.huawei.com ([185.176.76.210]:2704 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728555AbgH1JK0 (ORCPT ); Fri, 28 Aug 2020 05:10:26 -0400 Received: from lhreml710-chm.china.huawei.com (unknown [172.18.7.108]) by Forcepoint Email with ESMTP id BD1A9668571B3AFB272E; Fri, 28 Aug 2020 10:10:19 +0100 (IST) Received: from localhost (10.52.127.106) by lhreml710-chm.china.huawei.com (10.201.108.61) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1913.5; Fri, 28 Aug 2020 10:10:19 +0100 Date: Fri, 28 Aug 2020 10:08:43 +0100 From: Jonathan Cameron To: Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= CC: Bjorn Helgaas , Lorenzo Pieralisi , Heiko Stuebner , , Shawn Lin , "Michal Simek" , , "Zhou Wang" , Robert Richter , Jonathan Chocron , Will Deacon , Subject: Re: [PATCH] PCI: Unify ECAM constants in native PCI Express drivers Message-ID: <20200828100843.0000474e@Huawei.com> In-Reply-To: <20200827224938.977757-1-kw@linux.com> References: <20200827224938.977757-1-kw@linux.com> Organization: Huawei Technologies Research and Development (UK) Ltd. X-Mailer: Claws Mail 3.17.4 (GTK+ 2.24.32; i686-w64-mingw32) MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8BIT X-Originating-IP: [10.52.127.106] X-ClientProxiedBy: lhreml725-chm.china.huawei.com (10.201.108.76) To lhreml710-chm.china.huawei.com (10.201.108.61) X-CFilter-Loop: Reflected Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org On Thu, 27 Aug 2020 22:49:38 +0000 Krzysztof Wilczyński wrote: > Unify ECAM-related constants into a single set of standard constants > defining memory address shift values for the byte-level address that can > be used when accessing the PCI Express Configuration Space, and then > move native PCI Express controller drivers to use newly introduced > definitions retiring any driver-specific ones. > > The ECAM ("Enhanced Configuration Access Mechanism") is defined by the > PCI Express specification (see PCI Base Specification, Revision 5.0, > Version 1.0, Section 7.2.2, p. 676), thus most hardware should implement > it the same way. Most of the native PCI Express controller drivers > define their ECAM-related constants, many of these could be shared, or > use open-coded values when setting the .bus_shift field of the struct > pci_ecam_ops. > > All of the newly added constants should remove ambiguity and reduce the > number of open-coded values, and also correlate more strongly with the > descriptions in the aforementioned specification (see Table 7-1 > "Enhanced Configuration Address Mapping", p. 677). > > There is no change to functionality. > > Suggested-by: Bjorn Helgaas > Signed-off-by: Krzysztof Wilczyński Seems sensible and looks good to me. Reviewed-by: Jonathan Cameron Might potentially be worth tidying up the masks as well? Or potentially drop them given I suspect that there are no cases in which the mask is actually doing anything... Jonathan > --- > drivers/pci/controller/dwc/pcie-al.c | 8 ++++---- > drivers/pci/controller/dwc/pcie-hisi.c | 4 ++-- > drivers/pci/controller/pci-host-generic.c | 2 +- > drivers/pci/controller/pci-thunder-ecam.c | 2 +- > drivers/pci/controller/pcie-rockchip.h | 7 ++++--- > drivers/pci/controller/pcie-tango.c | 2 +- > drivers/pci/controller/pcie-xilinx-nwl.c | 7 +++---- > drivers/pci/controller/pcie-xilinx.c | 9 +++------ > drivers/pci/ecam.c | 4 ++-- > include/linux/pci-ecam.h | 8 ++++++++ > 10 files changed, 29 insertions(+), 24 deletions(-) > > diff --git a/drivers/pci/controller/dwc/pcie-al.c b/drivers/pci/controller/dwc/pcie-al.c > index d57d4ee15848..57165cb0ef02 100644 > --- a/drivers/pci/controller/dwc/pcie-al.c > +++ b/drivers/pci/controller/dwc/pcie-al.c > @@ -76,7 +76,7 @@ static int al_pcie_init(struct pci_config_window *cfg) > } > > const struct pci_ecam_ops al_pcie_ops = { > - .bus_shift = 20, > + .bus_shift = PCIE_ECAM_BUS_SHIFT, > .init = al_pcie_init, > .pci_ops = { > .map_bus = al_pcie_map_bus, > @@ -138,7 +138,7 @@ struct al_pcie { > struct al_pcie_target_bus_cfg target_bus_cfg; > }; > > -#define PCIE_ECAM_DEVFN(x) (((x) & 0xff) << 12) > +#define PCIE_ECAM_DEVFN(x) (((x) & 0xff) << PCIE_ECAM_FUN_SHIFT) > > #define to_al_pcie(x) dev_get_drvdata((x)->dev) > > @@ -228,7 +228,7 @@ static void __iomem *al_pcie_conf_addr_map(struct al_pcie *pcie, > void __iomem *pci_base_addr; > > pci_base_addr = (void __iomem *)((uintptr_t)pp->va_cfg0_base + > - (busnr_ecam << 20) + > + (busnr_ecam << PCIE_ECAM_BUS_SHIFT) + > PCIE_ECAM_DEVFN(devfn)); > > if (busnr_reg != target_bus_cfg->reg_val) { > @@ -300,7 +300,7 @@ static void al_pcie_config_prepare(struct al_pcie *pcie) > > target_bus_cfg = &pcie->target_bus_cfg; > > - ecam_bus_mask = (pcie->ecam_size >> 20) - 1; > + ecam_bus_mask = (pcie->ecam_size >> PCIE_ECAM_BUS_SHIFT) - 1; > if (ecam_bus_mask > 255) { > dev_warn(pcie->dev, "ECAM window size is larger than 256MB. Cutting off at 256\n"); > ecam_bus_mask = 255; > diff --git a/drivers/pci/controller/dwc/pcie-hisi.c b/drivers/pci/controller/dwc/pcie-hisi.c > index 5ca86796d43a..b7afbf1d4bd9 100644 > --- a/drivers/pci/controller/dwc/pcie-hisi.c > +++ b/drivers/pci/controller/dwc/pcie-hisi.c > @@ -100,7 +100,7 @@ static int hisi_pcie_init(struct pci_config_window *cfg) > } > > const struct pci_ecam_ops hisi_pcie_ops = { > - .bus_shift = 20, > + .bus_shift = PCIE_ECAM_BUS_SHIFT, > .init = hisi_pcie_init, > .pci_ops = { > .map_bus = hisi_pcie_map_bus, > @@ -135,7 +135,7 @@ static int hisi_pcie_platform_init(struct pci_config_window *cfg) > } > > static const struct pci_ecam_ops hisi_pcie_platform_ops = { > - .bus_shift = 20, > + .bus_shift = PCIE_ECAM_BUS_SHIFT, > .init = hisi_pcie_platform_init, > .pci_ops = { > .map_bus = hisi_pcie_map_bus, > diff --git a/drivers/pci/controller/pci-host-generic.c b/drivers/pci/controller/pci-host-generic.c > index b51977abfdf1..c1c69b11615f 100644 > --- a/drivers/pci/controller/pci-host-generic.c > +++ b/drivers/pci/controller/pci-host-generic.c > @@ -49,7 +49,7 @@ static void __iomem *pci_dw_ecam_map_bus(struct pci_bus *bus, > } > > static const struct pci_ecam_ops pci_dw_ecam_bus_ops = { > - .bus_shift = 20, > + .bus_shift = PCIE_ECAM_BUS_SHIFT, > .pci_ops = { > .map_bus = pci_dw_ecam_map_bus, > .read = pci_generic_config_read, > diff --git a/drivers/pci/controller/pci-thunder-ecam.c b/drivers/pci/controller/pci-thunder-ecam.c > index 7e8835fee5f7..22ed7e995b39 100644 > --- a/drivers/pci/controller/pci-thunder-ecam.c > +++ b/drivers/pci/controller/pci-thunder-ecam.c > @@ -346,7 +346,7 @@ static int thunder_ecam_config_write(struct pci_bus *bus, unsigned int devfn, > } > > const struct pci_ecam_ops pci_thunder_ecam_ops = { > - .bus_shift = 20, > + .bus_shift = PCIE_ECAM_BUS_SHIFT, > .pci_ops = { > .map_bus = pci_ecam_map_bus, > .read = thunder_ecam_config_read, > diff --git a/drivers/pci/controller/pcie-rockchip.h b/drivers/pci/controller/pcie-rockchip.h > index c7d0178fc8c2..50f425e03e8f 100644 > --- a/drivers/pci/controller/pcie-rockchip.h > +++ b/drivers/pci/controller/pcie-rockchip.h > @@ -13,6 +13,7 @@ > > #include > #include > +#include > > /* > * The upper 16 bits of PCIE_CLIENT_CONFIG are a write mask for the lower 16 > @@ -178,9 +179,9 @@ > #define MIN_AXI_ADDR_BITS_PASSED 8 > #define PCIE_RC_SEND_PME_OFF 0x11960 > #define ROCKCHIP_VENDOR_ID 0x1d87 > -#define PCIE_ECAM_BUS(x) (((x) & 0xff) << 20) > -#define PCIE_ECAM_DEV(x) (((x) & 0x1f) << 15) > -#define PCIE_ECAM_FUNC(x) (((x) & 0x7) << 12) > +#define PCIE_ECAM_BUS(x) (((x) & 0xff) << PCIE_ECAM_BUS_SHIFT) > +#define PCIE_ECAM_DEV(x) (((x) & 0x1f) << PCIE_ECAM_DEV_SHIFT) > +#define PCIE_ECAM_FUNC(x) (((x) & 0x7) << PCIE_ECAM_FUN_SHIFT) > #define PCIE_ECAM_REG(x) (((x) & 0xfff) << 0) > #define PCIE_ECAM_ADDR(bus, dev, func, reg) \ > (PCIE_ECAM_BUS(bus) | PCIE_ECAM_DEV(dev) | \ > diff --git a/drivers/pci/controller/pcie-tango.c b/drivers/pci/controller/pcie-tango.c > index d093a8ce4bb1..8f0d695afbde 100644 > --- a/drivers/pci/controller/pcie-tango.c > +++ b/drivers/pci/controller/pcie-tango.c > @@ -208,7 +208,7 @@ static int smp8759_config_write(struct pci_bus *bus, unsigned int devfn, > } > > static const struct pci_ecam_ops smp8759_ecam_ops = { > - .bus_shift = 20, > + .bus_shift = PCIE_ECAM_BUS_SHIFT, > .pci_ops = { > .map_bus = pci_ecam_map_bus, > .read = smp8759_config_read, > diff --git a/drivers/pci/controller/pcie-xilinx-nwl.c b/drivers/pci/controller/pcie-xilinx-nwl.c > index f3cf7d61924f..8f628b66a0d7 100644 > --- a/drivers/pci/controller/pcie-xilinx-nwl.c > +++ b/drivers/pci/controller/pcie-xilinx-nwl.c > @@ -18,6 +18,7 @@ > #include > #include > #include > +#include > #include > #include > > @@ -124,8 +125,6 @@ > #define E_ECAM_CR_ENABLE BIT(0) > #define E_ECAM_SIZE_LOC GENMASK(20, 16) > #define E_ECAM_SIZE_SHIFT 16 > -#define ECAM_BUS_LOC_SHIFT 20 > -#define ECAM_DEV_LOC_SHIFT 12 > #define NWL_ECAM_VALUE_DEFAULT 12 > > #define CFG_DMA_REG_BAR GENMASK(2, 0) > @@ -245,8 +244,8 @@ static void __iomem *nwl_pcie_map_bus(struct pci_bus *bus, unsigned int devfn, > if (!nwl_pcie_valid_device(bus, devfn)) > return NULL; > > - relbus = (bus->number << ECAM_BUS_LOC_SHIFT) | > - (devfn << ECAM_DEV_LOC_SHIFT); > + relbus = (bus->number << PCIE_ECAM_BUS_SHIFT) | > + (devfn << PCIE_ECAM_FUN_SHIFT); > > return pcie->ecam_base + relbus + where; > } > diff --git a/drivers/pci/controller/pcie-xilinx.c b/drivers/pci/controller/pcie-xilinx.c > index 8523be61bba5..7e9fdaccd132 100644 > --- a/drivers/pci/controller/pcie-xilinx.c > +++ b/drivers/pci/controller/pcie-xilinx.c > @@ -21,6 +21,7 @@ > #include > #include > #include > +#include > #include > > #include "../pci.h" > @@ -86,10 +87,6 @@ > /* Phy Status/Control Register definitions */ > #define XILINX_PCIE_REG_PSCR_LNKUP BIT(11) > > -/* ECAM definitions */ > -#define ECAM_BUS_NUM_SHIFT 20 > -#define ECAM_DEV_NUM_SHIFT 12 > - > /* Number of MSI IRQs */ > #define XILINX_NUM_MSI_IRQS 128 > > @@ -188,8 +185,8 @@ static void __iomem *xilinx_pcie_map_bus(struct pci_bus *bus, > if (!xilinx_pcie_valid_device(bus, devfn)) > return NULL; > > - relbus = (bus->number << ECAM_BUS_NUM_SHIFT) | > - (devfn << ECAM_DEV_NUM_SHIFT); > + relbus = (bus->number << PCIE_ECAM_BUS_SHIFT) | > + (devfn << PCIE_ECAM_FUN_SHIFT); > > return port->reg_base + relbus + where; > } > diff --git a/drivers/pci/ecam.c b/drivers/pci/ecam.c > index 8f065a42fc1a..ffd010290084 100644 > --- a/drivers/pci/ecam.c > +++ b/drivers/pci/ecam.c > @@ -149,7 +149,7 @@ EXPORT_SYMBOL_GPL(pci_ecam_map_bus); > > /* ECAM ops */ > const struct pci_ecam_ops pci_generic_ecam_ops = { > - .bus_shift = 20, > + .bus_shift = PCIE_ECAM_BUS_SHIFT, > .pci_ops = { > .map_bus = pci_ecam_map_bus, > .read = pci_generic_config_read, > @@ -161,7 +161,7 @@ EXPORT_SYMBOL_GPL(pci_generic_ecam_ops); > #if defined(CONFIG_ACPI) && defined(CONFIG_PCI_QUIRKS) > /* ECAM ops for 32-bit access only (non-compliant) */ > const struct pci_ecam_ops pci_32b_ops = { > - .bus_shift = 20, > + .bus_shift = PCIE_ECAM_BUS_SHIFT, > .pci_ops = { > .map_bus = pci_ecam_map_bus, > .read = pci_generic_config_read32, > diff --git a/include/linux/pci-ecam.h b/include/linux/pci-ecam.h > index 1af5cb02ef7f..58a5d5e2e831 100644 > --- a/include/linux/pci-ecam.h > +++ b/include/linux/pci-ecam.h > @@ -9,6 +9,14 @@ > #include > #include > > +/* > + * Memory address shift values for the byte-level address that > + * can be used when accessing the PCI Express Configuration Space. > + */ > +#define PCIE_ECAM_FUN_SHIFT 12 /* Function Number */ > +#define PCIE_ECAM_DEV_SHIFT 15 /* Device Number */ > +#define PCIE_ECAM_BUS_SHIFT 20 /* Bus Number */ > + > /* > * struct to hold pci ops and bus shift of the config window > * for a PCI controller. From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.2 required=3.0 tests=BAYES_00,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_2 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 CE328C433E6 for ; Fri, 28 Aug 2020 09:10:41 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (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 7C0AF205CB for ; Fri, 28 Aug 2020 09:10:41 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="pL8YSaUA" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7C0AF205CB Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=Huawei.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: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=lJ2OApaqO6zpwJbLm87ZgoXDezHoZHdTTMC+r8G32EY=; b=pL8YSaUARZ6KqHJFCdrP+3XsS 25d25o3b/mjuZrsbVTsDL82q/PFFC91oFUTxsPDYQ/2tzBdW3g7o3ArrGWKZ8yDvbMEv4qiSgLw89 axunwek2HOlaWUMb/sqgi+dajCYwRUb/AI1uvVjF61VMYNa0GHSBJMIVv0b9sbcw2+iqTQ5fnbZBG MNLc2cMOigXatCCMlV59b0CRR4jGvYYd01OQ71x9HbtdNKEcAa8SuUA4QF5SZGRbNU16yfhb9EaL1 JoNLD7a7+cdye+6ux8UbVnr/mobzNR+YsepDUgLiXyXxn9fEgXLPkkEpVQQjQEmHS1fqN78QS1DTm 7fMsiZl1A==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kBaP2-0000bg-GF; Fri, 28 Aug 2020 09:10:32 +0000 Received: from lhrrgout.huawei.com ([185.176.76.210] helo=huawei.com) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kBaOw-0000ZY-NW; Fri, 28 Aug 2020 09:10:28 +0000 Received: from lhreml710-chm.china.huawei.com (unknown [172.18.7.108]) by Forcepoint Email with ESMTP id BD1A9668571B3AFB272E; Fri, 28 Aug 2020 10:10:19 +0100 (IST) Received: from localhost (10.52.127.106) by lhreml710-chm.china.huawei.com (10.201.108.61) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1913.5; Fri, 28 Aug 2020 10:10:19 +0100 Date: Fri, 28 Aug 2020 10:08:43 +0100 From: Jonathan Cameron To: Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= Subject: Re: [PATCH] PCI: Unify ECAM constants in native PCI Express drivers Message-ID: <20200828100843.0000474e@Huawei.com> In-Reply-To: <20200827224938.977757-1-kw@linux.com> References: <20200827224938.977757-1-kw@linux.com> Organization: Huawei Technologies Research and Development (UK) Ltd. X-Mailer: Claws Mail 3.17.4 (GTK+ 2.24.32; i686-w64-mingw32) MIME-Version: 1.0 X-Originating-IP: [10.52.127.106] X-ClientProxiedBy: lhreml725-chm.china.huawei.com (10.201.108.76) To lhreml710-chm.china.huawei.com (10.201.108.61) X-CFilter-Loop: Reflected X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200828_051026_997661_90D86460 X-CRM114-Status: GOOD ( 26.70 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Lorenzo Pieralisi , Heiko Stuebner , linux-pci@vger.kernel.org, Shawn Lin , Michal Simek , linux-rockchip@lists.infradead.org, Zhou Wang , Robert Richter , Jonathan Chocron , Bjorn Helgaas , Will Deacon , linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org T24gVGh1LCAyNyBBdWcgMjAyMCAyMjo0OTozOCArMDAwMApLcnp5c3p0b2YgV2lsY3p5xYRza2kg PGt3QGxpbnV4LmNvbT4gd3JvdGU6Cgo+IFVuaWZ5IEVDQU0tcmVsYXRlZCBjb25zdGFudHMgaW50 byBhIHNpbmdsZSBzZXQgb2Ygc3RhbmRhcmQgY29uc3RhbnRzCj4gZGVmaW5pbmcgbWVtb3J5IGFk ZHJlc3Mgc2hpZnQgdmFsdWVzIGZvciB0aGUgYnl0ZS1sZXZlbCBhZGRyZXNzIHRoYXQgY2FuCj4g YmUgdXNlZCB3aGVuIGFjY2Vzc2luZyB0aGUgUENJIEV4cHJlc3MgQ29uZmlndXJhdGlvbiBTcGFj ZSwgYW5kIHRoZW4KPiBtb3ZlIG5hdGl2ZSBQQ0kgRXhwcmVzcyBjb250cm9sbGVyIGRyaXZlcnMg dG8gdXNlIG5ld2x5IGludHJvZHVjZWQKPiBkZWZpbml0aW9ucyByZXRpcmluZyBhbnkgZHJpdmVy LXNwZWNpZmljIG9uZXMuCj4gCj4gVGhlIEVDQU0gKCJFbmhhbmNlZCBDb25maWd1cmF0aW9uIEFj Y2VzcyBNZWNoYW5pc20iKSBpcyBkZWZpbmVkIGJ5IHRoZQo+IFBDSSBFeHByZXNzIHNwZWNpZmlj YXRpb24gKHNlZSBQQ0kgQmFzZSBTcGVjaWZpY2F0aW9uLCBSZXZpc2lvbiA1LjAsCj4gVmVyc2lv biAxLjAsIFNlY3Rpb24gNy4yLjIsIHAuIDY3NiksIHRodXMgbW9zdCBoYXJkd2FyZSBzaG91bGQg aW1wbGVtZW50Cj4gaXQgdGhlIHNhbWUgd2F5LiAgTW9zdCBvZiB0aGUgbmF0aXZlIFBDSSBFeHBy ZXNzIGNvbnRyb2xsZXIgZHJpdmVycwo+IGRlZmluZSB0aGVpciBFQ0FNLXJlbGF0ZWQgY29uc3Rh bnRzLCBtYW55IG9mIHRoZXNlIGNvdWxkIGJlIHNoYXJlZCwgb3IKPiB1c2Ugb3Blbi1jb2RlZCB2 YWx1ZXMgd2hlbiBzZXR0aW5nIHRoZSAuYnVzX3NoaWZ0IGZpZWxkIG9mIHRoZSBzdHJ1Y3QKPiBw Y2lfZWNhbV9vcHMuCj4gCj4gQWxsIG9mIHRoZSBuZXdseSBhZGRlZCBjb25zdGFudHMgc2hvdWxk IHJlbW92ZSBhbWJpZ3VpdHkgYW5kIHJlZHVjZSB0aGUKPiBudW1iZXIgb2Ygb3Blbi1jb2RlZCB2 YWx1ZXMsIGFuZCBhbHNvIGNvcnJlbGF0ZSBtb3JlIHN0cm9uZ2x5IHdpdGggdGhlCj4gZGVzY3Jp cHRpb25zIGluIHRoZSBhZm9yZW1lbnRpb25lZCBzcGVjaWZpY2F0aW9uIChzZWUgVGFibGUgNy0x Cj4gIkVuaGFuY2VkIENvbmZpZ3VyYXRpb24gQWRkcmVzcyBNYXBwaW5nIiwgcC4gNjc3KS4KPiAK PiBUaGVyZSBpcyBubyBjaGFuZ2UgdG8gZnVuY3Rpb25hbGl0eS4KPiAKPiBTdWdnZXN0ZWQtYnk6 IEJqb3JuIEhlbGdhYXMgPGJoZWxnYWFzQGdvb2dsZS5jb20+Cj4gU2lnbmVkLW9mZi1ieTogS3J6 eXN6dG9mIFdpbGN6ecWEc2tpIDxrd0BsaW51eC5jb20+CgpTZWVtcyBzZW5zaWJsZSBhbmQgbG9v a3MgZ29vZCB0byBtZS4KClJldmlld2VkLWJ5OiBKb25hdGhhbiBDYW1lcm9uIDxKb25hdGhhbi5D YW1lcm9uQGh1YXdlaS5jb20+CgpNaWdodCBwb3RlbnRpYWxseSBiZSB3b3J0aCB0aWR5aW5nIHVw IHRoZSBtYXNrcyBhcyB3ZWxsPwpPciBwb3RlbnRpYWxseSBkcm9wIHRoZW0gZ2l2ZW4gSSBzdXNw ZWN0IHRoYXQgdGhlcmUgYXJlIG5vIGNhc2VzCmluIHdoaWNoIHRoZSBtYXNrIGlzIGFjdHVhbGx5 IGRvaW5nIGFueXRoaW5nLi4uCgpKb25hdGhhbgoKCj4gLS0tCj4gIGRyaXZlcnMvcGNpL2NvbnRy b2xsZXIvZHdjL3BjaWUtYWwuYyAgICAgIHwgOCArKysrLS0tLQo+ICBkcml2ZXJzL3BjaS9jb250 cm9sbGVyL2R3Yy9wY2llLWhpc2kuYyAgICB8IDQgKystLQo+ICBkcml2ZXJzL3BjaS9jb250cm9s bGVyL3BjaS1ob3N0LWdlbmVyaWMuYyB8IDIgKy0KPiAgZHJpdmVycy9wY2kvY29udHJvbGxlci9w Y2ktdGh1bmRlci1lY2FtLmMgfCAyICstCj4gIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1y b2NrY2hpcC5oICAgIHwgNyArKysrLS0tCj4gIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS10 YW5nby5jICAgICAgIHwgMiArLQo+ICBkcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUteGlsaW54 LW53bC5jICB8IDcgKysrLS0tLQo+ICBkcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUteGlsaW54 LmMgICAgICB8IDkgKysrLS0tLS0tCj4gIGRyaXZlcnMvcGNpL2VjYW0uYyAgICAgICAgICAgICAg ICAgICAgICAgIHwgNCArKy0tCj4gIGluY2x1ZGUvbGludXgvcGNpLWVjYW0uaCAgICAgICAgICAg ICAgICAgIHwgOCArKysrKysrKwo+ICAxMCBmaWxlcyBjaGFuZ2VkLCAyOSBpbnNlcnRpb25zKCsp LCAyNCBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxl ci9kd2MvcGNpZS1hbC5jIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9kd2MvcGNpZS1hbC5jCj4g aW5kZXggZDU3ZDRlZTE1ODQ4Li41NzE2NWNiMGVmMDIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9w Y2kvY29udHJvbGxlci9kd2MvcGNpZS1hbC5jCj4gKysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxl ci9kd2MvcGNpZS1hbC5jCj4gQEAgLTc2LDcgKzc2LDcgQEAgc3RhdGljIGludCBhbF9wY2llX2lu aXQoc3RydWN0IHBjaV9jb25maWdfd2luZG93ICpjZmcpCj4gIH0KPiAgCj4gIGNvbnN0IHN0cnVj dCBwY2lfZWNhbV9vcHMgYWxfcGNpZV9vcHMgPSB7Cj4gLQkuYnVzX3NoaWZ0ICAgID0gMjAsCj4g KwkuYnVzX3NoaWZ0ICAgID0gUENJRV9FQ0FNX0JVU19TSElGVCwKPiAgCS5pbml0ICAgICAgICAg PSAgYWxfcGNpZV9pbml0LAo+ICAJLnBjaV9vcHMgICAgICA9IHsKPiAgCQkubWFwX2J1cyAgICA9 IGFsX3BjaWVfbWFwX2J1cywKPiBAQCAtMTM4LDcgKzEzOCw3IEBAIHN0cnVjdCBhbF9wY2llIHsK PiAgCXN0cnVjdCBhbF9wY2llX3RhcmdldF9idXNfY2ZnIHRhcmdldF9idXNfY2ZnOwo+ICB9Owo+ ICAKPiAtI2RlZmluZSBQQ0lFX0VDQU1fREVWRk4oeCkJCSgoKHgpICYgMHhmZikgPDwgMTIpCj4g KyNkZWZpbmUgUENJRV9FQ0FNX0RFVkZOKHgpCQkoKCh4KSAmIDB4ZmYpIDw8IFBDSUVfRUNBTV9G VU5fU0hJRlQpCj4gIAo+ICAjZGVmaW5lIHRvX2FsX3BjaWUoeCkJCWRldl9nZXRfZHJ2ZGF0YSgo eCktPmRldikKPiAgCj4gQEAgLTIyOCw3ICsyMjgsNyBAQCBzdGF0aWMgdm9pZCBfX2lvbWVtICph bF9wY2llX2NvbmZfYWRkcl9tYXAoc3RydWN0IGFsX3BjaWUgKnBjaWUsCj4gIAl2b2lkIF9faW9t ZW0gKnBjaV9iYXNlX2FkZHI7Cj4gIAo+ICAJcGNpX2Jhc2VfYWRkciA9ICh2b2lkIF9faW9tZW0g KikoKHVpbnRwdHJfdClwcC0+dmFfY2ZnMF9iYXNlICsKPiAtCQkJCQkgKGJ1c25yX2VjYW0gPDwg MjApICsKPiArCQkJCQkgKGJ1c25yX2VjYW0gPDwgUENJRV9FQ0FNX0JVU19TSElGVCkgKwo+ICAJ CQkJCSBQQ0lFX0VDQU1fREVWRk4oZGV2Zm4pKTsKPiAgCj4gIAlpZiAoYnVzbnJfcmVnICE9IHRh cmdldF9idXNfY2ZnLT5yZWdfdmFsKSB7Cj4gQEAgLTMwMCw3ICszMDAsNyBAQCBzdGF0aWMgdm9p ZCBhbF9wY2llX2NvbmZpZ19wcmVwYXJlKHN0cnVjdCBhbF9wY2llICpwY2llKQo+ICAKPiAgCXRh cmdldF9idXNfY2ZnID0gJnBjaWUtPnRhcmdldF9idXNfY2ZnOwo+ICAKPiAtCWVjYW1fYnVzX21h c2sgPSAocGNpZS0+ZWNhbV9zaXplID4+IDIwKSAtIDE7Cj4gKwllY2FtX2J1c19tYXNrID0gKHBj aWUtPmVjYW1fc2l6ZSA+PiBQQ0lFX0VDQU1fQlVTX1NISUZUKSAtIDE7Cj4gIAlpZiAoZWNhbV9i dXNfbWFzayA+IDI1NSkgewo+ICAJCWRldl93YXJuKHBjaWUtPmRldiwgIkVDQU0gd2luZG93IHNp emUgaXMgbGFyZ2VyIHRoYW4gMjU2TUIuIEN1dHRpbmcgb2ZmIGF0IDI1NlxuIik7Cj4gIAkJZWNh bV9idXNfbWFzayA9IDI1NTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9k d2MvcGNpZS1oaXNpLmMgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9wY2llLWhpc2kuYwo+ IGluZGV4IDVjYTg2Nzk2ZDQzYS4uYjdhZmJmMWQ0YmQ5IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv cGNpL2NvbnRyb2xsZXIvZHdjL3BjaWUtaGlzaS5jCj4gKysrIGIvZHJpdmVycy9wY2kvY29udHJv bGxlci9kd2MvcGNpZS1oaXNpLmMKPiBAQCAtMTAwLDcgKzEwMCw3IEBAIHN0YXRpYyBpbnQgaGlz aV9wY2llX2luaXQoc3RydWN0IHBjaV9jb25maWdfd2luZG93ICpjZmcpCj4gIH0KPiAgCj4gIGNv bnN0IHN0cnVjdCBwY2lfZWNhbV9vcHMgaGlzaV9wY2llX29wcyA9IHsKPiAtCS5idXNfc2hpZnQg ICAgPSAyMCwKPiArCS5idXNfc2hpZnQgICAgPSBQQ0lFX0VDQU1fQlVTX1NISUZULAo+ICAJLmlu aXQgICAgICAgICA9ICBoaXNpX3BjaWVfaW5pdCwKPiAgCS5wY2lfb3BzICAgICAgPSB7Cj4gIAkJ Lm1hcF9idXMgICAgPSBoaXNpX3BjaWVfbWFwX2J1cywKPiBAQCAtMTM1LDcgKzEzNSw3IEBAIHN0 YXRpYyBpbnQgaGlzaV9wY2llX3BsYXRmb3JtX2luaXQoc3RydWN0IHBjaV9jb25maWdfd2luZG93 ICpjZmcpCj4gIH0KPiAgCj4gIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2VjYW1fb3BzIGhpc2lf cGNpZV9wbGF0Zm9ybV9vcHMgPSB7Cj4gLQkuYnVzX3NoaWZ0ICAgID0gMjAsCj4gKwkuYnVzX3No aWZ0ICAgID0gUENJRV9FQ0FNX0JVU19TSElGVCwKPiAgCS5pbml0ICAgICAgICAgPSAgaGlzaV9w Y2llX3BsYXRmb3JtX2luaXQsCj4gIAkucGNpX29wcyAgICAgID0gewo+ICAJCS5tYXBfYnVzICAg ID0gaGlzaV9wY2llX21hcF9idXMsCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2NvbnRyb2xs ZXIvcGNpLWhvc3QtZ2VuZXJpYy5jIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaG9zdC1n ZW5lcmljLmMKPiBpbmRleCBiNTE5NzdhYmZkZjEuLmMxYzY5YjExNjE1ZiAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1ob3N0LWdlbmVyaWMuYwo+ICsrKyBiL2RyaXZl cnMvcGNpL2NvbnRyb2xsZXIvcGNpLWhvc3QtZ2VuZXJpYy5jCj4gQEAgLTQ5LDcgKzQ5LDcgQEAg c3RhdGljIHZvaWQgX19pb21lbSAqcGNpX2R3X2VjYW1fbWFwX2J1cyhzdHJ1Y3QgcGNpX2J1cyAq YnVzLAo+ICB9Cj4gIAo+ICBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9lY2FtX29wcyBwY2lfZHdf ZWNhbV9idXNfb3BzID0gewo+IC0JLmJ1c19zaGlmdAk9IDIwLAo+ICsJLmJ1c19zaGlmdAk9IFBD SUVfRUNBTV9CVVNfU0hJRlQsCj4gIAkucGNpX29wcwk9IHsKPiAgCQkubWFwX2J1cwk9IHBjaV9k d19lY2FtX21hcF9idXMsCj4gIAkJLnJlYWQJCT0gcGNpX2dlbmVyaWNfY29uZmlnX3JlYWQsCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLXRodW5kZXItZWNhbS5jIGIv ZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktdGh1bmRlci1lY2FtLmMKPiBpbmRleCA3ZTg4MzVm ZWU1ZjcuLjIyZWQ3ZTk5NWIzOSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3BjaS9jb250cm9sbGVy L3BjaS10aHVuZGVyLWVjYW0uYwo+ICsrKyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLXRo dW5kZXItZWNhbS5jCj4gQEAgLTM0Niw3ICszNDYsNyBAQCBzdGF0aWMgaW50IHRodW5kZXJfZWNh bV9jb25maWdfd3JpdGUoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAo+ ICB9Cj4gIAo+ICBjb25zdCBzdHJ1Y3QgcGNpX2VjYW1fb3BzIHBjaV90aHVuZGVyX2VjYW1fb3Bz ID0gewo+IC0JLmJ1c19zaGlmdAk9IDIwLAo+ICsJLmJ1c19zaGlmdAk9IFBDSUVfRUNBTV9CVVNf U0hJRlQsCj4gIAkucGNpX29wcwk9IHsKPiAgCQkubWFwX2J1cyAgICAgICAgPSBwY2lfZWNhbV9t YXBfYnVzLAo+ICAJCS5yZWFkICAgICAgICAgICA9IHRodW5kZXJfZWNhbV9jb25maWdfcmVhZCwK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLXJvY2tjaGlwLmggYi9k cml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtcm9ja2NoaXAuaAo+IGluZGV4IGM3ZDAxNzhmYzhj Mi4uNTBmNDI1ZTAzZThmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNp ZS1yb2NrY2hpcC5oCj4gKysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLXJvY2tjaGlw LmgKPiBAQCAtMTMsNiArMTMsNyBAQAo+ICAKPiAgI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ ICAjaW5jbHVkZSA8bGludXgvcGNpLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wY2ktZWNhbS5oPgo+ ICAKPiAgLyoKPiAgICogVGhlIHVwcGVyIDE2IGJpdHMgb2YgUENJRV9DTElFTlRfQ09ORklHIGFy ZSBhIHdyaXRlIG1hc2sgZm9yIHRoZSBsb3dlciAxNgo+IEBAIC0xNzgsOSArMTc5LDkgQEAKPiAg I2RlZmluZSBNSU5fQVhJX0FERFJfQklUU19QQVNTRUQJCTgKPiAgI2RlZmluZSBQQ0lFX1JDX1NF TkRfUE1FX09GRgkJCTB4MTE5NjAKPiAgI2RlZmluZSBST0NLQ0hJUF9WRU5ET1JfSUQJCQkweDFk ODcKPiAtI2RlZmluZSBQQ0lFX0VDQU1fQlVTKHgpCQkJKCgoeCkgJiAweGZmKSA8PCAyMCkKPiAt I2RlZmluZSBQQ0lFX0VDQU1fREVWKHgpCQkJKCgoeCkgJiAweDFmKSA8PCAxNSkKPiAtI2RlZmlu ZSBQQ0lFX0VDQU1fRlVOQyh4KQkJCSgoKHgpICYgMHg3KSA8PCAxMikKPiArI2RlZmluZSBQQ0lF X0VDQU1fQlVTKHgpCQkJKCgoeCkgJiAweGZmKSA8PCBQQ0lFX0VDQU1fQlVTX1NISUZUKQo+ICsj ZGVmaW5lIFBDSUVfRUNBTV9ERVYoeCkJCQkoKCh4KSAmIDB4MWYpIDw8IFBDSUVfRUNBTV9ERVZf U0hJRlQpCj4gKyNkZWZpbmUgUENJRV9FQ0FNX0ZVTkMoeCkJCQkoKCh4KSAmIDB4NykgPDwgUENJ RV9FQ0FNX0ZVTl9TSElGVCkKPiAgI2RlZmluZSBQQ0lFX0VDQU1fUkVHKHgpCQkJKCgoeCkgJiAw eGZmZikgPDwgMCkKPiAgI2RlZmluZSBQQ0lFX0VDQU1fQUREUihidXMsIGRldiwgZnVuYywgcmVn KSBcCj4gIAkgIChQQ0lFX0VDQU1fQlVTKGJ1cykgfCBQQ0lFX0VDQU1fREVWKGRldikgfCBcCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS10YW5nby5jIGIvZHJpdmVy cy9wY2kvY29udHJvbGxlci9wY2llLXRhbmdvLmMKPiBpbmRleCBkMDkzYThjZTRiYjEuLjhmMGQ2 OTVhZmJkZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtdGFuZ28u Ywo+ICsrKyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS10YW5nby5jCj4gQEAgLTIwOCw3 ICsyMDgsNyBAQCBzdGF0aWMgaW50IHNtcDg3NTlfY29uZmlnX3dyaXRlKHN0cnVjdCBwY2lfYnVz ICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKPiAgfQo+ICAKPiAgc3RhdGljIGNvbnN0IHN0cnVj dCBwY2lfZWNhbV9vcHMgc21wODc1OV9lY2FtX29wcyA9IHsKPiAtCS5idXNfc2hpZnQJPSAyMCwK PiArCS5idXNfc2hpZnQJPSBQQ0lFX0VDQU1fQlVTX1NISUZULAo+ICAJLnBjaV9vcHMJPSB7Cj4g IAkJLm1hcF9idXMJPSBwY2lfZWNhbV9tYXBfYnVzLAo+ICAJCS5yZWFkCQk9IHNtcDg3NTlfY29u ZmlnX3JlYWQsCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS14aWxp bngtbndsLmMgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUteGlsaW54LW53bC5jCj4gaW5k ZXggZjNjZjdkNjE5MjRmLi44ZjYyOGI2NmEwZDcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9wY2kv Y29udHJvbGxlci9wY2llLXhpbGlueC1ud2wuYwo+ICsrKyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xs ZXIvcGNpZS14aWxpbngtbndsLmMKPiBAQCAtMTgsNiArMTgsNyBAQAo+ICAjaW5jbHVkZSA8bGlu dXgvb2ZfcGxhdGZvcm0uaD4KPiAgI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgo+ICAjaW5jbHVk ZSA8bGludXgvcGNpLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wY2ktZWNhbS5oPgo+ICAjaW5jbHVk ZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9pcnFjaGlwL2No YWluZWRfaXJxLmg+Cj4gIAo+IEBAIC0xMjQsOCArMTI1LDYgQEAKPiAgI2RlZmluZSBFX0VDQU1f Q1JfRU5BQkxFCQlCSVQoMCkKPiAgI2RlZmluZSBFX0VDQU1fU0laRV9MT0MJCQlHRU5NQVNLKDIw LCAxNikKPiAgI2RlZmluZSBFX0VDQU1fU0laRV9TSElGVAkJMTYKPiAtI2RlZmluZSBFQ0FNX0JV U19MT0NfU0hJRlQJCTIwCj4gLSNkZWZpbmUgRUNBTV9ERVZfTE9DX1NISUZUCQkxMgo+ICAjZGVm aW5lIE5XTF9FQ0FNX1ZBTFVFX0RFRkFVTFQJCTEyCj4gIAo+ICAjZGVmaW5lIENGR19ETUFfUkVH X0JBUgkJCUdFTk1BU0soMiwgMCkKPiBAQCAtMjQ1LDggKzI0NCw4IEBAIHN0YXRpYyB2b2lkIF9f aW9tZW0gKm53bF9wY2llX21hcF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50 IGRldmZuLAo+ICAJaWYgKCFud2xfcGNpZV92YWxpZF9kZXZpY2UoYnVzLCBkZXZmbikpCj4gIAkJ cmV0dXJuIE5VTEw7Cj4gIAo+IC0JcmVsYnVzID0gKGJ1cy0+bnVtYmVyIDw8IEVDQU1fQlVTX0xP Q19TSElGVCkgfAo+IC0JCQkoZGV2Zm4gPDwgRUNBTV9ERVZfTE9DX1NISUZUKTsKPiArCXJlbGJ1 cyA9IChidXMtPm51bWJlciA8PCBQQ0lFX0VDQU1fQlVTX1NISUZUKSB8Cj4gKwkJCShkZXZmbiA8 PCBQQ0lFX0VDQU1fRlVOX1NISUZUKTsKPiAgCj4gIAlyZXR1cm4gcGNpZS0+ZWNhbV9iYXNlICsg cmVsYnVzICsgd2hlcmU7Cj4gIH0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxl ci9wY2llLXhpbGlueC5jIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLXhpbGlueC5jCj4g aW5kZXggODUyM2JlNjFiYmE1Li43ZTlmZGFjY2QxMzIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9w Y2kvY29udHJvbGxlci9wY2llLXhpbGlueC5jCj4gKysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxl ci9wY2llLXhpbGlueC5jCj4gQEAgLTIxLDYgKzIxLDcgQEAKPiAgI2luY2x1ZGUgPGxpbnV4L29m X3BsYXRmb3JtLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KPiAgI2luY2x1ZGUgPGxp bnV4L3BjaS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGNpLWVjYW0uaD4KPiAgI2luY2x1ZGUgPGxp bnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ICAKPiAgI2luY2x1ZGUgIi4uL3BjaS5oIgo+IEBAIC04 NiwxMCArODcsNiBAQAo+ICAvKiBQaHkgU3RhdHVzL0NvbnRyb2wgUmVnaXN0ZXIgZGVmaW5pdGlv bnMgKi8KPiAgI2RlZmluZSBYSUxJTlhfUENJRV9SRUdfUFNDUl9MTktVUAlCSVQoMTEpCj4gIAo+ IC0vKiBFQ0FNIGRlZmluaXRpb25zICovCj4gLSNkZWZpbmUgRUNBTV9CVVNfTlVNX1NISUZUCQky MAo+IC0jZGVmaW5lIEVDQU1fREVWX05VTV9TSElGVAkJMTIKPiAtCj4gIC8qIE51bWJlciBvZiBN U0kgSVJRcyAqLwo+ICAjZGVmaW5lIFhJTElOWF9OVU1fTVNJX0lSUVMJCTEyOAo+ICAKPiBAQCAt MTg4LDggKzE4NSw4IEBAIHN0YXRpYyB2b2lkIF9faW9tZW0gKnhpbGlueF9wY2llX21hcF9idXMo c3RydWN0IHBjaV9idXMgKmJ1cywKPiAgCWlmICgheGlsaW54X3BjaWVfdmFsaWRfZGV2aWNlKGJ1 cywgZGV2Zm4pKQo+ICAJCXJldHVybiBOVUxMOwo+ICAKPiAtCXJlbGJ1cyA9IChidXMtPm51bWJl ciA8PCBFQ0FNX0JVU19OVU1fU0hJRlQpIHwKPiAtCQkgKGRldmZuIDw8IEVDQU1fREVWX05VTV9T SElGVCk7Cj4gKwlyZWxidXMgPSAoYnVzLT5udW1iZXIgPDwgUENJRV9FQ0FNX0JVU19TSElGVCkg fAo+ICsJCSAoZGV2Zm4gPDwgUENJRV9FQ0FNX0ZVTl9TSElGVCk7Cj4gIAo+ICAJcmV0dXJuIHBv cnQtPnJlZ19iYXNlICsgcmVsYnVzICsgd2hlcmU7Cj4gIH0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9wY2kvZWNhbS5jIGIvZHJpdmVycy9wY2kvZWNhbS5jCj4gaW5kZXggOGYwNjVhNDJmYzFhLi5m ZmQwMTAyOTAwODQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9wY2kvZWNhbS5jCj4gKysrIGIvZHJp dmVycy9wY2kvZWNhbS5jCj4gQEAgLTE0OSw3ICsxNDksNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChw Y2lfZWNhbV9tYXBfYnVzKTsKPiAgCj4gIC8qIEVDQU0gb3BzICovCj4gIGNvbnN0IHN0cnVjdCBw Y2lfZWNhbV9vcHMgcGNpX2dlbmVyaWNfZWNhbV9vcHMgPSB7Cj4gLQkuYnVzX3NoaWZ0CT0gMjAs Cj4gKwkuYnVzX3NoaWZ0CT0gUENJRV9FQ0FNX0JVU19TSElGVCwKPiAgCS5wY2lfb3BzCT0gewo+ ICAJCS5tYXBfYnVzCT0gcGNpX2VjYW1fbWFwX2J1cywKPiAgCQkucmVhZAkJPSBwY2lfZ2VuZXJp Y19jb25maWdfcmVhZCwKPiBAQCAtMTYxLDcgKzE2MSw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHBj aV9nZW5lcmljX2VjYW1fb3BzKTsKPiAgI2lmIGRlZmluZWQoQ09ORklHX0FDUEkpICYmIGRlZmlu ZWQoQ09ORklHX1BDSV9RVUlSS1MpCj4gIC8qIEVDQU0gb3BzIGZvciAzMi1iaXQgYWNjZXNzIG9u bHkgKG5vbi1jb21wbGlhbnQpICovCj4gIGNvbnN0IHN0cnVjdCBwY2lfZWNhbV9vcHMgcGNpXzMy Yl9vcHMgPSB7Cj4gLQkuYnVzX3NoaWZ0CT0gMjAsCj4gKwkuYnVzX3NoaWZ0CT0gUENJRV9FQ0FN X0JVU19TSElGVCwKPiAgCS5wY2lfb3BzCT0gewo+ICAJCS5tYXBfYnVzCT0gcGNpX2VjYW1fbWFw X2J1cywKPiAgCQkucmVhZAkJPSBwY2lfZ2VuZXJpY19jb25maWdfcmVhZDMyLAo+IGRpZmYgLS1n aXQgYS9pbmNsdWRlL2xpbnV4L3BjaS1lY2FtLmggYi9pbmNsdWRlL2xpbnV4L3BjaS1lY2FtLmgK PiBpbmRleCAxYWY1Y2IwMmVmN2YuLjU4YTVkNWUyZTgzMSAxMDA2NDQKPiAtLS0gYS9pbmNsdWRl L2xpbnV4L3BjaS1lY2FtLmgKPiArKysgYi9pbmNsdWRlL2xpbnV4L3BjaS1lY2FtLmgKPiBAQCAt OSw2ICs5LDE0IEBACj4gICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KPiAgI2luY2x1ZGUgPGxp bnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ICAKPiArLyoKPiArICogTWVtb3J5IGFkZHJlc3Mgc2hp ZnQgdmFsdWVzIGZvciB0aGUgYnl0ZS1sZXZlbCBhZGRyZXNzIHRoYXQKPiArICogY2FuIGJlIHVz ZWQgd2hlbiBhY2Nlc3NpbmcgdGhlIFBDSSBFeHByZXNzIENvbmZpZ3VyYXRpb24gU3BhY2UuCj4g KyAqLwo+ICsjZGVmaW5lIFBDSUVfRUNBTV9GVU5fU0hJRlQJMTIJLyogRnVuY3Rpb24gTnVtYmVy ICovCj4gKyNkZWZpbmUgUENJRV9FQ0FNX0RFVl9TSElGVAkxNQkvKiBEZXZpY2UgTnVtYmVyICov Cj4gKyNkZWZpbmUgUENJRV9FQ0FNX0JVU19TSElGVAkyMAkvKiBCdXMgTnVtYmVyICovCj4gKwo+ ICAvKgo+ICAgKiBzdHJ1Y3QgdG8gaG9sZCBwY2kgb3BzIGFuZCBidXMgc2hpZnQgb2YgdGhlIGNv bmZpZyB3aW5kb3cKPiAgICogZm9yIGEgUENJIGNvbnRyb2xsZXIuCgoKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4LXJvY2tjaGlwIG1haWxpbmcg bGlzdApMaW51eC1yb2NrY2hpcEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZy YWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcm9ja2NoaXAK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.2 required=3.0 tests=BAYES_00,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_2 autolearn=unavailable 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 43085C433E6 for ; Fri, 28 Aug 2020 09:12:10 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (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 EB292208CA for ; Fri, 28 Aug 2020 09:12:09 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="MeDhGDUD" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org EB292208CA Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=Huawei.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: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=ToBRnGxX+dely+SmJgyE/K6Qg7Dqb9h9QMEZyctHmYc=; b=MeDhGDUDbBdpIzAzRj4wQe6gl WKjyO1EPsy2Se6QEwhoxrVuC67eufW1pEjxj9CULyikLH8kQic2+nRPPGscfSOtw0ZcnMKsKSU5ga 2r3qTy5GvoBObGKH28Ff2tfyfj9rkPBPofTbVcdsSSRZJFnxa1y77PADgZgu8F8+JSJ3FD/rVq7kW MV6IYmt5pYtkwjT2AFvs2XIQ7DIOM3eeyJRo9LjOyQL5yJghPwj9gpxrug5gDhkJx9qzOdFST9rS5 UPsdQeUTCicBEaKwQv2fryEJCG7r0+Mo620Z/bw1Xe622CTPmIqpF++E0G40XrlreOs2ukwAT36S5 4Axbcu/bw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kBaP0-0000b2-KR; Fri, 28 Aug 2020 09:10:30 +0000 Received: from lhrrgout.huawei.com ([185.176.76.210] helo=huawei.com) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kBaOw-0000ZY-NW; Fri, 28 Aug 2020 09:10:28 +0000 Received: from lhreml710-chm.china.huawei.com (unknown [172.18.7.108]) by Forcepoint Email with ESMTP id BD1A9668571B3AFB272E; Fri, 28 Aug 2020 10:10:19 +0100 (IST) Received: from localhost (10.52.127.106) by lhreml710-chm.china.huawei.com (10.201.108.61) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1913.5; Fri, 28 Aug 2020 10:10:19 +0100 Date: Fri, 28 Aug 2020 10:08:43 +0100 From: Jonathan Cameron To: Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= Subject: Re: [PATCH] PCI: Unify ECAM constants in native PCI Express drivers Message-ID: <20200828100843.0000474e@Huawei.com> In-Reply-To: <20200827224938.977757-1-kw@linux.com> References: <20200827224938.977757-1-kw@linux.com> Organization: Huawei Technologies Research and Development (UK) Ltd. X-Mailer: Claws Mail 3.17.4 (GTK+ 2.24.32; i686-w64-mingw32) MIME-Version: 1.0 X-Originating-IP: [10.52.127.106] X-ClientProxiedBy: lhreml725-chm.china.huawei.com (10.201.108.76) To lhreml710-chm.china.huawei.com (10.201.108.61) X-CFilter-Loop: Reflected X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200828_051026_997661_90D86460 X-CRM114-Status: GOOD ( 26.70 ) 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: Lorenzo Pieralisi , Heiko Stuebner , linux-pci@vger.kernel.org, Shawn Lin , Michal Simek , linux-rockchip@lists.infradead.org, Zhou Wang , Robert Richter , Jonathan Chocron , Bjorn Helgaas , Will Deacon , linux-arm-kernel@lists.infradead.org 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 T24gVGh1LCAyNyBBdWcgMjAyMCAyMjo0OTozOCArMDAwMApLcnp5c3p0b2YgV2lsY3p5xYRza2kg PGt3QGxpbnV4LmNvbT4gd3JvdGU6Cgo+IFVuaWZ5IEVDQU0tcmVsYXRlZCBjb25zdGFudHMgaW50 byBhIHNpbmdsZSBzZXQgb2Ygc3RhbmRhcmQgY29uc3RhbnRzCj4gZGVmaW5pbmcgbWVtb3J5IGFk ZHJlc3Mgc2hpZnQgdmFsdWVzIGZvciB0aGUgYnl0ZS1sZXZlbCBhZGRyZXNzIHRoYXQgY2FuCj4g YmUgdXNlZCB3aGVuIGFjY2Vzc2luZyB0aGUgUENJIEV4cHJlc3MgQ29uZmlndXJhdGlvbiBTcGFj ZSwgYW5kIHRoZW4KPiBtb3ZlIG5hdGl2ZSBQQ0kgRXhwcmVzcyBjb250cm9sbGVyIGRyaXZlcnMg dG8gdXNlIG5ld2x5IGludHJvZHVjZWQKPiBkZWZpbml0aW9ucyByZXRpcmluZyBhbnkgZHJpdmVy LXNwZWNpZmljIG9uZXMuCj4gCj4gVGhlIEVDQU0gKCJFbmhhbmNlZCBDb25maWd1cmF0aW9uIEFj Y2VzcyBNZWNoYW5pc20iKSBpcyBkZWZpbmVkIGJ5IHRoZQo+IFBDSSBFeHByZXNzIHNwZWNpZmlj YXRpb24gKHNlZSBQQ0kgQmFzZSBTcGVjaWZpY2F0aW9uLCBSZXZpc2lvbiA1LjAsCj4gVmVyc2lv biAxLjAsIFNlY3Rpb24gNy4yLjIsIHAuIDY3NiksIHRodXMgbW9zdCBoYXJkd2FyZSBzaG91bGQg aW1wbGVtZW50Cj4gaXQgdGhlIHNhbWUgd2F5LiAgTW9zdCBvZiB0aGUgbmF0aXZlIFBDSSBFeHBy ZXNzIGNvbnRyb2xsZXIgZHJpdmVycwo+IGRlZmluZSB0aGVpciBFQ0FNLXJlbGF0ZWQgY29uc3Rh bnRzLCBtYW55IG9mIHRoZXNlIGNvdWxkIGJlIHNoYXJlZCwgb3IKPiB1c2Ugb3Blbi1jb2RlZCB2 YWx1ZXMgd2hlbiBzZXR0aW5nIHRoZSAuYnVzX3NoaWZ0IGZpZWxkIG9mIHRoZSBzdHJ1Y3QKPiBw Y2lfZWNhbV9vcHMuCj4gCj4gQWxsIG9mIHRoZSBuZXdseSBhZGRlZCBjb25zdGFudHMgc2hvdWxk IHJlbW92ZSBhbWJpZ3VpdHkgYW5kIHJlZHVjZSB0aGUKPiBudW1iZXIgb2Ygb3Blbi1jb2RlZCB2 YWx1ZXMsIGFuZCBhbHNvIGNvcnJlbGF0ZSBtb3JlIHN0cm9uZ2x5IHdpdGggdGhlCj4gZGVzY3Jp cHRpb25zIGluIHRoZSBhZm9yZW1lbnRpb25lZCBzcGVjaWZpY2F0aW9uIChzZWUgVGFibGUgNy0x Cj4gIkVuaGFuY2VkIENvbmZpZ3VyYXRpb24gQWRkcmVzcyBNYXBwaW5nIiwgcC4gNjc3KS4KPiAK PiBUaGVyZSBpcyBubyBjaGFuZ2UgdG8gZnVuY3Rpb25hbGl0eS4KPiAKPiBTdWdnZXN0ZWQtYnk6 IEJqb3JuIEhlbGdhYXMgPGJoZWxnYWFzQGdvb2dsZS5jb20+Cj4gU2lnbmVkLW9mZi1ieTogS3J6 eXN6dG9mIFdpbGN6ecWEc2tpIDxrd0BsaW51eC5jb20+CgpTZWVtcyBzZW5zaWJsZSBhbmQgbG9v a3MgZ29vZCB0byBtZS4KClJldmlld2VkLWJ5OiBKb25hdGhhbiBDYW1lcm9uIDxKb25hdGhhbi5D YW1lcm9uQGh1YXdlaS5jb20+CgpNaWdodCBwb3RlbnRpYWxseSBiZSB3b3J0aCB0aWR5aW5nIHVw IHRoZSBtYXNrcyBhcyB3ZWxsPwpPciBwb3RlbnRpYWxseSBkcm9wIHRoZW0gZ2l2ZW4gSSBzdXNw ZWN0IHRoYXQgdGhlcmUgYXJlIG5vIGNhc2VzCmluIHdoaWNoIHRoZSBtYXNrIGlzIGFjdHVhbGx5 IGRvaW5nIGFueXRoaW5nLi4uCgpKb25hdGhhbgoKCj4gLS0tCj4gIGRyaXZlcnMvcGNpL2NvbnRy b2xsZXIvZHdjL3BjaWUtYWwuYyAgICAgIHwgOCArKysrLS0tLQo+ICBkcml2ZXJzL3BjaS9jb250 cm9sbGVyL2R3Yy9wY2llLWhpc2kuYyAgICB8IDQgKystLQo+ICBkcml2ZXJzL3BjaS9jb250cm9s bGVyL3BjaS1ob3N0LWdlbmVyaWMuYyB8IDIgKy0KPiAgZHJpdmVycy9wY2kvY29udHJvbGxlci9w Y2ktdGh1bmRlci1lY2FtLmMgfCAyICstCj4gIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1y b2NrY2hpcC5oICAgIHwgNyArKysrLS0tCj4gIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS10 YW5nby5jICAgICAgIHwgMiArLQo+ICBkcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUteGlsaW54 LW53bC5jICB8IDcgKysrLS0tLQo+ICBkcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUteGlsaW54 LmMgICAgICB8IDkgKysrLS0tLS0tCj4gIGRyaXZlcnMvcGNpL2VjYW0uYyAgICAgICAgICAgICAg ICAgICAgICAgIHwgNCArKy0tCj4gIGluY2x1ZGUvbGludXgvcGNpLWVjYW0uaCAgICAgICAgICAg ICAgICAgIHwgOCArKysrKysrKwo+ICAxMCBmaWxlcyBjaGFuZ2VkLCAyOSBpbnNlcnRpb25zKCsp LCAyNCBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxl ci9kd2MvcGNpZS1hbC5jIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9kd2MvcGNpZS1hbC5jCj4g aW5kZXggZDU3ZDRlZTE1ODQ4Li41NzE2NWNiMGVmMDIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9w Y2kvY29udHJvbGxlci9kd2MvcGNpZS1hbC5jCj4gKysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxl ci9kd2MvcGNpZS1hbC5jCj4gQEAgLTc2LDcgKzc2LDcgQEAgc3RhdGljIGludCBhbF9wY2llX2lu aXQoc3RydWN0IHBjaV9jb25maWdfd2luZG93ICpjZmcpCj4gIH0KPiAgCj4gIGNvbnN0IHN0cnVj dCBwY2lfZWNhbV9vcHMgYWxfcGNpZV9vcHMgPSB7Cj4gLQkuYnVzX3NoaWZ0ICAgID0gMjAsCj4g KwkuYnVzX3NoaWZ0ICAgID0gUENJRV9FQ0FNX0JVU19TSElGVCwKPiAgCS5pbml0ICAgICAgICAg PSAgYWxfcGNpZV9pbml0LAo+ICAJLnBjaV9vcHMgICAgICA9IHsKPiAgCQkubWFwX2J1cyAgICA9 IGFsX3BjaWVfbWFwX2J1cywKPiBAQCAtMTM4LDcgKzEzOCw3IEBAIHN0cnVjdCBhbF9wY2llIHsK PiAgCXN0cnVjdCBhbF9wY2llX3RhcmdldF9idXNfY2ZnIHRhcmdldF9idXNfY2ZnOwo+ICB9Owo+ ICAKPiAtI2RlZmluZSBQQ0lFX0VDQU1fREVWRk4oeCkJCSgoKHgpICYgMHhmZikgPDwgMTIpCj4g KyNkZWZpbmUgUENJRV9FQ0FNX0RFVkZOKHgpCQkoKCh4KSAmIDB4ZmYpIDw8IFBDSUVfRUNBTV9G VU5fU0hJRlQpCj4gIAo+ICAjZGVmaW5lIHRvX2FsX3BjaWUoeCkJCWRldl9nZXRfZHJ2ZGF0YSgo eCktPmRldikKPiAgCj4gQEAgLTIyOCw3ICsyMjgsNyBAQCBzdGF0aWMgdm9pZCBfX2lvbWVtICph bF9wY2llX2NvbmZfYWRkcl9tYXAoc3RydWN0IGFsX3BjaWUgKnBjaWUsCj4gIAl2b2lkIF9faW9t ZW0gKnBjaV9iYXNlX2FkZHI7Cj4gIAo+ICAJcGNpX2Jhc2VfYWRkciA9ICh2b2lkIF9faW9tZW0g KikoKHVpbnRwdHJfdClwcC0+dmFfY2ZnMF9iYXNlICsKPiAtCQkJCQkgKGJ1c25yX2VjYW0gPDwg MjApICsKPiArCQkJCQkgKGJ1c25yX2VjYW0gPDwgUENJRV9FQ0FNX0JVU19TSElGVCkgKwo+ICAJ CQkJCSBQQ0lFX0VDQU1fREVWRk4oZGV2Zm4pKTsKPiAgCj4gIAlpZiAoYnVzbnJfcmVnICE9IHRh cmdldF9idXNfY2ZnLT5yZWdfdmFsKSB7Cj4gQEAgLTMwMCw3ICszMDAsNyBAQCBzdGF0aWMgdm9p ZCBhbF9wY2llX2NvbmZpZ19wcmVwYXJlKHN0cnVjdCBhbF9wY2llICpwY2llKQo+ICAKPiAgCXRh cmdldF9idXNfY2ZnID0gJnBjaWUtPnRhcmdldF9idXNfY2ZnOwo+ICAKPiAtCWVjYW1fYnVzX21h c2sgPSAocGNpZS0+ZWNhbV9zaXplID4+IDIwKSAtIDE7Cj4gKwllY2FtX2J1c19tYXNrID0gKHBj aWUtPmVjYW1fc2l6ZSA+PiBQQ0lFX0VDQU1fQlVTX1NISUZUKSAtIDE7Cj4gIAlpZiAoZWNhbV9i dXNfbWFzayA+IDI1NSkgewo+ICAJCWRldl93YXJuKHBjaWUtPmRldiwgIkVDQU0gd2luZG93IHNp emUgaXMgbGFyZ2VyIHRoYW4gMjU2TUIuIEN1dHRpbmcgb2ZmIGF0IDI1NlxuIik7Cj4gIAkJZWNh bV9idXNfbWFzayA9IDI1NTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9k d2MvcGNpZS1oaXNpLmMgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9wY2llLWhpc2kuYwo+ IGluZGV4IDVjYTg2Nzk2ZDQzYS4uYjdhZmJmMWQ0YmQ5IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv cGNpL2NvbnRyb2xsZXIvZHdjL3BjaWUtaGlzaS5jCj4gKysrIGIvZHJpdmVycy9wY2kvY29udHJv bGxlci9kd2MvcGNpZS1oaXNpLmMKPiBAQCAtMTAwLDcgKzEwMCw3IEBAIHN0YXRpYyBpbnQgaGlz aV9wY2llX2luaXQoc3RydWN0IHBjaV9jb25maWdfd2luZG93ICpjZmcpCj4gIH0KPiAgCj4gIGNv bnN0IHN0cnVjdCBwY2lfZWNhbV9vcHMgaGlzaV9wY2llX29wcyA9IHsKPiAtCS5idXNfc2hpZnQg ICAgPSAyMCwKPiArCS5idXNfc2hpZnQgICAgPSBQQ0lFX0VDQU1fQlVTX1NISUZULAo+ICAJLmlu aXQgICAgICAgICA9ICBoaXNpX3BjaWVfaW5pdCwKPiAgCS5wY2lfb3BzICAgICAgPSB7Cj4gIAkJ Lm1hcF9idXMgICAgPSBoaXNpX3BjaWVfbWFwX2J1cywKPiBAQCAtMTM1LDcgKzEzNSw3IEBAIHN0 YXRpYyBpbnQgaGlzaV9wY2llX3BsYXRmb3JtX2luaXQoc3RydWN0IHBjaV9jb25maWdfd2luZG93 ICpjZmcpCj4gIH0KPiAgCj4gIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2VjYW1fb3BzIGhpc2lf cGNpZV9wbGF0Zm9ybV9vcHMgPSB7Cj4gLQkuYnVzX3NoaWZ0ICAgID0gMjAsCj4gKwkuYnVzX3No aWZ0ICAgID0gUENJRV9FQ0FNX0JVU19TSElGVCwKPiAgCS5pbml0ICAgICAgICAgPSAgaGlzaV9w Y2llX3BsYXRmb3JtX2luaXQsCj4gIAkucGNpX29wcyAgICAgID0gewo+ICAJCS5tYXBfYnVzICAg ID0gaGlzaV9wY2llX21hcF9idXMsCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2NvbnRyb2xs ZXIvcGNpLWhvc3QtZ2VuZXJpYy5jIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaG9zdC1n ZW5lcmljLmMKPiBpbmRleCBiNTE5NzdhYmZkZjEuLmMxYzY5YjExNjE1ZiAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1ob3N0LWdlbmVyaWMuYwo+ICsrKyBiL2RyaXZl cnMvcGNpL2NvbnRyb2xsZXIvcGNpLWhvc3QtZ2VuZXJpYy5jCj4gQEAgLTQ5LDcgKzQ5LDcgQEAg c3RhdGljIHZvaWQgX19pb21lbSAqcGNpX2R3X2VjYW1fbWFwX2J1cyhzdHJ1Y3QgcGNpX2J1cyAq YnVzLAo+ICB9Cj4gIAo+ICBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9lY2FtX29wcyBwY2lfZHdf ZWNhbV9idXNfb3BzID0gewo+IC0JLmJ1c19zaGlmdAk9IDIwLAo+ICsJLmJ1c19zaGlmdAk9IFBD SUVfRUNBTV9CVVNfU0hJRlQsCj4gIAkucGNpX29wcwk9IHsKPiAgCQkubWFwX2J1cwk9IHBjaV9k d19lY2FtX21hcF9idXMsCj4gIAkJLnJlYWQJCT0gcGNpX2dlbmVyaWNfY29uZmlnX3JlYWQsCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLXRodW5kZXItZWNhbS5jIGIv ZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktdGh1bmRlci1lY2FtLmMKPiBpbmRleCA3ZTg4MzVm ZWU1ZjcuLjIyZWQ3ZTk5NWIzOSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3BjaS9jb250cm9sbGVy L3BjaS10aHVuZGVyLWVjYW0uYwo+ICsrKyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLXRo dW5kZXItZWNhbS5jCj4gQEAgLTM0Niw3ICszNDYsNyBAQCBzdGF0aWMgaW50IHRodW5kZXJfZWNh bV9jb25maWdfd3JpdGUoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAo+ ICB9Cj4gIAo+ICBjb25zdCBzdHJ1Y3QgcGNpX2VjYW1fb3BzIHBjaV90aHVuZGVyX2VjYW1fb3Bz ID0gewo+IC0JLmJ1c19zaGlmdAk9IDIwLAo+ICsJLmJ1c19zaGlmdAk9IFBDSUVfRUNBTV9CVVNf U0hJRlQsCj4gIAkucGNpX29wcwk9IHsKPiAgCQkubWFwX2J1cyAgICAgICAgPSBwY2lfZWNhbV9t YXBfYnVzLAo+ICAJCS5yZWFkICAgICAgICAgICA9IHRodW5kZXJfZWNhbV9jb25maWdfcmVhZCwK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLXJvY2tjaGlwLmggYi9k cml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtcm9ja2NoaXAuaAo+IGluZGV4IGM3ZDAxNzhmYzhj Mi4uNTBmNDI1ZTAzZThmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNp ZS1yb2NrY2hpcC5oCj4gKysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLXJvY2tjaGlw LmgKPiBAQCAtMTMsNiArMTMsNyBAQAo+ICAKPiAgI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ ICAjaW5jbHVkZSA8bGludXgvcGNpLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wY2ktZWNhbS5oPgo+ ICAKPiAgLyoKPiAgICogVGhlIHVwcGVyIDE2IGJpdHMgb2YgUENJRV9DTElFTlRfQ09ORklHIGFy ZSBhIHdyaXRlIG1hc2sgZm9yIHRoZSBsb3dlciAxNgo+IEBAIC0xNzgsOSArMTc5LDkgQEAKPiAg I2RlZmluZSBNSU5fQVhJX0FERFJfQklUU19QQVNTRUQJCTgKPiAgI2RlZmluZSBQQ0lFX1JDX1NF TkRfUE1FX09GRgkJCTB4MTE5NjAKPiAgI2RlZmluZSBST0NLQ0hJUF9WRU5ET1JfSUQJCQkweDFk ODcKPiAtI2RlZmluZSBQQ0lFX0VDQU1fQlVTKHgpCQkJKCgoeCkgJiAweGZmKSA8PCAyMCkKPiAt I2RlZmluZSBQQ0lFX0VDQU1fREVWKHgpCQkJKCgoeCkgJiAweDFmKSA8PCAxNSkKPiAtI2RlZmlu ZSBQQ0lFX0VDQU1fRlVOQyh4KQkJCSgoKHgpICYgMHg3KSA8PCAxMikKPiArI2RlZmluZSBQQ0lF X0VDQU1fQlVTKHgpCQkJKCgoeCkgJiAweGZmKSA8PCBQQ0lFX0VDQU1fQlVTX1NISUZUKQo+ICsj ZGVmaW5lIFBDSUVfRUNBTV9ERVYoeCkJCQkoKCh4KSAmIDB4MWYpIDw8IFBDSUVfRUNBTV9ERVZf U0hJRlQpCj4gKyNkZWZpbmUgUENJRV9FQ0FNX0ZVTkMoeCkJCQkoKCh4KSAmIDB4NykgPDwgUENJ RV9FQ0FNX0ZVTl9TSElGVCkKPiAgI2RlZmluZSBQQ0lFX0VDQU1fUkVHKHgpCQkJKCgoeCkgJiAw eGZmZikgPDwgMCkKPiAgI2RlZmluZSBQQ0lFX0VDQU1fQUREUihidXMsIGRldiwgZnVuYywgcmVn KSBcCj4gIAkgIChQQ0lFX0VDQU1fQlVTKGJ1cykgfCBQQ0lFX0VDQU1fREVWKGRldikgfCBcCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS10YW5nby5jIGIvZHJpdmVy cy9wY2kvY29udHJvbGxlci9wY2llLXRhbmdvLmMKPiBpbmRleCBkMDkzYThjZTRiYjEuLjhmMGQ2 OTVhZmJkZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtdGFuZ28u Ywo+ICsrKyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS10YW5nby5jCj4gQEAgLTIwOCw3 ICsyMDgsNyBAQCBzdGF0aWMgaW50IHNtcDg3NTlfY29uZmlnX3dyaXRlKHN0cnVjdCBwY2lfYnVz ICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKPiAgfQo+ICAKPiAgc3RhdGljIGNvbnN0IHN0cnVj dCBwY2lfZWNhbV9vcHMgc21wODc1OV9lY2FtX29wcyA9IHsKPiAtCS5idXNfc2hpZnQJPSAyMCwK PiArCS5idXNfc2hpZnQJPSBQQ0lFX0VDQU1fQlVTX1NISUZULAo+ICAJLnBjaV9vcHMJPSB7Cj4g IAkJLm1hcF9idXMJPSBwY2lfZWNhbV9tYXBfYnVzLAo+ICAJCS5yZWFkCQk9IHNtcDg3NTlfY29u ZmlnX3JlYWQsCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS14aWxp bngtbndsLmMgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUteGlsaW54LW53bC5jCj4gaW5k ZXggZjNjZjdkNjE5MjRmLi44ZjYyOGI2NmEwZDcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9wY2kv Y29udHJvbGxlci9wY2llLXhpbGlueC1ud2wuYwo+ICsrKyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xs ZXIvcGNpZS14aWxpbngtbndsLmMKPiBAQCAtMTgsNiArMTgsNyBAQAo+ICAjaW5jbHVkZSA8bGlu dXgvb2ZfcGxhdGZvcm0uaD4KPiAgI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgo+ICAjaW5jbHVk ZSA8bGludXgvcGNpLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wY2ktZWNhbS5oPgo+ICAjaW5jbHVk ZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9pcnFjaGlwL2No YWluZWRfaXJxLmg+Cj4gIAo+IEBAIC0xMjQsOCArMTI1LDYgQEAKPiAgI2RlZmluZSBFX0VDQU1f Q1JfRU5BQkxFCQlCSVQoMCkKPiAgI2RlZmluZSBFX0VDQU1fU0laRV9MT0MJCQlHRU5NQVNLKDIw LCAxNikKPiAgI2RlZmluZSBFX0VDQU1fU0laRV9TSElGVAkJMTYKPiAtI2RlZmluZSBFQ0FNX0JV U19MT0NfU0hJRlQJCTIwCj4gLSNkZWZpbmUgRUNBTV9ERVZfTE9DX1NISUZUCQkxMgo+ICAjZGVm aW5lIE5XTF9FQ0FNX1ZBTFVFX0RFRkFVTFQJCTEyCj4gIAo+ICAjZGVmaW5lIENGR19ETUFfUkVH X0JBUgkJCUdFTk1BU0soMiwgMCkKPiBAQCAtMjQ1LDggKzI0NCw4IEBAIHN0YXRpYyB2b2lkIF9f aW9tZW0gKm53bF9wY2llX21hcF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50 IGRldmZuLAo+ICAJaWYgKCFud2xfcGNpZV92YWxpZF9kZXZpY2UoYnVzLCBkZXZmbikpCj4gIAkJ cmV0dXJuIE5VTEw7Cj4gIAo+IC0JcmVsYnVzID0gKGJ1cy0+bnVtYmVyIDw8IEVDQU1fQlVTX0xP Q19TSElGVCkgfAo+IC0JCQkoZGV2Zm4gPDwgRUNBTV9ERVZfTE9DX1NISUZUKTsKPiArCXJlbGJ1 cyA9IChidXMtPm51bWJlciA8PCBQQ0lFX0VDQU1fQlVTX1NISUZUKSB8Cj4gKwkJCShkZXZmbiA8 PCBQQ0lFX0VDQU1fRlVOX1NISUZUKTsKPiAgCj4gIAlyZXR1cm4gcGNpZS0+ZWNhbV9iYXNlICsg cmVsYnVzICsgd2hlcmU7Cj4gIH0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxl ci9wY2llLXhpbGlueC5jIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLXhpbGlueC5jCj4g aW5kZXggODUyM2JlNjFiYmE1Li43ZTlmZGFjY2QxMzIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9w Y2kvY29udHJvbGxlci9wY2llLXhpbGlueC5jCj4gKysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxl ci9wY2llLXhpbGlueC5jCj4gQEAgLTIxLDYgKzIxLDcgQEAKPiAgI2luY2x1ZGUgPGxpbnV4L29m X3BsYXRmb3JtLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KPiAgI2luY2x1ZGUgPGxp bnV4L3BjaS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGNpLWVjYW0uaD4KPiAgI2luY2x1ZGUgPGxp bnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ICAKPiAgI2luY2x1ZGUgIi4uL3BjaS5oIgo+IEBAIC04 NiwxMCArODcsNiBAQAo+ICAvKiBQaHkgU3RhdHVzL0NvbnRyb2wgUmVnaXN0ZXIgZGVmaW5pdGlv bnMgKi8KPiAgI2RlZmluZSBYSUxJTlhfUENJRV9SRUdfUFNDUl9MTktVUAlCSVQoMTEpCj4gIAo+ IC0vKiBFQ0FNIGRlZmluaXRpb25zICovCj4gLSNkZWZpbmUgRUNBTV9CVVNfTlVNX1NISUZUCQky MAo+IC0jZGVmaW5lIEVDQU1fREVWX05VTV9TSElGVAkJMTIKPiAtCj4gIC8qIE51bWJlciBvZiBN U0kgSVJRcyAqLwo+ICAjZGVmaW5lIFhJTElOWF9OVU1fTVNJX0lSUVMJCTEyOAo+ICAKPiBAQCAt MTg4LDggKzE4NSw4IEBAIHN0YXRpYyB2b2lkIF9faW9tZW0gKnhpbGlueF9wY2llX21hcF9idXMo c3RydWN0IHBjaV9idXMgKmJ1cywKPiAgCWlmICgheGlsaW54X3BjaWVfdmFsaWRfZGV2aWNlKGJ1 cywgZGV2Zm4pKQo+ICAJCXJldHVybiBOVUxMOwo+ICAKPiAtCXJlbGJ1cyA9IChidXMtPm51bWJl ciA8PCBFQ0FNX0JVU19OVU1fU0hJRlQpIHwKPiAtCQkgKGRldmZuIDw8IEVDQU1fREVWX05VTV9T SElGVCk7Cj4gKwlyZWxidXMgPSAoYnVzLT5udW1iZXIgPDwgUENJRV9FQ0FNX0JVU19TSElGVCkg fAo+ICsJCSAoZGV2Zm4gPDwgUENJRV9FQ0FNX0ZVTl9TSElGVCk7Cj4gIAo+ICAJcmV0dXJuIHBv cnQtPnJlZ19iYXNlICsgcmVsYnVzICsgd2hlcmU7Cj4gIH0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9wY2kvZWNhbS5jIGIvZHJpdmVycy9wY2kvZWNhbS5jCj4gaW5kZXggOGYwNjVhNDJmYzFhLi5m ZmQwMTAyOTAwODQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9wY2kvZWNhbS5jCj4gKysrIGIvZHJp dmVycy9wY2kvZWNhbS5jCj4gQEAgLTE0OSw3ICsxNDksNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChw Y2lfZWNhbV9tYXBfYnVzKTsKPiAgCj4gIC8qIEVDQU0gb3BzICovCj4gIGNvbnN0IHN0cnVjdCBw Y2lfZWNhbV9vcHMgcGNpX2dlbmVyaWNfZWNhbV9vcHMgPSB7Cj4gLQkuYnVzX3NoaWZ0CT0gMjAs Cj4gKwkuYnVzX3NoaWZ0CT0gUENJRV9FQ0FNX0JVU19TSElGVCwKPiAgCS5wY2lfb3BzCT0gewo+ ICAJCS5tYXBfYnVzCT0gcGNpX2VjYW1fbWFwX2J1cywKPiAgCQkucmVhZAkJPSBwY2lfZ2VuZXJp Y19jb25maWdfcmVhZCwKPiBAQCAtMTYxLDcgKzE2MSw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHBj aV9nZW5lcmljX2VjYW1fb3BzKTsKPiAgI2lmIGRlZmluZWQoQ09ORklHX0FDUEkpICYmIGRlZmlu ZWQoQ09ORklHX1BDSV9RVUlSS1MpCj4gIC8qIEVDQU0gb3BzIGZvciAzMi1iaXQgYWNjZXNzIG9u bHkgKG5vbi1jb21wbGlhbnQpICovCj4gIGNvbnN0IHN0cnVjdCBwY2lfZWNhbV9vcHMgcGNpXzMy Yl9vcHMgPSB7Cj4gLQkuYnVzX3NoaWZ0CT0gMjAsCj4gKwkuYnVzX3NoaWZ0CT0gUENJRV9FQ0FN X0JVU19TSElGVCwKPiAgCS5wY2lfb3BzCT0gewo+ICAJCS5tYXBfYnVzCT0gcGNpX2VjYW1fbWFw X2J1cywKPiAgCQkucmVhZAkJPSBwY2lfZ2VuZXJpY19jb25maWdfcmVhZDMyLAo+IGRpZmYgLS1n aXQgYS9pbmNsdWRlL2xpbnV4L3BjaS1lY2FtLmggYi9pbmNsdWRlL2xpbnV4L3BjaS1lY2FtLmgK PiBpbmRleCAxYWY1Y2IwMmVmN2YuLjU4YTVkNWUyZTgzMSAxMDA2NDQKPiAtLS0gYS9pbmNsdWRl L2xpbnV4L3BjaS1lY2FtLmgKPiArKysgYi9pbmNsdWRlL2xpbnV4L3BjaS1lY2FtLmgKPiBAQCAt OSw2ICs5LDE0IEBACj4gICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KPiAgI2luY2x1ZGUgPGxp bnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ICAKPiArLyoKPiArICogTWVtb3J5IGFkZHJlc3Mgc2hp ZnQgdmFsdWVzIGZvciB0aGUgYnl0ZS1sZXZlbCBhZGRyZXNzIHRoYXQKPiArICogY2FuIGJlIHVz ZWQgd2hlbiBhY2Nlc3NpbmcgdGhlIFBDSSBFeHByZXNzIENvbmZpZ3VyYXRpb24gU3BhY2UuCj4g KyAqLwo+ICsjZGVmaW5lIFBDSUVfRUNBTV9GVU5fU0hJRlQJMTIJLyogRnVuY3Rpb24gTnVtYmVy ICovCj4gKyNkZWZpbmUgUENJRV9FQ0FNX0RFVl9TSElGVAkxNQkvKiBEZXZpY2UgTnVtYmVyICov Cj4gKyNkZWZpbmUgUENJRV9FQ0FNX0JVU19TSElGVAkyMAkvKiBCdXMgTnVtYmVyICovCj4gKwo+ ICAvKgo+ICAgKiBzdHJ1Y3QgdG8gaG9sZCBwY2kgb3BzIGFuZCBidXMgc2hpZnQgb2YgdGhlIGNv bmZpZyB3aW5kb3cKPiAgICogZm9yIGEgUENJIGNvbnRyb2xsZXIuCgoKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGlu ZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMu aW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK