From mboxrd@z Thu Jan 1 00:00:00 1970 From: Russell King - ARM Linux admin Subject: Re: [EXT] Re: [PATCH] i2c: imx: Defer probing if EDMA not available Date: Wed, 11 Dec 2019 10:43:47 +0000 Message-ID: <20191211104347.GA25745@shell.armlinux.org.uk> References: <20191127071136.5240-1-peng.ma@nxp.com> <20191128100613.GI25745@shell.armlinux.org.uk> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Return-path: Content-Disposition: inline In-Reply-To: Sender: linux-kernel-owner@vger.kernel.org To: Peng Ma Cc: "festevam@gmail.com" , "s.hauer@pengutronix.de" , "linux-kernel@vger.kernel.org" , "linux@rempel-privat.de" , dl-linux-imx , "kernel@pengutronix.de" , "shawnguo@kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-i2c@vger.kernel.org" List-Id: linux-i2c@vger.kernel.org On Wed, Dec 11, 2019 at 10:25:26AM +0000, Peng Ma wrote: > Hi Russell, > > I am sorry to reply late, thanks for your patient reminding, > Please see my comments inline. > > Best Regards, > Peng > >-----Original Message----- > >From: Russell King - ARM Linux admin > >Sent: 2019年11月28日 18:06 > >To: Peng Ma > >Cc: linux@rempel-privat.de; kernel@pengutronix.de; shawnguo@kernel.org; > >s.hauer@pengutronix.de; linux-kernel@vger.kernel.org; dl-linux-imx > >; festevam@gmail.com; > >linux-arm-kernel@lists.infradead.org; linux-i2c@vger.kernel.org > >Subject: [EXT] Re: [PATCH] i2c: imx: Defer probing if EDMA not available > > > >Caution: EXT Email > > > >On Wed, Nov 27, 2019 at 07:12:09AM +0000, Peng Ma wrote: > >> EDMA may be not available or defered due to dependencies on other > >> modules, If these scenarios is encountered, we should defer probing. > > > >This has been tried before in this form, and it causes regressions. > > > >> Signed-off-by: Peng Ma > >> --- > >> drivers/i2c/busses/i2c-imx.c | 16 +++++++++++----- > >> 1 file changed, 11 insertions(+), 5 deletions(-) > >> > >> diff --git a/drivers/i2c/busses/i2c-imx.c > >> b/drivers/i2c/busses/i2c-imx.c index 40111a3..c2b0693 100644 > >> --- a/drivers/i2c/busses/i2c-imx.c > >> +++ b/drivers/i2c/busses/i2c-imx.c > >> @@ -369,8 +369,8 @@ static void i2c_imx_reset_regs(struct > >> imx_i2c_struct *i2c_imx) } > >> > >> /* Functions for DMA support */ > >> -static void i2c_imx_dma_request(struct imx_i2c_struct *i2c_imx, > >> - dma_addr_t > >phy_addr) > >> +static int i2c_imx_dma_request(struct imx_i2c_struct *i2c_imx, > >> + dma_addr_t phy_addr) > >> { > >> struct imx_i2c_dma *dma; > >> struct dma_slave_config dma_sconfig; @@ -379,7 +379,7 @@ static > >> void i2c_imx_dma_request(struct imx_i2c_struct *i2c_imx, > >> > >> dma = devm_kzalloc(dev, sizeof(*dma), GFP_KERNEL); > >> if (!dma) > >> - return; > >> + return -ENOMEM; > >> > >> dma->chan_tx = dma_request_chan(dev, "tx"); > >> if (IS_ERR(dma->chan_tx)) { > >> @@ -424,7 +424,7 @@ static void i2c_imx_dma_request(struct > >imx_i2c_struct *i2c_imx, > >> dev_info(dev, "using %s (tx) and %s (rx) for DMA transfers\n", > >> dma_chan_name(dma->chan_tx), > >> dma_chan_name(dma->chan_rx)); > >> > >> - return; > >> + return 0; > >> > >> fail_rx: > >> dma_release_channel(dma->chan_rx); > >> @@ -432,6 +432,8 @@ static void i2c_imx_dma_request(struct > >imx_i2c_struct *i2c_imx, > >> dma_release_channel(dma->chan_tx); > >> fail_al: > >> devm_kfree(dev, dma); > >> + > >> + return ret; > > > >Some platforms don't have EDMA. Doesn't this force everyone who wants > >I2C to have DMA? The last attempt at this had: > > > > /* return successfully if there is no dma support */ > > return ret == -ENODEV ? 0 : ret; > > > >here because of exactly this. > > > >> } > >> > >> static void i2c_imx_dma_callback(void *arg) @@ -1605,10 +1607,14 @@ > >> static int i2c_imx_probe(struct platform_device *pdev) > >> dev_info(&i2c_imx->adapter.dev, "IMX I2C adapter registered\n"); > >> > >> /* Init DMA config if supported */ > >> - i2c_imx_dma_request(i2c_imx, phy_addr); > >> + ret = i2c_imx_dma_request(i2c_imx, phy_addr); > >> + if (ret == -EPROBE_DEFER) > >> + goto i2c_adapter_remove; > > > >This happens _after_ the adapter has been published to the rest of the kernel. > >Claiming resources after publication is racy - the adapter may be in use by a > >request at this point. Secondly, there's been problems with this causing > >regressions when EDMA is built as a module and i2c-imx is built-in. > > > >See e8c220fac415 ("Revert "i2c: imx: improve the error handling in > >i2c_imx_dma_request()"") when exactly what you're proposing was tried and > >ended up having to be reverted. > > > >AFAIK nothing has changed since, so merely reinstating the known to be broken > >code, thereby reintroducing the same (and more) problems, isn't going to be > >acceptable. > > > >Sorry, but this gets a big NAK from me. > > > [Peng Ma] I saw the revert commit e8c220fac415 and understand your concerns. > I scan the i2c-imx.c driver, All platforms that use i2c driver and support dma use an eDMA engine, > So I change the code(compare with last patch) as follows, please review and give me your precious comments. > Thanks very much. > > diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c > index 12f7934fddb4..6cafee52dd67 100644 > --- a/drivers/i2c/busses/i2c-imx.c > +++ b/drivers/i2c/busses/i2c-imx.c > @@ -1605,8 +1605,11 @@ static int i2c_imx_probe(struct platform_device *pdev) > > /* Init DMA config if supported */ > ret = i2c_imx_dma_request(i2c_imx, phy_addr); > - if (ret == -EPROBE_DEFER) > + if (ret == -EPROBE_DEFER) { > +#if IS_BUILTIN(CONFIG_FSL_EDMA) > goto i2c_adapter_remove; > +#endif > + } You haven't understood _why_ the problem occurs, you're just attempting to patch around it. You're hacking the code, rather than engineering the code. The infinite deferred probe occurs because: - i2c-imx is attempted to be probed. - i2c-imx sets up the hardware, and then calls i2c_add_numbered_adapter() - i2c_add_numbered_adapter() publishes the bus to the world, and then searches DT for any children to create - and it finds some and creates them. - the children devices are matched to their drivers, which bind. This triggers a deferred probe to be scheduled. - back in the i2c-imx driver, we get to i2c_imx_dma_request(), which fails, and you return -EPROBE_DEFER. - the i2c-imx driver probe actions are unwound, and probe exits. - the driver core processes the deferred probe request, finds the i2c-imx device(s) on the deferred probe list, and attempts to probe them. Goto the top of this list. If, for whatever reason, i2c_imx_dma_request() ever returns -EPROBE_DEFER, the above loop WILL happen. The FUNDAMENTAL rule of kernel programming is that you do NOT publish before you have completed setup. i2c-imx violates that rule as the probe function is ordered at present. i2c-imx has been written for i2c_imx_dma_request() to be safe to call after the device has been published, but with the current probe function order, it is unsafe to propagate the EPROBE_DEFER return value for the reason above. For the reason the original attempt got reverted. So, if you want to do this (and yes, I'd also encourage it to be conditional on EDMA being built-in, as I2C is commonly used as a way to get at RTCs, which are read before kernel modules can be loaded) then you MUST move i2c_imx_dma_request() before i2c_add_numbered_adapter() to avoid the infinite loop. -- RMK's Patch system: https://www.armlinux.org.uk/developer/patches/ FTTC broadband for 0.8mile line in suburbia: sync at 12.1Mbps down 622kbps up According to speedtest.net: 11.9Mbps down 500kbps up 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=-8.2 required=3.0 tests=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_1 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 3E514C43603 for ; Wed, 11 Dec 2019 10:44:30 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 04E3E206A5 for ; Wed, 11 Dec 2019 10:44:30 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="nikDcGQH"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=armlinux.org.uk header.i=@armlinux.org.uk header.b="RosiyBjx" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 04E3E206A5 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=armlinux.org.uk Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: 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=SBonZMt0jWV5iChtcYAWpFnevAoHsR5A+iTjxyOQP2U=; b=nikDcGQHDa5PBU TD5CaG6Tf7bOY9ZYPoF7nZZHka34Wn4Zz2oLCUPnukCOVE7Abf7JSmik0s+qXU+P56soK8S64QJmT ZX9hefjCCFqNlBWIyNa0asDmM97lFiLXoF3WO6ktqwP1N2pxiMJ/v1WUtNaw+u/+iK/Kh8K1zX/lD GExx+f7GYDVLNmKHGKPq8sthTfi8iIgAu33pMMbvqIvOr9L2ngyunoXR6yCTPQFTGSt20swLIrP8k zFo1YzOqaZuDdGEYDWIouAKZ23xYH7/KztzChgp9HobDAJNVPJ0ca17I7CFxYOKaR5K+hjTCglDPT kpTN6xMV5Qy9NpYxgQwA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1iezTo-0007F3-Tw; Wed, 11 Dec 2019 10:44:28 +0000 Received: from pandora.armlinux.org.uk ([2001:4d48:ad52:3201:214:fdff:fe10:1be6]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1iezTd-0006zr-00 for linux-arm-kernel@lists.infradead.org; Wed, 11 Dec 2019 10:44:19 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=armlinux.org.uk; s=pandora-2019; h=Sender:In-Reply-To: Content-Transfer-Encoding:Content-Type: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-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=W1Xr1ESFOb4cZaNdonF79OjzkRvMReLsf1g3WU8W8wc=; b=RosiyBjxVUaBCTBdKECx/Q/fK REY+K9pikjNMxb3Sos19IGdi7QC6YXOwPhLMdt7hCxbQbEWssmdpaCdL1Q1n6anPY2+kBNdbBYdAs UOYf9cwovzdBVSAK3yjq3SwZURod3Vbz+1OerekSafSVwCnCmdY8sEXn8vz5mhiRUF80676ebMm4W DdIZ92zJZSvY0X1+rxpNwcd1jlw5cB6EtsIpxfgdd9j+/GU1dGXrWBfl+EAfeGB38BPSKRV7zt94g BsQLwyQoMbgk+g1iO8lk5cys4dBFo8NQphxNISGVP808gLKNZkU4ePSo+mPZpJgYQB1avG9gpz6RL EyfTB6fgQ==; Received: from shell.armlinux.org.uk ([2001:4d48:ad52:3201:5054:ff:fe00:4ec]:39844) by pandora.armlinux.org.uk with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.90_1) (envelope-from ) id 1iezTC-0007pY-Bw; Wed, 11 Dec 2019 10:43:50 +0000 Received: from linux by shell.armlinux.org.uk with local (Exim 4.92) (envelope-from ) id 1iezT9-0005mz-IS; Wed, 11 Dec 2019 10:43:47 +0000 Date: Wed, 11 Dec 2019 10:43:47 +0000 From: Russell King - ARM Linux admin To: Peng Ma Subject: Re: [EXT] Re: [PATCH] i2c: imx: Defer probing if EDMA not available Message-ID: <20191211104347.GA25745@shell.armlinux.org.uk> References: <20191127071136.5240-1-peng.ma@nxp.com> <20191128100613.GI25745@shell.armlinux.org.uk> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.10.1 (2018-07-13) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191211_024417_334921_4DCCCD90 X-CRM114-Status: GOOD ( 32.91 ) 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: "shawnguo@kernel.org" , "s.hauer@pengutronix.de" , "linux-kernel@vger.kernel.org" , "linux@rempel-privat.de" , dl-linux-imx , "kernel@pengutronix.de" , "festevam@gmail.com" , "linux-arm-kernel@lists.infradead.org" , "linux-i2c@vger.kernel.org" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gV2VkLCBEZWMgMTEsIDIwMTkgYXQgMTA6MjU6MjZBTSArMDAwMCwgUGVuZyBNYSB3cm90ZToK PiBIaSBSdXNzZWxsLAo+IAo+IEkgYW0gc29ycnkgdG8gcmVwbHkgbGF0ZSwgdGhhbmtzIGZvciB5 b3VyIHBhdGllbnQgcmVtaW5kaW5nLAo+IFBsZWFzZSBzZWUgbXkgY29tbWVudHMgaW5saW5lLgo+ IAo+IEJlc3QgUmVnYXJkcywKPiBQZW5nCj4gPi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4g PkZyb206IFJ1c3NlbGwgS2luZyAtIEFSTSBMaW51eCBhZG1pbiA8bGludXhAYXJtbGludXgub3Jn LnVrPgo+ID5TZW50OiAyMDE55bm0MTHmnIgyOOaXpSAxODowNgo+ID5UbzogUGVuZyBNYSA8cGVu Zy5tYUBueHAuY29tPgo+ID5DYzogbGludXhAcmVtcGVsLXByaXZhdC5kZTsga2VybmVsQHBlbmd1 dHJvbml4LmRlOyBzaGF3bmd1b0BrZXJuZWwub3JnOwo+ID5zLmhhdWVyQHBlbmd1dHJvbml4LmRl OyBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnOyBkbC1saW51eC1pbXgKPiA+PGxpbnV4LWlt eEBueHAuY29tPjsgZmVzdGV2YW1AZ21haWwuY29tOwo+ID5saW51eC1hcm0ta2VybmVsQGxpc3Rz LmluZnJhZGVhZC5vcmc7IGxpbnV4LWkyY0B2Z2VyLmtlcm5lbC5vcmcKPiA+U3ViamVjdDogW0VY VF0gUmU6IFtQQVRDSF0gaTJjOiBpbXg6IERlZmVyIHByb2JpbmcgaWYgRURNQSBub3QgYXZhaWxh YmxlCj4gPgo+ID5DYXV0aW9uOiBFWFQgRW1haWwKPiA+Cj4gPk9uIFdlZCwgTm92IDI3LCAyMDE5 IGF0IDA3OjEyOjA5QU0gKzAwMDAsIFBlbmcgTWEgd3JvdGU6Cj4gPj4gRURNQSBtYXkgYmUgbm90 IGF2YWlsYWJsZSBvciBkZWZlcmVkIGR1ZSB0byBkZXBlbmRlbmNpZXMgb24gb3RoZXIKPiA+PiBt b2R1bGVzLCBJZiB0aGVzZSBzY2VuYXJpb3MgaXMgZW5jb3VudGVyZWQsIHdlIHNob3VsZCBkZWZl ciBwcm9iaW5nLgo+ID4KPiA+VGhpcyBoYXMgYmVlbiB0cmllZCBiZWZvcmUgaW4gdGhpcyBmb3Jt LCBhbmQgaXQgY2F1c2VzIHJlZ3Jlc3Npb25zLgo+ID4KPiA+PiBTaWduZWQtb2ZmLWJ5OiBQZW5n IE1hIDxwZW5nLm1hQG54cC5jb20+Cj4gPj4gLS0tCj4gPj4gIGRyaXZlcnMvaTJjL2J1c3Nlcy9p MmMtaW14LmMgfCAxNiArKysrKysrKysrKy0tLS0tCj4gPj4gIDEgZmlsZSBjaGFuZ2VkLCAxMSBp bnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQo+ID4+Cj4gPj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvaTJjL2J1c3Nlcy9pMmMtaW14LmMKPiA+PiBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW14 LmMgaW5kZXggNDAxMTFhMy4uYzJiMDY5MyAxMDA2NDQKPiA+PiAtLS0gYS9kcml2ZXJzL2kyYy9i dXNzZXMvaTJjLWlteC5jCj4gPj4gKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pbXguYwo+ ID4+IEBAIC0zNjksOCArMzY5LDggQEAgc3RhdGljIHZvaWQgaTJjX2lteF9yZXNldF9yZWdzKHN0 cnVjdAo+ID4+IGlteF9pMmNfc3RydWN0ICppMmNfaW14KSAgfQo+ID4+Cj4gPj4gIC8qIEZ1bmN0 aW9ucyBmb3IgRE1BIHN1cHBvcnQgKi8KPiA+PiAtc3RhdGljIHZvaWQgaTJjX2lteF9kbWFfcmVx dWVzdChzdHJ1Y3QgaW14X2kyY19zdHJ1Y3QgKmkyY19pbXgsCj4gPj4gLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtYV9hZGRyX3QKPiA+cGh5X2FkZHIpCj4g Pj4gK3N0YXRpYyBpbnQgaTJjX2lteF9kbWFfcmVxdWVzdChzdHJ1Y3QgaW14X2kyY19zdHJ1Y3Qg KmkyY19pbXgsCj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWFfYWRkcl90IHBo eV9hZGRyKQo+ID4+ICB7Cj4gPj4gICAgICAgc3RydWN0IGlteF9pMmNfZG1hICpkbWE7Cj4gPj4g ICAgICAgc3RydWN0IGRtYV9zbGF2ZV9jb25maWcgZG1hX3Njb25maWc7IEBAIC0zNzksNyArMzc5 LDcgQEAgc3RhdGljCj4gPj4gdm9pZCBpMmNfaW14X2RtYV9yZXF1ZXN0KHN0cnVjdCBpbXhfaTJj X3N0cnVjdCAqaTJjX2lteCwKPiA+Pgo+ID4+ICAgICAgIGRtYSA9IGRldm1fa3phbGxvYyhkZXYs IHNpemVvZigqZG1hKSwgR0ZQX0tFUk5FTCk7Cj4gPj4gICAgICAgaWYgKCFkbWEpCj4gPj4gLSAg ICAgICAgICAgICByZXR1cm47Cj4gPj4gKyAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKPiA+ Pgo+ID4+ICAgICAgIGRtYS0+Y2hhbl90eCA9IGRtYV9yZXF1ZXN0X2NoYW4oZGV2LCAidHgiKTsK PiA+PiAgICAgICBpZiAoSVNfRVJSKGRtYS0+Y2hhbl90eCkpIHsKPiA+PiBAQCAtNDI0LDcgKzQy NCw3IEBAIHN0YXRpYyB2b2lkIGkyY19pbXhfZG1hX3JlcXVlc3Qoc3RydWN0Cj4gPmlteF9pMmNf c3RydWN0ICppMmNfaW14LAo+ID4+ICAgICAgIGRldl9pbmZvKGRldiwgInVzaW5nICVzICh0eCkg YW5kICVzIChyeCkgZm9yIERNQSB0cmFuc2ZlcnNcbiIsCj4gPj4gICAgICAgICAgICAgICBkbWFf Y2hhbl9uYW1lKGRtYS0+Y2hhbl90eCksCj4gPj4gZG1hX2NoYW5fbmFtZShkbWEtPmNoYW5fcngp KTsKPiA+Pgo+ID4+IC0gICAgIHJldHVybjsKPiA+PiArICAgICByZXR1cm4gMDsKPiA+Pgo+ID4+ ICBmYWlsX3J4Ogo+ID4+ICAgICAgIGRtYV9yZWxlYXNlX2NoYW5uZWwoZG1hLT5jaGFuX3J4KTsK PiA+PiBAQCAtNDMyLDYgKzQzMiw4IEBAIHN0YXRpYyB2b2lkIGkyY19pbXhfZG1hX3JlcXVlc3Qo c3RydWN0Cj4gPmlteF9pMmNfc3RydWN0ICppMmNfaW14LAo+ID4+ICAgICAgIGRtYV9yZWxlYXNl X2NoYW5uZWwoZG1hLT5jaGFuX3R4KTsKPiA+PiAgZmFpbF9hbDoKPiA+PiAgICAgICBkZXZtX2tm cmVlKGRldiwgZG1hKTsKPiA+PiArCj4gPj4gKyAgICAgcmV0dXJuIHJldDsKPiA+Cj4gPlNvbWUg cGxhdGZvcm1zIGRvbid0IGhhdmUgRURNQS4gIERvZXNuJ3QgdGhpcyBmb3JjZSBldmVyeW9uZSB3 aG8gd2FudHMKPiA+STJDIHRvIGhhdmUgRE1BPyAgVGhlIGxhc3QgYXR0ZW1wdCBhdCB0aGlzIGhh ZDoKPiA+Cj4gPiAgICAgICAgLyogcmV0dXJuIHN1Y2Nlc3NmdWxseSBpZiB0aGVyZSBpcyBubyBk bWEgc3VwcG9ydCAqLwo+ID4gICAgICAgIHJldHVybiByZXQgPT0gLUVOT0RFViA/IDAgOiByZXQ7 Cj4gPgo+ID5oZXJlIGJlY2F1c2Ugb2YgZXhhY3RseSB0aGlzLgo+ID4KPiA+PiAgfQo+ID4+Cj4g Pj4gIHN0YXRpYyB2b2lkIGkyY19pbXhfZG1hX2NhbGxiYWNrKHZvaWQgKmFyZykgQEAgLTE2MDUs MTAgKzE2MDcsMTQgQEAKPiA+PiBzdGF0aWMgaW50IGkyY19pbXhfcHJvYmUoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldikKPiA+PiAgICAgICBkZXZfaW5mbygmaTJjX2lteC0+YWRhcHRlci5k ZXYsICJJTVggSTJDIGFkYXB0ZXIgcmVnaXN0ZXJlZFxuIik7Cj4gPj4KPiA+PiAgICAgICAvKiBJ bml0IERNQSBjb25maWcgaWYgc3VwcG9ydGVkICovCj4gPj4gLSAgICAgaTJjX2lteF9kbWFfcmVx dWVzdChpMmNfaW14LCBwaHlfYWRkcik7Cj4gPj4gKyAgICAgcmV0ID0gaTJjX2lteF9kbWFfcmVx dWVzdChpMmNfaW14LCBwaHlfYWRkcik7Cj4gPj4gKyAgICAgaWYgKHJldCA9PSAtRVBST0JFX0RF RkVSKQo+ID4+ICsgICAgICAgICAgICAgZ290byBpMmNfYWRhcHRlcl9yZW1vdmU7Cj4gPgo+ID5U aGlzIGhhcHBlbnMgX2FmdGVyXyB0aGUgYWRhcHRlciBoYXMgYmVlbiBwdWJsaXNoZWQgdG8gdGhl IHJlc3Qgb2YgdGhlIGtlcm5lbC4KPiA+Q2xhaW1pbmcgcmVzb3VyY2VzIGFmdGVyIHB1YmxpY2F0 aW9uIGlzIHJhY3kgLSB0aGUgYWRhcHRlciBtYXkgYmUgaW4gdXNlIGJ5IGEKPiA+cmVxdWVzdCBh dCB0aGlzIHBvaW50LiAgU2Vjb25kbHksIHRoZXJlJ3MgYmVlbiBwcm9ibGVtcyB3aXRoIHRoaXMg Y2F1c2luZwo+ID5yZWdyZXNzaW9ucyB3aGVuIEVETUEgaXMgYnVpbHQgYXMgYSBtb2R1bGUgYW5k IGkyYy1pbXggaXMgYnVpbHQtaW4uCj4gPgo+ID5TZWUgZThjMjIwZmFjNDE1ICgiUmV2ZXJ0ICJp MmM6IGlteDogaW1wcm92ZSB0aGUgZXJyb3IgaGFuZGxpbmcgaW4KPiA+aTJjX2lteF9kbWFfcmVx dWVzdCgpIiIpIHdoZW4gZXhhY3RseSB3aGF0IHlvdSdyZSBwcm9wb3Npbmcgd2FzIHRyaWVkIGFu ZAo+ID5lbmRlZCB1cCBoYXZpbmcgdG8gYmUgcmV2ZXJ0ZWQuCj4gPgo+ID5BRkFJSyBub3RoaW5n IGhhcyBjaGFuZ2VkIHNpbmNlLCBzbyBtZXJlbHkgcmVpbnN0YXRpbmcgdGhlIGtub3duIHRvIGJl IGJyb2tlbgo+ID5jb2RlLCB0aGVyZWJ5IHJlaW50cm9kdWNpbmcgdGhlIHNhbWUgKGFuZCBtb3Jl KSBwcm9ibGVtcywgaXNuJ3QgZ29pbmcgdG8gYmUKPiA+YWNjZXB0YWJsZS4KPiA+Cj4gPlNvcnJ5 LCBidXQgdGhpcyBnZXRzIGEgYmlnIE5BSyBmcm9tIG1lLgo+ID4KPiBbUGVuZyBNYV0gSSBzYXcg dGhlIHJldmVydCBjb21taXQgZThjMjIwZmFjNDE1IGFuZCB1bmRlcnN0YW5kIHlvdXIgY29uY2Vy bnMuCj4gSSBzY2FuIHRoZSBpMmMtaW14LmMgZHJpdmVyLCBBbGwgcGxhdGZvcm1zIHRoYXQgdXNl IGkyYyBkcml2ZXIgYW5kIHN1cHBvcnQgZG1hIHVzZSBhbiBlRE1BIGVuZ2luZSwKPiBTbyBJIGNo YW5nZSB0aGUgY29kZShjb21wYXJlIHdpdGggbGFzdCBwYXRjaCkgYXMgZm9sbG93cywgcGxlYXNl IHJldmlldyBhbmQgZ2l2ZSBtZSB5b3VyIHByZWNpb3VzIGNvbW1lbnRzLgo+IFRoYW5rcyB2ZXJ5 IG11Y2guCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW14LmMgYi9k cml2ZXJzL2kyYy9idXNzZXMvaTJjLWlteC5jCj4gaW5kZXggMTJmNzkzNGZkZGI0Li42Y2FmZWU1 MmRkNjcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pbXguYwo+ICsrKyBi L2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW14LmMKPiBAQCAtMTYwNSw4ICsxNjA1LDExIEBAIHN0 YXRpYyBpbnQgaTJjX2lteF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICAK PiAgICAgICAgIC8qIEluaXQgRE1BIGNvbmZpZyBpZiBzdXBwb3J0ZWQgKi8KPiAgICAgICAgIHJl dCA9IGkyY19pbXhfZG1hX3JlcXVlc3QoaTJjX2lteCwgcGh5X2FkZHIpOwo+IC0gICAgICAgaWYg KHJldCA9PSAtRVBST0JFX0RFRkVSKQo+ICsgICAgICAgaWYgKHJldCA9PSAtRVBST0JFX0RFRkVS KSB7Cj4gKyNpZiAgICBJU19CVUlMVElOKENPTkZJR19GU0xfRURNQSkKPiAgICAgICAgICAgICAg ICAgZ290byBpMmNfYWRhcHRlcl9yZW1vdmU7Cj4gKyNlbmRpZgo+ICsgICAgICAgfQoKWW91IGhh dmVuJ3QgdW5kZXJzdG9vZCBfd2h5XyB0aGUgcHJvYmxlbSBvY2N1cnMsIHlvdSdyZSBqdXN0IGF0 dGVtcHRpbmcKdG8gcGF0Y2ggYXJvdW5kIGl0LiBZb3UncmUgaGFja2luZyB0aGUgY29kZSwgcmF0 aGVyIHRoYW4gZW5naW5lZXJpbmcKdGhlIGNvZGUuCgpUaGUgaW5maW5pdGUgZGVmZXJyZWQgcHJv YmUgb2NjdXJzIGJlY2F1c2U6CgotIGkyYy1pbXggaXMgYXR0ZW1wdGVkIHRvIGJlIHByb2JlZC4K LSBpMmMtaW14IHNldHMgdXAgdGhlIGhhcmR3YXJlLCBhbmQgdGhlbiBjYWxscwogIGkyY19hZGRf bnVtYmVyZWRfYWRhcHRlcigpCi0gaTJjX2FkZF9udW1iZXJlZF9hZGFwdGVyKCkgcHVibGlzaGVz IHRoZSBidXMgdG8gdGhlIHdvcmxkLCBhbmQgdGhlbgogIHNlYXJjaGVzIERUIGZvciBhbnkgY2hp bGRyZW4gdG8gY3JlYXRlIC0gYW5kIGl0IGZpbmRzIHNvbWUgYW5kCiAgY3JlYXRlcyB0aGVtLgot IHRoZSBjaGlsZHJlbiBkZXZpY2VzIGFyZSBtYXRjaGVkIHRvIHRoZWlyIGRyaXZlcnMsIHdoaWNo IGJpbmQuICBUaGlzCiAgdHJpZ2dlcnMgYSBkZWZlcnJlZCBwcm9iZSB0byBiZSBzY2hlZHVsZWQu Ci0gYmFjayBpbiB0aGUgaTJjLWlteCBkcml2ZXIsIHdlIGdldCB0byBpMmNfaW14X2RtYV9yZXF1 ZXN0KCksIHdoaWNoCiAgZmFpbHMsIGFuZCB5b3UgcmV0dXJuIC1FUFJPQkVfREVGRVIuCi0gdGhl IGkyYy1pbXggZHJpdmVyIHByb2JlIGFjdGlvbnMgYXJlIHVud291bmQsIGFuZCBwcm9iZSBleGl0 cy4KLSB0aGUgZHJpdmVyIGNvcmUgcHJvY2Vzc2VzIHRoZSBkZWZlcnJlZCBwcm9iZSByZXF1ZXN0 LCBmaW5kcyB0aGUgCiAgaTJjLWlteCBkZXZpY2Uocykgb24gdGhlIGRlZmVycmVkIHByb2JlIGxp c3QsIGFuZCBhdHRlbXB0cyB0bwogIHByb2JlIHRoZW0uICBHb3RvIHRoZSB0b3Agb2YgdGhpcyBs aXN0LgoKSWYsIGZvciB3aGF0ZXZlciByZWFzb24sIGkyY19pbXhfZG1hX3JlcXVlc3QoKSBldmVy IHJldHVybnMKLUVQUk9CRV9ERUZFUiwgdGhlIGFib3ZlIGxvb3AgV0lMTCBoYXBwZW4uCiAgClRo ZSBGVU5EQU1FTlRBTCBydWxlIG9mIGtlcm5lbCBwcm9ncmFtbWluZyBpcyB0aGF0IHlvdSBkbyBO T1QgcHVibGlzaApiZWZvcmUgeW91IGhhdmUgY29tcGxldGVkIHNldHVwLiAgaTJjLWlteCB2aW9s YXRlcyB0aGF0IHJ1bGUgYXMgdGhlCnByb2JlIGZ1bmN0aW9uIGlzIG9yZGVyZWQgYXQgcHJlc2Vu dC4KCmkyYy1pbXggaGFzIGJlZW4gd3JpdHRlbiBmb3IgaTJjX2lteF9kbWFfcmVxdWVzdCgpIHRv IGJlIHNhZmUgdG8gY2FsbAphZnRlciB0aGUgZGV2aWNlIGhhcyBiZWVuIHB1Ymxpc2hlZCwgYnV0 IHdpdGggdGhlIGN1cnJlbnQgcHJvYmUgZnVuY3Rpb24Kb3JkZXIsIGl0IGlzIHVuc2FmZSB0byBw cm9wYWdhdGUgdGhlIEVQUk9CRV9ERUZFUiByZXR1cm4gdmFsdWUgZm9yIHRoZQpyZWFzb24gYWJv dmUuICBGb3IgdGhlIHJlYXNvbiB0aGUgb3JpZ2luYWwgYXR0ZW1wdCBnb3QgcmV2ZXJ0ZWQuCgpT bywgaWYgeW91IHdhbnQgdG8gZG8gdGhpcyAoYW5kIHllcywgSSdkIGFsc28gZW5jb3VyYWdlIGl0 IHRvIGJlCmNvbmRpdGlvbmFsIG9uIEVETUEgYmVpbmcgYnVpbHQtaW4sIGFzIEkyQyBpcyBjb21t b25seSB1c2VkIGFzIGEgd2F5CnRvIGdldCBhdCBSVENzLCB3aGljaCBhcmUgcmVhZCBiZWZvcmUg a2VybmVsIG1vZHVsZXMgY2FuIGJlIGxvYWRlZCkKdGhlbiB5b3UgTVVTVCBtb3ZlIGkyY19pbXhf ZG1hX3JlcXVlc3QoKSBiZWZvcmUKaTJjX2FkZF9udW1iZXJlZF9hZGFwdGVyKCkgdG8gYXZvaWQg dGhlIGluZmluaXRlIGxvb3AuCgotLSAKUk1LJ3MgUGF0Y2ggc3lzdGVtOiBodHRwczovL3d3dy5h cm1saW51eC5vcmcudWsvZGV2ZWxvcGVyL3BhdGNoZXMvCkZUVEMgYnJvYWRiYW5kIGZvciAwLjht aWxlIGxpbmUgaW4gc3VidXJiaWE6IHN5bmMgYXQgMTIuMU1icHMgZG93biA2MjJrYnBzIHVwCkFj Y29yZGluZyB0byBzcGVlZHRlc3QubmV0OiAxMS45TWJwcyBkb3duIDUwMGticHMgdXAKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJu ZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRw Oi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK