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 X-Spam-Level: X-Spam-Status: No, score=-15.1 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6A45DC433DB for ; Fri, 26 Mar 2021 14:55:48 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3486561A13 for ; Fri, 26 Mar 2021 14:55:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230046AbhCZOzR (ORCPT ); Fri, 26 Mar 2021 10:55:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57026 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230115AbhCZOzA (ORCPT ); Fri, 26 Mar 2021 10:55:00 -0400 Received: from mail.kapsi.fi (mail.kapsi.fi [IPv6:2001:67c:1be8::25]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AECC6C0613AA for ; Fri, 26 Mar 2021 07:54:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=kapsi.fi; s=20161220; h=Content-Transfer-Encoding:Content-Type:In-Reply-To: MIME-Version:Date:Message-ID:From:References:Cc:To:Subject:Sender:Reply-To: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=qlCr9DYUNxaSIyqRMEavX/tZoTiLlQL37Afi2jZuhpM=; b=dtsuFBitQHCZQASQF8I/2YIk7A UkXykv2C5D6WIB7OqGBsdXIed5Rn6w8rJPJyINiSylGHUJxFIBK7+D5hqepte3rGXtyXTKjnFEid9 Ht3UKJD7l/1fTe06d2syZuTjKoGFSmjhIKSHEJHUUppc9MvP8hWKD9ZkwqWs/yOZpGN2KBqMBVu6F T5H/aGfAH7zNtaor73W4eij9u3iMzO0E2nFCsIO9pKmxiu6u6bkNOn0V6rM+2n9yiJ2r3uB6UPyyp lFQw9Zo1BpKPo51y3wnVErijk+vsZIFkA6Ci387c+bankE10vJWK+WGKWRgjkvhJrI4R1g92deOk+ xKCxpCyg==; Received: from dsl-hkibng22-54f986-236.dhcp.inet.fi ([84.249.134.236] helo=[192.168.1.10]) by mail.kapsi.fi with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.89) (envelope-from ) id 1lPnrT-0001Vd-93; Fri, 26 Mar 2021 16:54:55 +0200 Subject: Re: [PATCH v5 01/21] gpu: host1x: Use different lock classes for each client To: Mikko Perttunen , Dmitry Osipenko , Thierry Reding Cc: jonathanh@nvidia.com, airlied@linux.ie, daniel@ffwll.ch, linux-tegra@vger.kernel.org, dri-devel@lists.freedesktop.org, talho@nvidia.com, bhuntsman@nvidia.com References: <20210111130019.3515669-1-mperttunen@nvidia.com> <20210111130019.3515669-2-mperttunen@nvidia.com> <6615105f-ccf1-7833-512c-090817c47952@gmail.com> <645366c2-c500-efcc-f44c-b933f6f470c4@nvidia.com> From: Mikko Perttunen Message-ID: <0fb1b458-66bb-c9d8-04c7-174165b39811@kapsi.fi> Date: Fri, 26 Mar 2021 16:54:55 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.0 MIME-Version: 1.0 In-Reply-To: <645366c2-c500-efcc-f44c-b933f6f470c4@nvidia.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit X-SA-Exim-Connect-IP: 84.249.134.236 X-SA-Exim-Mail-From: cyndis@kapsi.fi X-SA-Exim-Scanned: No (on mail.kapsi.fi); SAEximRunCond expanded to false Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org On 3/22/21 5:19 PM, Mikko Perttunen wrote: > On 22.3.2021 16.48, Dmitry Osipenko wrote: >> 22.03.2021 17:46, Thierry Reding пишет: >>> On Mon, Jan 11, 2021 at 02:59:59PM +0200, Mikko Perttunen wrote: >>>> To avoid false lockdep warnings, give each client lock a different >>>> lock class, passed from the initialization site by macro. >>>> >>>> Signed-off-by: Mikko Perttunen >>>> --- >>>>   drivers/gpu/host1x/bus.c | 7 ++++--- >>>>   include/linux/host1x.h   | 9 ++++++++- >>>>   2 files changed, 12 insertions(+), 4 deletions(-) >>>> >>>> diff --git a/drivers/gpu/host1x/bus.c b/drivers/gpu/host1x/bus.c >>>> index 347fb962b6c9..8fc79e9cb652 100644 >>>> --- a/drivers/gpu/host1x/bus.c >>>> +++ b/drivers/gpu/host1x/bus.c >>>> @@ -715,13 +715,14 @@ EXPORT_SYMBOL(host1x_driver_unregister); >>>>    * device and call host1x_device_init(), which will in turn call >>>> each client's >>>>    * &host1x_client_ops.init implementation. >>>>    */ >>>> -int host1x_client_register(struct host1x_client *client) >>>> +int __host1x_client_register(struct host1x_client *client, >>>> +               struct lock_class_key *key) >>> >>> I've seen the kbuild robot warn about this because the kerneldoc is now >>> out of date. >>> >>>>   { >>>>       struct host1x *host1x; >>>>       int err; >>>>       INIT_LIST_HEAD(&client->list); >>>> -    mutex_init(&client->lock); >>>> +    __mutex_init(&client->lock, "host1x client lock", key); >>> >>> Should we maybe attempt to make this unique? Could we use something like >>> dev_name(client->dev) for this? >> >> I'm curious who the lockdep warning could be triggered at all, I don't >> recall ever seeing it. Mikko, could you please clarify how to reproduce >> the warning? >> > > This is pretty difficult to read but I guess it's some interaction > related to the delayed initialization of host1x clients? In any case, I > consistently get it at boot (though it may be triggered by vic probe > instead of nvdec). > > I'll fix the kbuild robot warnings and see if I can add a > client-specific lock name for v6. Lockdep doesn't seem to be liking dev_name() for the name, and I think allocating a string for this purpose seems a bit overkill, so I'll keep the lock name as is if there are no objections. Mikko > > Mikko > > [   38.128257] WARNING: possible recursive locking detected > [   38.133567] 5.11.0-rc2-next-20210108+ #102 Tainted: G S > [   38.140089] -------------------------------------------- > [   38.145395] systemd-udevd/239 is trying to acquire lock: > [   38.150703] ffff0000997aa218 (&client->lock){+.+.}-{3:3}, at: > host1x_client_resume+0x30/0x100 [host1x] > [   38.160142] > [   38.160142] but task is already holding lock: > [   38.165968] ffff000080c3b148 (&client->lock){+.+.}-{3:3}, at: > host1x_client_resume+0x30/0x100 [host1x] > [   38.175398] > [   38.175398] other info that might help us debug this: > [   38.181918]  Possible unsafe locking scenario: > [   38.181918] > [   38.187830]        CPU0 > [   38.190275]        ---- > [   38.192719]   lock(&client->lock); > [   38.196129]   lock(&client->lock); > [   38.199537] > [   38.199537]  *** DEADLOCK *** > [   38.199537] > [   38.205449]  May be due to missing lock nesting notation > [   38.205449] > [   38.212228] 6 locks held by systemd-udevd/239: > [   38.216669]  #0: ffff00009261c188 (&dev->mutex){....}-{3:3}, at: > device_driver_attach+0x60/0x130 > [   38.225487]  #1: ffff800009a17168 (devices_lock){+.+.}-{3:3}, at: > host1x_client_register+0x7c/0x220 [host1x] > [   38.235441]  #2: ffff000083f94bb8 (&host->devices_lock){+.+.}-{3:3}, > at: host1x_client_register+0xac/0x220 [host1x] > [   38.245996]  #3: ffff0000a2267190 (&dev->mutex){....}-{3:3}, at: > __device_attach+0x8c/0x230 > [   38.254372]  #4: ffff000092c880f0 (&wgrp->lock){+.+.}-{3:3}, at: > tegra_display_hub_prepare+0xd8/0x170 [tegra_drm] > [   38.264788]  #5: ffff000080c3b148 (&client->lock){+.+.}-{3:3}, at: > host1x_client_resume+0x30/0x100 [host1x] > [   38.274658] > [   38.274658] stack backtrace: > [   38.279012] CPU: 0 PID: 239 Comm: systemd-udevd Tainted: G S > 5.11.0-rc2-next-20210108+ #102 > [   38.288660] Hardware name: NVIDIA Jetson TX2 Developer Kit (DT) > [   38.294577] Call trace: > [   38.297022]  dump_backtrace+0x0/0x2c0 > [   38.300695]  show_stack+0x18/0x6c > [   38.304013]  dump_stack+0x120/0x19c > [   38.307507]  __lock_acquire+0x171c/0x2c34 > [   38.311521]  lock_acquire.part.0+0x230/0x490 > [   38.315793]  lock_acquire+0x70/0x90 > [   38.319285]  __mutex_lock+0x11c/0x6d0 > [   38.322952]  mutex_lock_nested+0x58/0x90 > [   38.326877]  host1x_client_resume+0x30/0x100 [host1x] > [   38.332047]  host1x_client_resume+0x44/0x100 [host1x] > [   38.337200]  tegra_display_hub_prepare+0xf8/0x170 [tegra_drm] > [   38.343084]  host1x_drm_probe+0x1fc/0x4f0 [tegra_drm] > [   38.348256]  host1x_device_probe+0x3c/0x50 [host1x] > [   38.353240]  really_probe+0x148/0x6f0 > [   38.356906]  driver_probe_device+0x78/0xe4 > [   38.361005]  __device_attach_driver+0x10c/0x170 > [   38.365536]  bus_for_each_drv+0xf0/0x160 > [   38.369461]  __device_attach+0x168/0x230 > [   38.373385]  device_initial_probe+0x14/0x20 > [   38.377571]  bus_probe_device+0xec/0x100 > [   38.381494]  device_add+0x580/0xbcc > [   38.384985]  host1x_subdev_register+0x178/0x1cc [host1x] > [   38.390397]  host1x_client_register+0x138/0x220 [host1x] > [   38.395808]  nvdec_probe+0x240/0x3ec [tegra_drm] > [   38.400549]  platform_probe+0x8c/0x110 > [   38.404302]  really_probe+0x148/0x6f0 > [   38.407966]  driver_probe_device+0x78/0xe4 > [   38.412065]  device_driver_attach+0x120/0x130 > [   38.416423]  __driver_attach+0xb4/0x190 > [   38.420261]  bus_for_each_dev+0xe8/0x160 > [   38.424185]  driver_attach+0x34/0x44 > [   38.427761]  bus_add_driver+0x1a4/0x2b0 > [   38.431598]  driver_register+0xe0/0x210 > [   38.435437]  __platform_register_drivers+0x6c/0x104 > [   38.440318]  host1x_drm_init+0x54/0x1000 [tegra_drm] > [   38.445405]  do_one_initcall+0xec/0x5e0 > [   38.449244]  do_init_module+0xe0/0x384 > [   38.453000]  load_module+0x32d8/0x3c60 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 X-Spam-Level: X-Spam-Status: No, score=-15.1 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5B19EC433C1 for ; Fri, 26 Mar 2021 14:54:59 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 1BC43619E4 for ; Fri, 26 Mar 2021 14:54:59 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1BC43619E4 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=kapsi.fi Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 79CB56F41E; Fri, 26 Mar 2021 14:54:58 +0000 (UTC) Received: from mail.kapsi.fi (mail.kapsi.fi [IPv6:2001:67c:1be8::25]) by gabe.freedesktop.org (Postfix) with ESMTPS id 077FB6F41E for ; Fri, 26 Mar 2021 14:54:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=kapsi.fi; s=20161220; h=Content-Transfer-Encoding:Content-Type:In-Reply-To: MIME-Version:Date:Message-ID:From:References:Cc:To:Subject:Sender:Reply-To: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=qlCr9DYUNxaSIyqRMEavX/tZoTiLlQL37Afi2jZuhpM=; b=dtsuFBitQHCZQASQF8I/2YIk7A UkXykv2C5D6WIB7OqGBsdXIed5Rn6w8rJPJyINiSylGHUJxFIBK7+D5hqepte3rGXtyXTKjnFEid9 Ht3UKJD7l/1fTe06d2syZuTjKoGFSmjhIKSHEJHUUppc9MvP8hWKD9ZkwqWs/yOZpGN2KBqMBVu6F T5H/aGfAH7zNtaor73W4eij9u3iMzO0E2nFCsIO9pKmxiu6u6bkNOn0V6rM+2n9yiJ2r3uB6UPyyp lFQw9Zo1BpKPo51y3wnVErijk+vsZIFkA6Ci387c+bankE10vJWK+WGKWRgjkvhJrI4R1g92deOk+ xKCxpCyg==; Received: from dsl-hkibng22-54f986-236.dhcp.inet.fi ([84.249.134.236] helo=[192.168.1.10]) by mail.kapsi.fi with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.89) (envelope-from ) id 1lPnrT-0001Vd-93; Fri, 26 Mar 2021 16:54:55 +0200 Subject: Re: [PATCH v5 01/21] gpu: host1x: Use different lock classes for each client To: Mikko Perttunen , Dmitry Osipenko , Thierry Reding References: <20210111130019.3515669-1-mperttunen@nvidia.com> <20210111130019.3515669-2-mperttunen@nvidia.com> <6615105f-ccf1-7833-512c-090817c47952@gmail.com> <645366c2-c500-efcc-f44c-b933f6f470c4@nvidia.com> From: Mikko Perttunen Message-ID: <0fb1b458-66bb-c9d8-04c7-174165b39811@kapsi.fi> Date: Fri, 26 Mar 2021 16:54:55 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.0 MIME-Version: 1.0 In-Reply-To: <645366c2-c500-efcc-f44c-b933f6f470c4@nvidia.com> Content-Language: en-US X-SA-Exim-Connect-IP: 84.249.134.236 X-SA-Exim-Mail-From: cyndis@kapsi.fi X-SA-Exim-Scanned: No (on mail.kapsi.fi); SAEximRunCond expanded to false X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: airlied@linux.ie, dri-devel@lists.freedesktop.org, jonathanh@nvidia.com, talho@nvidia.com, bhuntsman@nvidia.com, linux-tegra@vger.kernel.org Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" T24gMy8yMi8yMSA1OjE5IFBNLCBNaWtrbyBQZXJ0dHVuZW4gd3JvdGU6Cj4gT24gMjIuMy4yMDIx IDE2LjQ4LCBEbWl0cnkgT3NpcGVua28gd3JvdGU6Cj4+IDIyLjAzLjIwMjEgMTc6NDYsIFRoaWVy cnkgUmVkaW5nINC/0LjRiNC10YI6Cj4+PiBPbiBNb24sIEphbiAxMSwgMjAyMSBhdCAwMjo1OTo1 OVBNICswMjAwLCBNaWtrbyBQZXJ0dHVuZW4gd3JvdGU6Cj4+Pj4gVG8gYXZvaWQgZmFsc2UgbG9j a2RlcCB3YXJuaW5ncywgZ2l2ZSBlYWNoIGNsaWVudCBsb2NrIGEgZGlmZmVyZW50Cj4+Pj4gbG9j ayBjbGFzcywgcGFzc2VkIGZyb20gdGhlIGluaXRpYWxpemF0aW9uIHNpdGUgYnkgbWFjcm8uCj4+ Pj4KPj4+PiBTaWduZWQtb2ZmLWJ5OiBNaWtrbyBQZXJ0dHVuZW4gPG1wZXJ0dHVuZW5AbnZpZGlh LmNvbT4KPj4+PiAtLS0KPj4+PiDCoCBkcml2ZXJzL2dwdS9ob3N0MXgvYnVzLmMgfCA3ICsrKyst LS0KPj4+PiDCoCBpbmNsdWRlL2xpbnV4L2hvc3QxeC5owqDCoCB8IDkgKysrKysrKystCj4+Pj4g wqAgMiBmaWxlcyBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQo+Pj4+ Cj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2hvc3QxeC9idXMuYyBiL2RyaXZlcnMvZ3B1 L2hvc3QxeC9idXMuYwo+Pj4+IGluZGV4IDM0N2ZiOTYyYjZjOS4uOGZjNzllOWNiNjUyIDEwMDY0 NAo+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2hvc3QxeC9idXMuYwo+Pj4+ICsrKyBiL2RyaXZlcnMv Z3B1L2hvc3QxeC9idXMuYwo+Pj4+IEBAIC03MTUsMTMgKzcxNSwxNCBAQCBFWFBPUlRfU1lNQk9M KGhvc3QxeF9kcml2ZXJfdW5yZWdpc3Rlcik7Cj4+Pj4gwqDCoCAqIGRldmljZSBhbmQgY2FsbCBo b3N0MXhfZGV2aWNlX2luaXQoKSwgd2hpY2ggd2lsbCBpbiB0dXJuIGNhbGwgCj4+Pj4gZWFjaCBj bGllbnQncwo+Pj4+IMKgwqAgKiAmaG9zdDF4X2NsaWVudF9vcHMuaW5pdCBpbXBsZW1lbnRhdGlv bi4KPj4+PiDCoMKgICovCj4+Pj4gLWludCBob3N0MXhfY2xpZW50X3JlZ2lzdGVyKHN0cnVjdCBo b3N0MXhfY2xpZW50ICpjbGllbnQpCj4+Pj4gK2ludCBfX2hvc3QxeF9jbGllbnRfcmVnaXN0ZXIo c3RydWN0IGhvc3QxeF9jbGllbnQgKmNsaWVudCwKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSkKPj4+Cj4+PiBJJ3ZlIHNlZW4gdGhl IGtidWlsZCByb2JvdCB3YXJuIGFib3V0IHRoaXMgYmVjYXVzZSB0aGUga2VybmVsZG9jIGlzIG5v dwo+Pj4gb3V0IG9mIGRhdGUuCj4+Pgo+Pj4+IMKgIHsKPj4+PiDCoMKgwqDCoMKgIHN0cnVjdCBo b3N0MXggKmhvc3QxeDsKPj4+PiDCoMKgwqDCoMKgIGludCBlcnI7Cj4+Pj4gwqDCoMKgwqDCoCBJ TklUX0xJU1RfSEVBRCgmY2xpZW50LT5saXN0KTsKPj4+PiAtwqDCoMKgIG11dGV4X2luaXQoJmNs aWVudC0+bG9jayk7Cj4+Pj4gK8KgwqDCoCBfX211dGV4X2luaXQoJmNsaWVudC0+bG9jaywgImhv c3QxeCBjbGllbnQgbG9jayIsIGtleSk7Cj4+Pgo+Pj4gU2hvdWxkIHdlIG1heWJlIGF0dGVtcHQg dG8gbWFrZSB0aGlzIHVuaXF1ZT8gQ291bGQgd2UgdXNlIHNvbWV0aGluZyBsaWtlCj4+PiBkZXZf bmFtZShjbGllbnQtPmRldikgZm9yIHRoaXM/Cj4+Cj4+IEknbSBjdXJpb3VzIHdobyB0aGUgbG9j a2RlcCB3YXJuaW5nIGNvdWxkIGJlIHRyaWdnZXJlZCBhdCBhbGwsIEkgZG9uJ3QKPj4gcmVjYWxs IGV2ZXIgc2VlaW5nIGl0LiBNaWtrbywgY291bGQgeW91IHBsZWFzZSBjbGFyaWZ5IGhvdyB0byBy ZXByb2R1Y2UKPj4gdGhlIHdhcm5pbmc/Cj4+Cj4gCj4gVGhpcyBpcyBwcmV0dHkgZGlmZmljdWx0 IHRvIHJlYWQgYnV0IEkgZ3Vlc3MgaXQncyBzb21lIGludGVyYWN0aW9uIAo+IHJlbGF0ZWQgdG8g dGhlIGRlbGF5ZWQgaW5pdGlhbGl6YXRpb24gb2YgaG9zdDF4IGNsaWVudHM/IEluIGFueSBjYXNl LCBJIAo+IGNvbnNpc3RlbnRseSBnZXQgaXQgYXQgYm9vdCAodGhvdWdoIGl0IG1heSBiZSB0cmln Z2VyZWQgYnkgdmljIHByb2JlIAo+IGluc3RlYWQgb2YgbnZkZWMpLgo+IAo+IEknbGwgZml4IHRo ZSBrYnVpbGQgcm9ib3Qgd2FybmluZ3MgYW5kIHNlZSBpZiBJIGNhbiBhZGQgYSAKPiBjbGllbnQt c3BlY2lmaWMgbG9jayBuYW1lIGZvciB2Ni4KCkxvY2tkZXAgZG9lc24ndCBzZWVtIHRvIGJlIGxp a2luZyBkZXZfbmFtZSgpIGZvciB0aGUgbmFtZSwgYW5kIEkgdGhpbmsgCmFsbG9jYXRpbmcgYSBz dHJpbmcgZm9yIHRoaXMgcHVycG9zZSBzZWVtcyBhIGJpdCBvdmVya2lsbCwgc28gSSdsbCBrZWVw IAp0aGUgbG9jayBuYW1lIGFzIGlzIGlmIHRoZXJlIGFyZSBubyBvYmplY3Rpb25zLgoKTWlra28K Cj4gCj4gTWlra28KPiAKPiBbwqDCoCAzOC4xMjgyNTddIFdBUk5JTkc6IHBvc3NpYmxlIHJlY3Vy c2l2ZSBsb2NraW5nIGRldGVjdGVkCj4gW8KgwqAgMzguMTMzNTY3XSA1LjExLjAtcmMyLW5leHQt MjAyMTAxMDgrICMxMDIgVGFpbnRlZDogRyBTCj4gW8KgwqAgMzguMTQwMDg5XSAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+IFvCoMKgIDM4LjE0NTM5NV0gc3lz dGVtZC11ZGV2ZC8yMzkgaXMgdHJ5aW5nIHRvIGFjcXVpcmUgbG9jazoKPiBbwqDCoCAzOC4xNTA3 MDNdIGZmZmYwMDAwOTk3YWEyMTggKCZjbGllbnQtPmxvY2speysuKy59LXszOjN9LCBhdDogCj4g aG9zdDF4X2NsaWVudF9yZXN1bWUrMHgzMC8weDEwMCBbaG9zdDF4XQo+IFvCoMKgIDM4LjE2MDE0 Ml0KPiBbwqDCoCAzOC4xNjAxNDJdIGJ1dCB0YXNrIGlzIGFscmVhZHkgaG9sZGluZyBsb2NrOgo+ IFvCoMKgIDM4LjE2NTk2OF0gZmZmZjAwMDA4MGMzYjE0OCAoJmNsaWVudC0+bG9jayl7Ky4rLn0t ezM6M30sIGF0OiAKPiBob3N0MXhfY2xpZW50X3Jlc3VtZSsweDMwLzB4MTAwIFtob3N0MXhdCj4g W8KgwqAgMzguMTc1Mzk4XQo+IFvCoMKgIDM4LjE3NTM5OF0gb3RoZXIgaW5mbyB0aGF0IG1pZ2h0 IGhlbHAgdXMgZGVidWcgdGhpczoKPiBbwqDCoCAzOC4xODE5MThdwqAgUG9zc2libGUgdW5zYWZl IGxvY2tpbmcgc2NlbmFyaW86Cj4gW8KgwqAgMzguMTgxOTE4XQo+IFvCoMKgIDM4LjE4NzgzMF3C oMKgwqDCoMKgwqDCoCBDUFUwCj4gW8KgwqAgMzguMTkwMjc1XcKgwqDCoMKgwqDCoMKgIC0tLS0K PiBbwqDCoCAzOC4xOTI3MTldwqDCoCBsb2NrKCZjbGllbnQtPmxvY2spOwo+IFvCoMKgIDM4LjE5 NjEyOV3CoMKgIGxvY2soJmNsaWVudC0+bG9jayk7Cj4gW8KgwqAgMzguMTk5NTM3XQo+IFvCoMKg IDM4LjE5OTUzN13CoCAqKiogREVBRExPQ0sgKioqCj4gW8KgwqAgMzguMTk5NTM3XQo+IFvCoMKg IDM4LjIwNTQ0OV3CoCBNYXkgYmUgZHVlIHRvIG1pc3NpbmcgbG9jayBuZXN0aW5nIG5vdGF0aW9u Cj4gW8KgwqAgMzguMjA1NDQ5XQo+IFvCoMKgIDM4LjIxMjIyOF0gNiBsb2NrcyBoZWxkIGJ5IHN5 c3RlbWQtdWRldmQvMjM5Ogo+IFvCoMKgIDM4LjIxNjY2OV3CoCAjMDogZmZmZjAwMDA5MjYxYzE4 OCAoJmRldi0+bXV0ZXgpey4uLi59LXszOjN9LCBhdDogCj4gZGV2aWNlX2RyaXZlcl9hdHRhY2gr MHg2MC8weDEzMAo+IFvCoMKgIDM4LjIyNTQ4N13CoCAjMTogZmZmZjgwMDAwOWExNzE2OCAoZGV2 aWNlc19sb2NrKXsrLisufS17MzozfSwgYXQ6IAo+IGhvc3QxeF9jbGllbnRfcmVnaXN0ZXIrMHg3 Yy8weDIyMCBbaG9zdDF4XQo+IFvCoMKgIDM4LjIzNTQ0MV3CoCAjMjogZmZmZjAwMDA4M2Y5NGJi OCAoJmhvc3QtPmRldmljZXNfbG9jayl7Ky4rLn0tezM6M30sIAo+IGF0OiBob3N0MXhfY2xpZW50 X3JlZ2lzdGVyKzB4YWMvMHgyMjAgW2hvc3QxeF0KPiBbwqDCoCAzOC4yNDU5OTZdwqAgIzM6IGZm ZmYwMDAwYTIyNjcxOTAgKCZkZXYtPm11dGV4KXsuLi4ufS17MzozfSwgYXQ6IAo+IF9fZGV2aWNl X2F0dGFjaCsweDhjLzB4MjMwCj4gW8KgwqAgMzguMjU0MzcyXcKgICM0OiBmZmZmMDAwMDkyYzg4 MGYwICgmd2dycC0+bG9jayl7Ky4rLn0tezM6M30sIGF0OiAKPiB0ZWdyYV9kaXNwbGF5X2h1Yl9w cmVwYXJlKzB4ZDgvMHgxNzAgW3RlZ3JhX2RybV0KPiBbwqDCoCAzOC4yNjQ3ODhdwqAgIzU6IGZm ZmYwMDAwODBjM2IxNDggKCZjbGllbnQtPmxvY2speysuKy59LXszOjN9LCBhdDogCj4gaG9zdDF4 X2NsaWVudF9yZXN1bWUrMHgzMC8weDEwMCBbaG9zdDF4XQo+IFvCoMKgIDM4LjI3NDY1OF0KPiBb wqDCoCAzOC4yNzQ2NThdIHN0YWNrIGJhY2t0cmFjZToKPiBbwqDCoCAzOC4yNzkwMTJdIENQVTog MCBQSUQ6IDIzOSBDb21tOiBzeXN0ZW1kLXVkZXZkIFRhaW50ZWQ6IEcgUyAgICAgICAKPiA1LjEx LjAtcmMyLW5leHQtMjAyMTAxMDgrICMxMDIKPiBbwqDCoCAzOC4yODg2NjBdIEhhcmR3YXJlIG5h bWU6IE5WSURJQSBKZXRzb24gVFgyIERldmVsb3BlciBLaXQgKERUKQo+IFvCoMKgIDM4LjI5NDU3 N10gQ2FsbCB0cmFjZToKPiBbwqDCoCAzOC4yOTcwMjJdwqAgZHVtcF9iYWNrdHJhY2UrMHgwLzB4 MmMwCj4gW8KgwqAgMzguMzAwNjk1XcKgIHNob3dfc3RhY2srMHgxOC8weDZjCj4gW8KgwqAgMzgu MzA0MDEzXcKgIGR1bXBfc3RhY2srMHgxMjAvMHgxOWMKPiBbwqDCoCAzOC4zMDc1MDddwqAgX19s b2NrX2FjcXVpcmUrMHgxNzFjLzB4MmMzNAo+IFvCoMKgIDM4LjMxMTUyMV3CoCBsb2NrX2FjcXVp cmUucGFydC4wKzB4MjMwLzB4NDkwCj4gW8KgwqAgMzguMzE1NzkzXcKgIGxvY2tfYWNxdWlyZSsw eDcwLzB4OTAKPiBbwqDCoCAzOC4zMTkyODVdwqAgX19tdXRleF9sb2NrKzB4MTFjLzB4NmQwCj4g W8KgwqAgMzguMzIyOTUyXcKgIG11dGV4X2xvY2tfbmVzdGVkKzB4NTgvMHg5MAo+IFvCoMKgIDM4 LjMyNjg3N13CoCBob3N0MXhfY2xpZW50X3Jlc3VtZSsweDMwLzB4MTAwIFtob3N0MXhdCj4gW8Kg wqAgMzguMzMyMDQ3XcKgIGhvc3QxeF9jbGllbnRfcmVzdW1lKzB4NDQvMHgxMDAgW2hvc3QxeF0K PiBbwqDCoCAzOC4zMzcyMDBdwqAgdGVncmFfZGlzcGxheV9odWJfcHJlcGFyZSsweGY4LzB4MTcw IFt0ZWdyYV9kcm1dCj4gW8KgwqAgMzguMzQzMDg0XcKgIGhvc3QxeF9kcm1fcHJvYmUrMHgxZmMv MHg0ZjAgW3RlZ3JhX2RybV0KPiBbwqDCoCAzOC4zNDgyNTZdwqAgaG9zdDF4X2RldmljZV9wcm9i ZSsweDNjLzB4NTAgW2hvc3QxeF0KPiBbwqDCoCAzOC4zNTMyNDBdwqAgcmVhbGx5X3Byb2JlKzB4 MTQ4LzB4NmYwCj4gW8KgwqAgMzguMzU2OTA2XcKgIGRyaXZlcl9wcm9iZV9kZXZpY2UrMHg3OC8w eGU0Cj4gW8KgwqAgMzguMzYxMDA1XcKgIF9fZGV2aWNlX2F0dGFjaF9kcml2ZXIrMHgxMGMvMHgx NzAKPiBbwqDCoCAzOC4zNjU1MzZdwqAgYnVzX2Zvcl9lYWNoX2RydisweGYwLzB4MTYwCj4gW8Kg wqAgMzguMzY5NDYxXcKgIF9fZGV2aWNlX2F0dGFjaCsweDE2OC8weDIzMAo+IFvCoMKgIDM4LjM3 MzM4NV3CoCBkZXZpY2VfaW5pdGlhbF9wcm9iZSsweDE0LzB4MjAKPiBbwqDCoCAzOC4zNzc1NzFd wqAgYnVzX3Byb2JlX2RldmljZSsweGVjLzB4MTAwCj4gW8KgwqAgMzguMzgxNDk0XcKgIGRldmlj ZV9hZGQrMHg1ODAvMHhiY2MKPiBbwqDCoCAzOC4zODQ5ODVdwqAgaG9zdDF4X3N1YmRldl9yZWdp c3RlcisweDE3OC8weDFjYyBbaG9zdDF4XQo+IFvCoMKgIDM4LjM5MDM5N13CoCBob3N0MXhfY2xp ZW50X3JlZ2lzdGVyKzB4MTM4LzB4MjIwIFtob3N0MXhdCj4gW8KgwqAgMzguMzk1ODA4XcKgIG52 ZGVjX3Byb2JlKzB4MjQwLzB4M2VjIFt0ZWdyYV9kcm1dCj4gW8KgwqAgMzguNDAwNTQ5XcKgIHBs YXRmb3JtX3Byb2JlKzB4OGMvMHgxMTAKPiBbwqDCoCAzOC40MDQzMDJdwqAgcmVhbGx5X3Byb2Jl KzB4MTQ4LzB4NmYwCj4gW8KgwqAgMzguNDA3OTY2XcKgIGRyaXZlcl9wcm9iZV9kZXZpY2UrMHg3 OC8weGU0Cj4gW8KgwqAgMzguNDEyMDY1XcKgIGRldmljZV9kcml2ZXJfYXR0YWNoKzB4MTIwLzB4 MTMwCj4gW8KgwqAgMzguNDE2NDIzXcKgIF9fZHJpdmVyX2F0dGFjaCsweGI0LzB4MTkwCj4gW8Kg wqAgMzguNDIwMjYxXcKgIGJ1c19mb3JfZWFjaF9kZXYrMHhlOC8weDE2MAo+IFvCoMKgIDM4LjQy NDE4NV3CoCBkcml2ZXJfYXR0YWNoKzB4MzQvMHg0NAo+IFvCoMKgIDM4LjQyNzc2MV3CoCBidXNf YWRkX2RyaXZlcisweDFhNC8weDJiMAo+IFvCoMKgIDM4LjQzMTU5OF3CoCBkcml2ZXJfcmVnaXN0 ZXIrMHhlMC8weDIxMAo+IFvCoMKgIDM4LjQzNTQzN13CoCBfX3BsYXRmb3JtX3JlZ2lzdGVyX2Ry aXZlcnMrMHg2Yy8weDEwNAo+IFvCoMKgIDM4LjQ0MDMxOF3CoCBob3N0MXhfZHJtX2luaXQrMHg1 NC8weDEwMDAgW3RlZ3JhX2RybV0KPiBbwqDCoCAzOC40NDU0MDVdwqAgZG9fb25lX2luaXRjYWxs KzB4ZWMvMHg1ZTAKPiBbwqDCoCAzOC40NDkyNDRdwqAgZG9faW5pdF9tb2R1bGUrMHhlMC8weDM4 NAo+IFvCoMKgIDM4LjQ1MzAwMF3CoCBsb2FkX21vZHVsZSsweDMyZDgvMHgzYzYwCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5n IGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=