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 DB698C433F5 for ; Fri, 22 Apr 2022 13:15:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1447814AbiDVNSI (ORCPT ); Fri, 22 Apr 2022 09:18:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50626 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1447824AbiDVNSD (ORCPT ); Fri, 22 Apr 2022 09:18:03 -0400 Received: from out203-205-251-60.mail.qq.com (out203-205-251-60.mail.qq.com [203.205.251.60]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 36E69218C for ; Fri, 22 Apr 2022 06:15:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1650633306; bh=zHuVbfzAKZiFcRUPtMifpg9OMMsnImpLTfyM0BnWlmA=; h=Subject:To:Cc:References:From:Date:In-Reply-To; b=LPGCW3ZysyZ1cR8rR3B6gvZTSgEZY/HRf+l5waXAo6AoOxh9JvtcgGjJRGgsZYBm6 xDlkWtB4TRbIbOipItsdj8BtnrpEF+4noV3oDC6KbyB97chozsjWILPQzgjtoh4my5 XqnVWinEYZGQY31yvmP+zms0MaPoYdneq4wNjgD4= Received: from [IPv6:240e:362:431:df00:2955:4366:920b:947f] ([240e:362:431:df00:2955:4366:920b:947f]) by newxmesmtplogicsvrszb7.qq.com (NewEsmtp) with SMTP id 3C1AA630; Fri, 22 Apr 2022 21:15:01 +0800 X-QQ-mid: xmsmtpt1650633301tpw3lamyh Message-ID: X-QQ-XMAILINFO: M3Q/Kj4zjy60MwLBIzDEpzcu0q0dCeG+7LBaVLJxTyHvdg7eFxtj2IAvTPibBG cutfshSKICOuznttU/zQYoszxm2DpOEH0jfNGHe/AR7LqxPhcJIEONMIqxGEANtgve0cb6bUrdwH 9juZK34jmyNDBOSQc2AQ9F33I1Cq6YiZch4GLyhQ1zmiEuAoQp1+TQ3dnjvl3yRJ3cDPq87rJuKk odize4VF1jy6KbupsTB6BTmYZ24Mx7uRy+yLsQsfOC9u9nmGWpA9p95Y4F6bJYMOzbHNNImYRXt+ iHj5jdKhiE6EYHCKg+V/gByOnTMjuhciwiz9nY5LiHHXHu8yvamnb9JTAAjJPdMx/cqVwjC2VXyf yibw6hEqdNAbnRmQbkmZtjjL3on+gBqwOWJpVyyqGsVT4Du3T97mZSA7vuLvggR3sEjOcrIsINuV SJFBcSmPmMchqJTl+CDW3TCoaafT3C6MBAzIcHylo0SCqnY40yIAUhr6A3lPIJlvNhCfsU9wfIoc uShyp3yon/pCl91B1dCNzCYOTq1bjhPcRDtw/UghGgps1qYnRdJGeRj1fj+lqkw0ZC/A7hB4tM7b iISypXFAsa+QlEJ3REPpjVdkcH8orRmB5/ZlMy8uwhqWY+p/32vYhE4WFVczSO6h3h8rAmH3+xpU 7DtIxspmKj/iR70sIj9fzPUG9f1a1qvJqZr4R7NqKRTmTcy1eih+L4jlzJUozhr/3zw9UQOhb3DQ cz3w87JxUO58PKo9lHi6xIsBS/pV8qy8XovoSIBSQkDIBuTCc6AKOi4NLSC2kgYa9ZpLo6s9o+jm JKi1xwp+8lzxByg0mjH3lvkOGCU2Mz+3f90hCw+RQUYvm1OwNkSAgqj3oFmQdGFRExvcM5uW7OSJ rqnJ3xoigFekgX3FHdGUTpnsm9qzy5OqwQGoThjfigCXWNqfF67x5zDCmTw15Pr2YIyTSdecJN6I AN3VetOxneOt/RbEYpF4mKbHR4RuTn Subject: Re: Re: [PATCH v4 05/11] iommu/sva: Assign a PASID to mm on PASID allocation and free it on mm exit To: Jean-Philippe Brucker Cc: Fenghua Yu , Dave Hansen , Joerg Roedel , Ravi V Shankar , Tony Luck , Ashok Raj , Peter Zijlstra , Dave Hansen , x86 , linux-kernel , iommu , Ingo Molnar , Borislav Petkov , Andy Lutomirski , Josh Poimboeuf , Thomas Gleixner , will@kernel.org, robin.murphy@arm.com, zhangfei.gao@linaro.org References: From: "zhangfei.gao@foxmail.com" X-OQ-MSGID: Date: Fri, 22 Apr 2022 21:15:01 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, Jean On 2022/4/22 下午6:11, Jean-Philippe Brucker wrote: > On Fri, Apr 22, 2022 at 05:03:10PM +0800, zhangfei.gao@foxmail.com wrote: > [...] >>> Have tested, still got some issue with our openssl-engine. >>> >>> 1. If openssl-engine does not register rsa, nginx works well. >>> >>> 2. If openssl-engine register rsa, nginx also works, but ioasid is not >>> freed when nginx stop. >>> >>> IMPLEMENT_DYNAMIC_BIND_FN(bind_fn) >>> bind_fn >>> ENGINE_set_RSA(e, rsa_methods()) >>> >>> destroy_fn >>> >>> If ENGINE_set_RSA is set, nginx start and stop will NOT call destroy_fn. >>> Even rsa_methods is almost new via RSA_meth_new. >>> >>> In 5.18-rcx, this caused ioasid  not freed in nginx start and stop. >>> In 5.17, though destroy_fn is not called, but ioasid is freed when nginx >>> stop, so not noticed this issue before. >> 1. uacce_fops_release >> In 5.16 or 5.17 >> In fact, we aslo has the issue: openssl engine does not call destroy_fn -> >> close(uacce_fd) >> But system will automatically close all opened fd, >> so uacce_fops_release is also called and free ioasid. >> >> Have one experiment, not call close fd >> >> log: open uacce fd but no close >> [ 2583.471225]  dump_backtrace+0x0/0x1a0 >> [ 2583.474876]  show_stack+0x20/0x30 >> [ 2583.478178]  dump_stack_lvl+0x8c/0xb8 >> [ 2583.481825]  dump_stack+0x18/0x34 >> [ 2583.485126]  uacce_fops_release+0x44/0xdc >> [ 2583.489117]  __fput+0x78/0x240 >> [ 2583.492159]  ____fput+0x18/0x28 >> [ 2583.495288]  task_work_run+0x88/0x160 >> [ 2583.498936]  do_notify_resume+0x214/0x490 >> [ 2583.502927]  el0_svc+0x58/0x70 >> [ 2583.505968]  el0t_64_sync_handler+0xb0/0xb8 >> [ 2583.510132]  el0t_64_sync+0x1a0/0x1a4 >> [ 2583.582292]  uacce_fops_release q=00000000d6674128 >> >> In 5.18, since refcount was add. >> The opened uacce fd was not closed automatically by system >> So we see the issue. >> >> log: open uacce fd but no close >>  [  106.360140]  uacce_fops_open q=00000000ccc38d74 >> [  106.364929]  ioasid_alloc ioasid=1 >> [  106.368585]  iommu_sva_alloc_pasid pasid=1 >> [  106.372943]  iommu_sva_bind_device handle=000000006cca298a >> // ioasid is not free > I'm trying to piece together what happens from the kernel point of view. > > * master process with mm A opens a queue fd through uacce, which calls > iommu_sva_bind_device(dev, A) -> PASID 1 > > * master forks and exits. Child (daemon) gets mm B, inherits the queue fd. > The device is still bound to mm A with PASID 1, since the queue fd is > still open. > We discussed this before, but I don't remember where we left off. The > child can't use the queue because its mappings are not copied on fork(), > and the queue is still bound to the parent mm A. The child either needs to > open a new queue or take ownership of the old one with a new uacce ioctl. Yes, currently nginx aligned with the case. Child process (worker process) reopen uacce, Master process (do init) open uacce, iommu_sva_bind_device(dev, A) -> PASID 1 Master process fork Child (daemon) and exit. Child (daemon)  does not use PASID 1 any more, only fork and manage worker process. Worker process reopen uacce, iommu_sva_bind_device(dev, B) PASID 2 So it is expected. > Is that the "IMPLEMENT_DYNAMIC_BIND_FN()" you mention, something out of > tree? This operation should unbind from A before binding to B, no? > Otherwise we leak PASID 1. In 5.16 PASID 1 from master is hold until nginx service stop. nginx start master: iommu_sva_alloc_pasid mm->pasid=1      // master process lynx https start: iommu_sva_alloc_pasid mm->pasid=2    //worker process nginx stop:  from fops_release iommu_sva_free_pasid mm->pasid=2   // worker process iommu_sva_free_pasid mm->pasid=1  // master process Have one silly question. kerne driver fops_open iommu_sva_bind_device fops_release iommu_sva_unbind_device application main() fd = open return; Application exit but not close(fd), is it expected fops_release will be called automatically by system? On 5.17 fops_release is called automatically, as well as iommu_sva_unbind_device. On 5.18-rc1. fops_release is not called, have to manually call close(fd) Since nginx may have a issue, it does not call close(fd) when nginx -s quit. Thanks 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 smtp4.osuosl.org (smtp4.osuosl.org [140.211.166.137]) (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 3639BC433F5 for ; Fri, 22 Apr 2022 13:16:36 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id CE44041C1A; Fri, 22 Apr 2022 13:16:35 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id DWdXZfYmUVQ0; Fri, 22 Apr 2022 13:16:34 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp4.osuosl.org (Postfix) with ESMTPS id 395E041C0D; Fri, 22 Apr 2022 13:16:34 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 0C949C0032; Fri, 22 Apr 2022 13:16:34 +0000 (UTC) Received: from smtp3.osuosl.org (smtp3.osuosl.org [IPv6:2605:bc80:3010::136]) by lists.linuxfoundation.org (Postfix) with ESMTP id F3C10C002D for ; Fri, 22 Apr 2022 13:16:32 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id D77E160FF9 for ; Fri, 22 Apr 2022 13:16:32 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Authentication-Results: smtp3.osuosl.org (amavisd-new); dkim=pass (1024-bit key) header.d=foxmail.com 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 CDP7Xa4K2w6w for ; Fri, 22 Apr 2022 13:16:31 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 Received: from out203-205-221-191.mail.qq.com (out203-205-221-191.mail.qq.com [203.205.221.191]) by smtp3.osuosl.org (Postfix) with ESMTPS id 2FABA611D2 for ; Fri, 22 Apr 2022 13:16:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1650633387; bh=zHuVbfzAKZiFcRUPtMifpg9OMMsnImpLTfyM0BnWlmA=; h=Subject:To:Cc:References:From:Date:In-Reply-To; b=JpM2jbLrWEDA/4482ARKPzr4lFnXh8dCmUhIdYCVC+O2+F5NCST739MPjeIKFd1KF 4W4Okbji/iqOHUtcP4VL/0wd0eBdEudbuynLoD2lnwBmgAVzW1Iww1v1G51CyBQSbw 7lvuhovnHDspOHqLtFyuBLVD/cEmkmg73fmV5Z1k= Received: from [IPv6:240e:362:431:df00:2955:4366:920b:947f] ([240e:362:431:df00:2955:4366:920b:947f]) by newxmesmtplogicsvrszb7.qq.com (NewEsmtp) with SMTP id 3C1AA630; Fri, 22 Apr 2022 21:15:01 +0800 X-QQ-mid: xmsmtpt1650633301tpw3lamyh Message-ID: X-QQ-XMAILINFO: M3Q/Kj4zjy60MwLBIzDEpzcu0q0dCeG+7LBaVLJxTyHvdg7eFxtj2IAvTPibBG cutfshSKICOuznttU/zQYoszxm2DpOEH0jfNGHe/AR7LqxPhcJIEONMIqxGEANtgve0cb6bUrdwH 9juZK34jmyNDBOSQc2AQ9F33I1Cq6YiZch4GLyhQ1zmiEuAoQp1+TQ3dnjvl3yRJ3cDPq87rJuKk odize4VF1jy6KbupsTB6BTmYZ24Mx7uRy+yLsQsfOC9u9nmGWpA9p95Y4F6bJYMOzbHNNImYRXt+ iHj5jdKhiE6EYHCKg+V/gByOnTMjuhciwiz9nY5LiHHXHu8yvamnb9JTAAjJPdMx/cqVwjC2VXyf yibw6hEqdNAbnRmQbkmZtjjL3on+gBqwOWJpVyyqGsVT4Du3T97mZSA7vuLvggR3sEjOcrIsINuV SJFBcSmPmMchqJTl+CDW3TCoaafT3C6MBAzIcHylo0SCqnY40yIAUhr6A3lPIJlvNhCfsU9wfIoc uShyp3yon/pCl91B1dCNzCYOTq1bjhPcRDtw/UghGgps1qYnRdJGeRj1fj+lqkw0ZC/A7hB4tM7b iISypXFAsa+QlEJ3REPpjVdkcH8orRmB5/ZlMy8uwhqWY+p/32vYhE4WFVczSO6h3h8rAmH3+xpU 7DtIxspmKj/iR70sIj9fzPUG9f1a1qvJqZr4R7NqKRTmTcy1eih+L4jlzJUozhr/3zw9UQOhb3DQ cz3w87JxUO58PKo9lHi6xIsBS/pV8qy8XovoSIBSQkDIBuTCc6AKOi4NLSC2kgYa9ZpLo6s9o+jm JKi1xwp+8lzxByg0mjH3lvkOGCU2Mz+3f90hCw+RQUYvm1OwNkSAgqj3oFmQdGFRExvcM5uW7OSJ rqnJ3xoigFekgX3FHdGUTpnsm9qzy5OqwQGoThjfigCXWNqfF67x5zDCmTw15Pr2YIyTSdecJN6I AN3VetOxneOt/RbEYpF4mKbHR4RuTn Subject: Re: Re: [PATCH v4 05/11] iommu/sva: Assign a PASID to mm on PASID allocation and free it on mm exit To: Jean-Philippe Brucker References: From: "zhangfei.gao@foxmail.com" X-OQ-MSGID: Date: Fri, 22 Apr 2022 21:15:01 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US Cc: Fenghua Yu , Tony Luck , Ashok Raj , Ravi V Shankar , Peter Zijlstra , robin.murphy@arm.com, Dave Hansen , x86 , linux-kernel , Dave Hansen , iommu , Ingo Molnar , Borislav Petkov , Andy Lutomirski , Josh Poimboeuf , zhangfei.gao@linaro.org, Thomas Gleixner , will@kernel.org 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" CkhpLCBKZWFuCgpPbiAyMDIyLzQvMjIg5LiL5Y2INjoxMSwgSmVhbi1QaGlsaXBwZSBCcnVja2Vy IHdyb3RlOgo+IE9uIEZyaSwgQXByIDIyLCAyMDIyIGF0IDA1OjAzOjEwUE0gKzA4MDAsIHpoYW5n ZmVpLmdhb0Bmb3htYWlsLmNvbSB3cm90ZToKPiBbLi4uXQo+Pj4gSGF2ZSB0ZXN0ZWQsIHN0aWxs IGdvdCBzb21lIGlzc3VlIHdpdGggb3VyIG9wZW5zc2wtZW5naW5lLgo+Pj4KPj4+IDEuIElmIG9w ZW5zc2wtZW5naW5lIGRvZXMgbm90IHJlZ2lzdGVyIHJzYSwgbmdpbnggd29ya3Mgd2VsbC4KPj4+ Cj4+PiAyLiBJZiBvcGVuc3NsLWVuZ2luZSByZWdpc3RlciByc2EsIG5naW54IGFsc28gd29ya3Ms IGJ1dCBpb2FzaWQgaXMgbm90Cj4+PiBmcmVlZCB3aGVuIG5naW54IHN0b3AuCj4+Pgo+Pj4gSU1Q TEVNRU5UX0RZTkFNSUNfQklORF9GTihiaW5kX2ZuKQo+Pj4gYmluZF9mbgo+Pj4gRU5HSU5FX3Nl dF9SU0EoZSwgcnNhX21ldGhvZHMoKSkKPj4+Cj4+PiBkZXN0cm95X2ZuCj4+Pgo+Pj4gSWYgRU5H SU5FX3NldF9SU0EgaXMgc2V0LCBuZ2lueCBzdGFydCBhbmQgc3RvcCB3aWxsIE5PVCBjYWxsIGRl c3Ryb3lfZm4uCj4+PiBFdmVuIHJzYV9tZXRob2RzIGlzIGFsbW9zdCBuZXcgdmlhIFJTQV9tZXRo X25ldy4KPj4+Cj4+PiBJbiA1LjE4LXJjeCwgdGhpcyBjYXVzZWQgaW9hc2lkwqAgbm90IGZyZWVk IGluIG5naW54IHN0YXJ0IGFuZCBzdG9wLgo+Pj4gSW4gNS4xNywgdGhvdWdoIGRlc3Ryb3lfZm4g aXMgbm90IGNhbGxlZCwgYnV0IGlvYXNpZCBpcyBmcmVlZCB3aGVuIG5naW54Cj4+PiBzdG9wLCBz byBub3Qgbm90aWNlZCB0aGlzIGlzc3VlIGJlZm9yZS4KPj4gMS4gdWFjY2VfZm9wc19yZWxlYXNl Cj4+IEluIDUuMTYgb3IgNS4xNwo+PiBJbiBmYWN0LCB3ZSBhc2xvIGhhcyB0aGUgaXNzdWU6IG9w ZW5zc2wgZW5naW5lIGRvZXMgbm90IGNhbGwgZGVzdHJveV9mbiAtPgo+PiBjbG9zZSh1YWNjZV9m ZCkKPj4gQnV0IHN5c3RlbSB3aWxsIGF1dG9tYXRpY2FsbHkgY2xvc2UgYWxsIG9wZW5lZCBmZCwK Pj4gc28gdWFjY2VfZm9wc19yZWxlYXNlIGlzIGFsc28gY2FsbGVkIGFuZCBmcmVlIGlvYXNpZC4K Pj4KPj4gSGF2ZSBvbmUgZXhwZXJpbWVudCwgbm90IGNhbGwgY2xvc2UgZmQKPj4KPj4gbG9nOiBv cGVuIHVhY2NlIGZkIGJ1dCBubyBjbG9zZQo+PiBbIDI1ODMuNDcxMjI1XcKgIGR1bXBfYmFja3Ry YWNlKzB4MC8weDFhMAo+PiBbIDI1ODMuNDc0ODc2XcKgIHNob3dfc3RhY2srMHgyMC8weDMwCj4+ IFsgMjU4My40NzgxNzhdwqAgZHVtcF9zdGFja19sdmwrMHg4Yy8weGI4Cj4+IFsgMjU4My40ODE4 MjVdwqAgZHVtcF9zdGFjaysweDE4LzB4MzQKPj4gWyAyNTgzLjQ4NTEyNl3CoCB1YWNjZV9mb3Bz X3JlbGVhc2UrMHg0NC8weGRjCj4+IFsgMjU4My40ODkxMTddwqAgX19mcHV0KzB4NzgvMHgyNDAK Pj4gWyAyNTgzLjQ5MjE1OV3CoCBfX19fZnB1dCsweDE4LzB4MjgKPj4gWyAyNTgzLjQ5NTI4OF3C oCB0YXNrX3dvcmtfcnVuKzB4ODgvMHgxNjAKPj4gWyAyNTgzLjQ5ODkzNl3CoCBkb19ub3RpZnlf cmVzdW1lKzB4MjE0LzB4NDkwCj4+IFsgMjU4My41MDI5MjddwqAgZWwwX3N2YysweDU4LzB4NzAK Pj4gWyAyNTgzLjUwNTk2OF3CoCBlbDB0XzY0X3N5bmNfaGFuZGxlcisweGIwLzB4YjgKPj4gWyAy NTgzLjUxMDEzMl3CoCBlbDB0XzY0X3N5bmMrMHgxYTAvMHgxYTQKPj4gWyAyNTgzLjU4MjI5Ml3C oCB1YWNjZV9mb3BzX3JlbGVhc2UgcT0wMDAwMDAwMGQ2Njc0MTI4Cj4+Cj4+IEluIDUuMTgsIHNp bmNlIHJlZmNvdW50IHdhcyBhZGQuCj4+IFRoZSBvcGVuZWQgdWFjY2UgZmQgd2FzIG5vdCBjbG9z ZWQgYXV0b21hdGljYWxseSBieSBzeXN0ZW0KPj4gU28gd2Ugc2VlIHRoZSBpc3N1ZS4KPj4KPj4g bG9nOiBvcGVuIHVhY2NlIGZkIGJ1dCBubyBjbG9zZQo+PiAgwqBbwqAgMTA2LjM2MDE0MF3CoCB1 YWNjZV9mb3BzX29wZW4gcT0wMDAwMDAwMGNjYzM4ZDc0Cj4+IFvCoCAxMDYuMzY0OTI5XcKgIGlv YXNpZF9hbGxvYyBpb2FzaWQ9MQo+PiBbwqAgMTA2LjM2ODU4NV3CoCBpb21tdV9zdmFfYWxsb2Nf cGFzaWQgcGFzaWQ9MQo+PiBbwqAgMTA2LjM3Mjk0M13CoCBpb21tdV9zdmFfYmluZF9kZXZpY2Ug aGFuZGxlPTAwMDAwMDAwNmNjYTI5OGEKPj4gLy8gaW9hc2lkIGlzIG5vdCBmcmVlCj4gSSdtIHRy eWluZyB0byBwaWVjZSB0b2dldGhlciB3aGF0IGhhcHBlbnMgZnJvbSB0aGUga2VybmVsIHBvaW50 IG9mIHZpZXcuCj4KPiAqIG1hc3RlciBwcm9jZXNzIHdpdGggbW0gQSBvcGVucyBhIHF1ZXVlIGZk IHRocm91Z2ggdWFjY2UsIHdoaWNoIGNhbGxzCj4gICAgaW9tbXVfc3ZhX2JpbmRfZGV2aWNlKGRl diwgQSkgLT4gUEFTSUQgMQo+Cj4gKiBtYXN0ZXIgZm9ya3MgYW5kIGV4aXRzLiBDaGlsZCAoZGFl bW9uKSBnZXRzIG1tIEIsIGluaGVyaXRzIHRoZSBxdWV1ZSBmZC4KPiAgICBUaGUgZGV2aWNlIGlz IHN0aWxsIGJvdW5kIHRvIG1tIEEgd2l0aCBQQVNJRCAxLCBzaW5jZSB0aGUgcXVldWUgZmQgaXMK PiAgICBzdGlsbCBvcGVuLgoKPiBXZSBkaXNjdXNzZWQgdGhpcyBiZWZvcmUsIGJ1dCBJIGRvbid0 IHJlbWVtYmVyIHdoZXJlIHdlIGxlZnQgb2ZmLiBUaGUKPiBjaGlsZCBjYW4ndCB1c2UgdGhlIHF1 ZXVlIGJlY2F1c2UgaXRzIG1hcHBpbmdzIGFyZSBub3QgY29waWVkIG9uIGZvcmsoKSwKPiBhbmQg dGhlIHF1ZXVlIGlzIHN0aWxsIGJvdW5kIHRvIHRoZSBwYXJlbnQgbW0gQS4gVGhlIGNoaWxkIGVp dGhlciBuZWVkcyB0bwo+IG9wZW4gYSBuZXcgcXVldWUgb3IgdGFrZSBvd25lcnNoaXAgb2YgdGhl IG9sZCBvbmUgd2l0aCBhIG5ldyB1YWNjZSBpb2N0bC4KWWVzLCBjdXJyZW50bHkgbmdpbnggYWxp Z25lZCB3aXRoIHRoZSBjYXNlLgpDaGlsZCBwcm9jZXNzICh3b3JrZXIgcHJvY2VzcykgcmVvcGVu IHVhY2NlLAoKTWFzdGVyIHByb2Nlc3MgKGRvIGluaXQpIG9wZW4gdWFjY2UsIGlvbW11X3N2YV9i aW5kX2RldmljZShkZXYsIEEpIC0+IApQQVNJRCAxCk1hc3RlciBwcm9jZXNzIGZvcmsgQ2hpbGQg KGRhZW1vbikgYW5kIGV4aXQuCgpDaGlsZCAoZGFlbW9uKcKgIGRvZXMgbm90IHVzZSBQQVNJRCAx IGFueSBtb3JlLCBvbmx5IGZvcmsgYW5kIG1hbmFnZSAKd29ya2VyIHByb2Nlc3MuCldvcmtlciBw cm9jZXNzIHJlb3BlbiB1YWNjZSwgaW9tbXVfc3ZhX2JpbmRfZGV2aWNlKGRldiwgQikgUEFTSUQg MgoKU28gaXQgaXMgZXhwZWN0ZWQuCj4gSXMgdGhhdCB0aGUgIklNUExFTUVOVF9EWU5BTUlDX0JJ TkRfRk4oKSIgeW91IG1lbnRpb24sIHNvbWV0aGluZyBvdXQgb2YKPiB0cmVlPyAgVGhpcyBvcGVy YXRpb24gc2hvdWxkIHVuYmluZCBmcm9tIEEgYmVmb3JlIGJpbmRpbmcgdG8gQiwgbm8/Cj4gT3Ro ZXJ3aXNlIHdlIGxlYWsgUEFTSUQgMS4KSW4gNS4xNiBQQVNJRCAxIGZyb20gbWFzdGVyIGlzIGhv bGQgdW50aWwgbmdpbnggc2VydmljZSBzdG9wLgpuZ2lueCBzdGFydAptYXN0ZXI6CmlvbW11X3N2 YV9hbGxvY19wYXNpZCBtbS0+cGFzaWQ9McKgwqDCoCDCoCAvLyBtYXN0ZXIgcHJvY2VzcwoKbHlu eCBodHRwcyBzdGFydDoKaW9tbXVfc3ZhX2FsbG9jX3Bhc2lkIG1tLT5wYXNpZD0ywqDCoMKgIC8v d29ya2VyIHByb2Nlc3MKCm5naW54IHN0b3A6wqAgZnJvbSBmb3BzX3JlbGVhc2UKaW9tbXVfc3Zh X2ZyZWVfcGFzaWQgbW0tPnBhc2lkPTLCoMKgIC8vIHdvcmtlciBwcm9jZXNzCmlvbW11X3N2YV9m cmVlX3Bhc2lkIG1tLT5wYXNpZD0xwqAgLy8gbWFzdGVyIHByb2Nlc3MKCgpIYXZlIG9uZSBzaWxs eSBxdWVzdGlvbi4KCmtlcm5lIGRyaXZlcgpmb3BzX29wZW4KaW9tbXVfc3ZhX2JpbmRfZGV2aWNl Cgpmb3BzX3JlbGVhc2UKaW9tbXVfc3ZhX3VuYmluZF9kZXZpY2UKCmFwcGxpY2F0aW9uCm1haW4o KQpmZCA9IG9wZW4KcmV0dXJuOwoKQXBwbGljYXRpb24gZXhpdCBidXQgbm90IGNsb3NlKGZkKSwg aXMgaXQgZXhwZWN0ZWQgZm9wc19yZWxlYXNlIHdpbGwgYmUgCmNhbGxlZCBhdXRvbWF0aWNhbGx5 IGJ5IHN5c3RlbT8KCk9uIDUuMTcKZm9wc19yZWxlYXNlIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5 LCBhcyB3ZWxsIGFzIGlvbW11X3N2YV91bmJpbmRfZGV2aWNlLgpPbiA1LjE4LXJjMS4KZm9wc19y ZWxlYXNlIGlzIG5vdCBjYWxsZWQsIGhhdmUgdG8gbWFudWFsbHkgY2FsbCBjbG9zZShmZCkKClNp bmNlIG5naW54IG1heSBoYXZlIGEgaXNzdWUsIGl0IGRvZXMgbm90IGNhbGwgY2xvc2UoZmQpIHdo ZW4gbmdpbnggLXMgcXVpdC4KClRoYW5rcwoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwppb21tdSBtYWlsaW5nIGxpc3QKaW9tbXVAbGlzdHMubGludXgt Zm91bmRhdGlvbi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eGZvdW5kYXRpb24ub3JnL21haWxtYW4v bGlzdGluZm8vaW9tbXU=