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 327E5C43381 for ; Thu, 14 Mar 2019 09:15:58 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id ED2E720643 for ; Thu, 14 Mar 2019 09:15:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726922AbfCNJP4 (ORCPT ); Thu, 14 Mar 2019 05:15:56 -0400 Received: from mail.netline.ch ([148.251.143.178]:46378 "EHLO netline-mail3.netline.ch" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726421AbfCNJP4 (ORCPT ); Thu, 14 Mar 2019 05:15:56 -0400 Received: from localhost (localhost [127.0.0.1]) by netline-mail3.netline.ch (Postfix) with ESMTP id 8DCCD2A6054; Thu, 14 Mar 2019 10:15:52 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at netline-mail3.netline.ch Received: from netline-mail3.netline.ch ([127.0.0.1]) by localhost (netline-mail3.netline.ch [127.0.0.1]) (amavisd-new, port 10024) with LMTP id X5KaHgrS7fSs; Thu, 14 Mar 2019 10:15:52 +0100 (CET) Received: from thor (116.245.63.188.dynamic.wline.res.cust.swisscom.ch [188.63.245.116]) by netline-mail3.netline.ch (Postfix) with ESMTPSA id AC0112A6053; Thu, 14 Mar 2019 10:15:51 +0100 (CET) Received: from [::1] by thor with esmtp (Exim 4.92) (envelope-from ) id 1h4MSr-0007IH-KB; Thu, 14 Mar 2019 10:15:49 +0100 Subject: Re: [PATCH v2 1/5] drm/rockchip: fix fb references in async update To: Helen Koike , Tomasz Figa , Boris Brezillon Cc: =?UTF-8?Q?St=c3=a9phane_Marchesin?= , Sean Paul , David Airlie , Daniel Vetter , Linux Kernel Mailing List , dri-devel , "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> From: =?UTF-8?Q?Michel_D=c3=a4nzer?= Openpgp: preference=signencrypt Autocrypt: addr=michel@daenzer.net; prefer-encrypt=mutual; keydata= mQGiBDsehS8RBACbsIQEX31aYSIuEKxEnEX82ezMR8z3LG8ktv1KjyNErUX9Pt7AUC7W3W0b LUhu8Le8S2va6hi7GfSAifl0ih3k6Bv1Itzgnd+7ZmSrvCN8yGJaHNQfAevAuEboIb+MaVHo 9EMJj4ikOcRZCmQWw7evu/D9uQdtkCnRY9iJiAGxbwCguBHtpoGMxDOINCr5UU6qt+m4O+UD /355ohBBzzyh49lTj0kTFKr0Ozd20G2FbcqHgfFL1dc1MPyigej2gLga2osu2QY0ObvAGkOu WBi3LTY8Zs8uqFGDC4ZAwMPoFy3yzu3ne6T7d/68rJil0QcdQjzzHi6ekqHuhst4a+/+D23h Za8MJBEcdOhRhsaDVGAJSFEQB1qLBACOs0xN+XblejO35gsDSVVk8s+FUUw3TSWJBfZa3Imp V2U2tBO4qck+wqbHNfdnU/crrsHahjzBjvk8Up7VoY8oT+z03sal2vXEonS279xN2B92Tttr AgwosujguFO/7tvzymWC76rDEwue8TsADE11ErjwaBTs8ZXfnN/uAANgPLQjTWljaGVsIERh ZW56ZXIgPG1pY2hlbEBkYWVuemVyLm5ldD6IXgQTEQIAHgUCQFXxJgIbAwYLCQgHAwIDFQID AxYCAQIeAQIXgAAKCRBaga+OatuyAIrPAJ9ykonXI3oQcX83N2qzCEStLNW47gCeLWm/QiPY jqtGUnnSbyuTQfIySkK5AQ0EOx6FRRAEAJZkcvklPwJCgNiw37p0GShKmFGGqf/a3xZZEpjI qNxzshFRFneZze4f5LhzbX1/vIm5+ZXsEWympJfZzyCmYPw86QcFxyZflkAxHx9LeD+89Elx bw6wT0CcLvSv8ROfU1m8YhGbV6g2zWyLD0/naQGVb8e4FhVKGNY2EEbHgFBrAAMGA/0VktFO CxFBdzLQ17RCTwCJ3xpyP4qsLJH0yCoA26rH2zE2RzByhrTFTYZzbFEid3ddGiHOBEL+bO+2 GNtfiYKmbTkj1tMZJ8L6huKONaVrASFzLvZa2dlc2zja9ZSksKmge5BOTKWgbyepEc5qxSju YsYrX5xfLgTZC5abhhztpYhGBBgRAgAGBQI7HoVFAAoJEFqBr45q27IAlscAn2Ufk2d6/3p4 Cuyz/NX7KpL2dQ8WAJ9UD5JEakhfofed8PSqOM7jOO3LCA== Message-ID: Date: Thu, 14 Mar 2019 10:15:49 +0100 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-CA Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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. -- Earthling Michel Dänzer | https://www.amd.com Libre software enthusiast | Mesa and X developer From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Michel_D=c3=a4nzer?= Subject: Re: [PATCH v2 1/5] drm/rockchip: fix fb references in async update Date: Thu, 14 Mar 2019 10:15:49 +0100 Message-ID: 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> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: Content-Language: en-CA List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: iommu-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org Errors-To: iommu-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org To: Helen Koike , Tomasz Figa , Boris Brezillon Cc: =?UTF-8?Q?St=c3=a9phane_Marchesin?= , Sean Paul , David Airlie , Daniel Vetter , Linux Kernel Mailing List , dri-devel , "open list:ARM/Rockchip SoC..." , "list-Y9sIeH5OGRo@public.gmane.org:IOMMU DRIVERS" , kernel-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org, nicholas.kazlauskas-5C7GfCeVMHo@public.gmane.org, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org List-Id: linux-rockchip.vger.kernel.org T24gMjAxOS0wMy0xMyA3OjA4IHAubS4sIEhlbGVuIEtvaWtlIHdyb3RlOgo+IE9uIDMvMTMvMTkg Njo1OCBBTSwgTWljaGVsIETDpG56ZXIgd3JvdGU6Cj4+IE9uIDIwMTktMDMtMTMgNDo0MiBhLm0u LCBUb21hc3ogRmlnYSB3cm90ZToKPj4+IE9uIFdlZCwgTWFyIDEzLCAyMDE5IGF0IDEyOjUyIEFN IEJvcmlzIEJyZXppbGxvbgo+Pj4gPGJvcmlzLmJyZXppbGxvbkBjb2xsYWJvcmEuY29tPiB3cm90 ZToKPj4+PiBPbiBUdWUsIDEyIE1hciAyMDE5IDEyOjM0OjQ1IC0wMzAwCj4+Pj4gSGVsZW4gS29p a2UgPGhlbGVuLmtvaWtlQGNvbGxhYm9yYS5jb20+IHdyb3RlOgo+Pj4+PiBPbiAzLzEyLzE5IDM6 MzQgQU0sIEJvcmlzIEJyZXppbGxvbiB3cm90ZToKPj4+Pj4+IE9uIE1vbiwgMTEgTWFyIDIwMTkg MjM6MjE6NTkgLTAzMDAKPj4+Pj4+IEhlbGVuIEtvaWtlIDxoZWxlbi5rb2lrZUBjb2xsYWJvcmEu Y29tPiB3cm90ZToKPj4+Pj4+Cj4+Pj4+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlw L3JvY2tjaGlwX2RybV92b3AuYwo+Pj4+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hp cC9yb2NrY2hpcF9kcm1fdm9wLmMKPj4+Pj4+PiBAQCAtOTEyLDMwICs5MTIsMzEgQEAgc3RhdGlj IHZvaWQgdm9wX3BsYW5lX2F0b21pY19hc3luY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxh bmUsCj4+Pj4+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBk cm1fcGxhbmVfc3RhdGUgKm5ld19zdGF0ZSkKPj4+Pj4+PiAgewo+Pj4+Pj4+ICAgIHN0cnVjdCB2 b3AgKnZvcCA9IHRvX3ZvcChwbGFuZS0+c3RhdGUtPmNydGMpOwo+Pj4+Pj4+IC0gIHN0cnVjdCBk cm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlOwo+Pj4+Pj4+ICsgIHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKm9sZF9mYiA9IHBsYW5lLT5zdGF0ZS0+ZmI7Cj4+Pj4+Pj4KPj4+Pj4+PiAtICBwbGFu ZV9zdGF0ZSA9IHBsYW5lLT5mdW5jcy0+YXRvbWljX2R1cGxpY2F0ZV9zdGF0ZShwbGFuZSk7Cj4+ Pj4+Pj4gLSAgcGxhbmVfc3RhdGUtPmNydGNfeCA9IG5ld19zdGF0ZS0+Y3J0Y194Owo+Pj4+Pj4+ IC0gIHBsYW5lX3N0YXRlLT5jcnRjX3kgPSBuZXdfc3RhdGUtPmNydGNfeTsKPj4+Pj4+PiAtICBw bGFuZV9zdGF0ZS0+Y3J0Y19oID0gbmV3X3N0YXRlLT5jcnRjX2g7Cj4+Pj4+Pj4gLSAgcGxhbmVf c3RhdGUtPmNydGNfdyA9IG5ld19zdGF0ZS0+Y3J0Y193Owo+Pj4+Pj4+IC0gIHBsYW5lX3N0YXRl LT5zcmNfeCA9IG5ld19zdGF0ZS0+c3JjX3g7Cj4+Pj4+Pj4gLSAgcGxhbmVfc3RhdGUtPnNyY195 ID0gbmV3X3N0YXRlLT5zcmNfeTsKPj4+Pj4+PiAtICBwbGFuZV9zdGF0ZS0+c3JjX2ggPSBuZXdf c3RhdGUtPnNyY19oOwo+Pj4+Pj4+IC0gIHBsYW5lX3N0YXRlLT5zcmNfdyA9IG5ld19zdGF0ZS0+ c3JjX3c7Cj4+Pj4+Pj4gLQo+Pj4+Pj4+IC0gIGlmIChwbGFuZV9zdGF0ZS0+ZmIgIT0gbmV3X3N0 YXRlLT5mYikKPj4+Pj4+PiAtICAgICAgICAgIGRybV9hdG9taWNfc2V0X2ZiX2Zvcl9wbGFuZShw bGFuZV9zdGF0ZSwgbmV3X3N0YXRlLT5mYik7Cj4+Pj4+Pj4gLQo+Pj4+Pj4+IC0gIHN3YXAocGxh bmVfc3RhdGUsIHBsYW5lLT5zdGF0ZSk7Cj4+Pj4+Pj4gLQo+Pj4+Pj4+IC0gIGlmIChwbGFuZS0+ c3RhdGUtPmZiICYmIHBsYW5lLT5zdGF0ZS0+ZmIgIT0gbmV3X3N0YXRlLT5mYikgewo+Pj4+Pj4+ ICsgIC8qCj4+Pj4+Pj4gKyAgICogQSBzY2Fub3V0IGNhbiBzdGlsbCBiZSBvY2N1cnJpbmcsIHNv IHdlIGNhbid0IGRyb3AgdGhlIHJlZmVyZW5jZSB0bwo+Pj4+Pj4+ICsgICAqIHRoZSBvbGQgZnJh bWVidWZmZXIuIFRvIHNvbHZlIHRoaXMgd2UgZ2V0IGEgcmVmZXJlbmNlIHRvIG9sZF9mYiBhbmQK Pj4+Pj4+PiArICAgKiBzZXQgYSB3b3JrZXIgdG8gcmVsZWFzZSBpdCBsYXRlci4KPj4+Pj4+Cj4+ Pj4+PiBIbSwgZG9lc24ndCBsb29rIGxpa2UgYW4gYXN5bmMgdXBkYXRlIHRvIG1lIGlmIHdlIGhh dmUgdG8gd2FpdCBmb3IgdGhlCj4+Pj4+PiBuZXh0IFZCTEFOSyB0byBoYXBwZW4gdG8gZ2V0IHRo ZSBuZXcgY29udGVudCBvbiB0aGUgc2NyZWVuLiBNYXliZSB3ZQo+Pj4+Pj4gc2hvdWxkIHJlamVj dCBhc3luYyB1cGRhdGVzIHdoZW4gb2xkX2ZiICE9IG5ld19mYiBpbiB0aGUgcmsKPj4+Pj4+IC0+ YXN5bmNfY2hlY2soKSBob29rLgo+Pj4+Pgo+Pj4+PiBVbmxlc3MgSSBhbSBtaXN1bmRlcnN0YW5k aW5nIHRoaXMsIHdlIGRvbid0IHdhaXQgaGVyZSwgd2UganVzdCBncmFiIGEKPj4+Pj4gcmVmZXJl bmNlIHRvIHRoZSBmYiBpbiBjYXNlIGl0IGlzIGJlaW5nIHN0aWxsIHVzZWQgYnkgdGhlIGh3LCBz byBpdAo+Pj4+PiBkb2Vzbid0IGdldCByZWxlYXNlZCBwcmVtYXR1cmVseS4KPj4+Pgo+Pj4+IEkg d2FzIGp1c3QgcmVhY3RpbmcgdG8gdGhlIGNvbW1lbnQgdGhhdCBzYXlzIHRoZSBuZXcgRkIgc2hv dWxkIHN0YXkKPj4+PiBhcm91bmQgdW50aWwgdGhlIG5leHQgVkJMQU5LIGV2ZW50IGhhcHBlbnMu IElmIHRoZSBGQiBtdXN0IHN0YXkgYXJvdW5kCj4+Pj4gdGhhdCBwcm9iYWJseSBtZWFucyB0aGUg SFcgaXMgc3RpbGwgdXNpbmcsIHdoaWNoIG1hZGUgbWUgd29uZGVyIGlmIHRoaXMKPj4+PiBIVyBh Y3R1YWxseSBzdXBwb3J0cyBhc3luYyB1cGRhdGUgKHdoZXJlIGFzeW5jIG1lYW5zICJ1cGRhdGUg bm93IGFuZAo+Pj4+IGRvbid0IGNhcmUgYWJvdXQgYWJvdXQgdGVhcmluZyIpLiBPciBtYXliZSBp dCB0YWtlcyBzb21lIHRpbWUgdG8gc3dpdGNoCj4+Pj4gdG8gdGhlIG5ldyBGQiBhbmQgd2FpdGlu ZyBmb3IgdGhlIG5leHQgVkJMQU5LIHRvIHJlbGVhc2UgdGhlIG9sZCBGQiB3YXMKPj4+PiBhbiBl YXN5IHNvbHV0aW9uIHRvIG5vdCB3YWl0IGZvciB0aGUgZmxpcCB0byBhY3R1YWxseSBoYXBwZW4g aW4KPj4+PiAtPmFzeW5jX3VwZGF0ZSgpICh3aGljaCBpcyBraW5kIG9mIGEgY29tYmluYXRpb24g b2YgYXN5bmMrbm9uLWJsb2NraW5nKS4KPj4+Cj4+PiBUaGUgaGFyZHdhcmUgc3dpdGNoZXMgZnJh bWVidWZmZXJzIG9uIHZibGFuaywgc28gd2hhdGV2ZXIgZnJhbWVidWZmZXIKPj4+IGlzIGN1cnJl bnRseSBiZWluZyBzY2FubmVkIG91dCBmcm9tIG5lZWRzIHRvIHN0YXkgdGhlcmUgdW50aWwgdGhl Cj4+PiBoYXJkd2FyZSBzd2l0Y2hlcyB0byB0aGUgbmV3IG9uZSBpbiBzaGFkb3cgcmVnaXN0ZXJz LiBJZiB0aGF0IGRvZXNuJ3QKPj4+IGhhcHBlbiwgeW91IGdldCBJT01NVSBmYXVsdHMgYW5kIHRo ZSBkaXNwbGF5IGNvbnRyb2xsZXIgc3RvcHMgd29ya2luZwo+Pj4gc2luY2Ugd2UgZG9uJ3QgaGF2 ZSBhbnkgZmF1bHQgaGFuZGxpbmcgY3VycmVudGx5LCBqdXN0IHByaW50aW5nIGEKPj4+IG1lc3Nh Z2UuCj4+Cj4+IFNvdW5kcyBsaWtlIHlvdXIgaGFyZHdhcmUgZG9lc24ndCBhY3R1YWxseSBzdXBw b3J0IGFzeW5jIGZsaXBzLiBJdCdzCj4+IHByb2JhYmx5IGJldHRlciBmb3IgdGhlIGRyaXZlciBu b3QgdG8gcHJldGVuZCBvdGhlcndpc2UuCj4gCj4gSSB0aGluayB3ZWUgbmVlZCB0byBjbGFyaWZ5 IHRoZSBtZWFuaW5nIG9mIHRoZSBhc3luY191cGRhdGUgY2FsbGJhY2sKPiAoYW5kIHdlIHNob3Vs ZCBjbGFyaWZ5IGl0IGluIHRoZSBkb2NzKS4KPiAKPiBUaGUgd2F5IEkgdW5kZXJzdGFuZCB3aGF0 IHRoZSBhc3luY191cGRhdGUgY2FsbGJhY2sgc2hvdWxkIGRvIGlzOiBkb24ndAo+IGJsb2NrIChp LmUuIGRvbid0IHdhaXQgZm9yIHRoZSBuZXh0IHZibGFuayksCgpOb3RlIHRoYXQgdGhvc2UgYXJl IHR3byBzZXBhcmF0ZSB0aGluZ3MuICJBc3luYyBmbGlwcyIgYXJlIGFib3V0ICJkb24ndAp3YWl0 IGZvciB2YmxhbmsiLCBub3QgYWJvdXQgImRvbid0IGJsb2NrIi4KCgo+IGFuZCB1cGRhdGUgdGhl IGh3IHN0YXRlIGF0IHNvbWUgcG9pbnQgd2l0aCB0aGUgbGF0ZXN0IHN0YXRlIGZyb20gdGhlCj4g bGFzdCBjYWxsIHRvIGFzeW5jX3VwZGF0ZS4KPiAKPiBXaGljaCBtZWFucyB0aGF0OiBhbnkgZHJp dmVyIGNhbiBpbXBsZW1lbnQgdGhlIGFzeW5jX3VwZGF0ZSBjYWxsYmFjaywKPiBpbmRlcGVuZGVu dGx5IGlmIGl0IHN1cHBvcnRzIGNoYW5naW5nIGl0cyBzdGF0ZSByaWdodCBhd2F5IG9yIG5vdC4K PiBJZiBodyBzdXBwb3J0cywgYXN5bmNfdXBkYXRlIGNhbiBjaGFuZ2UgdGhlIGh3IHN0YXRlIHJp Z2h0IGF3YXksIGlmIG5vdCwKPiB0aGVuIGNoYW5nZXMgd2lsbCBiZSBhcHBsaWVkIGluIHRoZSBu ZXh0IHZibGFuayAoaXQgY2FuIGV2ZW4gYW1lbmQgdGhlCj4gcGVuZGluZyBjb21taXQgaWYgdGhl cmUgaXMgb25lKS4KPiBXaXRoIHRoaXMsIHdlIGNhbiByZW1vdmUgYWxsIHRoZSBsZWdhY3kgY3Vy c29yIGNvZGUgdG8gdXNlIHRoZQo+IGFzeW5jX3VwZGF0ZSBjYWxsYmFjaywgc2luY2UgYXN5bmNf dXBkYXRlIGNhbiBiZSBjYWxsZWQgMTAwIHRpbWVzIGJlZm9yZQo+IHRoZSBuZXh0IHZibGFuaywg YW5kIHRoZSBsYXRlc3Qgc3RhdGUgd2lsbCBiZSBzZXQgdG8gdGhlIGh3IHdpdGhvdXQKPiB3YWl0 aW5nIDEwMCB2YmxhbmtzLgo+IAo+IFBsZWFzZSwgbGV0IG1lIGtub3cgaWYgdGhpcyBpcyB5b3Vy IHVuZGVyc3RhbmRpbmcgYXMgd2VsbC4gSWYgbm90LCB0aGVuCj4gd2UgbmVlZCB0byByZW1vZGVs IHRoaW5ncy4KCldoaWxlIHRoaXMgbWF5IG1ha2Ugc2Vuc2UgZm9yIGN1cnNvciB1cGRhdGVzLCBJ IGRvbid0IHRoaW5rIGl0IGRvZXMgZm9yCmFzeW5jIGZsaXBzLiBJZiB0aGUgZmxpcCBvbmx5IGFj dHVhbGx5IHRha2VzIGVmZmVjdCBkdXJpbmcgdGhlIG5leHQKdmJsYW5rLCBpdCBkb2Vzbid0IHJl YWxseSBmaXQgdGhlIGRlZmluaXRpb24gYW5kIHVzZXJzcGFjZSBleHBlY3RhdGlvbgpvZiBhbiBh c3luYyBmbGlwLiBJdCdzIGJldHRlciB0byBjbGVhcmx5IGNvbW11bmljYXRlIHRvIHVzZXJzcGFj ZSB0aGF0CnRoZSBoYXJkd2FyZSBjYW5ub3QgZG8gYXN5bmMgZmxpcHMsIHRoYW4gdG8gcHJldGVu ZCBpdCBjYW4gYW5kIGZha2UKdGhlbS4gVXNlcnNwYWNlIGhhcyB0byBkZWFsIHdpdGggdGhpcyBh bnl3YXksIHNpbmNlIGFzeW5jIGZsaXBzIHdlcmVuJ3QKYWx3YXlzIHN1cHBvcnRlZCBpbiBnZW5l cmFsLgoKCi0tIApFYXJ0aGxpbmcgTWljaGVsIETDpG56ZXIgICAgICAgICAgICAgICB8ICAgICAg ICAgICAgICBodHRwczovL3d3dy5hbWQuY29tCkxpYnJlIHNvZnR3YXJlIGVudGh1c2lhc3QgICAg ICAgICAgICAgfCAgICAgICAgICAgICBNZXNhIGFuZCBYIGRldmVsb3BlcgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppb21tdSBtYWlsaW5nIGxpc3QKaW9t bXVAbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eGZvdW5kYXRp b24ub3JnL21haWxtYW4vbGlzdGluZm8vaW9tbXU= 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 4D8E5C43381 for ; Thu, 14 Mar 2019 09:16:06 +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 1B9DB20643 for ; Thu, 14 Mar 2019 09:16:06 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="UApiBxNv" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1B9DB20643 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=daenzer.net 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=YlvNNUI00XE9zBhzf/xsX5QUhrp8NLVf80Ckt0ChhWQ=; b=UApiBxNvlhmcHN hXmA7YUd3XU8LjoOIMSjggQk5CCoOAgbEZJ3kxtnl/iXw93QUUMhOI+QC44IyrPNKqMyXPbRDYebS cGz9wk1Mb3hnp/RQbXFkFIjlNJ7My2GzGqlkYfkb1YS7Dl2jwMlNzNPEPYyFPOx/nbc9Pck5Dkd5a vmxbT7CnLjpO1LxrcIV+81KLwpWTa45IKWC69UKHsLR8I/Wjjfx2j9Y+oaXcuk2wRPsQoaT4URmOP TzI9ojmulXjP/6NjKxLw2I0zB4EDyMlGddt6qs2fkdQe2Ie6P38DiVnzZ7Jn8vuUyWnx1J9iOa7Tw 52dj7mQUIEgU2yTpaNsg==; 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 1h4MT0-0003jk-Jo; Thu, 14 Mar 2019 09:15:58 +0000 Received: from mail.netline.ch ([148.251.143.178] helo=netline-mail3.netline.ch) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1h4MSw-0003iu-N6; Thu, 14 Mar 2019 09:15:56 +0000 Received: from localhost (localhost [127.0.0.1]) by netline-mail3.netline.ch (Postfix) with ESMTP id 8DCCD2A6054; Thu, 14 Mar 2019 10:15:52 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at netline-mail3.netline.ch Received: from netline-mail3.netline.ch ([127.0.0.1]) by localhost (netline-mail3.netline.ch [127.0.0.1]) (amavisd-new, port 10024) with LMTP id X5KaHgrS7fSs; Thu, 14 Mar 2019 10:15:52 +0100 (CET) Received: from thor (116.245.63.188.dynamic.wline.res.cust.swisscom.ch [188.63.245.116]) by netline-mail3.netline.ch (Postfix) with ESMTPSA id AC0112A6053; Thu, 14 Mar 2019 10:15:51 +0100 (CET) Received: from [::1] by thor with esmtp (Exim 4.92) (envelope-from ) id 1h4MSr-0007IH-KB; Thu, 14 Mar 2019 10:15:49 +0100 Subject: Re: [PATCH v2 1/5] drm/rockchip: fix fb references in async update To: Helen Koike , Tomasz Figa , 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> From: =?UTF-8?Q?Michel_D=c3=a4nzer?= Openpgp: preference=signencrypt Autocrypt: addr=michel@daenzer.net; prefer-encrypt=mutual; keydata= mQGiBDsehS8RBACbsIQEX31aYSIuEKxEnEX82ezMR8z3LG8ktv1KjyNErUX9Pt7AUC7W3W0b LUhu8Le8S2va6hi7GfSAifl0ih3k6Bv1Itzgnd+7ZmSrvCN8yGJaHNQfAevAuEboIb+MaVHo 9EMJj4ikOcRZCmQWw7evu/D9uQdtkCnRY9iJiAGxbwCguBHtpoGMxDOINCr5UU6qt+m4O+UD /355ohBBzzyh49lTj0kTFKr0Ozd20G2FbcqHgfFL1dc1MPyigej2gLga2osu2QY0ObvAGkOu WBi3LTY8Zs8uqFGDC4ZAwMPoFy3yzu3ne6T7d/68rJil0QcdQjzzHi6ekqHuhst4a+/+D23h Za8MJBEcdOhRhsaDVGAJSFEQB1qLBACOs0xN+XblejO35gsDSVVk8s+FUUw3TSWJBfZa3Imp V2U2tBO4qck+wqbHNfdnU/crrsHahjzBjvk8Up7VoY8oT+z03sal2vXEonS279xN2B92Tttr AgwosujguFO/7tvzymWC76rDEwue8TsADE11ErjwaBTs8ZXfnN/uAANgPLQjTWljaGVsIERh ZW56ZXIgPG1pY2hlbEBkYWVuemVyLm5ldD6IXgQTEQIAHgUCQFXxJgIbAwYLCQgHAwIDFQID AxYCAQIeAQIXgAAKCRBaga+OatuyAIrPAJ9ykonXI3oQcX83N2qzCEStLNW47gCeLWm/QiPY jqtGUnnSbyuTQfIySkK5AQ0EOx6FRRAEAJZkcvklPwJCgNiw37p0GShKmFGGqf/a3xZZEpjI qNxzshFRFneZze4f5LhzbX1/vIm5+ZXsEWympJfZzyCmYPw86QcFxyZflkAxHx9LeD+89Elx bw6wT0CcLvSv8ROfU1m8YhGbV6g2zWyLD0/naQGVb8e4FhVKGNY2EEbHgFBrAAMGA/0VktFO CxFBdzLQ17RCTwCJ3xpyP4qsLJH0yCoA26rH2zE2RzByhrTFTYZzbFEid3ddGiHOBEL+bO+2 GNtfiYKmbTkj1tMZJ8L6huKONaVrASFzLvZa2dlc2zja9ZSksKmge5BOTKWgbyepEc5qxSju YsYrX5xfLgTZC5abhhztpYhGBBgRAgAGBQI7HoVFAAoJEFqBr45q27IAlscAn2Ufk2d6/3p4 Cuyz/NX7KpL2dQ8WAJ9UD5JEakhfofed8PSqOM7jOO3LCA== Message-ID: Date: Thu, 14 Mar 2019 10:15:49 +0100 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-CA X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190314_021555_053957_2BE49A74 X-CRM114-Status: GOOD ( 24.12 ) 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 , "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 T24gMjAxOS0wMy0xMyA3OjA4IHAubS4sIEhlbGVuIEtvaWtlIHdyb3RlOgo+IE9uIDMvMTMvMTkg Njo1OCBBTSwgTWljaGVsIETDpG56ZXIgd3JvdGU6Cj4+IE9uIDIwMTktMDMtMTMgNDo0MiBhLm0u LCBUb21hc3ogRmlnYSB3cm90ZToKPj4+IE9uIFdlZCwgTWFyIDEzLCAyMDE5IGF0IDEyOjUyIEFN IEJvcmlzIEJyZXppbGxvbgo+Pj4gPGJvcmlzLmJyZXppbGxvbkBjb2xsYWJvcmEuY29tPiB3cm90 ZToKPj4+PiBPbiBUdWUsIDEyIE1hciAyMDE5IDEyOjM0OjQ1IC0wMzAwCj4+Pj4gSGVsZW4gS29p a2UgPGhlbGVuLmtvaWtlQGNvbGxhYm9yYS5jb20+IHdyb3RlOgo+Pj4+PiBPbiAzLzEyLzE5IDM6 MzQgQU0sIEJvcmlzIEJyZXppbGxvbiB3cm90ZToKPj4+Pj4+IE9uIE1vbiwgMTEgTWFyIDIwMTkg MjM6MjE6NTkgLTAzMDAKPj4+Pj4+IEhlbGVuIEtvaWtlIDxoZWxlbi5rb2lrZUBjb2xsYWJvcmEu Y29tPiB3cm90ZToKPj4+Pj4+Cj4+Pj4+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlw L3JvY2tjaGlwX2RybV92b3AuYwo+Pj4+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hp cC9yb2NrY2hpcF9kcm1fdm9wLmMKPj4+Pj4+PiBAQCAtOTEyLDMwICs5MTIsMzEgQEAgc3RhdGlj IHZvaWQgdm9wX3BsYW5lX2F0b21pY19hc3luY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxh bmUsCj4+Pj4+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBk cm1fcGxhbmVfc3RhdGUgKm5ld19zdGF0ZSkKPj4+Pj4+PiAgewo+Pj4+Pj4+ICAgIHN0cnVjdCB2 b3AgKnZvcCA9IHRvX3ZvcChwbGFuZS0+c3RhdGUtPmNydGMpOwo+Pj4+Pj4+IC0gIHN0cnVjdCBk cm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlOwo+Pj4+Pj4+ICsgIHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKm9sZF9mYiA9IHBsYW5lLT5zdGF0ZS0+ZmI7Cj4+Pj4+Pj4KPj4+Pj4+PiAtICBwbGFu ZV9zdGF0ZSA9IHBsYW5lLT5mdW5jcy0+YXRvbWljX2R1cGxpY2F0ZV9zdGF0ZShwbGFuZSk7Cj4+ Pj4+Pj4gLSAgcGxhbmVfc3RhdGUtPmNydGNfeCA9IG5ld19zdGF0ZS0+Y3J0Y194Owo+Pj4+Pj4+ IC0gIHBsYW5lX3N0YXRlLT5jcnRjX3kgPSBuZXdfc3RhdGUtPmNydGNfeTsKPj4+Pj4+PiAtICBw bGFuZV9zdGF0ZS0+Y3J0Y19oID0gbmV3X3N0YXRlLT5jcnRjX2g7Cj4+Pj4+Pj4gLSAgcGxhbmVf c3RhdGUtPmNydGNfdyA9IG5ld19zdGF0ZS0+Y3J0Y193Owo+Pj4+Pj4+IC0gIHBsYW5lX3N0YXRl LT5zcmNfeCA9IG5ld19zdGF0ZS0+c3JjX3g7Cj4+Pj4+Pj4gLSAgcGxhbmVfc3RhdGUtPnNyY195 ID0gbmV3X3N0YXRlLT5zcmNfeTsKPj4+Pj4+PiAtICBwbGFuZV9zdGF0ZS0+c3JjX2ggPSBuZXdf c3RhdGUtPnNyY19oOwo+Pj4+Pj4+IC0gIHBsYW5lX3N0YXRlLT5zcmNfdyA9IG5ld19zdGF0ZS0+ c3JjX3c7Cj4+Pj4+Pj4gLQo+Pj4+Pj4+IC0gIGlmIChwbGFuZV9zdGF0ZS0+ZmIgIT0gbmV3X3N0 YXRlLT5mYikKPj4+Pj4+PiAtICAgICAgICAgIGRybV9hdG9taWNfc2V0X2ZiX2Zvcl9wbGFuZShw bGFuZV9zdGF0ZSwgbmV3X3N0YXRlLT5mYik7Cj4+Pj4+Pj4gLQo+Pj4+Pj4+IC0gIHN3YXAocGxh bmVfc3RhdGUsIHBsYW5lLT5zdGF0ZSk7Cj4+Pj4+Pj4gLQo+Pj4+Pj4+IC0gIGlmIChwbGFuZS0+ c3RhdGUtPmZiICYmIHBsYW5lLT5zdGF0ZS0+ZmIgIT0gbmV3X3N0YXRlLT5mYikgewo+Pj4+Pj4+ ICsgIC8qCj4+Pj4+Pj4gKyAgICogQSBzY2Fub3V0IGNhbiBzdGlsbCBiZSBvY2N1cnJpbmcsIHNv IHdlIGNhbid0IGRyb3AgdGhlIHJlZmVyZW5jZSB0bwo+Pj4+Pj4+ICsgICAqIHRoZSBvbGQgZnJh bWVidWZmZXIuIFRvIHNvbHZlIHRoaXMgd2UgZ2V0IGEgcmVmZXJlbmNlIHRvIG9sZF9mYiBhbmQK Pj4+Pj4+PiArICAgKiBzZXQgYSB3b3JrZXIgdG8gcmVsZWFzZSBpdCBsYXRlci4KPj4+Pj4+Cj4+ Pj4+PiBIbSwgZG9lc24ndCBsb29rIGxpa2UgYW4gYXN5bmMgdXBkYXRlIHRvIG1lIGlmIHdlIGhh dmUgdG8gd2FpdCBmb3IgdGhlCj4+Pj4+PiBuZXh0IFZCTEFOSyB0byBoYXBwZW4gdG8gZ2V0IHRo ZSBuZXcgY29udGVudCBvbiB0aGUgc2NyZWVuLiBNYXliZSB3ZQo+Pj4+Pj4gc2hvdWxkIHJlamVj dCBhc3luYyB1cGRhdGVzIHdoZW4gb2xkX2ZiICE9IG5ld19mYiBpbiB0aGUgcmsKPj4+Pj4+IC0+ YXN5bmNfY2hlY2soKSBob29rLgo+Pj4+Pgo+Pj4+PiBVbmxlc3MgSSBhbSBtaXN1bmRlcnN0YW5k aW5nIHRoaXMsIHdlIGRvbid0IHdhaXQgaGVyZSwgd2UganVzdCBncmFiIGEKPj4+Pj4gcmVmZXJl bmNlIHRvIHRoZSBmYiBpbiBjYXNlIGl0IGlzIGJlaW5nIHN0aWxsIHVzZWQgYnkgdGhlIGh3LCBz byBpdAo+Pj4+PiBkb2Vzbid0IGdldCByZWxlYXNlZCBwcmVtYXR1cmVseS4KPj4+Pgo+Pj4+IEkg d2FzIGp1c3QgcmVhY3RpbmcgdG8gdGhlIGNvbW1lbnQgdGhhdCBzYXlzIHRoZSBuZXcgRkIgc2hv dWxkIHN0YXkKPj4+PiBhcm91bmQgdW50aWwgdGhlIG5leHQgVkJMQU5LIGV2ZW50IGhhcHBlbnMu IElmIHRoZSBGQiBtdXN0IHN0YXkgYXJvdW5kCj4+Pj4gdGhhdCBwcm9iYWJseSBtZWFucyB0aGUg SFcgaXMgc3RpbGwgdXNpbmcsIHdoaWNoIG1hZGUgbWUgd29uZGVyIGlmIHRoaXMKPj4+PiBIVyBh Y3R1YWxseSBzdXBwb3J0cyBhc3luYyB1cGRhdGUgKHdoZXJlIGFzeW5jIG1lYW5zICJ1cGRhdGUg bm93IGFuZAo+Pj4+IGRvbid0IGNhcmUgYWJvdXQgYWJvdXQgdGVhcmluZyIpLiBPciBtYXliZSBp dCB0YWtlcyBzb21lIHRpbWUgdG8gc3dpdGNoCj4+Pj4gdG8gdGhlIG5ldyBGQiBhbmQgd2FpdGlu ZyBmb3IgdGhlIG5leHQgVkJMQU5LIHRvIHJlbGVhc2UgdGhlIG9sZCBGQiB3YXMKPj4+PiBhbiBl YXN5IHNvbHV0aW9uIHRvIG5vdCB3YWl0IGZvciB0aGUgZmxpcCB0byBhY3R1YWxseSBoYXBwZW4g aW4KPj4+PiAtPmFzeW5jX3VwZGF0ZSgpICh3aGljaCBpcyBraW5kIG9mIGEgY29tYmluYXRpb24g b2YgYXN5bmMrbm9uLWJsb2NraW5nKS4KPj4+Cj4+PiBUaGUgaGFyZHdhcmUgc3dpdGNoZXMgZnJh bWVidWZmZXJzIG9uIHZibGFuaywgc28gd2hhdGV2ZXIgZnJhbWVidWZmZXIKPj4+IGlzIGN1cnJl bnRseSBiZWluZyBzY2FubmVkIG91dCBmcm9tIG5lZWRzIHRvIHN0YXkgdGhlcmUgdW50aWwgdGhl Cj4+PiBoYXJkd2FyZSBzd2l0Y2hlcyB0byB0aGUgbmV3IG9uZSBpbiBzaGFkb3cgcmVnaXN0ZXJz LiBJZiB0aGF0IGRvZXNuJ3QKPj4+IGhhcHBlbiwgeW91IGdldCBJT01NVSBmYXVsdHMgYW5kIHRo ZSBkaXNwbGF5IGNvbnRyb2xsZXIgc3RvcHMgd29ya2luZwo+Pj4gc2luY2Ugd2UgZG9uJ3QgaGF2 ZSBhbnkgZmF1bHQgaGFuZGxpbmcgY3VycmVudGx5LCBqdXN0IHByaW50aW5nIGEKPj4+IG1lc3Nh Z2UuCj4+Cj4+IFNvdW5kcyBsaWtlIHlvdXIgaGFyZHdhcmUgZG9lc24ndCBhY3R1YWxseSBzdXBw b3J0IGFzeW5jIGZsaXBzLiBJdCdzCj4+IHByb2JhYmx5IGJldHRlciBmb3IgdGhlIGRyaXZlciBu b3QgdG8gcHJldGVuZCBvdGhlcndpc2UuCj4gCj4gSSB0aGluayB3ZWUgbmVlZCB0byBjbGFyaWZ5 IHRoZSBtZWFuaW5nIG9mIHRoZSBhc3luY191cGRhdGUgY2FsbGJhY2sKPiAoYW5kIHdlIHNob3Vs ZCBjbGFyaWZ5IGl0IGluIHRoZSBkb2NzKS4KPiAKPiBUaGUgd2F5IEkgdW5kZXJzdGFuZCB3aGF0 IHRoZSBhc3luY191cGRhdGUgY2FsbGJhY2sgc2hvdWxkIGRvIGlzOiBkb24ndAo+IGJsb2NrIChp LmUuIGRvbid0IHdhaXQgZm9yIHRoZSBuZXh0IHZibGFuayksCgpOb3RlIHRoYXQgdGhvc2UgYXJl IHR3byBzZXBhcmF0ZSB0aGluZ3MuICJBc3luYyBmbGlwcyIgYXJlIGFib3V0ICJkb24ndAp3YWl0 IGZvciB2YmxhbmsiLCBub3QgYWJvdXQgImRvbid0IGJsb2NrIi4KCgo+IGFuZCB1cGRhdGUgdGhl IGh3IHN0YXRlIGF0IHNvbWUgcG9pbnQgd2l0aCB0aGUgbGF0ZXN0IHN0YXRlIGZyb20gdGhlCj4g bGFzdCBjYWxsIHRvIGFzeW5jX3VwZGF0ZS4KPiAKPiBXaGljaCBtZWFucyB0aGF0OiBhbnkgZHJp dmVyIGNhbiBpbXBsZW1lbnQgdGhlIGFzeW5jX3VwZGF0ZSBjYWxsYmFjaywKPiBpbmRlcGVuZGVu dGx5IGlmIGl0IHN1cHBvcnRzIGNoYW5naW5nIGl0cyBzdGF0ZSByaWdodCBhd2F5IG9yIG5vdC4K PiBJZiBodyBzdXBwb3J0cywgYXN5bmNfdXBkYXRlIGNhbiBjaGFuZ2UgdGhlIGh3IHN0YXRlIHJp Z2h0IGF3YXksIGlmIG5vdCwKPiB0aGVuIGNoYW5nZXMgd2lsbCBiZSBhcHBsaWVkIGluIHRoZSBu ZXh0IHZibGFuayAoaXQgY2FuIGV2ZW4gYW1lbmQgdGhlCj4gcGVuZGluZyBjb21taXQgaWYgdGhl cmUgaXMgb25lKS4KPiBXaXRoIHRoaXMsIHdlIGNhbiByZW1vdmUgYWxsIHRoZSBsZWdhY3kgY3Vy c29yIGNvZGUgdG8gdXNlIHRoZQo+IGFzeW5jX3VwZGF0ZSBjYWxsYmFjaywgc2luY2UgYXN5bmNf dXBkYXRlIGNhbiBiZSBjYWxsZWQgMTAwIHRpbWVzIGJlZm9yZQo+IHRoZSBuZXh0IHZibGFuaywg YW5kIHRoZSBsYXRlc3Qgc3RhdGUgd2lsbCBiZSBzZXQgdG8gdGhlIGh3IHdpdGhvdXQKPiB3YWl0 aW5nIDEwMCB2YmxhbmtzLgo+IAo+IFBsZWFzZSwgbGV0IG1lIGtub3cgaWYgdGhpcyBpcyB5b3Vy IHVuZGVyc3RhbmRpbmcgYXMgd2VsbC4gSWYgbm90LCB0aGVuCj4gd2UgbmVlZCB0byByZW1vZGVs IHRoaW5ncy4KCldoaWxlIHRoaXMgbWF5IG1ha2Ugc2Vuc2UgZm9yIGN1cnNvciB1cGRhdGVzLCBJ IGRvbid0IHRoaW5rIGl0IGRvZXMgZm9yCmFzeW5jIGZsaXBzLiBJZiB0aGUgZmxpcCBvbmx5IGFj dHVhbGx5IHRha2VzIGVmZmVjdCBkdXJpbmcgdGhlIG5leHQKdmJsYW5rLCBpdCBkb2Vzbid0IHJl YWxseSBmaXQgdGhlIGRlZmluaXRpb24gYW5kIHVzZXJzcGFjZSBleHBlY3RhdGlvbgpvZiBhbiBh c3luYyBmbGlwLiBJdCdzIGJldHRlciB0byBjbGVhcmx5IGNvbW11bmljYXRlIHRvIHVzZXJzcGFj ZSB0aGF0CnRoZSBoYXJkd2FyZSBjYW5ub3QgZG8gYXN5bmMgZmxpcHMsIHRoYW4gdG8gcHJldGVu ZCBpdCBjYW4gYW5kIGZha2UKdGhlbS4gVXNlcnNwYWNlIGhhcyB0byBkZWFsIHdpdGggdGhpcyBh bnl3YXksIHNpbmNlIGFzeW5jIGZsaXBzIHdlcmVuJ3QKYWx3YXlzIHN1cHBvcnRlZCBpbiBnZW5l cmFsLgoKCi0tIApFYXJ0aGxpbmcgTWljaGVsIETDpG56ZXIgICAgICAgICAgICAgICB8ICAgICAg ICAgICAgICBodHRwczovL3d3dy5hbWQuY29tCkxpYnJlIHNvZnR3YXJlIGVudGh1c2lhc3QgICAg ICAgICAgICAgfCAgICAgICAgICAgICBNZXNhIGFuZCBYIGRldmVsb3BlcgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWls aW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0 cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=