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.5 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,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 63C88C636CA for ; Fri, 16 Jul 2021 18:45:29 +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 1D4E9613F9 for ; Fri, 16 Jul 2021 18:45:29 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1D4E9613F9 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.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 3202E6E9CD; Fri, 16 Jul 2021 18:45:27 +0000 (UTC) Received: from mail-qt1-x830.google.com (mail-qt1-x830.google.com [IPv6:2607:f8b0:4864:20::830]) by gabe.freedesktop.org (Postfix) with ESMTPS id CEEE46E9CC; Fri, 16 Jul 2021 18:45:25 +0000 (UTC) Received: by mail-qt1-x830.google.com with SMTP id z12so7831118qtj.3; Fri, 16 Jul 2021 11:45:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=hdAetSsj+mXNeCALKxIX/QxUu8l+/9bBqxTHRGIfaiE=; b=LM1nxvqLIClMOsGqQbVLezpHTcQfpkbqykygAWXOLoe0r9XScWmEhTJBg7rfu8gkZc C02vylXkNrqtAqayWqeKkqYKPostmRiuwL0zyb/XK6nGx7qtBmWEBF1nnNW6lPO99II5 T/iHbrtmhNchyaRmobthtCGngSiVvL/HePz56TbrT34W23ORv1/ap3WUMK9/FYfwafaU Fd10LgA8LUCvltMev+LV2HLTkwsU4zlYk2Ej+2eXubx6GIXOoJi2zJLfaJzEN0a8c+xv YH8j55vYD5IQGLYWe9M9Ul1WfdITkMtrTxIN+KtnQvzGhOdZh+bv+04NsmGwi7CcsGXK G48w== 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=hdAetSsj+mXNeCALKxIX/QxUu8l+/9bBqxTHRGIfaiE=; b=Ojg8EcHh8LbG/WuKefuaMXG0LZxG6sN9HJvPlOYI4webng2ZFhWkkA0Dy1WTGGUJcp /9xwXTYxxY9BA/FuLMv0dwpWgOwWW56TtbdK1CyQDIINKRiYbQwv+vFgCKqS/4zp22UB jaVWLIS+VnnX9PrPJIHgSxPFA2SJK6ZRUDEJW7L9Ro9OY6jGHQf5wdON6w1ubqrl64qr O4onQNGeo2yz3q2Xpg8v1Q+v7gIf5XHpjoRoTA9FOAiVmSk01rJrUb5xlHxQ61dTV54d JIrqQEn2mQeJ/G1KGtJz8pl+rhIcDqe3Bnv5sGnjING1lFa1vQjZG6xOT6B4eP9RNn/s 1k3A== X-Gm-Message-State: AOAM5313U+UM5g9bqaEFZcR5j2PTARHjaBNEyzbwN+SABP/QXQbV1YfQ kVJAxAmSrggpMbW3MXqJlrBgrGK/pFKGkDT1iYA= X-Google-Smtp-Source: ABdhPJzJ/m0y2dTwz7Y0jERFu3HVdben8ugbGRr6RRJITjB/GmouXx0FwWUNZyBB7ygi18yurL6pzHaYnSLzHBVY1lg= X-Received: by 2002:a05:622a:448:: with SMTP id o8mr10500252qtx.341.1626461124861; Fri, 16 Jul 2021 11:45:24 -0700 (PDT) MIME-Version: 1.0 References: <20210715223900.1840576-1-jason@jlekstrand.net> <20210715223900.1840576-6-jason@jlekstrand.net> In-Reply-To: From: Matthew Auld Date: Fri, 16 Jul 2021 19:44:58 +0100 Message-ID: Subject: Re: [PATCH 5/7] drm/i915/gem/ttm: Respect the objection region in placement_from_obj To: Jason Ekstrand Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable 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: =?UTF-8?Q?Thomas_Hellstr=C3=B6m?= , Intel Graphics Development , Matthew Auld , ML dri-devel Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" On Fri, 16 Jul 2021 at 18:39, Jason Ekstrand wrote: > > On Fri, Jul 16, 2021 at 11:00 AM Matthew Auld > wrote: > > > > On Fri, 16 Jul 2021 at 16:52, Matthew Auld > > wrote: > > > > > > On Fri, 16 Jul 2021 at 15:10, Jason Ekstrand w= rote: > > > > > > > > On Fri, Jul 16, 2021 at 8:54 AM Matthew Auld > > > > wrote: > > > > > > > > > > On Thu, 15 Jul 2021 at 23:39, Jason Ekstrand wrote: > > > > > > > > > > > > Whenever we had a user object (n_placements > 0), we were ignor= ing > > > > > > obj->mm.region and always putting obj->placements[0] as the req= uested > > > > > > region. For LMEM+SMEM objects, this was causing them to get sh= oved into > > > > > > LMEM on every i915_ttm_get_pages() even when SMEM was requested= by, say, > > > > > > i915_gem_object_migrate(). > > > > > > > > > > i915_ttm_migrate calls i915_ttm_place_from_region() directly with= the > > > > > requested region, so there shouldn't be an issue with migration r= ight? > > > > > Do you have some more details? > > > > > > > > With i915_ttm_migrate directly, no. But, in the last patch in the > > > > series, we're trying to migrate LMEM+SMEM buffers into SMEM on > > > > attach() and pin it there. This blows up in a very unexpected (IMO= ) > > > > way. The flow goes something like this: > > > > > > > > - Client attempts a dma-buf import from another device > > > > - In attach() we call i915_gem_object_migrate() which calls > > > > i915_ttm_migrate() which migrates as requested. > > > > - Once the migration is complete, we call i915_gem_object_pin_page= s() > > > > which calls i915_ttm_get_pages() which depends on > > > > i915_ttm_placement_from_obj() and so migrates it right back to LMEM= . > > > > > > The mm.pages must be NULL here, otherwise it would just increment the > > > pages_pin_count? > > Given that the test is using the ____four_underscores version, it > doesn't have that check. However, this executes after we've done the > dma-buf import which pinned pages. So we should definitely have > pages. We shouldn't call ____four_underscores() if we might already have pages though. Under non-TTM that would leak the pages, and in TTM we might hit the WARN_ON(mm->pages) in __i915_ttm_get_pages(), if for example nothing was moved. I take it we can't just call pin_pages()? Four scary underscores usually means "don't call this in normal code". > > > > > > > > > Maybe the problem here is actually that our TTM code isn't respecti= ng > > > > obj->mm.pages_pin_count? > > > > > > I think if the resource is moved, we always nuke the mm.pages after > > > being notified of the move. Also TTM is also not allowed to move > > > pinned buffers. > > > > > > I guess if we are evicted/swapped, so assuming we are not holding the > > > object lock, and it's not pinned, the future call to get_pages() will > > > see mm.pages =3D NULL, even though the ttm_resource is still there, a= nd > > > because we prioritise the placements[0], instead of mm.region we end > > > up moving it for no good reason. But in your case you are holding the > > > lock, or it's pinned? Also is this just with the selftest, or > > > something real? > > > > Or at least in the selftest I see ____i915_gem_object_get_pages() > > which doesn't even consider the mm.pages AFAIK. > > The bogus migration is happening as part of the > __i915_gem_object_get_pages() (2 __underscores) call in > i915_gem_dmabuf_attach (see last patch). That code is attempting to > migrate the BO to SMEM and then pin it there using the obvious calls > to do so. However, in the pin_pages call, it gets implicitly migrated > back to LMEM thanks to i915_ttm_get_pages(). Why is _get_pages() > migrating things at all? Not sure yet, but __two_underscores() checks if i915_gem_object_has_pages() before actually calling into i915_ttm_get_pages(), so the mm.pages would have to be NULL here for some reason, so best guess is something to do with move_notify(). > > --Jason > > > > > > > > > > > > In case you can't tell, I really have no clue what I'm doing here. > > > > I'm really stumbling around in the dark finding things that make my > > > > bug go away. I'm happy for the feedback. > > > > > > > > --Jason > > > > > > > > > > > > > > > > > > > > > Signed-off-by: Jason Ekstrand > > > > > > Cc: Thomas Hellstr=C3=B6m > > > > > > Cc: Matthew Auld > > > > > > Cc: Maarten Lankhorst > > > > > > --- > > > > > > drivers/gpu/drm/i915/gem/i915_gem_ttm.c | 3 +-- > > > > > > 1 file changed, 1 insertion(+), 2 deletions(-) > > > > > > > > > > > > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c b/drivers/= gpu/drm/i915/gem/i915_gem_ttm.c > > > > > > index d30f274c329c7..5985e994d56cf 100644 > > > > > > --- a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c > > > > > > +++ b/drivers/gpu/drm/i915/gem/i915_gem_ttm.c > > > > > > @@ -150,8 +150,7 @@ i915_ttm_placement_from_obj(const struct dr= m_i915_gem_object *obj, > > > > > > unsigned int i; > > > > > > > > > > > > placement->num_placement =3D 1; > > > > > > - i915_ttm_place_from_region(num_allowed ? obj->mm.placem= ents[0] : > > > > > > - obj->mm.region, requested, f= lags); > > > > > > + i915_ttm_place_from_region(obj->mm.region, requested, f= lags); > > > > > > > > > > > > /* Cache this on object? */ > > > > > > placement->num_busy_placement =3D num_allowed; > > > > > > -- > > > > > > 2.31.1 > > > > > > 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.5 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,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 558E8C12002 for ; Fri, 16 Jul 2021 18:45:29 +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 DFFEF613F8 for ; Fri, 16 Jul 2021 18:45:26 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DFFEF613F8 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 7F9F26E9CC; Fri, 16 Jul 2021 18:45:26 +0000 (UTC) Received: from mail-qt1-x830.google.com (mail-qt1-x830.google.com [IPv6:2607:f8b0:4864:20::830]) by gabe.freedesktop.org (Postfix) with ESMTPS id CEEE46E9CC; Fri, 16 Jul 2021 18:45:25 +0000 (UTC) Received: by mail-qt1-x830.google.com with SMTP id z12so7831118qtj.3; Fri, 16 Jul 2021 11:45:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=hdAetSsj+mXNeCALKxIX/QxUu8l+/9bBqxTHRGIfaiE=; b=LM1nxvqLIClMOsGqQbVLezpHTcQfpkbqykygAWXOLoe0r9XScWmEhTJBg7rfu8gkZc C02vylXkNrqtAqayWqeKkqYKPostmRiuwL0zyb/XK6nGx7qtBmWEBF1nnNW6lPO99II5 T/iHbrtmhNchyaRmobthtCGngSiVvL/HePz56TbrT34W23ORv1/ap3WUMK9/FYfwafaU Fd10LgA8LUCvltMev+LV2HLTkwsU4zlYk2Ej+2eXubx6GIXOoJi2zJLfaJzEN0a8c+xv YH8j55vYD5IQGLYWe9M9Ul1WfdITkMtrTxIN+KtnQvzGhOdZh+bv+04NsmGwi7CcsGXK G48w== 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=hdAetSsj+mXNeCALKxIX/QxUu8l+/9bBqxTHRGIfaiE=; b=Ojg8EcHh8LbG/WuKefuaMXG0LZxG6sN9HJvPlOYI4webng2ZFhWkkA0Dy1WTGGUJcp /9xwXTYxxY9BA/FuLMv0dwpWgOwWW56TtbdK1CyQDIINKRiYbQwv+vFgCKqS/4zp22UB jaVWLIS+VnnX9PrPJIHgSxPFA2SJK6ZRUDEJW7L9Ro9OY6jGHQf5wdON6w1ubqrl64qr O4onQNGeo2yz3q2Xpg8v1Q+v7gIf5XHpjoRoTA9FOAiVmSk01rJrUb5xlHxQ61dTV54d JIrqQEn2mQeJ/G1KGtJz8pl+rhIcDqe3Bnv5sGnjING1lFa1vQjZG6xOT6B4eP9RNn/s 1k3A== X-Gm-Message-State: AOAM5313U+UM5g9bqaEFZcR5j2PTARHjaBNEyzbwN+SABP/QXQbV1YfQ kVJAxAmSrggpMbW3MXqJlrBgrGK/pFKGkDT1iYA= X-Google-Smtp-Source: ABdhPJzJ/m0y2dTwz7Y0jERFu3HVdben8ugbGRr6RRJITjB/GmouXx0FwWUNZyBB7ygi18yurL6pzHaYnSLzHBVY1lg= X-Received: by 2002:a05:622a:448:: with SMTP id o8mr10500252qtx.341.1626461124861; Fri, 16 Jul 2021 11:45:24 -0700 (PDT) MIME-Version: 1.0 References: <20210715223900.1840576-1-jason@jlekstrand.net> <20210715223900.1840576-6-jason@jlekstrand.net> In-Reply-To: From: Matthew Auld Date: Fri, 16 Jul 2021 19:44:58 +0100 Message-ID: To: Jason Ekstrand Subject: Re: [Intel-gfx] [PATCH 5/7] drm/i915/gem/ttm: Respect the objection region in placement_from_obj X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?Q?Thomas_Hellstr=C3=B6m?= , Intel Graphics Development , Matthew Auld , ML dri-devel Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" T24gRnJpLCAxNiBKdWwgMjAyMSBhdCAxODozOSwgSmFzb24gRWtzdHJhbmQgPGphc29uQGpsZWtz dHJhbmQubmV0PiB3cm90ZToKPgo+IE9uIEZyaSwgSnVsIDE2LCAyMDIxIGF0IDExOjAwIEFNIE1h dHRoZXcgQXVsZAo+IDxtYXR0aGV3LndpbGxpYW0uYXVsZEBnbWFpbC5jb20+IHdyb3RlOgo+ID4K PiA+IE9uIEZyaSwgMTYgSnVsIDIwMjEgYXQgMTY6NTIsIE1hdHRoZXcgQXVsZAo+ID4gPG1hdHRo ZXcud2lsbGlhbS5hdWxkQGdtYWlsLmNvbT4gd3JvdGU6Cj4gPiA+Cj4gPiA+IE9uIEZyaSwgMTYg SnVsIDIwMjEgYXQgMTU6MTAsIEphc29uIEVrc3RyYW5kIDxqYXNvbkBqbGVrc3RyYW5kLm5ldD4g d3JvdGU6Cj4gPiA+ID4KPiA+ID4gPiBPbiBGcmksIEp1bCAxNiwgMjAyMSBhdCA4OjU0IEFNIE1h dHRoZXcgQXVsZAo+ID4gPiA+IDxtYXR0aGV3LndpbGxpYW0uYXVsZEBnbWFpbC5jb20+IHdyb3Rl Ogo+ID4gPiA+ID4KPiA+ID4gPiA+IE9uIFRodSwgMTUgSnVsIDIwMjEgYXQgMjM6MzksIEphc29u IEVrc3RyYW5kIDxqYXNvbkBqbGVrc3RyYW5kLm5ldD4gd3JvdGU6Cj4gPiA+ID4gPiA+Cj4gPiA+ ID4gPiA+IFdoZW5ldmVyIHdlIGhhZCBhIHVzZXIgb2JqZWN0IChuX3BsYWNlbWVudHMgPiAwKSwg d2Ugd2VyZSBpZ25vcmluZwo+ID4gPiA+ID4gPiBvYmotPm1tLnJlZ2lvbiBhbmQgYWx3YXlzIHB1 dHRpbmcgb2JqLT5wbGFjZW1lbnRzWzBdIGFzIHRoZSByZXF1ZXN0ZWQKPiA+ID4gPiA+ID4gcmVn aW9uLiAgRm9yIExNRU0rU01FTSBvYmplY3RzLCB0aGlzIHdhcyBjYXVzaW5nIHRoZW0gdG8gZ2V0 IHNob3ZlZCBpbnRvCj4gPiA+ID4gPiA+IExNRU0gb24gZXZlcnkgaTkxNV90dG1fZ2V0X3BhZ2Vz KCkgZXZlbiB3aGVuIFNNRU0gd2FzIHJlcXVlc3RlZCBieSwgc2F5LAo+ID4gPiA+ID4gPiBpOTE1 X2dlbV9vYmplY3RfbWlncmF0ZSgpLgo+ID4gPiA+ID4KPiA+ID4gPiA+IGk5MTVfdHRtX21pZ3Jh dGUgY2FsbHMgaTkxNV90dG1fcGxhY2VfZnJvbV9yZWdpb24oKSBkaXJlY3RseSB3aXRoIHRoZQo+ ID4gPiA+ID4gcmVxdWVzdGVkIHJlZ2lvbiwgc28gdGhlcmUgc2hvdWxkbid0IGJlIGFuIGlzc3Vl IHdpdGggbWlncmF0aW9uIHJpZ2h0Pwo+ID4gPiA+ID4gRG8geW91IGhhdmUgc29tZSBtb3JlIGRl dGFpbHM/Cj4gPiA+ID4KPiA+ID4gPiBXaXRoIGk5MTVfdHRtX21pZ3JhdGUgZGlyZWN0bHksIG5v LiAgQnV0LCBpbiB0aGUgbGFzdCBwYXRjaCBpbiB0aGUKPiA+ID4gPiBzZXJpZXMsIHdlJ3JlIHRy eWluZyB0byBtaWdyYXRlIExNRU0rU01FTSBidWZmZXJzIGludG8gU01FTSBvbgo+ID4gPiA+IGF0 dGFjaCgpIGFuZCBwaW4gaXQgdGhlcmUuICBUaGlzIGJsb3dzIHVwIGluIGEgdmVyeSB1bmV4cGVj dGVkIChJTU8pCj4gPiA+ID4gd2F5LiAgVGhlIGZsb3cgZ29lcyBzb21ldGhpbmcgbGlrZSB0aGlz Ogo+ID4gPiA+Cj4gPiA+ID4gIC0gQ2xpZW50IGF0dGVtcHRzIGEgZG1hLWJ1ZiBpbXBvcnQgZnJv bSBhbm90aGVyIGRldmljZQo+ID4gPiA+ICAtIEluIGF0dGFjaCgpIHdlIGNhbGwgaTkxNV9nZW1f b2JqZWN0X21pZ3JhdGUoKSB3aGljaCBjYWxscwo+ID4gPiA+IGk5MTVfdHRtX21pZ3JhdGUoKSB3 aGljaCBtaWdyYXRlcyBhcyByZXF1ZXN0ZWQuCj4gPiA+ID4gIC0gT25jZSB0aGUgbWlncmF0aW9u IGlzIGNvbXBsZXRlLCB3ZSBjYWxsIGk5MTVfZ2VtX29iamVjdF9waW5fcGFnZXMoKQo+ID4gPiA+ IHdoaWNoIGNhbGxzIGk5MTVfdHRtX2dldF9wYWdlcygpIHdoaWNoIGRlcGVuZHMgb24KPiA+ID4g PiBpOTE1X3R0bV9wbGFjZW1lbnRfZnJvbV9vYmooKSBhbmQgc28gbWlncmF0ZXMgaXQgcmlnaHQg YmFjayB0byBMTUVNLgo+ID4gPgo+ID4gPiBUaGUgbW0ucGFnZXMgbXVzdCBiZSBOVUxMIGhlcmUs IG90aGVyd2lzZSBpdCB3b3VsZCBqdXN0IGluY3JlbWVudCB0aGUKPiA+ID4gcGFnZXNfcGluX2Nv dW50Pwo+Cj4gR2l2ZW4gdGhhdCB0aGUgdGVzdCBpcyB1c2luZyB0aGUgX19fX2ZvdXJfdW5kZXJz Y29yZXMgdmVyc2lvbiwgaXQKPiBkb2Vzbid0IGhhdmUgdGhhdCBjaGVjay4gIEhvd2V2ZXIsIHRo aXMgZXhlY3V0ZXMgYWZ0ZXIgd2UndmUgZG9uZSB0aGUKPiBkbWEtYnVmIGltcG9ydCB3aGljaCBw aW5uZWQgcGFnZXMuICBTbyB3ZSBzaG91bGQgZGVmaW5pdGVseSBoYXZlCj4gcGFnZXMuCgpXZSBz aG91bGRuJ3QgY2FsbCBfX19fZm91cl91bmRlcnNjb3JlcygpIGlmIHdlIG1pZ2h0IGFscmVhZHkg aGF2ZQpwYWdlcyB0aG91Z2guIFVuZGVyIG5vbi1UVE0gdGhhdCB3b3VsZCBsZWFrIHRoZSBwYWdl cywgYW5kIGluIFRUTSB3ZQptaWdodCBoaXQgdGhlIFdBUk5fT04obW0tPnBhZ2VzKSBpbiBfX2k5 MTVfdHRtX2dldF9wYWdlcygpLCBpZiBmb3IKZXhhbXBsZSBub3RoaW5nIHdhcyBtb3ZlZC4gSSB0 YWtlIGl0IHdlIGNhbid0IGp1c3QgY2FsbCBwaW5fcGFnZXMoKT8KRm91ciBzY2FyeSB1bmRlcnNj b3JlcyB1c3VhbGx5IG1lYW5zICJkb24ndCBjYWxsIHRoaXMgaW4gbm9ybWFsIGNvZGUiLgoKPgo+ ID4gPiA+Cj4gPiA+ID4gTWF5YmUgdGhlIHByb2JsZW0gaGVyZSBpcyBhY3R1YWxseSB0aGF0IG91 ciBUVE0gY29kZSBpc24ndCByZXNwZWN0aW5nCj4gPiA+ID4gb2JqLT5tbS5wYWdlc19waW5fY291 bnQ/Cj4gPiA+Cj4gPiA+IEkgdGhpbmsgaWYgdGhlIHJlc291cmNlIGlzIG1vdmVkLCB3ZSBhbHdh eXMgbnVrZSB0aGUgbW0ucGFnZXMgYWZ0ZXIKPiA+ID4gYmVpbmcgbm90aWZpZWQgb2YgdGhlIG1v dmUuIEFsc28gVFRNIGlzIGFsc28gbm90IGFsbG93ZWQgdG8gbW92ZQo+ID4gPiBwaW5uZWQgYnVm ZmVycy4KPiA+ID4KPiA+ID4gSSBndWVzcyBpZiB3ZSBhcmUgZXZpY3RlZC9zd2FwcGVkLCBzbyBh c3N1bWluZyB3ZSBhcmUgbm90IGhvbGRpbmcgdGhlCj4gPiA+IG9iamVjdCBsb2NrLCBhbmQgaXQn cyBub3QgcGlubmVkLCB0aGUgZnV0dXJlIGNhbGwgdG8gZ2V0X3BhZ2VzKCkgd2lsbAo+ID4gPiBz ZWUgbW0ucGFnZXMgPSBOVUxMLCBldmVuIHRob3VnaCB0aGUgdHRtX3Jlc291cmNlIGlzIHN0aWxs IHRoZXJlLCBhbmQKPiA+ID4gYmVjYXVzZSB3ZSBwcmlvcml0aXNlIHRoZSBwbGFjZW1lbnRzWzBd LCBpbnN0ZWFkIG9mIG1tLnJlZ2lvbiB3ZSBlbmQKPiA+ID4gdXAgbW92aW5nIGl0IGZvciBubyBn b29kIHJlYXNvbi4gQnV0IGluIHlvdXIgY2FzZSB5b3UgYXJlIGhvbGRpbmcgdGhlCj4gPiA+IGxv Y2ssIG9yIGl0J3MgcGlubmVkPyBBbHNvIGlzIHRoaXMganVzdCB3aXRoIHRoZSBzZWxmdGVzdCwg b3IKPiA+ID4gc29tZXRoaW5nIHJlYWw/Cj4gPgo+ID4gT3IgYXQgbGVhc3QgaW4gdGhlIHNlbGZ0 ZXN0IEkgc2VlIF9fX19pOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzKCkKPiA+IHdoaWNoIGRvZXNu J3QgZXZlbiBjb25zaWRlciB0aGUgbW0ucGFnZXMgQUZBSUsuCj4KPiBUaGUgYm9ndXMgbWlncmF0 aW9uIGlzIGhhcHBlbmluZyBhcyBwYXJ0IG9mIHRoZQo+IF9faTkxNV9nZW1fb2JqZWN0X2dldF9w YWdlcygpICgyIF9fdW5kZXJzY29yZXMpIGNhbGwgaW4KPiBpOTE1X2dlbV9kbWFidWZfYXR0YWNo IChzZWUgbGFzdCBwYXRjaCkuICBUaGF0IGNvZGUgaXMgYXR0ZW1wdGluZyB0bwo+IG1pZ3JhdGUg dGhlIEJPIHRvIFNNRU0gYW5kIHRoZW4gcGluIGl0IHRoZXJlIHVzaW5nIHRoZSBvYnZpb3VzIGNh bGxzCj4gdG8gZG8gc28uICBIb3dldmVyLCBpbiB0aGUgcGluX3BhZ2VzIGNhbGwsIGl0IGdldHMg aW1wbGljaXRseSBtaWdyYXRlZAo+IGJhY2sgdG8gTE1FTSB0aGFua3MgdG8gaTkxNV90dG1fZ2V0 X3BhZ2VzKCkuICBXaHkgaXMgX2dldF9wYWdlcygpCj4gbWlncmF0aW5nIHRoaW5ncyBhdCBhbGw/ CgpOb3Qgc3VyZSB5ZXQsIGJ1dCBfX3R3b191bmRlcnNjb3JlcygpIGNoZWNrcyBpZgppOTE1X2dl bV9vYmplY3RfaGFzX3BhZ2VzKCkgYmVmb3JlIGFjdHVhbGx5IGNhbGxpbmcgaW50bwppOTE1X3R0 bV9nZXRfcGFnZXMoKSwgc28gdGhlIG1tLnBhZ2VzIHdvdWxkIGhhdmUgdG8gYmUgTlVMTCBoZXJl IGZvcgpzb21lIHJlYXNvbiwgc28gYmVzdCBndWVzcyBpcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBt b3ZlX25vdGlmeSgpLgoKPgo+IC0tSmFzb24KPgo+ID4gPgo+ID4gPiA+Cj4gPiA+ID4gSW4gY2Fz ZSB5b3UgY2FuJ3QgdGVsbCwgSSByZWFsbHkgaGF2ZSBubyBjbHVlIHdoYXQgSSdtIGRvaW5nIGhl cmUuCj4gPiA+ID4gSSdtIHJlYWxseSBzdHVtYmxpbmcgYXJvdW5kIGluIHRoZSBkYXJrIGZpbmRp bmcgdGhpbmdzIHRoYXQgbWFrZSBteQo+ID4gPiA+IGJ1ZyBnbyBhd2F5LiAgSSdtIGhhcHB5IGZv ciB0aGUgZmVlZGJhY2suCj4gPiA+ID4KPiA+ID4gPiAtLUphc29uCj4gPiA+ID4KPiA+ID4gPiA+ Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IFNpZ25lZC1vZmYtYnk6IEphc29uIEVrc3RyYW5kIDxq YXNvbkBqbGVrc3RyYW5kLm5ldD4KPiA+ID4gPiA+ID4gQ2M6IFRob21hcyBIZWxsc3Ryw7ZtIDx0 aG9tYXMuaGVsbHN0cm9tQGxpbnV4LmludGVsLmNvbT4KPiA+ID4gPiA+ID4gQ2M6IE1hdHRoZXcg QXVsZCA8bWF0dGhldy5hdWxkQGludGVsLmNvbT4KPiA+ID4gPiA+ID4gQ2M6IE1hYXJ0ZW4gTGFu a2hvcnN0IDxtYWFydGVuLmxhbmtob3JzdEBsaW51eC5pbnRlbC5jb20+Cj4gPiA+ID4gPiA+IC0t LQo+ID4gPiA+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3R0bS5jIHwg MyArLS0KPiA+ID4gPiA+ID4gIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMiBkZWxl dGlvbnMoLSkKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2dlbS9pOTE1X2dlbV90dG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9p OTE1X2dlbV90dG0uYwo+ID4gPiA+ID4gPiBpbmRleCBkMzBmMjc0YzMyOWM3Li41OTg1ZTk5NGQ1 NmNmIDEwMDY0NAo+ID4gPiA+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkx NV9nZW1fdHRtLmMKPiA+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5 MTVfZ2VtX3R0bS5jCj4gPiA+ID4gPiA+IEBAIC0xNTAsOCArMTUwLDcgQEAgaTkxNV90dG1fcGxh Y2VtZW50X2Zyb21fb2JqKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4g PiA+ID4gPiA+ICAgICAgICAgdW5zaWduZWQgaW50IGk7Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ ICAgICAgICAgcGxhY2VtZW50LT5udW1fcGxhY2VtZW50ID0gMTsKPiA+ID4gPiA+ID4gLSAgICAg ICBpOTE1X3R0bV9wbGFjZV9mcm9tX3JlZ2lvbihudW1fYWxsb3dlZCA/IG9iai0+bW0ucGxhY2Vt ZW50c1swXSA6Cj4gPiA+ID4gPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg b2JqLT5tbS5yZWdpb24sIHJlcXVlc3RlZCwgZmxhZ3MpOwo+ID4gPiA+ID4gPiArICAgICAgIGk5 MTVfdHRtX3BsYWNlX2Zyb21fcmVnaW9uKG9iai0+bW0ucmVnaW9uLCByZXF1ZXN0ZWQsIGZsYWdz KTsKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gICAgICAgICAvKiBDYWNoZSB0aGlzIG9uIG9iamVj dD8gKi8KPiA+ID4gPiA+ID4gICAgICAgICBwbGFjZW1lbnQtPm51bV9idXN5X3BsYWNlbWVudCA9 IG51bV9hbGxvd2VkOwo+ID4gPiA+ID4gPiAtLQo+ID4gPiA+ID4gPiAyLjMxLjEKPiA+ID4gPiA+ ID4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwt Z2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==