From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 09716666C for ; Fri, 15 Jul 2022 12:37:24 +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 B22081474; Fri, 15 Jul 2022 05:37:24 -0700 (PDT) Received: from [10.57.86.139] (unknown [10.57.86.139]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 712783F73D; Fri, 15 Jul 2022 05:37:22 -0700 (PDT) Message-ID: <6557623d-3e4e-9f3e-e735-fd9654305f65@arm.com> Date: Fri, 15 Jul 2022 13:37:18 +0100 Precedence: bulk X-Mailing-List: iommu@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: Re: [PATCH v3 01/15] iommu/vt-d: Handle race between registration and device probe Content-Language: en-GB To: Baolu Lu , joro@8bytes.org Cc: will@kernel.org, iommu@lists.linux.dev, linux-arm-kernel@lists.infradead.org, suravee.suthikulpanit@amd.com, vasant.hegde@amd.com, mjrosato@linux.ibm.com, gerald.schaefer@linux.ibm.com, schnelle@linux.ibm.com, linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org References: <894db0ccae854b35c73814485569b634237b5538.1657034828.git.robin.murphy@arm.com> <903a1677-4217-d793-6295-3927143d98fb@linux.intel.com> From: Robin Murphy In-Reply-To: <903a1677-4217-d793-6295-3927143d98fb@linux.intel.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 2022-07-08 08:52, Baolu Lu wrote: > On 2022/7/6 01:08, Robin Murphy wrote: >> That also highlights an issue with intel_iommu_get_resv_regions() taking >> dmar_global_lock from within a section where intel_iommu_init() already >> holds it, which already exists via probe_acpi_namespace_devices() when >> an ANDD device is probed, but gets more obvious with the upcoming change >> to iommu_device_register(). Since they are both read locks it manages >> not to deadlock in practice, so I'm leaving it here for someone with >> more confidence to tackle a larger rework of the locking. > > I am trying to reproduce this problem. Strangely, even if I selected > CONFIG_LOCKDEP=y, the kernel didn't complain anything. :-) FWIW, see below for the full report I get with this series applied (my machine doesn't have any ANDD entries to trigger the existing case). > In fact the rmrr list in the Intel IOMMU driver is always static after > parsing the ACPI/DMAR tables. There's no need to protect it with a lock. > Hence we can safely remove below down/up_read(). IIRC that leads to RCU warnings via for_each_dev_scope(), though. I did try replacing this down_read() with rcu_read_lock(), but then it doesn't like the GFP_KERNEL allocation in iommu_alloc_resv_region(), and that's where I gave up :) I'm mostly left wondering whether the dmar_drhd_units list really needs to be RCU protected at all, as that seems to be the root of most of the problems here. Cheers, Robin. > 4512 static void intel_iommu_get_resv_regions(struct device *device, > 4513                                          struct list_head *head) > 4514 { > 4515         int prot = DMA_PTE_READ | DMA_PTE_WRITE; > 4516         struct iommu_resv_region *reg; > 4517         struct dmar_rmrr_unit *rmrr; > 4518         struct device *i_dev; > 4519         int i; > 4520 > 4521         down_read(&dmar_global_lock); > 4522         for_each_rmrr_units(rmrr) { > 4523                 for_each_active_dev_scope(rmrr->devices, > rmrr->devices_cnt, > 4524                                           i, i_dev) { > > Best regards, > baolu ---->8----- [ 11.421712] pci 0000:00:1b.0: Adding to iommu group 0 [ 11.421977] [ 11.421978] ============================================ [ 11.421979] WARNING: possible recursive locking detected [ 11.421981] 5.19.0-rc3-00015-gdc44a2269276 #32 Not tainted [ 11.421984] -------------------------------------------- [ 11.421985] swapper/0/1 is trying to acquire lock: [ 11.421986] ffffffffb987b770 (dmar_global_lock){++++}-{3:3}, at: intel_iommu_get_resv_regions+0x28/0x3a0 [ 11.422000] [ 11.422000] but task is already holding lock: [ 11.422001] ffffffffb987b770 (dmar_global_lock){++++}-{3:3}, at: intel_iommu_init+0x1638/0x1a08 [ 11.422011] [ 11.422011] other info that might help us debug this: [ 11.422013] Possible unsafe locking scenario: [ 11.422013] [ 11.422013] CPU0 [ 11.422014] ---- [ 11.422015] lock(dmar_global_lock); [ 11.422018] lock(dmar_global_lock); [ 11.422020] [ 11.422020] *** DEADLOCK *** [ 11.422020] [ 11.422021] May be due to missing lock nesting notation [ 11.422021] [ 11.422022] 2 locks held by swapper/0/1: [ 11.422024] #0: ffffffffb987b770 (dmar_global_lock){++++}-{3:3}, at: intel_iommu_init+0x1638/0x1a08 [ 11.422033] #1: ffff8881077a10c0 (&group->mutex){+.+.}-{3:3}, at: bus_iommu_probe+0x139/0x4c0 [ 11.422044] [ 11.422044] stack backtrace: [ 11.422046] CPU: 8 PID: 1 Comm: swapper/0 Not tainted 5.19.0-rc3-00015-gdc44a2269276 #32 [ 11.422050] Hardware name: LENOVO 30B6S08J03/1030, BIOS S01KT29A 06/20/2016 [ 11.422052] Call Trace: [ 11.422054] [ 11.422056] dump_stack_lvl+0x45/0x59 [ 11.422064] __lock_acquire.cold+0x131/0x305 [ 11.422075] ? lockdep_hardirqs_on_prepare+0x220/0x220 [ 11.422082] ? lock_is_held_type+0xd7/0x130 [ 11.422090] ? rcu_read_lock_sched_held+0x9c/0xd0 [ 11.422098] lock_acquire+0x165/0x410 [ 11.422102] ? intel_iommu_get_resv_regions+0x28/0x3a0 [ 11.422108] ? lock_release+0x410/0x410 [ 11.422112] ? __iommu_domain_alloc+0xc5/0x130 [ 11.422116] ? iommu_group_alloc_default_domain+0x16/0x90 [ 11.422121] ? bus_iommu_probe+0x26d/0x4c0 [ 11.422126] ? iommu_device_register+0x11e/0x160 [ 11.422130] ? intel_iommu_init+0x16e0/0x1a08 [ 11.422135] ? do_one_initcall+0xb6/0x3c0 [ 11.422140] ? lock_is_held_type+0xd7/0x130 [ 11.422147] down_read+0x97/0x2f0 [ 11.422152] ? intel_iommu_get_resv_regions+0x28/0x3a0 [ 11.422156] ? rcu_read_lock_bh_held+0xb0/0xb0 [ 11.422161] ? rwsem_down_read_slowpath+0xa10/0xa10 [ 11.422166] ? find_held_lock+0x85/0xa0 [ 11.422173] intel_iommu_get_resv_regions+0x28/0x3a0 [ 11.422178] ? rcu_read_lock_sched_held+0x9c/0xd0 [ 11.422185] iommu_create_device_direct_mappings.isra.0+0x11a/0x330 [ 11.422193] ? iommu_map+0x50/0x50 [ 11.422198] ? __iommu_domain_alloc+0xc5/0x130 [ 11.422205] bus_iommu_probe+0x2bc/0x4c0 [ 11.422210] ? iommu_device_register+0xba/0x160 [ 11.422216] ? iommu_group_default_domain+0x20/0x20 [ 11.422221] ? do_raw_spin_lock+0x114/0x1d0 [ 11.422226] ? rwlock_bug.part.0+0x50/0x50 [ 11.422231] ? rwsem_down_read_slowpath+0xa10/0xa10 [ 11.422239] iommu_device_register+0x11e/0x160 [ 11.422244] intel_iommu_init+0x16e0/0x1a08 [ 11.422249] ? rcu_read_lock_bh_held+0xb0/0xb0 [ 11.422254] ? _raw_spin_unlock_irqrestore+0x28/0x50 [ 11.422261] ? lock_release+0x240/0x410 [ 11.422265] ? populate_rootfs+0x26/0x37 [ 11.422272] ? lock_downgrade+0x3a0/0x3a0 [ 11.422277] ? dmar_parse_one_rmrr+0x203/0x203 [ 11.422281] ? lock_is_held_type+0xd7/0x130 [ 11.422286] ? iommu_setup+0x282/0x282 [ 11.422291] ? rcu_read_lock_sched_held+0x9c/0xd0 [ 11.422296] ? rcu_read_lock_bh_held+0xb0/0xb0 [ 11.422301] ? up_write+0xd3/0x260 [ 11.422305] ? iommu_setup+0x282/0x282 [ 11.422309] pci_iommu_init+0x15/0x39 [ 11.422313] do_one_initcall+0xb6/0x3c0 [ 11.422317] ? initcall_blacklisted+0x120/0x120 [ 11.422322] ? rcu_read_lock_sched_held+0x9c/0xd0 [ 11.422327] ? rcu_read_lock_bh_held+0xb0/0xb0 [ 11.422331] ? kasan_unpoison+0x23/0x50 [ 11.422337] ? __kasan_slab_alloc+0x2c/0x80 [ 11.422344] kernel_init_freeable+0x330/0x389 [ 11.422349] ? rest_init+0x1b0/0x1b0 [ 11.422354] kernel_init+0x14/0x130 [ 11.422359] ret_from_fork+0x22/0x30 [ 11.422367] 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 20636C433EF for ; Fri, 15 Jul 2022 12:38:33 +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-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=wITiYrJCcnT7rJs+0gq8frjf+eFzmM4UYrMqpdSotOE=; b=pN7bR+BW6kGO5s NJpez1po4w2QNr1CaKJCK4xKR/wUO8t0KQkWy6zqVAKFKIH0suHNmXdW9wyNqZJsIouIL9m5CSkSp xx6xk/cf94ZThBSoe2Neq8QNWSrMBayBpa6L3FoaLsdjz49oOXexs5Y+6vLL1FYC4VhKk4tUQnVTU gwx0wWXfnYpwTW8tnBkT+qqhukGdGm+P9d54jJ+C5lRVtf4sFNlKF5dTTULMe0Q8PvKnJerF9P5Hw PPzO/Twb0xhojKH6kGHbcuvtM2Xa5dldwtazjZdMAWb7ec7p1iaq70G1CxDc/zv30oYzo10h4305c dq3Fn9gzgnUaawRJ6S+Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oCKZY-006yBq-Gx; Fri, 15 Jul 2022 12:37:32 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oCKZT-006y91-F2 for linux-arm-kernel@lists.infradead.org; Fri, 15 Jul 2022 12:37:30 +0000 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 B22081474; Fri, 15 Jul 2022 05:37:24 -0700 (PDT) Received: from [10.57.86.139] (unknown [10.57.86.139]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 712783F73D; Fri, 15 Jul 2022 05:37:22 -0700 (PDT) Message-ID: <6557623d-3e4e-9f3e-e735-fd9654305f65@arm.com> Date: Fri, 15 Jul 2022 13:37:18 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: Re: [PATCH v3 01/15] iommu/vt-d: Handle race between registration and device probe Content-Language: en-GB To: Baolu Lu , joro@8bytes.org Cc: will@kernel.org, iommu@lists.linux.dev, linux-arm-kernel@lists.infradead.org, suravee.suthikulpanit@amd.com, vasant.hegde@amd.com, mjrosato@linux.ibm.com, gerald.schaefer@linux.ibm.com, schnelle@linux.ibm.com, linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org References: <894db0ccae854b35c73814485569b634237b5538.1657034828.git.robin.murphy@arm.com> <903a1677-4217-d793-6295-3927143d98fb@linux.intel.com> From: Robin Murphy In-Reply-To: <903a1677-4217-d793-6295-3927143d98fb@linux.intel.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220715_053727_628520_1E3E4DBE X-CRM114-Status: GOOD ( 16.00 ) 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gMjAyMi0wNy0wOCAwODo1MiwgQmFvbHUgTHUgd3JvdGU6Cj4gT24gMjAyMi83LzYgMDE6MDgs IFJvYmluIE11cnBoeSB3cm90ZToKPj4gVGhhdCBhbHNvIGhpZ2hsaWdodHMgYW4gaXNzdWUgd2l0 aCBpbnRlbF9pb21tdV9nZXRfcmVzdl9yZWdpb25zKCkgdGFraW5nCj4+IGRtYXJfZ2xvYmFsX2xv Y2sgZnJvbSB3aXRoaW4gYSBzZWN0aW9uIHdoZXJlIGludGVsX2lvbW11X2luaXQoKSBhbHJlYWR5 Cj4+IGhvbGRzIGl0LCB3aGljaCBhbHJlYWR5IGV4aXN0cyB2aWEgcHJvYmVfYWNwaV9uYW1lc3Bh Y2VfZGV2aWNlcygpIHdoZW4KPj4gYW4gQU5ERCBkZXZpY2UgaXMgcHJvYmVkLCBidXQgZ2V0cyBt b3JlIG9idmlvdXMgd2l0aCB0aGUgdXBjb21pbmcgY2hhbmdlCj4+IHRvIGlvbW11X2RldmljZV9y ZWdpc3RlcigpLiBTaW5jZSB0aGV5IGFyZSBib3RoIHJlYWQgbG9ja3MgaXQgbWFuYWdlcwo+PiBu b3QgdG8gZGVhZGxvY2sgaW4gcHJhY3RpY2UsIHNvIEknbSBsZWF2aW5nIGl0IGhlcmUgZm9yIHNv bWVvbmUgd2l0aAo+PiBtb3JlIGNvbmZpZGVuY2UgdG8gdGFja2xlIGEgbGFyZ2VyIHJld29yayBv ZiB0aGUgbG9ja2luZy4KPiAKPiBJIGFtIHRyeWluZyB0byByZXByb2R1Y2UgdGhpcyBwcm9ibGVt LiBTdHJhbmdlbHksIGV2ZW4gaWYgSSBzZWxlY3RlZAo+IENPTkZJR19MT0NLREVQPXksIHRoZSBr ZXJuZWwgZGlkbid0IGNvbXBsYWluIGFueXRoaW5nLiA6LSkKCkZXSVcsIHNlZSBiZWxvdyBmb3Ig dGhlIGZ1bGwgcmVwb3J0IEkgZ2V0IHdpdGggdGhpcyBzZXJpZXMgYXBwbGllZCAobXkgCm1hY2hp bmUgZG9lc24ndCBoYXZlIGFueSBBTkREIGVudHJpZXMgdG8gdHJpZ2dlciB0aGUgZXhpc3Rpbmcg Y2FzZSkuCgo+IEluIGZhY3QgdGhlIHJtcnIgbGlzdCBpbiB0aGUgSW50ZWwgSU9NTVUgZHJpdmVy IGlzIGFsd2F5cyBzdGF0aWMgYWZ0ZXIKPiBwYXJzaW5nIHRoZSBBQ1BJL0RNQVIgdGFibGVzLiBU aGVyZSdzIG5vIG5lZWQgdG8gcHJvdGVjdCBpdCB3aXRoIGEgbG9jay4KPiBIZW5jZSB3ZSBjYW4g c2FmZWx5IHJlbW92ZSBiZWxvdyBkb3duL3VwX3JlYWQoKS4KCklJUkMgdGhhdCBsZWFkcyB0byBS Q1Ugd2FybmluZ3MgdmlhIGZvcl9lYWNoX2Rldl9zY29wZSgpLCB0aG91Z2guIEkgZGlkIAp0cnkg cmVwbGFjaW5nIHRoaXMgZG93bl9yZWFkKCkgd2l0aCByY3VfcmVhZF9sb2NrKCksIGJ1dCB0aGVu IGl0IGRvZXNuJ3QgCmxpa2UgdGhlIEdGUF9LRVJORUwgYWxsb2NhdGlvbiBpbiBpb21tdV9hbGxv Y19yZXN2X3JlZ2lvbigpLCBhbmQgdGhhdCdzIAp3aGVyZSBJIGdhdmUgdXAgOikKCkknbSBtb3N0 bHkgbGVmdCB3b25kZXJpbmcgd2hldGhlciB0aGUgZG1hcl9kcmhkX3VuaXRzIGxpc3QgcmVhbGx5 IG5lZWRzIAp0byBiZSBSQ1UgcHJvdGVjdGVkIGF0IGFsbCwgYXMgdGhhdCBzZWVtcyB0byBiZSB0 aGUgcm9vdCBvZiBtb3N0IG9mIHRoZSAKcHJvYmxlbXMgaGVyZS4KCkNoZWVycywKUm9iaW4uCgo+ IDQ1MTIgc3RhdGljIHZvaWQgaW50ZWxfaW9tbXVfZ2V0X3Jlc3ZfcmVnaW9ucyhzdHJ1Y3QgZGV2 aWNlICpkZXZpY2UsCj4gNDUxM8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGxpc3Rf aGVhZCAqaGVhZCkKPiA0NTE0IHsKPiA0NTE1wqDCoMKgwqDCoMKgwqDCoCBpbnQgcHJvdCA9IERN QV9QVEVfUkVBRCB8IERNQV9QVEVfV1JJVEU7Cj4gNDUxNsKgwqDCoMKgwqDCoMKgwqAgc3RydWN0 IGlvbW11X3Jlc3ZfcmVnaW9uICpyZWc7Cj4gNDUxN8KgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRt YXJfcm1ycl91bml0ICpybXJyOwo+IDQ1MTjCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkZXZpY2Ug KmlfZGV2Owo+IDQ1MTnCoMKgwqDCoMKgwqDCoMKgIGludCBpOwo+IDQ1MjAKPiA0NTIxwqDCoMKg wqDCoMKgwqDCoCBkb3duX3JlYWQoJmRtYXJfZ2xvYmFsX2xvY2spOwo+IDQ1MjLCoMKgwqDCoMKg wqDCoMKgIGZvcl9lYWNoX3JtcnJfdW5pdHMocm1ycikgewo+IDQ1MjPCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBmb3JfZWFjaF9hY3RpdmVfZGV2X3Njb3BlKHJtcnItPmRldmljZXMs IAo+IHJtcnItPmRldmljZXNfY250LAo+IDQ1MjTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg aSwgaV9kZXYpIHsKPiAKPiBCZXN0IHJlZ2FyZHMsCj4gYmFvbHUKCgotLS0tPjgtLS0tLQoKWyAg IDExLjQyMTcxMl0gcGNpIDAwMDA6MDA6MWIuMDogQWRkaW5nIHRvIGlvbW11IGdyb3VwIDAKWyAg IDExLjQyMTk3N10KWyAgIDExLjQyMTk3OF0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KWyAgIDExLjQyMTk3OV0gV0FSTklORzogcG9zc2libGUgcmVjdXJzaXZl IGxvY2tpbmcgZGV0ZWN0ZWQKWyAgIDExLjQyMTk4MV0gNS4xOS4wLXJjMy0wMDAxNS1nZGM0NGEy MjY5Mjc2ICMzMiBOb3QgdGFpbnRlZApbICAgMTEuNDIxOTg0XSAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpbICAgMTEuNDIxOTg1XSBzd2FwcGVyLzAvMSBpcyB0 cnlpbmcgdG8gYWNxdWlyZSBsb2NrOgpbICAgMTEuNDIxOTg2XSBmZmZmZmZmZmI5ODdiNzcwIChk bWFyX2dsb2JhbF9sb2NrKXsrKysrfS17MzozfSwgYXQ6IAppbnRlbF9pb21tdV9nZXRfcmVzdl9y ZWdpb25zKzB4MjgvMHgzYTAKWyAgIDExLjQyMjAwMF0KWyAgIDExLjQyMjAwMF0gYnV0IHRhc2sg aXMgYWxyZWFkeSBob2xkaW5nIGxvY2s6ClsgICAxMS40MjIwMDFdIGZmZmZmZmZmYjk4N2I3NzAg KGRtYXJfZ2xvYmFsX2xvY2speysrKyt9LXszOjN9LCBhdDogCmludGVsX2lvbW11X2luaXQrMHgx NjM4LzB4MWEwOApbICAgMTEuNDIyMDExXQpbICAgMTEuNDIyMDExXSBvdGhlciBpbmZvIHRoYXQg bWlnaHQgaGVscCB1cyBkZWJ1ZyB0aGlzOgpbICAgMTEuNDIyMDEzXSAgUG9zc2libGUgdW5zYWZl IGxvY2tpbmcgc2NlbmFyaW86ClsgICAxMS40MjIwMTNdClsgICAxMS40MjIwMTNdICAgICAgICBD UFUwClsgICAxMS40MjIwMTRdICAgICAgICAtLS0tClsgICAxMS40MjIwMTVdICAgbG9jayhkbWFy X2dsb2JhbF9sb2NrKTsKWyAgIDExLjQyMjAxOF0gICBsb2NrKGRtYXJfZ2xvYmFsX2xvY2spOwpb ICAgMTEuNDIyMDIwXQpbICAgMTEuNDIyMDIwXSAgKioqIERFQURMT0NLICoqKgpbICAgMTEuNDIy MDIwXQpbICAgMTEuNDIyMDIxXSAgTWF5IGJlIGR1ZSB0byBtaXNzaW5nIGxvY2sgbmVzdGluZyBu b3RhdGlvbgpbICAgMTEuNDIyMDIxXQpbICAgMTEuNDIyMDIyXSAyIGxvY2tzIGhlbGQgYnkgc3dh cHBlci8wLzE6ClsgICAxMS40MjIwMjRdICAjMDogZmZmZmZmZmZiOTg3Yjc3MCAoZG1hcl9nbG9i YWxfbG9jayl7KysrK30tezM6M30sIGF0OiAKaW50ZWxfaW9tbXVfaW5pdCsweDE2MzgvMHgxYTA4 ClsgICAxMS40MjIwMzNdICAjMTogZmZmZjg4ODEwNzdhMTBjMCAoJmdyb3VwLT5tdXRleCl7Ky4r Ln0tezM6M30sIGF0OiAKYnVzX2lvbW11X3Byb2JlKzB4MTM5LzB4NGMwClsgICAxMS40MjIwNDRd ClsgICAxMS40MjIwNDRdIHN0YWNrIGJhY2t0cmFjZToKWyAgIDExLjQyMjA0Nl0gQ1BVOiA4IFBJ RDogMSBDb21tOiBzd2FwcGVyLzAgTm90IHRhaW50ZWQgCjUuMTkuMC1yYzMtMDAwMTUtZ2RjNDRh MjI2OTI3NiAjMzIKWyAgIDExLjQyMjA1MF0gSGFyZHdhcmUgbmFtZTogTEVOT1ZPIDMwQjZTMDhK MDMvMTAzMCwgQklPUyBTMDFLVDI5QSAKMDYvMjAvMjAxNgpbICAgMTEuNDIyMDUyXSBDYWxsIFRy YWNlOgpbICAgMTEuNDIyMDU0XSAgPFRBU0s+ClsgICAxMS40MjIwNTZdICBkdW1wX3N0YWNrX2x2 bCsweDQ1LzB4NTkKWyAgIDExLjQyMjA2NF0gIF9fbG9ja19hY3F1aXJlLmNvbGQrMHgxMzEvMHgz MDUKWyAgIDExLjQyMjA3NV0gID8gbG9ja2RlcF9oYXJkaXJxc19vbl9wcmVwYXJlKzB4MjIwLzB4 MjIwClsgICAxMS40MjIwODJdICA/IGxvY2tfaXNfaGVsZF90eXBlKzB4ZDcvMHgxMzAKWyAgIDEx LjQyMjA5MF0gID8gcmN1X3JlYWRfbG9ja19zY2hlZF9oZWxkKzB4OWMvMHhkMApbICAgMTEuNDIy MDk4XSAgbG9ja19hY3F1aXJlKzB4MTY1LzB4NDEwClsgICAxMS40MjIxMDJdICA/IGludGVsX2lv bW11X2dldF9yZXN2X3JlZ2lvbnMrMHgyOC8weDNhMApbICAgMTEuNDIyMTA4XSAgPyBsb2NrX3Jl bGVhc2UrMHg0MTAvMHg0MTAKWyAgIDExLjQyMjExMl0gID8gX19pb21tdV9kb21haW5fYWxsb2Mr MHhjNS8weDEzMApbICAgMTEuNDIyMTE2XSAgPyBpb21tdV9ncm91cF9hbGxvY19kZWZhdWx0X2Rv bWFpbisweDE2LzB4OTAKWyAgIDExLjQyMjEyMV0gID8gYnVzX2lvbW11X3Byb2JlKzB4MjZkLzB4 NGMwClsgICAxMS40MjIxMjZdICA/IGlvbW11X2RldmljZV9yZWdpc3RlcisweDExZS8weDE2MApb ICAgMTEuNDIyMTMwXSAgPyBpbnRlbF9pb21tdV9pbml0KzB4MTZlMC8weDFhMDgKWyAgIDExLjQy MjEzNV0gID8gZG9fb25lX2luaXRjYWxsKzB4YjYvMHgzYzAKWyAgIDExLjQyMjE0MF0gID8gbG9j a19pc19oZWxkX3R5cGUrMHhkNy8weDEzMApbICAgMTEuNDIyMTQ3XSAgZG93bl9yZWFkKzB4OTcv MHgyZjAKWyAgIDExLjQyMjE1Ml0gID8gaW50ZWxfaW9tbXVfZ2V0X3Jlc3ZfcmVnaW9ucysweDI4 LzB4M2EwClsgICAxMS40MjIxNTZdICA/IHJjdV9yZWFkX2xvY2tfYmhfaGVsZCsweGIwLzB4YjAK WyAgIDExLjQyMjE2MV0gID8gcndzZW1fZG93bl9yZWFkX3Nsb3dwYXRoKzB4YTEwLzB4YTEwClsg ICAxMS40MjIxNjZdICA/IGZpbmRfaGVsZF9sb2NrKzB4ODUvMHhhMApbICAgMTEuNDIyMTczXSAg aW50ZWxfaW9tbXVfZ2V0X3Jlc3ZfcmVnaW9ucysweDI4LzB4M2EwClsgICAxMS40MjIxNzhdICA/ IHJjdV9yZWFkX2xvY2tfc2NoZWRfaGVsZCsweDljLzB4ZDAKWyAgIDExLjQyMjE4NV0gIGlvbW11 X2NyZWF0ZV9kZXZpY2VfZGlyZWN0X21hcHBpbmdzLmlzcmEuMCsweDExYS8weDMzMApbICAgMTEu NDIyMTkzXSAgPyBpb21tdV9tYXArMHg1MC8weDUwClsgICAxMS40MjIxOThdICA/IF9faW9tbXVf ZG9tYWluX2FsbG9jKzB4YzUvMHgxMzAKWyAgIDExLjQyMjIwNV0gIGJ1c19pb21tdV9wcm9iZSsw eDJiYy8weDRjMApbICAgMTEuNDIyMjEwXSAgPyBpb21tdV9kZXZpY2VfcmVnaXN0ZXIrMHhiYS8w eDE2MApbICAgMTEuNDIyMjE2XSAgPyBpb21tdV9ncm91cF9kZWZhdWx0X2RvbWFpbisweDIwLzB4 MjAKWyAgIDExLjQyMjIyMV0gID8gZG9fcmF3X3NwaW5fbG9jaysweDExNC8weDFkMApbICAgMTEu NDIyMjI2XSAgPyByd2xvY2tfYnVnLnBhcnQuMCsweDUwLzB4NTAKWyAgIDExLjQyMjIzMV0gID8g cndzZW1fZG93bl9yZWFkX3Nsb3dwYXRoKzB4YTEwLzB4YTEwClsgICAxMS40MjIyMzldICBpb21t dV9kZXZpY2VfcmVnaXN0ZXIrMHgxMWUvMHgxNjAKWyAgIDExLjQyMjI0NF0gIGludGVsX2lvbW11 X2luaXQrMHgxNmUwLzB4MWEwOApbICAgMTEuNDIyMjQ5XSAgPyByY3VfcmVhZF9sb2NrX2JoX2hl bGQrMHhiMC8weGIwClsgICAxMS40MjIyNTRdICA/IF9yYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSsweDI4LzB4NTAKWyAgIDExLjQyMjI2MV0gID8gbG9ja19yZWxlYXNlKzB4MjQwLzB4NDEwClsg ICAxMS40MjIyNjVdICA/IHBvcHVsYXRlX3Jvb3RmcysweDI2LzB4MzcKWyAgIDExLjQyMjI3Ml0g ID8gbG9ja19kb3duZ3JhZGUrMHgzYTAvMHgzYTAKWyAgIDExLjQyMjI3N10gID8gZG1hcl9wYXJz ZV9vbmVfcm1ycisweDIwMy8weDIwMwpbICAgMTEuNDIyMjgxXSAgPyBsb2NrX2lzX2hlbGRfdHlw ZSsweGQ3LzB4MTMwClsgICAxMS40MjIyODZdICA/IGlvbW11X3NldHVwKzB4MjgyLzB4MjgyClsg ICAxMS40MjIyOTFdICA/IHJjdV9yZWFkX2xvY2tfc2NoZWRfaGVsZCsweDljLzB4ZDAKWyAgIDEx LjQyMjI5Nl0gID8gcmN1X3JlYWRfbG9ja19iaF9oZWxkKzB4YjAvMHhiMApbICAgMTEuNDIyMzAx XSAgPyB1cF93cml0ZSsweGQzLzB4MjYwClsgICAxMS40MjIzMDVdICA/IGlvbW11X3NldHVwKzB4 MjgyLzB4MjgyClsgICAxMS40MjIzMDldICBwY2lfaW9tbXVfaW5pdCsweDE1LzB4MzkKWyAgIDEx LjQyMjMxM10gIGRvX29uZV9pbml0Y2FsbCsweGI2LzB4M2MwClsgICAxMS40MjIzMTddICA/IGlu aXRjYWxsX2JsYWNrbGlzdGVkKzB4MTIwLzB4MTIwClsgICAxMS40MjIzMjJdICA/IHJjdV9yZWFk X2xvY2tfc2NoZWRfaGVsZCsweDljLzB4ZDAKWyAgIDExLjQyMjMyN10gID8gcmN1X3JlYWRfbG9j a19iaF9oZWxkKzB4YjAvMHhiMApbICAgMTEuNDIyMzMxXSAgPyBrYXNhbl91bnBvaXNvbisweDIz LzB4NTAKWyAgIDExLjQyMjMzN10gID8gX19rYXNhbl9zbGFiX2FsbG9jKzB4MmMvMHg4MApbICAg MTEuNDIyMzQ0XSAga2VybmVsX2luaXRfZnJlZWFibGUrMHgzMzAvMHgzODkKWyAgIDExLjQyMjM0 OV0gID8gcmVzdF9pbml0KzB4MWIwLzB4MWIwClsgICAxMS40MjIzNTRdICBrZXJuZWxfaW5pdCsw eDE0LzB4MTMwClsgICAxMS40MjIzNTldICByZXRfZnJvbV9mb3JrKzB4MjIvMHgzMApbICAgMTEu NDIyMzY3XSAgPC9UQVNLPgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxA bGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK