From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933766AbeDXOKe (ORCPT ); Tue, 24 Apr 2018 10:10:34 -0400 Received: from mx2.suse.de ([195.135.220.15]:55755 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933676AbeDXOKa (ORCPT ); Tue, 24 Apr 2018 10:10:30 -0400 Date: Tue, 24 Apr 2018 16:10:28 +0200 Message-ID: From: Takashi Iwai To: Paul Menzel Cc: Jaroslav Kysela , alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] ALSA: hda: Request driver probe from an async task In-Reply-To: <56165337-caed-e8d3-1908-c7894911a645@molgen.mpg.de> References: <92d47260-8d68-15f9-02b5-9846f9957106@molgen.mpg.de> <56165337-caed-e8d3-1908-c7894911a645@molgen.mpg.de> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI/1.14.6 (Maruoka) FLIM/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL/10.8 Emacs/25.3 (x86_64-suse-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, 24 Apr 2018 16:03:53 +0200, Paul Menzel wrote: > > Dear Takashi, > > > On 04/24/18 14:15, Takashi Iwai wrote: > > On Tue, 24 Apr 2018 13:59:58 +0200, > > Paul Menzel wrote: > > >> On 04/23/18 14:33, Takashi Iwai wrote: > >>> On Mon, 23 Apr 2018 14:30:36 +0200, Paul Menzel wrote: > >> > >>>> On 04/23/18 14:21, Takashi Iwai wrote: > >>>>> On Mon, 23 Apr 2018 14:05:52 +0200, Paul Menzel wrote: > >>>>>> > >>>>>> From: Paul Menzel > >>>>>> Date: Sat, 24 Mar 2018 09:28:43 +0100 > >>>>>> > >>>>>> On an ASRock E350M1, with Linux 4.17-rc1 according to `initcall_debug` > >>>>>> calling `azx_driver_init` takes sometimes more than a few milliseconds, > >>>>>> and up to 200 ms. > >>>>>> > >>>>>> ``` > >>>>>> [ 2.892598] calling azx_driver_init+0x0/0xfe4 [snd_hda_intel] @ 218 > >>>>>> [ 2.943002] initcall azx_driver_init+0x0/0xfe4 [snd_hda_intel] > >>>>>> returned 0 after 49195 usecs > >>>>>> ``` > >>>>>> > >>>>>> Trying to execute the Linux kernel in less than 500 ms, this is quite a > >>>>>> hold-up, and therefore request the probe from an async task. > >>>>>> > >>>>>> With this change, the test shows, that the function returns earlier. > >>>>>> > >>>>>> ``` > >>>>>> [ 3.254800] calling azx_driver_init+0x0/0xfe4 [snd_hda_intel] @ 227 > >>>>>> [ 3.254887] initcall azx_driver_init+0x0/0xfe4 [snd_hda_intel] > >>>>>> returned 0 after 66 usecs > >>>>>> ``` > >>>>>> > >>>>>> The same behavior is visible on a Dell OptiPlex 7010. The longer times > >>>>>> seem to happen, when the module *e1000e* is probed during the same time. > >>>>>> > >>>>>> Signed-off-by: Paul Menzel > >>>>> > >>>>> What actually took so long? Could you analyze further instead of > >>>>> blindly putting the flag? > >>>> > >>>> Well, I am not sure. Could you please give me hints, how to debug this > >>>> further? Is there some debug flag? > >>> > >>> Usually perf would help, but even a simple printk() should suffice to > >>> see what's going on there :) > >> > >> Please find the messages for a 23 ms run below, and the debug patch > >> attached. > >> > >>> [ 2.996238] calling azx_driver_init+0x0/0xfe4 [snd_hda_intel] @ 214 > >>> [ 3.009838] calling rtl8169_pci_driver_init+0x0/0x1000 [r8169] @ 217 > >>> [ 3.009904] r8169 Gigabit Ethernet driver 2.3LK-NAPI loaded > >>> [ 3.010721] random: get_random_bytes called from ipv6_regen_rndid+0x2c/0x100 with crng_init=1 > >>> [ 3.011283] r8169 0000:03:00.0 eth0: RTL8168e/8111e at 0x(ptrval), bc:5f:f4:c8:d3:98, XID 0c200000 IRQ 26 > >>> [ 3.011289] r8169 0000:03:00.0 eth0: jumbo features [frames: 9200 bytes, tx checksumming: ko] > >>> [ 3.013876] initcall rtl8169_pci_driver_init+0x0/0x1000 [r8169] returned 0 after 3917 usecs > >>> [ 3.031754] calling pcspkr_platform_driver_init+0x0/0x1000 [pcspkr] @ 221 > >>> [ 3.031904] input: PC Speaker as /devices/platform/pcspkr/input/input4 > >>> [ 3.032288] initcall pcspkr_platform_driver_init+0x0/0x1000 [pcspkr] returned 0 after 508 usecs > >>> [ 3.034795] calling psmouse_init+0x0/0x7c [psmouse] @ 220 > >>> [ 3.034903] initcall psmouse_init+0x0/0x7c [psmouse] returned 0 after 87 usecs > >>> [ 3.043051] random: get_random_u32 called from cache_random_seq_create+0xa3/0x1f0 with crng_init=1 > >>> [ 3.043154] random: get_random_u32 called from cache_alloc_refill+0x5bb/0x13d0 with crng_init=1 > >>> [ 3.043187] random: get_random_u32 called from cache_random_seq_create+0xa3/0x1f0 with crng_init=1 > >>> [ 3.043198] random: get_random_u32 called from cache_alloc_refill+0x5bb/0x13d0 with crng_init=1 > >>> [ 3.043229] random: get_random_u32 called from cache_random_seq_create+0xa3/0x1f0 with crng_init=1 > >>> [ 3.043265] random: get_random_u32 called from cache_alloc_refill+0x5bb/0x13d0 with crng_init=1 > >>> [ 3.043429] random: get_random_u32 called from cache_random_seq_create+0xa3/0x1f0 with crng_init=1 > >>> [ 3.043479] random: get_random_u32 called from cache_alloc_refill+0x5bb/0x13d0 with crng_init=1 > >>> [ 3.043749] random: get_random_bytes called from key_alloc+0x1fc/0x5e0 with crng_init=1 > >>> [ 3.043973] random: get_random_u32 called from cache_random_seq_create+0xa3/0x1f0 with crng_init=1 > >>> [ 3.045483] random: get_random_u32 called from arch_rnd.part.2+0x18/0x40 with crng_init=1 > >>> [ 3.045501] random: get_random_u32 called from load_elf_binary+0x76a/0x1d20 with crng_init=1 > >>> [ 3.045507] random: get_random_u32 called from arch_align_stack+0x45/0x70 with crng_init=1 > >>> [ 3.045528] random: get_random_u32 called from arch_rnd.part.2+0x18/0x40 with crng_init=1 > >>> [ 3.045558] random: get_random_u32 called from cache_alloc_refill+0x5bb/0x13d0 with crng_init=1 > >>> [ 3.045771] random: get_random_u32 called from cache_random_seq_create+0xa3/0x1f0 with crng_init=1 > >>> [ 3.046127] random: get_random_u32 called from cache_alloc_refill+0x5bb/0x13d0 with crng_init=1 > >>> [ 3.046197] calling pcsp_init+0x0/0x1000 [snd_pcsp] @ 221 > >>> [ 3.046206] Error: Driver 'pcspkr' is already registered, aborting... > >>> [ 3.046337] initcall pcsp_init+0x0/0x1000 [snd_pcsp] returned -16 after 128 usecs > >>> [ 3.046348] random: get_random_u32 called from arch_align_stack+0x45/0x70 with crng_init=1 > >>> [ 3.046363] random: get_random_bytes called from load_elf_binary+0xaf8/0x1d20 with crng_init=1 > >>> [ 3.046383] random: get_random_u32 called from randomize_page+0x42/0x57 with crng_init=1 > >>> [ 3.047312] random: get_random_u32 called from cache_alloc_refill+0x5bb/0x13d0 with crng_init=1 > >>> [ 3.048151] random: get_random_u32 called from cache_random_seq_create+0xa3/0x1f0 with crng_init=1 > >>> [ 3.048638] random: get_random_u32 called from cache_alloc_refill+0x5bb/0x13d0 with crng_init=1 > >>> [ 3.054325] random: get_random_u32 called from copy_process.part.33+0x186/0x2100 with crng_init=1 > >>> [ 3.054371] random: get_random_u32 called from cache_alloc_refill+0x5bb/0x13d0 with crng_init=1 > >>> [ 3.067344] usb usb3: New USB device found, idVendor=1d6b, idProduct=0001, bcdDevice= 4.17 > >>> [ 3.067350] usb usb3: New USB device strings: Mfr=3, Product=2, SerialNumber=1 > >>> [ 3.067353] usb usb3: Product: OHCI PCI host controller > >>> [ 3.067356] usb usb3: Manufacturer: Linux 4.17.0-rc2+ ohci_hcd > >>> [ 3.067359] usb usb3: SerialNumber: 0000:00:12.0 > >>> [ 3.067850] random: get_random_u32 called from cache_random_seq_create+0xa3/0x1f0 with crng_init=1 > >>> [ 3.067864] hub 3-0:1.0: USB hub found > >>> [ 3.067960] hub 3-0:1.0: 5 ports detected > >>> [ 3.068141] random: get_random_u32 called from cache_alloc_refill+0x5bb/0x13d0 with crng_init=1 > >>> [ 3.068618] 1 > >>> [ 3.068644] 2 > >>> [ 3.068953] 3 > >>> [ 3.068954] 4 > >>> [ 3.068955] 5 > >>> [ 3.068959] 6 > >>> [ 3.068960] 7 > >>> [ 3.068966] 8 > >>> [ 3.068967] 9 > >>> [ 3.069204] 1 > >>> [ 3.069217] 2 > >>> [ 3.069565] 3 > >>> [ 3.069566] 4 > >>> [ 3.069567] 5 > >>> [ 3.069568] 6 > >>> [ 3.069569] 7 > >>> [ 3.069581] 8 > >>> [ 3.069583] 9 > >>> [ 3.069774] random: get_random_u32 called from copy_process.part.33+0x186/0x2100 with crng_init=1 > >>> [ 3.069924] initcall azx_driver_init+0x0/0xfe4 [snd_hda_intel] returned 0 after 23153 usecs > >> > >> Unfortunately, it looks like the time stamps of the Linux kernel and > >> the initcall_debug time do not match. From the Linux time stamps it > >> should be 73 ms. > > > > Indeed. But even from this result, you can have a rough idea. > > As you can see, the most of time was spent before "1" point, which is > > the very beginning of azx_probe(). That is, the slowness is not in > > HD-audio driver probe itself. Rather it's likely because of parallel > > probing with other multiple devices. > > I agree. But that also makes it clear, that the probe can be done in > async task, doesn’t it? Yes, but it's no fix, either. The probe callback itself doesn't take any long time, but the problem is the stage before that. By declaring the async probe, you can hide it, but it doesn't mean that the whole issue is solved by that. thanks, Takashi From mboxrd@z Thu Jan 1 00:00:00 1970 From: Takashi Iwai Subject: Re: [PATCH] ALSA: hda: Request driver probe from an async task Date: Tue, 24 Apr 2018 16:10:28 +0200 Message-ID: References: <92d47260-8d68-15f9-02b5-9846f9957106@molgen.mpg.de> <56165337-caed-e8d3-1908-c7894911a645@molgen.mpg.de> Mime-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by alsa0.perex.cz (Postfix) with ESMTP id 5034F26722C for ; Tue, 24 Apr 2018 16:10:29 +0200 (CEST) In-Reply-To: <56165337-caed-e8d3-1908-c7894911a645@molgen.mpg.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org To: Paul Menzel Cc: alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org List-Id: alsa-devel@alsa-project.org T24gVHVlLCAyNCBBcHIgMjAxOCAxNjowMzo1MyArMDIwMCwKUGF1bCBNZW56ZWwgd3JvdGU6Cj4g Cj4gRGVhciBUYWthc2hpLAo+IAo+IAo+IE9uIDA0LzI0LzE4IDE0OjE1LCBUYWthc2hpIEl3YWkg d3JvdGU6Cj4gPiBPbiBUdWUsIDI0IEFwciAyMDE4IDEzOjU5OjU4ICswMjAwLAo+ID4gUGF1bCBN ZW56ZWwgd3JvdGU6Cj4gCj4gPj4gT24gMDQvMjMvMTggMTQ6MzMsIFRha2FzaGkgSXdhaSB3cm90 ZToKPiA+Pj4gT24gTW9uLCAyMyBBcHIgMjAxOCAxNDozMDozNiArMDIwMCwgUGF1bCBNZW56ZWwg d3JvdGU6Cj4gPj4KPiA+Pj4+IE9uIDA0LzIzLzE4IDE0OjIxLCBUYWthc2hpIEl3YWkgd3JvdGU6 Cj4gPj4+Pj4gT24gTW9uLCAyMyBBcHIgMjAxOCAxNDowNTo1MiArMDIwMCwgUGF1bCBNZW56ZWwg d3JvdGU6Cj4gPj4+Pj4+Cj4gPj4+Pj4+IEZyb206IFBhdWwgTWVuemVsIDxwbWVuemVsQG1vbGdl bi5tcGcuZGU+Cj4gPj4+Pj4+IERhdGU6IFNhdCwgMjQgTWFyIDIwMTggMDk6Mjg6NDMgKzAxMDAK PiA+Pj4+Pj4KPiA+Pj4+Pj4gT24gYW4gQVNSb2NrIEUzNTBNMSwgd2l0aCBMaW51eCA0LjE3LXJj MSBhY2NvcmRpbmcgdG8gYGluaXRjYWxsX2RlYnVnYAo+ID4+Pj4+PiBjYWxsaW5nIGBhenhfZHJp dmVyX2luaXRgIHRha2VzIHNvbWV0aW1lcyBtb3JlIHRoYW4gYSBmZXcgbWlsbGlzZWNvbmRzLAo+ ID4+Pj4+PiBhbmQgdXAgdG8gMjAwIG1zLgo+ID4+Pj4+Pgo+ID4+Pj4+PiBgYGAKPiA+Pj4+Pj4g WyAgICAyLjg5MjU5OF0gY2FsbGluZyAgYXp4X2RyaXZlcl9pbml0KzB4MC8weGZlNCBbc25kX2hk YV9pbnRlbF0gQCAyMTgKPiA+Pj4+Pj4gWyAgICAyLjk0MzAwMl0gaW5pdGNhbGwgYXp4X2RyaXZl cl9pbml0KzB4MC8weGZlNCBbc25kX2hkYV9pbnRlbF0KPiA+Pj4+Pj4gcmV0dXJuZWQgMCBhZnRl ciA0OTE5NSB1c2Vjcwo+ID4+Pj4+PiBgYGAKPiA+Pj4+Pj4KPiA+Pj4+Pj4gVHJ5aW5nIHRvIGV4 ZWN1dGUgdGhlIExpbnV4IGtlcm5lbCBpbiBsZXNzIHRoYW4gNTAwIG1zLCB0aGlzIGlzIHF1aXRl IGEKPiA+Pj4+Pj4gaG9sZC11cCwgYW5kIHRoZXJlZm9yZSByZXF1ZXN0IHRoZSBwcm9iZSBmcm9t IGFuIGFzeW5jIHRhc2suCj4gPj4+Pj4+Cj4gPj4+Pj4+IFdpdGggdGhpcyBjaGFuZ2UsIHRoZSB0 ZXN0IHNob3dzLCB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGVhcmxpZXIuCj4gPj4+Pj4+Cj4g Pj4+Pj4+IGBgYAo+ID4+Pj4+PiBbICAgIDMuMjU0ODAwXSBjYWxsaW5nICBhenhfZHJpdmVyX2lu aXQrMHgwLzB4ZmU0IFtzbmRfaGRhX2ludGVsXSBAIDIyNwo+ID4+Pj4+PiBbICAgIDMuMjU0ODg3 XSBpbml0Y2FsbCBhenhfZHJpdmVyX2luaXQrMHgwLzB4ZmU0IFtzbmRfaGRhX2ludGVsXQo+ID4+ Pj4+PiByZXR1cm5lZCAwIGFmdGVyIDY2IHVzZWNzCj4gPj4+Pj4+IGBgYAo+ID4+Pj4+Pgo+ID4+ Pj4+PiBUaGUgc2FtZSBiZWhhdmlvciBpcyB2aXNpYmxlIG9uIGEgRGVsbCBPcHRpUGxleCA3MDEw LiBUaGUgbG9uZ2VyIHRpbWVzCj4gPj4+Pj4+IHNlZW0gdG8gaGFwcGVuLCB3aGVuIHRoZSBtb2R1 bGUgKmUxMDAwZSogaXMgcHJvYmVkIGR1cmluZyB0aGUgc2FtZSB0aW1lLgo+ID4+Pj4+Pgo+ID4+ Pj4+PiBTaWduZWQtb2ZmLWJ5OiBQYXVsIE1lbnplbCA8cG1lbnplbEBtb2xnZW4ubXBnLmRlPgo+ ID4+Pj4+Cj4gPj4+Pj4gV2hhdCBhY3R1YWxseSB0b29rIHNvIGxvbmc/ICBDb3VsZCB5b3UgYW5h bHl6ZSBmdXJ0aGVyIGluc3RlYWQgb2YKPiA+Pj4+PiBibGluZGx5IHB1dHRpbmcgdGhlIGZsYWc/ Cj4gPj4+Pgo+ID4+Pj4gV2VsbCwgSSBhbSBub3Qgc3VyZS4gQ291bGQgeW91IHBsZWFzZSBnaXZl IG1lIGhpbnRzLCBob3cgdG8gZGVidWcgdGhpcwo+ID4+Pj4gZnVydGhlcj8gSXMgdGhlcmUgc29t ZSBkZWJ1ZyBmbGFnPwo+ID4+Pgo+ID4+PiBVc3VhbGx5IHBlcmYgd291bGQgaGVscCwgYnV0IGV2 ZW4gYSBzaW1wbGUgcHJpbnRrKCkgc2hvdWxkIHN1ZmZpY2UgdG8KPiA+Pj4gc2VlIHdoYXQncyBn b2luZyBvbiB0aGVyZSA6KQo+ID4+Cj4gPj4gUGxlYXNlIGZpbmQgdGhlIG1lc3NhZ2VzIGZvciBh IDIzIG1zIHJ1biBiZWxvdywgYW5kIHRoZSBkZWJ1ZyBwYXRjaAo+ID4+IGF0dGFjaGVkLgo+ID4+ Cj4gPj4+IFsgICAgMi45OTYyMzhdIGNhbGxpbmcgIGF6eF9kcml2ZXJfaW5pdCsweDAvMHhmZTQg W3NuZF9oZGFfaW50ZWxdIEAgMjE0Cj4gPj4+IFsgICAgMy4wMDk4MzhdIGNhbGxpbmcgIHJ0bDgx NjlfcGNpX2RyaXZlcl9pbml0KzB4MC8weDEwMDAgW3I4MTY5XSBAIDIxNwo+ID4+PiBbICAgIDMu MDA5OTA0XSByODE2OSBHaWdhYml0IEV0aGVybmV0IGRyaXZlciAyLjNMSy1OQVBJIGxvYWRlZAo+ ID4+PiBbICAgIDMuMDEwNzIxXSByYW5kb206IGdldF9yYW5kb21fYnl0ZXMgY2FsbGVkIGZyb20g aXB2Nl9yZWdlbl9ybmRpZCsweDJjLzB4MTAwIHdpdGggY3JuZ19pbml0PTEKPiA+Pj4gWyAgICAz LjAxMTI4M10gcjgxNjkgMDAwMDowMzowMC4wIGV0aDA6IFJUTDgxNjhlLzgxMTFlIGF0IDB4KHB0 cnZhbCksIGJjOjVmOmY0OmM4OmQzOjk4LCBYSUQgMGMyMDAwMDAgSVJRIDI2Cj4gPj4+IFsgICAg My4wMTEyODldIHI4MTY5IDAwMDA6MDM6MDAuMCBldGgwOiBqdW1ibyBmZWF0dXJlcyBbZnJhbWVz OiA5MjAwIGJ5dGVzLCB0eCBjaGVja3N1bW1pbmc6IGtvXQo+ID4+PiBbICAgIDMuMDEzODc2XSBp bml0Y2FsbCBydGw4MTY5X3BjaV9kcml2ZXJfaW5pdCsweDAvMHgxMDAwIFtyODE2OV0gcmV0dXJu ZWQgMCBhZnRlciAzOTE3IHVzZWNzCj4gPj4+IFsgICAgMy4wMzE3NTRdIGNhbGxpbmcgIHBjc3Br cl9wbGF0Zm9ybV9kcml2ZXJfaW5pdCsweDAvMHgxMDAwIFtwY3Nwa3JdIEAgMjIxCj4gPj4+IFsg ICAgMy4wMzE5MDRdIGlucHV0OiBQQyBTcGVha2VyIGFzIC9kZXZpY2VzL3BsYXRmb3JtL3Bjc3Br ci9pbnB1dC9pbnB1dDQKPiA+Pj4gWyAgICAzLjAzMjI4OF0gaW5pdGNhbGwgcGNzcGtyX3BsYXRm b3JtX2RyaXZlcl9pbml0KzB4MC8weDEwMDAgW3Bjc3Brcl0gcmV0dXJuZWQgMCBhZnRlciA1MDgg dXNlY3MKPiA+Pj4gWyAgICAzLjAzNDc5NV0gY2FsbGluZyAgcHNtb3VzZV9pbml0KzB4MC8weDdj IFtwc21vdXNlXSBAIDIyMAo+ID4+PiBbICAgIDMuMDM0OTAzXSBpbml0Y2FsbCBwc21vdXNlX2lu aXQrMHgwLzB4N2MgW3BzbW91c2VdIHJldHVybmVkIDAgYWZ0ZXIgODcgdXNlY3MKPiA+Pj4gWyAg ICAzLjA0MzA1MV0gcmFuZG9tOiBnZXRfcmFuZG9tX3UzMiBjYWxsZWQgZnJvbSBjYWNoZV9yYW5k b21fc2VxX2NyZWF0ZSsweGEzLzB4MWYwIHdpdGggY3JuZ19pbml0PTEKPiA+Pj4gWyAgICAzLjA0 MzE1NF0gcmFuZG9tOiBnZXRfcmFuZG9tX3UzMiBjYWxsZWQgZnJvbSBjYWNoZV9hbGxvY19yZWZp bGwrMHg1YmIvMHgxM2QwIHdpdGggY3JuZ19pbml0PTEKPiA+Pj4gWyAgICAzLjA0MzE4N10gcmFu ZG9tOiBnZXRfcmFuZG9tX3UzMiBjYWxsZWQgZnJvbSBjYWNoZV9yYW5kb21fc2VxX2NyZWF0ZSsw eGEzLzB4MWYwIHdpdGggY3JuZ19pbml0PTEKPiA+Pj4gWyAgICAzLjA0MzE5OF0gcmFuZG9tOiBn ZXRfcmFuZG9tX3UzMiBjYWxsZWQgZnJvbSBjYWNoZV9hbGxvY19yZWZpbGwrMHg1YmIvMHgxM2Qw IHdpdGggY3JuZ19pbml0PTEKPiA+Pj4gWyAgICAzLjA0MzIyOV0gcmFuZG9tOiBnZXRfcmFuZG9t X3UzMiBjYWxsZWQgZnJvbSBjYWNoZV9yYW5kb21fc2VxX2NyZWF0ZSsweGEzLzB4MWYwIHdpdGgg Y3JuZ19pbml0PTEKPiA+Pj4gWyAgICAzLjA0MzI2NV0gcmFuZG9tOiBnZXRfcmFuZG9tX3UzMiBj YWxsZWQgZnJvbSBjYWNoZV9hbGxvY19yZWZpbGwrMHg1YmIvMHgxM2QwIHdpdGggY3JuZ19pbml0 PTEKPiA+Pj4gWyAgICAzLjA0MzQyOV0gcmFuZG9tOiBnZXRfcmFuZG9tX3UzMiBjYWxsZWQgZnJv bSBjYWNoZV9yYW5kb21fc2VxX2NyZWF0ZSsweGEzLzB4MWYwIHdpdGggY3JuZ19pbml0PTEKPiA+ Pj4gWyAgICAzLjA0MzQ3OV0gcmFuZG9tOiBnZXRfcmFuZG9tX3UzMiBjYWxsZWQgZnJvbSBjYWNo ZV9hbGxvY19yZWZpbGwrMHg1YmIvMHgxM2QwIHdpdGggY3JuZ19pbml0PTEKPiA+Pj4gWyAgICAz LjA0Mzc0OV0gcmFuZG9tOiBnZXRfcmFuZG9tX2J5dGVzIGNhbGxlZCBmcm9tIGtleV9hbGxvYysw eDFmYy8weDVlMCB3aXRoIGNybmdfaW5pdD0xCj4gPj4+IFsgICAgMy4wNDM5NzNdIHJhbmRvbTog Z2V0X3JhbmRvbV91MzIgY2FsbGVkIGZyb20gY2FjaGVfcmFuZG9tX3NlcV9jcmVhdGUrMHhhMy8w eDFmMCB3aXRoIGNybmdfaW5pdD0xCj4gPj4+IFsgICAgMy4wNDU0ODNdIHJhbmRvbTogZ2V0X3Jh bmRvbV91MzIgY2FsbGVkIGZyb20gYXJjaF9ybmQucGFydC4yKzB4MTgvMHg0MCB3aXRoIGNybmdf aW5pdD0xCj4gPj4+IFsgICAgMy4wNDU1MDFdIHJhbmRvbTogZ2V0X3JhbmRvbV91MzIgY2FsbGVk IGZyb20gbG9hZF9lbGZfYmluYXJ5KzB4NzZhLzB4MWQyMCB3aXRoIGNybmdfaW5pdD0xCj4gPj4+ IFsgICAgMy4wNDU1MDddIHJhbmRvbTogZ2V0X3JhbmRvbV91MzIgY2FsbGVkIGZyb20gYXJjaF9h bGlnbl9zdGFjaysweDQ1LzB4NzAgd2l0aCBjcm5nX2luaXQ9MQo+ID4+PiBbICAgIDMuMDQ1NTI4 XSByYW5kb206IGdldF9yYW5kb21fdTMyIGNhbGxlZCBmcm9tIGFyY2hfcm5kLnBhcnQuMisweDE4 LzB4NDAgd2l0aCBjcm5nX2luaXQ9MQo+ID4+PiBbICAgIDMuMDQ1NTU4XSByYW5kb206IGdldF9y YW5kb21fdTMyIGNhbGxlZCBmcm9tIGNhY2hlX2FsbG9jX3JlZmlsbCsweDViYi8weDEzZDAgd2l0 aCBjcm5nX2luaXQ9MQo+ID4+PiBbICAgIDMuMDQ1NzcxXSByYW5kb206IGdldF9yYW5kb21fdTMy IGNhbGxlZCBmcm9tIGNhY2hlX3JhbmRvbV9zZXFfY3JlYXRlKzB4YTMvMHgxZjAgd2l0aCBjcm5n X2luaXQ9MQo+ID4+PiBbICAgIDMuMDQ2MTI3XSByYW5kb206IGdldF9yYW5kb21fdTMyIGNhbGxl ZCBmcm9tIGNhY2hlX2FsbG9jX3JlZmlsbCsweDViYi8weDEzZDAgd2l0aCBjcm5nX2luaXQ9MQo+ ID4+PiBbICAgIDMuMDQ2MTk3XSBjYWxsaW5nICBwY3NwX2luaXQrMHgwLzB4MTAwMCBbc25kX3Bj c3BdIEAgMjIxCj4gPj4+IFsgICAgMy4wNDYyMDZdIEVycm9yOiBEcml2ZXIgJ3Bjc3BrcicgaXMg YWxyZWFkeSByZWdpc3RlcmVkLCBhYm9ydGluZy4uLgo+ID4+PiBbICAgIDMuMDQ2MzM3XSBpbml0 Y2FsbCBwY3NwX2luaXQrMHgwLzB4MTAwMCBbc25kX3Bjc3BdIHJldHVybmVkIC0xNiBhZnRlciAx MjggdXNlY3MKPiA+Pj4gWyAgICAzLjA0NjM0OF0gcmFuZG9tOiBnZXRfcmFuZG9tX3UzMiBjYWxs ZWQgZnJvbSBhcmNoX2FsaWduX3N0YWNrKzB4NDUvMHg3MCB3aXRoIGNybmdfaW5pdD0xCj4gPj4+ IFsgICAgMy4wNDYzNjNdIHJhbmRvbTogZ2V0X3JhbmRvbV9ieXRlcyBjYWxsZWQgZnJvbSBsb2Fk X2VsZl9iaW5hcnkrMHhhZjgvMHgxZDIwIHdpdGggY3JuZ19pbml0PTEKPiA+Pj4gWyAgICAzLjA0 NjM4M10gcmFuZG9tOiBnZXRfcmFuZG9tX3UzMiBjYWxsZWQgZnJvbSByYW5kb21pemVfcGFnZSsw eDQyLzB4NTcgd2l0aCBjcm5nX2luaXQ9MQo+ID4+PiBbICAgIDMuMDQ3MzEyXSByYW5kb206IGdl dF9yYW5kb21fdTMyIGNhbGxlZCBmcm9tIGNhY2hlX2FsbG9jX3JlZmlsbCsweDViYi8weDEzZDAg d2l0aCBjcm5nX2luaXQ9MQo+ID4+PiBbICAgIDMuMDQ4MTUxXSByYW5kb206IGdldF9yYW5kb21f dTMyIGNhbGxlZCBmcm9tIGNhY2hlX3JhbmRvbV9zZXFfY3JlYXRlKzB4YTMvMHgxZjAgd2l0aCBj cm5nX2luaXQ9MQo+ID4+PiBbICAgIDMuMDQ4NjM4XSByYW5kb206IGdldF9yYW5kb21fdTMyIGNh bGxlZCBmcm9tIGNhY2hlX2FsbG9jX3JlZmlsbCsweDViYi8weDEzZDAgd2l0aCBjcm5nX2luaXQ9 MQo+ID4+PiBbICAgIDMuMDU0MzI1XSByYW5kb206IGdldF9yYW5kb21fdTMyIGNhbGxlZCBmcm9t IGNvcHlfcHJvY2Vzcy5wYXJ0LjMzKzB4MTg2LzB4MjEwMCB3aXRoIGNybmdfaW5pdD0xCj4gPj4+ IFsgICAgMy4wNTQzNzFdIHJhbmRvbTogZ2V0X3JhbmRvbV91MzIgY2FsbGVkIGZyb20gY2FjaGVf YWxsb2NfcmVmaWxsKzB4NWJiLzB4MTNkMCB3aXRoIGNybmdfaW5pdD0xCj4gPj4+IFsgICAgMy4w NjczNDRdIHVzYiB1c2IzOiBOZXcgVVNCIGRldmljZSBmb3VuZCwgaWRWZW5kb3I9MWQ2YiwgaWRQ cm9kdWN0PTAwMDEsIGJjZERldmljZT0gNC4xNwo+ID4+PiBbICAgIDMuMDY3MzUwXSB1c2IgdXNi MzogTmV3IFVTQiBkZXZpY2Ugc3RyaW5nczogTWZyPTMsIFByb2R1Y3Q9MiwgU2VyaWFsTnVtYmVy PTEKPiA+Pj4gWyAgICAzLjA2NzM1M10gdXNiIHVzYjM6IFByb2R1Y3Q6IE9IQ0kgUENJIGhvc3Qg Y29udHJvbGxlcgo+ID4+PiBbICAgIDMuMDY3MzU2XSB1c2IgdXNiMzogTWFudWZhY3R1cmVyOiBM aW51eCA0LjE3LjAtcmMyKyBvaGNpX2hjZAo+ID4+PiBbICAgIDMuMDY3MzU5XSB1c2IgdXNiMzog U2VyaWFsTnVtYmVyOiAwMDAwOjAwOjEyLjAKPiA+Pj4gWyAgICAzLjA2Nzg1MF0gcmFuZG9tOiBn ZXRfcmFuZG9tX3UzMiBjYWxsZWQgZnJvbSBjYWNoZV9yYW5kb21fc2VxX2NyZWF0ZSsweGEzLzB4 MWYwIHdpdGggY3JuZ19pbml0PTEKPiA+Pj4gWyAgICAzLjA2Nzg2NF0gaHViIDMtMDoxLjA6IFVT QiBodWIgZm91bmQKPiA+Pj4gWyAgICAzLjA2Nzk2MF0gaHViIDMtMDoxLjA6IDUgcG9ydHMgZGV0 ZWN0ZWQKPiA+Pj4gWyAgICAzLjA2ODE0MV0gcmFuZG9tOiBnZXRfcmFuZG9tX3UzMiBjYWxsZWQg ZnJvbSBjYWNoZV9hbGxvY19yZWZpbGwrMHg1YmIvMHgxM2QwIHdpdGggY3JuZ19pbml0PTEKPiA+ Pj4gWyAgICAzLjA2ODYxOF0gMQo+ID4+PiBbICAgIDMuMDY4NjQ0XSAyCj4gPj4+IFsgICAgMy4w Njg5NTNdIDMKPiA+Pj4gWyAgICAzLjA2ODk1NF0gNAo+ID4+PiBbICAgIDMuMDY4OTU1XSA1Cj4g Pj4+IFsgICAgMy4wNjg5NTldIDYKPiA+Pj4gWyAgICAzLjA2ODk2MF0gNwo+ID4+PiBbICAgIDMu MDY4OTY2XSA4Cj4gPj4+IFsgICAgMy4wNjg5NjddIDkKPiA+Pj4gWyAgICAzLjA2OTIwNF0gMQo+ ID4+PiBbICAgIDMuMDY5MjE3XSAyCj4gPj4+IFsgICAgMy4wNjk1NjVdIDMKPiA+Pj4gWyAgICAz LjA2OTU2Nl0gNAo+ID4+PiBbICAgIDMuMDY5NTY3XSA1Cj4gPj4+IFsgICAgMy4wNjk1NjhdIDYK PiA+Pj4gWyAgICAzLjA2OTU2OV0gNwo+ID4+PiBbICAgIDMuMDY5NTgxXSA4Cj4gPj4+IFsgICAg My4wNjk1ODNdIDkKPiA+Pj4gWyAgICAzLjA2OTc3NF0gcmFuZG9tOiBnZXRfcmFuZG9tX3UzMiBj YWxsZWQgZnJvbSBjb3B5X3Byb2Nlc3MucGFydC4zMysweDE4Ni8weDIxMDAgd2l0aCBjcm5nX2lu aXQ9MQo+ID4+PiBbICAgIDMuMDY5OTI0XSBpbml0Y2FsbCBhenhfZHJpdmVyX2luaXQrMHgwLzB4 ZmU0IFtzbmRfaGRhX2ludGVsXSByZXR1cm5lZCAwIGFmdGVyIDIzMTUzIHVzZWNzCj4gPj4KPiA+ PiBVbmZvcnR1bmF0ZWx5LCBpdCBsb29rcyBsaWtlIHRoZSB0aW1lIHN0YW1wcyBvZiB0aGUgTGlu dXgga2VybmVsIGFuZAo+ID4+IHRoZSBpbml0Y2FsbF9kZWJ1ZyB0aW1lIGRvIG5vdCBtYXRjaC4g RnJvbSB0aGUgTGludXggdGltZSBzdGFtcHMgaXQKPiA+PiBzaG91bGQgYmUgNzMgbXMuCj4gPgo+ ID4gSW5kZWVkLiAgQnV0IGV2ZW4gZnJvbSB0aGlzIHJlc3VsdCwgeW91IGNhbiBoYXZlIGEgcm91 Z2ggaWRlYS4KPiA+IEFzIHlvdSBjYW4gc2VlLCB0aGUgbW9zdCBvZiB0aW1lIHdhcyBzcGVudCBi ZWZvcmUgIjEiIHBvaW50LCB3aGljaCBpcwo+ID4gdGhlIHZlcnkgYmVnaW5uaW5nIG9mIGF6eF9w cm9iZSgpLiAgVGhhdCBpcywgdGhlIHNsb3duZXNzIGlzIG5vdCBpbgo+ID4gSEQtYXVkaW8gZHJp dmVyIHByb2JlIGl0c2VsZi4gIFJhdGhlciBpdCdzIGxpa2VseSBiZWNhdXNlIG9mIHBhcmFsbGVs Cj4gPiBwcm9iaW5nIHdpdGggb3RoZXIgbXVsdGlwbGUgZGV2aWNlcy4KPiAKPiBJIGFncmVlLiBC dXQgdGhhdCBhbHNvIG1ha2VzIGl0IGNsZWFyLCB0aGF0IHRoZSBwcm9iZSBjYW4gYmUgZG9uZSBp bgo+IGFzeW5jIHRhc2ssIGRvZXNu4oCZdCBpdD8KClllcywgYnV0IGl0J3Mgbm8gZml4LCBlaXRo ZXIuICBUaGUgcHJvYmUgY2FsbGJhY2sgaXRzZWxmIGRvZXNuJ3QgdGFrZQphbnkgbG9uZyB0aW1l LCBidXQgdGhlIHByb2JsZW0gaXMgdGhlIHN0YWdlIGJlZm9yZSB0aGF0LiAgQnkgZGVjbGFyaW5n CnRoZSBhc3luYyBwcm9iZSwgeW91IGNhbiBoaWRlIGl0LCBidXQgaXQgZG9lc24ndCBtZWFuIHRo YXQgdGhlIHdob2xlCmlzc3VlIGlzIHNvbHZlZCBieSB0aGF0LgoKCnRoYW5rcywKClRha2FzaGkK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWxzYS1kZXZl bCBtYWlsaW5nIGxpc3QKQWxzYS1kZXZlbEBhbHNhLXByb2plY3Qub3JnCmh0dHA6Ly9tYWlsbWFu LmFsc2EtcHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbHNhLWRldmVsCg==