From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A25CEECAAD5 for ; Sat, 27 Aug 2022 10:27:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235565AbiH0K07 (ORCPT ); Sat, 27 Aug 2022 06:26:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44208 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233731AbiH0K0u (ORCPT ); Sat, 27 Aug 2022 06:26:50 -0400 Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DEB9A101FD; Sat, 27 Aug 2022 03:26:47 -0700 (PDT) Received: from dggpemm500024.china.huawei.com (unknown [172.30.72.57]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4MFCSJ5fWmzYcvT; Sat, 27 Aug 2022 18:22:24 +0800 (CST) Received: from dggpemm500006.china.huawei.com (7.185.36.236) by dggpemm500024.china.huawei.com (7.185.36.203) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Sat, 27 Aug 2022 18:26:45 +0800 Received: from [10.174.178.55] (10.174.178.55) by dggpemm500006.china.huawei.com (7.185.36.236) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Sat, 27 Aug 2022 18:26:44 +0800 Subject: Re: [BUG] amba: Remove deferred device addition To: Saravana Kannan , Kefeng Wang CC: Rob Herring , "linux-kernel@vger.kernel.org" , Frank Rowand , , Russell King , "Linus Walleij" , linux-arm-kernel , Dmitry Torokhov , References: <20210816074619.177383-1-wangkefeng.wang@huawei.com> <20210816074619.177383-4-wangkefeng.wang@huawei.com> <85b28900-5f42-b997-2ded-0b952bc2a03e@huawei.com> <265bb783-10da-a7c1-2625-055dec5643a3@huawei.com> <4a8b0a6d-b1d5-ffe9-8e31-61844cb9bd89@huawei.com> From: "Leizhen (ThunderTown)" Message-ID: <051f1eb5-67f1-b3f9-cc4e-c5902068532f@huawei.com> Date: Sat, 27 Aug 2022 18:26:32 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.7.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="utf-8" Content-Language: en-US Content-Transfer-Encoding: 8bit X-Originating-IP: [10.174.178.55] X-ClientProxiedBy: dggems705-chm.china.huawei.com (10.3.19.182) To dggpemm500006.china.huawei.com (7.185.36.236) X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2022/7/6 3:25, Saravana Kannan wrote: > On Fri, Sep 10, 2021 at 12:59 AM Kefeng Wang wrote: >> >> >> On 2021/9/9 11:30, Saravana Kannan wrote: >>> On Fri, Aug 27, 2021 at 6:09 PM Kefeng Wang wrote: >>>> >>>> On 2021/8/28 3:09, Saravana Kannan wrote: >>>>> On Fri, Aug 27, 2021 at 7:38 AM Kefeng Wang wrote: >>>>>> On 2021/8/27 8:04, Saravana Kannan wrote: >>>>>>> On Thu, Aug 26, 2021 at 1:22 AM Kefeng Wang wrote: >>>>>>>>>>> Btw, I've been working on [1] cleaning up the one-off deferred probe >>>>>>>>>>> solution that we have for amba devices. That causes a bunch of other >>>>>>>>>>> headaches. Your patch 3/3 takes us further in the wrong direction by >>>>>>>>>>> adding more reasons for delaying the addition of the device. >>>>>>>> Hi Saravana, I try the link[1], but with it, there is a crash when boot >>>>>>>> (qemu-system-arm -M vexpress-a15), >>>>> I'm assuming it's this one? >>>>> arch/arm/boot/dts/vexpress-v2p-ca15_a7.dts >>>> I use arch/arm/boot/dts/vexpress-v2p-ca15-tc1.dts. >>>> >>>> qemu-system-arm -M vexpress-a15 -dtb vexpress-v2p-ca15-tc1.dtb -cpu >>>> cortex-a15 -smp 2 -m size=3G -kernel zImage -rtc base=localtime -initrd >>>> initrd-arm32 -append 'console=ttyAMA0 cma=0 kfence.sample_interval=0 >>>> earlyprintk debug ' -device virtio-net-device,netdev=net8 -netdev >>>> type=tap,id=net8,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown >>>> -nographic >>>> >>>>>>> Hi, >>>>>>> >>>>>>> It's hard to make sense of the logs. Looks like two different threads >>>>>>> might be printing to the log at the same time? Can you please enable >>>>>>> the config that prints the thread ID (forgot what it's called) and >>>>>>> collect this again? With what I could tell the crash seems to be >>>>>>> happening somewhere in platform_match(), but that's not related to >>>>>>> this patch at all? >>>>>> Can you reproduce it? it is very likely related(without your patch, the >>>>>> boot is fine), >>>>> Sorry, I haven't ever setup qemu and booted vexpress. Thanks for your help. >>>>> >>>>>> the NULL ptr is about serio, it is registed from amba driver. >>>>>> >>>>>> ambakmi_driver_init >>>>>> >>>>>> -- amba_kmi_probe >>>>>> >>>>>> -- __serio_register_port >>>>> Thanks for the pointer. I took a look at the logs and the code. It's >>>>> very strange. As you can see from the backtrace, platform_match() is >>>>> being called for the device_add() from serio_handle_event(). But the >>>>> device that gets added there is on the serio_bus which obviously >>>>> should be using the serio_bus_match. >>>> Yes, I am confused too. >>>>>> +Dmitry and input maillist, is there some known issue about serio ? >>>>>> >>>>>> I add some debug, the full log is attached. >>>>>> >>>>>> [ 2.958355][ T41] input: AT Raw Set 2 keyboard as >>>>>> /devices/platform/bus@8000000/bus@8000000:motherboard-bus/bus@8000000:motherboard-bus:iofpga-bus@300000000/1c060000.kmi/serio0/input/input0 >>>>>> [ 2.977441][ T41] serio serio1: pdev c1e05508, pdev->name (null), >>>>>> drv c1090fc0, drv->name vexpress-reset >>>>> Based on the logs you added, it's pretty clear we are getting to >>>>> platform_match(). It's also strange that the drv->name is >>>>> vexpress-reset >>>> ... >>>>>> [ 3.003113][ T41] Backtrace: >>>>>> [ 3.003451][ T41] [] (strcmp) from [] (platform_match+0xdc/0xf0) >>>>>> [ 3.003963][ T41] [] (platform_match) from [] (__device_attach_driver+0x3c/0xf4) >>>>>> [ 3.004769][ T41] [] (__device_attach_driver) from [] (bus_for_each_drv+0x68/0xc8) >>>>>> [ 3.005481][ T41] [] (bus_for_each_drv) from [] (__device_attach+0xf0/0x16c) >>>>>> [ 3.006152][ T41] [] (__device_attach) from [] (device_initial_probe+0x1c/0x20) >>>>>> [ 3.006853][ T41] [] (device_initial_probe) from [] (bus_probe_device+0x94/0x9c) >>>>>> [ 3.007259][ T41] [] (bus_probe_device) from [] (device_add+0x408/0x8b8) >>>>>> [ 3.007900][ T41] [] (device_add) from [] (serio_handle_event+0x1b8/0x234) >>>>>> [ 3.008824][ T41] [] (serio_handle_event) from [] (process_one_work+0x238/0x594) >>>>>> [ 3.009737][ T41] [] (process_one_work) from [] (worker_thread+0x5c/0x5f4) >>>>>> [ 3.010638][ T41] [] (worker_thread) from [] (kthread+0x178/0x194) >>>>>> [ 3.011496][ T41] [] (kthread) from [] (ret_from_fork+0x14/0x24) >>>>>> [ 3.011860][ T41] Exception stack(0xc1675fb0 to 0xc1675ff8) >>>>> But the platform_match() is happening for the device_add() from >>>>> serio_event_handle() that's adding a device to the serio_bus and it >>>>> should be using serio_bus_match(). >>>>> >>>>> I haven't reached any conclusion yet, but my current thought process >>>>> is that it's either: >>>>> 1. My patch is somehow causing list corruption. But I don't directly >>>>> touch any list in my change (other than deleting a list entirely), so >>>>> it's not clear how that would be happening. >>>> Maybe some concurrent driver load? >>>> >>>>> 2. Without my patch, these AMBA device's probe would be delayed at >>>>> least until 5 seconds or possibly later. I'm wondering if my patch is >>>>> catching some bad timing assumptions in other code. >>>> After Rob's patch, It will retry soon. >>>> >>>> commit 039599c92d3b2e73689e8b6e519d653fd4770abb >>>> Author: Rob Herring >>>> Date: Wed Apr 29 15:58:12 2020 -0500 >>>> >>>> amba: Retry adding deferred devices at late_initcall >>>> >>>> If amba bus devices defer when adding, the amba bus code simply retries >>>> adding the devices every 5 seconds. This doesn't work well as it >>>> completely unsynchronized with starting the init process which can >>>> happen in less than 5 secs. Add a retry during late_initcall. If the >>>> amba devices are added, then deferred probe takes over. If the >>>> dependencies have not probed at this point, then there's no improvement >>>> over previous behavior. To completely solve this, we'd need to retry >>>> after every successful probe as deferred probe does. >>>> >>>> The list_empty() check now happens outside the mutex, but the mutex >>>> wasn't necessary in the first place. >>>> >>>> This needed to use deferred probe instead of fragile initcall ordering >>>> on 32-bit VExpress systems where the apb_pclk has a number of probe >>>> dependencies (vexpress-sysregs, vexpress-config). >>>> >>>> >>>>> You might be able to test out theory (2) by DEFERRED_DEVICE_TIMEOUT to >>>>> a much smaller number. Say 500ms or 100ms. If it doesn't crash, it >>>>> doesn't mean it's not (2), but if it does, then we know for sure it's >>>>> (2). >>>> ok, I will try this one, but due to above patch, it may not work. >>> Were you able to find anything more? >> I can't find any clue, and have no time to check this for now, is there >> any news from your side? Hi, Saravana and Kefeng: I've spent the whole afternoon trying to figure this out, and the fix patch has been cc you two. > > To close out this thread, the issue was due to a UAF bug in driver > core that was fixed by: > https://lore.kernel.org/all/20220513112444.45112-1-schspa@gmail.com/ > > With that fix, there wouldn't have been a crash, but amba driver > registration would have failed (because match returned > non-EPROBE_DEFER error). > > -Saravana > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > -- Regards, Zhen Lei 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 11107ECAAD2 for ; Sat, 27 Aug 2022 10:27:59 +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:Date: Message-ID:From:References:CC:To:Subject:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=P7mc+sS+0Aejq9IHtZCDUenS1lAIz5IyONppaqv0+58=; b=lkKNTVNSNaPKHW74nm+9HSTZAw m4jBDjfDChQcqcY4BYL208e4VJjMJmr14mFizXL877/yChGegQpR9NgS9VIOylFgQ6fU95gfAIduO 3280BUrhYJZCecOzjuDh/USPqWj8IeWxUcOp9gYTgXbptzesI4RuO9CBoKIqYBV/tvBwpQJa6VjVr +UEaItsMOUd9EGtYFzlAVKlDzX81Rmndeyn2f/1NhnzCLIa4VGCK1LQXw/cCNaTBhefGDJYpihf3s 3IJMbIR3ZzFAQyCrP3PskeHgcxNlVGKetpNX9U7sp7vXvHjpeC3+8yyiDGy/2A23GcXqaQo8xhk6n PhrMW+Aw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oRt1g-007fd8-OK; Sat, 27 Aug 2022 10:26:52 +0000 Received: from szxga02-in.huawei.com ([45.249.212.188]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oRt1c-007fZW-0j for linux-arm-kernel@lists.infradead.org; Sat, 27 Aug 2022 10:26:50 +0000 Received: from dggpemm500024.china.huawei.com (unknown [172.30.72.57]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4MFCSJ5fWmzYcvT; Sat, 27 Aug 2022 18:22:24 +0800 (CST) Received: from dggpemm500006.china.huawei.com (7.185.36.236) by dggpemm500024.china.huawei.com (7.185.36.203) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Sat, 27 Aug 2022 18:26:45 +0800 Received: from [10.174.178.55] (10.174.178.55) by dggpemm500006.china.huawei.com (7.185.36.236) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Sat, 27 Aug 2022 18:26:44 +0800 Subject: Re: [BUG] amba: Remove deferred device addition To: Saravana Kannan , Kefeng Wang CC: Rob Herring , "linux-kernel@vger.kernel.org" , Frank Rowand , , Russell King , "Linus Walleij" , linux-arm-kernel , Dmitry Torokhov , References: <20210816074619.177383-1-wangkefeng.wang@huawei.com> <20210816074619.177383-4-wangkefeng.wang@huawei.com> <85b28900-5f42-b997-2ded-0b952bc2a03e@huawei.com> <265bb783-10da-a7c1-2625-055dec5643a3@huawei.com> <4a8b0a6d-b1d5-ffe9-8e31-61844cb9bd89@huawei.com> From: "Leizhen (ThunderTown)" Message-ID: <051f1eb5-67f1-b3f9-cc4e-c5902068532f@huawei.com> Date: Sat, 27 Aug 2022 18:26:32 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.7.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-Originating-IP: [10.174.178.55] X-ClientProxiedBy: dggems705-chm.china.huawei.com (10.3.19.182) To dggpemm500006.china.huawei.com (7.185.36.236) X-CFilter-Loop: Reflected X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220827_032648_605151_80F62E22 X-CRM114-Status: GOOD ( 35.94 ) 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 CgpPbiAyMDIyLzcvNiAzOjI1LCBTYXJhdmFuYSBLYW5uYW4gd3JvdGU6Cj4gT24gRnJpLCBTZXAg MTAsIDIwMjEgYXQgMTI6NTkgQU0gS2VmZW5nIFdhbmcgPHdhbmdrZWZlbmcud2FuZ0BodWF3ZWku Y29tPiB3cm90ZToKPj4KPj4KPj4gT24gMjAyMS85LzkgMTE6MzAsIFNhcmF2YW5hIEthbm5hbiB3 cm90ZToKPj4+IE9uIEZyaSwgQXVnIDI3LCAyMDIxIGF0IDY6MDkgUE0gS2VmZW5nIFdhbmcgPHdh bmdrZWZlbmcud2FuZ0BodWF3ZWkuY29tPiB3cm90ZToKPj4+Pgo+Pj4+IE9uIDIwMjEvOC8yOCAz OjA5LCBTYXJhdmFuYSBLYW5uYW4gd3JvdGU6Cj4+Pj4+IE9uIEZyaSwgQXVnIDI3LCAyMDIxIGF0 IDc6MzggQU0gS2VmZW5nIFdhbmcgPHdhbmdrZWZlbmcud2FuZ0BodWF3ZWkuY29tPiB3cm90ZToK Pj4+Pj4+IE9uIDIwMjEvOC8yNyA4OjA0LCBTYXJhdmFuYSBLYW5uYW4gd3JvdGU6Cj4+Pj4+Pj4g T24gVGh1LCBBdWcgMjYsIDIwMjEgYXQgMToyMiBBTSBLZWZlbmcgV2FuZyA8d2FuZ2tlZmVuZy53 YW5nQGh1YXdlaS5jb20+IHdyb3RlOgo+Pj4+Pj4+Pj4+PiBCdHcsIEkndmUgYmVlbiB3b3JraW5n IG9uIFsxXSBjbGVhbmluZyB1cCB0aGUgb25lLW9mZiBkZWZlcnJlZCBwcm9iZQo+Pj4+Pj4+Pj4+ PiBzb2x1dGlvbiB0aGF0IHdlIGhhdmUgZm9yIGFtYmEgZGV2aWNlcy4gVGhhdCBjYXVzZXMgYSBi dW5jaCBvZiBvdGhlcgo+Pj4+Pj4+Pj4+PiBoZWFkYWNoZXMuIFlvdXIgcGF0Y2ggMy8zIHRha2Vz IHVzIGZ1cnRoZXIgaW4gdGhlIHdyb25nIGRpcmVjdGlvbiBieQo+Pj4+Pj4+Pj4+PiBhZGRpbmcg bW9yZSByZWFzb25zIGZvciBkZWxheWluZyB0aGUgYWRkaXRpb24gb2YgdGhlIGRldmljZS4KPj4+ Pj4+Pj4gSGkgU2FyYXZhbmEsIEkgdHJ5IHRoZSBsaW5rWzFdLCBidXQgd2l0aCBpdCwgdGhlcmUg aXMgYSBjcmFzaCB3aGVuIGJvb3QKPj4+Pj4+Pj4gKHFlbXUtc3lzdGVtLWFybSAtTSB2ZXhwcmVz cy1hMTUpLAo+Pj4+PiBJJ20gYXNzdW1pbmcgaXQncyB0aGlzIG9uZT8KPj4+Pj4gYXJjaC9hcm0v Ym9vdC9kdHMvdmV4cHJlc3MtdjJwLWNhMTVfYTcuZHRzCj4+Pj4gSSB1c2UgYXJjaC9hcm0vYm9v dC9kdHMvdmV4cHJlc3MtdjJwLWNhMTUtdGMxLmR0cy4KPj4+Pgo+Pj4+IHFlbXUtc3lzdGVtLWFy bSAtTSB2ZXhwcmVzcy1hMTUgLWR0YiB2ZXhwcmVzcy12MnAtY2ExNS10YzEuZHRiIC1jcHUKPj4+ PiBjb3J0ZXgtYTE1IC1zbXAgMiAtbSBzaXplPTNHIC1rZXJuZWwgekltYWdlIC1ydGMgYmFzZT1s b2NhbHRpbWUgLWluaXRyZAo+Pj4+IGluaXRyZC1hcm0zMiAtYXBwZW5kICdjb25zb2xlPXR0eUFN QTAgY21hPTAga2ZlbmNlLnNhbXBsZV9pbnRlcnZhbD0wCj4+Pj4gZWFybHlwcmludGsgZGVidWcg JyAtZGV2aWNlIHZpcnRpby1uZXQtZGV2aWNlLG5ldGRldj1uZXQ4IC1uZXRkZXYKPj4+PiB0eXBl PXRhcCxpZD1uZXQ4LHNjcmlwdD0vZXRjL3FlbXUtaWZ1cCxkb3duc2NyaXB0PS9ldGMvcWVtdS1p ZmRvd24KPj4+PiAtbm9ncmFwaGljCj4+Pj4KPj4+Pj4+PiBIaSwKPj4+Pj4+Pgo+Pj4+Pj4+IEl0 J3MgaGFyZCB0byBtYWtlIHNlbnNlIG9mIHRoZSBsb2dzLiBMb29rcyBsaWtlIHR3byBkaWZmZXJl bnQgdGhyZWFkcwo+Pj4+Pj4+IG1pZ2h0IGJlIHByaW50aW5nIHRvIHRoZSBsb2cgYXQgdGhlIHNh bWUgdGltZT8gQ2FuIHlvdSBwbGVhc2UgZW5hYmxlCj4+Pj4+Pj4gdGhlIGNvbmZpZyB0aGF0IHBy aW50cyB0aGUgdGhyZWFkIElEIChmb3Jnb3Qgd2hhdCBpdCdzIGNhbGxlZCkgYW5kCj4+Pj4+Pj4g Y29sbGVjdCB0aGlzIGFnYWluPyBXaXRoIHdoYXQgSSBjb3VsZCB0ZWxsIHRoZSBjcmFzaCBzZWVt cyB0byBiZQo+Pj4+Pj4+IGhhcHBlbmluZyBzb21ld2hlcmUgaW4gcGxhdGZvcm1fbWF0Y2goKSwg YnV0IHRoYXQncyBub3QgcmVsYXRlZCB0bwo+Pj4+Pj4+IHRoaXMgcGF0Y2ggYXQgYWxsPwo+Pj4+ Pj4gQ2FuIHlvdSByZXByb2R1Y2UgaXQ/IGl0IGlzIHZlcnkgbGlrZWx5IHJlbGF0ZWQod2l0aG91 dCB5b3VyIHBhdGNoLCB0aGUKPj4+Pj4+IGJvb3QgaXMgZmluZSksCj4+Pj4+IFNvcnJ5LCBJIGhh dmVuJ3QgZXZlciBzZXR1cCBxZW11IGFuZCBib290ZWQgdmV4cHJlc3MuIFRoYW5rcyBmb3IgeW91 ciBoZWxwLgo+Pj4+Pgo+Pj4+Pj4gdGhlIE5VTEwgcHRyIGlzIGFib3V0IHNlcmlvLCBpdCBpcyBy ZWdpc3RlZCBmcm9tIGFtYmEgZHJpdmVyLgo+Pj4+Pj4KPj4+Pj4+IGFtYmFrbWlfZHJpdmVyX2lu aXQKPj4+Pj4+Cj4+Pj4+PiAgICAgLS0gYW1iYV9rbWlfcHJvYmUKPj4+Pj4+Cj4+Pj4+PiAgICAg ICAtLSBfX3NlcmlvX3JlZ2lzdGVyX3BvcnQKPj4+Pj4gVGhhbmtzIGZvciB0aGUgcG9pbnRlci4g SSB0b29rIGEgbG9vayBhdCB0aGUgbG9ncyBhbmQgdGhlIGNvZGUuIEl0J3MKPj4+Pj4gdmVyeSBz dHJhbmdlLiBBcyB5b3UgY2FuIHNlZSBmcm9tIHRoZSBiYWNrdHJhY2UsIHBsYXRmb3JtX21hdGNo KCkgaXMKPj4+Pj4gYmVpbmcgY2FsbGVkIGZvciB0aGUgZGV2aWNlX2FkZCgpIGZyb20gc2VyaW9f aGFuZGxlX2V2ZW50KCkuIEJ1dCB0aGUKPj4+Pj4gZGV2aWNlIHRoYXQgZ2V0cyBhZGRlZCB0aGVy ZSBpcyBvbiB0aGUgc2VyaW9fYnVzIHdoaWNoIG9idmlvdXNseQo+Pj4+PiBzaG91bGQgYmUgdXNp bmcgdGhlIHNlcmlvX2J1c19tYXRjaC4KPj4+PiBZZXMsIEkgYW0gY29uZnVzZWQgdG9vLgo+Pj4+ Pj4gK0RtaXRyeSBhbmQgaW5wdXQgbWFpbGxpc3QsIGlzIHRoZXJlIHNvbWUga25vd24gaXNzdWUg YWJvdXQgc2VyaW8gPwo+Pj4+Pj4KPj4+Pj4+IEkgYWRkIHNvbWUgZGVidWcsIHRoZSBmdWxsIGxv ZyBpcyBhdHRhY2hlZC4KPj4+Pj4+Cj4+Pj4+PiBbICAgIDIuOTU4MzU1XVsgICBUNDFdIGlucHV0 OiBBVCBSYXcgU2V0IDIga2V5Ym9hcmQgYXMKPj4+Pj4+IC9kZXZpY2VzL3BsYXRmb3JtL2J1c0A4 MDAwMDAwL2J1c0A4MDAwMDAwOm1vdGhlcmJvYXJkLWJ1cy9idXNAODAwMDAwMDptb3RoZXJib2Fy ZC1idXM6aW9mcGdhLWJ1c0AzMDAwMDAwMDAvMWMwNjAwMDAua21pL3NlcmlvMC9pbnB1dC9pbnB1 dDAKPj4+Pj4+IFsgICAgMi45Nzc0NDFdWyAgIFQ0MV0gc2VyaW8gc2VyaW8xOiBwZGV2IGMxZTA1 NTA4LCBwZGV2LT5uYW1lIChudWxsKSwKPj4+Pj4+IGRydiBjMTA5MGZjMCwgZHJ2LT5uYW1lIHZl eHByZXNzLXJlc2V0Cj4+Pj4+IEJhc2VkIG9uIHRoZSBsb2dzIHlvdSBhZGRlZCwgaXQncyBwcmV0 dHkgY2xlYXIgd2UgYXJlIGdldHRpbmcgdG8KPj4+Pj4gcGxhdGZvcm1fbWF0Y2goKS4gSXQncyBh bHNvIHN0cmFuZ2UgdGhhdCB0aGUgZHJ2LT5uYW1lIGlzCj4+Pj4+IHZleHByZXNzLXJlc2V0Cj4+ Pj4gLi4uCj4+Pj4+PiBbICAgIDMuMDAzMTEzXVsgICBUNDFdIEJhY2t0cmFjZToKPj4+Pj4+IFsg ICAgMy4wMDM0NTFdWyAgIFQ0MV0gWzxjMDU2MGJiND5dIChzdHJjbXApIGZyb20gWzxjMDY0NjM1 OD5dIChwbGF0Zm9ybV9tYXRjaCsweGRjLzB4ZjApCj4+Pj4+PiBbICAgIDMuMDAzOTYzXVsgICBU NDFdIFs8YzA2NDYyN2M+XSAocGxhdGZvcm1fbWF0Y2gpIGZyb20gWzxjMDY0MzdkND5dIChfX2Rl dmljZV9hdHRhY2hfZHJpdmVyKzB4M2MvMHhmNCkKPj4+Pj4+IFsgICAgMy4wMDQ3NjldWyAgIFQ0 MV0gWzxjMDY0Mzc5OD5dIChfX2RldmljZV9hdHRhY2hfZHJpdmVyKSBmcm9tIFs8YzA2NDExODA+ XSAoYnVzX2Zvcl9lYWNoX2RydisweDY4LzB4YzgpCj4+Pj4+PiBbICAgIDMuMDA1NDgxXVsgICBU NDFdIFs8YzA2NDExMTg+XSAoYnVzX2Zvcl9lYWNoX2RydikgZnJvbSBbPGMwNjQyZjQwPl0gKF9f ZGV2aWNlX2F0dGFjaCsweGYwLzB4MTZjKQo+Pj4+Pj4gWyAgICAzLjAwNjE1Ml1bICAgVDQxXSBb PGMwNjQyZTUwPl0gKF9fZGV2aWNlX2F0dGFjaCkgZnJvbSBbPGMwNjQzOWQ0Pl0gKGRldmljZV9p bml0aWFsX3Byb2JlKzB4MWMvMHgyMCkKPj4+Pj4+IFsgICAgMy4wMDY4NTNdWyAgIFQ0MV0gWzxj MDY0MzliOD5dIChkZXZpY2VfaW5pdGlhbF9wcm9iZSkgZnJvbSBbPGMwNjQyMDMwPl0gKGJ1c19w cm9iZV9kZXZpY2UrMHg5NC8weDljKQo+Pj4+Pj4gWyAgICAzLjAwNzI1OV1bICAgVDQxXSBbPGMw NjQxZjljPl0gKGJ1c19wcm9iZV9kZXZpY2UpIGZyb20gWzxjMDYzZjljYz5dIChkZXZpY2VfYWRk KzB4NDA4LzB4OGI4KQo+Pj4+Pj4gWyAgICAzLjAwNzkwMF1bICAgVDQxXSBbPGMwNjNmNWM0Pl0g KGRldmljZV9hZGQpIGZyb20gWzxjMDcxYzFjYz5dIChzZXJpb19oYW5kbGVfZXZlbnQrMHgxYjgv MHgyMzQpCj4+Pj4+PiBbICAgIDMuMDA4ODI0XVsgICBUNDFdIFs8YzA3MWMwMTQ+XSAoc2VyaW9f aGFuZGxlX2V2ZW50KSBmcm9tIFs8YzAxNDc1YTQ+XSAocHJvY2Vzc19vbmVfd29yaysweDIzOC8w eDU5NCkKPj4+Pj4+IFsgICAgMy4wMDk3MzddWyAgIFQ0MV0gWzxjMDE0NzM2Yz5dIChwcm9jZXNz X29uZV93b3JrKSBmcm9tIFs8YzAxNDc5NWM+XSAod29ya2VyX3RocmVhZCsweDVjLzB4NWY0KQo+ Pj4+Pj4gWyAgICAzLjAxMDYzOF1bICAgVDQxXSBbPGMwMTQ3OTAwPl0gKHdvcmtlcl90aHJlYWQp IGZyb20gWzxjMDE0ZmViND5dIChrdGhyZWFkKzB4MTc4LzB4MTk0KQo+Pj4+Pj4gWyAgICAzLjAx MTQ5Nl1bICAgVDQxXSBbPGMwMTRmZDNjPl0gKGt0aHJlYWQpIGZyb20gWzxjMDEwMDE1MD5dIChy ZXRfZnJvbV9mb3JrKzB4MTQvMHgyNCkKPj4+Pj4+IFsgICAgMy4wMTE4NjBdWyAgIFQ0MV0gRXhj ZXB0aW9uIHN0YWNrKDB4YzE2NzVmYjAgdG8gMHhjMTY3NWZmOCkKPj4+Pj4gQnV0IHRoZSBwbGF0 Zm9ybV9tYXRjaCgpIGlzIGhhcHBlbmluZyBmb3IgdGhlIGRldmljZV9hZGQoKSBmcm9tCj4+Pj4+ IHNlcmlvX2V2ZW50X2hhbmRsZSgpIHRoYXQncyBhZGRpbmcgYSBkZXZpY2UgdG8gdGhlIHNlcmlv X2J1cyBhbmQgaXQKPj4+Pj4gc2hvdWxkIGJlIHVzaW5nIHNlcmlvX2J1c19tYXRjaCgpLgo+Pj4+ Pgo+Pj4+PiBJIGhhdmVuJ3QgcmVhY2hlZCBhbnkgY29uY2x1c2lvbiB5ZXQsIGJ1dCBteSBjdXJy ZW50IHRob3VnaHQgcHJvY2Vzcwo+Pj4+PiBpcyB0aGF0IGl0J3MgZWl0aGVyOgo+Pj4+PiAxLiBN eSBwYXRjaCBpcyBzb21laG93IGNhdXNpbmcgbGlzdCBjb3JydXB0aW9uLiBCdXQgSSBkb24ndCBk aXJlY3RseQo+Pj4+PiB0b3VjaCBhbnkgbGlzdCBpbiBteSBjaGFuZ2UgKG90aGVyIHRoYW4gZGVs ZXRpbmcgYSBsaXN0IGVudGlyZWx5KSwgc28KPj4+Pj4gaXQncyBub3QgY2xlYXIgaG93IHRoYXQg d291bGQgYmUgaGFwcGVuaW5nLgo+Pj4+IE1heWJlIHNvbWUgY29uY3VycmVudCBkcml2ZXIgbG9h ZO+8nwo+Pj4+Cj4+Pj4+IDIuIFdpdGhvdXQgbXkgcGF0Y2gsIHRoZXNlIEFNQkEgZGV2aWNlJ3Mg cHJvYmUgd291bGQgYmUgZGVsYXllZCBhdAo+Pj4+PiBsZWFzdCB1bnRpbCA1IHNlY29uZHMgb3Ig cG9zc2libHkgbGF0ZXIuIEknbSB3b25kZXJpbmcgaWYgbXkgcGF0Y2ggaXMKPj4+Pj4gY2F0Y2hp bmcgc29tZSBiYWQgdGltaW5nIGFzc3VtcHRpb25zIGluIG90aGVyIGNvZGUuCj4+Pj4gQWZ0ZXIg Um9iJ3MgcGF0Y2gsIEl0IHdpbGwgcmV0cnkgc29vbi4KPj4+Pgo+Pj4+IGNvbW1pdCAwMzk1OTlj OTJkM2IyZTczNjg5ZThiNmU1MTlkNjUzZmQ0NzcwYWJiCj4+Pj4gQXV0aG9yOiBSb2IgSGVycmlu ZyA8cm9iaEBrZXJuZWwub3JnPgo+Pj4+IERhdGU6ICAgV2VkIEFwciAyOSAxNTo1ODoxMiAyMDIw IC0wNTAwCj4+Pj4KPj4+PiAgICAgICBhbWJhOiBSZXRyeSBhZGRpbmcgZGVmZXJyZWQgZGV2aWNl cyBhdCBsYXRlX2luaXRjYWxsCj4+Pj4KPj4+PiAgICAgICBJZiBhbWJhIGJ1cyBkZXZpY2VzIGRl ZmVyIHdoZW4gYWRkaW5nLCB0aGUgYW1iYSBidXMgY29kZSBzaW1wbHkgcmV0cmllcwo+Pj4+ICAg ICAgIGFkZGluZyB0aGUgZGV2aWNlcyBldmVyeSA1IHNlY29uZHMuIFRoaXMgZG9lc24ndCB3b3Jr IHdlbGwgYXMgaXQKPj4+PiAgICAgICBjb21wbGV0ZWx5IHVuc3luY2hyb25pemVkIHdpdGggc3Rh cnRpbmcgdGhlIGluaXQgcHJvY2VzcyB3aGljaCBjYW4KPj4+PiAgICAgICBoYXBwZW4gaW4gbGVz cyB0aGFuIDUgc2Vjcy4gQWRkIGEgcmV0cnkgZHVyaW5nIGxhdGVfaW5pdGNhbGwuIElmIHRoZQo+ Pj4+ICAgICAgIGFtYmEgZGV2aWNlcyBhcmUgYWRkZWQsIHRoZW4gZGVmZXJyZWQgcHJvYmUgdGFr ZXMgb3Zlci4gSWYgdGhlCj4+Pj4gICAgICAgZGVwZW5kZW5jaWVzIGhhdmUgbm90IHByb2JlZCBh dCB0aGlzIHBvaW50LCB0aGVuIHRoZXJlJ3Mgbm8gaW1wcm92ZW1lbnQKPj4+PiAgICAgICBvdmVy IHByZXZpb3VzIGJlaGF2aW9yLiBUbyBjb21wbGV0ZWx5IHNvbHZlIHRoaXMsIHdlJ2QgbmVlZCB0 byByZXRyeQo+Pj4+ICAgICAgIGFmdGVyIGV2ZXJ5IHN1Y2Nlc3NmdWwgcHJvYmUgYXMgZGVmZXJy ZWQgcHJvYmUgZG9lcy4KPj4+Pgo+Pj4+ICAgICAgIFRoZSBsaXN0X2VtcHR5KCkgY2hlY2sgbm93 IGhhcHBlbnMgb3V0c2lkZSB0aGUgbXV0ZXgsIGJ1dCB0aGUgbXV0ZXgKPj4+PiAgICAgICB3YXNu J3QgbmVjZXNzYXJ5IGluIHRoZSBmaXJzdCBwbGFjZS4KPj4+Pgo+Pj4+ICAgICAgIFRoaXMgbmVl ZGVkIHRvIHVzZSBkZWZlcnJlZCBwcm9iZSBpbnN0ZWFkIG9mIGZyYWdpbGUgaW5pdGNhbGwgb3Jk ZXJpbmcKPj4+PiAgICAgICBvbiAzMi1iaXQgVkV4cHJlc3Mgc3lzdGVtcyB3aGVyZSB0aGUgYXBi X3BjbGsgaGFzIGEgbnVtYmVyIG9mIHByb2JlCj4+Pj4gICAgICAgZGVwZW5kZW5jaWVzICh2ZXhw cmVzcy1zeXNyZWdzLCB2ZXhwcmVzcy1jb25maWcpLgo+Pj4+Cj4+Pj4KPj4+Pj4gWW91IG1pZ2h0 IGJlIGFibGUgdG8gdGVzdCBvdXQgdGhlb3J5ICgyKSBieSBERUZFUlJFRF9ERVZJQ0VfVElNRU9V VCB0bwo+Pj4+PiBhIG11Y2ggc21hbGxlciBudW1iZXIuIFNheSA1MDBtcyBvciAxMDBtcy4gSWYg aXQgZG9lc24ndCBjcmFzaCwgaXQKPj4+Pj4gZG9lc24ndCBtZWFuIGl0J3Mgbm90ICgyKSwgYnV0 IGlmIGl0IGRvZXMsIHRoZW4gd2Uga25vdyBmb3Igc3VyZSBpdCdzCj4+Pj4+ICgyKS4KPj4+PiBv aywgSSB3aWxsIHRyeSB0aGlzIG9uZSwgYnV0IGR1ZSB0byBhYm92ZSBwYXRjaCwgaXQgbWF5IG5v dCB3b3JrLgo+Pj4gV2VyZSB5b3UgYWJsZSB0byBmaW5kIGFueXRoaW5nIG1vcmU/Cj4+IEkgY2Fu J3QgZmluZCBhbnkgY2x1Ze+8jCBhbmQgaGF2ZSBubyB0aW1lIHRvIGNoZWNrIHRoaXMgZm9yIG5v dywgaXMgdGhlcmUKPj4gYW55IG5ld3MgZnJvbSB5b3VyIHNpZGU/CgpIaSwgU2FyYXZhbmEgYW5k IEtlZmVuZzoKICBJJ3ZlIHNwZW50IHRoZSB3aG9sZSBhZnRlcm5vb24gdHJ5aW5nIHRvIGZpZ3Vy ZSB0aGlzIG91dCwgYW5kIHRoZSBmaXgKcGF0Y2ggaGFzIGJlZW4gY2MgeW91IHR3by4KCj4gCj4g VG8gY2xvc2Ugb3V0IHRoaXMgdGhyZWFkLCB0aGUgaXNzdWUgd2FzIGR1ZSB0byBhIFVBRiBidWcg aW4gZHJpdmVyCj4gY29yZSB0aGF0IHdhcyBmaXhlZCBieToKPiBodHRwczovL2xvcmUua2VybmVs Lm9yZy9hbGwvMjAyMjA1MTMxMTI0NDQuNDUxMTItMS1zY2hzcGFAZ21haWwuY29tLwo+IAo+IFdp dGggdGhhdCBmaXgsIHRoZXJlIHdvdWxkbid0IGhhdmUgYmVlbiBhIGNyYXNoLCBidXQgYW1iYSBk cml2ZXIKPiByZWdpc3RyYXRpb24gd291bGQgaGF2ZSBmYWlsZWQgKGJlY2F1c2UgbWF0Y2ggcmV0 dXJuZWQKPiBub24tRVBST0JFX0RFRkVSIGVycm9yKS4KPiAKPiAtU2FyYXZhbmEKPiAKPiBfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IGxpbnV4LWFybS1r ZXJuZWwgbWFpbGluZyBsaXN0Cj4gbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3Jn Cj4gaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0t a2VybmVsCj4gCgotLSAKUmVnYXJkcywKICBaaGVuIExlaQoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QK bGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRl YWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=