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=-1.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_PASS 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 99EF7C43381 for ; Fri, 15 Mar 2019 16:54:45 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 56838218D0 for ; Fri, 15 Mar 2019 16:54:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729623AbfCOQyo (ORCPT ); Fri, 15 Mar 2019 12:54:44 -0400 Received: from bhuna.collabora.co.uk ([46.235.227.227]:49180 "EHLO bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729444AbfCOQyn (ORCPT ); Fri, 15 Mar 2019 12:54:43 -0400 Received: from [IPv6:2804:431:9718:4c54:5b9b:61a:a071:48bc] (unknown [IPv6:2804:431:9718:4c54:5b9b:61a:a071:48bc]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: koike) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id 636F7281581; Fri, 15 Mar 2019 16:54:36 +0000 (GMT) Subject: Re: [PATCH v2 1/5] drm/rockchip: fix fb references in async update To: =?UTF-8?Q?Michel_D=c3=a4nzer?= , Boris Brezillon Cc: =?UTF-8?Q?St=c3=a9phane_Marchesin?= , Sean Paul , David Airlie , Daniel Vetter , Linux Kernel Mailing List , dri-devel , Tomasz Figa , "open list:ARM/Rockchip SoC..." , "list@263.net:IOMMU DRIVERS" , kernel@collabora.com, nicholas.kazlauskas@amd.com, linux-arm-kernel@lists.infradead.org References: <20190312022204.2775-1-helen.koike@collabora.com> <20190312022204.2775-2-helen.koike@collabora.com> <20190312073438.05ad8173@collabora.com> <20190312165243.5b771e4a@collabora.com> <05750143-708b-b84e-af67-82ec6815bd89@daenzer.net> <61b8420e-9b63-b67f-e9a8-fb8a0cb7d219@daenzer.net> <20190315112519.0af4fdc0@collabora.com> From: Helen Koike Openpgp: preference=signencrypt Autocrypt: addr=helen.koike@collabora.com; keydata= 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 Message-ID: Date: Fri, 15 Mar 2019 13:54:31 -0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.5.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 3/15/19 8:29 AM, Michel Dänzer wrote: > On 2019-03-15 11:25 a.m., Boris Brezillon wrote: >> On Fri, 15 Mar 2019 11:11:36 +0100 >> Michel Dänzer wrote: >> >>> On 2019-03-14 6:51 p.m., Helen Koike wrote: >>>> On 3/14/19 6:15 AM, Michel Dänzer wrote: >>>>> On 2019-03-13 7:08 p.m., Helen Koike wrote: >>>>>> On 3/13/19 6:58 AM, Michel Dänzer wrote: >>>>>>> On 2019-03-13 4:42 a.m., Tomasz Figa wrote: >>>>>>>> On Wed, Mar 13, 2019 at 12:52 AM Boris Brezillon >>>>>>>> wrote: >>>>>>>>> On Tue, 12 Mar 2019 12:34:45 -0300 >>>>>>>>> Helen Koike wrote: >>>>>>>>>> On 3/12/19 3:34 AM, Boris Brezillon wrote: >>>>>>>>>>> On Mon, 11 Mar 2019 23:21:59 -0300 >>>>>>>>>>> Helen Koike wrote: >>>>>>>>>>> >>>>>>>>>>>> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c >>>>>>>>>>>> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c >>>>>>>>>>>> @@ -912,30 +912,31 @@ static void vop_plane_atomic_async_update(struct drm_plane *plane, >>>>>>>>>>>> struct drm_plane_state *new_state) >>>>>>>>>>>> { >>>>>>>>>>>> struct vop *vop = to_vop(plane->state->crtc); >>>>>>>>>>>> - struct drm_plane_state *plane_state; >>>>>>>>>>>> + struct drm_framebuffer *old_fb = plane->state->fb; >>>>>>>>>>>> >>>>>>>>>>>> - plane_state = plane->funcs->atomic_duplicate_state(plane); >>>>>>>>>>>> - plane_state->crtc_x = new_state->crtc_x; >>>>>>>>>>>> - plane_state->crtc_y = new_state->crtc_y; >>>>>>>>>>>> - plane_state->crtc_h = new_state->crtc_h; >>>>>>>>>>>> - plane_state->crtc_w = new_state->crtc_w; >>>>>>>>>>>> - plane_state->src_x = new_state->src_x; >>>>>>>>>>>> - plane_state->src_y = new_state->src_y; >>>>>>>>>>>> - plane_state->src_h = new_state->src_h; >>>>>>>>>>>> - plane_state->src_w = new_state->src_w; >>>>>>>>>>>> - >>>>>>>>>>>> - if (plane_state->fb != new_state->fb) >>>>>>>>>>>> - drm_atomic_set_fb_for_plane(plane_state, new_state->fb); >>>>>>>>>>>> - >>>>>>>>>>>> - swap(plane_state, plane->state); >>>>>>>>>>>> - >>>>>>>>>>>> - if (plane->state->fb && plane->state->fb != new_state->fb) { >>>>>>>>>>>> + /* >>>>>>>>>>>> + * A scanout can still be occurring, so we can't drop the reference to >>>>>>>>>>>> + * the old framebuffer. To solve this we get a reference to old_fb and >>>>>>>>>>>> + * set a worker to release it later. >>>>>>>>>>> >>>>>>>>>>> Hm, doesn't look like an async update to me if we have to wait for the >>>>>>>>>>> next VBLANK to happen to get the new content on the screen. Maybe we >>>>>>>>>>> should reject async updates when old_fb != new_fb in the rk >>>>>>>>>>> ->async_check() hook. >>>>>>>>>> >>>>>>>>>> Unless I am misunderstanding this, we don't wait here, we just grab a >>>>>>>>>> reference to the fb in case it is being still used by the hw, so it >>>>>>>>>> doesn't get released prematurely. >>>>>>>>> >>>>>>>>> I was just reacting to the comment that says the new FB should stay >>>>>>>>> around until the next VBLANK event happens. If the FB must stay around >>>>>>>>> that probably means the HW is still using, which made me wonder if this >>>>>>>>> HW actually supports async update (where async means "update now and >>>>>>>>> don't care about about tearing"). Or maybe it takes some time to switch >>>>>>>>> to the new FB and waiting for the next VBLANK to release the old FB was >>>>>>>>> an easy solution to not wait for the flip to actually happen in >>>>>>>>> ->async_update() (which is kind of a combination of async+non-blocking). >>>>>>>> >>>>>>>> The hardware switches framebuffers on vblank, so whatever framebuffer >>>>>>>> is currently being scanned out from needs to stay there until the >>>>>>>> hardware switches to the new one in shadow registers. If that doesn't >>>>>>>> happen, you get IOMMU faults and the display controller stops working >>>>>>>> since we don't have any fault handling currently, just printing a >>>>>>>> message. >>>>>>> >>>>>>> Sounds like your hardware doesn't actually support async flips. It's >>>>>>> probably better for the driver not to pretend otherwise. >>>>>> >>>>>> I think wee need to clarify the meaning of the async_update callback >>>>>> (and we should clarify it in the docs). >>>>>> >>>>>> The way I understand what the async_update callback should do is: don't >>>>>> block (i.e. don't wait for the next vblank), >>>>> >>>>> Note that those are two separate things. "Async flips" are about "don't >>>>> wait for vblank", not about "don't block". >>>>> >>>>> >>>>>> and update the hw state at some point with the latest state from the >>>>>> last call to async_update. >>>>>> >>>>>> Which means that: any driver can implement the async_update callback, >>>>>> independently if it supports changing its state right away or not. >>>>>> If hw supports, async_update can change the hw state right away, if not, >>>>>> then changes will be applied in the next vblank (it can even amend the >>>>>> pending commit if there is one). >>>>>> With this, we can remove all the legacy cursor code to use the >>>>>> async_update callback, since async_update can be called 100 times before >>>>>> the next vblank, and the latest state will be set to the hw without >>>>>> waiting 100 vblanks. >>>>>> >>>>>> Please, let me know if this is your understanding as well. If not, then >>>>>> we need to remodel things. >>>>> >>>>> While this may make sense for cursor updates, I don't think it does for >>>>> async flips. If the flip only actually takes effect during the next >>>>> vblank, it doesn't really fit the definition and userspace expectation >>>>> of an async flip. It's better to clearly communicate to userspace that >>>>> the hardware cannot do async flips, than to pretend it can and fake >>>>> them. Userspace has to deal with this anyway, since async flips weren't >>>>> always supported in general. >>>> >>>> What do you think if we separate two concepts here: >>>> >>>> - amend mode: works like cursor updates, i.e, update the hw state at >>>> some point with the latest state from the last call to async_update. No >>>> special hardware support is required. >>>> >>>> - async update: update hw state immediately. This depends if the hw >>>> supports it or not. >>>> >>>> Every async update is an amend, but the opposite is not necessarily true. >>>> >>>> What do you think if we rename the current async_update to amend_update, >>>> and we add a parameter "force_async" to it? (or maybe >>>> force_immediate_update?) >>>> Then amend_check with force_async=1 would fail if the hardware doesn't >>>> support it (we could also add flags in the capabilities to inform >>>> userspace the expected behaviour of things and if the hw supports >>>> force_sync). >>>> >>>> Like this, we can implement the cursors using the amend_update (which is >>>> now called async_update), and async_flips with amend_update with >>>> force_async=1. >>> >>> Might force_async make sense for cursor updates as well? I thought some >>> hardware supported HW cursor updates outside of vblank, but I'm not sure. What I had in mind was actually: amend_update() -> could do a real async or not depending on the hw force_async=1 -> it means amend_update will fail if the hw doesn't support it. >>> >>> Without force_async, are cursor updates always applied to the hardware >>> on the next vblank, even if the pending commit is delayed further (e.g. >>> because a fence it depends on doesn't signal before vblank)? If cursor >>> updates can be delayed beyond the next vblank, that can result in bad >>> user experience. >> >> You mean you have >> >> 1. sync/regular update pending (waiting on a fence) >> 2. async update on top of #1 >> >> ? > > Yeah. > > Actually I was thinking in another solution (without this force_async flag). Instead of having this force_async, we can have two capabilities: CAP_ASYNC: means the hw supports real async CAP_AMEND: means that the driver supports amend the in-flight update so that the new one will take its place in the queue (i.e. the current legacy cursor behavior). If (!CAP_AMEND && !CAP_ASYNC) * use a sync update or update the FB content in place without flipping buffers. * legacy cursor update will fallback to sync update. * async flip is not supported. If (CAP_AMEND && !CAP_ASYNC) * legacy cursor update will amend in-flight pending updates (like how rockchip does now) or it will fallback to a sync update if not possible. * async flip is not supported. If (!CAP_AMEND && CAP_ASYNC) * not sure yet what this would mean. If (CAP_AMEND && CAP_ASYNC) * legacy cursor update will perform real async update. * async flip is supported. What do you think? Regards Helen 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=-1.0 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_PASS, URIBL_BLOCKED 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 4165DC4360F for ; Fri, 15 Mar 2019 16:54:56 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (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 0C22E218AC for ; Fri, 15 Mar 2019 16:54:56 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="imGQLABp" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0C22E218AC Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=collabora.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date: Message-ID:From:References:To:Subject:Reply-To:Content-ID:Content-Description :Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=iNwyaGRyu2QehIW7sgDEfw3lN/0FvTUDMjAX5Lv8l2o=; b=imGQLABpwIExcc qX2eEjYTHoAbXUEZAZOKaK2VI1D1GaHqDzQdOWSF7SrRhfgUYFvcDGQVcZBBxWV4N/dV7eVtY+//+ smMkPXQXHkYZXSmduCdfX6h51PoP3TfOHZ8yuTf8YMG/F6/jNhUZQdTnf3ZLPaJJXSuevBGZNYChC 8FMZ/P5Wapd1ruS9lWe9eYrq9t2ltjnb/vy96A+6U6iRBu5MEy9b5WqPjF2Nk1+blFRhszZI2BI2A Dhmv25cY6EM0g7acnPwS2Gm37vmYronwjuafqjgpI6PTIbk9VflmLH13D57DzwUZlsOo7FSvj93M7 YPrQVSbeje0uSdKagscQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1h4q6Z-0000uU-Em; Fri, 15 Mar 2019 16:54:47 +0000 Received: from bhuna.collabora.co.uk ([2a00:1098:0:82:1000:25:2eeb:e3e3]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1h4q6V-0000tf-Fp; Fri, 15 Mar 2019 16:54:45 +0000 Received: from [IPv6:2804:431:9718:4c54:5b9b:61a:a071:48bc] (unknown [IPv6:2804:431:9718:4c54:5b9b:61a:a071:48bc]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: koike) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id 636F7281581; Fri, 15 Mar 2019 16:54:36 +0000 (GMT) Subject: Re: [PATCH v2 1/5] drm/rockchip: fix fb references in async update To: =?UTF-8?Q?Michel_D=c3=a4nzer?= , Boris Brezillon References: <20190312022204.2775-1-helen.koike@collabora.com> <20190312022204.2775-2-helen.koike@collabora.com> <20190312073438.05ad8173@collabora.com> <20190312165243.5b771e4a@collabora.com> <05750143-708b-b84e-af67-82ec6815bd89@daenzer.net> <61b8420e-9b63-b67f-e9a8-fb8a0cb7d219@daenzer.net> <20190315112519.0af4fdc0@collabora.com> From: Helen Koike Openpgp: preference=signencrypt Autocrypt: addr=helen.koike@collabora.com; keydata= mQINBFmOMD4BEADb2nC8Oeyvklh+ataw2u/3mrl+hIHL4WSWtii4VxCapl9+zILuxFDrxw1p XgF3cfx7g9taWBrmLE9VEPwJA6MxaVnQuDL3GXxTxO/gqnOFgT3jT+skAt6qMvoWnhgurMGH wRaA3dO4cFrDlLsZIdDywTYcy7V2bou81ItR5Ed6c5UVX7uTTzeiD/tUi8oIf0XN4takyFuV Rf09nOhi24bn9fFN5xWHJooFaFf/k2Y+5UTkofANUp8nn4jhBUrIr6glOtmE0VT4pZMMLT63 hyRB+/s7b1zkOofUGW5LxUg+wqJXZcOAvjocqSq3VVHcgyxdm+Nv0g9Hdqo8bQHC2KBK86VK vB+R7tfv7NxVhG1sTW3CQ4gZb0ZugIWS32Mnr+V+0pxci7QpV3jrtVp5W2GA5HlXkOyC6C7H Ao7YhogtvFehnlUdG8NrkC3HhCTF8+nb08yGMVI4mMZ9v/KoIXKC6vT0Ykz434ed9Oc9pDow VUqaKi3ey96QczfE4NI029bmtCY4b5fucaB/aVqWYRH98Jh8oIQVwbt+pY7cL5PxS7dQ/Zuz 6yheqDsUGLev1O3E4R8RZ8jPcfCermL0txvoXXIA56t4ZjuHVcWEe2ERhLHFGq5Zw7KC6u12 kJoiZ6WDBYo4Dp+Gd7a81/WsA33Po0j3tk/8BWoiJCrjXzhtRwARAQABtCdIZWxlbiBLb2lr ZSA8aGVsZW4ua29pa2VAY29sbGFib3JhLmNvbT6JAlQEEwEKAD4CGwEFCwkIBwMFFQoJCAsF FgIDAQACHgECF4AWIQSofQA6zrItXEgHWTzAfqwo9yFiXQUCXEz3bwUJBKaPRQAKCRDAfqwo 9yFiXdUCD/4+WZr503hQ13KB4DijOW76ju8JDPp4p++qoPxtoAsld3yROoTI+VPWmt7ojHrr TZc7sTLxOFzaUC8HjGTb3r9ilIhIKf/M9KRLkpIJ+iLA+VoUbcSOMYWoVNfgLmbnqoezjPcy OHJwVw9dzEeYpvG6nkY6E4UktANySp27AniSXNuHOvYsOsXmUOqU1ScdsrQ9s732p/OGdTyw 1yd3gUMLZvCKFOBVHILH59HCRJgpwUPiws8G4dGMs4GTRvHT2s2mDQdQ0HEvcM9rvCRVixuC 5ZeOymZNi6lDIUIysgiZ+yzk6i5l/Ni6r7v20N3JppZvhPK6LqtaYceyAGyc3jjnOqoHT/qR kPjCwzmKiPtXjLw6HbRXtGgGtP5m3y8v6bfHH+66zd2vGCY0Z9EsqcnK4DCqRkLncFLPM2gn 9cZcCmO4ZqXUhTyn1nHM494kd5NX1Op4HO+t9ErnpufkVjoMUeBwESdQwwwHT3rjUueGmCrn VJK69/qhA4La72VTxHutl+3Z0Xy20HWsZS8Gsam39f95/LtPLzbBwnOOi5ZoXnm97tF8HrAZ 2h+kcRLMWw3BXy5q4gic+oFZMZP9oq1G9XTFld4FGgJ9ys8aGmhLM+uB1pFxb3XFtWQ2z4AJ iEp2VLl34quwfD6Gg4csiZe2KzvQHUe0w8SJ9LplrHPPprkCDQRZjjChARAAzISLQaHzaDOv ZxcoCNBk/hUGo2/gsmBW4KSj73pkStZ+pm3Yv2CRtOD4jBlycXjzhwBV7/70ZMH70/Y25dJa CnJKl/Y76dPPn2LDWrG/4EkqUzoJkhRIYFUTpkPdaVYznqLgsho19j7HpEbAum8r3jemYBE1 AIuVGg4bqY3UkvuHWLVRMuaHZNy55aYwnUvd46E64JH7O990mr6t/nu2a1aJ0BDdi8HZ0RMo Eg76Avah+YR9fZrhDFmBQSL+mcCVWEbdiOzHmGYFoToqzM52wsNEpo2aStH9KLk8zrCXGx68 ohJyQoALX4sS03RIWh1jFjnlw2FCbEdj/HDX0+U0i9COtanm54arYXiBTnAnx0F7LW7pv7sb 6tKMxsMLmprP/nWyV5AfFRi3jxs5tdwtDDk/ny8WH6KWeLR/zWDwpYgnXLBCdg8l97xUoPQO 0VkKSa4JEXUZWZx9q6kICzFGsuqApqf9gIFJZwUmirsxH80Fe04Tv+IqIAW7/djYpOqGjSyk oaEVNacwLLgZr+/j69/1ZwlbS8K+ChCtyBV4kEPzltSRZ4eU19v6sDND1JSTK9KSDtCcCcAt VGFlr4aE00AD/aOkHSylc93nPinBFO4AGhcs4WypZ3GGV6vGWCpJy9svfWsUDhSwI7GS/i/v UQ1+bswyYEY1Q3DjJqT7fXcAEQEAAYkEcgQYAQoAJgIbAhYhBKh9ADrOsi1cSAdZPMB+rCj3 IWJdBQJcTPfVBQkEpo7hAkDBdCAEGQEKAB0WIQSomGMEg78Cd/pMshveCRfNeJ05lgUCWY4w oQAKCRDeCRfNeJ05lp0gD/49i95kPKjpgjUbYeidjaWuINXMCA171KyaBAp+Jp2Qrun4sIJB Z6srMj6O/gC34AhZln2sXeQdxe88sNbg6HjlN+4AkhTd6DttjOfUwnamLDA7uw+YIapGgsgN lznjLnqOaQ9mtEwRbZMUOdyRf9osSuL14vHl4ia3bYNJ52WYre6gLMu4K+Ghd02og+ILgIio Q827h0spqIJYHrR3Ynnhxdlv5GPCobh+AKsQMdTIuCzR6JSCBk6GHkg33SiWScKMUzT8B/cn ypLfGnfV/LDZ9wS2TMzIlK/uv0Vd4C0OGDd/GCi5Gwu/Ot0aY7fzZo2CiRV+/nJBWPRRBTji bE4FG2rt7WSRLO/QmH2meIW4f0USDiHeNwznHkPei59vRdlMyQdsxrmgSRDuX9Y3UkERxbgd uscqC8Cpcy5kpF11EW91J8aGpcxASc+5Pa66/+7CrpBC2DnfcfACdMAje7yeMn9XlHrqXNlQ GaglEcnGN2qVqRcKgcjJX+ur8l56BVpBPFYQYkYkIdQAuhlPylxOvsMcqI6VoEWNt0iFF3dA //0MNb8fEqw5TlxDPOt6BDhDKowkxOGIA9LOcF4PkaR9Qkvwo2P4vA/8fhCnMqlSPom4xYdk Ev8P554zDoL/XMHl+s7A0MjIJzT253ejZKlWeO68pAbNy/z7QRn2lFDnjwkQwH6sKPchYl2f 0g//Yu3vDkqk8+mi2letP3XBl2hjv2eCZjTh34VvtgY5oeL2ROSJWNd18+7O6q3hECZ727EW gIb3LK9g4mKF6+Rch6Gwz1Y4fmC5554fd2Y2XbVzzz6AGUC6Y+ohNg7lTAVO4wu43+IyTB8u ip5rX/JDGFv7Y1sl6tQJKAVIKAJE+Z3Ncqh3doQr9wWHl0UiQYKbSR9HpH1lmC1C3EEbTpwK fUIpZd1eQNyNJl1jHsZZIBYFsAfVNH/u6lB1TU+9bSOsV5SepdIb88d0fm3oZ4KzjhRHLFQF RwNUNn3ha6x4fbxYcwbvu5ZCiiX6yRTPoage/LUNkgQNX2PtPcur6CdxK6Pqm8EAI7PmYLfN NY3y01XhKNRvaVZoH2FugfUkhsBITglTIpI+n6YU06nDAcbeINFo67TSE0iL6Pek5a6gUQQC 6w+hJCaMr8KYud0q3ccHyU3TlAPDe10En3GsVz7Y5Sa3ODGdbmkfjK8Af3ogGNBVmpV16Xl8 4rETFv7POSUB2eMtbpmBopd+wKqHCwUEy3fx1zDbM9mp+pcDoL73rRZmlgmNfW/4o4qBzxRf FYTQLE69wAFU2IFce9PjtUAlBdC+6r3X24h3uD+EC37s/vWhxuKj2glaU9ONrVJ/SPvlqXOO WR1Zqw57vHMKimLdG3c24l8PkSw1usudgAA5OyO5Ag0EWY4wyQEQAMVp0U38Le7d80Mu6AT+ 1dMes87iKn30TdMuLvSg2uYqJ1T2riRBF7zU6u74HF6zps0rPQviBXOgoSuKa1hnS6OwFb9x yQPlk76LY96SUB5jPWJ3fO78ZGSwkVbJFuG9gpD/41n8Unn1hXgDb2gUaxD0oXv/723EmTYC vSo3z6Y8A2aBQNr+PyhQAPDazvVQ+P7vnZYq1oK0w+D7aIix/Bp4mo4VbgAeAeMxXWSZs8N5 NQtXeTBgB7DqrfJP5wWwgCsROfeds6EoddcYgqhG0zVU9E54C8JcPOA0wKVs+9+gt2eyRNtx 0UhFbah7qXuJGhWy/0CLXvVoCoS+7qpWz070TBAlPZrg9D0o2gOw01trQgoKAYBKKgJhxaX/ 4gzi+5Ccm33LYH9lAVTdzdorejuV1xWdsnNyc8OAPeoXBf9RIIWfQVmbhVXBp2DAPjV6/kIJ Eml7MNJfEvqjV9zKsWF9AFlsqDWZDCyUdqR96ahTSD34pRwb6a9H99/GrjeowKaaL95DIVZT C6STvDNL6kpys4sOe2AMmQGv2MMcJB3aYLzH8f1sEQ9S0UMX7/6CifEG6JodG6Y/W/lLo1Vv DxeDA+u4Lgq6qxlksp8M78FjcmxFVlf4cpCi2ucbZxurhlBkjtZZ8MVAEde3hlqjcBl2Ah6Q D826FTxscOGlHEfNABEBAAGJAjwEGAEKACYCGwwWIQSofQA6zrItXEgHWTzAfqwo9yFiXQUC XEz31QUJBKaOuQAKCRDAfqwo9yFiXUvnEACBWe8wSnIvSX+9k4LxuLq6GQTOt+RNfliZQkCW 5lT3KL1IJyzzOm4x+/slHRBl8bF7KEZyOPinXQXyJ/vgIdgSYxDqoZ7YZn3SvuNe4aT6kGwL EYYEV8Ecj4ets15FR2jSUNnVv5YHWtZ7bP/oUzr2LT54fjRcstYxgwzoj8AREtHQ4EJWAWCO ZuEHTSm5clMFoi41CmG4DlJbzbo4YfilKYm69vwh50Y8WebcRN31jh0g8ufjOJnBldYYBLwN Obymhlfy/HKBDIbyCGBuwYoAkoJ6LR/cqzl/FuhwhuDocCGlXyYaJOwXgHaCvVXI3PLQPxWZ +vPsD+TSVHc9m/YWrOiYDnZn6aO0Uk1Zv/m9+BBkWAwsreLJ/evn3SsJV1omNBTITG+uxXcf JkgmmesIAw8mpI6EeLmReUJLasz8QkzhZIC7t5rGlQI94GQG3Jg2dC+kpaGWOaT5G4FVMcBj iR1nXfMxENVYnM5ag7mBZyD/kru5W1Uj34L6AFaDMXFPwedSCpzzqUiHb0f+nYkfOodf5xy0 46+3THy/NUS/ZZp/rI4F7Y77+MQPVg7vARfHHX1AxYUKfRVW5j88QUB70txn8Vgi1tDrOr4J eD+xr0CvIGa5lKqgQacQtGkpOpJ8zY4ObSvpNubey/qYUE3DCXD0n2Xxk4muTvqlkFpOYA== Message-ID: Date: Fri, 15 Mar 2019 13:54:31 -0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.5.1 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190315_095443_790066_FB4C0118 X-CRM114-Status: GOOD ( 28.45 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?Q?St=c3=a9phane_Marchesin?= , Sean Paul , David Airlie , Daniel Vetter , Linux Kernel Mailing List , dri-devel , Tomasz Figa , "open list:ARM/Rockchip SoC..." , "list@263.net:IOMMU DRIVERS" , kernel@collabora.com, nicholas.kazlauskas@amd.com, linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org CgpPbiAzLzE1LzE5IDg6MjkgQU0sIE1pY2hlbCBEw6RuemVyIHdyb3RlOgo+IE9uIDIwMTktMDMt MTUgMTE6MjUgYS5tLiwgQm9yaXMgQnJlemlsbG9uIHdyb3RlOgo+PiBPbiBGcmksIDE1IE1hciAy MDE5IDExOjExOjM2ICswMTAwCj4+IE1pY2hlbCBEw6RuemVyIDxtaWNoZWxAZGFlbnplci5uZXQ+ IHdyb3RlOgo+Pgo+Pj4gT24gMjAxOS0wMy0xNCA2OjUxIHAubS4sIEhlbGVuIEtvaWtlIHdyb3Rl Ogo+Pj4+IE9uIDMvMTQvMTkgNjoxNSBBTSwgTWljaGVsIETDpG56ZXIgd3JvdGU6ICAKPj4+Pj4g T24gMjAxOS0wMy0xMyA3OjA4IHAubS4sIEhlbGVuIEtvaWtlIHdyb3RlOiAgCj4+Pj4+PiBPbiAz LzEzLzE5IDY6NTggQU0sIE1pY2hlbCBEw6RuemVyIHdyb3RlOiAgCj4+Pj4+Pj4gT24gMjAxOS0w My0xMyA0OjQyIGEubS4sIFRvbWFzeiBGaWdhIHdyb3RlOiAgCj4+Pj4+Pj4+IE9uIFdlZCwgTWFy IDEzLCAyMDE5IGF0IDEyOjUyIEFNIEJvcmlzIEJyZXppbGxvbgo+Pj4+Pj4+PiA8Ym9yaXMuYnJl emlsbG9uQGNvbGxhYm9yYS5jb20+IHdyb3RlOiAgCj4+Pj4+Pj4+PiBPbiBUdWUsIDEyIE1hciAy MDE5IDEyOjM0OjQ1IC0wMzAwCj4+Pj4+Pj4+PiBIZWxlbiBLb2lrZSA8aGVsZW4ua29pa2VAY29s bGFib3JhLmNvbT4gd3JvdGU6ICAKPj4+Pj4+Pj4+PiBPbiAzLzEyLzE5IDM6MzQgQU0sIEJvcmlz IEJyZXppbGxvbiB3cm90ZTogIAo+Pj4+Pj4+Pj4+PiBPbiBNb24sIDExIE1hciAyMDE5IDIzOjIx OjU5IC0wMzAwCj4+Pj4+Pj4+Pj4+IEhlbGVuIEtvaWtlIDxoZWxlbi5rb2lrZUBjb2xsYWJvcmEu Y29tPiB3cm90ZToKPj4+Pj4+Pj4+Pj4gIAo+Pj4+Pj4+Pj4+Pj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuYwo+Pj4+Pj4+Pj4+Pj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuYwo+Pj4+Pj4+Pj4+Pj4gQEAgLTkx MiwzMCArOTEyLDMxIEBAIHN0YXRpYyB2b2lkIHZvcF9wbGFuZV9hdG9taWNfYXN5bmNfdXBkYXRl KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+Pj4+Pj4+Pj4+Pj4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm5ld19zdGF0ZSkKPj4+ Pj4+Pj4+Pj4+ICB7Cj4+Pj4+Pj4+Pj4+PiAgICBzdHJ1Y3Qgdm9wICp2b3AgPSB0b192b3AocGxh bmUtPnN0YXRlLT5jcnRjKTsKPj4+Pj4+Pj4+Pj4+IC0gIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUg KnBsYW5lX3N0YXRlOwo+Pj4+Pj4+Pj4+Pj4gKyAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqb2xk X2ZiID0gcGxhbmUtPnN0YXRlLT5mYjsKPj4+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4+PiAtICBwbGFu ZV9zdGF0ZSA9IHBsYW5lLT5mdW5jcy0+YXRvbWljX2R1cGxpY2F0ZV9zdGF0ZShwbGFuZSk7Cj4+ Pj4+Pj4+Pj4+PiAtICBwbGFuZV9zdGF0ZS0+Y3J0Y194ID0gbmV3X3N0YXRlLT5jcnRjX3g7Cj4+ Pj4+Pj4+Pj4+PiAtICBwbGFuZV9zdGF0ZS0+Y3J0Y195ID0gbmV3X3N0YXRlLT5jcnRjX3k7Cj4+ Pj4+Pj4+Pj4+PiAtICBwbGFuZV9zdGF0ZS0+Y3J0Y19oID0gbmV3X3N0YXRlLT5jcnRjX2g7Cj4+ Pj4+Pj4+Pj4+PiAtICBwbGFuZV9zdGF0ZS0+Y3J0Y193ID0gbmV3X3N0YXRlLT5jcnRjX3c7Cj4+ Pj4+Pj4+Pj4+PiAtICBwbGFuZV9zdGF0ZS0+c3JjX3ggPSBuZXdfc3RhdGUtPnNyY194Owo+Pj4+ Pj4+Pj4+Pj4gLSAgcGxhbmVfc3RhdGUtPnNyY195ID0gbmV3X3N0YXRlLT5zcmNfeTsKPj4+Pj4+ Pj4+Pj4+IC0gIHBsYW5lX3N0YXRlLT5zcmNfaCA9IG5ld19zdGF0ZS0+c3JjX2g7Cj4+Pj4+Pj4+ Pj4+PiAtICBwbGFuZV9zdGF0ZS0+c3JjX3cgPSBuZXdfc3RhdGUtPnNyY193Owo+Pj4+Pj4+Pj4+ Pj4gLQo+Pj4+Pj4+Pj4+Pj4gLSAgaWYgKHBsYW5lX3N0YXRlLT5mYiAhPSBuZXdfc3RhdGUtPmZi KQo+Pj4+Pj4+Pj4+Pj4gLSAgICAgICAgICBkcm1fYXRvbWljX3NldF9mYl9mb3JfcGxhbmUocGxh bmVfc3RhdGUsIG5ld19zdGF0ZS0+ZmIpOwo+Pj4+Pj4+Pj4+Pj4gLQo+Pj4+Pj4+Pj4+Pj4gLSAg c3dhcChwbGFuZV9zdGF0ZSwgcGxhbmUtPnN0YXRlKTsKPj4+Pj4+Pj4+Pj4+IC0KPj4+Pj4+Pj4+ Pj4+IC0gIGlmIChwbGFuZS0+c3RhdGUtPmZiICYmIHBsYW5lLT5zdGF0ZS0+ZmIgIT0gbmV3X3N0 YXRlLT5mYikgewo+Pj4+Pj4+Pj4+Pj4gKyAgLyoKPj4+Pj4+Pj4+Pj4+ICsgICAqIEEgc2Nhbm91 dCBjYW4gc3RpbGwgYmUgb2NjdXJyaW5nLCBzbyB3ZSBjYW4ndCBkcm9wIHRoZSByZWZlcmVuY2Ug dG8KPj4+Pj4+Pj4+Pj4+ICsgICAqIHRoZSBvbGQgZnJhbWVidWZmZXIuIFRvIHNvbHZlIHRoaXMg d2UgZ2V0IGEgcmVmZXJlbmNlIHRvIG9sZF9mYiBhbmQKPj4+Pj4+Pj4+Pj4+ICsgICAqIHNldCBh IHdvcmtlciB0byByZWxlYXNlIGl0IGxhdGVyLiAgCj4+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4+IEht LCBkb2Vzbid0IGxvb2sgbGlrZSBhbiBhc3luYyB1cGRhdGUgdG8gbWUgaWYgd2UgaGF2ZSB0byB3 YWl0IGZvciB0aGUKPj4+Pj4+Pj4+Pj4gbmV4dCBWQkxBTksgdG8gaGFwcGVuIHRvIGdldCB0aGUg bmV3IGNvbnRlbnQgb24gdGhlIHNjcmVlbi4gTWF5YmUgd2UKPj4+Pj4+Pj4+Pj4gc2hvdWxkIHJl amVjdCBhc3luYyB1cGRhdGVzIHdoZW4gb2xkX2ZiICE9IG5ld19mYiBpbiB0aGUgcmsgIAo+Pj4+ Pj4+Pj4+PiAtPmFzeW5jX2NoZWNrKCkgaG9vay4gIAo+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4gVW5s ZXNzIEkgYW0gbWlzdW5kZXJzdGFuZGluZyB0aGlzLCB3ZSBkb24ndCB3YWl0IGhlcmUsIHdlIGp1 c3QgZ3JhYiBhCj4+Pj4+Pj4+Pj4gcmVmZXJlbmNlIHRvIHRoZSBmYiBpbiBjYXNlIGl0IGlzIGJl aW5nIHN0aWxsIHVzZWQgYnkgdGhlIGh3LCBzbyBpdAo+Pj4+Pj4+Pj4+IGRvZXNuJ3QgZ2V0IHJl bGVhc2VkIHByZW1hdHVyZWx5LiAgCj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4gSSB3YXMganVzdCByZWFj dGluZyB0byB0aGUgY29tbWVudCB0aGF0IHNheXMgdGhlIG5ldyBGQiBzaG91bGQgc3RheQo+Pj4+ Pj4+Pj4gYXJvdW5kIHVudGlsIHRoZSBuZXh0IFZCTEFOSyBldmVudCBoYXBwZW5zLiBJZiB0aGUg RkIgbXVzdCBzdGF5IGFyb3VuZAo+Pj4+Pj4+Pj4gdGhhdCBwcm9iYWJseSBtZWFucyB0aGUgSFcg aXMgc3RpbGwgdXNpbmcsIHdoaWNoIG1hZGUgbWUgd29uZGVyIGlmIHRoaXMKPj4+Pj4+Pj4+IEhX IGFjdHVhbGx5IHN1cHBvcnRzIGFzeW5jIHVwZGF0ZSAod2hlcmUgYXN5bmMgbWVhbnMgInVwZGF0 ZSBub3cgYW5kCj4+Pj4+Pj4+PiBkb24ndCBjYXJlIGFib3V0IGFib3V0IHRlYXJpbmciKS4gT3Ig bWF5YmUgaXQgdGFrZXMgc29tZSB0aW1lIHRvIHN3aXRjaAo+Pj4+Pj4+Pj4gdG8gdGhlIG5ldyBG QiBhbmQgd2FpdGluZyBmb3IgdGhlIG5leHQgVkJMQU5LIHRvIHJlbGVhc2UgdGhlIG9sZCBGQiB3 YXMKPj4+Pj4+Pj4+IGFuIGVhc3kgc29sdXRpb24gdG8gbm90IHdhaXQgZm9yIHRoZSBmbGlwIHRv IGFjdHVhbGx5IGhhcHBlbiBpbiAgCj4+Pj4+Pj4+PiAtPmFzeW5jX3VwZGF0ZSgpICh3aGljaCBp cyBraW5kIG9mIGEgY29tYmluYXRpb24gb2YgYXN5bmMrbm9uLWJsb2NraW5nKS4gIAo+Pj4+Pj4+ Pgo+Pj4+Pj4+PiBUaGUgaGFyZHdhcmUgc3dpdGNoZXMgZnJhbWVidWZmZXJzIG9uIHZibGFuaywg c28gd2hhdGV2ZXIgZnJhbWVidWZmZXIKPj4+Pj4+Pj4gaXMgY3VycmVudGx5IGJlaW5nIHNjYW5u ZWQgb3V0IGZyb20gbmVlZHMgdG8gc3RheSB0aGVyZSB1bnRpbCB0aGUKPj4+Pj4+Pj4gaGFyZHdh cmUgc3dpdGNoZXMgdG8gdGhlIG5ldyBvbmUgaW4gc2hhZG93IHJlZ2lzdGVycy4gSWYgdGhhdCBk b2Vzbid0Cj4+Pj4+Pj4+IGhhcHBlbiwgeW91IGdldCBJT01NVSBmYXVsdHMgYW5kIHRoZSBkaXNw bGF5IGNvbnRyb2xsZXIgc3RvcHMgd29ya2luZwo+Pj4+Pj4+PiBzaW5jZSB3ZSBkb24ndCBoYXZl IGFueSBmYXVsdCBoYW5kbGluZyBjdXJyZW50bHksIGp1c3QgcHJpbnRpbmcgYQo+Pj4+Pj4+PiBt ZXNzYWdlLiAgCj4+Pj4+Pj4KPj4+Pj4+PiBTb3VuZHMgbGlrZSB5b3VyIGhhcmR3YXJlIGRvZXNu J3QgYWN0dWFsbHkgc3VwcG9ydCBhc3luYyBmbGlwcy4gSXQncwo+Pj4+Pj4+IHByb2JhYmx5IGJl dHRlciBmb3IgdGhlIGRyaXZlciBub3QgdG8gcHJldGVuZCBvdGhlcndpc2UuICAKPj4+Pj4+Cj4+ Pj4+PiBJIHRoaW5rIHdlZSBuZWVkIHRvIGNsYXJpZnkgdGhlIG1lYW5pbmcgb2YgdGhlIGFzeW5j X3VwZGF0ZSBjYWxsYmFjawo+Pj4+Pj4gKGFuZCB3ZSBzaG91bGQgY2xhcmlmeSBpdCBpbiB0aGUg ZG9jcykuCj4+Pj4+Pgo+Pj4+Pj4gVGhlIHdheSBJIHVuZGVyc3RhbmQgd2hhdCB0aGUgYXN5bmNf dXBkYXRlIGNhbGxiYWNrIHNob3VsZCBkbyBpczogZG9uJ3QKPj4+Pj4+IGJsb2NrIChpLmUuIGRv bid0IHdhaXQgZm9yIHRoZSBuZXh0IHZibGFuayksICAKPj4+Pj4KPj4+Pj4gTm90ZSB0aGF0IHRo b3NlIGFyZSB0d28gc2VwYXJhdGUgdGhpbmdzLiAiQXN5bmMgZmxpcHMiIGFyZSBhYm91dCAiZG9u J3QKPj4+Pj4gd2FpdCBmb3IgdmJsYW5rIiwgbm90IGFib3V0ICJkb24ndCBibG9jayIuCj4+Pj4+ Cj4+Pj4+ICAKPj4+Pj4+IGFuZCB1cGRhdGUgdGhlIGh3IHN0YXRlIGF0IHNvbWUgcG9pbnQgd2l0 aCB0aGUgbGF0ZXN0IHN0YXRlIGZyb20gdGhlCj4+Pj4+PiBsYXN0IGNhbGwgdG8gYXN5bmNfdXBk YXRlLgo+Pj4+Pj4KPj4+Pj4+IFdoaWNoIG1lYW5zIHRoYXQ6IGFueSBkcml2ZXIgY2FuIGltcGxl bWVudCB0aGUgYXN5bmNfdXBkYXRlIGNhbGxiYWNrLAo+Pj4+Pj4gaW5kZXBlbmRlbnRseSBpZiBp dCBzdXBwb3J0cyBjaGFuZ2luZyBpdHMgc3RhdGUgcmlnaHQgYXdheSBvciBub3QuCj4+Pj4+PiBJ ZiBodyBzdXBwb3J0cywgYXN5bmNfdXBkYXRlIGNhbiBjaGFuZ2UgdGhlIGh3IHN0YXRlIHJpZ2h0 IGF3YXksIGlmIG5vdCwKPj4+Pj4+IHRoZW4gY2hhbmdlcyB3aWxsIGJlIGFwcGxpZWQgaW4gdGhl IG5leHQgdmJsYW5rIChpdCBjYW4gZXZlbiBhbWVuZCB0aGUKPj4+Pj4+IHBlbmRpbmcgY29tbWl0 IGlmIHRoZXJlIGlzIG9uZSkuCj4+Pj4+PiBXaXRoIHRoaXMsIHdlIGNhbiByZW1vdmUgYWxsIHRo ZSBsZWdhY3kgY3Vyc29yIGNvZGUgdG8gdXNlIHRoZQo+Pj4+Pj4gYXN5bmNfdXBkYXRlIGNhbGxi YWNrLCBzaW5jZSBhc3luY191cGRhdGUgY2FuIGJlIGNhbGxlZCAxMDAgdGltZXMgYmVmb3JlCj4+ Pj4+PiB0aGUgbmV4dCB2YmxhbmssIGFuZCB0aGUgbGF0ZXN0IHN0YXRlIHdpbGwgYmUgc2V0IHRv IHRoZSBodyB3aXRob3V0Cj4+Pj4+PiB3YWl0aW5nIDEwMCB2YmxhbmtzLgo+Pj4+Pj4KPj4+Pj4+ IFBsZWFzZSwgbGV0IG1lIGtub3cgaWYgdGhpcyBpcyB5b3VyIHVuZGVyc3RhbmRpbmcgYXMgd2Vs bC4gSWYgbm90LCB0aGVuCj4+Pj4+PiB3ZSBuZWVkIHRvIHJlbW9kZWwgdGhpbmdzLiAgCj4+Pj4+ Cj4+Pj4+IFdoaWxlIHRoaXMgbWF5IG1ha2Ugc2Vuc2UgZm9yIGN1cnNvciB1cGRhdGVzLCBJIGRv bid0IHRoaW5rIGl0IGRvZXMgZm9yCj4+Pj4+IGFzeW5jIGZsaXBzLiBJZiB0aGUgZmxpcCBvbmx5 IGFjdHVhbGx5IHRha2VzIGVmZmVjdCBkdXJpbmcgdGhlIG5leHQKPj4+Pj4gdmJsYW5rLCBpdCBk b2Vzbid0IHJlYWxseSBmaXQgdGhlIGRlZmluaXRpb24gYW5kIHVzZXJzcGFjZSBleHBlY3RhdGlv bgo+Pj4+PiBvZiBhbiBhc3luYyBmbGlwLiBJdCdzIGJldHRlciB0byBjbGVhcmx5IGNvbW11bmlj YXRlIHRvIHVzZXJzcGFjZSB0aGF0Cj4+Pj4+IHRoZSBoYXJkd2FyZSBjYW5ub3QgZG8gYXN5bmMg ZmxpcHMsIHRoYW4gdG8gcHJldGVuZCBpdCBjYW4gYW5kIGZha2UKPj4+Pj4gdGhlbS4gVXNlcnNw YWNlIGhhcyB0byBkZWFsIHdpdGggdGhpcyBhbnl3YXksIHNpbmNlIGFzeW5jIGZsaXBzIHdlcmVu J3QKPj4+Pj4gYWx3YXlzIHN1cHBvcnRlZCBpbiBnZW5lcmFsLiAgCj4+Pj4KPj4+PiBXaGF0IGRv IHlvdSB0aGluayBpZiB3ZSBzZXBhcmF0ZSB0d28gY29uY2VwdHMgaGVyZToKPj4+Pgo+Pj4+IC0g YW1lbmQgbW9kZTogd29ya3MgbGlrZSBjdXJzb3IgdXBkYXRlcywgaS5lLCB1cGRhdGUgdGhlIGh3 IHN0YXRlIGF0Cj4+Pj4gc29tZSBwb2ludCB3aXRoIHRoZSBsYXRlc3Qgc3RhdGUgZnJvbSB0aGUg bGFzdCBjYWxsIHRvIGFzeW5jX3VwZGF0ZS4gTm8KPj4+PiBzcGVjaWFsIGhhcmR3YXJlIHN1cHBv cnQgaXMgcmVxdWlyZWQuCj4+Pj4KPj4+PiAtIGFzeW5jIHVwZGF0ZTogdXBkYXRlIGh3IHN0YXRl IGltbWVkaWF0ZWx5LiBUaGlzIGRlcGVuZHMgaWYgdGhlIGh3Cj4+Pj4gc3VwcG9ydHMgaXQgb3Ig bm90Lgo+Pj4+Cj4+Pj4gRXZlcnkgYXN5bmMgdXBkYXRlIGlzIGFuIGFtZW5kLCBidXQgdGhlIG9w cG9zaXRlIGlzIG5vdCBuZWNlc3NhcmlseSB0cnVlLgo+Pj4+Cj4+Pj4gV2hhdCBkbyB5b3UgdGhp bmsgaWYgd2UgcmVuYW1lIHRoZSBjdXJyZW50IGFzeW5jX3VwZGF0ZSB0byBhbWVuZF91cGRhdGUs Cj4+Pj4gYW5kIHdlIGFkZCBhIHBhcmFtZXRlciAiZm9yY2VfYXN5bmMiIHRvIGl0PyAob3IgbWF5 YmUKPj4+PiBmb3JjZV9pbW1lZGlhdGVfdXBkYXRlPykKPj4+PiBUaGVuIGFtZW5kX2NoZWNrIHdp dGggZm9yY2VfYXN5bmM9MSB3b3VsZCBmYWlsIGlmIHRoZSBoYXJkd2FyZSBkb2Vzbid0Cj4+Pj4g c3VwcG9ydCBpdCAod2UgY291bGQgYWxzbyBhZGQgZmxhZ3MgaW4gdGhlIGNhcGFiaWxpdGllcyB0 byBpbmZvcm0KPj4+PiB1c2Vyc3BhY2UgdGhlIGV4cGVjdGVkIGJlaGF2aW91ciBvZiB0aGluZ3Mg YW5kIGlmIHRoZSBodyBzdXBwb3J0cwo+Pj4+IGZvcmNlX3N5bmMpLgo+Pj4+Cj4+Pj4gTGlrZSB0 aGlzLCB3ZSBjYW4gaW1wbGVtZW50IHRoZSBjdXJzb3JzIHVzaW5nIHRoZSBhbWVuZF91cGRhdGUg KHdoaWNoIGlzCj4+Pj4gbm93IGNhbGxlZCBhc3luY191cGRhdGUpLCBhbmQgYXN5bmNfZmxpcHMg d2l0aCBhbWVuZF91cGRhdGUgd2l0aAo+Pj4+IGZvcmNlX2FzeW5jPTEuICAKPj4+Cj4+PiBNaWdo dCBmb3JjZV9hc3luYyBtYWtlIHNlbnNlIGZvciBjdXJzb3IgdXBkYXRlcyBhcyB3ZWxsPyBJIHRo b3VnaHQgc29tZQo+Pj4gaGFyZHdhcmUgc3VwcG9ydGVkIEhXIGN1cnNvciB1cGRhdGVzIG91dHNp ZGUgb2YgdmJsYW5rLCBidXQgSSdtIG5vdCBzdXJlLgoKV2hhdCBJIGhhZCBpbiBtaW5kIHdhcyBh Y3R1YWxseToKYW1lbmRfdXBkYXRlKCkgLT4gY291bGQgZG8gYSByZWFsIGFzeW5jIG9yIG5vdCBk ZXBlbmRpbmcgb24gdGhlIGh3CmZvcmNlX2FzeW5jPTEgLT4gaXQgbWVhbnMgYW1lbmRfdXBkYXRl IHdpbGwgZmFpbCBpZiB0aGUgaHcgZG9lc24ndApzdXBwb3J0IGl0LgoKPj4+Cj4+PiBXaXRob3V0 IGZvcmNlX2FzeW5jLCBhcmUgY3Vyc29yIHVwZGF0ZXMgYWx3YXlzIGFwcGxpZWQgdG8gdGhlIGhh cmR3YXJlCj4+PiBvbiB0aGUgbmV4dCB2YmxhbmssIGV2ZW4gaWYgdGhlIHBlbmRpbmcgY29tbWl0 IGlzIGRlbGF5ZWQgZnVydGhlciAoZS5nLgo+Pj4gYmVjYXVzZSBhIGZlbmNlIGl0IGRlcGVuZHMg b24gZG9lc24ndCBzaWduYWwgYmVmb3JlIHZibGFuayk/IElmIGN1cnNvcgo+Pj4gdXBkYXRlcyBj YW4gYmUgZGVsYXllZCBiZXlvbmQgdGhlIG5leHQgdmJsYW5rLCB0aGF0IGNhbiByZXN1bHQgaW4g YmFkCj4+PiB1c2VyIGV4cGVyaWVuY2UuCj4+Cj4+IFlvdSBtZWFuIHlvdSBoYXZlCj4+Cj4+IDEu IHN5bmMvcmVndWxhciB1cGRhdGUgcGVuZGluZyAod2FpdGluZyBvbiBhIGZlbmNlKQo+PiAyLiBh c3luYyB1cGRhdGUgb24gdG9wIG9mICMxCj4+Cj4+ID8KPiAKPiBZZWFoLgo+IAo+IAoKQWN0dWFs bHkgSSB3YXMgdGhpbmtpbmcgaW4gYW5vdGhlciBzb2x1dGlvbiAod2l0aG91dCB0aGlzIGZvcmNl X2FzeW5jIGZsYWcpLgoKSW5zdGVhZCBvZiBoYXZpbmcgdGhpcyBmb3JjZV9hc3luYywgd2UgY2Fu IGhhdmUgdHdvIGNhcGFiaWxpdGllczoKCkNBUF9BU1lOQzogbWVhbnMgdGhlIGh3IHN1cHBvcnRz IHJlYWwgYXN5bmMKQ0FQX0FNRU5EOiBtZWFucyB0aGF0IHRoZSBkcml2ZXIgc3VwcG9ydHMgYW1l bmQgdGhlIGluLWZsaWdodCB1cGRhdGUgc28KdGhhdCB0aGUgbmV3IG9uZSB3aWxsIHRha2UgaXRz IHBsYWNlIGluIHRoZSBxdWV1ZSAoaS5lLiB0aGUgY3VycmVudApsZWdhY3kgY3Vyc29yIGJlaGF2 aW9yKS4KCklmICghQ0FQX0FNRU5EICYmICFDQVBfQVNZTkMpCgkqIHVzZSBhIHN5bmMgdXBkYXRl IG9yIHVwZGF0ZSB0aGUgRkIgY29udGVudCBpbiBwbGFjZSB3aXRob3V0IGZsaXBwaW5nCmJ1ZmZl cnMuCgkqIGxlZ2FjeSBjdXJzb3IgdXBkYXRlIHdpbGwgZmFsbGJhY2sgdG8gc3luYyB1cGRhdGUu CgkqIGFzeW5jIGZsaXAgaXMgbm90IHN1cHBvcnRlZC4KCklmIChDQVBfQU1FTkQgJiYgIUNBUF9B U1lOQykKCSogbGVnYWN5IGN1cnNvciB1cGRhdGUgd2lsbCBhbWVuZCBpbi1mbGlnaHQgcGVuZGlu ZyB1cGRhdGVzIChsaWtlIGhvdwpyb2NrY2hpcCBkb2VzIG5vdykgb3IgaXQgd2lsbCBmYWxsYmFj ayB0byBhIHN5bmMgdXBkYXRlIGlmIG5vdCBwb3NzaWJsZS4KCSogYXN5bmMgZmxpcCBpcyBub3Qg c3VwcG9ydGVkLgoKSWYgKCFDQVBfQU1FTkQgJiYgQ0FQX0FTWU5DKQoJKiBub3Qgc3VyZSB5ZXQg d2hhdCB0aGlzIHdvdWxkIG1lYW4uCgpJZiAoQ0FQX0FNRU5EICYmIENBUF9BU1lOQykKCSogbGVn YWN5IGN1cnNvciB1cGRhdGUgd2lsbCBwZXJmb3JtIHJlYWwgYXN5bmMgdXBkYXRlLgoJKiBhc3lu YyBmbGlwIGlzIHN1cHBvcnRlZC4KCgpXaGF0IGRvIHlvdSB0aGluaz8KClJlZ2FyZHMKSGVsZW4K Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFy bS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9y ZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1r ZXJuZWwK