From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751978AbdJFJtd convert rfc822-to-8bit (ORCPT ); Fri, 6 Oct 2017 05:49:33 -0400 Received: from mail.fireflyinternet.com ([109.228.58.192]:61646 "EHLO fireflyinternet.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750714AbdJFJtc (ORCPT ); Fri, 6 Oct 2017 05:49:32 -0400 X-Default-Received-SPF: pass (skip=forwardok (res=PASS)) x-ip-name=78.156.65.138; Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8BIT To: Daniel Vetter , "Intel Graphics Development" From: Chris Wilson In-Reply-To: <20171006090637.25545-1-daniel.vetter@ffwll.ch> Cc: "LKML" , "Daniel Vetter" , "Tvrtko Ursulin" , "Joonas Lahtinen" , "Peter Zijlstra" , "Thomas Gleixner" , "Sasha Levin" , "Marta Lofstedt" , "Tejun Heo" , "Daniel Vetter" References: <20171006090637.25545-1-daniel.vetter@ffwll.ch> Message-ID: <150728331944.14660.4894296329110614339@mail.alporthouse.com> User-Agent: alot/0.3.6 Subject: Re: [PATCH 1/2] drm/i915: Preallocate our mmu notifier workequeu to unbreak cpu hotplug deadlock Date: Fri, 06 Oct 2017 10:48:39 +0100 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Quoting Daniel Vetter (2017-10-06 10:06:36) > 4.14-rc1 gained the fancy new cross-release support in lockdep, which > seems to have uncovered a few more rules about what is allowed and > isn't. > > This one here seems to indicate that allocating a work-queue while > holding mmap_sem is a no-go, so let's try to preallocate it. > > Of course another way to break this chain would be somewhere in the > cpu hotplug code, since this isn't the only trace we're finding now > which goes through msr_create_device. > > Full lockdep splat: > > ====================================================== > WARNING: possible circular locking dependency detected > 4.14.0-rc1-CI-CI_DRM_3118+ #1 Tainted: G U > ------------------------------------------------------ > prime_mmap/1551 is trying to acquire lock: > (cpu_hotplug_lock.rw_sem){++++}, at: [] apply_workqueue_attrs+0x17/0x50 > > but task is already holding lock: > (&dev_priv->mm_lock){+.+.}, at: [] i915_gem_userptr_init__mmu_notifier+0x14a/0x270 [i915] > > which lock already depends on the new lock. > > the existing dependency chain (in reverse order) is: > > -> #6 (&dev_priv->mm_lock){+.+.}: > __lock_acquire+0x1420/0x15e0 > lock_acquire+0xb0/0x200 > __mutex_lock+0x86/0x9b0 > mutex_lock_nested+0x1b/0x20 > i915_gem_userptr_init__mmu_notifier+0x14a/0x270 [i915] > i915_gem_userptr_ioctl+0x222/0x2c0 [i915] > drm_ioctl_kernel+0x69/0xb0 > drm_ioctl+0x2f9/0x3d0 > do_vfs_ioctl+0x94/0x670 > SyS_ioctl+0x41/0x70 > entry_SYSCALL_64_fastpath+0x1c/0xb1 > > -> #5 (&mm->mmap_sem){++++}: > __lock_acquire+0x1420/0x15e0 > lock_acquire+0xb0/0x200 > __might_fault+0x68/0x90 > _copy_to_user+0x23/0x70 > filldir+0xa5/0x120 > dcache_readdir+0xf9/0x170 > iterate_dir+0x69/0x1a0 > SyS_getdents+0xa5/0x140 > entry_SYSCALL_64_fastpath+0x1c/0xb1 > > -> #4 (&sb->s_type->i_mutex_key#5){++++}: > down_write+0x3b/0x70 > handle_create+0xcb/0x1e0 > devtmpfsd+0x139/0x180 > kthread+0x152/0x190 > ret_from_fork+0x27/0x40 > > -> #3 ((complete)&req.done){+.+.}: > __lock_acquire+0x1420/0x15e0 > lock_acquire+0xb0/0x200 > wait_for_common+0x58/0x210 > wait_for_completion+0x1d/0x20 > devtmpfs_create_node+0x13d/0x160 > device_add+0x5eb/0x620 > device_create_groups_vargs+0xe0/0xf0 > device_create+0x3a/0x40 > msr_device_create+0x2b/0x40 > cpuhp_invoke_callback+0xa3/0x840 > cpuhp_thread_fun+0x7a/0x150 > smpboot_thread_fn+0x18a/0x280 > kthread+0x152/0x190 > ret_from_fork+0x27/0x40 > > -> #2 (cpuhp_state){+.+.}: > __lock_acquire+0x1420/0x15e0 > lock_acquire+0xb0/0x200 > cpuhp_issue_call+0x10b/0x170 > __cpuhp_setup_state_cpuslocked+0x134/0x2a0 > __cpuhp_setup_state+0x46/0x60 > page_writeback_init+0x43/0x67 > pagecache_init+0x3d/0x42 > start_kernel+0x3a8/0x3fc > x86_64_start_reservations+0x2a/0x2c > x86_64_start_kernel+0x6d/0x70 > verify_cpu+0x0/0xfb > > -> #1 (cpuhp_state_mutex){+.+.}: > __lock_acquire+0x1420/0x15e0 > lock_acquire+0xb0/0x200 > __mutex_lock+0x86/0x9b0 > mutex_lock_nested+0x1b/0x20 > __cpuhp_setup_state_cpuslocked+0x52/0x2a0 > __cpuhp_setup_state+0x46/0x60 > page_alloc_init+0x28/0x30 > start_kernel+0x145/0x3fc > x86_64_start_reservations+0x2a/0x2c > x86_64_start_kernel+0x6d/0x70 > verify_cpu+0x0/0xfb > > -> #0 (cpu_hotplug_lock.rw_sem){++++}: > check_prev_add+0x430/0x840 > __lock_acquire+0x1420/0x15e0 > lock_acquire+0xb0/0x200 > cpus_read_lock+0x3d/0xb0 > apply_workqueue_attrs+0x17/0x50 > __alloc_workqueue_key+0x1d8/0x4d9 > i915_gem_userptr_init__mmu_notifier+0x1fb/0x270 [i915] > i915_gem_userptr_ioctl+0x222/0x2c0 [i915] > drm_ioctl_kernel+0x69/0xb0 > drm_ioctl+0x2f9/0x3d0 > do_vfs_ioctl+0x94/0x670 > SyS_ioctl+0x41/0x70 > entry_SYSCALL_64_fastpath+0x1c/0xb1 > > other info that might help us debug this: > > Chain exists of: > cpu_hotplug_lock.rw_sem --> &mm->mmap_sem --> &dev_priv->mm_lock > > Possible unsafe locking scenario: > > CPU0 CPU1 > ---- ---- > lock(&dev_priv->mm_lock); > lock(&mm->mmap_sem); > lock(&dev_priv->mm_lock); > lock(cpu_hotplug_lock.rw_sem); > > *** DEADLOCK *** > > 2 locks held by prime_mmap/1551: > #0: (&mm->mmap_sem){++++}, at: [] i915_gem_userptr_init__mmu_notifier+0x138/0x270 [i915] > #1: (&dev_priv->mm_lock){+.+.}, at: [] i915_gem_userptr_init__mmu_notifier+0x14a/0x270 [i915] > > stack backtrace: > CPU: 4 PID: 1551 Comm: prime_mmap Tainted: G U 4.14.0-rc1-CI-CI_DRM_3118+ #1 > Hardware name: Dell Inc. XPS 8300 /0Y2MRG, BIOS A06 10/17/2011 > Call Trace: > dump_stack+0x68/0x9f > print_circular_bug+0x235/0x3c0 > ? lockdep_init_map_crosslock+0x20/0x20 > check_prev_add+0x430/0x840 > __lock_acquire+0x1420/0x15e0 > ? __lock_acquire+0x1420/0x15e0 > ? lockdep_init_map_crosslock+0x20/0x20 > lock_acquire+0xb0/0x200 > ? apply_workqueue_attrs+0x17/0x50 > cpus_read_lock+0x3d/0xb0 > ? apply_workqueue_attrs+0x17/0x50 > apply_workqueue_attrs+0x17/0x50 > __alloc_workqueue_key+0x1d8/0x4d9 > ? __lockdep_init_map+0x57/0x1c0 > i915_gem_userptr_init__mmu_notifier+0x1fb/0x270 [i915] > i915_gem_userptr_ioctl+0x222/0x2c0 [i915] > ? i915_gem_userptr_release+0x140/0x140 [i915] > drm_ioctl_kernel+0x69/0xb0 > drm_ioctl+0x2f9/0x3d0 > ? i915_gem_userptr_release+0x140/0x140 [i915] > ? __do_page_fault+0x2a4/0x570 > do_vfs_ioctl+0x94/0x670 > ? entry_SYSCALL_64_fastpath+0x5/0xb1 > ? __this_cpu_preempt_check+0x13/0x20 > ? trace_hardirqs_on_caller+0xe3/0x1b0 > SyS_ioctl+0x41/0x70 > entry_SYSCALL_64_fastpath+0x1c/0xb1 > RIP: 0033:0x7fbb83c39587 > RSP: 002b:00007fff188dc228 EFLAGS: 00000246 ORIG_RAX: 0000000000000010 > RAX: ffffffffffffffda RBX: ffffffff81492963 RCX: 00007fbb83c39587 > RDX: 00007fff188dc260 RSI: 00000000c0186473 RDI: 0000000000000003 > RBP: ffffc90001487f88 R08: 0000000000000000 R09: 00007fff188dc2ac > R10: 00007fbb83efcb58 R11: 0000000000000246 R12: 0000000000000000 > R13: 0000000000000003 R14: 00000000c0186473 R15: 00007fff188dc2ac > ? __this_cpu_preempt_check+0x13/0x20 > > v2: Set ret correctly when we raced with another thread. > > v3: Use Chris' diff. Attach the right lockdep splat. > > Cc: Chris Wilson > Cc: Tvrtko Ursulin > Cc: Joonas Lahtinen > Cc: Peter Zijlstra > Cc: Thomas Gleixner > Cc: Sasha Levin > Cc: Marta Lofstedt > Cc: Tejun Heo > References: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_3180/shard-hsw3/igt@prime_mmap@test_userptr.html > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=102939 The difference is that I would have s/Bugzilla/References/. -Chris From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: Re: [PATCH 1/2] drm/i915: Preallocate our mmu notifier workequeu to unbreak cpu hotplug deadlock Date: Fri, 06 Oct 2017 10:48:39 +0100 Message-ID: <150728331944.14660.4894296329110614339@mail.alporthouse.com> References: <20171006090637.25545-1-daniel.vetter@ffwll.ch> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id B929E6E101 for ; Fri, 6 Oct 2017 09:49:35 +0000 (UTC) In-Reply-To: <20171006090637.25545-1-daniel.vetter@ffwll.ch> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Intel Graphics Development Cc: Peter Zijlstra , Daniel Vetter , LKML , Sasha Levin , Tejun Heo , Daniel Vetter , Thomas Gleixner List-Id: intel-gfx@lists.freedesktop.org UXVvdGluZyBEYW5pZWwgVmV0dGVyICgyMDE3LTEwLTA2IDEwOjA2OjM2KQo+IDQuMTQtcmMxIGdh aW5lZCB0aGUgZmFuY3kgbmV3IGNyb3NzLXJlbGVhc2Ugc3VwcG9ydCBpbiBsb2NrZGVwLCB3aGlj aAo+IHNlZW1zIHRvIGhhdmUgdW5jb3ZlcmVkIGEgZmV3IG1vcmUgcnVsZXMgYWJvdXQgd2hhdCBp cyBhbGxvd2VkIGFuZAo+IGlzbid0Lgo+IAo+IFRoaXMgb25lIGhlcmUgc2VlbXMgdG8gaW5kaWNh dGUgdGhhdCBhbGxvY2F0aW5nIGEgd29yay1xdWV1ZSB3aGlsZQo+IGhvbGRpbmcgbW1hcF9zZW0g aXMgYSBuby1nbywgc28gbGV0J3MgdHJ5IHRvIHByZWFsbG9jYXRlIGl0Lgo+IAo+IE9mIGNvdXJz ZSBhbm90aGVyIHdheSB0byBicmVhayB0aGlzIGNoYWluIHdvdWxkIGJlIHNvbWV3aGVyZSBpbiB0 aGUKPiBjcHUgaG90cGx1ZyBjb2RlLCBzaW5jZSB0aGlzIGlzbid0IHRoZSBvbmx5IHRyYWNlIHdl J3JlIGZpbmRpbmcgbm93Cj4gd2hpY2ggZ29lcyB0aHJvdWdoIG1zcl9jcmVhdGVfZGV2aWNlLgo+ IAo+IEZ1bGwgbG9ja2RlcCBzcGxhdDoKPiAKPiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KPiBXQVJOSU5HOiBwb3NzaWJsZSBjaXJjdWxhciBs b2NraW5nIGRlcGVuZGVuY3kgZGV0ZWN0ZWQKPiA0LjE0LjAtcmMxLUNJLUNJX0RSTV8zMTE4KyAj MSBUYWludGVkOiBHICAgICBVCj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCj4gcHJpbWVfbW1hcC8xNTUxIGlzIHRyeWluZyB0byBhY3F1aXJl IGxvY2s6Cj4gIChjcHVfaG90cGx1Z19sb2NrLnJ3X3NlbSl7KysrK30sIGF0OiBbPGZmZmZmZmZm ODEwOWRiYjc+XSBhcHBseV93b3JrcXVldWVfYXR0cnMrMHgxNy8weDUwCj4gCj4gYnV0IHRhc2sg aXMgYWxyZWFkeSBob2xkaW5nIGxvY2s6Cj4gICgmZGV2X3ByaXYtPm1tX2xvY2speysuKy59LCBh dDogWzxmZmZmZmZmZmEwMWE3YjJhPl0gaTkxNV9nZW1fdXNlcnB0cl9pbml0X19tbXVfbm90aWZp ZXIrMHgxNGEvMHgyNzAgW2k5MTVdCj4gCj4gd2hpY2ggbG9jayBhbHJlYWR5IGRlcGVuZHMgb24g dGhlIG5ldyBsb2NrLgo+IAo+IHRoZSBleGlzdGluZyBkZXBlbmRlbmN5IGNoYWluIChpbiByZXZl cnNlIG9yZGVyKSBpczoKPiAKPiAtPiAjNiAoJmRldl9wcml2LT5tbV9sb2NrKXsrLisufToKPiAg ICAgICAgX19sb2NrX2FjcXVpcmUrMHgxNDIwLzB4MTVlMAo+ICAgICAgICBsb2NrX2FjcXVpcmUr MHhiMC8weDIwMAo+ICAgICAgICBfX211dGV4X2xvY2srMHg4Ni8weDliMAo+ICAgICAgICBtdXRl eF9sb2NrX25lc3RlZCsweDFiLzB4MjAKPiAgICAgICAgaTkxNV9nZW1fdXNlcnB0cl9pbml0X19t bXVfbm90aWZpZXIrMHgxNGEvMHgyNzAgW2k5MTVdCj4gICAgICAgIGk5MTVfZ2VtX3VzZXJwdHJf aW9jdGwrMHgyMjIvMHgyYzAgW2k5MTVdCj4gICAgICAgIGRybV9pb2N0bF9rZXJuZWwrMHg2OS8w eGIwCj4gICAgICAgIGRybV9pb2N0bCsweDJmOS8weDNkMAo+ICAgICAgICBkb192ZnNfaW9jdGwr MHg5NC8weDY3MAo+ICAgICAgICBTeVNfaW9jdGwrMHg0MS8weDcwCj4gICAgICAgIGVudHJ5X1NZ U0NBTExfNjRfZmFzdHBhdGgrMHgxYy8weGIxCj4gCj4gLT4gIzUgKCZtbS0+bW1hcF9zZW0peysr Kyt9Ogo+ICAgICAgICBfX2xvY2tfYWNxdWlyZSsweDE0MjAvMHgxNWUwCj4gICAgICAgIGxvY2tf YWNxdWlyZSsweGIwLzB4MjAwCj4gICAgICAgIF9fbWlnaHRfZmF1bHQrMHg2OC8weDkwCj4gICAg ICAgIF9jb3B5X3RvX3VzZXIrMHgyMy8weDcwCj4gICAgICAgIGZpbGxkaXIrMHhhNS8weDEyMAo+ ICAgICAgICBkY2FjaGVfcmVhZGRpcisweGY5LzB4MTcwCj4gICAgICAgIGl0ZXJhdGVfZGlyKzB4 NjkvMHgxYTAKPiAgICAgICAgU3lTX2dldGRlbnRzKzB4YTUvMHgxNDAKPiAgICAgICAgZW50cnlf U1lTQ0FMTF82NF9mYXN0cGF0aCsweDFjLzB4YjEKPiAKPiAtPiAjNCAoJnNiLT5zX3R5cGUtPmlf bXV0ZXhfa2V5IzUpeysrKyt9Ogo+ICAgICAgICBkb3duX3dyaXRlKzB4M2IvMHg3MAo+ICAgICAg ICBoYW5kbGVfY3JlYXRlKzB4Y2IvMHgxZTAKPiAgICAgICAgZGV2dG1wZnNkKzB4MTM5LzB4MTgw Cj4gICAgICAgIGt0aHJlYWQrMHgxNTIvMHgxOTAKPiAgICAgICAgcmV0X2Zyb21fZm9yaysweDI3 LzB4NDAKPiAKPiAtPiAjMyAoKGNvbXBsZXRlKSZyZXEuZG9uZSl7Ky4rLn06Cj4gICAgICAgIF9f bG9ja19hY3F1aXJlKzB4MTQyMC8weDE1ZTAKPiAgICAgICAgbG9ja19hY3F1aXJlKzB4YjAvMHgy MDAKPiAgICAgICAgd2FpdF9mb3JfY29tbW9uKzB4NTgvMHgyMTAKPiAgICAgICAgd2FpdF9mb3Jf Y29tcGxldGlvbisweDFkLzB4MjAKPiAgICAgICAgZGV2dG1wZnNfY3JlYXRlX25vZGUrMHgxM2Qv MHgxNjAKPiAgICAgICAgZGV2aWNlX2FkZCsweDVlYi8weDYyMAo+ICAgICAgICBkZXZpY2VfY3Jl YXRlX2dyb3Vwc192YXJncysweGUwLzB4ZjAKPiAgICAgICAgZGV2aWNlX2NyZWF0ZSsweDNhLzB4 NDAKPiAgICAgICAgbXNyX2RldmljZV9jcmVhdGUrMHgyYi8weDQwCj4gICAgICAgIGNwdWhwX2lu dm9rZV9jYWxsYmFjaysweGEzLzB4ODQwCj4gICAgICAgIGNwdWhwX3RocmVhZF9mdW4rMHg3YS8w eDE1MAo+ICAgICAgICBzbXBib290X3RocmVhZF9mbisweDE4YS8weDI4MAo+ICAgICAgICBrdGhy ZWFkKzB4MTUyLzB4MTkwCj4gICAgICAgIHJldF9mcm9tX2ZvcmsrMHgyNy8weDQwCj4gCj4gLT4g IzIgKGNwdWhwX3N0YXRlKXsrLisufToKPiAgICAgICAgX19sb2NrX2FjcXVpcmUrMHgxNDIwLzB4 MTVlMAo+ICAgICAgICBsb2NrX2FjcXVpcmUrMHhiMC8weDIwMAo+ICAgICAgICBjcHVocF9pc3N1 ZV9jYWxsKzB4MTBiLzB4MTcwCj4gICAgICAgIF9fY3B1aHBfc2V0dXBfc3RhdGVfY3B1c2xvY2tl ZCsweDEzNC8weDJhMAo+ICAgICAgICBfX2NwdWhwX3NldHVwX3N0YXRlKzB4NDYvMHg2MAo+ICAg ICAgICBwYWdlX3dyaXRlYmFja19pbml0KzB4NDMvMHg2Nwo+ICAgICAgICBwYWdlY2FjaGVfaW5p dCsweDNkLzB4NDIKPiAgICAgICAgc3RhcnRfa2VybmVsKzB4M2E4LzB4M2ZjCj4gICAgICAgIHg4 Nl82NF9zdGFydF9yZXNlcnZhdGlvbnMrMHgyYS8weDJjCj4gICAgICAgIHg4Nl82NF9zdGFydF9r ZXJuZWwrMHg2ZC8weDcwCj4gICAgICAgIHZlcmlmeV9jcHUrMHgwLzB4ZmIKPiAKPiAtPiAjMSAo Y3B1aHBfc3RhdGVfbXV0ZXgpeysuKy59Ogo+ICAgICAgICBfX2xvY2tfYWNxdWlyZSsweDE0MjAv MHgxNWUwCj4gICAgICAgIGxvY2tfYWNxdWlyZSsweGIwLzB4MjAwCj4gICAgICAgIF9fbXV0ZXhf bG9jaysweDg2LzB4OWIwCj4gICAgICAgIG11dGV4X2xvY2tfbmVzdGVkKzB4MWIvMHgyMAo+ICAg ICAgICBfX2NwdWhwX3NldHVwX3N0YXRlX2NwdXNsb2NrZWQrMHg1Mi8weDJhMAo+ICAgICAgICBf X2NwdWhwX3NldHVwX3N0YXRlKzB4NDYvMHg2MAo+ICAgICAgICBwYWdlX2FsbG9jX2luaXQrMHgy OC8weDMwCj4gICAgICAgIHN0YXJ0X2tlcm5lbCsweDE0NS8weDNmYwo+ICAgICAgICB4ODZfNjRf c3RhcnRfcmVzZXJ2YXRpb25zKzB4MmEvMHgyYwo+ICAgICAgICB4ODZfNjRfc3RhcnRfa2VybmVs KzB4NmQvMHg3MAo+ICAgICAgICB2ZXJpZnlfY3B1KzB4MC8weGZiCj4gCj4gLT4gIzAgKGNwdV9o b3RwbHVnX2xvY2sucndfc2VtKXsrKysrfToKPiAgICAgICAgY2hlY2tfcHJldl9hZGQrMHg0MzAv MHg4NDAKPiAgICAgICAgX19sb2NrX2FjcXVpcmUrMHgxNDIwLzB4MTVlMAo+ICAgICAgICBsb2Nr X2FjcXVpcmUrMHhiMC8weDIwMAo+ICAgICAgICBjcHVzX3JlYWRfbG9jaysweDNkLzB4YjAKPiAg ICAgICAgYXBwbHlfd29ya3F1ZXVlX2F0dHJzKzB4MTcvMHg1MAo+ICAgICAgICBfX2FsbG9jX3dv cmtxdWV1ZV9rZXkrMHgxZDgvMHg0ZDkKPiAgICAgICAgaTkxNV9nZW1fdXNlcnB0cl9pbml0X19t bXVfbm90aWZpZXIrMHgxZmIvMHgyNzAgW2k5MTVdCj4gICAgICAgIGk5MTVfZ2VtX3VzZXJwdHJf aW9jdGwrMHgyMjIvMHgyYzAgW2k5MTVdCj4gICAgICAgIGRybV9pb2N0bF9rZXJuZWwrMHg2OS8w eGIwCj4gICAgICAgIGRybV9pb2N0bCsweDJmOS8weDNkMAo+ICAgICAgICBkb192ZnNfaW9jdGwr MHg5NC8weDY3MAo+ICAgICAgICBTeVNfaW9jdGwrMHg0MS8weDcwCj4gICAgICAgIGVudHJ5X1NZ U0NBTExfNjRfZmFzdHBhdGgrMHgxYy8weGIxCj4gCj4gb3RoZXIgaW5mbyB0aGF0IG1pZ2h0IGhl bHAgdXMgZGVidWcgdGhpczoKPiAKPiBDaGFpbiBleGlzdHMgb2Y6Cj4gICBjcHVfaG90cGx1Z19s b2NrLnJ3X3NlbSAtLT4gJm1tLT5tbWFwX3NlbSAtLT4gJmRldl9wcml2LT5tbV9sb2NrCj4gCj4g IFBvc3NpYmxlIHVuc2FmZSBsb2NraW5nIHNjZW5hcmlvOgo+IAo+ICAgICAgICBDUFUwICAgICAg ICAgICAgICAgICAgICBDUFUxCj4gICAgICAgIC0tLS0gICAgICAgICAgICAgICAgICAgIC0tLS0K PiAgIGxvY2soJmRldl9wcml2LT5tbV9sb2NrKTsKPiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbG9jaygmbW0tPm1tYXBfc2VtKTsKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbG9jaygmZGV2X3ByaXYtPm1tX2xvY2spOwo+ICAgbG9jayhjcHVfaG90cGx1Z19sb2NrLnJ3 X3NlbSk7Cj4gCj4gICoqKiBERUFETE9DSyAqKioKPiAKPiAyIGxvY2tzIGhlbGQgYnkgcHJpbWVf bW1hcC8xNTUxOgo+ICAjMDogICgmbW0tPm1tYXBfc2VtKXsrKysrfSwgYXQ6IFs8ZmZmZmZmZmZh MDFhN2IxOD5dIGk5MTVfZ2VtX3VzZXJwdHJfaW5pdF9fbW11X25vdGlmaWVyKzB4MTM4LzB4Mjcw IFtpOTE1XQo+ICAjMTogICgmZGV2X3ByaXYtPm1tX2xvY2speysuKy59LCBhdDogWzxmZmZmZmZm ZmEwMWE3YjJhPl0gaTkxNV9nZW1fdXNlcnB0cl9pbml0X19tbXVfbm90aWZpZXIrMHgxNGEvMHgy NzAgW2k5MTVdCj4gCj4gc3RhY2sgYmFja3RyYWNlOgo+IENQVTogNCBQSUQ6IDE1NTEgQ29tbTog cHJpbWVfbW1hcCBUYWludGVkOiBHICAgICBVICAgICAgICAgIDQuMTQuMC1yYzEtQ0ktQ0lfRFJN XzMxMTgrICMxCj4gSGFyZHdhcmUgbmFtZTogRGVsbCBJbmMuIFhQUyA4MzAwICAvMFkyTVJHLCBC SU9TIEEwNiAxMC8xNy8yMDExCj4gQ2FsbCBUcmFjZToKPiAgZHVtcF9zdGFjaysweDY4LzB4OWYK PiAgcHJpbnRfY2lyY3VsYXJfYnVnKzB4MjM1LzB4M2MwCj4gID8gbG9ja2RlcF9pbml0X21hcF9j cm9zc2xvY2srMHgyMC8weDIwCj4gIGNoZWNrX3ByZXZfYWRkKzB4NDMwLzB4ODQwCj4gIF9fbG9j a19hY3F1aXJlKzB4MTQyMC8weDE1ZTAKPiAgPyBfX2xvY2tfYWNxdWlyZSsweDE0MjAvMHgxNWUw Cj4gID8gbG9ja2RlcF9pbml0X21hcF9jcm9zc2xvY2srMHgyMC8weDIwCj4gIGxvY2tfYWNxdWly ZSsweGIwLzB4MjAwCj4gID8gYXBwbHlfd29ya3F1ZXVlX2F0dHJzKzB4MTcvMHg1MAo+ICBjcHVz X3JlYWRfbG9jaysweDNkLzB4YjAKPiAgPyBhcHBseV93b3JrcXVldWVfYXR0cnMrMHgxNy8weDUw Cj4gIGFwcGx5X3dvcmtxdWV1ZV9hdHRycysweDE3LzB4NTAKPiAgX19hbGxvY193b3JrcXVldWVf a2V5KzB4MWQ4LzB4NGQ5Cj4gID8gX19sb2NrZGVwX2luaXRfbWFwKzB4NTcvMHgxYzAKPiAgaTkx NV9nZW1fdXNlcnB0cl9pbml0X19tbXVfbm90aWZpZXIrMHgxZmIvMHgyNzAgW2k5MTVdCj4gIGk5 MTVfZ2VtX3VzZXJwdHJfaW9jdGwrMHgyMjIvMHgyYzAgW2k5MTVdCj4gID8gaTkxNV9nZW1fdXNl cnB0cl9yZWxlYXNlKzB4MTQwLzB4MTQwIFtpOTE1XQo+ICBkcm1faW9jdGxfa2VybmVsKzB4Njkv MHhiMAo+ICBkcm1faW9jdGwrMHgyZjkvMHgzZDAKPiAgPyBpOTE1X2dlbV91c2VycHRyX3JlbGVh c2UrMHgxNDAvMHgxNDAgW2k5MTVdCj4gID8gX19kb19wYWdlX2ZhdWx0KzB4MmE0LzB4NTcwCj4g IGRvX3Zmc19pb2N0bCsweDk0LzB4NjcwCj4gID8gZW50cnlfU1lTQ0FMTF82NF9mYXN0cGF0aCsw eDUvMHhiMQo+ICA/IF9fdGhpc19jcHVfcHJlZW1wdF9jaGVjaysweDEzLzB4MjAKPiAgPyB0cmFj ZV9oYXJkaXJxc19vbl9jYWxsZXIrMHhlMy8weDFiMAo+ICBTeVNfaW9jdGwrMHg0MS8weDcwCj4g IGVudHJ5X1NZU0NBTExfNjRfZmFzdHBhdGgrMHgxYy8weGIxCj4gUklQOiAwMDMzOjB4N2ZiYjgz YzM5NTg3Cj4gUlNQOiAwMDJiOjAwMDA3ZmZmMTg4ZGMyMjggRUZMQUdTOiAwMDAwMDI0NiBPUklH X1JBWDogMDAwMDAwMDAwMDAwMDAxMAo+IFJBWDogZmZmZmZmZmZmZmZmZmZkYSBSQlg6IGZmZmZm ZmZmODE0OTI5NjMgUkNYOiAwMDAwN2ZiYjgzYzM5NTg3Cj4gUkRYOiAwMDAwN2ZmZjE4OGRjMjYw IFJTSTogMDAwMDAwMDBjMDE4NjQ3MyBSREk6IDAwMDAwMDAwMDAwMDAwMDMKPiBSQlA6IGZmZmZj OTAwMDE0ODdmODggUjA4OiAwMDAwMDAwMDAwMDAwMDAwIFIwOTogMDAwMDdmZmYxODhkYzJhYwo+ IFIxMDogMDAwMDdmYmI4M2VmY2I1OCBSMTE6IDAwMDAwMDAwMDAwMDAyNDYgUjEyOiAwMDAwMDAw MDAwMDAwMDAwCj4gUjEzOiAwMDAwMDAwMDAwMDAwMDAzIFIxNDogMDAwMDAwMDBjMDE4NjQ3MyBS MTU6IDAwMDA3ZmZmMTg4ZGMyYWMKPiAgPyBfX3RoaXNfY3B1X3ByZWVtcHRfY2hlY2srMHgxMy8w eDIwCj4gCj4gdjI6IFNldCByZXQgY29ycmVjdGx5IHdoZW4gd2UgcmFjZWQgd2l0aCBhbm90aGVy IHRocmVhZC4KPiAKPiB2MzogVXNlIENocmlzJyBkaWZmLiBBdHRhY2ggdGhlIHJpZ2h0IGxvY2tk ZXAgc3BsYXQuCj4gCj4gQ2M6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVr Pgo+IENjOiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgo+IENjOiBK b29uYXMgTGFodGluZW4gPGpvb25hcy5sYWh0aW5lbkBsaW51eC5pbnRlbC5jb20+Cj4gQ2M6IFBl dGVyIFppamxzdHJhIDxwZXRlcnpAaW5mcmFkZWFkLm9yZz4KPiBDYzogVGhvbWFzIEdsZWl4bmVy IDx0Z2x4QGxpbnV0cm9uaXguZGU+Cj4gQ2M6IFNhc2hhIExldmluIDxhbGV4YW5kZXIubGV2aW5A dmVyaXpvbi5jb20+Cj4gQ2M6IE1hcnRhIExvZnN0ZWR0IDxtYXJ0YS5sb2ZzdGVkdEBpbnRlbC5j b20+Cj4gQ2M6IFRlanVuIEhlbyA8dGpAa2VybmVsLm9yZz4KPiBSZWZlcmVuY2VzOiBodHRwczov L2ludGVsLWdmeC1jaS4wMS5vcmcvdHJlZS9kcm0tdGlwL0NJX0RSTV8zMTgwL3NoYXJkLWhzdzMv aWd0QHByaW1lX21tYXBAdGVzdF91c2VycHRyLmh0bWwKPiBCdWd6aWxsYTogaHR0cHM6Ly9idWdz LmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyOTM5CgpUaGUgZGlmZmVyZW5jZSBp cyB0aGF0IEkgd291bGQgaGF2ZSBzL0J1Z3ppbGxhL1JlZmVyZW5jZXMvLgotQ2hyaXMKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxp bmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==