From mboxrd@z Thu Jan 1 00:00:00 1970 From: Steven Price Subject: Re: [PATCH v3] drm/panfrost: fix -Wmissing-prototypes warnings Date: Mon, 28 Oct 2019 13:52:06 +0000 Message-ID: <20191028135205.GA31804@arm.com> References: <31dc2f01-299c-6a52-4111-3e60e555cb9b@arm.com> <201910281727338249544@zte.com.cn> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Return-path: Content-Disposition: inline In-Reply-To: <201910281727338249544@zte.com.cn> Sender: linux-kernel-owner@vger.kernel.org To: "wang.yi59@zte.com.cn" Cc: "robh@kernel.org" , "tomeu.vizoso@collabora.com" , "airlied@linux.ie" , "linux-kernel@vger.kernel.org" , "dri-devel@lists.freedesktop.org" , "wang.liang82@zte.com.cn" , "xue.zhihong@zte.com.cn" , "up2wing@gmail.com" List-Id: dri-devel@lists.freedesktop.org On Mon, Oct 28, 2019 at 09:27:33AM +0000, wang.yi59@zte.com.cn wrote: > Hi Steve, > > Thanks a lot for your time and patience :) > > > On 25/10/2019 02:30, Yi Wang wrote: > > > We get these warnings when build kernel W=1: > > > drivers/gpu/drm/panfrost/panfrost_perfcnt.c:35:6: warning: no previous prototype for ‘panfrost_perfcnt_clean_cache_done’ [-Wmissing-prototypes] > > > drivers/gpu/drm/panfrost/panfrost_perfcnt.c:40:6: warning: no previous prototype for ‘panfrost_perfcnt_sample_done’ [-Wmissing-prototypes] > > > drivers/gpu/drm/panfrost/panfrost_perfcnt.c:190:5: warning: no previous prototype for ‘panfrost_ioctl_perfcnt_enable’ [-Wmissing-prototypes] > > > drivers/gpu/drm/panfrost/panfrost_perfcnt.c:218:5: warning: no previous prototype for ‘panfrost_ioctl_perfcnt_dump’ [-Wmissing-prototypes] > > > drivers/gpu/drm/panfrost/panfrost_perfcnt.c:250:6: warning: no previous prototype for ‘panfrost_perfcnt_close’ [-Wmissing-prototypes] > > > drivers/gpu/drm/panfrost/panfrost_perfcnt.c:264:5: warning: no previous prototype for ‘panfrost_perfcnt_init’ [-Wmissing-prototypes] > > > drivers/gpu/drm/panfrost/panfrost_perfcnt.c:320:6: warning: no previous prototype for ‘panfrost_perfcnt_fini’ [-Wmissing-prototypes] > > > drivers/gpu/drm/panfrost/panfrost_mmu.c:227:6: warning: no previous prototype for ‘panfrost_mmu_flush_range’ [-Wmissing-prototypes] > > > drivers/gpu/drm/panfrost/panfrost_mmu.c:435:5: warning: no previous prototype for ‘panfrost_mmu_map_fault_addr’ [-Wmissing-prototypes] > > > > > > For file panfrost_mmu.c, make functions static to fix this. > > > For file panfrost_perfcnt.c, include header file can fix this. > > > > > > Signed-off-by: Yi Wang > > > Reviewed-by: Steven Price > > > --- > > > > > > v3: using tab size of 8 other than 4. > > > > > > v2: align parameter line and modify comment. Thanks to Steve. > > > --- > > > drivers/gpu/drm/panfrost/panfrost_mmu.c | 9 +++++---- > > > drivers/gpu/drm/panfrost/panfrost_perfcnt.c | 1 + > > > 2 files changed, 6 insertions(+), 4 deletions(-) > > > > > > diff --git a/drivers/gpu/drm/panfrost/panfrost_mmu.c b/drivers/gpu/drm/panfrost/panfrost_mmu.c > > > index bdd9905..871574c 100644 > > > --- a/drivers/gpu/drm/panfrost/panfrost_mmu.c > > > +++ b/drivers/gpu/drm/panfrost/panfrost_mmu.c > > > @@ -224,9 +224,9 @@ static size_t get_pgsize(u64 addr, size_t size) > > > return SZ_2M; > > > } > > > > > > -void panfrost_mmu_flush_range(struct panfrost_device *pfdev, > > > - struct panfrost_mmu *mmu, > > > - u64 iova, size_t size) > > > +static void panfrost_mmu_flush_range(struct panfrost_device *pfdev, > > > + struct panfrost_mmu *mmu, > > > + u64 iova, size_t size) > > > > Ok, I'll admit I wouldn't have spotted this unless I'd double checked by > > applying the patch, but you still seem to have something misconfigured > > in your editor. This is out by one character: > > > > static void panfrost_mmu_flush_range(struct panfrost_device *pfdev, > > >------->------->------->------- struct panfrost_mmu *mmu, > > >------->------->------->------- u64 iova, size_t size) > > > > There should be an extra space to align correctly. > > According to [Linux kernel coding style](https://www.kernel.org/doc/html/v4.10/process/coding-style.html): > > Outside of comments, documentation and except in Kconfig, spaces are > > never used for indentation, and the above example is deliberately broken. > > If I understand corretly, the tab is enough for indentation :-) There's a (subtle) difference between indentation and alignment. Indentation is where the code is moved over because it is contained within an outer statement (e.g. an 'if' or 'while'). The Linux coding style is that this should be done with only tabs as you quote. However when the line is a continuation of the previous line, like in the example here, then we often need a combination of tabs/spaces to align correctly. The desire here is that the continuation lines all start straight after the "(" on the first line. Since that is 37 characters from the start we need 4 tabs + 5 spaces (4*8+5=37), whereas you had 4 tabs + 4 spaces. My guess is this is because you've got the following vim configuration: tabstop = 8 softtabstop = 4 noexpandtab This means that pressing moves you along only 4 columns (i.e. inserts 4 spaces), a second will then replace the spaces with a real tab character (i.e. move another 4 columns for a total of 8). It's probably best to set "softtabstop = 0" so that always inserts a real tab character. You might also find it useful to make tabs visible: set list set listchars=tab:>- That way you can easily see where you have tab characters and spaces (like in the example I quoted above). Steve > > > > > { > > > if (mmu->as < 0) > > > return; > > > @@ -432,7 +432,8 @@ void panfrost_mmu_pgtable_free(struct panfrost_file_priv *priv) > > > > > > #define NUM_FAULT_PAGES (SZ_2M / PAGE_SIZE) > > > > > > -int panfrost_mmu_map_fault_addr(struct panfrost_device *pfdev, int as, u64 addr) > > > +static int panfrost_mmu_map_fault_addr(struct panfrost_device *pfdev, int as, > > > + u64 addr) > > > > Here you're off-by-one in the other direction - you need to replace the > > final tab with 7 spaces: > > > > static int panfrost_mmu_map_fault_addr(struct panfrost_device *pfdev, int as, > > >------->------->------->------->-------u64 addr) > > > > Sorry to nit-pick over this, but it's good to get your editor setup > > correctly to ensure your formatting is correct. > > Yeah, it worth time on the editor setup, and thanks again. > > > > > Thanks, > > > > Steve > > > --- > Best wishes > Yi Wang 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=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, 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 809C2CA9EC2 for ; Mon, 28 Oct 2019 13:52:16 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 5B294208C0 for ; Mon, 28 Oct 2019 13:52:16 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5B294208C0 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id A67EF6E874; Mon, 28 Oct 2019 13:52:15 +0000 (UTC) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by gabe.freedesktop.org (Postfix) with ESMTP id 1C7106E874 for ; Mon, 28 Oct 2019 13:52:14 +0000 (UTC) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 421DE1F1; Mon, 28 Oct 2019 06:52:13 -0700 (PDT) Received: from arm.com (unknown [10.1.194.43]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 081AC3F6C4; Mon, 28 Oct 2019 06:52:11 -0700 (PDT) Date: Mon, 28 Oct 2019 13:52:06 +0000 From: Steven Price To: "wang.yi59@zte.com.cn" Subject: Re: [PATCH v3] drm/panfrost: fix -Wmissing-prototypes warnings Message-ID: <20191028135205.GA31804@arm.com> References: <31dc2f01-299c-6a52-4111-3e60e555cb9b@arm.com> <201910281727338249544@zte.com.cn> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <201910281727338249544@zte.com.cn> User-Agent: Mutt/1.10.1 (2018-07-13) X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "tomeu.vizoso@collabora.com" , "wang.liang82@zte.com.cn" , "airlied@linux.ie" , "linux-kernel@vger.kernel.org" , "dri-devel@lists.freedesktop.org" , "xue.zhihong@zte.com.cn" , "up2wing@gmail.com" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Message-ID: <20191028135206.6hklnjBXiZ3qsKASS4Sr_B-AZ-x_88-MtN_txTXXfwI@z> T24gTW9uLCBPY3QgMjgsIDIwMTkgYXQgMDk6Mjc6MzNBTSArMDAwMCwgd2FuZy55aTU5QHp0ZS5j b20uY24gd3JvdGU6Cj4gSGkgU3RldmUsCj4gCj4gVGhhbmtzIGEgbG90IGZvciB5b3VyIHRpbWUg YW5kIHBhdGllbmNlIDopCj4gCj4gPiBPbiAyNS8xMC8yMDE5IDAyOjMwLCBZaSBXYW5nIHdyb3Rl Ogo+ID4gPiBXZSBnZXQgdGhlc2Ugd2FybmluZ3Mgd2hlbiBidWlsZCBrZXJuZWwgVz0xOgo+ID4g PiBkcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfcGVyZmNudC5jOjM1OjY6IHdhcm5p bmc6IG5vIHByZXZpb3VzIHByb3RvdHlwZSBmb3Ig4oCYcGFuZnJvc3RfcGVyZmNudF9jbGVhbl9j YWNoZV9kb25l4oCZIFstV21pc3NpbmctcHJvdG90eXBlc10KPiA+ID4gZHJpdmVycy9ncHUvZHJt L3BhbmZyb3N0L3BhbmZyb3N0X3BlcmZjbnQuYzo0MDo2OiB3YXJuaW5nOiBubyBwcmV2aW91cyBw cm90b3R5cGUgZm9yIOKAmHBhbmZyb3N0X3BlcmZjbnRfc2FtcGxlX2RvbmXigJkgWy1XbWlzc2lu Zy1wcm90b3R5cGVzXQo+ID4gPiBkcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfcGVy ZmNudC5jOjE5MDo1OiB3YXJuaW5nOiBubyBwcmV2aW91cyBwcm90b3R5cGUgZm9yIOKAmHBhbmZy b3N0X2lvY3RsX3BlcmZjbnRfZW5hYmxl4oCZIFstV21pc3NpbmctcHJvdG90eXBlc10KPiA+ID4g ZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X3BlcmZjbnQuYzoyMTg6NTogd2Fybmlu Zzogbm8gcHJldmlvdXMgcHJvdG90eXBlIGZvciDigJhwYW5mcm9zdF9pb2N0bF9wZXJmY250X2R1 bXDigJkgWy1XbWlzc2luZy1wcm90b3R5cGVzXQo+ID4gPiBkcml2ZXJzL2dwdS9kcm0vcGFuZnJv c3QvcGFuZnJvc3RfcGVyZmNudC5jOjI1MDo2OiB3YXJuaW5nOiBubyBwcmV2aW91cyBwcm90b3R5 cGUgZm9yIOKAmHBhbmZyb3N0X3BlcmZjbnRfY2xvc2XigJkgWy1XbWlzc2luZy1wcm90b3R5cGVz XQo+ID4gPiBkcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfcGVyZmNudC5jOjI2NDo1 OiB3YXJuaW5nOiBubyBwcmV2aW91cyBwcm90b3R5cGUgZm9yIOKAmHBhbmZyb3N0X3BlcmZjbnRf aW5pdOKAmSBbLVdtaXNzaW5nLXByb3RvdHlwZXNdCj4gPiA+IGRyaXZlcnMvZ3B1L2RybS9wYW5m cm9zdC9wYW5mcm9zdF9wZXJmY250LmM6MzIwOjY6IHdhcm5pbmc6IG5vIHByZXZpb3VzIHByb3Rv dHlwZSBmb3Ig4oCYcGFuZnJvc3RfcGVyZmNudF9maW5p4oCZIFstV21pc3NpbmctcHJvdG90eXBl c10KPiA+ID4gZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X21tdS5jOjIyNzo2OiB3 YXJuaW5nOiBubyBwcmV2aW91cyBwcm90b3R5cGUgZm9yIOKAmHBhbmZyb3N0X21tdV9mbHVzaF9y YW5nZeKAmSBbLVdtaXNzaW5nLXByb3RvdHlwZXNdCj4gPiA+IGRyaXZlcnMvZ3B1L2RybS9wYW5m cm9zdC9wYW5mcm9zdF9tbXUuYzo0MzU6NTogd2FybmluZzogbm8gcHJldmlvdXMgcHJvdG90eXBl IGZvciDigJhwYW5mcm9zdF9tbXVfbWFwX2ZhdWx0X2FkZHLigJkgWy1XbWlzc2luZy1wcm90b3R5 cGVzXQo+ID4gPgo+ID4gPiBGb3IgZmlsZSBwYW5mcm9zdF9tbXUuYywgbWFrZSBmdW5jdGlvbnMg c3RhdGljIHRvIGZpeCB0aGlzLgo+ID4gPiBGb3IgZmlsZSBwYW5mcm9zdF9wZXJmY250LmMsIGlu Y2x1ZGUgaGVhZGVyIGZpbGUgY2FuIGZpeCB0aGlzLgo+ID4gPgo+ID4gPiBTaWduZWQtb2ZmLWJ5 OiBZaSBXYW5nIDx3YW5nLnlpNTlAenRlLmNvbS5jbj4KPiA+ID4gUmV2aWV3ZWQtYnk6IFN0ZXZl biBQcmljZSA8c3RldmVuLnByaWNlQGFybS5jb20+Cj4gPiA+IC0tLQo+ID4gPgo+ID4gPiB2Mzog dXNpbmcgdGFiIHNpemUgb2YgOCBvdGhlciB0aGFuIDQuCj4gPiA+Cj4gPiA+IHYyOiBhbGlnbiBw YXJhbWV0ZXIgbGluZSBhbmQgbW9kaWZ5IGNvbW1lbnQuIFRoYW5rcyB0byBTdGV2ZS4KPiA+ID4g LS0tCj4gPiA+ICBkcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfbW11LmMgICAgIHwg OSArKysrKy0tLS0KPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9wZXJm Y250LmMgfCAxICsKPiA+ID4gIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCA0IGRl bGV0aW9ucygtKQo+ID4gPgo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmZy b3N0L3BhbmZyb3N0X21tdS5jIGIvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X21t dS5jCj4gPiA+IGluZGV4IGJkZDk5MDUuLjg3MTU3NGMgMTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9tbXUuYwo+ID4gPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfbW11LmMKPiA+ID4gQEAgLTIyNCw5ICsyMjQsOSBAQCBz dGF0aWMgc2l6ZV90IGdldF9wZ3NpemUodTY0IGFkZHIsIHNpemVfdCBzaXplKQo+ID4gPiAgICAg IHJldHVybiBTWl8yTTsKPiA+ID4gIH0KPiA+ID4KPiA+ID4gLXZvaWQgcGFuZnJvc3RfbW11X2Zs dXNoX3JhbmdlKHN0cnVjdCBwYW5mcm9zdF9kZXZpY2UgKnBmZGV2LAo+ID4gPiAtICAgICAgICAg ICAgICAgICAgc3RydWN0IHBhbmZyb3N0X21tdSAqbW11LAo+ID4gPiAtICAgICAgICAgICAgICAg ICAgdTY0IGlvdmEsIHNpemVfdCBzaXplKQo+ID4gPiArc3RhdGljIHZvaWQgcGFuZnJvc3RfbW11 X2ZsdXNoX3JhbmdlKHN0cnVjdCBwYW5mcm9zdF9kZXZpY2UgKnBmZGV2LAo+ID4gPiArICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgcGFuZnJvc3RfbW11ICptbXUsCj4gPiA+ICsgICAgICAgICAg ICAgICAgICAgIHU2NCBpb3ZhLCBzaXplX3Qgc2l6ZSkKPiA+Cj4gPiBPaywgSSdsbCBhZG1pdCBJ IHdvdWxkbid0IGhhdmUgc3BvdHRlZCB0aGlzIHVubGVzcyBJJ2QgZG91YmxlIGNoZWNrZWQgYnkK PiA+IGFwcGx5aW5nIHRoZSBwYXRjaCwgYnV0IHlvdSBzdGlsbCBzZWVtIHRvIGhhdmUgc29tZXRo aW5nIG1pc2NvbmZpZ3VyZWQKPiA+IGluIHlvdXIgZWRpdG9yLiBUaGlzIGlzIG91dCBieSBvbmUg Y2hhcmFjdGVyOgo+ID4KPiA+IHN0YXRpYyB2b2lkIHBhbmZyb3N0X21tdV9mbHVzaF9yYW5nZShz dHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldiwKPiA+ID4tLS0tLS0tPi0tLS0tLS0+LS0tLS0t LT4tLS0tLS0tICAgIHN0cnVjdCBwYW5mcm9zdF9tbXUgKm1tdSwKPiA+ID4tLS0tLS0tPi0tLS0t LS0+LS0tLS0tLT4tLS0tLS0tICAgIHU2NCBpb3ZhLCBzaXplX3Qgc2l6ZSkKPiA+Cj4gPiBUaGVy ZSBzaG91bGQgYmUgYW4gZXh0cmEgc3BhY2UgdG8gYWxpZ24gY29ycmVjdGx5Lgo+IAo+IEFjY29y ZGluZyB0byBbTGludXgga2VybmVsIGNvZGluZyBzdHlsZV0oaHR0cHM6Ly93d3cua2VybmVsLm9y Zy9kb2MvaHRtbC92NC4xMC9wcm9jZXNzL2NvZGluZy1zdHlsZS5odG1sKToKPiA+IE91dHNpZGUg b2YgY29tbWVudHMsIGRvY3VtZW50YXRpb24gYW5kIGV4Y2VwdCBpbiBLY29uZmlnLCBzcGFjZXMg YXJlCj4gPiBuZXZlciB1c2VkIGZvciBpbmRlbnRhdGlvbiwgYW5kIHRoZSBhYm92ZSBleGFtcGxl IGlzIGRlbGliZXJhdGVseSBicm9rZW4uCj4gCj4gSWYgSSB1bmRlcnN0YW5kIGNvcnJldGx5LCB0 aGUgdGFiIGlzIGVub3VnaCBmb3IgaW5kZW50YXRpb24gOi0pCgpUaGVyZSdzIGEgKHN1YnRsZSkg ZGlmZmVyZW5jZSBiZXR3ZWVuIGluZGVudGF0aW9uIGFuZCBhbGlnbm1lbnQuCkluZGVudGF0aW9u IGlzIHdoZXJlIHRoZSBjb2RlIGlzIG1vdmVkIG92ZXIgYmVjYXVzZSBpdCBpcyBjb250YWluZWQK d2l0aGluIGFuIG91dGVyIHN0YXRlbWVudCAoZS5nLiBhbiAnaWYnIG9yICd3aGlsZScpLiBUaGUg TGludXggY29kaW5nCnN0eWxlIGlzIHRoYXQgdGhpcyBzaG91bGQgYmUgZG9uZSB3aXRoIG9ubHkg dGFicyBhcyB5b3UgcXVvdGUuCgpIb3dldmVyIHdoZW4gdGhlIGxpbmUgaXMgYSBjb250aW51YXRp b24gb2YgdGhlIHByZXZpb3VzIGxpbmUsIGxpa2UgaW4KdGhlIGV4YW1wbGUgaGVyZSwgdGhlbiB3 ZSBvZnRlbiBuZWVkIGEgY29tYmluYXRpb24gb2YgdGFicy9zcGFjZXMgdG8KYWxpZ24gY29ycmVj dGx5LiBUaGUgZGVzaXJlIGhlcmUgaXMgdGhhdCB0aGUgY29udGludWF0aW9uIGxpbmVzIGFsbApz dGFydCBzdHJhaWdodCBhZnRlciB0aGUgIigiIG9uIHRoZSBmaXJzdCBsaW5lLiBTaW5jZSB0aGF0 IGlzIDM3CmNoYXJhY3RlcnMgZnJvbSB0aGUgc3RhcnQgd2UgbmVlZCA0IHRhYnMgKyA1IHNwYWNl cyAoNCo4KzU9MzcpLCB3aGVyZWFzCnlvdSBoYWQgNCB0YWJzICsgNCBzcGFjZXMuIE15IGd1ZXNz IGlzIHRoaXMgaXMgYmVjYXVzZSB5b3UndmUgZ290IHRoZQpmb2xsb3dpbmcgdmltIGNvbmZpZ3Vy YXRpb246CgogdGFic3RvcCA9IDgKIHNvZnR0YWJzdG9wID0gNAogbm9leHBhbmR0YWIKClRoaXMg bWVhbnMgdGhhdCBwcmVzc2luZyA8dGFiPiBtb3ZlcyB5b3UgYWxvbmcgb25seSA0IGNvbHVtbnMg KGkuZS4KaW5zZXJ0cyA0IHNwYWNlcyksIGEgc2Vjb25kIDx0YWI+IHdpbGwgdGhlbiByZXBsYWNl IHRoZSBzcGFjZXMgd2l0aCBhCnJlYWwgdGFiIGNoYXJhY3RlciAoaS5lLiBtb3ZlIGFub3RoZXIg NCBjb2x1bW5zIGZvciBhIHRvdGFsIG9mIDgpLgoKSXQncyBwcm9iYWJseSBiZXN0IHRvIHNldCAi c29mdHRhYnN0b3AgPSAwIiBzbyB0aGF0IDx0YWI+IGFsd2F5cyBpbnNlcnRzCmEgcmVhbCB0YWIg Y2hhcmFjdGVyLiBZb3UgbWlnaHQgYWxzbyBmaW5kIGl0IHVzZWZ1bCB0byBtYWtlIHRhYnMKdmlz aWJsZToKCiBzZXQgbGlzdAogc2V0IGxpc3RjaGFycz10YWI6Pi0KClRoYXQgd2F5IHlvdSBjYW4g ZWFzaWx5IHNlZSB3aGVyZSB5b3UgaGF2ZSB0YWIgY2hhcmFjdGVycyBhbmQgc3BhY2VzCihsaWtl IGluIHRoZSBleGFtcGxlIEkgcXVvdGVkIGFib3ZlKS4KClN0ZXZlCgo+ID4KPiA+ID4gIHsKPiA+ ID4gICAgICBpZiAobW11LT5hcyA8IDApCj4gPiA+ICAgICAgICAgIHJldHVybjsKPiA+ID4gQEAg LTQzMiw3ICs0MzIsOCBAQCB2b2lkIHBhbmZyb3N0X21tdV9wZ3RhYmxlX2ZyZWUoc3RydWN0IHBh bmZyb3N0X2ZpbGVfcHJpdiAqcHJpdikKPiA+ID4KPiA+ID4gICNkZWZpbmUgTlVNX0ZBVUxUX1BB R0VTIChTWl8yTSAvIFBBR0VfU0laRSkKPiA+ID4KPiA+ID4gLWludCBwYW5mcm9zdF9tbXVfbWFw X2ZhdWx0X2FkZHIoc3RydWN0IHBhbmZyb3N0X2RldmljZSAqcGZkZXYsIGludCBhcywgdTY0IGFk ZHIpCj4gPiA+ICtzdGF0aWMgaW50IHBhbmZyb3N0X21tdV9tYXBfZmF1bHRfYWRkcihzdHJ1Y3Qg cGFuZnJvc3RfZGV2aWNlICpwZmRldiwgaW50IGFzLAo+ID4gPiArICAgICAgICAgICAgICAgICAg ICB1NjQgYWRkcikKPiA+Cj4gPiBIZXJlIHlvdSdyZSBvZmYtYnktb25lIGluIHRoZSBvdGhlciBk aXJlY3Rpb24gLSB5b3UgbmVlZCB0byByZXBsYWNlIHRoZQo+ID4gZmluYWwgdGFiIHdpdGggNyBz cGFjZXM6Cj4gPgo+ID4gc3RhdGljIGludCBwYW5mcm9zdF9tbXVfbWFwX2ZhdWx0X2FkZHIoc3Ry dWN0IHBhbmZyb3N0X2RldmljZSAqcGZkZXYsIGludCBhcywKPiA+ID4tLS0tLS0tPi0tLS0tLS0+ LS0tLS0tLT4tLS0tLS0tPi0tLS0tLS11NjQgYWRkcikKPiA+Cj4gPiBTb3JyeSB0byBuaXQtcGlj ayBvdmVyIHRoaXMsIGJ1dCBpdCdzIGdvb2QgdG8gZ2V0IHlvdXIgZWRpdG9yIHNldHVwCj4gPiBj b3JyZWN0bHkgdG8gZW5zdXJlIHlvdXIgZm9ybWF0dGluZyBpcyBjb3JyZWN0Lgo+IAo+IFllYWgs IGl0IHdvcnRoIHRpbWUgb24gdGhlIGVkaXRvciBzZXR1cCwgYW5kIHRoYW5rcyBhZ2Fpbi4KPiAK PiA+Cj4gPiBUaGFua3MsCj4gPgo+ID4gU3RldmUKPiAKPiAKPiAtLS0KPiBCZXN0IHdpc2hlcwo+ IFlpIFdhbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K ZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs