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=-10.1 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,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 E9689C433E3 for ; Mon, 27 Jul 2020 21:09:44 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 8A3F320786 for ; Mon, 27 Jul 2020 21:09:44 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=ffwll.ch header.i=@ffwll.ch header.b="FRD/breX" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726327AbgG0VJn (ORCPT ); Mon, 27 Jul 2020 17:09:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44432 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726140AbgG0VJm (ORCPT ); Mon, 27 Jul 2020 17:09:42 -0400 Received: from mail-ot1-x343.google.com (mail-ot1-x343.google.com [IPv6:2607:f8b0:4864:20::343]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C41C7C061794 for ; Mon, 27 Jul 2020 14:09:42 -0700 (PDT) Received: by mail-ot1-x343.google.com with SMTP id o72so7801762ota.11 for ; Mon, 27 Jul 2020 14:09:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=sVrhOI0oWt1hiMCtMZYhDjKeUZIuI1k5sXWV4N3yEl8=; b=FRD/breXAwpWD8QDqcmN3tYazNngjpp3utCTQSmN4Z8W9aeKDSGA0A+6ME9KRj/oII kCjodM4aI0IPh0o3g5lhRH47NVUUO7sNHUONXUbrLPZSMZZMgwiF7JBhk6z0YwDqjoQ7 d6Wbh//FFKXQGN9KvmYEjzczKp9Se/KXLp6iM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=sVrhOI0oWt1hiMCtMZYhDjKeUZIuI1k5sXWV4N3yEl8=; b=EHffydNSGkSWKMrMgrj1jRYoncDlHmMflme63NT3lkV0fCqLviip2aHf42sad9xu4U 8oG+qay3SSxmGDdLp7MgSV7JzoeONNdgJCAEngaJqig4eczK7VRMAwuDtU3zWtXU/VnC i6EjbG9H+bFsmcSKKku065pSgtyhQJyTHn1jTTXMGMvwK0cV0x4t0Bh9Pcwd42K40Baf 2wBoSeCSNt97FEE0+GJTFAqwOydLUy1jP2BENRsTwIUERy2BZusfJtZYz+EIRaIND1im ln0WH3sWv0+P0++Bdrr+UvTxzgKD48T3UQfkcM0Pup4bZnoTGuYS6yBhgt9enjVYB4qT M3Bw== X-Gm-Message-State: AOAM531OJHkxs+161adJaS8BE1kAI7h7Gfq9QTi42NkkYaeTAn5STMeh LJVjatfFVA1vkbpSMfywrt1LrM/847gihqYoo+uR0A== X-Google-Smtp-Source: ABdhPJz6HArexn/UOG7ZWlFLAh+o2coTB14vkM72eseTd4rWdhJcqfmDRX4ifEC9KTBIXB8KozQxeWmvvcpWfzHUma8= X-Received: by 2002:a05:6830:1e71:: with SMTP id m17mr8548782otr.188.1595884182094; Mon, 27 Jul 2020 14:09:42 -0700 (PDT) MIME-Version: 1.0 References: <3b7e3e50-2ff7-eff3-2ffc-abaa4b36ce7f@amd.com> In-Reply-To: From: Daniel Vetter Date: Mon, 27 Jul 2020 23:09:30 +0200 Message-ID: Subject: Re: [PATCH] drm/amd/display: Clear dm_state for fast updates To: =?UTF-8?Q?Christian_K=C3=B6nig?= Cc: "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" 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 Mon, Jul 27, 2020 at 10: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. Just looked a bit more at this struct dc_state, and that looks a lot like an atomic side-wagon. I don't think that works as a private state, this should probably be embedded into a subclass of drm_atomic_state. And probably a lot of these pointers moved to other places I think, or I'm not entirely clear on what exactly this stuff is needed for ... dc_state is also refcounted, which is definitely rather funny for a state structure. Feels like this entire thing (how the overall dc state machinery is glued into atomic) isn't quite thought thru just yet :-/ -Daniel > 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. > > 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 --=20 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=-9.8 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,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 D458AC433E1 for ; Mon, 27 Jul 2020 21:09:45 +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 A33E320786 for ; Mon, 27 Jul 2020 21:09:45 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ffwll.ch header.i=@ffwll.ch header.b="FRD/breX" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A33E320786 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ffwll.ch 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 DB54989F45; Mon, 27 Jul 2020 21:09:43 +0000 (UTC) Received: from mail-ot1-x341.google.com (mail-ot1-x341.google.com [IPv6:2607:f8b0:4864:20::341]) by gabe.freedesktop.org (Postfix) with ESMTPS id E91D989F45 for ; Mon, 27 Jul 2020 21:09:42 +0000 (UTC) Received: by mail-ot1-x341.google.com with SMTP id w17so13386165otl.4 for ; Mon, 27 Jul 2020 14:09:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=sVrhOI0oWt1hiMCtMZYhDjKeUZIuI1k5sXWV4N3yEl8=; b=FRD/breXAwpWD8QDqcmN3tYazNngjpp3utCTQSmN4Z8W9aeKDSGA0A+6ME9KRj/oII kCjodM4aI0IPh0o3g5lhRH47NVUUO7sNHUONXUbrLPZSMZZMgwiF7JBhk6z0YwDqjoQ7 d6Wbh//FFKXQGN9KvmYEjzczKp9Se/KXLp6iM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=sVrhOI0oWt1hiMCtMZYhDjKeUZIuI1k5sXWV4N3yEl8=; b=X67We2h8Xj8slfv8nlOyFqHMmG9xOnzJY7pexdkg0pwxVG7fvvF2xuM1vDv/FIj/qc OztOTJfz29qTUY0frzUtfXeXe23GGRhIbP9ah97mFgdHpAG8kUJqtUrt4H1XbLP7u0CC qhPuoprfjn1v1QGf2HdyLB8Od4urZdr3SMBDOy3scTB4b6SXJB9yoiugmTc3hYRrib8F p7C493QQQQmy1mXE2x4Vy1r3PgGS/pqjDbBLyvE0p5Clonin7rILO8yyy7CB2x8gF7kK jrogaHPn0y83pzhdd66kIm5xnfaWEdnicohnqOeCYoRfXhus6mlruz4YFcexJCDuUWTv hFaA== X-Gm-Message-State: AOAM531/EFhcFqan3i3jGGqwxK20QI1L1haeDal7sALhRjS7gGxDxRws kjSx0rr/v08yCBSzFX29NTTZvgrTRbr0oDPqEHcx1Q== X-Google-Smtp-Source: ABdhPJz6HArexn/UOG7ZWlFLAh+o2coTB14vkM72eseTd4rWdhJcqfmDRX4ifEC9KTBIXB8KozQxeWmvvcpWfzHUma8= X-Received: by 2002:a05:6830:1e71:: with SMTP id m17mr8548782otr.188.1595884182094; Mon, 27 Jul 2020 14:09:42 -0700 (PDT) MIME-Version: 1.0 References: <3b7e3e50-2ff7-eff3-2ffc-abaa4b36ce7f@amd.com> In-Reply-To: From: Daniel Vetter Date: Mon, 27 Jul 2020 23:09:30 +0200 Message-ID: Subject: Re: [PATCH] drm/amd/display: Clear dm_state for fast updates To: =?UTF-8?Q?Christian_K=C3=B6nig?= X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 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" , "regressions@leemhuis.info" , "amd-gfx@lists.freedesktop.org" , Alexander Deucher , Andrew Morton , "anthony.ruhier@gmail.com" , "Kazlauskas, Nicholas" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" T24gTW9uLCBKdWwgMjcsIDIwMjAgYXQgMTA6MjkgUE0gRGFuaWVsIFZldHRlciA8ZGFuaWVsQGZm d2xsLmNoPiB3cm90ZToKPgo+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+IHRoZSBkbSBzdGF0ZSBzdHVmZiB3aGVuIHJlYWxseSBuZWVkZWQuCgpKdXN0IGxv b2tlZCBhIGJpdCBtb3JlIGF0IHRoaXMgc3RydWN0IGRjX3N0YXRlLCBhbmQgdGhhdCBsb29rcyBh IGxvdApsaWtlIGFuIGF0b21pYyBzaWRlLXdhZ29uLiBJIGRvbid0IHRoaW5rIHRoYXQgd29ya3Mg YXMgYSBwcml2YXRlCnN0YXRlLCB0aGlzIHNob3VsZCBwcm9iYWJseSBiZSBlbWJlZGRlZCBpbnRv IGEgc3ViY2xhc3Mgb2YKZHJtX2F0b21pY19zdGF0ZS4KCkFuZCBwcm9iYWJseSBhIGxvdCBvZiB0 aGVzZSBwb2ludGVycyBtb3ZlZCB0byBvdGhlciBwbGFjZXMgSSB0aGluaywgb3IKSSdtIG5vdCBl bnRpcmVseSBjbGVhciBvbiB3aGF0IGV4YWN0bHkgdGhpcyBzdHVmZiBpcyBuZWVkZWQgZm9yIC4u LgoKZGNfc3RhdGUgaXMgYWxzbyByZWZjb3VudGVkLCB3aGljaCBpcyBkZWZpbml0ZWx5IHJhdGhl ciBmdW5ueSBmb3IgYQpzdGF0ZSBzdHJ1Y3R1cmUuCgpGZWVscyBsaWtlIHRoaXMgZW50aXJlIHRo aW5nIChob3cgdGhlIG92ZXJhbGwgZGMgc3RhdGUgbWFjaGluZXJ5IGlzCmdsdWVkIGludG8gYXRv bWljKSBpc24ndCBxdWl0ZSB0aG91Z2h0IHRocnUganVzdCB5ZXQgOi0vCi1EYW5pZWwKCj4gV2Ug Y291bGQgYWxzbyBzcHJpbmtsZSB0aGUgZHJtX2NydGNfY29tbWl0IHN0cnVjdHVyZSBhcm91bmQg YSBiaXQKPiAoaXQncyB0aGUgZ2x1ZSB0aGF0IHByb3ZpZGVzIHRoZSBzeW5jaHJvbml6YXRpb24g YWNyb3NzIGNvbW1pdHMpLCBidXQKPiBzaW5jZSB5b3VyIGRtIHN0YXRlIGlzIGdsb2JhbCBqdXN0 IGdyYWJiaW5nIGFsbCBjcnRjIHN0YXRlcwo+IHVuY29uZGl0aW9uYWxseSBhcyBwYXJ0IG9mIHRo YXQgaXMgcHJvYmFibHkgYmVzdC4KPgo+ID4gPiBXaGlsZSB3ZSBjb3VsZCBkdXBsaWNhdGUgYSBj b3B5IG9mIHRoYXQgY29kZSB3aXRoIG5vdGhpbmcgYnV0IHRoZQo+ID4gPiB3b3JrcXVldWUgY2hh bmdlZCB0aGF0IGlzbid0IHNvbWV0aGluZyBJJ2QgcmVhbGx5IGxpa2UgdG8gbWFpbnRhaW4KPiA+ ID4gZ29pbmcgZm9yd2FyZC4KPiA+Cj4gPiBJJ20gbm90IHRhbGtpbmcgYWJvdXQgZHVwbGljYXRp bmcgdGhlIGNvZGUsIEknbSB0YWxraW5nIGFib3V0IGZpeGluZyB0aGUKPiA+IGhlbHBlcnMuIEkg ZG9uJ3Qga25vdyB0aGF0IGNvZGUgd2VsbCwgYnV0IGZyb20gdGhlIG91dHNpZGUgaXQgc291bmRz Cj4gPiBsaWtlIGEgYnVnIHRoZXJlLgo+ID4KPiA+IEFuZCBleGVjdXRpbmcgd29yayBpdGVtcyBp biB0aGUgb3JkZXIgdGhleSBhcmUgc3VibWl0dGVkIGlzIHRyaXZpYWwuCj4gPgo+ID4gSGFkIGFu eWJvZHkgcGluZ2VkIERhbmllbCBvciBvdGhlciBwZW9wbGUgZmFtaWxpYXIgd2l0aCB0aGUgaGVs cGVyIGNvZGUKPiA+IGFib3V0IGl0Pwo+Cj4gWWVhaCBzb21ldGhpbmcgaXMgd3JvbmcgaGVyZSwg YW5kIHRoZSBmaXggbG9va3MgaG9ycmlibGUgOi0pCj4KPiBBc2lkZSwgSSd2ZSBhbHNvIHNlZW4g c29tZSByZWNlbnQgZGlzY3Vzc2lvbiBmbGFyZSB1cCBhYm91dAo+IGRybV9hdG9taWNfc3RhdGVf Z2V0L3B1dCB1c2VkIHRvIHBhcGVyIG92ZXIgc29tZSBvdGhlciB1c2UtYWZ0ZXItZnJlZSwKPiBi dXQgdGhpcyB0aW1lIHJlbGF0ZWQgdG8gaW50ZXJydXB0IGhhbmRsZXJzLiBNYXliZSBhIGZldyBy dWxlcyBhYm91dAo+IHRoYXQ6Cj4gLSBkb250Cj4gLSBlc3BlY2lhbGx5IG5vdCB3aGVuIGl0J3Mg aW50ZXJydXB0IGhhbmRsZXJzLCBiZWNhdXNlIHlvdSBjYW4ndCBjYWxsCj4gZHJtX2F0b21pY19z dGF0ZV9wdXQgZnJvbSBpbnRlcnJ1cHQgaGFuZGxlcnMuCj4KPiBJbnN0ZWFkIGhhdmUgYW4gc3Bp bl9sb2NrX2lycSB0byBwcm90ZWN0IHRoZSBzaGFyZWQgZGF0ZSB3aXRoIHlvdXIKPiBpbnRlcnJ1 cHQgaGFuZGxlciwgYW5kIF9jb3B5XyB0aGUgZGF0ZSBvdmVyLiBUaGlzIGlzIGUuZy4gd2hhdAo+ IGRybV9jcnRjX2FybV92YmxhbmtfZXZlbnQgZG9lcy4KPgo+IENoZWVycywgRGFuaWVsCj4KPiA+ Cj4gPiBSZWdhcmRzLAo+ID4gQ2hyaXN0aWFuLgo+ID4KPiA+ID4KPiA+ID4gUmVnYXJkcywKPiA+ ID4gTmljaG9sYXMgS2F6bGF1c2thcwo+ID4gPgo+ID4gPj4KPiA+ID4+Pgo+ID4gPj4+IFNpbmNl IHRoaXMgYnVnIGhhcyBvbmx5IGJlZW4gc3BvdHRlZCB3aXRoIGZhc3QgY29tbWl0cywgdGhpcyBw YXRjaAo+ID4gPj4+IGZpeGVzCj4gPiA+Pj4gdGhlIGJ1ZyBieSBjbGVhcmluZyB0aGUgZG1fc3Rh dGUgaW5zdGVhZCBvZiB1c2luZyB0aGUgb2xkIGRjX3N0YXRlIGZvcgo+ID4gPj4+IGZhc3QgdXBk YXRlcy4gSW4gYWRkaXRpb24sIHNpbmNlIGRtX3N0YXRlIGlzIG9ubHkgdXNlZCBmb3IgaXRzIGRj X3N0YXRlCj4gPiA+Pj4gYW5kIGFtZGdwdV9kbV9hdG9taWNfY29tbWl0X3RhaWwgd2lsbCByZXRh aW4gdGhlIGRjX3N0YXRlIGlmIG5vbmUgaXMKPiA+ID4+PiBmb3VuZCwKPiA+ID4+PiByZW1vdmlu ZyB0aGUgZG1fc3RhdGUgc2hvdWxkIG5vdCBoYXZlIGFueSBjb25zZXF1ZW5jZXMgaW4gZmFzdCB1 cGRhdGVzLgo+ID4gPj4+Cj4gPiA+Pj4gVGhpcyB1c2UtYWZ0ZXItZnJlZSBidWcgaGFzIGV4aXN0 ZWQgZm9yIGEgd2hpbGUgbm93LCBidXQgb25seSBjYXVzZWQgYQo+ID4gPj4+IG5vdGljZWFibGUg aXNzdWUgc3RhcnRpbmcgZnJvbSA1LjctcmMxIGR1ZSB0byAzMjAyZmE2MmYgKCJzbHViOgo+ID4g Pj4+IHJlbG9jYXRlCj4gPiA+Pj4gZnJlZWxpc3QgcG9pbnRlciB0byBtaWRkbGUgb2Ygb2JqZWN0 IikgbW92aW5nIHRoZSBmcmVlbGlzdCBwb2ludGVyIGZyb20KPiA+ID4+PiBkbV9zdGF0ZS0+YmFz ZSAod2hpY2ggd2FzIHVudXNlZCkgdG8gZG1fc3RhdGUtPmNvbnRleHQgKHdoaWNoIGlzCj4gPiA+ Pj4gZGVyZWZlcmVuY2VkKS4KPiA+ID4+Pgo+ID4gPj4+IEJ1Z3ppbGxhOiBodHRwczovL2J1Z3pp bGxhLmtlcm5lbC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzM4Mwo+ID4gPj4+IEZpeGVzOiBiZDIw MGQxOTBmNDUgKCJkcm0vYW1kL2Rpc3BsYXk6IERvbid0IHJlcGxhY2UgdGhlIGRjX3N0YXRlCj4g PiA+Pj4gZm9yIGZhc3QgdXBkYXRlcyIpCj4gPiA+Pj4gUmVwb3J0ZWQtYnk6IER1bmNhbiA8MWk1 dDUuZHVuY2FuQGNveC5uZXQ+Cj4gPiA+Pj4gU2lnbmVkLW9mZi1ieTogTWF6aW4gUmV6ayA8bW5y emtAcHJvdG9ubWFpbC5jb20+Cj4gPiA+Pj4gLS0tCj4gPiA+Pj4gICAuLi4vZ3B1L2RybS9hbWQv ZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1X2RtLmMgfCAzNgo+ID4gPj4+ICsrKysrKysrKysrKysr LS0tLS0KPiA+ID4+PiAgIDEgZmlsZSBjaGFuZ2VkLCAyNyBpbnNlcnRpb25zKCspLCA5IGRlbGV0 aW9ucygtKQo+ID4gPj4+Cj4gPiA+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQv ZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1X2RtLmMKPiA+ID4+PiBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1X2RtLmMKPiA+ID4+PiBpbmRleCA4NmZmYTBjMjg4 MGYuLjcxMGVkYzcwZTM3ZSAxMDA2NDQKPiA+ID4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1k L2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbS5jCj4gPiA+Pj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG0uYwo+ID4gPj4+IEBAIC04NzE3LDIw ICs4NzE3LDM4IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2RtX2F0b21pY19jaGVjayhzdHJ1Y3QKPiA+ ID4+PiBkcm1fZGV2aWNlICpkZXYsCj4gPiA+Pj4gICAgICAgICAgICAqIHRoZSBzYW1lIHJlc291 cmNlLiBJZiB3ZSBoYXZlIGEgbmV3IERDIGNvbnRleHQgYXMgcGFydCBvZgo+ID4gPj4+ICAgICAg ICAgICAgKiB0aGUgRE0gYXRvbWljIHN0YXRlIGZyb20gdmFsaWRhdGlvbiB3ZSBuZWVkIHRvIGZy ZWUgaXQgYW5kCj4gPiA+Pj4gICAgICAgICAgICAqIHJldGFpbiB0aGUgZXhpc3Rpbmcgb25lIGlu c3RlYWQuCj4gPiA+Pj4gKyAgICAgICAgICoKPiA+ID4+PiArICAgICAgICAgKiBGdXJ0aGVybW9y ZSwgc2luY2UgdGhlIERNIGF0b21pYyBzdGF0ZSBvbmx5IGNvbnRhaW5zIHRoZSBEQwo+ID4gPj4+ ICsgICAgICAgICAqIGNvbnRleHQgYW5kIGNhbiBzYWZlbHkgYmUgYW5udWxsZWQsIHdlIGNhbiBm cmVlIHRoZSBzdGF0ZQo+ID4gPj4+ICsgICAgICAgICAqIGFuZCBjbGVhciB0aGUgYXNzb2NpYXRl ZCBwcml2YXRlIG9iamVjdCBub3cgdG8gZnJlZQo+ID4gPj4+ICsgICAgICAgICAqIHNvbWUgbWVt b3J5IGFuZCBhdm9pZCBhIHBvc3NpYmxlIHVzZS1hZnRlci1mcmVlIGxhdGVyLgo+ID4gPj4+ICAg ICAgICAgICAgKi8KPiA+ID4+PiAtICAgICAgICBzdHJ1Y3QgZG1fYXRvbWljX3N0YXRlICpuZXdf ZG1fc3RhdGUsICpvbGRfZG1fc3RhdGU7Cj4gPiA+Pj4KPiA+ID4+PiAtICAgICAgICBuZXdfZG1f c3RhdGUgPSBkbV9hdG9taWNfZ2V0X25ld19zdGF0ZShzdGF0ZSk7Cj4gPiA+Pj4gLSAgICAgICAg b2xkX2RtX3N0YXRlID0gZG1fYXRvbWljX2dldF9vbGRfc3RhdGUoc3RhdGUpOwo+ID4gPj4+ICsg ICAgICAgIGZvciAoaSA9IDA7IGkgPCBzdGF0ZS0+bnVtX3ByaXZhdGVfb2JqczsgaSsrKSB7Cj4g PiA+Pj4gKyAgICAgICAgICAgIHN0cnVjdCBkcm1fcHJpdmF0ZV9vYmogKm9iaiA9IHN0YXRlLT5w cml2YXRlX29ianNbaV0ucHRyOwo+ID4gPj4+Cj4gPiA+Pj4gLSAgICAgICAgaWYgKG5ld19kbV9z dGF0ZSAmJiBvbGRfZG1fc3RhdGUpIHsKPiA+ID4+PiAtICAgICAgICAgICAgaWYgKG5ld19kbV9z dGF0ZS0+Y29udGV4dCkKPiA+ID4+PiAtICAgICAgICAgICAgICAgIGRjX3JlbGVhc2Vfc3RhdGUo bmV3X2RtX3N0YXRlLT5jb250ZXh0KTsKPiA+ID4+PiArICAgICAgICAgICAgaWYgKG9iai0+ZnVu Y3MgPT0gYWRldi0+ZG0uYXRvbWljX29iai5mdW5jcykgewo+ID4gPj4+ICsgICAgICAgICAgICAg ICAgaW50IGogPSBzdGF0ZS0+bnVtX3ByaXZhdGVfb2Jqcy0xOwo+ID4gPj4+Cj4gPiA+Pj4gLSAg ICAgICAgICAgIG5ld19kbV9zdGF0ZS0+Y29udGV4dCA9IG9sZF9kbV9zdGF0ZS0+Y29udGV4dDsK PiA+ID4+PiArICAgICAgICAgICAgICAgIGRtX2F0b21pY19kZXN0cm95X3N0YXRlKG9iaiwKPiA+ ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnByaXZhdGVfb2Jqc1tpXS5zdGF0 ZSk7Cj4gPiA+Pj4gKwo+ID4gPj4+ICsgICAgICAgICAgICAgICAgLyogSWYgaSBpcyBub3QgYXQg dGhlIGVuZCBvZiB0aGUgYXJyYXkgdGhlbiB0aGUKPiA+ID4+PiArICAgICAgICAgICAgICAgICAq IGxhc3QgZWxlbWVudCBuZWVkcyB0byBiZSBtb3ZlZCB0byB3aGVyZSBpIHdhcwo+ID4gPj4+ICsg ICAgICAgICAgICAgICAgICogYmVmb3JlIHRoZSBhcnJheSBjYW4gc2FmZWx5IGJlIHRydW5jYXRl ZC4KPiA+ID4+PiArICAgICAgICAgICAgICAgICAqLwo+ID4gPj4+ICsgICAgICAgICAgICAgICAg aWYgKGkgIT0gaikKPiA+ID4+PiArICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+cHJpdmF0ZV9v YmpzW2ldID0KPiA+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnByaXZhdGVf b2Jqc1tqXTsKPiA+ID4+Pgo+ID4gPj4+IC0gICAgICAgICAgICBpZiAob2xkX2RtX3N0YXRlLT5j b250ZXh0KQo+ID4gPj4+IC0gICAgICAgICAgICAgICAgZGNfcmV0YWluX3N0YXRlKG9sZF9kbV9z dGF0ZS0+Y29udGV4dCk7Cj4gPiA+Pj4gKyAgICAgICAgICAgICAgICBzdGF0ZS0+cHJpdmF0ZV9v YmpzW2pdLnB0ciA9IE5VTEw7Cj4gPiA+Pj4gKyAgICAgICAgICAgICAgICBzdGF0ZS0+cHJpdmF0 ZV9vYmpzW2pdLnN0YXRlID0gTlVMTDsKPiA+ID4+PiArICAgICAgICAgICAgICAgIHN0YXRlLT5w cml2YXRlX29ianNbal0ub2xkX3N0YXRlID0gTlVMTDsKPiA+ID4+PiArICAgICAgICAgICAgICAg IHN0YXRlLT5wcml2YXRlX29ianNbal0ubmV3X3N0YXRlID0gTlVMTDsKPiA+ID4+PiArCj4gPiA+ Pj4gKyAgICAgICAgICAgICAgICBzdGF0ZS0+bnVtX3ByaXZhdGVfb2JqcyA9IGo7Cj4gPiA+Pj4g KyAgICAgICAgICAgICAgICBicmVhazsKPiA+ID4+PiArICAgICAgICAgICAgfQo+ID4gPj4+ICAg ICAgICAgICB9Cj4gPiA+Pj4gICAgICAgfQo+ID4gPj4+Cj4gPiA+Pj4gLS0KPiA+ID4+PiAyLjI3 LjAKPiA+ID4+Pgo+ID4gPj4KPiA+ID4KPiA+Cj4gPiBfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwo+ID4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+ID4gZHJp LWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+ID4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwKPgo+Cj4KPiAtLQo+IERhbmllbCBWZXR0 ZXIKPiBTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KPiBodHRwOi8vYmxvZy5m ZndsbC5jaAoKCgotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29y cG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vZHJpLWRldmVsCg== 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=-9.8 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,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 E2800C433E0 for ; Mon, 27 Jul 2020 21:09:44 +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 9298920809 for ; Mon, 27 Jul 2020 21:09:44 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ffwll.ch header.i=@ffwll.ch header.b="FRD/breX" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9298920809 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ffwll.ch 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 1FC3489FD4; Mon, 27 Jul 2020 21:09:44 +0000 (UTC) Received: from mail-ot1-x344.google.com (mail-ot1-x344.google.com [IPv6:2607:f8b0:4864:20::344]) by gabe.freedesktop.org (Postfix) with ESMTPS id EE8E389FD4 for ; Mon, 27 Jul 2020 21:09:42 +0000 (UTC) Received: by mail-ot1-x344.google.com with SMTP id c25so13358788otf.7 for ; Mon, 27 Jul 2020 14:09:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=sVrhOI0oWt1hiMCtMZYhDjKeUZIuI1k5sXWV4N3yEl8=; b=FRD/breXAwpWD8QDqcmN3tYazNngjpp3utCTQSmN4Z8W9aeKDSGA0A+6ME9KRj/oII kCjodM4aI0IPh0o3g5lhRH47NVUUO7sNHUONXUbrLPZSMZZMgwiF7JBhk6z0YwDqjoQ7 d6Wbh//FFKXQGN9KvmYEjzczKp9Se/KXLp6iM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=sVrhOI0oWt1hiMCtMZYhDjKeUZIuI1k5sXWV4N3yEl8=; b=bP7xCnn7piZiqw4hFpGEQt+n1qJsc0ZZDyx+v0evTsYcCG0trNsbtBM2iY6xdi050K O0x85QcN56EI9XJQWHOKNXWX6AyDyzwLUHW9RSgogwWDEbMq7vo4Y0YOWYwXcIe+axZc eP1sCrGPdMwv+WDL4lY9pa14xfDJrlq0x6I8LmBXVNOOQ3zfL6TMmZ15gAJ7JsM1cKqI pqG/oGCtE/ILGwp0YX5p2D0/rrq821vXrvAzfeDB20472SSKxS08k5IUfM2D9NJFNDGG tZSJTt3gVHpsdg2PeOIcWcsEgLV3NnDJtDNF3uxmRntTsC61PWm1NuRZq6HvfQfU/nOF zD2A== X-Gm-Message-State: AOAM530p6ZO0XgX00FAy+Xlely3reYQGFg+Rcc5PbAj3TELcPPGObASK +QwHsz/88WNZis54I+/L5kgyHGNr1tUPawzbpVyoIQ== X-Google-Smtp-Source: ABdhPJz6HArexn/UOG7ZWlFLAh+o2coTB14vkM72eseTd4rWdhJcqfmDRX4ifEC9KTBIXB8KozQxeWmvvcpWfzHUma8= X-Received: by 2002:a05:6830:1e71:: with SMTP id m17mr8548782otr.188.1595884182094; Mon, 27 Jul 2020 14:09:42 -0700 (PDT) MIME-Version: 1.0 References: <3b7e3e50-2ff7-eff3-2ffc-abaa4b36ce7f@amd.com> In-Reply-To: From: Daniel Vetter Date: Mon, 27 Jul 2020 23:09:30 +0200 Message-ID: Subject: Re: [PATCH] drm/amd/display: Clear dm_state for fast updates To: =?UTF-8?Q?Christian_K=C3=B6nig?= 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: , 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" , "regressions@leemhuis.info" , "amd-gfx@lists.freedesktop.org" , Alexander Deucher , Andrew Morton , "anthony.ruhier@gmail.com" , "Kazlauskas, Nicholas" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: amd-gfx-bounces@lists.freedesktop.org Sender: "amd-gfx" T24gTW9uLCBKdWwgMjcsIDIwMjAgYXQgMTA6MjkgUE0gRGFuaWVsIFZldHRlciA8ZGFuaWVsQGZm d2xsLmNoPiB3cm90ZToKPgo+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+IHRoZSBkbSBzdGF0ZSBzdHVmZiB3aGVuIHJlYWxseSBuZWVkZWQuCgpKdXN0IGxv b2tlZCBhIGJpdCBtb3JlIGF0IHRoaXMgc3RydWN0IGRjX3N0YXRlLCBhbmQgdGhhdCBsb29rcyBh IGxvdApsaWtlIGFuIGF0b21pYyBzaWRlLXdhZ29uLiBJIGRvbid0IHRoaW5rIHRoYXQgd29ya3Mg YXMgYSBwcml2YXRlCnN0YXRlLCB0aGlzIHNob3VsZCBwcm9iYWJseSBiZSBlbWJlZGRlZCBpbnRv IGEgc3ViY2xhc3Mgb2YKZHJtX2F0b21pY19zdGF0ZS4KCkFuZCBwcm9iYWJseSBhIGxvdCBvZiB0 aGVzZSBwb2ludGVycyBtb3ZlZCB0byBvdGhlciBwbGFjZXMgSSB0aGluaywgb3IKSSdtIG5vdCBl bnRpcmVseSBjbGVhciBvbiB3aGF0IGV4YWN0bHkgdGhpcyBzdHVmZiBpcyBuZWVkZWQgZm9yIC4u LgoKZGNfc3RhdGUgaXMgYWxzbyByZWZjb3VudGVkLCB3aGljaCBpcyBkZWZpbml0ZWx5IHJhdGhl ciBmdW5ueSBmb3IgYQpzdGF0ZSBzdHJ1Y3R1cmUuCgpGZWVscyBsaWtlIHRoaXMgZW50aXJlIHRo aW5nIChob3cgdGhlIG92ZXJhbGwgZGMgc3RhdGUgbWFjaGluZXJ5IGlzCmdsdWVkIGludG8gYXRv bWljKSBpc24ndCBxdWl0ZSB0aG91Z2h0IHRocnUganVzdCB5ZXQgOi0vCi1EYW5pZWwKCj4gV2Ug Y291bGQgYWxzbyBzcHJpbmtsZSB0aGUgZHJtX2NydGNfY29tbWl0IHN0cnVjdHVyZSBhcm91bmQg YSBiaXQKPiAoaXQncyB0aGUgZ2x1ZSB0aGF0IHByb3ZpZGVzIHRoZSBzeW5jaHJvbml6YXRpb24g YWNyb3NzIGNvbW1pdHMpLCBidXQKPiBzaW5jZSB5b3VyIGRtIHN0YXRlIGlzIGdsb2JhbCBqdXN0 IGdyYWJiaW5nIGFsbCBjcnRjIHN0YXRlcwo+IHVuY29uZGl0aW9uYWxseSBhcyBwYXJ0IG9mIHRo YXQgaXMgcHJvYmFibHkgYmVzdC4KPgo+ID4gPiBXaGlsZSB3ZSBjb3VsZCBkdXBsaWNhdGUgYSBj b3B5IG9mIHRoYXQgY29kZSB3aXRoIG5vdGhpbmcgYnV0IHRoZQo+ID4gPiB3b3JrcXVldWUgY2hh bmdlZCB0aGF0IGlzbid0IHNvbWV0aGluZyBJJ2QgcmVhbGx5IGxpa2UgdG8gbWFpbnRhaW4KPiA+ ID4gZ29pbmcgZm9yd2FyZC4KPiA+Cj4gPiBJJ20gbm90IHRhbGtpbmcgYWJvdXQgZHVwbGljYXRp bmcgdGhlIGNvZGUsIEknbSB0YWxraW5nIGFib3V0IGZpeGluZyB0aGUKPiA+IGhlbHBlcnMuIEkg ZG9uJ3Qga25vdyB0aGF0IGNvZGUgd2VsbCwgYnV0IGZyb20gdGhlIG91dHNpZGUgaXQgc291bmRz Cj4gPiBsaWtlIGEgYnVnIHRoZXJlLgo+ID4KPiA+IEFuZCBleGVjdXRpbmcgd29yayBpdGVtcyBp biB0aGUgb3JkZXIgdGhleSBhcmUgc3VibWl0dGVkIGlzIHRyaXZpYWwuCj4gPgo+ID4gSGFkIGFu eWJvZHkgcGluZ2VkIERhbmllbCBvciBvdGhlciBwZW9wbGUgZmFtaWxpYXIgd2l0aCB0aGUgaGVs cGVyIGNvZGUKPiA+IGFib3V0IGl0Pwo+Cj4gWWVhaCBzb21ldGhpbmcgaXMgd3JvbmcgaGVyZSwg YW5kIHRoZSBmaXggbG9va3MgaG9ycmlibGUgOi0pCj4KPiBBc2lkZSwgSSd2ZSBhbHNvIHNlZW4g c29tZSByZWNlbnQgZGlzY3Vzc2lvbiBmbGFyZSB1cCBhYm91dAo+IGRybV9hdG9taWNfc3RhdGVf Z2V0L3B1dCB1c2VkIHRvIHBhcGVyIG92ZXIgc29tZSBvdGhlciB1c2UtYWZ0ZXItZnJlZSwKPiBi dXQgdGhpcyB0aW1lIHJlbGF0ZWQgdG8gaW50ZXJydXB0IGhhbmRsZXJzLiBNYXliZSBhIGZldyBy dWxlcyBhYm91dAo+IHRoYXQ6Cj4gLSBkb250Cj4gLSBlc3BlY2lhbGx5IG5vdCB3aGVuIGl0J3Mg aW50ZXJydXB0IGhhbmRsZXJzLCBiZWNhdXNlIHlvdSBjYW4ndCBjYWxsCj4gZHJtX2F0b21pY19z dGF0ZV9wdXQgZnJvbSBpbnRlcnJ1cHQgaGFuZGxlcnMuCj4KPiBJbnN0ZWFkIGhhdmUgYW4gc3Bp bl9sb2NrX2lycSB0byBwcm90ZWN0IHRoZSBzaGFyZWQgZGF0ZSB3aXRoIHlvdXIKPiBpbnRlcnJ1 cHQgaGFuZGxlciwgYW5kIF9jb3B5XyB0aGUgZGF0ZSBvdmVyLiBUaGlzIGlzIGUuZy4gd2hhdAo+ IGRybV9jcnRjX2FybV92YmxhbmtfZXZlbnQgZG9lcy4KPgo+IENoZWVycywgRGFuaWVsCj4KPiA+ Cj4gPiBSZWdhcmRzLAo+ID4gQ2hyaXN0aWFuLgo+ID4KPiA+ID4KPiA+ID4gUmVnYXJkcywKPiA+ ID4gTmljaG9sYXMgS2F6bGF1c2thcwo+ID4gPgo+ID4gPj4KPiA+ID4+Pgo+ID4gPj4+IFNpbmNl IHRoaXMgYnVnIGhhcyBvbmx5IGJlZW4gc3BvdHRlZCB3aXRoIGZhc3QgY29tbWl0cywgdGhpcyBw YXRjaAo+ID4gPj4+IGZpeGVzCj4gPiA+Pj4gdGhlIGJ1ZyBieSBjbGVhcmluZyB0aGUgZG1fc3Rh dGUgaW5zdGVhZCBvZiB1c2luZyB0aGUgb2xkIGRjX3N0YXRlIGZvcgo+ID4gPj4+IGZhc3QgdXBk YXRlcy4gSW4gYWRkaXRpb24sIHNpbmNlIGRtX3N0YXRlIGlzIG9ubHkgdXNlZCBmb3IgaXRzIGRj X3N0YXRlCj4gPiA+Pj4gYW5kIGFtZGdwdV9kbV9hdG9taWNfY29tbWl0X3RhaWwgd2lsbCByZXRh aW4gdGhlIGRjX3N0YXRlIGlmIG5vbmUgaXMKPiA+ID4+PiBmb3VuZCwKPiA+ID4+PiByZW1vdmlu ZyB0aGUgZG1fc3RhdGUgc2hvdWxkIG5vdCBoYXZlIGFueSBjb25zZXF1ZW5jZXMgaW4gZmFzdCB1 cGRhdGVzLgo+ID4gPj4+Cj4gPiA+Pj4gVGhpcyB1c2UtYWZ0ZXItZnJlZSBidWcgaGFzIGV4aXN0 ZWQgZm9yIGEgd2hpbGUgbm93LCBidXQgb25seSBjYXVzZWQgYQo+ID4gPj4+IG5vdGljZWFibGUg aXNzdWUgc3RhcnRpbmcgZnJvbSA1LjctcmMxIGR1ZSB0byAzMjAyZmE2MmYgKCJzbHViOgo+ID4g Pj4+IHJlbG9jYXRlCj4gPiA+Pj4gZnJlZWxpc3QgcG9pbnRlciB0byBtaWRkbGUgb2Ygb2JqZWN0 IikgbW92aW5nIHRoZSBmcmVlbGlzdCBwb2ludGVyIGZyb20KPiA+ID4+PiBkbV9zdGF0ZS0+YmFz ZSAod2hpY2ggd2FzIHVudXNlZCkgdG8gZG1fc3RhdGUtPmNvbnRleHQgKHdoaWNoIGlzCj4gPiA+ Pj4gZGVyZWZlcmVuY2VkKS4KPiA+ID4+Pgo+ID4gPj4+IEJ1Z3ppbGxhOiBodHRwczovL2J1Z3pp bGxhLmtlcm5lbC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzM4Mwo+ID4gPj4+IEZpeGVzOiBiZDIw MGQxOTBmNDUgKCJkcm0vYW1kL2Rpc3BsYXk6IERvbid0IHJlcGxhY2UgdGhlIGRjX3N0YXRlCj4g PiA+Pj4gZm9yIGZhc3QgdXBkYXRlcyIpCj4gPiA+Pj4gUmVwb3J0ZWQtYnk6IER1bmNhbiA8MWk1 dDUuZHVuY2FuQGNveC5uZXQ+Cj4gPiA+Pj4gU2lnbmVkLW9mZi1ieTogTWF6aW4gUmV6ayA8bW5y emtAcHJvdG9ubWFpbC5jb20+Cj4gPiA+Pj4gLS0tCj4gPiA+Pj4gICAuLi4vZ3B1L2RybS9hbWQv ZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1X2RtLmMgfCAzNgo+ID4gPj4+ICsrKysrKysrKysrKysr LS0tLS0KPiA+ID4+PiAgIDEgZmlsZSBjaGFuZ2VkLCAyNyBpbnNlcnRpb25zKCspLCA5IGRlbGV0 aW9ucygtKQo+ID4gPj4+Cj4gPiA+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQv ZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1X2RtLmMKPiA+ID4+PiBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1X2RtLmMKPiA+ID4+PiBpbmRleCA4NmZmYTBjMjg4 MGYuLjcxMGVkYzcwZTM3ZSAxMDA2NDQKPiA+ID4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1k L2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbS5jCj4gPiA+Pj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG0uYwo+ID4gPj4+IEBAIC04NzE3LDIw ICs4NzE3LDM4IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2RtX2F0b21pY19jaGVjayhzdHJ1Y3QKPiA+ ID4+PiBkcm1fZGV2aWNlICpkZXYsCj4gPiA+Pj4gICAgICAgICAgICAqIHRoZSBzYW1lIHJlc291 cmNlLiBJZiB3ZSBoYXZlIGEgbmV3IERDIGNvbnRleHQgYXMgcGFydCBvZgo+ID4gPj4+ICAgICAg ICAgICAgKiB0aGUgRE0gYXRvbWljIHN0YXRlIGZyb20gdmFsaWRhdGlvbiB3ZSBuZWVkIHRvIGZy ZWUgaXQgYW5kCj4gPiA+Pj4gICAgICAgICAgICAqIHJldGFpbiB0aGUgZXhpc3Rpbmcgb25lIGlu c3RlYWQuCj4gPiA+Pj4gKyAgICAgICAgICoKPiA+ID4+PiArICAgICAgICAgKiBGdXJ0aGVybW9y ZSwgc2luY2UgdGhlIERNIGF0b21pYyBzdGF0ZSBvbmx5IGNvbnRhaW5zIHRoZSBEQwo+ID4gPj4+ ICsgICAgICAgICAqIGNvbnRleHQgYW5kIGNhbiBzYWZlbHkgYmUgYW5udWxsZWQsIHdlIGNhbiBm cmVlIHRoZSBzdGF0ZQo+ID4gPj4+ICsgICAgICAgICAqIGFuZCBjbGVhciB0aGUgYXNzb2NpYXRl ZCBwcml2YXRlIG9iamVjdCBub3cgdG8gZnJlZQo+ID4gPj4+ICsgICAgICAgICAqIHNvbWUgbWVt b3J5IGFuZCBhdm9pZCBhIHBvc3NpYmxlIHVzZS1hZnRlci1mcmVlIGxhdGVyLgo+ID4gPj4+ICAg ICAgICAgICAgKi8KPiA+ID4+PiAtICAgICAgICBzdHJ1Y3QgZG1fYXRvbWljX3N0YXRlICpuZXdf ZG1fc3RhdGUsICpvbGRfZG1fc3RhdGU7Cj4gPiA+Pj4KPiA+ID4+PiAtICAgICAgICBuZXdfZG1f c3RhdGUgPSBkbV9hdG9taWNfZ2V0X25ld19zdGF0ZShzdGF0ZSk7Cj4gPiA+Pj4gLSAgICAgICAg b2xkX2RtX3N0YXRlID0gZG1fYXRvbWljX2dldF9vbGRfc3RhdGUoc3RhdGUpOwo+ID4gPj4+ICsg ICAgICAgIGZvciAoaSA9IDA7IGkgPCBzdGF0ZS0+bnVtX3ByaXZhdGVfb2JqczsgaSsrKSB7Cj4g PiA+Pj4gKyAgICAgICAgICAgIHN0cnVjdCBkcm1fcHJpdmF0ZV9vYmogKm9iaiA9IHN0YXRlLT5w cml2YXRlX29ianNbaV0ucHRyOwo+ID4gPj4+Cj4gPiA+Pj4gLSAgICAgICAgaWYgKG5ld19kbV9z dGF0ZSAmJiBvbGRfZG1fc3RhdGUpIHsKPiA+ID4+PiAtICAgICAgICAgICAgaWYgKG5ld19kbV9z dGF0ZS0+Y29udGV4dCkKPiA+ID4+PiAtICAgICAgICAgICAgICAgIGRjX3JlbGVhc2Vfc3RhdGUo bmV3X2RtX3N0YXRlLT5jb250ZXh0KTsKPiA+ID4+PiArICAgICAgICAgICAgaWYgKG9iai0+ZnVu Y3MgPT0gYWRldi0+ZG0uYXRvbWljX29iai5mdW5jcykgewo+ID4gPj4+ICsgICAgICAgICAgICAg ICAgaW50IGogPSBzdGF0ZS0+bnVtX3ByaXZhdGVfb2Jqcy0xOwo+ID4gPj4+Cj4gPiA+Pj4gLSAg ICAgICAgICAgIG5ld19kbV9zdGF0ZS0+Y29udGV4dCA9IG9sZF9kbV9zdGF0ZS0+Y29udGV4dDsK PiA+ID4+PiArICAgICAgICAgICAgICAgIGRtX2F0b21pY19kZXN0cm95X3N0YXRlKG9iaiwKPiA+ ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnByaXZhdGVfb2Jqc1tpXS5zdGF0 ZSk7Cj4gPiA+Pj4gKwo+ID4gPj4+ICsgICAgICAgICAgICAgICAgLyogSWYgaSBpcyBub3QgYXQg dGhlIGVuZCBvZiB0aGUgYXJyYXkgdGhlbiB0aGUKPiA+ID4+PiArICAgICAgICAgICAgICAgICAq IGxhc3QgZWxlbWVudCBuZWVkcyB0byBiZSBtb3ZlZCB0byB3aGVyZSBpIHdhcwo+ID4gPj4+ICsg ICAgICAgICAgICAgICAgICogYmVmb3JlIHRoZSBhcnJheSBjYW4gc2FmZWx5IGJlIHRydW5jYXRl ZC4KPiA+ID4+PiArICAgICAgICAgICAgICAgICAqLwo+ID4gPj4+ICsgICAgICAgICAgICAgICAg aWYgKGkgIT0gaikKPiA+ID4+PiArICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+cHJpdmF0ZV9v YmpzW2ldID0KPiA+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnByaXZhdGVf b2Jqc1tqXTsKPiA+ID4+Pgo+ID4gPj4+IC0gICAgICAgICAgICBpZiAob2xkX2RtX3N0YXRlLT5j b250ZXh0KQo+ID4gPj4+IC0gICAgICAgICAgICAgICAgZGNfcmV0YWluX3N0YXRlKG9sZF9kbV9z dGF0ZS0+Y29udGV4dCk7Cj4gPiA+Pj4gKyAgICAgICAgICAgICAgICBzdGF0ZS0+cHJpdmF0ZV9v YmpzW2pdLnB0ciA9IE5VTEw7Cj4gPiA+Pj4gKyAgICAgICAgICAgICAgICBzdGF0ZS0+cHJpdmF0 ZV9vYmpzW2pdLnN0YXRlID0gTlVMTDsKPiA+ID4+PiArICAgICAgICAgICAgICAgIHN0YXRlLT5w cml2YXRlX29ianNbal0ub2xkX3N0YXRlID0gTlVMTDsKPiA+ID4+PiArICAgICAgICAgICAgICAg IHN0YXRlLT5wcml2YXRlX29ianNbal0ubmV3X3N0YXRlID0gTlVMTDsKPiA+ID4+PiArCj4gPiA+ Pj4gKyAgICAgICAgICAgICAgICBzdGF0ZS0+bnVtX3ByaXZhdGVfb2JqcyA9IGo7Cj4gPiA+Pj4g KyAgICAgICAgICAgICAgICBicmVhazsKPiA+ID4+PiArICAgICAgICAgICAgfQo+ID4gPj4+ICAg ICAgICAgICB9Cj4gPiA+Pj4gICAgICAgfQo+ID4gPj4+Cj4gPiA+Pj4gLS0KPiA+ID4+PiAyLjI3 LjAKPiA+ID4+Pgo+ID4gPj4KPiA+ID4KPiA+Cj4gPiBfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwo+ID4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+ID4gZHJp LWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+ID4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwKPgo+Cj4KPiAtLQo+IERhbmllbCBWZXR0 ZXIKPiBTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KPiBodHRwOi8vYmxvZy5m ZndsbC5jaAoKCgotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29y cG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9hbWQtZ2Z4Cg==