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 6A58EC43334 for ; Fri, 1 Jul 2022 07:19:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234610AbiGAHTY (ORCPT ); Fri, 1 Jul 2022 03:19:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46720 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234567AbiGAHTV (ORCPT ); Fri, 1 Jul 2022 03:19:21 -0400 Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5DA614F1B7 for ; Fri, 1 Jul 2022 00:19:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1656659959; x=1688195959; h=message-id:date:mime-version:cc:subject:to:references: from:in-reply-to:content-transfer-encoding; bh=f2LF3fbG7J5Wrn29s+XWM8ikKjq+11FqN+GTp4OI9WM=; b=PUNrSzakSQntw1b7EUlCH3dC5uG7jelyVwZJN1jPAkK08Qw/h9aGwc/h IzjzFHz+KrpBsFYvvJ/bGCoNQZjRltQV+mRKjOTCyHKY+XKlVd59WYWXa 5QpfcoZLKC8R0HKVCcAWp+fS5jeaT9gqpop8pPyq3QpGC7ErY/9kxMrcC PZj1DUfUDfNZLSHy2YhMxbt/C1/ujBEiwwxJUKqTx8skbvcMtkx6f0/xv oMlJ0QhKMWS1avNgNbCtr66nGC6LNi/VgFaEp89Z3J/J8uCIG+/PR3iSe l2eilXkclcZNIy8GK9oRVY5gPHwdIx5rqMmaeQkIYSlntytG/eMx0s68e g==; X-IronPort-AV: E=McAfee;i="6400,9594,10394"; a="283675319" X-IronPort-AV: E=Sophos;i="5.92,236,1650956400"; d="scan'208";a="283675319" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Jul 2022 00:19:18 -0700 X-IronPort-AV: E=Sophos;i="5.92,236,1650956400"; d="scan'208";a="596143082" Received: from pchai-mobl.ccr.corp.intel.com (HELO [10.249.171.241]) ([10.249.171.241]) by fmsmga007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Jul 2022 00:19:16 -0700 Message-ID: Date: Fri, 1 Jul 2022 15:19:14 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.9.1 Cc: baolu.lu@linux.intel.com, kevin.tian@intel.com, ashok.raj@intel.com, linux-kernel@vger.kernel.org, iommu@lists.linux-foundation.org, cai@lca.pw, jacob.jun.pan@intel.com Subject: Re: [PATCH v2 5/7] iommu/vt-d: Fix suspicious RCU usage in probe_acpi_namespace_devices() Content-Language: en-US To: Robin Murphy , Joerg Roedel , David Woodhouse References: <20190612002851.17103-1-baolu.lu@linux.intel.com> <20190612002851.17103-6-baolu.lu@linux.intel.com> From: Baolu Lu In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2022/6/29 21:03, Robin Murphy wrote: > On 2019-06-12 01:28, Lu Baolu wrote: >> The drhd and device scope list should be iterated with the >> iommu global lock held. Otherwise, a suspicious RCU usage >> message will be displayed. >> >> [    3.695886] ============================= >> [    3.695917] WARNING: suspicious RCU usage >> [    3.695950] 5.2.0-rc2+ #2467 Not tainted >> [    3.695981] ----------------------------- >> [    3.696014] drivers/iommu/intel-iommu.c:4569 suspicious >> rcu_dereference_check() usage! >> [    3.696069] >>                 other info that might help us debug this: >> >> [    3.696126] >>                 rcu_scheduler_active = 2, debug_locks = 1 >> [    3.696173] no locks held by swapper/0/1. >> [    3.696204] >>                 stack backtrace: >> [    3.696241] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.2.0-rc2+ #2467 >> [    3.696370] Call Trace: >> [    3.696404]  dump_stack+0x85/0xcb >> [    3.696441]  intel_iommu_init+0x128c/0x13ce >> [    3.696478]  ? kmem_cache_free+0x16b/0x2c0 >> [    3.696516]  ? __fput+0x14b/0x270 >> [    3.696550]  ? __call_rcu+0xb7/0x300 >> [    3.696583]  ? get_max_files+0x10/0x10 >> [    3.696631]  ? set_debug_rodata+0x11/0x11 >> [    3.696668]  ? e820__memblock_setup+0x60/0x60 >> [    3.696704]  ? pci_iommu_init+0x16/0x3f >> [    3.696737]  ? set_debug_rodata+0x11/0x11 >> [    3.696770]  pci_iommu_init+0x16/0x3f >> [    3.696805]  do_one_initcall+0x5d/0x2e4 >> [    3.696844]  ? set_debug_rodata+0x11/0x11 >> [    3.696880]  ? rcu_read_lock_sched_held+0x6b/0x80 >> [    3.696924]  kernel_init_freeable+0x1f0/0x27c >> [    3.696961]  ? rest_init+0x260/0x260 >> [    3.696997]  kernel_init+0xa/0x110 >> [    3.697028]  ret_from_fork+0x3a/0x50 >> >> Fixes: fa212a97f3a36 ("iommu/vt-d: Probe DMA-capable ACPI name space >> devices") >> Signed-off-by: Lu Baolu >> --- >>   drivers/iommu/intel-iommu.c | 2 ++ >>   1 file changed, 2 insertions(+) >> >> diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c >> index 19c4c387a3f6..84e650c6a46d 100644 >> --- a/drivers/iommu/intel-iommu.c >> +++ b/drivers/iommu/intel-iommu.c >> @@ -4793,8 +4793,10 @@ int __init intel_iommu_init(void) >>       cpuhp_setup_state(CPUHP_IOMMU_INTEL_DEAD, "iommu/intel:dead", NULL, >>                 intel_iommu_cpu_dead); >> +    down_read(&dmar_global_lock); >>       if (probe_acpi_namespace_devices()) >>           pr_warn("ACPI name space devices didn't probe correctly\n"); >> +    up_read(&dmar_global_lock); > > Doing a bit of archaeology here, is this actually broken? If any ANDD > entries exist, we'd end up doing: > >   down_read(&dmar_global_lock) >   probe_acpi_namespace_devices() >   -> iommu_probe_device() >      -> iommu_create_device_direct_mappings() >         -> iommu_get_resv_regions() >            -> intel_iommu_get_resv_regions() >               -> down_read(&dmar_global_lock) > > I'm wondering whether this might explain why my bus_set_iommu series > prevented Baolu's machine from booting, since "iommu: Move bus setup to > IOMMU device registration" creates the same condition where we end up in > get_resv_regions (via bus_iommu_probe() this time) from the same task > that already holds dmar_global_lock. Of course that leaves me wondering > how it *did* manage to boot OK on my Xeon box, but maybe there's a > config difference or dumb luck at play? This is really problematic. Where does the latest bus_set_iommu series locate? I'd like to take a closer look at what happened here. Perhaps two weeks later? I'm busy with preparing Intel IOMMU patches for v5.20 these days. Best regards, baolu 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 smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136]) (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 94040C433EF for ; Fri, 1 Jul 2022 07:19:27 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 111E960FD1; Fri, 1 Jul 2022 07:19:27 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 111E960FD1 Authentication-Results: smtp3.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=intel.com header.i=@intel.com header.a=rsa-sha256 header.s=Intel header.b=UnFL8spe X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 6oGsOYQQvTq0; Fri, 1 Jul 2022 07:19:26 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp3.osuosl.org (Postfix) with ESMTPS id C5DC760B5A; Fri, 1 Jul 2022 07:19:25 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org C5DC760B5A Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 96B9EC0071; Fri, 1 Jul 2022 07:19:25 +0000 (UTC) Received: from smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136]) by lists.linuxfoundation.org (Postfix) with ESMTP id 282D4C002D for ; Fri, 1 Jul 2022 07:19:24 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id F065A60FBF for ; Fri, 1 Jul 2022 07:19:23 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org F065A60FBF X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id FvEbGEsbGN85 for ; Fri, 1 Jul 2022 07:19:22 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 2936C60B5A Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by smtp3.osuosl.org (Postfix) with ESMTPS id 2936C60B5A for ; Fri, 1 Jul 2022 07:19:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1656659962; x=1688195962; h=message-id:date:mime-version:cc:subject:to:references: from:in-reply-to:content-transfer-encoding; bh=f2LF3fbG7J5Wrn29s+XWM8ikKjq+11FqN+GTp4OI9WM=; b=UnFL8speaaok+35D/VwQdRPpArxFNZRpQEP/4eBap9akU6cGxcNx96mk S5/LXUOlHGZ9zRjDb1QABXGqYzb4D8ZmXFpt+kMW9/QxoB36kVd+XRm4G uQwjOxs4OvLqLNzFBTYV2+SVZz99NWhnTHLt9iZjfIPdZmBdQtkRW053Y thkWGHd8pCJ3eIxc8Pn9Loq2UMqynxjuyTAchZwzD2lXklfxRRJhWAZy+ tIJGxLo9OdObtXSu7OIz8UiovGFb+fksNCgFKpsa2kgKEWIWBIcFKAek/ H96Tf+Xffv2jiPK7MnZDdjCnbuWaOWzW3cwm3NKTvo1LeM3h1MgccJZEa A==; X-IronPort-AV: E=McAfee;i="6400,9594,10394"; a="346563600" X-IronPort-AV: E=Sophos;i="5.92,236,1650956400"; d="scan'208";a="346563600" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Jul 2022 00:19:19 -0700 X-IronPort-AV: E=Sophos;i="5.92,236,1650956400"; d="scan'208";a="596143082" Received: from pchai-mobl.ccr.corp.intel.com (HELO [10.249.171.241]) ([10.249.171.241]) by fmsmga007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Jul 2022 00:19:16 -0700 Message-ID: Date: Fri, 1 Jul 2022 15:19:14 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.9.1 Subject: Re: [PATCH v2 5/7] iommu/vt-d: Fix suspicious RCU usage in probe_acpi_namespace_devices() Content-Language: en-US To: Robin Murphy , Joerg Roedel , David Woodhouse References: <20190612002851.17103-1-baolu.lu@linux.intel.com> <20190612002851.17103-6-baolu.lu@linux.intel.com> From: Baolu Lu In-Reply-To: Cc: kevin.tian@intel.com, ashok.raj@intel.com, linux-kernel@vger.kernel.org, iommu@lists.linux-foundation.org, cai@lca.pw, jacob.jun.pan@intel.com X-BeenThere: iommu@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Development issues for Linux IOMMU support List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: iommu-bounces@lists.linux-foundation.org Sender: "iommu" T24gMjAyMi82LzI5IDIxOjAzLCBSb2JpbiBNdXJwaHkgd3JvdGU6Cj4gT24gMjAxOS0wNi0xMiAw MToyOCwgTHUgQmFvbHUgd3JvdGU6Cj4+IFRoZSBkcmhkIGFuZCBkZXZpY2Ugc2NvcGUgbGlzdCBz aG91bGQgYmUgaXRlcmF0ZWQgd2l0aCB0aGUKPj4gaW9tbXUgZ2xvYmFsIGxvY2sgaGVsZC4gT3Ro ZXJ3aXNlLCBhIHN1c3BpY2lvdXMgUkNVIHVzYWdlCj4+IG1lc3NhZ2Ugd2lsbCBiZSBkaXNwbGF5 ZWQuCj4+Cj4+IFvCoMKgwqAgMy42OTU4ODZdID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Cj4+IFvCoMKgwqAgMy42OTU5MTddIFdBUk5JTkc6IHN1c3BpY2lvdXMgUkNVIHVzYWdlCj4+IFvC oMKgwqAgMy42OTU5NTBdIDUuMi4wLXJjMisgIzI0NjcgTm90IHRhaW50ZWQKPj4gW8KgwqDCoCAz LjY5NTk4MV0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPj4gW8KgwqDCoCAzLjY5NjAx NF0gZHJpdmVycy9pb21tdS9pbnRlbC1pb21tdS5jOjQ1Njkgc3VzcGljaW91cyAKPj4gcmN1X2Rl cmVmZXJlbmNlX2NoZWNrKCkgdXNhZ2UhCj4+IFvCoMKgwqAgMy42OTYwNjldCj4+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBvdGhlciBpbmZvIHRoYXQgbWlnaHQgaGVscCB1cyBkZWJ1 ZyB0aGlzOgo+Pgo+PiBbwqDCoMKgIDMuNjk2MTI2XQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcmN1X3NjaGVkdWxlcl9hY3RpdmUgPSAyLCBkZWJ1Z19sb2NrcyA9IDEKPj4gW8Kg wqDCoCAzLjY5NjE3M10gbm8gbG9ja3MgaGVsZCBieSBzd2FwcGVyLzAvMS4KPj4gW8KgwqDCoCAz LjY5NjIwNF0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0YWNrIGJhY2t0cmFj ZToKPj4gW8KgwqDCoCAzLjY5NjI0MV0gQ1BVOiAwIFBJRDogMSBDb21tOiBzd2FwcGVyLzAgTm90 IHRhaW50ZWQgNS4yLjAtcmMyKyAjMjQ2Nwo+PiBbwqDCoMKgIDMuNjk2MzcwXSBDYWxsIFRyYWNl Ogo+PiBbwqDCoMKgIDMuNjk2NDA0XcKgIGR1bXBfc3RhY2srMHg4NS8weGNiCj4+IFvCoMKgwqAg My42OTY0NDFdwqAgaW50ZWxfaW9tbXVfaW5pdCsweDEyOGMvMHgxM2NlCj4+IFvCoMKgwqAgMy42 OTY0NzhdwqAgPyBrbWVtX2NhY2hlX2ZyZWUrMHgxNmIvMHgyYzAKPj4gW8KgwqDCoCAzLjY5NjUx Nl3CoCA/IF9fZnB1dCsweDE0Yi8weDI3MAo+PiBbwqDCoMKgIDMuNjk2NTUwXcKgID8gX19jYWxs X3JjdSsweGI3LzB4MzAwCj4+IFvCoMKgwqAgMy42OTY1ODNdwqAgPyBnZXRfbWF4X2ZpbGVzKzB4 MTAvMHgxMAo+PiBbwqDCoMKgIDMuNjk2NjMxXcKgID8gc2V0X2RlYnVnX3JvZGF0YSsweDExLzB4 MTEKPj4gW8KgwqDCoCAzLjY5NjY2OF3CoCA/IGU4MjBfX21lbWJsb2NrX3NldHVwKzB4NjAvMHg2 MAo+PiBbwqDCoMKgIDMuNjk2NzA0XcKgID8gcGNpX2lvbW11X2luaXQrMHgxNi8weDNmCj4+IFvC oMKgwqAgMy42OTY3MzddwqAgPyBzZXRfZGVidWdfcm9kYXRhKzB4MTEvMHgxMQo+PiBbwqDCoMKg IDMuNjk2NzcwXcKgIHBjaV9pb21tdV9pbml0KzB4MTYvMHgzZgo+PiBbwqDCoMKgIDMuNjk2ODA1 XcKgIGRvX29uZV9pbml0Y2FsbCsweDVkLzB4MmU0Cj4+IFvCoMKgwqAgMy42OTY4NDRdwqAgPyBz ZXRfZGVidWdfcm9kYXRhKzB4MTEvMHgxMQo+PiBbwqDCoMKgIDMuNjk2ODgwXcKgID8gcmN1X3Jl YWRfbG9ja19zY2hlZF9oZWxkKzB4NmIvMHg4MAo+PiBbwqDCoMKgIDMuNjk2OTI0XcKgIGtlcm5l bF9pbml0X2ZyZWVhYmxlKzB4MWYwLzB4MjdjCj4+IFvCoMKgwqAgMy42OTY5NjFdwqAgPyByZXN0 X2luaXQrMHgyNjAvMHgyNjAKPj4gW8KgwqDCoCAzLjY5Njk5N13CoCBrZXJuZWxfaW5pdCsweGEv MHgxMTAKPj4gW8KgwqDCoCAzLjY5NzAyOF3CoCByZXRfZnJvbV9mb3JrKzB4M2EvMHg1MAo+Pgo+ PiBGaXhlczogZmEyMTJhOTdmM2EzNiAoImlvbW11L3Z0LWQ6IFByb2JlIERNQS1jYXBhYmxlIEFD UEkgbmFtZSBzcGFjZSAKPj4gZGV2aWNlcyIpCj4+IFNpZ25lZC1vZmYtYnk6IEx1IEJhb2x1IDxi YW9sdS5sdUBsaW51eC5pbnRlbC5jb20+Cj4+IC0tLQo+PiDCoCBkcml2ZXJzL2lvbW11L2ludGVs LWlvbW11LmMgfCAyICsrCj4+IMKgIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKPj4K Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvaW50ZWwtaW9tbXUuYyBiL2RyaXZlcnMvaW9t bXUvaW50ZWwtaW9tbXUuYwo+PiBpbmRleCAxOWM0YzM4N2EzZjYuLjg0ZTY1MGM2YTQ2ZCAxMDA2 NDQKPj4gLS0tIGEvZHJpdmVycy9pb21tdS9pbnRlbC1pb21tdS5jCj4+ICsrKyBiL2RyaXZlcnMv aW9tbXUvaW50ZWwtaW9tbXUuYwo+PiBAQCAtNDc5Myw4ICs0NzkzLDEwIEBAIGludCBfX2luaXQg aW50ZWxfaW9tbXVfaW5pdCh2b2lkKQo+PiDCoMKgwqDCoMKgIGNwdWhwX3NldHVwX3N0YXRlKENQ VUhQX0lPTU1VX0lOVEVMX0RFQUQsICJpb21tdS9pbnRlbDpkZWFkIiwgTlVMTCwKPj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludGVsX2lvbW11X2NwdV9kZWFkKTsKPj4gK8KgwqDC oCBkb3duX3JlYWQoJmRtYXJfZ2xvYmFsX2xvY2spOwo+PiDCoMKgwqDCoMKgIGlmIChwcm9iZV9h Y3BpX25hbWVzcGFjZV9kZXZpY2VzKCkpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBwcl93YXJuKCJB Q1BJIG5hbWUgc3BhY2UgZGV2aWNlcyBkaWRuJ3QgcHJvYmUgY29ycmVjdGx5XG4iKTsKPj4gK8Kg wqDCoCB1cF9yZWFkKCZkbWFyX2dsb2JhbF9sb2NrKTsKPiAKPiBEb2luZyBhIGJpdCBvZiBhcmNo YWVvbG9neSBoZXJlLCBpcyB0aGlzIGFjdHVhbGx5IGJyb2tlbj8gSWYgYW55IEFOREQgCj4gZW50 cmllcyBleGlzdCwgd2UnZCBlbmQgdXAgZG9pbmc6Cj4gCj4gIMKgIGRvd25fcmVhZCgmZG1hcl9n bG9iYWxfbG9jaykKPiAgwqAgcHJvYmVfYWNwaV9uYW1lc3BhY2VfZGV2aWNlcygpCj4gIMKgIC0+ IGlvbW11X3Byb2JlX2RldmljZSgpCj4gIMKgwqDCoMKgIC0+IGlvbW11X2NyZWF0ZV9kZXZpY2Vf ZGlyZWN0X21hcHBpbmdzKCkKPiAgwqDCoMKgwqDCoMKgwqAgLT4gaW9tbXVfZ2V0X3Jlc3ZfcmVn aW9ucygpCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgIC0+IGludGVsX2lvbW11X2dldF9yZXN2X3Jl Z2lvbnMoKQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAtPiBkb3duX3JlYWQoJmRtYXJf Z2xvYmFsX2xvY2spCj4gCj4gSSdtIHdvbmRlcmluZyB3aGV0aGVyIHRoaXMgbWlnaHQgZXhwbGFp biB3aHkgbXkgYnVzX3NldF9pb21tdSBzZXJpZXMgCj4gcHJldmVudGVkIEJhb2x1J3MgbWFjaGlu ZSBmcm9tIGJvb3RpbmcsIHNpbmNlICJpb21tdTogTW92ZSBidXMgc2V0dXAgdG8gCj4gSU9NTVUg ZGV2aWNlIHJlZ2lzdHJhdGlvbiIgY3JlYXRlcyB0aGUgc2FtZSBjb25kaXRpb24gd2hlcmUgd2Ug ZW5kIHVwIGluIAo+IGdldF9yZXN2X3JlZ2lvbnMgKHZpYSBidXNfaW9tbXVfcHJvYmUoKSB0aGlz IHRpbWUpIGZyb20gdGhlIHNhbWUgdGFzayAKPiB0aGF0IGFscmVhZHkgaG9sZHMgZG1hcl9nbG9i YWxfbG9jay4gT2YgY291cnNlIHRoYXQgbGVhdmVzIG1lIHdvbmRlcmluZyAKPiBob3cgaXQgKmRp ZCogbWFuYWdlIHRvIGJvb3QgT0sgb24gbXkgWGVvbiBib3gsIGJ1dCBtYXliZSB0aGVyZSdzIGEg Cj4gY29uZmlnIGRpZmZlcmVuY2Ugb3IgZHVtYiBsdWNrIGF0IHBsYXk/CgpUaGlzIGlzIHJlYWxs eSBwcm9ibGVtYXRpYy4gV2hlcmUgZG9lcyB0aGUgbGF0ZXN0IGJ1c19zZXRfaW9tbXUgc2VyaWVz CmxvY2F0ZT8gSSdkIGxpa2UgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHdoYXQgaGFwcGVuZWQg aGVyZS4gUGVyaGFwcwp0d28gd2Vla3MgbGF0ZXI/IEknbSBidXN5IHdpdGggcHJlcGFyaW5nIElu dGVsIElPTU1VIHBhdGNoZXMgZm9yIHY1LjIwCnRoZXNlIGRheXMuCgpCZXN0IHJlZ2FyZHMsCmJh b2x1Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlvbW11 IG1haWxpbmcgbGlzdAppb21tdUBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xp c3RzLmxpbnV4Zm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9pb21tdQ==