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=-13.8 required=3.0 tests=BAYES_00, 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 DD232C4743D for ; Tue, 8 Jun 2021 19:09:43 +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 AB46E60FF4 for ; Tue, 8 Jun 2021 19:09:43 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org AB46E60FF4 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.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 053666EC2B; Tue, 8 Jun 2021 19:09:43 +0000 (UTC) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id BE64A6E22F; Tue, 8 Jun 2021 19:09:41 +0000 (UTC) IronPort-SDR: r6PQxrztCK4FQ1b75yegwAoYxJdlzdjp0yM2uaElfTLQQb9oKxZD2/DWBjNEY8TwiDetrwNO5c wEpHLiih17uQ== X-IronPort-AV: E=McAfee;i="6200,9189,10009"; a="192027563" X-IronPort-AV: E=Sophos;i="5.83,259,1616482800"; d="scan'208";a="192027563" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jun 2021 12:09:40 -0700 IronPort-SDR: uNcmj5gAEU+ohokUD19oatPD07usltsBbhC+tHdkcwplBFUe5o1aT1MSn0jTvDraitd3jgAFP2 KBkF86xMxIFg== X-IronPort-AV: E=Sophos;i="5.83,259,1616482800"; d="scan'208";a="637740262" Received: from arajji-mobl.ger.corp.intel.com (HELO [10.249.254.90]) ([10.249.254.90]) by fmsmga005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jun 2021 12:09:38 -0700 Message-ID: <6090f80bd4a3ec65fc42579b729c0206f811f3cc.camel@linux.intel.com> Subject: Re: [PATCH 7/9] drm/i915/gt: Pipelined page migration From: Thomas =?ISO-8859-1?Q?Hellstr=F6m?= To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Date: Tue, 08 Jun 2021 21:09:36 +0200 In-Reply-To: <20210608092846.64198-8-thomas.hellstrom@linux.intel.com> References: <20210608092846.64198-1-thomas.hellstrom@linux.intel.com> <20210608092846.64198-8-thomas.hellstrom@linux.intel.com> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.40.1 (3.40.1-1.fc34) MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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: matthew.auld@intel.com, Chris Wilson Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" On Tue, 2021-06-08 at 11:28 +0200, Thomas Hellström wrote: > From: Chris Wilson > > If we pipeline the PTE updates and then do the copy of those pages > within a single unpreemptible command packet, we can submit the > copies > and leave them to be scheduled without having to synchronously wait > under a global lock. In order to manage migration, we need to > preallocate the page tables (and keep them pinned and available for > use > at any time), causing a bottleneck for migrations as all clients must > contend on the limited resources. By inlining the ppGTT updates and > performing the blit atomically, each client only owns the PTE while > in > use, and so we can reschedule individual operations however we see > fit. > And most importantly, we do not need to take a global lock on the > shared > vm, and wait until the operation is complete before releasing the > lock > for others to claim the PTE for themselves. > > Signed-off-by: Chris Wilson > Co-developed-by: Thomas Hellström > Signed-off-by: Thomas Hellström > --- >  drivers/gpu/drm/i915/Makefile                 |   1 + >  drivers/gpu/drm/i915/gt/intel_engine.h        |   1 + >  drivers/gpu/drm/i915/gt/intel_gpu_commands.h  |   2 + >  drivers/gpu/drm/i915/gt/intel_migrate.c       | 543 > ++++++++++++++++++ >  drivers/gpu/drm/i915/gt/intel_migrate.h       |  45 ++ >  drivers/gpu/drm/i915/gt/intel_migrate_types.h |  15 + >  drivers/gpu/drm/i915/gt/intel_ring.h          |   1 + >  drivers/gpu/drm/i915/gt/selftest_migrate.c    | 291 ++++++++++ >  .../drm/i915/selftests/i915_live_selftests.h  |   1 + >  9 files changed, 900 insertions(+) >  create mode 100644 drivers/gpu/drm/i915/gt/intel_migrate.c >  create mode 100644 drivers/gpu/drm/i915/gt/intel_migrate.h >  create mode 100644 drivers/gpu/drm/i915/gt/intel_migrate_types.h >  create mode 100644 drivers/gpu/drm/i915/gt/selftest_migrate.c > > diff --git a/drivers/gpu/drm/i915/Makefile > b/drivers/gpu/drm/i915/Makefile > index ea8ee4b3e018..9f18902be626 100644 > --- a/drivers/gpu/drm/i915/Makefile > +++ b/drivers/gpu/drm/i915/Makefile > @@ -109,6 +109,7 @@ gt-y += \ >         gt/intel_gtt.o \ >         gt/intel_llc.o \ >         gt/intel_lrc.o \ > +       gt/intel_migrate.o \ >         gt/intel_mocs.o \ >         gt/intel_ppgtt.o \ >         gt/intel_rc6.o \ > diff --git a/drivers/gpu/drm/i915/gt/intel_engine.h > b/drivers/gpu/drm/i915/gt/intel_engine.h > index 0862c42b4cac..949965680c37 100644 > --- a/drivers/gpu/drm/i915/gt/intel_engine.h > +++ b/drivers/gpu/drm/i915/gt/intel_engine.h > @@ -188,6 +188,7 @@ intel_write_status_page(struct intel_engine_cs > *engine, int reg, u32 value) >  #define I915_GEM_HWS_PREEMPT_ADDR      (I915_GEM_HWS_PREEMPT * > sizeof(u32)) >  #define I915_GEM_HWS_SEQNO             0x40 >  #define I915_GEM_HWS_SEQNO_ADDR                (I915_GEM_HWS_SEQNO * > sizeof(u32)) > +#define I915_GEM_HWS_MIGRATE           (0x42 * sizeof(u32)) >  #define I915_GEM_HWS_SCRATCH           0x80 >   >  #define I915_HWS_CSB_BUF0_INDEX                0x10 > diff --git a/drivers/gpu/drm/i915/gt/intel_gpu_commands.h > b/drivers/gpu/drm/i915/gt/intel_gpu_commands.h > index 2694dbb9967e..1c3af0fc0456 100644 > --- a/drivers/gpu/drm/i915/gt/intel_gpu_commands.h > +++ b/drivers/gpu/drm/i915/gt/intel_gpu_commands.h > @@ -123,8 +123,10 @@ >  #define   MI_SEMAPHORE_SAD_NEQ_SDD     (5 << 12) >  #define   MI_SEMAPHORE_TOKEN_MASK      REG_GENMASK(9, 5) >  #define   MI_SEMAPHORE_TOKEN_SHIFT     5 > +#define MI_STORE_DATA_IMM      MI_INSTR(0x20, 0) >  #define MI_STORE_DWORD_IMM     MI_INSTR(0x20, 1) >  #define MI_STORE_DWORD_IMM_GEN4        MI_INSTR(0x20, 2) > +#define MI_STORE_QWORD_IMM_GEN8 (MI_INSTR(0x20, 3) | REG_BIT(21)) >  #define   MI_MEM_VIRTUAL       (1 << 22) /* 945,g33,965 */ >  #define   MI_USE_GGTT          (1 << 22) /* g4x+ */ >  #define MI_STORE_DWORD_INDEX   MI_INSTR(0x21, 1) > diff --git a/drivers/gpu/drm/i915/gt/intel_migrate.c > b/drivers/gpu/drm/i915/gt/intel_migrate.c > new file mode 100644 > index 000000000000..1f60f8ee36f8 > --- /dev/null > +++ b/drivers/gpu/drm/i915/gt/intel_migrate.c > @@ -0,0 +1,543 @@ > +// SPDX-License-Identifier: MIT > +/* > + * Copyright © 2020 Intel Corporation > + */ > + > +#include "i915_drv.h" > +#include "intel_context.h" > +#include "intel_gpu_commands.h" > +#include "intel_gt.h" > +#include "intel_gtt.h" > +#include "intel_migrate.h" > +#include "intel_ring.h" > + > ... > + > +void intel_migrate_fini(struct intel_migrate *m) > +{ > +       struct intel_context *ce; > + > +       ce = fetch_and_zero(&m->context); > +       if (!ce) > +               return; > + > +       intel_context_unpin(ce); > +       intel_context_put(ce); > +} Hmm, CI hints at we should be exporting and using an intel_engine_destroy_pinned_context() here... /Thomas 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=-13.8 required=3.0 tests=BAYES_00, 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 E2C89C47082 for ; Tue, 8 Jun 2021 19:09:42 +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 B61A5610A1 for ; Tue, 8 Jun 2021 19:09:42 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B61A5610A1 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.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 61F316E22F; Tue, 8 Jun 2021 19:09:42 +0000 (UTC) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id BE64A6E22F; Tue, 8 Jun 2021 19:09:41 +0000 (UTC) IronPort-SDR: r6PQxrztCK4FQ1b75yegwAoYxJdlzdjp0yM2uaElfTLQQb9oKxZD2/DWBjNEY8TwiDetrwNO5c wEpHLiih17uQ== X-IronPort-AV: E=McAfee;i="6200,9189,10009"; a="192027563" X-IronPort-AV: E=Sophos;i="5.83,259,1616482800"; d="scan'208";a="192027563" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jun 2021 12:09:40 -0700 IronPort-SDR: uNcmj5gAEU+ohokUD19oatPD07usltsBbhC+tHdkcwplBFUe5o1aT1MSn0jTvDraitd3jgAFP2 KBkF86xMxIFg== X-IronPort-AV: E=Sophos;i="5.83,259,1616482800"; d="scan'208";a="637740262" Received: from arajji-mobl.ger.corp.intel.com (HELO [10.249.254.90]) ([10.249.254.90]) by fmsmga005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jun 2021 12:09:38 -0700 Message-ID: <6090f80bd4a3ec65fc42579b729c0206f811f3cc.camel@linux.intel.com> From: Thomas =?ISO-8859-1?Q?Hellstr=F6m?= To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Date: Tue, 08 Jun 2021 21:09:36 +0200 In-Reply-To: <20210608092846.64198-8-thomas.hellstrom@linux.intel.com> References: <20210608092846.64198-1-thomas.hellstrom@linux.intel.com> <20210608092846.64198-8-thomas.hellstrom@linux.intel.com> User-Agent: Evolution 3.40.1 (3.40.1-1.fc34) MIME-Version: 1.0 Subject: Re: [Intel-gfx] [PATCH 7/9] drm/i915/gt: Pipelined page migration 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: matthew.auld@intel.com, Chris Wilson Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" T24gVHVlLCAyMDIxLTA2LTA4IGF0IDExOjI4ICswMjAwLCBUaG9tYXMgSGVsbHN0csO2bSB3cm90 ZToKPiBGcm9tOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiAKPiBJ ZiB3ZSBwaXBlbGluZSB0aGUgUFRFIHVwZGF0ZXMgYW5kIHRoZW4gZG8gdGhlIGNvcHkgb2YgdGhv c2UgcGFnZXMKPiB3aXRoaW4gYSBzaW5nbGUgdW5wcmVlbXB0aWJsZSBjb21tYW5kIHBhY2tldCwg d2UgY2FuIHN1Ym1pdCB0aGUKPiBjb3BpZXMKPiBhbmQgbGVhdmUgdGhlbSB0byBiZSBzY2hlZHVs ZWQgd2l0aG91dCBoYXZpbmcgdG8gc3luY2hyb25vdXNseSB3YWl0Cj4gdW5kZXIgYSBnbG9iYWwg bG9jay4gSW4gb3JkZXIgdG8gbWFuYWdlIG1pZ3JhdGlvbiwgd2UgbmVlZCB0bwo+IHByZWFsbG9j YXRlIHRoZSBwYWdlIHRhYmxlcyAoYW5kIGtlZXAgdGhlbSBwaW5uZWQgYW5kIGF2YWlsYWJsZSBm b3IKPiB1c2UKPiBhdCBhbnkgdGltZSksIGNhdXNpbmcgYSBib3R0bGVuZWNrIGZvciBtaWdyYXRp b25zIGFzIGFsbCBjbGllbnRzIG11c3QKPiBjb250ZW5kIG9uIHRoZSBsaW1pdGVkIHJlc291cmNl cy4gQnkgaW5saW5pbmcgdGhlIHBwR1RUIHVwZGF0ZXMgYW5kCj4gcGVyZm9ybWluZyB0aGUgYmxp dCBhdG9taWNhbGx5LCBlYWNoIGNsaWVudCBvbmx5IG93bnMgdGhlIFBURSB3aGlsZQo+IGluCj4g dXNlLCBhbmQgc28gd2UgY2FuIHJlc2NoZWR1bGUgaW5kaXZpZHVhbCBvcGVyYXRpb25zIGhvd2V2 ZXIgd2Ugc2VlCj4gZml0Lgo+IEFuZCBtb3N0IGltcG9ydGFudGx5LCB3ZSBkbyBub3QgbmVlZCB0 byB0YWtlIGEgZ2xvYmFsIGxvY2sgb24gdGhlCj4gc2hhcmVkCj4gdm0sIGFuZCB3YWl0IHVudGls IHRoZSBvcGVyYXRpb24gaXMgY29tcGxldGUgYmVmb3JlIHJlbGVhc2luZyB0aGUKPiBsb2NrCj4g Zm9yIG90aGVycyB0byBjbGFpbSB0aGUgUFRFIGZvciB0aGVtc2VsdmVzLgo+IAo+IFNpZ25lZC1v ZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+IENvLWRldmVs b3BlZC1ieTogVGhvbWFzIEhlbGxzdHLDtm0gPHRob21hcy5oZWxsc3Ryb21AbGludXguaW50ZWwu Y29tPgo+IFNpZ25lZC1vZmYtYnk6IFRob21hcyBIZWxsc3Ryw7ZtIDx0aG9tYXMuaGVsbHN0cm9t QGxpbnV4LmludGVsLmNvbT4KPiAtLS0KPiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxl wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMSArCj4gwqBkcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmUuaMKgwqDCoMKgwqDCoMKgIHzCoMKgIDEgKwo+IMKg ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3B1X2NvbW1hbmRzLmjCoCB8wqDCoCAyICsK PiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX21pZ3JhdGUuY8KgwqDCoMKgwqDCoCB8 IDU0Mwo+ICsrKysrKysrKysrKysrKysrKwo+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50 ZWxfbWlncmF0ZS5owqDCoMKgwqDCoMKgIHzCoCA0NSArKwo+IMKgZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfbWlncmF0ZV90eXBlcy5oIHzCoCAxNSArCj4gwqBkcml2ZXJzL2dwdS9kcm0v aTkxNS9ndC9pbnRlbF9yaW5nLmjCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMSArCj4gwqBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9taWdyYXRlLmPCoMKgwqAgfCAyOTEgKysrKysr KysrKwo+IMKgLi4uL2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2xpdmVfc2VsZnRlc3RzLmjCoCB8 wqDCoCAxICsKPiDCoDkgZmlsZXMgY2hhbmdlZCwgOTAwIGluc2VydGlvbnMoKykKPiDCoGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9taWdyYXRlLmMKPiDC oGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9taWdyYXRl LmgKPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9t aWdyYXRlX3R5cGVzLmgKPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9zZWxmdGVzdF9taWdyYXRlLmMKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvTWFrZWZpbGUKPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gaW5kZXgg ZWE4ZWU0YjNlMDE4Li45ZjE4OTAyYmU2MjYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+IEBA IC0xMDksNiArMTA5LDcgQEAgZ3QteSArPSBcCj4gwqDCoMKgwqDCoMKgwqDCoGd0L2ludGVsX2d0 dC5vIFwKPiDCoMKgwqDCoMKgwqDCoMKgZ3QvaW50ZWxfbGxjLm8gXAo+IMKgwqDCoMKgwqDCoMKg wqBndC9pbnRlbF9scmMubyBcCj4gK8KgwqDCoMKgwqDCoMKgZ3QvaW50ZWxfbWlncmF0ZS5vIFwK PiDCoMKgwqDCoMKgwqDCoMKgZ3QvaW50ZWxfbW9jcy5vIFwKPiDCoMKgwqDCoMKgwqDCoMKgZ3Qv aW50ZWxfcHBndHQubyBcCj4gwqDCoMKgwqDCoMKgwqDCoGd0L2ludGVsX3JjNi5vIFwKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lLmgKPiBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZS5oCj4gaW5kZXggMDg2MmM0MmI0Y2FjLi45 NDk5NjU2ODBjMzcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxf ZW5naW5lLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmUuaAo+ IEBAIC0xODgsNiArMTg4LDcgQEAgaW50ZWxfd3JpdGVfc3RhdHVzX3BhZ2Uoc3RydWN0IGludGVs X2VuZ2luZV9jcwo+ICplbmdpbmUsIGludCByZWcsIHUzMiB2YWx1ZSkKPiDCoCNkZWZpbmUgSTkx NV9HRU1fSFdTX1BSRUVNUFRfQUREUsKgwqDCoMKgwqDCoChJOTE1X0dFTV9IV1NfUFJFRU1QVCAq Cj4gc2l6ZW9mKHUzMikpCj4gwqAjZGVmaW5lIEk5MTVfR0VNX0hXU19TRVFOT8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgMHg0MAo+IMKgI2RlZmluZSBJOTE1X0dFTV9IV1NfU0VRTk9fQUREUsKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKEk5MTVfR0VNX0hXU19TRVFOTyAqCj4gc2l6 ZW9mKHUzMikpCj4gKyNkZWZpbmUgSTkxNV9HRU1fSFdTX01JR1JBVEXCoMKgwqDCoMKgwqDCoMKg wqDCoMKgKDB4NDIgKiBzaXplb2YodTMyKSkKPiDCoCNkZWZpbmUgSTkxNV9HRU1fSFdTX1NDUkFU Q0jCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHg4MAo+IMKgCj4gwqAjZGVmaW5lIEk5MTVfSFdTX0NT Ql9CVUYwX0lOREVYwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDEwCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2dwdV9jb21tYW5kcy5oCj4gYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ncHVfY29tbWFuZHMuaAo+IGluZGV4IDI2OTRk YmI5OTY3ZS4uMWMzYWYwZmMwNDU2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2ludGVsX2dwdV9jb21tYW5kcy5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv aW50ZWxfZ3B1X2NvbW1hbmRzLmgKPiBAQCAtMTIzLDggKzEyMywxMCBAQAo+IMKgI2RlZmluZcKg wqAgTUlfU0VNQVBIT1JFX1NBRF9ORVFfU0REwqDCoMKgwqDCoCg1IDw8IDEyKQo+IMKgI2RlZmlu ZcKgwqAgTUlfU0VNQVBIT1JFX1RPS0VOX01BU0vCoMKgwqDCoMKgwqBSRUdfR0VOTUFTSyg5LCA1 KQo+IMKgI2RlZmluZcKgwqAgTUlfU0VNQVBIT1JFX1RPS0VOX1NISUZUwqDCoMKgwqDCoDUKPiAr I2RlZmluZSBNSV9TVE9SRV9EQVRBX0lNTcKgwqDCoMKgwqDCoE1JX0lOU1RSKDB4MjAsIDApCj4g wqAjZGVmaW5lIE1JX1NUT1JFX0RXT1JEX0lNTcKgwqDCoMKgwqBNSV9JTlNUUigweDIwLCAxKQo+ IMKgI2RlZmluZSBNSV9TVE9SRV9EV09SRF9JTU1fR0VONMKgwqDCoMKgwqDCoMKgwqBNSV9JTlNU UigweDIwLCAyKQo+ICsjZGVmaW5lIE1JX1NUT1JFX1FXT1JEX0lNTV9HRU44IChNSV9JTlNUUigw eDIwLCAzKSB8IFJFR19CSVQoMjEpKQo+IMKgI2RlZmluZcKgwqAgTUlfTUVNX1ZJUlRVQUzCoMKg wqDCoMKgwqDCoCgxIDw8IDIyKSAvKiA5NDUsZzMzLDk2NSAqLwo+IMKgI2RlZmluZcKgwqAgTUlf VVNFX0dHVFTCoMKgwqDCoMKgwqDCoMKgwqDCoCgxIDw8IDIyKSAvKiBnNHgrICovCj4gwqAjZGVm aW5lIE1JX1NUT1JFX0RXT1JEX0lOREVYwqDCoMKgTUlfSU5TVFIoMHgyMSwgMSkKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbWlncmF0ZS5jCj4gYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9taWdyYXRlLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ IGluZGV4IDAwMDAwMDAwMDAwMC4uMWY2MGY4ZWUzNmY4Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX21pZ3JhdGUuYwo+IEBAIC0wLDAgKzEsNTQz IEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKPiArLyoKPiArICogQ29weXJp Z2h0IMKpIDIwMjAgSW50ZWwgQ29ycG9yYXRpb24KPiArICovCj4gKwo+ICsjaW5jbHVkZSAiaTkx NV9kcnYuaCIKPiArI2luY2x1ZGUgImludGVsX2NvbnRleHQuaCIKPiArI2luY2x1ZGUgImludGVs X2dwdV9jb21tYW5kcy5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfZ3QuaCIKPiArI2luY2x1ZGUgImlu dGVsX2d0dC5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfbWlncmF0ZS5oIgo+ICsjaW5jbHVkZSAiaW50 ZWxfcmluZy5oIgo+ICsKPiAKLi4uCj4gKwo+ICt2b2lkIGludGVsX21pZ3JhdGVfZmluaShzdHJ1 Y3QgaW50ZWxfbWlncmF0ZSAqbSkKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBpbnRlbF9j b250ZXh0ICpjZTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgY2UgPSBmZXRjaF9hbmRfemVybygmbS0+ Y29udGV4dCk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFjZSkKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0dXJuOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBpbnRlbF9jb250ZXh0X3Vu cGluKGNlKTsKPiArwqDCoMKgwqDCoMKgwqBpbnRlbF9jb250ZXh0X3B1dChjZSk7Cj4gK30KCkht bSwgQ0kgaGludHMgYXQgd2Ugc2hvdWxkIGJlIGV4cG9ydGluZyBhbmQgdXNpbmcgYW4KaW50ZWxf ZW5naW5lX2Rlc3Ryb3lfcGlubmVkX2NvbnRleHQoKSBoZXJlLi4uCgovVGhvbWFzCgoKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWls aW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=