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=-8.1 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,HK_RANDOM_FROM,HK_RANDOM_REPLYTO,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=unavailable 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 CBF3CC433E1 for ; Mon, 27 Jul 2020 21:11:44 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6182820792 for ; Mon, 27 Jul 2020 21:11:44 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=protonmail.com header.i=@protonmail.com header.b="TCnJrzRA" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726918AbgG0VLn (ORCPT ); Mon, 27 Jul 2020 17:11:43 -0400 Received: from mail-40141.protonmail.ch ([185.70.40.141]:49103 "EHLO mail-40141.protonmail.ch" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726139AbgG0VLm (ORCPT ); Mon, 27 Jul 2020 17:11:42 -0400 Date: Mon, 27 Jul 2020 21:11:34 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail; t=1595884297; bh=J5UnwDGjGDm1GIlnrWPWuIc1UUtS+SRgiZtCCMV1dgU=; h=Date:To:From:Cc:Reply-To:Subject:In-Reply-To:References:From; b=TCnJrzRADNWeQKeNkq7j/brbkgXB3qrKl+Rp2Wc5h/nV1lC3QuG9kocLN7saKdlyG ZIuXvVqUS4x9x9Os8WxeECHqmYJ899OgEM5urtxygOH51zYh0hXOsHol8eViV2UTtN eFkrUeuCPy3dLPJNUkQ0oFVobzsxJiWJ71S2vK4k= To: Daniel Vetter From: Mazin Rezk Cc: =?utf-8?Q?Christian_K=C3=B6nig?= , "Kazlauskas, Nicholas" , Mazin Rezk , "linux-kernel@vger.kernel.org" , "amd-gfx@lists.freedesktop.org" , "dri-devel@lists.freedesktop.org" , Paul Menzel , "anthony.ruhier@gmail.com" , Duncan <1i5t5.duncan@cox.net>, Kees Cook , "sunpeng.li@amd.com" , "regressions@leemhuis.info" , Alexander Deucher , Andrew Morton , "mphantomx@yahoo.com.br" Reply-To: Mazin Rezk Subject: Re: [PATCH] drm/amd/display: Clear dm_state for fast updates Message-ID: In-Reply-To: References: <3b7e3e50-2ff7-eff3-2ffc-abaa4b36ce7f@amd.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Monday, July 27, 2020 4:29 PM, Daniel Vetter wrote: > On Mon, Jul 27, 2020 at 9:28 PM Christian K=C3=B6nig > wrote: > > > > Am 27.07.20 um 16:05 schrieb Kazlauskas, Nicholas: > > > On 2020-07-27 9:39 a.m., Christian K=C3=B6nig wrote: > > >> Am 27.07.20 um 07:40 schrieb Mazin Rezk: > > >>> This patch fixes a race condition that causes a use-after-free duri= ng > > >>> amdgpu_dm_atomic_commit_tail. This can occur when 2 non-blocking > > >>> commits > > >>> are requested and the second one finishes before the first. > > >>> Essentially, > > >>> this bug occurs when the following sequence of events happens: > > >>> > > >>> 1. Non-blocking commit #1 is requested w/ a new dm_state #1 and is > > >>> deferred to the workqueue. > > >>> > > >>> 2. Non-blocking commit #2 is requested w/ a new dm_state #2 and is > > >>> deferred to the workqueue. > > >>> > > >>> 3. Commit #2 starts before commit #1, dm_state #1 is used in the > > >>> commit_tail and commit #2 completes, freeing dm_state #1. > > >>> > > >>> 4. Commit #1 starts after commit #2 completes, uses the freed dm_st= ate > > >>> 1 and dereferences a freelist pointer while setting the context. > > >> > > >> Well I only have a one mile high view on this, but why don't you let > > >> the work items execute in order? > > >> > > >> That would be better anyway cause this way we don't trigger a cache > > >> line ping pong between CPUs. > > >> > > >> Christian. > > > > > > We use the DRM helpers for managing drm_atomic_commit_state and those > > > helpers internally push non-blocking commit work into the system > > > unbound work queue. > > > > Mhm, well if you send those helper atomic commits in the order A,B and > > they execute it in the order B,A I would call that a bug :) > > The way it works is it pushes all commits into unbound work queue, but > then forces serialization as needed. We do _not_ want e.g. updates on > different CRTC to be serialized, that would result in lots of judder. > And hw is funny enough that there's all kinds of dependencies. > > The way you force synchronization is by adding other CRTC state > objects. So if DC is busted and can only handle a single update per > work item, then I guess you always need all CRTC states and everything > will be run in order. But that also totally kills modern multi-screen > compositors. Xorg isn't modern, just in case that's not clear :-) > > Lucking at the code it seems like you indeed have only a single dm > state, so yeah global sync is what you'll need as immediate fix, and > then maybe fix up DM to not be quite so silly ... or at least only do > the dm state stuff when really needed. > > We could also sprinkle the drm_crtc_commit structure around a bit > (it's the glue that provides the synchronization across commits), but > since your dm state is global just grabbing all crtc states > unconditionally as part of that is probably best. > > > > While we could duplicate a copy of that code with nothing but the > > > workqueue changed that isn't something I'd really like to maintain > > > going forward. > > > > I'm not talking about duplicating the code, I'm talking about fixing th= e > > helpers. I don't know that code well, but from the outside it sounds > > like a bug there. > > > > And executing work items in the order they are submitted is trivial. > > > > Had anybody pinged Daniel or other people familiar with the helper code > > about it? > > Yeah something is wrong here, and the fix looks horrible :-) > > Aside, I've also seen some recent discussion flare up about > drm_atomic_state_get/put used to paper over some other use-after-free, > but this time related to interrupt handlers. Maybe a few rules about > that: > - dont > - especially not when it's interrupt handlers, because you can't call > drm_atomic_state_put from interrupt handlers. > > Instead have an spin_lock_irq to protect the shared date with your > interrupt handler, and _copy_ the date over. This is e.g. what > drm_crtc_arm_vblank_event does. Nicholas wrote a patch that attempted to resolve the issue by adding every CRTC into the commit to use use the stall checks. [1] While this forces synchronisation on commits, it's kind of a hacky method that may take a toll on performance. Is it possible to have a DRM helper that forces synchronisation on some commits without having to add every CRTC into the commit? Also, is synchronisation really necessary for fast updates in amdgpu? I'll admit, the idea of eliminating the use-after-free bug by eliminating the use entirely doesn't seem ideal; but is forcing synchronisation on these updates that much better? [1] https://bugzilla.kernel.org/show_bug.cgi?id=3D207383#c96 Thanks, Mazin Rezk > > Cheers, Daniel > > > > > Regards, > > Christian. > > > > > > > > Regards, > > > Nicholas Kazlauskas > > > > > >> > > >>> > > >>> Since this bug has only been spotted with fast commits, this patch > > >>> fixes > > >>> the bug by clearing the dm_state instead of using the old dc_state = for > > >>> fast updates. In addition, since dm_state is only used for its dc_s= tate > > >>> and amdgpu_dm_atomic_commit_tail will retain the dc_state if none i= s > > >>> found, > > >>> removing the dm_state should not have any consequences in fast upda= tes. > > >>> > > >>> This use-after-free bug has existed for a while now, but only cause= d a > > >>> noticeable issue starting from 5.7-rc1 due to 3202fa62f ("slub: > > >>> relocate > > >>> freelist pointer to middle of object") moving the freelist pointer = from > > >>> dm_state->base (which was unused) to dm_state->context (which is > > >>> dereferenced). > > >>> > > >>> Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=3D207383 > > >>> Fixes: bd200d190f45 ("drm/amd/display: Don't replace the dc_state > > >>> for fast updates") > > >>> Reported-by: Duncan <1i5t5.duncan@cox.net> > > >>> Signed-off-by: Mazin Rezk > > >>> --- > > >>> .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 36 > > >>> ++++++++++++++----- > > >>> 1 file changed, 27 insertions(+), 9 deletions(-) > > >>> > > >>> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > > >>> b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > > >>> index 86ffa0c2880f..710edc70e37e 100644 > > >>> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > > >>> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > > >>> @@ -8717,20 +8717,38 @@ static int amdgpu_dm_atomic_check(struct > > >>> drm_device *dev, > > >>> * the same resource. If we have a new DC context as part= of > > >>> * the DM atomic state from validation we need to free it= and > > >>> * retain the existing one instead. > > >>> + * > > >>> + * Furthermore, since the DM atomic state only contains th= e DC > > >>> + * context and can safely be annulled, we can free the sta= te > > >>> + * and clear the associated private object now to free > > >>> + * some memory and avoid a possible use-after-free later. > > >>> */ > > >>> - struct dm_atomic_state *new_dm_state, *old_dm_state; > > >>> > > >>> - new_dm_state =3D dm_atomic_get_new_state(state); > > >>> - old_dm_state =3D dm_atomic_get_old_state(state); > > >>> + for (i =3D 0; i < state->num_private_objs; i++) { > > >>> + struct drm_private_obj *obj =3D state->private_objs[i]= .ptr; > > >>> > > >>> - if (new_dm_state && old_dm_state) { > > >>> - if (new_dm_state->context) > > >>> - dc_release_state(new_dm_state->context); > > >>> + if (obj->funcs =3D=3D adev->dm.atomic_obj.funcs) { > > >>> + int j =3D state->num_private_objs-1; > > >>> > > >>> - new_dm_state->context =3D old_dm_state->context; > > >>> + dm_atomic_destroy_state(obj, > > >>> + state->private_objs[i].state); > > >>> + > > >>> + /* If i is not at the end of the array then the > > >>> + * last element needs to be moved to where i was > > >>> + * before the array can safely be truncated. > > >>> + */ > > >>> + if (i !=3D j) > > >>> + state->private_objs[i] =3D > > >>> + state->private_objs[j]; > > >>> > > >>> - if (old_dm_state->context) > > >>> - dc_retain_state(old_dm_state->context); > > >>> + state->private_objs[j].ptr =3D NULL; > > >>> + state->private_objs[j].state =3D NULL; > > >>> + state->private_objs[j].old_state =3D NULL; > > >>> + state->private_objs[j].new_state =3D NULL; > > >>> + > > >>> + state->num_private_objs =3D j; > > >>> + break; > > >>> + } > > >>> } > > >>> } > > >>> > > >>> -- > > >>> 2.27.0 > > >>> > > >> > > > > > > > _______________________________________________ > > dri-devel mailing list > > dri-devel@lists.freedesktop.org > > https://lists.freedesktop.org/mailman/listinfo/dri-devel > > > > -- > Daniel Vetter > Software Engineer, Intel Corporation > http://blog.ffwll.ch 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=-7.8 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,HK_RANDOM_FROM,HK_RANDOM_REPLYTO,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=no 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 34B51C43458 for ; Mon, 27 Jul 2020 23:33:28 +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 A8F3A20809 for ; Mon, 27 Jul 2020 23:33:27 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=protonmail.com header.i=@protonmail.com header.b="TCnJrzRA" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A8F3A20809 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=protonmail.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 87E156E143; Mon, 27 Jul 2020 23:32:48 +0000 (UTC) Received: from mail-40130.protonmail.ch (mail-40130.protonmail.ch [185.70.40.130]) by gabe.freedesktop.org (Postfix) with ESMTPS id E9DB289ECB for ; Mon, 27 Jul 2020 21:11:39 +0000 (UTC) Date: Mon, 27 Jul 2020 21:11:34 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail; t=1595884297; bh=J5UnwDGjGDm1GIlnrWPWuIc1UUtS+SRgiZtCCMV1dgU=; h=Date:To:From:Cc:Reply-To:Subject:In-Reply-To:References:From; b=TCnJrzRADNWeQKeNkq7j/brbkgXB3qrKl+Rp2Wc5h/nV1lC3QuG9kocLN7saKdlyG ZIuXvVqUS4x9x9Os8WxeECHqmYJ899OgEM5urtxygOH51zYh0hXOsHol8eViV2UTtN eFkrUeuCPy3dLPJNUkQ0oFVobzsxJiWJ71S2vK4k= To: Daniel Vetter From: Mazin Rezk Subject: Re: [PATCH] drm/amd/display: Clear dm_state for fast updates Message-ID: In-Reply-To: References: <3b7e3e50-2ff7-eff3-2ffc-abaa4b36ce7f@amd.com> MIME-Version: 1.0 X-Mailman-Approved-At: Mon, 27 Jul 2020 23:32:42 +0000 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: , Reply-To: Mazin Rezk Cc: Paul Menzel , "mphantomx@yahoo.com.br" , Duncan <1i5t5.duncan@cox.net>, Kees Cook , "sunpeng.li@amd.com" , Mazin Rezk , "linux-kernel@vger.kernel.org" , "dri-devel@lists.freedesktop.org" , "Kazlauskas, Nicholas" , "regressions@leemhuis.info" , "amd-gfx@lists.freedesktop.org" , Alexander Deucher , Andrew Morton , "anthony.ruhier@gmail.com" , =?utf-8?Q?Christian_K=C3=B6nig?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" T24gTW9uZGF5LCBKdWx5IDI3LCAyMDIwIDQ6MjkgUE0sIERhbmllbCBWZXR0ZXIgPGRhbmllbEBm ZndsbC5jaD4gd3JvdGU6Cgo+IE9uIE1vbiwgSnVsIDI3LCAyMDIwIGF0IDk6MjggUE0gQ2hyaXN0 aWFuIEvDtm5pZwo+IDxjaHJpc3RpYW4ua29lbmlnQGFtZC5jb20+IHdyb3RlOgo+ID4KPiA+IEFt IDI3LjA3LjIwIHVtIDE2OjA1IHNjaHJpZWIgS2F6bGF1c2thcywgTmljaG9sYXM6Cj4gPiA+IE9u IDIwMjAtMDctMjcgOTozOSBhLm0uLCBDaHJpc3RpYW4gS8O2bmlnIHdyb3RlOgo+ID4gPj4gQW0g MjcuMDcuMjAgdW0gMDc6NDAgc2NocmllYiBNYXppbiBSZXprOgo+ID4gPj4+IFRoaXMgcGF0Y2gg Zml4ZXMgYSByYWNlIGNvbmRpdGlvbiB0aGF0IGNhdXNlcyBhIHVzZS1hZnRlci1mcmVlIGR1cmlu Zwo+ID4gPj4+IGFtZGdwdV9kbV9hdG9taWNfY29tbWl0X3RhaWwuIFRoaXMgY2FuIG9jY3VyIHdo ZW4gMiBub24tYmxvY2tpbmcKPiA+ID4+PiBjb21taXRzCj4gPiA+Pj4gYXJlIHJlcXVlc3RlZCBh bmQgdGhlIHNlY29uZCBvbmUgZmluaXNoZXMgYmVmb3JlIHRoZSBmaXJzdC4KPiA+ID4+PiBFc3Nl bnRpYWxseSwKPiA+ID4+PiB0aGlzIGJ1ZyBvY2N1cnMgd2hlbiB0aGUgZm9sbG93aW5nIHNlcXVl bmNlIG9mIGV2ZW50cyBoYXBwZW5zOgo+ID4gPj4+Cj4gPiA+Pj4gMS4gTm9uLWJsb2NraW5nIGNv bW1pdCAjMSBpcyByZXF1ZXN0ZWQgdy8gYSBuZXcgZG1fc3RhdGUgIzEgYW5kIGlzCj4gPiA+Pj4g ZGVmZXJyZWQgdG8gdGhlIHdvcmtxdWV1ZS4KPiA+ID4+Pgo+ID4gPj4+IDIuIE5vbi1ibG9ja2lu ZyBjb21taXQgIzIgaXMgcmVxdWVzdGVkIHcvIGEgbmV3IGRtX3N0YXRlICMyIGFuZCBpcwo+ID4g Pj4+IGRlZmVycmVkIHRvIHRoZSB3b3JrcXVldWUuCj4gPiA+Pj4KPiA+ID4+PiAzLiBDb21taXQg IzIgc3RhcnRzIGJlZm9yZSBjb21taXQgIzEsIGRtX3N0YXRlICMxIGlzIHVzZWQgaW4gdGhlCj4g PiA+Pj4gY29tbWl0X3RhaWwgYW5kIGNvbW1pdCAjMiBjb21wbGV0ZXMsIGZyZWVpbmcgZG1fc3Rh dGUgIzEuCj4gPiA+Pj4KPiA+ID4+PiA0LiBDb21taXQgIzEgc3RhcnRzIGFmdGVyIGNvbW1pdCAj MiBjb21wbGV0ZXMsIHVzZXMgdGhlIGZyZWVkIGRtX3N0YXRlCj4gPiA+Pj4gMSBhbmQgZGVyZWZl cmVuY2VzIGEgZnJlZWxpc3QgcG9pbnRlciB3aGlsZSBzZXR0aW5nIHRoZSBjb250ZXh0Lgo+ID4g Pj4KPiA+ID4+IFdlbGwgSSBvbmx5IGhhdmUgYSBvbmUgbWlsZSBoaWdoIHZpZXcgb24gdGhpcywg YnV0IHdoeSBkb24ndCB5b3UgbGV0Cj4gPiA+PiB0aGUgd29yayBpdGVtcyBleGVjdXRlIGluIG9y ZGVyPwo+ID4gPj4KPiA+ID4+IFRoYXQgd291bGQgYmUgYmV0dGVyIGFueXdheSBjYXVzZSB0aGlz IHdheSB3ZSBkb24ndCB0cmlnZ2VyIGEgY2FjaGUKPiA+ID4+IGxpbmUgcGluZyBwb25nIGJldHdl ZW4gQ1BVcy4KPiA+ID4+Cj4gPiA+PiBDaHJpc3RpYW4uCj4gPiA+Cj4gPiA+IFdlIHVzZSB0aGUg RFJNIGhlbHBlcnMgZm9yIG1hbmFnaW5nIGRybV9hdG9taWNfY29tbWl0X3N0YXRlIGFuZCB0aG9z ZQo+ID4gPiBoZWxwZXJzIGludGVybmFsbHkgcHVzaCBub24tYmxvY2tpbmcgY29tbWl0IHdvcmsg aW50byB0aGUgc3lzdGVtCj4gPiA+IHVuYm91bmQgd29yayBxdWV1ZS4KPiA+Cj4gPiBNaG0sIHdl bGwgaWYgeW91IHNlbmQgdGhvc2UgaGVscGVyIGF0b21pYyBjb21taXRzIGluIHRoZSBvcmRlciBB LEIgYW5kCj4gPiB0aGV5IGV4ZWN1dGUgaXQgaW4gdGhlIG9yZGVyIEIsQSBJIHdvdWxkIGNhbGwg dGhhdCBhIGJ1ZyA6KQo+Cj4gVGhlIHdheSBpdCB3b3JrcyBpcyBpdCBwdXNoZXMgYWxsIGNvbW1p dHMgaW50byB1bmJvdW5kIHdvcmsgcXVldWUsIGJ1dAo+IHRoZW4gZm9yY2VzIHNlcmlhbGl6YXRp b24gYXMgbmVlZGVkLiBXZSBkbyBfbm90XyB3YW50IGUuZy4gdXBkYXRlcyBvbgo+IGRpZmZlcmVu dCBDUlRDIHRvIGJlIHNlcmlhbGl6ZWQsIHRoYXQgd291bGQgcmVzdWx0IGluIGxvdHMgb2YganVk ZGVyLgo+IEFuZCBodyBpcyBmdW5ueSBlbm91Z2ggdGhhdCB0aGVyZSdzIGFsbCBraW5kcyBvZiBk ZXBlbmRlbmNpZXMuCj4KPiBUaGUgd2F5IHlvdSBmb3JjZSBzeW5jaHJvbml6YXRpb24gaXMgYnkg YWRkaW5nIG90aGVyIENSVEMgc3RhdGUKPiBvYmplY3RzLiBTbyBpZiBEQyBpcyBidXN0ZWQgYW5k IGNhbiBvbmx5IGhhbmRsZSBhIHNpbmdsZSB1cGRhdGUgcGVyCj4gd29yayBpdGVtLCB0aGVuIEkg Z3Vlc3MgeW91IGFsd2F5cyBuZWVkIGFsbCBDUlRDIHN0YXRlcyBhbmQgZXZlcnl0aGluZwo+IHdp bGwgYmUgcnVuIGluIG9yZGVyLiBCdXQgdGhhdCBhbHNvIHRvdGFsbHkga2lsbHMgbW9kZXJuIG11 bHRpLXNjcmVlbgo+IGNvbXBvc2l0b3JzLiBYb3JnIGlzbid0IG1vZGVybiwganVzdCBpbiBjYXNl IHRoYXQncyBub3QgY2xlYXIgOi0pCj4KPiBMdWNraW5nIGF0IHRoZSBjb2RlIGl0IHNlZW1zIGxp a2UgeW91IGluZGVlZCBoYXZlIG9ubHkgYSBzaW5nbGUgZG0KPiBzdGF0ZSwgc28geWVhaCBnbG9i YWwgc3luYyBpcyB3aGF0IHlvdSdsbCBuZWVkIGFzIGltbWVkaWF0ZSBmaXgsIGFuZAo+IHRoZW4g bWF5YmUgZml4IHVwIERNIHRvIG5vdCBiZSBxdWl0ZSBzbyBzaWxseSAuLi4gb3IgYXQgbGVhc3Qg b25seSBkbwo+IHRoZSBkbSBzdGF0ZSBzdHVmZiB3aGVuIHJlYWxseSBuZWVkZWQuCj4KPiBXZSBj b3VsZCBhbHNvIHNwcmlua2xlIHRoZSBkcm1fY3J0Y19jb21taXQgc3RydWN0dXJlIGFyb3VuZCBh IGJpdAo+IChpdCdzIHRoZSBnbHVlIHRoYXQgcHJvdmlkZXMgdGhlIHN5bmNocm9uaXphdGlvbiBh Y3Jvc3MgY29tbWl0cyksIGJ1dAo+IHNpbmNlIHlvdXIgZG0gc3RhdGUgaXMgZ2xvYmFsIGp1c3Qg Z3JhYmJpbmcgYWxsIGNydGMgc3RhdGVzCj4gdW5jb25kaXRpb25hbGx5IGFzIHBhcnQgb2YgdGhh dCBpcyBwcm9iYWJseSBiZXN0Lgo+Cj4gPiA+IFdoaWxlIHdlIGNvdWxkIGR1cGxpY2F0ZSBhIGNv cHkgb2YgdGhhdCBjb2RlIHdpdGggbm90aGluZyBidXQgdGhlCj4gPiA+IHdvcmtxdWV1ZSBjaGFu Z2VkIHRoYXQgaXNuJ3Qgc29tZXRoaW5nIEknZCByZWFsbHkgbGlrZSB0byBtYWludGFpbgo+ID4g PiBnb2luZyBmb3J3YXJkLgo+ID4KPiA+IEknbSBub3QgdGFsa2luZyBhYm91dCBkdXBsaWNhdGlu ZyB0aGUgY29kZSwgSSdtIHRhbGtpbmcgYWJvdXQgZml4aW5nIHRoZQo+ID4gaGVscGVycy4gSSBk b24ndCBrbm93IHRoYXQgY29kZSB3ZWxsLCBidXQgZnJvbSB0aGUgb3V0c2lkZSBpdCBzb3VuZHMK PiA+IGxpa2UgYSBidWcgdGhlcmUuCj4gPgo+ID4gQW5kIGV4ZWN1dGluZyB3b3JrIGl0ZW1zIGlu IHRoZSBvcmRlciB0aGV5IGFyZSBzdWJtaXR0ZWQgaXMgdHJpdmlhbC4KPiA+Cj4gPiBIYWQgYW55 Ym9keSBwaW5nZWQgRGFuaWVsIG9yIG90aGVyIHBlb3BsZSBmYW1pbGlhciB3aXRoIHRoZSBoZWxw ZXIgY29kZQo+ID4gYWJvdXQgaXQ/Cj4KPiBZZWFoIHNvbWV0aGluZyBpcyB3cm9uZyBoZXJlLCBh bmQgdGhlIGZpeCBsb29rcyBob3JyaWJsZSA6LSkKPgo+IEFzaWRlLCBJJ3ZlIGFsc28gc2VlbiBz b21lIHJlY2VudCBkaXNjdXNzaW9uIGZsYXJlIHVwIGFib3V0Cj4gZHJtX2F0b21pY19zdGF0ZV9n ZXQvcHV0IHVzZWQgdG8gcGFwZXIgb3ZlciBzb21lIG90aGVyIHVzZS1hZnRlci1mcmVlLAo+IGJ1 dCB0aGlzIHRpbWUgcmVsYXRlZCB0byBpbnRlcnJ1cHQgaGFuZGxlcnMuIE1heWJlIGEgZmV3IHJ1 bGVzIGFib3V0Cj4gdGhhdDoKPiAtIGRvbnQKPiAtIGVzcGVjaWFsbHkgbm90IHdoZW4gaXQncyBp bnRlcnJ1cHQgaGFuZGxlcnMsIGJlY2F1c2UgeW91IGNhbid0IGNhbGwKPiBkcm1fYXRvbWljX3N0 YXRlX3B1dCBmcm9tIGludGVycnVwdCBoYW5kbGVycy4KPgo+IEluc3RlYWQgaGF2ZSBhbiBzcGlu X2xvY2tfaXJxIHRvIHByb3RlY3QgdGhlIHNoYXJlZCBkYXRlIHdpdGggeW91cgo+IGludGVycnVw dCBoYW5kbGVyLCBhbmQgX2NvcHlfIHRoZSBkYXRlIG92ZXIuIFRoaXMgaXMgZS5nLiB3aGF0Cj4g ZHJtX2NydGNfYXJtX3ZibGFua19ldmVudCBkb2VzLgoKTmljaG9sYXMgd3JvdGUgYSBwYXRjaCB0 aGF0IGF0dGVtcHRlZCB0byByZXNvbHZlIHRoZSBpc3N1ZSBieSBhZGRpbmcgZXZlcnkKQ1JUQyBp bnRvIHRoZSBjb21taXQgdG8gdXNlIHVzZSB0aGUgc3RhbGwgY2hlY2tzLiBbMV0gV2hpbGUgdGhp cyBmb3JjZXMKc3luY2hyb25pc2F0aW9uIG9uIGNvbW1pdHMsIGl0J3Mga2luZCBvZiBhIGhhY2t5 IG1ldGhvZCB0aGF0IG1heSB0YWtlIGEKdG9sbCBvbiBwZXJmb3JtYW5jZS4KCklzIGl0IHBvc3Np YmxlIHRvIGhhdmUgYSBEUk0gaGVscGVyIHRoYXQgZm9yY2VzIHN5bmNocm9uaXNhdGlvbiBvbiBz b21lCmNvbW1pdHMgd2l0aG91dCBoYXZpbmcgdG8gYWRkIGV2ZXJ5IENSVEMgaW50byB0aGUgY29t bWl0PwoKQWxzbywgaXMgc3luY2hyb25pc2F0aW9uIHJlYWxseSBuZWNlc3NhcnkgZm9yIGZhc3Qg dXBkYXRlcyBpbiBhbWRncHU/CkknbGwgYWRtaXQsIHRoZSBpZGVhIG9mIGVsaW1pbmF0aW5nIHRo ZSB1c2UtYWZ0ZXItZnJlZSBidWcgYnkgZWxpbWluYXRpbmcKdGhlIHVzZSBlbnRpcmVseSBkb2Vz bid0IHNlZW0gaWRlYWw7IGJ1dCBpcyBmb3JjaW5nIHN5bmNocm9uaXNhdGlvbiBvbgp0aGVzZSB1 cGRhdGVzIHRoYXQgbXVjaCBiZXR0ZXI/CgpbMV0gaHR0cHM6Ly9idWd6aWxsYS5rZXJuZWwub3Jn L3Nob3dfYnVnLmNnaT9pZD0yMDczODMjYzk2CgpUaGFua3MsCk1hemluIFJlemsKCj4KPiBDaGVl cnMsIERhbmllbAo+Cj4gPgo+ID4gUmVnYXJkcywKPiA+IENocmlzdGlhbi4KPiA+Cj4gPiA+Cj4g PiA+IFJlZ2FyZHMsCj4gPiA+IE5pY2hvbGFzIEthemxhdXNrYXMKPiA+ID4KPiA+ID4+Cj4gPiA+ Pj4KPiA+ID4+PiBTaW5jZSB0aGlzIGJ1ZyBoYXMgb25seSBiZWVuIHNwb3R0ZWQgd2l0aCBmYXN0 IGNvbW1pdHMsIHRoaXMgcGF0Y2gKPiA+ID4+PiBmaXhlcwo+ID4gPj4+IHRoZSBidWcgYnkgY2xl YXJpbmcgdGhlIGRtX3N0YXRlIGluc3RlYWQgb2YgdXNpbmcgdGhlIG9sZCBkY19zdGF0ZSBmb3IK PiA+ID4+PiBmYXN0IHVwZGF0ZXMuIEluIGFkZGl0aW9uLCBzaW5jZSBkbV9zdGF0ZSBpcyBvbmx5 IHVzZWQgZm9yIGl0cyBkY19zdGF0ZQo+ID4gPj4+IGFuZCBhbWRncHVfZG1fYXRvbWljX2NvbW1p dF90YWlsIHdpbGwgcmV0YWluIHRoZSBkY19zdGF0ZSBpZiBub25lIGlzCj4gPiA+Pj4gZm91bmQs Cj4gPiA+Pj4gcmVtb3ZpbmcgdGhlIGRtX3N0YXRlIHNob3VsZCBub3QgaGF2ZSBhbnkgY29uc2Vx dWVuY2VzIGluIGZhc3QgdXBkYXRlcy4KPiA+ID4+Pgo+ID4gPj4+IFRoaXMgdXNlLWFmdGVyLWZy ZWUgYnVnIGhhcyBleGlzdGVkIGZvciBhIHdoaWxlIG5vdywgYnV0IG9ubHkgY2F1c2VkIGEKPiA+ ID4+PiBub3RpY2VhYmxlIGlzc3VlIHN0YXJ0aW5nIGZyb20gNS43LXJjMSBkdWUgdG8gMzIwMmZh NjJmICgic2x1YjoKPiA+ID4+PiByZWxvY2F0ZQo+ID4gPj4+IGZyZWVsaXN0IHBvaW50ZXIgdG8g bWlkZGxlIG9mIG9iamVjdCIpIG1vdmluZyB0aGUgZnJlZWxpc3QgcG9pbnRlciBmcm9tCj4gPiA+ Pj4gZG1fc3RhdGUtPmJhc2UgKHdoaWNoIHdhcyB1bnVzZWQpIHRvIGRtX3N0YXRlLT5jb250ZXh0 ICh3aGljaCBpcwo+ID4gPj4+IGRlcmVmZXJlbmNlZCkuCj4gPiA+Pj4KPiA+ID4+PiBCdWd6aWxs YTogaHR0cHM6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDczODMKPiA+ ID4+PiBGaXhlczogYmQyMDBkMTkwZjQ1ICgiZHJtL2FtZC9kaXNwbGF5OiBEb24ndCByZXBsYWNl IHRoZSBkY19zdGF0ZQo+ID4gPj4+IGZvciBmYXN0IHVwZGF0ZXMiKQo+ID4gPj4+IFJlcG9ydGVk LWJ5OiBEdW5jYW4gPDFpNXQ1LmR1bmNhbkBjb3gubmV0Pgo+ID4gPj4+IFNpZ25lZC1vZmYtYnk6 IE1hemluIFJlemsgPG1ucnprQHByb3Rvbm1haWwuY29tPgo+ID4gPj4+IC0tLQo+ID4gPj4+ICAg Li4uL2dwdS9kcm0vYW1kL2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbS5jIHwgMzYKPiA+ID4+ PiArKysrKysrKysrKysrKy0tLS0tCj4gPiA+Pj4gICAxIGZpbGUgY2hhbmdlZCwgMjcgaW5zZXJ0 aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKPiA+ID4+Pgo+ID4gPj4+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbS5jCj4gPiA+Pj4gYi9k cml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbS5jCj4gPiA+Pj4g aW5kZXggODZmZmEwYzI4ODBmLi43MTBlZGM3MGUzN2UgMTAwNjQ0Cj4gPiA+Pj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG0uYwo+ID4gPj4+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1X2RtLmMKPiA+ ID4+PiBAQCAtODcxNywyMCArODcxNywzOCBAQCBzdGF0aWMgaW50IGFtZGdwdV9kbV9hdG9taWNf Y2hlY2soc3RydWN0Cj4gPiA+Pj4gZHJtX2RldmljZSAqZGV2LAo+ID4gPj4+ICAgICAgICAgICAg KiB0aGUgc2FtZSByZXNvdXJjZS4gSWYgd2UgaGF2ZSBhIG5ldyBEQyBjb250ZXh0IGFzIHBhcnQg b2YKPiA+ID4+PiAgICAgICAgICAgICogdGhlIERNIGF0b21pYyBzdGF0ZSBmcm9tIHZhbGlkYXRp b24gd2UgbmVlZCB0byBmcmVlIGl0IGFuZAo+ID4gPj4+ICAgICAgICAgICAgKiByZXRhaW4gdGhl IGV4aXN0aW5nIG9uZSBpbnN0ZWFkLgo+ID4gPj4+ICsgICAgICAgICAqCj4gPiA+Pj4gKyAgICAg ICAgICogRnVydGhlcm1vcmUsIHNpbmNlIHRoZSBETSBhdG9taWMgc3RhdGUgb25seSBjb250YWlu cyB0aGUgREMKPiA+ID4+PiArICAgICAgICAgKiBjb250ZXh0IGFuZCBjYW4gc2FmZWx5IGJlIGFu bnVsbGVkLCB3ZSBjYW4gZnJlZSB0aGUgc3RhdGUKPiA+ID4+PiArICAgICAgICAgKiBhbmQgY2xl YXIgdGhlIGFzc29jaWF0ZWQgcHJpdmF0ZSBvYmplY3Qgbm93IHRvIGZyZWUKPiA+ID4+PiArICAg ICAgICAgKiBzb21lIG1lbW9yeSBhbmQgYXZvaWQgYSBwb3NzaWJsZSB1c2UtYWZ0ZXItZnJlZSBs YXRlci4KPiA+ID4+PiAgICAgICAgICAgICovCj4gPiA+Pj4gLSAgICAgICAgc3RydWN0IGRtX2F0 b21pY19zdGF0ZSAqbmV3X2RtX3N0YXRlLCAqb2xkX2RtX3N0YXRlOwo+ID4gPj4+Cj4gPiA+Pj4g LSAgICAgICAgbmV3X2RtX3N0YXRlID0gZG1fYXRvbWljX2dldF9uZXdfc3RhdGUoc3RhdGUpOwo+ ID4gPj4+IC0gICAgICAgIG9sZF9kbV9zdGF0ZSA9IGRtX2F0b21pY19nZXRfb2xkX3N0YXRlKHN0 YXRlKTsKPiA+ID4+PiArICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3RhdGUtPm51bV9wcml2YXRl X29ianM7IGkrKykgewo+ID4gPj4+ICsgICAgICAgICAgICBzdHJ1Y3QgZHJtX3ByaXZhdGVfb2Jq ICpvYmogPSBzdGF0ZS0+cHJpdmF0ZV9vYmpzW2ldLnB0cjsKPiA+ID4+Pgo+ID4gPj4+IC0gICAg ICAgIGlmIChuZXdfZG1fc3RhdGUgJiYgb2xkX2RtX3N0YXRlKSB7Cj4gPiA+Pj4gLSAgICAgICAg ICAgIGlmIChuZXdfZG1fc3RhdGUtPmNvbnRleHQpCj4gPiA+Pj4gLSAgICAgICAgICAgICAgICBk Y19yZWxlYXNlX3N0YXRlKG5ld19kbV9zdGF0ZS0+Y29udGV4dCk7Cj4gPiA+Pj4gKyAgICAgICAg ICAgIGlmIChvYmotPmZ1bmNzID09IGFkZXYtPmRtLmF0b21pY19vYmouZnVuY3MpIHsKPiA+ID4+ PiArICAgICAgICAgICAgICAgIGludCBqID0gc3RhdGUtPm51bV9wcml2YXRlX29ianMtMTsKPiA+ ID4+Pgo+ID4gPj4+IC0gICAgICAgICAgICBuZXdfZG1fc3RhdGUtPmNvbnRleHQgPSBvbGRfZG1f c3RhdGUtPmNvbnRleHQ7Cj4gPiA+Pj4gKyAgICAgICAgICAgICAgICBkbV9hdG9taWNfZGVzdHJv eV9zdGF0ZShvYmosCj4gPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5wcml2 YXRlX29ianNbaV0uc3RhdGUpOwo+ID4gPj4+ICsKPiA+ID4+PiArICAgICAgICAgICAgICAgIC8q IElmIGkgaXMgbm90IGF0IHRoZSBlbmQgb2YgdGhlIGFycmF5IHRoZW4gdGhlCj4gPiA+Pj4gKyAg ICAgICAgICAgICAgICAgKiBsYXN0IGVsZW1lbnQgbmVlZHMgdG8gYmUgbW92ZWQgdG8gd2hlcmUg aSB3YXMKPiA+ID4+PiArICAgICAgICAgICAgICAgICAqIGJlZm9yZSB0aGUgYXJyYXkgY2FuIHNh ZmVseSBiZSB0cnVuY2F0ZWQuCj4gPiA+Pj4gKyAgICAgICAgICAgICAgICAgKi8KPiA+ID4+PiAr ICAgICAgICAgICAgICAgIGlmIChpICE9IGopCj4gPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAg c3RhdGUtPnByaXZhdGVfb2Jqc1tpXSA9Cj4gPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAg IHN0YXRlLT5wcml2YXRlX29ianNbal07Cj4gPiA+Pj4KPiA+ID4+PiAtICAgICAgICAgICAgaWYg KG9sZF9kbV9zdGF0ZS0+Y29udGV4dCkKPiA+ID4+PiAtICAgICAgICAgICAgICAgIGRjX3JldGFp bl9zdGF0ZShvbGRfZG1fc3RhdGUtPmNvbnRleHQpOwo+ID4gPj4+ICsgICAgICAgICAgICAgICAg c3RhdGUtPnByaXZhdGVfb2Jqc1tqXS5wdHIgPSBOVUxMOwo+ID4gPj4+ICsgICAgICAgICAgICAg ICAgc3RhdGUtPnByaXZhdGVfb2Jqc1tqXS5zdGF0ZSA9IE5VTEw7Cj4gPiA+Pj4gKyAgICAgICAg ICAgICAgICBzdGF0ZS0+cHJpdmF0ZV9vYmpzW2pdLm9sZF9zdGF0ZSA9IE5VTEw7Cj4gPiA+Pj4g KyAgICAgICAgICAgICAgICBzdGF0ZS0+cHJpdmF0ZV9vYmpzW2pdLm5ld19zdGF0ZSA9IE5VTEw7 Cj4gPiA+Pj4gKwo+ID4gPj4+ICsgICAgICAgICAgICAgICAgc3RhdGUtPm51bV9wcml2YXRlX29i anMgPSBqOwo+ID4gPj4+ICsgICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiA+Pj4gKyAgICAgICAg ICAgIH0KPiA+ID4+PiAgICAgICAgICAgfQo+ID4gPj4+ICAgICAgIH0KPiA+ID4+Pgo+ID4gPj4+ IC0tCj4gPiA+Pj4gMi4yNy4wCj4gPiA+Pj4KPiA+ID4+Cj4gPiA+Cj4gPgo+ID4gX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiA+IGRyaS1kZXZlbCBtYWls aW5nIGxpc3QKPiA+IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiA+IGh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCj4KPgo+Cj4g LS0KPiBEYW5pZWwgVmV0dGVyCj4gU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9u Cj4gaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vZHJpLWRldmVsCg== 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=-7.8 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,HK_RANDOM_FROM,HK_RANDOM_REPLYTO,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=no 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 1AA10C433EA for ; Tue, 28 Jul 2020 07:41:28 +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 E47D321D95 for ; Tue, 28 Jul 2020 07:41:27 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=protonmail.com header.i=@protonmail.com header.b="TCnJrzRA" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E47D321D95 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=protonmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=amd-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 3DACC6E1F9; Tue, 28 Jul 2020 07:41:26 +0000 (UTC) Received: from mail-40141.protonmail.ch (mail-40141.protonmail.ch [185.70.40.141]) by gabe.freedesktop.org (Postfix) with ESMTPS id ED54289FD4 for ; Mon, 27 Jul 2020 21:11:39 +0000 (UTC) Date: Mon, 27 Jul 2020 21:11:34 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail; t=1595884297; bh=J5UnwDGjGDm1GIlnrWPWuIc1UUtS+SRgiZtCCMV1dgU=; h=Date:To:From:Cc:Reply-To:Subject:In-Reply-To:References:From; b=TCnJrzRADNWeQKeNkq7j/brbkgXB3qrKl+Rp2Wc5h/nV1lC3QuG9kocLN7saKdlyG ZIuXvVqUS4x9x9Os8WxeECHqmYJ899OgEM5urtxygOH51zYh0hXOsHol8eViV2UTtN eFkrUeuCPy3dLPJNUkQ0oFVobzsxJiWJ71S2vK4k= To: Daniel Vetter From: Mazin Rezk Subject: Re: [PATCH] drm/amd/display: Clear dm_state for fast updates Message-ID: In-Reply-To: References: <3b7e3e50-2ff7-eff3-2ffc-abaa4b36ce7f@amd.com> MIME-Version: 1.0 X-Mailman-Approved-At: Tue, 28 Jul 2020 07:41:20 +0000 X-BeenThere: amd-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Mazin Rezk Cc: Paul Menzel , "mphantomx@yahoo.com.br" , Duncan <1i5t5.duncan@cox.net>, Kees Cook , "sunpeng.li@amd.com" , Mazin Rezk , "linux-kernel@vger.kernel.org" , "dri-devel@lists.freedesktop.org" , "Kazlauskas, Nicholas" , "regressions@leemhuis.info" , "amd-gfx@lists.freedesktop.org" , Alexander Deucher , Andrew Morton , "anthony.ruhier@gmail.com" , =?utf-8?Q?Christian_K=C3=B6nig?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: amd-gfx-bounces@lists.freedesktop.org Sender: "amd-gfx" T24gTW9uZGF5LCBKdWx5IDI3LCAyMDIwIDQ6MjkgUE0sIERhbmllbCBWZXR0ZXIgPGRhbmllbEBm ZndsbC5jaD4gd3JvdGU6Cgo+IE9uIE1vbiwgSnVsIDI3LCAyMDIwIGF0IDk6MjggUE0gQ2hyaXN0 aWFuIEvDtm5pZwo+IDxjaHJpc3RpYW4ua29lbmlnQGFtZC5jb20+IHdyb3RlOgo+ID4KPiA+IEFt IDI3LjA3LjIwIHVtIDE2OjA1IHNjaHJpZWIgS2F6bGF1c2thcywgTmljaG9sYXM6Cj4gPiA+IE9u IDIwMjAtMDctMjcgOTozOSBhLm0uLCBDaHJpc3RpYW4gS8O2bmlnIHdyb3RlOgo+ID4gPj4gQW0g MjcuMDcuMjAgdW0gMDc6NDAgc2NocmllYiBNYXppbiBSZXprOgo+ID4gPj4+IFRoaXMgcGF0Y2gg Zml4ZXMgYSByYWNlIGNvbmRpdGlvbiB0aGF0IGNhdXNlcyBhIHVzZS1hZnRlci1mcmVlIGR1cmlu Zwo+ID4gPj4+IGFtZGdwdV9kbV9hdG9taWNfY29tbWl0X3RhaWwuIFRoaXMgY2FuIG9jY3VyIHdo ZW4gMiBub24tYmxvY2tpbmcKPiA+ID4+PiBjb21taXRzCj4gPiA+Pj4gYXJlIHJlcXVlc3RlZCBh bmQgdGhlIHNlY29uZCBvbmUgZmluaXNoZXMgYmVmb3JlIHRoZSBmaXJzdC4KPiA+ID4+PiBFc3Nl bnRpYWxseSwKPiA+ID4+PiB0aGlzIGJ1ZyBvY2N1cnMgd2hlbiB0aGUgZm9sbG93aW5nIHNlcXVl bmNlIG9mIGV2ZW50cyBoYXBwZW5zOgo+ID4gPj4+Cj4gPiA+Pj4gMS4gTm9uLWJsb2NraW5nIGNv bW1pdCAjMSBpcyByZXF1ZXN0ZWQgdy8gYSBuZXcgZG1fc3RhdGUgIzEgYW5kIGlzCj4gPiA+Pj4g ZGVmZXJyZWQgdG8gdGhlIHdvcmtxdWV1ZS4KPiA+ID4+Pgo+ID4gPj4+IDIuIE5vbi1ibG9ja2lu ZyBjb21taXQgIzIgaXMgcmVxdWVzdGVkIHcvIGEgbmV3IGRtX3N0YXRlICMyIGFuZCBpcwo+ID4g Pj4+IGRlZmVycmVkIHRvIHRoZSB3b3JrcXVldWUuCj4gPiA+Pj4KPiA+ID4+PiAzLiBDb21taXQg IzIgc3RhcnRzIGJlZm9yZSBjb21taXQgIzEsIGRtX3N0YXRlICMxIGlzIHVzZWQgaW4gdGhlCj4g PiA+Pj4gY29tbWl0X3RhaWwgYW5kIGNvbW1pdCAjMiBjb21wbGV0ZXMsIGZyZWVpbmcgZG1fc3Rh dGUgIzEuCj4gPiA+Pj4KPiA+ID4+PiA0LiBDb21taXQgIzEgc3RhcnRzIGFmdGVyIGNvbW1pdCAj MiBjb21wbGV0ZXMsIHVzZXMgdGhlIGZyZWVkIGRtX3N0YXRlCj4gPiA+Pj4gMSBhbmQgZGVyZWZl cmVuY2VzIGEgZnJlZWxpc3QgcG9pbnRlciB3aGlsZSBzZXR0aW5nIHRoZSBjb250ZXh0Lgo+ID4g Pj4KPiA+ID4+IFdlbGwgSSBvbmx5IGhhdmUgYSBvbmUgbWlsZSBoaWdoIHZpZXcgb24gdGhpcywg YnV0IHdoeSBkb24ndCB5b3UgbGV0Cj4gPiA+PiB0aGUgd29yayBpdGVtcyBleGVjdXRlIGluIG9y ZGVyPwo+ID4gPj4KPiA+ID4+IFRoYXQgd291bGQgYmUgYmV0dGVyIGFueXdheSBjYXVzZSB0aGlz IHdheSB3ZSBkb24ndCB0cmlnZ2VyIGEgY2FjaGUKPiA+ID4+IGxpbmUgcGluZyBwb25nIGJldHdl ZW4gQ1BVcy4KPiA+ID4+Cj4gPiA+PiBDaHJpc3RpYW4uCj4gPiA+Cj4gPiA+IFdlIHVzZSB0aGUg RFJNIGhlbHBlcnMgZm9yIG1hbmFnaW5nIGRybV9hdG9taWNfY29tbWl0X3N0YXRlIGFuZCB0aG9z ZQo+ID4gPiBoZWxwZXJzIGludGVybmFsbHkgcHVzaCBub24tYmxvY2tpbmcgY29tbWl0IHdvcmsg aW50byB0aGUgc3lzdGVtCj4gPiA+IHVuYm91bmQgd29yayBxdWV1ZS4KPiA+Cj4gPiBNaG0sIHdl bGwgaWYgeW91IHNlbmQgdGhvc2UgaGVscGVyIGF0b21pYyBjb21taXRzIGluIHRoZSBvcmRlciBB LEIgYW5kCj4gPiB0aGV5IGV4ZWN1dGUgaXQgaW4gdGhlIG9yZGVyIEIsQSBJIHdvdWxkIGNhbGwg dGhhdCBhIGJ1ZyA6KQo+Cj4gVGhlIHdheSBpdCB3b3JrcyBpcyBpdCBwdXNoZXMgYWxsIGNvbW1p dHMgaW50byB1bmJvdW5kIHdvcmsgcXVldWUsIGJ1dAo+IHRoZW4gZm9yY2VzIHNlcmlhbGl6YXRp b24gYXMgbmVlZGVkLiBXZSBkbyBfbm90XyB3YW50IGUuZy4gdXBkYXRlcyBvbgo+IGRpZmZlcmVu dCBDUlRDIHRvIGJlIHNlcmlhbGl6ZWQsIHRoYXQgd291bGQgcmVzdWx0IGluIGxvdHMgb2YganVk ZGVyLgo+IEFuZCBodyBpcyBmdW5ueSBlbm91Z2ggdGhhdCB0aGVyZSdzIGFsbCBraW5kcyBvZiBk ZXBlbmRlbmNpZXMuCj4KPiBUaGUgd2F5IHlvdSBmb3JjZSBzeW5jaHJvbml6YXRpb24gaXMgYnkg YWRkaW5nIG90aGVyIENSVEMgc3RhdGUKPiBvYmplY3RzLiBTbyBpZiBEQyBpcyBidXN0ZWQgYW5k IGNhbiBvbmx5IGhhbmRsZSBhIHNpbmdsZSB1cGRhdGUgcGVyCj4gd29yayBpdGVtLCB0aGVuIEkg Z3Vlc3MgeW91IGFsd2F5cyBuZWVkIGFsbCBDUlRDIHN0YXRlcyBhbmQgZXZlcnl0aGluZwo+IHdp bGwgYmUgcnVuIGluIG9yZGVyLiBCdXQgdGhhdCBhbHNvIHRvdGFsbHkga2lsbHMgbW9kZXJuIG11 bHRpLXNjcmVlbgo+IGNvbXBvc2l0b3JzLiBYb3JnIGlzbid0IG1vZGVybiwganVzdCBpbiBjYXNl IHRoYXQncyBub3QgY2xlYXIgOi0pCj4KPiBMdWNraW5nIGF0IHRoZSBjb2RlIGl0IHNlZW1zIGxp a2UgeW91IGluZGVlZCBoYXZlIG9ubHkgYSBzaW5nbGUgZG0KPiBzdGF0ZSwgc28geWVhaCBnbG9i YWwgc3luYyBpcyB3aGF0IHlvdSdsbCBuZWVkIGFzIGltbWVkaWF0ZSBmaXgsIGFuZAo+IHRoZW4g bWF5YmUgZml4IHVwIERNIHRvIG5vdCBiZSBxdWl0ZSBzbyBzaWxseSAuLi4gb3IgYXQgbGVhc3Qg b25seSBkbwo+IHRoZSBkbSBzdGF0ZSBzdHVmZiB3aGVuIHJlYWxseSBuZWVkZWQuCj4KPiBXZSBj b3VsZCBhbHNvIHNwcmlua2xlIHRoZSBkcm1fY3J0Y19jb21taXQgc3RydWN0dXJlIGFyb3VuZCBh IGJpdAo+IChpdCdzIHRoZSBnbHVlIHRoYXQgcHJvdmlkZXMgdGhlIHN5bmNocm9uaXphdGlvbiBh Y3Jvc3MgY29tbWl0cyksIGJ1dAo+IHNpbmNlIHlvdXIgZG0gc3RhdGUgaXMgZ2xvYmFsIGp1c3Qg Z3JhYmJpbmcgYWxsIGNydGMgc3RhdGVzCj4gdW5jb25kaXRpb25hbGx5IGFzIHBhcnQgb2YgdGhh dCBpcyBwcm9iYWJseSBiZXN0Lgo+Cj4gPiA+IFdoaWxlIHdlIGNvdWxkIGR1cGxpY2F0ZSBhIGNv cHkgb2YgdGhhdCBjb2RlIHdpdGggbm90aGluZyBidXQgdGhlCj4gPiA+IHdvcmtxdWV1ZSBjaGFu Z2VkIHRoYXQgaXNuJ3Qgc29tZXRoaW5nIEknZCByZWFsbHkgbGlrZSB0byBtYWludGFpbgo+ID4g PiBnb2luZyBmb3J3YXJkLgo+ID4KPiA+IEknbSBub3QgdGFsa2luZyBhYm91dCBkdXBsaWNhdGlu ZyB0aGUgY29kZSwgSSdtIHRhbGtpbmcgYWJvdXQgZml4aW5nIHRoZQo+ID4gaGVscGVycy4gSSBk b24ndCBrbm93IHRoYXQgY29kZSB3ZWxsLCBidXQgZnJvbSB0aGUgb3V0c2lkZSBpdCBzb3VuZHMK PiA+IGxpa2UgYSBidWcgdGhlcmUuCj4gPgo+ID4gQW5kIGV4ZWN1dGluZyB3b3JrIGl0ZW1zIGlu IHRoZSBvcmRlciB0aGV5IGFyZSBzdWJtaXR0ZWQgaXMgdHJpdmlhbC4KPiA+Cj4gPiBIYWQgYW55 Ym9keSBwaW5nZWQgRGFuaWVsIG9yIG90aGVyIHBlb3BsZSBmYW1pbGlhciB3aXRoIHRoZSBoZWxw ZXIgY29kZQo+ID4gYWJvdXQgaXQ/Cj4KPiBZZWFoIHNvbWV0aGluZyBpcyB3cm9uZyBoZXJlLCBh bmQgdGhlIGZpeCBsb29rcyBob3JyaWJsZSA6LSkKPgo+IEFzaWRlLCBJJ3ZlIGFsc28gc2VlbiBz b21lIHJlY2VudCBkaXNjdXNzaW9uIGZsYXJlIHVwIGFib3V0Cj4gZHJtX2F0b21pY19zdGF0ZV9n ZXQvcHV0IHVzZWQgdG8gcGFwZXIgb3ZlciBzb21lIG90aGVyIHVzZS1hZnRlci1mcmVlLAo+IGJ1 dCB0aGlzIHRpbWUgcmVsYXRlZCB0byBpbnRlcnJ1cHQgaGFuZGxlcnMuIE1heWJlIGEgZmV3IHJ1 bGVzIGFib3V0Cj4gdGhhdDoKPiAtIGRvbnQKPiAtIGVzcGVjaWFsbHkgbm90IHdoZW4gaXQncyBp bnRlcnJ1cHQgaGFuZGxlcnMsIGJlY2F1c2UgeW91IGNhbid0IGNhbGwKPiBkcm1fYXRvbWljX3N0 YXRlX3B1dCBmcm9tIGludGVycnVwdCBoYW5kbGVycy4KPgo+IEluc3RlYWQgaGF2ZSBhbiBzcGlu X2xvY2tfaXJxIHRvIHByb3RlY3QgdGhlIHNoYXJlZCBkYXRlIHdpdGggeW91cgo+IGludGVycnVw dCBoYW5kbGVyLCBhbmQgX2NvcHlfIHRoZSBkYXRlIG92ZXIuIFRoaXMgaXMgZS5nLiB3aGF0Cj4g ZHJtX2NydGNfYXJtX3ZibGFua19ldmVudCBkb2VzLgoKTmljaG9sYXMgd3JvdGUgYSBwYXRjaCB0 aGF0IGF0dGVtcHRlZCB0byByZXNvbHZlIHRoZSBpc3N1ZSBieSBhZGRpbmcgZXZlcnkKQ1JUQyBp bnRvIHRoZSBjb21taXQgdG8gdXNlIHVzZSB0aGUgc3RhbGwgY2hlY2tzLiBbMV0gV2hpbGUgdGhp cyBmb3JjZXMKc3luY2hyb25pc2F0aW9uIG9uIGNvbW1pdHMsIGl0J3Mga2luZCBvZiBhIGhhY2t5 IG1ldGhvZCB0aGF0IG1heSB0YWtlIGEKdG9sbCBvbiBwZXJmb3JtYW5jZS4KCklzIGl0IHBvc3Np YmxlIHRvIGhhdmUgYSBEUk0gaGVscGVyIHRoYXQgZm9yY2VzIHN5bmNocm9uaXNhdGlvbiBvbiBz b21lCmNvbW1pdHMgd2l0aG91dCBoYXZpbmcgdG8gYWRkIGV2ZXJ5IENSVEMgaW50byB0aGUgY29t bWl0PwoKQWxzbywgaXMgc3luY2hyb25pc2F0aW9uIHJlYWxseSBuZWNlc3NhcnkgZm9yIGZhc3Qg dXBkYXRlcyBpbiBhbWRncHU/CkknbGwgYWRtaXQsIHRoZSBpZGVhIG9mIGVsaW1pbmF0aW5nIHRo ZSB1c2UtYWZ0ZXItZnJlZSBidWcgYnkgZWxpbWluYXRpbmcKdGhlIHVzZSBlbnRpcmVseSBkb2Vz bid0IHNlZW0gaWRlYWw7IGJ1dCBpcyBmb3JjaW5nIHN5bmNocm9uaXNhdGlvbiBvbgp0aGVzZSB1 cGRhdGVzIHRoYXQgbXVjaCBiZXR0ZXI/CgpbMV0gaHR0cHM6Ly9idWd6aWxsYS5rZXJuZWwub3Jn L3Nob3dfYnVnLmNnaT9pZD0yMDczODMjYzk2CgpUaGFua3MsCk1hemluIFJlemsKCj4KPiBDaGVl cnMsIERhbmllbAo+Cj4gPgo+ID4gUmVnYXJkcywKPiA+IENocmlzdGlhbi4KPiA+Cj4gPiA+Cj4g PiA+IFJlZ2FyZHMsCj4gPiA+IE5pY2hvbGFzIEthemxhdXNrYXMKPiA+ID4KPiA+ID4+Cj4gPiA+ Pj4KPiA+ID4+PiBTaW5jZSB0aGlzIGJ1ZyBoYXMgb25seSBiZWVuIHNwb3R0ZWQgd2l0aCBmYXN0 IGNvbW1pdHMsIHRoaXMgcGF0Y2gKPiA+ID4+PiBmaXhlcwo+ID4gPj4+IHRoZSBidWcgYnkgY2xl YXJpbmcgdGhlIGRtX3N0YXRlIGluc3RlYWQgb2YgdXNpbmcgdGhlIG9sZCBkY19zdGF0ZSBmb3IK PiA+ID4+PiBmYXN0IHVwZGF0ZXMuIEluIGFkZGl0aW9uLCBzaW5jZSBkbV9zdGF0ZSBpcyBvbmx5 IHVzZWQgZm9yIGl0cyBkY19zdGF0ZQo+ID4gPj4+IGFuZCBhbWRncHVfZG1fYXRvbWljX2NvbW1p dF90YWlsIHdpbGwgcmV0YWluIHRoZSBkY19zdGF0ZSBpZiBub25lIGlzCj4gPiA+Pj4gZm91bmQs Cj4gPiA+Pj4gcmVtb3ZpbmcgdGhlIGRtX3N0YXRlIHNob3VsZCBub3QgaGF2ZSBhbnkgY29uc2Vx dWVuY2VzIGluIGZhc3QgdXBkYXRlcy4KPiA+ID4+Pgo+ID4gPj4+IFRoaXMgdXNlLWFmdGVyLWZy ZWUgYnVnIGhhcyBleGlzdGVkIGZvciBhIHdoaWxlIG5vdywgYnV0IG9ubHkgY2F1c2VkIGEKPiA+ ID4+PiBub3RpY2VhYmxlIGlzc3VlIHN0YXJ0aW5nIGZyb20gNS43LXJjMSBkdWUgdG8gMzIwMmZh NjJmICgic2x1YjoKPiA+ID4+PiByZWxvY2F0ZQo+ID4gPj4+IGZyZWVsaXN0IHBvaW50ZXIgdG8g bWlkZGxlIG9mIG9iamVjdCIpIG1vdmluZyB0aGUgZnJlZWxpc3QgcG9pbnRlciBmcm9tCj4gPiA+ Pj4gZG1fc3RhdGUtPmJhc2UgKHdoaWNoIHdhcyB1bnVzZWQpIHRvIGRtX3N0YXRlLT5jb250ZXh0 ICh3aGljaCBpcwo+ID4gPj4+IGRlcmVmZXJlbmNlZCkuCj4gPiA+Pj4KPiA+ID4+PiBCdWd6aWxs YTogaHR0cHM6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDczODMKPiA+ ID4+PiBGaXhlczogYmQyMDBkMTkwZjQ1ICgiZHJtL2FtZC9kaXNwbGF5OiBEb24ndCByZXBsYWNl IHRoZSBkY19zdGF0ZQo+ID4gPj4+IGZvciBmYXN0IHVwZGF0ZXMiKQo+ID4gPj4+IFJlcG9ydGVk LWJ5OiBEdW5jYW4gPDFpNXQ1LmR1bmNhbkBjb3gubmV0Pgo+ID4gPj4+IFNpZ25lZC1vZmYtYnk6 IE1hemluIFJlemsgPG1ucnprQHByb3Rvbm1haWwuY29tPgo+ID4gPj4+IC0tLQo+ID4gPj4+ICAg Li4uL2dwdS9kcm0vYW1kL2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbS5jIHwgMzYKPiA+ID4+ PiArKysrKysrKysrKysrKy0tLS0tCj4gPiA+Pj4gICAxIGZpbGUgY2hhbmdlZCwgMjcgaW5zZXJ0 aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKPiA+ID4+Pgo+ID4gPj4+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbS5jCj4gPiA+Pj4gYi9k cml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbS5jCj4gPiA+Pj4g aW5kZXggODZmZmEwYzI4ODBmLi43MTBlZGM3MGUzN2UgMTAwNjQ0Cj4gPiA+Pj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG0uYwo+ID4gPj4+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1X2RtLmMKPiA+ ID4+PiBAQCAtODcxNywyMCArODcxNywzOCBAQCBzdGF0aWMgaW50IGFtZGdwdV9kbV9hdG9taWNf Y2hlY2soc3RydWN0Cj4gPiA+Pj4gZHJtX2RldmljZSAqZGV2LAo+ID4gPj4+ICAgICAgICAgICAg KiB0aGUgc2FtZSByZXNvdXJjZS4gSWYgd2UgaGF2ZSBhIG5ldyBEQyBjb250ZXh0IGFzIHBhcnQg b2YKPiA+ID4+PiAgICAgICAgICAgICogdGhlIERNIGF0b21pYyBzdGF0ZSBmcm9tIHZhbGlkYXRp b24gd2UgbmVlZCB0byBmcmVlIGl0IGFuZAo+ID4gPj4+ICAgICAgICAgICAgKiByZXRhaW4gdGhl IGV4aXN0aW5nIG9uZSBpbnN0ZWFkLgo+ID4gPj4+ICsgICAgICAgICAqCj4gPiA+Pj4gKyAgICAg ICAgICogRnVydGhlcm1vcmUsIHNpbmNlIHRoZSBETSBhdG9taWMgc3RhdGUgb25seSBjb250YWlu cyB0aGUgREMKPiA+ID4+PiArICAgICAgICAgKiBjb250ZXh0IGFuZCBjYW4gc2FmZWx5IGJlIGFu bnVsbGVkLCB3ZSBjYW4gZnJlZSB0aGUgc3RhdGUKPiA+ID4+PiArICAgICAgICAgKiBhbmQgY2xl YXIgdGhlIGFzc29jaWF0ZWQgcHJpdmF0ZSBvYmplY3Qgbm93IHRvIGZyZWUKPiA+ID4+PiArICAg ICAgICAgKiBzb21lIG1lbW9yeSBhbmQgYXZvaWQgYSBwb3NzaWJsZSB1c2UtYWZ0ZXItZnJlZSBs YXRlci4KPiA+ID4+PiAgICAgICAgICAgICovCj4gPiA+Pj4gLSAgICAgICAgc3RydWN0IGRtX2F0 b21pY19zdGF0ZSAqbmV3X2RtX3N0YXRlLCAqb2xkX2RtX3N0YXRlOwo+ID4gPj4+Cj4gPiA+Pj4g LSAgICAgICAgbmV3X2RtX3N0YXRlID0gZG1fYXRvbWljX2dldF9uZXdfc3RhdGUoc3RhdGUpOwo+ ID4gPj4+IC0gICAgICAgIG9sZF9kbV9zdGF0ZSA9IGRtX2F0b21pY19nZXRfb2xkX3N0YXRlKHN0 YXRlKTsKPiA+ID4+PiArICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3RhdGUtPm51bV9wcml2YXRl X29ianM7IGkrKykgewo+ID4gPj4+ICsgICAgICAgICAgICBzdHJ1Y3QgZHJtX3ByaXZhdGVfb2Jq ICpvYmogPSBzdGF0ZS0+cHJpdmF0ZV9vYmpzW2ldLnB0cjsKPiA+ID4+Pgo+ID4gPj4+IC0gICAg ICAgIGlmIChuZXdfZG1fc3RhdGUgJiYgb2xkX2RtX3N0YXRlKSB7Cj4gPiA+Pj4gLSAgICAgICAg ICAgIGlmIChuZXdfZG1fc3RhdGUtPmNvbnRleHQpCj4gPiA+Pj4gLSAgICAgICAgICAgICAgICBk Y19yZWxlYXNlX3N0YXRlKG5ld19kbV9zdGF0ZS0+Y29udGV4dCk7Cj4gPiA+Pj4gKyAgICAgICAg ICAgIGlmIChvYmotPmZ1bmNzID09IGFkZXYtPmRtLmF0b21pY19vYmouZnVuY3MpIHsKPiA+ID4+ PiArICAgICAgICAgICAgICAgIGludCBqID0gc3RhdGUtPm51bV9wcml2YXRlX29ianMtMTsKPiA+ ID4+Pgo+ID4gPj4+IC0gICAgICAgICAgICBuZXdfZG1fc3RhdGUtPmNvbnRleHQgPSBvbGRfZG1f c3RhdGUtPmNvbnRleHQ7Cj4gPiA+Pj4gKyAgICAgICAgICAgICAgICBkbV9hdG9taWNfZGVzdHJv eV9zdGF0ZShvYmosCj4gPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5wcml2 YXRlX29ianNbaV0uc3RhdGUpOwo+ID4gPj4+ICsKPiA+ID4+PiArICAgICAgICAgICAgICAgIC8q IElmIGkgaXMgbm90IGF0IHRoZSBlbmQgb2YgdGhlIGFycmF5IHRoZW4gdGhlCj4gPiA+Pj4gKyAg ICAgICAgICAgICAgICAgKiBsYXN0IGVsZW1lbnQgbmVlZHMgdG8gYmUgbW92ZWQgdG8gd2hlcmUg aSB3YXMKPiA+ID4+PiArICAgICAgICAgICAgICAgICAqIGJlZm9yZSB0aGUgYXJyYXkgY2FuIHNh ZmVseSBiZSB0cnVuY2F0ZWQuCj4gPiA+Pj4gKyAgICAgICAgICAgICAgICAgKi8KPiA+ID4+PiAr ICAgICAgICAgICAgICAgIGlmIChpICE9IGopCj4gPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAg c3RhdGUtPnByaXZhdGVfb2Jqc1tpXSA9Cj4gPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAg IHN0YXRlLT5wcml2YXRlX29ianNbal07Cj4gPiA+Pj4KPiA+ID4+PiAtICAgICAgICAgICAgaWYg KG9sZF9kbV9zdGF0ZS0+Y29udGV4dCkKPiA+ID4+PiAtICAgICAgICAgICAgICAgIGRjX3JldGFp bl9zdGF0ZShvbGRfZG1fc3RhdGUtPmNvbnRleHQpOwo+ID4gPj4+ICsgICAgICAgICAgICAgICAg c3RhdGUtPnByaXZhdGVfb2Jqc1tqXS5wdHIgPSBOVUxMOwo+ID4gPj4+ICsgICAgICAgICAgICAg ICAgc3RhdGUtPnByaXZhdGVfb2Jqc1tqXS5zdGF0ZSA9IE5VTEw7Cj4gPiA+Pj4gKyAgICAgICAg ICAgICAgICBzdGF0ZS0+cHJpdmF0ZV9vYmpzW2pdLm9sZF9zdGF0ZSA9IE5VTEw7Cj4gPiA+Pj4g KyAgICAgICAgICAgICAgICBzdGF0ZS0+cHJpdmF0ZV9vYmpzW2pdLm5ld19zdGF0ZSA9IE5VTEw7 Cj4gPiA+Pj4gKwo+ID4gPj4+ICsgICAgICAgICAgICAgICAgc3RhdGUtPm51bV9wcml2YXRlX29i anMgPSBqOwo+ID4gPj4+ICsgICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiA+Pj4gKyAgICAgICAg ICAgIH0KPiA+ID4+PiAgICAgICAgICAgfQo+ID4gPj4+ICAgICAgIH0KPiA+ID4+Pgo+ID4gPj4+ IC0tCj4gPiA+Pj4gMi4yNy4wCj4gPiA+Pj4KPiA+ID4+Cj4gPiA+Cj4gPgo+ID4gX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiA+IGRyaS1kZXZlbCBtYWls aW5nIGxpc3QKPiA+IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiA+IGh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCj4KPgo+Cj4g LS0KPiBEYW5pZWwgVmV0dGVyCj4gU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9u Cj4gaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KYW1kLWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9h bWQtZ2Z4Cg==