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.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,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 3F325C49EA7 for ; Fri, 25 Jun 2021 19:10:39 +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 C573961921 for ; Fri, 25 Jun 2021 19:10:38 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C573961921 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com 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 BF6016EE44; Fri, 25 Jun 2021 19:10:36 +0000 (UTC) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 52FA06EE3B; Fri, 25 Jun 2021 19:10:35 +0000 (UTC) IronPort-SDR: cJsAsLxDXouYy5iBBF6Yb5YL1+RMUsJcy8mhDUGg/ZH2HU8bVpjGVFeD1xWmtbi/gvcO4Uumtq N9ENsog0aJOg== X-IronPort-AV: E=McAfee;i="6200,9189,10026"; a="268860560" X-IronPort-AV: E=Sophos;i="5.83,299,1616482800"; d="scan'208";a="268860560" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Jun 2021 12:10:33 -0700 IronPort-SDR: luD4NLN+lf94H+ZSeAtx7SAjPEFMWlPbXqmNBpunhNe5LMbRKr7Cr+SB+RbyMurhF26QxZUgFj 5TZUmFXOy6OA== X-IronPort-AV: E=Sophos;i="5.83,299,1616482800"; d="scan'208";a="455538511" Received: from liordavi-mobl.ger.corp.intel.com (HELO [10.249.254.242]) ([10.249.254.242]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Jun 2021 12:10:31 -0700 Subject: Re: [PATCH 4/4] drm/i915/gem: Migrate to system at dma-buf map time To: "Ruhl, Michael J" , "intel-gfx@lists.freedesktop.org" , "dri-devel@lists.freedesktop.org" References: <20210624183110.22582-1-thomas.hellstrom@linux.intel.com> <20210624183110.22582-5-thomas.hellstrom@linux.intel.com> <5304ae661abb43a0816a485db9d3bbb5@intel.com> <5e9a46340f254928be6264e4e61eeab8@intel.com> <8cffb2f2-4401-2cdf-1ab3-98cc2d879b00@linux.intel.com> <6ca4bd4f3fde427ea8e2b0de61bbde65@intel.com> <3aa6d76f-eb4e-c2c7-0e8c-f87960cbff00@linux.intel.com> From: =?UTF-8?Q?Thomas_Hellstr=c3=b6m?= Message-ID: <694e0c7a-4878-8ac4-3a09-6fd453b6811b@linux.intel.com> Date: Fri, 25 Jun 2021 21:10:29 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.10.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US 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: "Auld, Matthew" Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" On 6/25/21 9:07 PM, Ruhl, Michael J wrote: >> -----Original Message----- >> From: Thomas Hellström >> Sent: Friday, June 25, 2021 2:50 PM >> To: Ruhl, Michael J ; intel- >> gfx@lists.freedesktop.org; dri-devel@lists.freedesktop.org >> Cc: Auld, Matthew >> Subject: Re: [PATCH 4/4] drm/i915/gem: Migrate to system at dma-buf map >> time >> >> Hi, Mike, >> >> On 6/25/21 7:57 PM, Ruhl, Michael J wrote: >>>> -----Original Message----- >>>> From: Thomas Hellström >>>> Sent: Friday, June 25, 2021 1:52 PM >>>> To: Ruhl, Michael J ; intel- >>>> gfx@lists.freedesktop.org; dri-devel@lists.freedesktop.org >>>> Cc: Auld, Matthew >>>> Subject: Re: [PATCH 4/4] drm/i915/gem: Migrate to system at dma-buf >> map >>>> time >>>> >>>> >>>> On 6/25/21 7:38 PM, Ruhl, Michael J wrote: >>>>>> -----Original Message----- >>>>>> From: Thomas Hellström >>>>>> Sent: Friday, June 25, 2021 12:18 PM >>>>>> To: Ruhl, Michael J ; intel- >>>>>> gfx@lists.freedesktop.org; dri-devel@lists.freedesktop.org >>>>>> Cc: Auld, Matthew >>>>>> Subject: Re: [PATCH 4/4] drm/i915/gem: Migrate to system at dma-buf >>>> map >>>>>> time >>>>>> >>>>>> Hi, Michael, >>>>>> >>>>>> thanks for looking at this. >>>>>> >>>>>> On 6/25/21 6:02 PM, Ruhl, Michael J wrote: >>>>>>>> -----Original Message----- >>>>>>>> From: dri-devel On >> Behalf >>>> Of >>>>>>>> Thomas Hellström >>>>>>>> Sent: Thursday, June 24, 2021 2:31 PM >>>>>>>> To: intel-gfx@lists.freedesktop.org; dri-devel@lists.freedesktop.org >>>>>>>> Cc: Thomas Hellström ; Auld, >>>>>> Matthew >>>>>>>> >>>>>>>> Subject: [PATCH 4/4] drm/i915/gem: Migrate to system at dma-buf >> map >>>>>> time >>>>>>>> Until we support p2p dma or as a complement to that, migrate data >>>>>>>> to system memory at dma-buf map time if possible. >>>>>>>> >>>>>>>> Signed-off-by: Thomas Hellström >> >>>>>>>> --- >>>>>>>> drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c | 9 ++++++++- >>>>>>>> 1 file changed, 8 insertions(+), 1 deletion(-) >>>>>>>> >>>>>>>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c >>>>>>>> b/drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c >>>>>>>> index 616c3a2f1baf..a52f885bc09a 100644 >>>>>>>> --- a/drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c >>>>>>>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c >>>>>>>> @@ -25,7 +25,14 @@ static struct sg_table >>>>>> *i915_gem_map_dma_buf(struct >>>>>>>> dma_buf_attachment *attachme >>>>>>>> struct scatterlist *src, *dst; >>>>>>>> int ret, i; >>>>>>>> >>>>>>>> - ret = i915_gem_object_pin_pages_unlocked(obj); >>>>>>>> + ret = i915_gem_object_lock_interruptible(obj, NULL); >>>>>>> Hmm, I believe in most cases that the caller should be holding the >>>>>>> lock (object dma-resv) on this object already. >>>>>> Yes, I agree, In particular for other instances of our own driver,  at >>>>>> least since the dma_resv introduction. >>>>>> >>>>>> But I also think that's a pre-existing bug, since >>>>>> i915_gem_object_pin_pages_unlocked() will also take the lock. >>>>> Ouch yes. Missed that. >>>>> >>>>>> I Think we need to initially make the exporter dynamic-capable to >>>>>> resolve this, and drop the locking here completely, as dma-buf docs says >>>>>> that we're then guaranteed to get called with the object lock held. >>>>>> >>>>>> I figure if we make the exporter dynamic, we need to migrate already at >>>>>> dma_buf_pin time so we don't pin the object in the wrong location. >>>>> The exporter as dynamic (ops->pin is available) is optional, but importer >>>>> dynamic (ops->move_notify) is required. >>>>> >>>>> With that in mind, it would seem that there are three possible >> combinations >>>>> for the migrate to be attempted: >>>>> >>>>> 1) in the ops->pin function (export_dynamic != import_dynamic, during >>>> attach) >>>>> 2) in the ops->pin function (export_dynamic and >>>> !CONFIG_DMABUF_MOVE_NOTIFY) during mapping >>>>> 3) and possibly in ops->map_dma_buf (exort_dynamic iand >>>> CONFIG_DMABUF_MOVE_NOTIFY) >>>>> Since one possibility has to be in the mapping function, it seems that if we >>>>> can figure out the locking, that the migrate should probably be available >>>> here. >>>>> Mike >>>> So perhaps just to initially fix the bug, we could just implement NOP >>>> pin() and unpin() callbacks and drop the locking in map_attach() and >>>> replace it with an assert_object_held(); >>> That is the sticky part of the move notify API. >>> >>> If you do the attach_dynamic you have to have an ops with move_notify. >>> >>> (https://elixir.bootlin.com/linux/v5.13-rc7/source/drivers/dma-buf/dma- >> buf.c#L730) >>> If you don't have that, i.e. just the pin interface, the attach will be >>> rejected, and you will not get the callbacks. >> I understood that as the requirement for move_notify is only if the >> *importer* declares dynamic. A dynamic exporter could choose whether to >> call move_notify() on eviction or to pin and never evict. If the >> importer is non-dynamic, the core calls pin() and the only choice is to >> pin and never evict. >> >> So if we temporarily choose to pin and never evict for *everything*, (as >> the current code does now), I think we should be good for now, and then >> we can implement all fancy p2p and move_notify stuff on top of that. > /sigh. > > You are correct. I was mistakenly placing the pin API (dma_buf_ops) in the > attach_ops. 😐 Must be Friday. > > Upon further reflection, I think that your path will work. > > However, is doing a pin (with no locking) from the dma_buf_mapping any different > from using the pin API + export_dynamic? > > M Yes, it's different for dynamic importers only that would otherwise never pin, and we could mistakenly evict the object without having implemented calling move_notify. If we pin, we never evict. /Thomas >> /Thomas >> >> >>> So I think that the only thing we can do for now is to dop the locking and add >> the >>> assert_object_held(); >>> >>> M >> >> >>>> /Thomas >>>> 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.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,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 A0888C2B9F4 for ; Fri, 25 Jun 2021 19:10:38 +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 42C4B61921 for ; Fri, 25 Jun 2021 19:10:37 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 42C4B61921 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id D17836EE48; Fri, 25 Jun 2021 19:10:36 +0000 (UTC) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 52FA06EE3B; Fri, 25 Jun 2021 19:10:35 +0000 (UTC) IronPort-SDR: cJsAsLxDXouYy5iBBF6Yb5YL1+RMUsJcy8mhDUGg/ZH2HU8bVpjGVFeD1xWmtbi/gvcO4Uumtq N9ENsog0aJOg== X-IronPort-AV: E=McAfee;i="6200,9189,10026"; a="268860560" X-IronPort-AV: E=Sophos;i="5.83,299,1616482800"; d="scan'208";a="268860560" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Jun 2021 12:10:33 -0700 IronPort-SDR: luD4NLN+lf94H+ZSeAtx7SAjPEFMWlPbXqmNBpunhNe5LMbRKr7Cr+SB+RbyMurhF26QxZUgFj 5TZUmFXOy6OA== X-IronPort-AV: E=Sophos;i="5.83,299,1616482800"; d="scan'208";a="455538511" Received: from liordavi-mobl.ger.corp.intel.com (HELO [10.249.254.242]) ([10.249.254.242]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Jun 2021 12:10:31 -0700 To: "Ruhl, Michael J" , "intel-gfx@lists.freedesktop.org" , "dri-devel@lists.freedesktop.org" References: <20210624183110.22582-1-thomas.hellstrom@linux.intel.com> <20210624183110.22582-5-thomas.hellstrom@linux.intel.com> <5304ae661abb43a0816a485db9d3bbb5@intel.com> <5e9a46340f254928be6264e4e61eeab8@intel.com> <8cffb2f2-4401-2cdf-1ab3-98cc2d879b00@linux.intel.com> <6ca4bd4f3fde427ea8e2b0de61bbde65@intel.com> <3aa6d76f-eb4e-c2c7-0e8c-f87960cbff00@linux.intel.com> From: =?UTF-8?Q?Thomas_Hellstr=c3=b6m?= Message-ID: <694e0c7a-4878-8ac4-3a09-6fd453b6811b@linux.intel.com> Date: Fri, 25 Jun 2021 21:10:29 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.10.1 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US Subject: Re: [Intel-gfx] [PATCH 4/4] drm/i915/gem: Migrate to system at dma-buf map time X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Auld, Matthew" Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Ck9uIDYvMjUvMjEgOTowNyBQTSwgUnVobCwgTWljaGFlbCBKIHdyb3RlOgo+PiAtLS0tLU9yaWdp bmFsIE1lc3NhZ2UtLS0tLQo+PiBGcm9tOiBUaG9tYXMgSGVsbHN0csO2bSA8dGhvbWFzLmhlbGxz dHJvbUBsaW51eC5pbnRlbC5jb20+Cj4+IFNlbnQ6IEZyaWRheSwgSnVuZSAyNSwgMjAyMSAyOjUw IFBNCj4+IFRvOiBSdWhsLCBNaWNoYWVsIEogPG1pY2hhZWwuai5ydWhsQGludGVsLmNvbT47IGlu dGVsLQo+PiBnZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnOyBkcmktZGV2ZWxAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCj4+IENjOiBBdWxkLCBNYXR0aGV3IDxtYXR0aGV3LmF1bGRAaW50ZWwuY29tPgo+ PiBTdWJqZWN0OiBSZTogW1BBVENIIDQvNF0gZHJtL2k5MTUvZ2VtOiBNaWdyYXRlIHRvIHN5c3Rl bSBhdCBkbWEtYnVmIG1hcAo+PiB0aW1lCj4+Cj4+IEhpLCBNaWtlLAo+Pgo+PiBPbiA2LzI1LzIx IDc6NTcgUE0sIFJ1aGwsIE1pY2hhZWwgSiB3cm90ZToKPj4+PiAtLS0tLU9yaWdpbmFsIE1lc3Nh Z2UtLS0tLQo+Pj4+IEZyb206IFRob21hcyBIZWxsc3Ryw7ZtIDx0aG9tYXMuaGVsbHN0cm9tQGxp bnV4LmludGVsLmNvbT4KPj4+PiBTZW50OiBGcmlkYXksIEp1bmUgMjUsIDIwMjEgMTo1MiBQTQo+ Pj4+IFRvOiBSdWhsLCBNaWNoYWVsIEogPG1pY2hhZWwuai5ydWhsQGludGVsLmNvbT47IGludGVs LQo+Pj4+IGdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmc7IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKPj4+PiBDYzogQXVsZCwgTWF0dGhldyA8bWF0dGhldy5hdWxkQGludGVsLmNvbT4K Pj4+PiBTdWJqZWN0OiBSZTogW1BBVENIIDQvNF0gZHJtL2k5MTUvZ2VtOiBNaWdyYXRlIHRvIHN5 c3RlbSBhdCBkbWEtYnVmCj4+IG1hcAo+Pj4+IHRpbWUKPj4+Pgo+Pj4+Cj4+Pj4gT24gNi8yNS8y MSA3OjM4IFBNLCBSdWhsLCBNaWNoYWVsIEogd3JvdGU6Cj4+Pj4+PiAtLS0tLU9yaWdpbmFsIE1l c3NhZ2UtLS0tLQo+Pj4+Pj4gRnJvbTogVGhvbWFzIEhlbGxzdHLDtm0gPHRob21hcy5oZWxsc3Ry b21AbGludXguaW50ZWwuY29tPgo+Pj4+Pj4gU2VudDogRnJpZGF5LCBKdW5lIDI1LCAyMDIxIDEy OjE4IFBNCj4+Pj4+PiBUbzogUnVobCwgTWljaGFlbCBKIDxtaWNoYWVsLmoucnVobEBpbnRlbC5j b20+OyBpbnRlbC0KPj4+Pj4+IGdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmc7IGRyaS1kZXZlbEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKPj4+Pj4+IENjOiBBdWxkLCBNYXR0aGV3IDxtYXR0aGV3LmF1 bGRAaW50ZWwuY29tPgo+Pj4+Pj4gU3ViamVjdDogUmU6IFtQQVRDSCA0LzRdIGRybS9pOTE1L2dl bTogTWlncmF0ZSB0byBzeXN0ZW0gYXQgZG1hLWJ1Zgo+Pj4+IG1hcAo+Pj4+Pj4gdGltZQo+Pj4+ Pj4KPj4+Pj4+IEhpLCBNaWNoYWVsLAo+Pj4+Pj4KPj4+Pj4+IHRoYW5rcyBmb3IgbG9va2luZyBh dCB0aGlzLgo+Pj4+Pj4KPj4+Pj4+IE9uIDYvMjUvMjEgNjowMiBQTSwgUnVobCwgTWljaGFlbCBK IHdyb3RlOgo+Pj4+Pj4+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+Pj4+Pj4+PiBGcm9t OiBkcmktZGV2ZWwgPGRyaS1kZXZlbC1ib3VuY2VzQGxpc3RzLmZyZWVkZXNrdG9wLm9yZz4gT24K Pj4gQmVoYWxmCj4+Pj4gT2YKPj4+Pj4+Pj4gVGhvbWFzIEhlbGxzdHLDtm0KPj4+Pj4+Pj4gU2Vu dDogVGh1cnNkYXksIEp1bmUgMjQsIDIwMjEgMjozMSBQTQo+Pj4+Pj4+PiBUbzogaW50ZWwtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZzsgZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+ Pj4+Pj4+PiBDYzogVGhvbWFzIEhlbGxzdHLDtm0gPHRob21hcy5oZWxsc3Ryb21AbGludXguaW50 ZWwuY29tPjsgQXVsZCwKPj4+Pj4+IE1hdHRoZXcKPj4+Pj4+Pj4gPG1hdHRoZXcuYXVsZEBpbnRl bC5jb20+Cj4+Pj4+Pj4+IFN1YmplY3Q6IFtQQVRDSCA0LzRdIGRybS9pOTE1L2dlbTogTWlncmF0 ZSB0byBzeXN0ZW0gYXQgZG1hLWJ1Zgo+PiBtYXAKPj4+Pj4+IHRpbWUKPj4+Pj4+Pj4gVW50aWwg d2Ugc3VwcG9ydCBwMnAgZG1hIG9yIGFzIGEgY29tcGxlbWVudCB0byB0aGF0LCBtaWdyYXRlIGRh dGEKPj4+Pj4+Pj4gdG8gc3lzdGVtIG1lbW9yeSBhdCBkbWEtYnVmIG1hcCB0aW1lIGlmIHBvc3Np YmxlLgo+Pj4+Pj4+Pgo+Pj4+Pj4+PiBTaWduZWQtb2ZmLWJ5OiBUaG9tYXMgSGVsbHN0csO2bQo+ PiA8dGhvbWFzLmhlbGxzdHJvbUBsaW51eC5pbnRlbC5jb20+Cj4+Pj4+Pj4+IC0tLQo+Pj4+Pj4+ PiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fZG1hYnVmLmMgfCA5ICsrKysrKysr LQo+Pj4+Pj4+PiAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0p Cj4+Pj4+Pj4+Cj4+Pj4+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0v aTkxNV9nZW1fZG1hYnVmLmMKPj4+Pj4+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkx NV9nZW1fZG1hYnVmLmMKPj4+Pj4+Pj4gaW5kZXggNjE2YzNhMmYxYmFmLi5hNTJmODg1YmMwOWEg MTAwNjQ0Cj4+Pj4+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9k bWFidWYuYwo+Pj4+Pj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1f ZG1hYnVmLmMKPj4+Pj4+Pj4gQEAgLTI1LDcgKzI1LDE0IEBAIHN0YXRpYyBzdHJ1Y3Qgc2dfdGFi bGUKPj4+Pj4+ICppOTE1X2dlbV9tYXBfZG1hX2J1ZihzdHJ1Y3QKPj4+Pj4+Pj4gZG1hX2J1Zl9h dHRhY2htZW50ICphdHRhY2htZQo+Pj4+Pj4+PiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsICpk c3Q7Cj4+Pj4+Pj4+IAlpbnQgcmV0LCBpOwo+Pj4+Pj4+Pgo+Pj4+Pj4+PiAtCXJldCA9IGk5MTVf Z2VtX29iamVjdF9waW5fcGFnZXNfdW5sb2NrZWQob2JqKTsKPj4+Pj4+Pj4gKwlyZXQgPSBpOTE1 X2dlbV9vYmplY3RfbG9ja19pbnRlcnJ1cHRpYmxlKG9iaiwgTlVMTCk7Cj4+Pj4+Pj4gSG1tLCBJ IGJlbGlldmUgaW4gbW9zdCBjYXNlcyB0aGF0IHRoZSBjYWxsZXIgc2hvdWxkIGJlIGhvbGRpbmcg dGhlCj4+Pj4+Pj4gbG9jayAob2JqZWN0IGRtYS1yZXN2KSBvbiB0aGlzIG9iamVjdCBhbHJlYWR5 Lgo+Pj4+Pj4gWWVzLCBJIGFncmVlLCBJbiBwYXJ0aWN1bGFyIGZvciBvdGhlciBpbnN0YW5jZXMg b2Ygb3VyIG93biBkcml2ZXIswqAgYXQKPj4+Pj4+IGxlYXN0IHNpbmNlIHRoZSBkbWFfcmVzdiBp bnRyb2R1Y3Rpb24uCj4+Pj4+Pgo+Pj4+Pj4gQnV0IEkgYWxzbyB0aGluayB0aGF0J3MgYSBwcmUt ZXhpc3RpbmcgYnVnLCBzaW5jZQo+Pj4+Pj4gaTkxNV9nZW1fb2JqZWN0X3Bpbl9wYWdlc191bmxv Y2tlZCgpIHdpbGwgYWxzbyB0YWtlIHRoZSBsb2NrLgo+Pj4+PiBPdWNoIHllcy4gIE1pc3NlZCB0 aGF0Lgo+Pj4+Pgo+Pj4+Pj4gSSBUaGluayB3ZSBuZWVkIHRvIGluaXRpYWxseSBtYWtlIHRoZSBl eHBvcnRlciBkeW5hbWljLWNhcGFibGUgdG8KPj4+Pj4+IHJlc29sdmUgdGhpcywgYW5kIGRyb3Ag dGhlIGxvY2tpbmcgaGVyZSBjb21wbGV0ZWx5LCBhcyBkbWEtYnVmIGRvY3Mgc2F5cwo+Pj4+Pj4g dGhhdCB3ZSdyZSB0aGVuIGd1YXJhbnRlZWQgdG8gZ2V0IGNhbGxlZCB3aXRoIHRoZSBvYmplY3Qg bG9jayBoZWxkLgo+Pj4+Pj4KPj4+Pj4+IEkgZmlndXJlIGlmIHdlIG1ha2UgdGhlIGV4cG9ydGVy IGR5bmFtaWMsIHdlIG5lZWQgdG8gbWlncmF0ZSBhbHJlYWR5IGF0Cj4+Pj4+PiBkbWFfYnVmX3Bp biB0aW1lIHNvIHdlIGRvbid0IHBpbiB0aGUgb2JqZWN0IGluIHRoZSB3cm9uZyBsb2NhdGlvbi4K Pj4+Pj4gVGhlIGV4cG9ydGVyIGFzIGR5bmFtaWMgIChvcHMtPnBpbiBpcyBhdmFpbGFibGUpIGlz IG9wdGlvbmFsLCBidXQgaW1wb3J0ZXIKPj4+Pj4gZHluYW1pYyAob3BzLT5tb3ZlX25vdGlmeSkg aXMgcmVxdWlyZWQuCj4+Pj4+Cj4+Pj4+IFdpdGggdGhhdCBpbiBtaW5kLCBpdCB3b3VsZCBzZWVt IHRoYXQgdGhlcmUgYXJlIHRocmVlIHBvc3NpYmxlCj4+IGNvbWJpbmF0aW9ucwo+Pj4+PiBmb3Ig dGhlIG1pZ3JhdGUgdG8gYmUgYXR0ZW1wdGVkOgo+Pj4+Pgo+Pj4+PiAxKSBpbiB0aGUgb3BzLT5w aW4gZnVuY3Rpb24gKGV4cG9ydF9keW5hbWljICE9IGltcG9ydF9keW5hbWljLCBkdXJpbmcKPj4+ PiBhdHRhY2gpCj4+Pj4+IDIpIGluIHRoZSBvcHMtPnBpbiBmdW5jdGlvbiAoZXhwb3J0X2R5bmFt aWMgYW5kCj4+Pj4gIUNPTkZJR19ETUFCVUZfTU9WRV9OT1RJRlkpIGR1cmluZyBtYXBwaW5nCj4+ Pj4+IDMpIGFuZCBwb3NzaWJseSBpbiBvcHMtPm1hcF9kbWFfYnVmIChleG9ydF9keW5hbWljIGlh bmQKPj4+PiBDT05GSUdfRE1BQlVGX01PVkVfTk9USUZZKQo+Pj4+PiBTaW5jZSBvbmUgcG9zc2li aWxpdHkgaGFzIHRvIGJlIGluIHRoZSBtYXBwaW5nIGZ1bmN0aW9uLCBpdCBzZWVtcyB0aGF0IGlm IHdlCj4+Pj4+IGNhbiBmaWd1cmUgb3V0IHRoZSBsb2NraW5nLCB0aGF0IHRoZSBtaWdyYXRlIHNo b3VsZCBwcm9iYWJseSBiZSBhdmFpbGFibGUKPj4+PiBoZXJlLgo+Pj4+PiBNaWtlCj4+Pj4gU28g cGVyaGFwcyBqdXN0IHRvIGluaXRpYWxseSBmaXggdGhlIGJ1Zywgd2UgY291bGQganVzdCBpbXBs ZW1lbnQgTk9QCj4+Pj4gcGluKCkgYW5kIHVucGluKCkgY2FsbGJhY2tzIGFuZCBkcm9wIHRoZSBs b2NraW5nIGluIG1hcF9hdHRhY2goKSBhbmQKPj4+PiByZXBsYWNlIGl0IHdpdGggYW4gYXNzZXJ0 X29iamVjdF9oZWxkKCk7Cj4+PiBUaGF0IGlzIHRoZSBzdGlja3kgcGFydCBvZiB0aGUgbW92ZSBu b3RpZnkgQVBJLgo+Pj4KPj4+IElmIHlvdSBkbyB0aGUgYXR0YWNoX2R5bmFtaWMgeW91IGhhdmUg dG8gaGF2ZSBhbiBvcHMgd2l0aCBtb3ZlX25vdGlmeS4KPj4+Cj4+PiAoaHR0cHM6Ly9lbGl4aXIu Ym9vdGxpbi5jb20vbGludXgvdjUuMTMtcmM3L3NvdXJjZS9kcml2ZXJzL2RtYS1idWYvZG1hLQo+ PiBidWYuYyNMNzMwKQo+Pj4gSWYgeW91IGRvbid0IGhhdmUgdGhhdCwgaS5lLiBqdXN0IHRoZSBw aW4gaW50ZXJmYWNlLCB0aGUgYXR0YWNoIHdpbGwgYmUKPj4+IHJlamVjdGVkLCBhbmQgeW91IHdp bGwgbm90IGdldCB0aGUgY2FsbGJhY2tzLgo+PiBJIHVuZGVyc3Rvb2QgdGhhdCBhcyB0aGUgcmVx dWlyZW1lbnQgZm9yIG1vdmVfbm90aWZ5IGlzIG9ubHkgaWYgdGhlCj4+ICppbXBvcnRlciogZGVj bGFyZXMgZHluYW1pYy4gQSBkeW5hbWljIGV4cG9ydGVyIGNvdWxkIGNob29zZSB3aGV0aGVyIHRv Cj4+IGNhbGwgbW92ZV9ub3RpZnkoKSBvbiBldmljdGlvbiBvciB0byBwaW4gYW5kIG5ldmVyIGV2 aWN0LiBJZiB0aGUKPj4gaW1wb3J0ZXIgaXMgbm9uLWR5bmFtaWMsIHRoZSBjb3JlIGNhbGxzIHBp bigpIGFuZCB0aGUgb25seSBjaG9pY2UgaXMgdG8KPj4gcGluIGFuZCBuZXZlciBldmljdC4KPj4K Pj4gU28gaWYgd2UgdGVtcG9yYXJpbHkgY2hvb3NlIHRvIHBpbiBhbmQgbmV2ZXIgZXZpY3QgZm9y ICpldmVyeXRoaW5nKiwgKGFzCj4+IHRoZSBjdXJyZW50IGNvZGUgZG9lcyBub3cpLCBJIHRoaW5r IHdlIHNob3VsZCBiZSBnb29kIGZvciBub3csIGFuZCB0aGVuCj4+IHdlIGNhbiBpbXBsZW1lbnQg YWxsIGZhbmN5IHAycCBhbmQgbW92ZV9ub3RpZnkgc3R1ZmYgb24gdG9wIG9mIHRoYXQuCj4gL3Np Z2guCj4KPiBZb3UgYXJlIGNvcnJlY3QuICBJIHdhcyBtaXN0YWtlbmx5IHBsYWNpbmcgdGhlIHBp biBBUEkgKGRtYV9idWZfb3BzKSBpbiB0aGUKPiBhdHRhY2hfb3BzLiDwn5iQIE11c3QgYmUgRnJp ZGF5Lgo+Cj4gVXBvbiBmdXJ0aGVyIHJlZmxlY3Rpb24sIEkgdGhpbmsgdGhhdCB5b3VyIHBhdGgg d2lsbCB3b3JrLgo+Cj4gSG93ZXZlciwgaXMgZG9pbmcgYSBwaW4gKHdpdGggbm8gbG9ja2luZykg ZnJvbSB0aGUgZG1hX2J1Zl9tYXBwaW5nIGFueSBkaWZmZXJlbnQKPiBmcm9tIHVzaW5nIHRoZSBw aW4gQVBJICsgZXhwb3J0X2R5bmFtaWM/Cj4KPiBNCgpZZXMsIGl0J3MgZGlmZmVyZW50IGZvciBk eW5hbWljIGltcG9ydGVycyBvbmx5IHRoYXQgd291bGQgb3RoZXJ3aXNlIApuZXZlciBwaW4sIGFu ZCB3ZSBjb3VsZCBtaXN0YWtlbmx5IGV2aWN0IHRoZSBvYmplY3Qgd2l0aG91dCBoYXZpbmcgCmlt cGxlbWVudGVkIGNhbGxpbmcgbW92ZV9ub3RpZnkuIElmIHdlIHBpbiwgd2UgbmV2ZXIgZXZpY3Qu CgovVGhvbWFzCgoKCj4+IC9UaG9tYXMKPj4KPj4KPj4+IFNvIEkgdGhpbmsgdGhhdCB0aGUgb25s eSB0aGluZyB3ZSBjYW4gZG8gZm9yIG5vdyBpcyB0byBkb3AgdGhlIGxvY2tpbmcgYW5kIGFkZAo+ PiB0aGUKPj4+IGFzc2VydF9vYmplY3RfaGVsZCgpOwo+Pj4KPj4+IE0KPj4KPj4KPj4+PiAvVGhv bWFzCj4+Pj4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K SW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==