From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4A0006DD1C; Thu, 8 Feb 2024 09:53:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707386034; cv=none; b=tfRWodgIYEaa4RWzJWRxatproWMX2Z9MCg8ujnGE9EMcpCWYlp3xCxnXJzcHLyTdFu29LoTAfFeATj1REy7Px23HYcWSjYQd+N3PSOg/GCMOYAUivAEFnSQ3RJqHg2BZ3e6ceTlCKQPDOsxsn0NGI0zoRt0RbnF67HDK4WqhMZw= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707386034; c=relaxed/simple; bh=nbfg0Gx52d/qcbW7/rm/yJ54WM1bD93/zqjyFrQALIQ=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=Ma8hlx4aqMAl/d09t9Q1Oi2cbxNWq7g6iSiykoXoXgoeTKU7vwXEPu5sFLe6Pqnjmp5vvvi1rP8SFgMPYdD4EhC9tZNk47fwbssgeRIa1BJjhkyXSWnU5qXSVyrB05Q92SdhMSSO1s6eHc01g86FgbFnw8TqyVo6am4F73TVR24= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=RQi+rpdI; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="RQi+rpdI" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6A331C433C7; Thu, 8 Feb 2024 09:53:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1707386033; bh=nbfg0Gx52d/qcbW7/rm/yJ54WM1bD93/zqjyFrQALIQ=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=RQi+rpdI22K+N6hKk7cWedZtbH5ITgmMjh65WTq8PO30GUPourd3yKw6ZR0fH6ylw LF8N+W94jek1r8JR87VILyd0ep1JfHefWx+tzNKbQXMR7GkD6dAXY0jpcJbxhzWZD8 vaG6+NWeeVgN2W2dAHuZMVkzpQN7mEJ1YuarUQ2dusR9aD5AvTU6WFcM+vPxPkjoSg 56UqDsNjNYLpUb11ZvzY2McnxmcJGSnUDV75d9+UMEGLKWFaoxgOppRRaKH0xfVc63 dSLqsgAxYTGXEQE3Tl2eRcsZ0N+dublcOWs2q1UuwvbALZbBZBiQTkhj7PhBF7HPc/ /aL8ew+rYMBXw== Date: Thu, 8 Feb 2024 09:53:48 +0000 From: Simon Horman To: Jon Hunter Cc: Furong Xu <0x1207@gmail.com>, "David S. Miller" , Alexandre Torgue , Jose Abreu , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Maxime Coquelin , Joao Pinto , Serge Semin , netdev@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, xfr@outlook.com, rock.xu@nio.com, "linux-tegra@vger.kernel.org" Subject: Re: [PATCH net v4] net: stmmac: xgmac: fix handling of DPP safety error for DMA channels Message-ID: <20240208095348.GA1435458@kernel.org> References: <20240203051439.1127090-1-0x1207@gmail.com> <20240208092627.GP1297511@kernel.org> Precedence: bulk X-Mailing-List: linux-tegra@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: <20240208092627.GP1297511@kernel.org> On Thu, Feb 08, 2024 at 09:26:27AM +0000, Simon Horman wrote: > On Wed, Feb 07, 2024 at 11:56:26AM +0000, Jon Hunter wrote: > > > > On 03/02/2024 05:14, Furong Xu wrote: > > > Commit 56e58d6c8a56 ("net: stmmac: Implement Safety Features in > > > XGMAC core") checks and reports safety errors, but leaves the > > > Data Path Parity Errors for each channel in DMA unhandled at all, lead to > > > a storm of interrupt. > > > Fix it by checking and clearing the DMA_DPP_Interrupt_Status register. > > > > > > Fixes: 56e58d6c8a56 ("net: stmmac: Implement Safety Features in XGMAC core") > > > Signed-off-by: Furong Xu <0x1207@gmail.com> > > > Reviewed-by: Simon Horman > > > Reviewed-by: Serge Semin > > > --- > > > Changes in v4: > > > - fix a typo name of DDPP bit, thanks Serge Semin > > > > > > Changes in v3: > > > - code style fix, thanks Paolo Abeni > > > > > > Changes in v2: > > > - explicit enable Data Path Parity Protection > > > - add new counters to stmmac_safety_stats > > > - add detailed log > > > --- > > > drivers/net/ethernet/stmicro/stmmac/common.h | 1 + > > > .../net/ethernet/stmicro/stmmac/dwxgmac2.h | 3 + > > > .../ethernet/stmicro/stmmac/dwxgmac2_core.c | 57 ++++++++++++++++++- > > > 3 files changed, 60 insertions(+), 1 deletion(-) > > > > > > diff --git a/drivers/net/ethernet/stmicro/stmmac/common.h b/drivers/net/ethernet/stmicro/stmmac/common.h > > > index 721c1f8e892f..b4f60ab078d6 100644 > > > --- a/drivers/net/ethernet/stmicro/stmmac/common.h > > > +++ b/drivers/net/ethernet/stmicro/stmmac/common.h > > > @@ -216,6 +216,7 @@ struct stmmac_safety_stats { > > > unsigned long mac_errors[32]; > > > unsigned long mtl_errors[32]; > > > unsigned long dma_errors[32]; > > > + unsigned long dma_dpp_errors[32]; > > > }; > > > /* Number of fields in Safety Stats */ > > > diff --git a/drivers/net/ethernet/stmicro/stmmac/dwxgmac2.h b/drivers/net/ethernet/stmicro/stmmac/dwxgmac2.h > > > index 207ff1799f2c..5c67a3f89f08 100644 > > > --- a/drivers/net/ethernet/stmicro/stmmac/dwxgmac2.h > > > +++ b/drivers/net/ethernet/stmicro/stmmac/dwxgmac2.h > > > @@ -303,6 +303,8 @@ > > > #define XGMAC_RXCEIE BIT(4) > > > #define XGMAC_TXCEIE BIT(0) > > > #define XGMAC_MTL_ECC_INT_STATUS 0x000010cc > > > +#define XGMAC_MTL_DPP_CONTROL 0x000010e0 > > > +#define XGMAC_DPP_DISABLE BIT(0) > > > #define XGMAC_MTL_TXQ_OPMODE(x) (0x00001100 + (0x80 * (x))) > > > #define XGMAC_TQS GENMASK(25, 16) > > > #define XGMAC_TQS_SHIFT 16 > > > @@ -385,6 +387,7 @@ > > > #define XGMAC_DCEIE BIT(1) > > > #define XGMAC_TCEIE BIT(0) > > > #define XGMAC_DMA_ECC_INT_STATUS 0x0000306c > > > +#define XGMAC_DMA_DPP_INT_STATUS 0x00003074 > > > #define XGMAC_DMA_CH_CONTROL(x) (0x00003100 + (0x80 * (x))) > > > #define XGMAC_SPH BIT(24) > > > #define XGMAC_PBLx8 BIT(16) > > > diff --git a/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_core.c b/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_core.c > > > index eb48211d9b0e..04d7c4dc2e35 100644 > > > --- a/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_core.c > > > +++ b/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_core.c > > > @@ -830,6 +830,43 @@ static const struct dwxgmac3_error_desc dwxgmac3_dma_errors[32]= { > > > { false, "UNKNOWN", "Unknown Error" }, /* 31 */ > > > }; > > > +static const char * const dpp_rx_err = "Read Rx Descriptor Parity checker Error"; > > > +static const char * const dpp_tx_err = "Read Tx Descriptor Parity checker Error"; > > > +static const struct dwxgmac3_error_desc dwxgmac3_dma_dpp_errors[32] = { > > > + { true, "TDPES0", dpp_tx_err }, > > > + { true, "TDPES1", dpp_tx_err }, > > > + { true, "TDPES2", dpp_tx_err }, > > > + { true, "TDPES3", dpp_tx_err }, > > > + { true, "TDPES4", dpp_tx_err }, > > > + { true, "TDPES5", dpp_tx_err }, > > > + { true, "TDPES6", dpp_tx_err }, > > > + { true, "TDPES7", dpp_tx_err }, > > > + { true, "TDPES8", dpp_tx_err }, > > > + { true, "TDPES9", dpp_tx_err }, > > > + { true, "TDPES10", dpp_tx_err }, > > > + { true, "TDPES11", dpp_tx_err }, > > > + { true, "TDPES12", dpp_tx_err }, > > > + { true, "TDPES13", dpp_tx_err }, > > > + { true, "TDPES14", dpp_tx_err }, > > > + { true, "TDPES15", dpp_tx_err }, > > > + { true, "RDPES0", dpp_rx_err }, > > > + { true, "RDPES1", dpp_rx_err }, > > > + { true, "RDPES2", dpp_rx_err }, > > > + { true, "RDPES3", dpp_rx_err }, > > > + { true, "RDPES4", dpp_rx_err }, > > > + { true, "RDPES5", dpp_rx_err }, > > > + { true, "RDPES6", dpp_rx_err }, > > > + { true, "RDPES7", dpp_rx_err }, > > > + { true, "RDPES8", dpp_rx_err }, > > > + { true, "RDPES9", dpp_rx_err }, > > > + { true, "RDPES10", dpp_rx_err }, > > > + { true, "RDPES11", dpp_rx_err }, > > > + { true, "RDPES12", dpp_rx_err }, > > > + { true, "RDPES13", dpp_rx_err }, > > > + { true, "RDPES14", dpp_rx_err }, > > > + { true, "RDPES15", dpp_rx_err }, > > > +}; > > > + > > > static void dwxgmac3_handle_dma_err(struct net_device *ndev, > > > void __iomem *ioaddr, bool correctable, > > > struct stmmac_safety_stats *stats) > > > @@ -841,6 +878,13 @@ static void dwxgmac3_handle_dma_err(struct net_device *ndev, > > > dwxgmac3_log_error(ndev, value, correctable, "DMA", > > > dwxgmac3_dma_errors, STAT_OFF(dma_errors), stats); > > > + > > > + value = readl(ioaddr + XGMAC_DMA_DPP_INT_STATUS); > > > + writel(value, ioaddr + XGMAC_DMA_DPP_INT_STATUS); > > > + > > > + dwxgmac3_log_error(ndev, value, false, "DMA_DPP", > > > + dwxgmac3_dma_dpp_errors, > > > + STAT_OFF(dma_dpp_errors), stats); > > > } > > > static int > > > @@ -881,6 +925,12 @@ dwxgmac3_safety_feat_config(void __iomem *ioaddr, unsigned int asp, > > > value |= XGMAC_TMOUTEN; /* FSM Timeout Feature */ > > > writel(value, ioaddr + XGMAC_MAC_FSM_CONTROL); > > > + /* 5. Enable Data Path Parity Protection */ > > > + value = readl(ioaddr + XGMAC_MTL_DPP_CONTROL); > > > + /* already enabled by default, explicit enable it again */ > > > + value &= ~XGMAC_DPP_DISABLE; > > > + writel(value, ioaddr + XGMAC_MTL_DPP_CONTROL); > > > + > > > return 0; > > > } > > > @@ -914,7 +964,11 @@ static int dwxgmac3_safety_feat_irq_status(struct net_device *ndev, > > > ret |= !corr; > > > } > > > - err = dma & (XGMAC_DEUIS | XGMAC_DECIS); > > > + /* DMA_DPP_Interrupt_Status is indicated by MCSIS bit in > > > + * DMA_Safety_Interrupt_Status, so we handle DMA Data Path > > > + * Parity Errors here > > > + */ > > > + err = dma & (XGMAC_DEUIS | XGMAC_DECIS | XGMAC_MCSIS); > > > corr = dma & XGMAC_DECIS; > > > if (err) { > > > dwxgmac3_handle_dma_err(ndev, ioaddr, corr, stats); > > > @@ -930,6 +984,7 @@ static const struct dwxgmac3_error { > > > { dwxgmac3_mac_errors }, > > > { dwxgmac3_mtl_errors }, > > > { dwxgmac3_dma_errors }, > > > + { dwxgmac3_dma_dpp_errors }, > > > }; > > > static int dwxgmac3_safety_feat_dump(struct stmmac_safety_stats *stats, > > > > > > This change is breaking the build on some of our builders that are still using GCC 6.x ... > > > > drivers/net/ethernet/stmicro/stmmac/dwxgmac2_core.c:836:20: error: initialiser element is not constant > > { true, "TDPES0", dpp_tx_err }, > > ^~~~~~~~~~ > > drivers/net/ethernet/stmicro/stmmac/dwxgmac2_core.c:836:20: note: (near initialisation for ‘dwxgmac3_dma_dpp_errors[0].detailed_desc’) > > drivers/net/ethernet/stmicro/stmmac/dwxgmac2_core.c:837:20: error: initialiser element is not constant > > { true, "TDPES1", dpp_tx_err }, > > ^~~~~~~~~~ > > drivers/net/ethernet/stmicro/stmmac/dwxgmac2_core.c:837:20: note: (near initialisation for ‘dwxgmac3_dma_dpp_errors[1].detailed_desc’) > > ... > > > > I know that this is quite old but the minimum supported by the kernel is v5.1 ... > > > > https://www.kernel.org/doc/html/next/process/changes.html > > Thanks Jon, > > I separately received a notification about this occurring with gcc 7. > > https://lore.kernel.org/oe-kbuild-all/202402081135.lAxxBXHk-lkp@intel.com/ > > It is unclear to me why this occurs, as dpp_tx_err and dpp_tx_err are const. > But I do seem to be able to address this problem by using #defines for > these values instead. > > I plan to post a patch shortly. Patch posted: - [PATCH net] net: stmmac: xgmac: use #define for string constants https://lore.kernel.org/netdev/20240208-xgmac-const-v1-1-e69a1eeabfc8@kernel.org/ 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 D7F71C48260 for ; Thu, 8 Feb 2024 09:54:08 +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=MtfMslDTWC0cRo5h1AM5ExwTQzU242kkbLOtWvNJUMY=; b=MI6Gi6WIRpP2Rv n1eem6u3FEPilGGAb3erppDn/3VakBYk0Uh6IIL4Hyc1UA7eSfUW7U8DYCKjWlRFT/+F3CwHpXpd3 2rQRNCbPy/X6nBG7V1T/Y07nu50yPCz3+dC0HWSdOJxmH8JM41sKfmmi46DtCaHOYZj9I2QVUdjOj 1lcCJDUrWwDVu/ahdw+QlVd7e0F65WaIjSwFBdGhXwWkmI5kW+HgVCvy7JmdYSyCBYxSjZoOaNsXI 43J3MXL93zfWNt/PZPlVTpGkobhrtkp8wjk6zKxq6DdQIlgKMEitpeoXuHkjmn+RvPlfN7T1oidVW U7XOp31EXVJvvHZdFzpw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rY16V-0000000DG1O-1AEN; Thu, 08 Feb 2024 09:53:59 +0000 Received: from sin.source.kernel.org ([2604:1380:40e1:4800::1]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rY16S-0000000DG0b-0y8S for linux-arm-kernel@lists.infradead.org; Thu, 08 Feb 2024 09:53:57 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id 29F5DCE1BC6; Thu, 8 Feb 2024 09:53:54 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6A331C433C7; Thu, 8 Feb 2024 09:53:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1707386033; bh=nbfg0Gx52d/qcbW7/rm/yJ54WM1bD93/zqjyFrQALIQ=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=RQi+rpdI22K+N6hKk7cWedZtbH5ITgmMjh65WTq8PO30GUPourd3yKw6ZR0fH6ylw LF8N+W94jek1r8JR87VILyd0ep1JfHefWx+tzNKbQXMR7GkD6dAXY0jpcJbxhzWZD8 vaG6+NWeeVgN2W2dAHuZMVkzpQN7mEJ1YuarUQ2dusR9aD5AvTU6WFcM+vPxPkjoSg 56UqDsNjNYLpUb11ZvzY2McnxmcJGSnUDV75d9+UMEGLKWFaoxgOppRRaKH0xfVc63 dSLqsgAxYTGXEQE3Tl2eRcsZ0N+dublcOWs2q1UuwvbALZbBZBiQTkhj7PhBF7HPc/ /aL8ew+rYMBXw== Date: Thu, 8 Feb 2024 09:53:48 +0000 From: Simon Horman To: Jon Hunter Cc: Furong Xu <0x1207@gmail.com>, "David S. Miller" , Alexandre Torgue , Jose Abreu , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Maxime Coquelin , Joao Pinto , Serge Semin , netdev@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, xfr@outlook.com, rock.xu@nio.com, "linux-tegra@vger.kernel.org" Subject: Re: [PATCH net v4] net: stmmac: xgmac: fix handling of DPP safety error for DMA channels Message-ID: <20240208095348.GA1435458@kernel.org> References: <20240203051439.1127090-1-0x1207@gmail.com> <20240208092627.GP1297511@kernel.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20240208092627.GP1297511@kernel.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240208_015356_649151_3FA5DEDD X-CRM114-Status: GOOD ( 37.63 ) 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 T24gVGh1LCBGZWIgMDgsIDIwMjQgYXQgMDk6MjY6MjdBTSArMDAwMCwgU2ltb24gSG9ybWFuIHdy b3RlOgo+IE9uIFdlZCwgRmViIDA3LCAyMDI0IGF0IDExOjU2OjI2QU0gKzAwMDAsIEpvbiBIdW50 ZXIgd3JvdGU6Cj4gPiAKPiA+IE9uIDAzLzAyLzIwMjQgMDU6MTQsIEZ1cm9uZyBYdSB3cm90ZToK PiA+ID4gQ29tbWl0IDU2ZTU4ZDZjOGE1NiAoIm5ldDogc3RtbWFjOiBJbXBsZW1lbnQgU2FmZXR5 IEZlYXR1cmVzIGluCj4gPiA+IFhHTUFDIGNvcmUiKSBjaGVja3MgYW5kIHJlcG9ydHMgc2FmZXR5 IGVycm9ycywgYnV0IGxlYXZlcyB0aGUKPiA+ID4gRGF0YSBQYXRoIFBhcml0eSBFcnJvcnMgZm9y IGVhY2ggY2hhbm5lbCBpbiBETUEgdW5oYW5kbGVkIGF0IGFsbCwgbGVhZCB0bwo+ID4gPiBhIHN0 b3JtIG9mIGludGVycnVwdC4KPiA+ID4gRml4IGl0IGJ5IGNoZWNraW5nIGFuZCBjbGVhcmluZyB0 aGUgRE1BX0RQUF9JbnRlcnJ1cHRfU3RhdHVzIHJlZ2lzdGVyLgo+ID4gPiAKPiA+ID4gRml4ZXM6 IDU2ZTU4ZDZjOGE1NiAoIm5ldDogc3RtbWFjOiBJbXBsZW1lbnQgU2FmZXR5IEZlYXR1cmVzIGlu IFhHTUFDIGNvcmUiKQo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBGdXJvbmcgWHUgPDB4MTIwN0BnbWFp bC5jb20+Cj4gPiA+IFJldmlld2VkLWJ5OiBTaW1vbiBIb3JtYW4gPGhvcm1zQGtlcm5lbC5vcmc+ Cj4gPiA+IFJldmlld2VkLWJ5OiBTZXJnZSBTZW1pbiA8ZmFuY2VyLmxhbmNlckBnbWFpbC5jb20+ Cj4gPiA+IC0tLQo+ID4gPiBDaGFuZ2VzIGluIHY0Ogo+ID4gPiAgIC0gZml4IGEgdHlwbyBuYW1l IG9mIEREUFAgYml0LCB0aGFua3MgU2VyZ2UgU2VtaW4KPiA+ID4gCj4gPiA+IENoYW5nZXMgaW4g djM6Cj4gPiA+ICAgLSBjb2RlIHN0eWxlIGZpeCwgdGhhbmtzIFBhb2xvIEFiZW5pCj4gPiA+IAo+ ID4gPiBDaGFuZ2VzIGluIHYyOgo+ID4gPiAgICAtIGV4cGxpY2l0IGVuYWJsZSBEYXRhIFBhdGgg UGFyaXR5IFByb3RlY3Rpb24KPiA+ID4gICAgLSBhZGQgbmV3IGNvdW50ZXJzIHRvIHN0bW1hY19z YWZldHlfc3RhdHMKPiA+ID4gICAgLSBhZGQgZGV0YWlsZWQgbG9nCj4gPiA+IC0tLQo+ID4gPiAg IGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2NvbW1vbi5oICB8ICAxICsKPiA+ ID4gICAuLi4vbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmggICAgfCAgMyAr Cj4gPiA+ICAgLi4uL2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2NvcmUuYyAgIHwg NTcgKysrKysrKysrKysrKysrKysrLQo+ID4gPiAgIDMgZmlsZXMgY2hhbmdlZCwgNjAgaW5zZXJ0 aW9ucygrKSwgMSBkZWxldGlvbigtKQo+ID4gPiAKPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv bmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJu ZXQvc3RtaWNyby9zdG1tYWMvY29tbW9uLmgKPiA+ID4gaW5kZXggNzIxYzFmOGU4OTJmLi5iNGY2 MGFiMDc4ZDYgMTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8v c3RtbWFjL2NvbW1vbi5oCj4gPiA+ICsrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8v c3RtbWFjL2NvbW1vbi5oCj4gPiA+IEBAIC0yMTYsNiArMjE2LDcgQEAgc3RydWN0IHN0bW1hY19z YWZldHlfc3RhdHMgewo+ID4gPiAgIAl1bnNpZ25lZCBsb25nIG1hY19lcnJvcnNbMzJdOwo+ID4g PiAgIAl1bnNpZ25lZCBsb25nIG10bF9lcnJvcnNbMzJdOwo+ID4gPiAgIAl1bnNpZ25lZCBsb25n IGRtYV9lcnJvcnNbMzJdOwo+ID4gPiArCXVuc2lnbmVkIGxvbmcgZG1hX2RwcF9lcnJvcnNbMzJd Owo+ID4gPiAgIH07Cj4gPiA+ICAgLyogTnVtYmVyIG9mIGZpZWxkcyBpbiBTYWZldHkgU3RhdHMg Ki8KPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFj L2R3eGdtYWMyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFj Mi5oCj4gPiA+IGluZGV4IDIwN2ZmMTc5OWYyYy4uNWM2N2EzZjg5ZjA4IDEwMDY0NAo+ID4gPiAt LS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMi5oCj4gPiA+ ICsrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyLmgKPiA+ ID4gQEAgLTMwMyw2ICszMDMsOCBAQAo+ID4gPiAgICNkZWZpbmUgWEdNQUNfUlhDRUlFCQkJQklU KDQpCj4gPiA+ICAgI2RlZmluZSBYR01BQ19UWENFSUUJCQlCSVQoMCkKPiA+ID4gICAjZGVmaW5l IFhHTUFDX01UTF9FQ0NfSU5UX1NUQVRVUwkweDAwMDAxMGNjCj4gPiA+ICsjZGVmaW5lIFhHTUFD X01UTF9EUFBfQ09OVFJPTAkJMHgwMDAwMTBlMAo+ID4gPiArI2RlZmluZSBYR01BQ19EUFBfRElT QUJMRQkJQklUKDApCj4gPiA+ICAgI2RlZmluZSBYR01BQ19NVExfVFhRX09QTU9ERSh4KQkJKDB4 MDAwMDExMDAgKyAoMHg4MCAqICh4KSkpCj4gPiA+ICAgI2RlZmluZSBYR01BQ19UUVMJCQlHRU5N QVNLKDI1LCAxNikKPiA+ID4gICAjZGVmaW5lIFhHTUFDX1RRU19TSElGVAkJCTE2Cj4gPiA+IEBA IC0zODUsNiArMzg3LDcgQEAKPiA+ID4gICAjZGVmaW5lIFhHTUFDX0RDRUlFCQkJQklUKDEpCj4g PiA+ICAgI2RlZmluZSBYR01BQ19UQ0VJRQkJCUJJVCgwKQo+ID4gPiAgICNkZWZpbmUgWEdNQUNf RE1BX0VDQ19JTlRfU1RBVFVTCTB4MDAwMDMwNmMKPiA+ID4gKyNkZWZpbmUgWEdNQUNfRE1BX0RQ UF9JTlRfU1RBVFVTCTB4MDAwMDMwNzQKPiA+ID4gICAjZGVmaW5lIFhHTUFDX0RNQV9DSF9DT05U Uk9MKHgpCQkoMHgwMDAwMzEwMCArICgweDgwICogKHgpKSkKPiA+ID4gICAjZGVmaW5lIFhHTUFD X1NQSAkJCUJJVCgyNCkKPiA+ID4gICAjZGVmaW5lIFhHTUFDX1BCTHg4CQkJQklUKDE2KQo+ID4g PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21h YzJfY29yZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJf Y29yZS5jCj4gPiA+IGluZGV4IGViNDgyMTFkOWIwZS4uMDRkN2M0ZGMyZTM1IDEwMDY0NAo+ID4g PiAtLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd3hnbWFjMl9jb3Jl LmMKPiA+ID4gKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21h YzJfY29yZS5jCj4gPiA+IEBAIC04MzAsNiArODMwLDQzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHd4Z21hYzNfZXJyb3JfZGVzYyBkd3hnbWFjM19kbWFfZXJyb3JzWzMyXT0gewo+ID4gPiAgIAl7 IGZhbHNlLCAiVU5LTk9XTiIsICJVbmtub3duIEVycm9yIiB9LCAvKiAzMSAqLwo+ID4gPiAgIH07 Cj4gPiA+ICtzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRwcF9yeF9lcnIgPSAiUmVhZCBSeCBE ZXNjcmlwdG9yIFBhcml0eSBjaGVja2VyIEVycm9yIjsKPiA+ID4gK3N0YXRpYyBjb25zdCBjaGFy ICogY29uc3QgZHBwX3R4X2VyciA9ICJSZWFkIFR4IERlc2NyaXB0b3IgUGFyaXR5IGNoZWNrZXIg RXJyb3IiOwo+ID4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkd3hnbWFjM19lcnJvcl9kZXNjIGR3 eGdtYWMzX2RtYV9kcHBfZXJyb3JzWzMyXSA9IHsKPiA+ID4gKwl7IHRydWUsICJURFBFUzAiLCBk cHBfdHhfZXJyIH0sCj4gPiA+ICsJeyB0cnVlLCAiVERQRVMxIiwgZHBwX3R4X2VyciB9LAo+ID4g PiArCXsgdHJ1ZSwgIlREUEVTMiIsIGRwcF90eF9lcnIgfSwKPiA+ID4gKwl7IHRydWUsICJURFBF UzMiLCBkcHBfdHhfZXJyIH0sCj4gPiA+ICsJeyB0cnVlLCAiVERQRVM0IiwgZHBwX3R4X2VyciB9 LAo+ID4gPiArCXsgdHJ1ZSwgIlREUEVTNSIsIGRwcF90eF9lcnIgfSwKPiA+ID4gKwl7IHRydWUs ICJURFBFUzYiLCBkcHBfdHhfZXJyIH0sCj4gPiA+ICsJeyB0cnVlLCAiVERQRVM3IiwgZHBwX3R4 X2VyciB9LAo+ID4gPiArCXsgdHJ1ZSwgIlREUEVTOCIsIGRwcF90eF9lcnIgfSwKPiA+ID4gKwl7 IHRydWUsICJURFBFUzkiLCBkcHBfdHhfZXJyIH0sCj4gPiA+ICsJeyB0cnVlLCAiVERQRVMxMCIs IGRwcF90eF9lcnIgfSwKPiA+ID4gKwl7IHRydWUsICJURFBFUzExIiwgZHBwX3R4X2VyciB9LAo+ ID4gPiArCXsgdHJ1ZSwgIlREUEVTMTIiLCBkcHBfdHhfZXJyIH0sCj4gPiA+ICsJeyB0cnVlLCAi VERQRVMxMyIsIGRwcF90eF9lcnIgfSwKPiA+ID4gKwl7IHRydWUsICJURFBFUzE0IiwgZHBwX3R4 X2VyciB9LAo+ID4gPiArCXsgdHJ1ZSwgIlREUEVTMTUiLCBkcHBfdHhfZXJyIH0sCj4gPiA+ICsJ eyB0cnVlLCAiUkRQRVMwIiwgZHBwX3J4X2VyciB9LAo+ID4gPiArCXsgdHJ1ZSwgIlJEUEVTMSIs IGRwcF9yeF9lcnIgfSwKPiA+ID4gKwl7IHRydWUsICJSRFBFUzIiLCBkcHBfcnhfZXJyIH0sCj4g PiA+ICsJeyB0cnVlLCAiUkRQRVMzIiwgZHBwX3J4X2VyciB9LAo+ID4gPiArCXsgdHJ1ZSwgIlJE UEVTNCIsIGRwcF9yeF9lcnIgfSwKPiA+ID4gKwl7IHRydWUsICJSRFBFUzUiLCBkcHBfcnhfZXJy IH0sCj4gPiA+ICsJeyB0cnVlLCAiUkRQRVM2IiwgZHBwX3J4X2VyciB9LAo+ID4gPiArCXsgdHJ1 ZSwgIlJEUEVTNyIsIGRwcF9yeF9lcnIgfSwKPiA+ID4gKwl7IHRydWUsICJSRFBFUzgiLCBkcHBf cnhfZXJyIH0sCj4gPiA+ICsJeyB0cnVlLCAiUkRQRVM5IiwgZHBwX3J4X2VyciB9LAo+ID4gPiAr CXsgdHJ1ZSwgIlJEUEVTMTAiLCBkcHBfcnhfZXJyIH0sCj4gPiA+ICsJeyB0cnVlLCAiUkRQRVMx MSIsIGRwcF9yeF9lcnIgfSwKPiA+ID4gKwl7IHRydWUsICJSRFBFUzEyIiwgZHBwX3J4X2VyciB9 LAo+ID4gPiArCXsgdHJ1ZSwgIlJEUEVTMTMiLCBkcHBfcnhfZXJyIH0sCj4gPiA+ICsJeyB0cnVl LCAiUkRQRVMxNCIsIGRwcF9yeF9lcnIgfSwKPiA+ID4gKwl7IHRydWUsICJSRFBFUzE1IiwgZHBw X3J4X2VyciB9LAo+ID4gPiArfTsKPiA+ID4gKwo+ID4gPiAgIHN0YXRpYyB2b2lkIGR3eGdtYWMz X2hhbmRsZV9kbWFfZXJyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAo+ID4gPiAgIAkJCQkgICAg dm9pZCBfX2lvbWVtICppb2FkZHIsIGJvb2wgY29ycmVjdGFibGUsCj4gPiA+ICAgCQkJCSAgICBz dHJ1Y3Qgc3RtbWFjX3NhZmV0eV9zdGF0cyAqc3RhdHMpCj4gPiA+IEBAIC04NDEsNiArODc4LDEz IEBAIHN0YXRpYyB2b2lkIGR3eGdtYWMzX2hhbmRsZV9kbWFfZXJyKHN0cnVjdCBuZXRfZGV2aWNl ICpuZGV2LAo+ID4gPiAgIAlkd3hnbWFjM19sb2dfZXJyb3IobmRldiwgdmFsdWUsIGNvcnJlY3Rh YmxlLCAiRE1BIiwKPiA+ID4gICAJCQkgICBkd3hnbWFjM19kbWFfZXJyb3JzLCBTVEFUX09GRihk bWFfZXJyb3JzKSwgc3RhdHMpOwo+ID4gPiArCj4gPiA+ICsJdmFsdWUgPSByZWFkbChpb2FkZHIg KyBYR01BQ19ETUFfRFBQX0lOVF9TVEFUVVMpOwo+ID4gPiArCXdyaXRlbCh2YWx1ZSwgaW9hZGRy ICsgWEdNQUNfRE1BX0RQUF9JTlRfU1RBVFVTKTsKPiA+ID4gKwo+ID4gPiArCWR3eGdtYWMzX2xv Z19lcnJvcihuZGV2LCB2YWx1ZSwgZmFsc2UsICJETUFfRFBQIiwKPiA+ID4gKwkJCSAgIGR3eGdt YWMzX2RtYV9kcHBfZXJyb3JzLAo+ID4gPiArCQkJICAgU1RBVF9PRkYoZG1hX2RwcF9lcnJvcnMp LCBzdGF0cyk7Cj4gPiA+ICAgfQo+ID4gPiAgIHN0YXRpYyBpbnQKPiA+ID4gQEAgLTg4MSw2ICs5 MjUsMTIgQEAgZHd4Z21hYzNfc2FmZXR5X2ZlYXRfY29uZmlnKHZvaWQgX19pb21lbSAqaW9hZGRy LCB1bnNpZ25lZCBpbnQgYXNwLAo+ID4gPiAgIAl2YWx1ZSB8PSBYR01BQ19UTU9VVEVOOyAvKiBG U00gVGltZW91dCBGZWF0dXJlICovCj4gPiA+ICAgCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgWEdN QUNfTUFDX0ZTTV9DT05UUk9MKTsKPiA+ID4gKwkvKiA1LiBFbmFibGUgRGF0YSBQYXRoIFBhcml0 eSBQcm90ZWN0aW9uICovCj4gPiA+ICsJdmFsdWUgPSByZWFkbChpb2FkZHIgKyBYR01BQ19NVExf RFBQX0NPTlRST0wpOwo+ID4gPiArCS8qIGFscmVhZHkgZW5hYmxlZCBieSBkZWZhdWx0LCBleHBs aWNpdCBlbmFibGUgaXQgYWdhaW4gKi8KPiA+ID4gKwl2YWx1ZSAmPSB+WEdNQUNfRFBQX0RJU0FC TEU7Cj4gPiA+ICsJd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBYR01BQ19NVExfRFBQX0NPTlRST0wp Owo+ID4gPiArCj4gPiA+ICAgCXJldHVybiAwOwo+ID4gPiAgIH0KPiA+ID4gQEAgLTkxNCw3ICs5 NjQsMTEgQEAgc3RhdGljIGludCBkd3hnbWFjM19zYWZldHlfZmVhdF9pcnFfc3RhdHVzKHN0cnVj dCBuZXRfZGV2aWNlICpuZGV2LAo+ID4gPiAgIAkJcmV0IHw9ICFjb3JyOwo+ID4gPiAgIAl9Cj4g PiA+IC0JZXJyID0gZG1hICYgKFhHTUFDX0RFVUlTIHwgWEdNQUNfREVDSVMpOwo+ID4gPiArCS8q IERNQV9EUFBfSW50ZXJydXB0X1N0YXR1cyBpcyBpbmRpY2F0ZWQgYnkgTUNTSVMgYml0IGluCj4g PiA+ICsJICogRE1BX1NhZmV0eV9JbnRlcnJ1cHRfU3RhdHVzLCBzbyB3ZSBoYW5kbGUgRE1BIERh dGEgUGF0aAo+ID4gPiArCSAqIFBhcml0eSBFcnJvcnMgaGVyZQo+ID4gPiArCSAqLwo+ID4gPiAr CWVyciA9IGRtYSAmIChYR01BQ19ERVVJUyB8IFhHTUFDX0RFQ0lTIHwgWEdNQUNfTUNTSVMpOwo+ ID4gPiAgIAljb3JyID0gZG1hICYgWEdNQUNfREVDSVM7Cj4gPiA+ICAgCWlmIChlcnIpIHsKPiA+ ID4gICAJCWR3eGdtYWMzX2hhbmRsZV9kbWFfZXJyKG5kZXYsIGlvYWRkciwgY29yciwgc3RhdHMp Owo+ID4gPiBAQCAtOTMwLDYgKzk4NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHd4Z21hYzNf ZXJyb3Igewo+ID4gPiAgIAl7IGR3eGdtYWMzX21hY19lcnJvcnMgfSwKPiA+ID4gICAJeyBkd3hn bWFjM19tdGxfZXJyb3JzIH0sCj4gPiA+ICAgCXsgZHd4Z21hYzNfZG1hX2Vycm9ycyB9LAo+ID4g PiArCXsgZHd4Z21hYzNfZG1hX2RwcF9lcnJvcnMgfSwKPiA+ID4gICB9Owo+ID4gPiAgIHN0YXRp YyBpbnQgZHd4Z21hYzNfc2FmZXR5X2ZlYXRfZHVtcChzdHJ1Y3Qgc3RtbWFjX3NhZmV0eV9zdGF0 cyAqc3RhdHMsCj4gPiAKPiA+IAo+ID4gVGhpcyBjaGFuZ2UgaXMgYnJlYWtpbmcgdGhlIGJ1aWxk IG9uIHNvbWUgb2Ygb3VyIGJ1aWxkZXJzIHRoYXQgYXJlIHN0aWxsIHVzaW5nIEdDQyA2LnggLi4u Cj4gPiAKPiA+IGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3eGdtYWMyX2Nv cmUuYzo4MzY6MjA6IGVycm9yOiBpbml0aWFsaXNlciBlbGVtZW50IGlzIG5vdCBjb25zdGFudAo+ ID4gICB7IHRydWUsICJURFBFUzAiLCBkcHBfdHhfZXJyIH0sCj4gPiAgICAgICAgICAgICAgICAg ICAgIF5+fn5+fn5+fn4KPiA+IGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3 eGdtYWMyX2NvcmUuYzo4MzY6MjA6IG5vdGU6IChuZWFyIGluaXRpYWxpc2F0aW9uIGZvciDigJhk d3hnbWFjM19kbWFfZHBwX2Vycm9yc1swXS5kZXRhaWxlZF9kZXNj4oCZKQo+ID4gZHJpdmVycy9u ZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jOjgzNzoyMDogZXJyb3I6 IGluaXRpYWxpc2VyIGVsZW1lbnQgaXMgbm90IGNvbnN0YW50Cj4gPiAgIHsgdHJ1ZSwgIlREUEVT MSIsIGRwcF90eF9lcnIgfSwKPiA+ICAgICAgICAgICAgICAgICAgICAgXn5+fn5+fn5+fgo+ID4g ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHd4Z21hYzJfY29yZS5jOjgzNzoy MDogbm90ZTogKG5lYXIgaW5pdGlhbGlzYXRpb24gZm9yIOKAmGR3eGdtYWMzX2RtYV9kcHBfZXJy b3JzWzFdLmRldGFpbGVkX2Rlc2PigJkpCj4gPiAuLi4KPiA+IAo+ID4gSSBrbm93IHRoYXQgdGhp cyBpcyBxdWl0ZSBvbGQgYnV0IHRoZSBtaW5pbXVtIHN1cHBvcnRlZCBieSB0aGUga2VybmVsIGlz IHY1LjEgLi4uCj4gPiAKPiA+IGh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL2h0bWwvbmV4dC9w cm9jZXNzL2NoYW5nZXMuaHRtbAo+IAo+IFRoYW5rcyBKb24sCj4gCj4gSSBzZXBhcmF0ZWx5IHJl Y2VpdmVkIGEgbm90aWZpY2F0aW9uIGFib3V0IHRoaXMgb2NjdXJyaW5nIHdpdGggZ2NjIDcuCj4g Cj4gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvb2Uta2J1aWxkLWFsbC8yMDI0MDIwODExMzUubEF4 eEJYSGstbGtwQGludGVsLmNvbS8KPiAKPiBJdCBpcyB1bmNsZWFyIHRvIG1lIHdoeSB0aGlzIG9j Y3VycywgYXMgZHBwX3R4X2VyciBhbmQgZHBwX3R4X2VyciBhcmUgY29uc3QuCj4gQnV0IEkgZG8g c2VlbSB0byBiZSBhYmxlIHRvIGFkZHJlc3MgdGhpcyBwcm9ibGVtIGJ5IHVzaW5nICNkZWZpbmVz IGZvcgo+IHRoZXNlIHZhbHVlcyBpbnN0ZWFkLgo+IAo+IEkgcGxhbiB0byBwb3N0IGEgcGF0Y2gg c2hvcnRseS4KClBhdGNoIHBvc3RlZDoKLSBbUEFUQ0ggbmV0XSBuZXQ6IHN0bW1hYzogeGdtYWM6 IHVzZSAjZGVmaW5lIGZvciBzdHJpbmcgY29uc3RhbnRzCiAgaHR0cHM6Ly9sb3JlLmtlcm5lbC5v cmcvbmV0ZGV2LzIwMjQwMjA4LXhnbWFjLWNvbnN0LXYxLTEtZTY5YTFlZWFiZmM4QGtlcm5lbC5v cmcvCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGlu dXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRl YWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgt YXJtLWtlcm5lbAo=