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=-14.5 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,HK_RANDOM_FROM,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 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 7A5F4C6377D for ; Thu, 22 Jul 2021 08:27:58 +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 3A1F161248 for ; Thu, 22 Jul 2021 08:27:58 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3A1F161248 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 B81EA6EA38; Thu, 22 Jul 2021 08:27:57 +0000 (UTC) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 011A16EA38; Thu, 22 Jul 2021 08:27:55 +0000 (UTC) X-IronPort-AV: E=McAfee;i="6200,9189,10052"; a="275414930" X-IronPort-AV: E=Sophos;i="5.84,260,1620716400"; d="scan'208";a="275414930" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Jul 2021 01:27:53 -0700 X-IronPort-AV: E=Sophos;i="5.84,260,1620716400"; d="scan'208";a="470544441" Received: from cstylian-mobl3.ger.corp.intel.com (HELO [10.213.198.98]) ([10.213.198.98]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Jul 2021 01:27:51 -0700 Subject: Re: [Intel-gfx] [PATCH 4/4] drm/i915/gt: nuke gen6_hw_id To: Lucas De Marchi References: <20210720232014.3302645-1-lucas.demarchi@intel.com> <20210720232014.3302645-5-lucas.demarchi@intel.com> <079da526-6b19-3b44-e3d0-c23e1a61e9b1@linux.intel.com> <20210721184422.fvpmhes2uw2tbax3@ldmartin-desk2> From: Tvrtko Ursulin Organization: Intel Corporation UK Plc Message-ID: <44eec779-d76c-38ab-9c0f-a71dbceee385@linux.intel.com> Date: Thu, 22 Jul 2021 09:27:49 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: <20210721184422.fvpmhes2uw2tbax3@ldmartin-desk2> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US 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: intel-gfx@lists.freedesktop.org, Daniele Ceraolo Spurio , Tomas Winkler , dri-devel@lists.freedesktop.org Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" On 21/07/2021 19:44, Lucas De Marchi wrote: > On Wed, Jul 21, 2021 at 10:25:59AM +0100, Tvrtko Ursulin wrote: >> >> On 21/07/2021 00:20, Lucas De Marchi wrote: >>> This is only used by GRAPHICS_VER == 6 and GRAPHICS_VER == 7. All other >>> recent platforms do not depend on this field, so it doesn't make much >>> sense to keep it generic like that. Instead, just do a mapping from >>> engine class to HW ID in the single place that is needed. >>> >>> Signed-off-by: Lucas De Marchi >>> --- >>>  drivers/gpu/drm/i915/gt/intel_engine_cs.c    | 6 ------ >>>  drivers/gpu/drm/i915/gt/intel_engine_types.h | 8 -------- >>>  drivers/gpu/drm/i915/i915_reg.h              | 4 +++- >>>  3 files changed, 3 insertions(+), 15 deletions(-) >>> >>> diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c >>> b/drivers/gpu/drm/i915/gt/intel_engine_cs.c >>> index 508221de411c..0a04e8d90e9e 100644 >>> --- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c >>> +++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c >>> @@ -42,7 +42,6 @@ >>>  #define MAX_MMIO_BASES 3 >>>  struct engine_info { >>> -    u8 gen6_hw_id; >>>      u8 class; >>>      u8 instance; >>>      /* mmio bases table *must* be sorted in reverse graphics_ver >>> order */ >>> @@ -54,7 +53,6 @@ struct engine_info { >>>  static const struct engine_info intel_engines[] = { >>>      [RCS0] = { >>> -        .gen6_hw_id = RCS0_HW, >>>          .class = RENDER_CLASS, >>>          .instance = 0, >>>          .mmio_bases = { >>> @@ -62,7 +60,6 @@ static const struct engine_info intel_engines[] = { >>>          }, >>>      }, >>>      [BCS0] = { >>> -        .gen6_hw_id = BCS0_HW, >>>          .class = COPY_ENGINE_CLASS, >>>          .instance = 0, >>>          .mmio_bases = { >>> @@ -70,7 +67,6 @@ static const struct engine_info intel_engines[] = { >>>          }, >>>      }, >>>      [VCS0] = { >>> -        .gen6_hw_id = VCS0_HW, >>>          .class = VIDEO_DECODE_CLASS, >>>          .instance = 0, >>>          .mmio_bases = { >>> @@ -102,7 +98,6 @@ static const struct engine_info intel_engines[] = { >>>          }, >>>      }, >>>      [VECS0] = { >>> -        .gen6_hw_id = VECS0_HW, >>>          .class = VIDEO_ENHANCEMENT_CLASS, >>>          .instance = 0, >>>          .mmio_bases = { >>> @@ -290,7 +285,6 @@ static int intel_engine_setup(struct intel_gt >>> *gt, enum intel_engine_id id) >>>      engine->i915 = i915; >>>      engine->gt = gt; >>>      engine->uncore = gt->uncore; >>> -    engine->gen6_hw_id = info->gen6_hw_id; >>>      guc_class = engine_class_to_guc_class(info->class); >>>      engine->guc_id = MAKE_GUC_ID(guc_class, info->instance); >>>      engine->mmio_base = __engine_mmio_base(i915, info->mmio_bases); >>> diff --git a/drivers/gpu/drm/i915/gt/intel_engine_types.h >>> b/drivers/gpu/drm/i915/gt/intel_engine_types.h >>> index 266422d8d1b1..64330bfb7641 100644 >>> --- a/drivers/gpu/drm/i915/gt/intel_engine_types.h >>> +++ b/drivers/gpu/drm/i915/gt/intel_engine_types.h >>> @@ -28,13 +28,6 @@ >>>  #include "intel_wakeref.h" >>>  #include "intel_workarounds_types.h" >>> -/* Legacy HW Engine ID */ >>> - >>> -#define RCS0_HW        0 >>> -#define VCS0_HW        1 >>> -#define BCS0_HW        2 >>> -#define VECS0_HW    3 >>> - >>>  /* Gen11+ HW Engine class + instance */ >>>  #define RENDER_CLASS        0 >>>  #define VIDEO_DECODE_CLASS    1 >>> @@ -268,7 +261,6 @@ struct intel_engine_cs { >>>      intel_engine_mask_t mask; >>> -    u8 gen6_hw_id; >>>      u8 class; >>>      u8 instance; >>> diff --git a/drivers/gpu/drm/i915/i915_reg.h >>> b/drivers/gpu/drm/i915/i915_reg.h >>> index 8750ffce9d61..d91386f4828e 100644 >>> --- a/drivers/gpu/drm/i915/i915_reg.h >>> +++ b/drivers/gpu/drm/i915/i915_reg.h >>> @@ -2572,7 +2572,9 @@ static inline bool >>> i915_mmio_reg_valid(i915_reg_t reg) >>>  #define   ARB_MODE_BWGTLB_DISABLE (1 << 9) >>>  #define   ARB_MODE_SWIZZLE_BDW    (1 << 1) >>>  #define RENDER_HWS_PGA_GEN7    _MMIO(0x04080) >>> -#define RING_FAULT_REG(engine)    _MMIO(0x4094 + 0x100 * >>> (engine)->gen6_hw_id) >>> + >>> +#define _GEN6_ENGINE_CLASS_TO_ID(class) _PICK((class), 0, 1, 3, 2) >>> +#define RING_FAULT_REG(engine)    _MMIO(0x4094 + 0x100 * >>> _GEN6_ENGINE_CLASS_TO_ID((engine)->class)) >> >> Makes sense to me. >> >> Maybe HW_ID and HW_CLASS in the macro name? Not sure. > > I can do that... I think I avoided it because it makes the macro > very big. Anyway, this should be called in just one place, so it doesn't > matter much... I can add it. > >> >> Only open I have is why the "Gen11+ HW Engine class + instance" >> comment and now we would tie that, allegedly Gen11 concept, with >> Gen6-7. Care to do some digging? > > Not sure. This comes from 3d7b3039741d ("drm/i915: Move engine IDs out > of i915_reg.h") > that I reviewed :-o > > Cc'ing  Daniele. I don't see "class" as a Gen11+ thing. Is it just that > those numbers started to make sense for gen11?  Since > > a) we are using the class even for GRAPHICS_VER < 11 > b) the legacy HW IDs shouldn't be used anywhere else anymore > > > we could > > 1) move the legacy defines back to i915_reg.h > 2) use them in the macro above (IMO would slightly improve the > readability of that _PICK() call) > 3) Remove the "Gen11+" comment in the _CLASS macros to avoid > misunderstandings > > > Thoughts? What Matt suggested sounds fine to me (using _PICK with _RING_FAULT_REG_RCS etc). It retires the concept of hw id from the code base completely and hopefully the need for it does not re-surface. Regards, Tvrtko 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=-14.5 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,HK_RANDOM_FROM,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 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 A38EDC6377D for ; Thu, 22 Jul 2021 08:28:02 +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 7134F61248 for ; Thu, 22 Jul 2021 08:28:02 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7134F61248 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 284476EA43; Thu, 22 Jul 2021 08:27:58 +0000 (UTC) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 011A16EA38; Thu, 22 Jul 2021 08:27:55 +0000 (UTC) X-IronPort-AV: E=McAfee;i="6200,9189,10052"; a="275414930" X-IronPort-AV: E=Sophos;i="5.84,260,1620716400"; d="scan'208";a="275414930" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Jul 2021 01:27:53 -0700 X-IronPort-AV: E=Sophos;i="5.84,260,1620716400"; d="scan'208";a="470544441" Received: from cstylian-mobl3.ger.corp.intel.com (HELO [10.213.198.98]) ([10.213.198.98]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Jul 2021 01:27:51 -0700 To: Lucas De Marchi References: <20210720232014.3302645-1-lucas.demarchi@intel.com> <20210720232014.3302645-5-lucas.demarchi@intel.com> <079da526-6b19-3b44-e3d0-c23e1a61e9b1@linux.intel.com> <20210721184422.fvpmhes2uw2tbax3@ldmartin-desk2> From: Tvrtko Ursulin Organization: Intel Corporation UK Plc Message-ID: <44eec779-d76c-38ab-9c0f-a71dbceee385@linux.intel.com> Date: Thu, 22 Jul 2021 09:27:49 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: <20210721184422.fvpmhes2uw2tbax3@ldmartin-desk2> Content-Language: en-US Subject: Re: [Intel-gfx] [PATCH 4/4] drm/i915/gt: nuke gen6_hw_id 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: intel-gfx@lists.freedesktop.org, Tomas Winkler , dri-devel@lists.freedesktop.org Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Ck9uIDIxLzA3LzIwMjEgMTk6NDQsIEx1Y2FzIERlIE1hcmNoaSB3cm90ZToKPiBPbiBXZWQsIEp1 bCAyMSwgMjAyMSBhdCAxMDoyNTo1OUFNICswMTAwLCBUdnJ0a28gVXJzdWxpbiB3cm90ZToKPj4K Pj4gT24gMjEvMDcvMjAyMSAwMDoyMCwgTHVjYXMgRGUgTWFyY2hpIHdyb3RlOgo+Pj4gVGhpcyBp cyBvbmx5IHVzZWQgYnkgR1JBUEhJQ1NfVkVSID09IDYgYW5kIEdSQVBISUNTX1ZFUiA9PSA3LiBB bGwgb3RoZXIKPj4+IHJlY2VudCBwbGF0Zm9ybXMgZG8gbm90IGRlcGVuZCBvbiB0aGlzIGZpZWxk LCBzbyBpdCBkb2Vzbid0IG1ha2UgbXVjaAo+Pj4gc2Vuc2UgdG8ga2VlcCBpdCBnZW5lcmljIGxp a2UgdGhhdC4gSW5zdGVhZCwganVzdCBkbyBhIG1hcHBpbmcgZnJvbQo+Pj4gZW5naW5lIGNsYXNz IHRvIEhXIElEIGluIHRoZSBzaW5nbGUgcGxhY2UgdGhhdCBpcyBuZWVkZWQuCj4+Pgo+Pj4gU2ln bmVkLW9mZi1ieTogTHVjYXMgRGUgTWFyY2hpIDxsdWNhcy5kZW1hcmNoaUBpbnRlbC5jb20+Cj4+ PiAtLS0KPj4+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX2NzLmPCoMKg wqAgfCA2IC0tLS0tLQo+Pj4gwqBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVf dHlwZXMuaCB8IDggLS0tLS0tLS0KPj4+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcu aMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwgNCArKystCj4+PiDCoDMgZmlsZXMgY2hhbmdl ZCwgMyBpbnNlcnRpb25zKCspLCAxNSBkZWxldGlvbnMoLSkKPj4+Cj4+PiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX2NzLmMgCj4+PiBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV9jcy5jCj4+PiBpbmRleCA1MDgyMjFkZTQxMWMu LjBhMDRlOGQ5MGU5ZSAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2lu dGVsX2VuZ2luZV9jcy5jCj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9l bmdpbmVfY3MuYwo+Pj4gQEAgLTQyLDcgKzQyLDYgQEAKPj4+IMKgI2RlZmluZSBNQVhfTU1JT19C QVNFUyAzCj4+PiDCoHN0cnVjdCBlbmdpbmVfaW5mbyB7Cj4+PiAtwqDCoMKgIHU4IGdlbjZfaHdf aWQ7Cj4+PiDCoMKgwqDCoCB1OCBjbGFzczsKPj4+IMKgwqDCoMKgIHU4IGluc3RhbmNlOwo+Pj4g wqDCoMKgwqAgLyogbW1pbyBiYXNlcyB0YWJsZSAqbXVzdCogYmUgc29ydGVkIGluIHJldmVyc2Ug Z3JhcGhpY3NfdmVyIAo+Pj4gb3JkZXIgKi8KPj4+IEBAIC01NCw3ICs1Myw2IEBAIHN0cnVjdCBl bmdpbmVfaW5mbyB7Cj4+PiDCoHN0YXRpYyBjb25zdCBzdHJ1Y3QgZW5naW5lX2luZm8gaW50ZWxf ZW5naW5lc1tdID0gewo+Pj4gwqDCoMKgwqAgW1JDUzBdID0gewo+Pj4gLcKgwqDCoMKgwqDCoMKg IC5nZW42X2h3X2lkID0gUkNTMF9IVywKPj4+IMKgwqDCoMKgwqDCoMKgwqAgLmNsYXNzID0gUkVO REVSX0NMQVNTLAo+Pj4gwqDCoMKgwqDCoMKgwqDCoCAuaW5zdGFuY2UgPSAwLAo+Pj4gwqDCoMKg wqDCoMKgwqDCoCAubW1pb19iYXNlcyA9IHsKPj4+IEBAIC02Miw3ICs2MCw2IEBAIHN0YXRpYyBj b25zdCBzdHJ1Y3QgZW5naW5lX2luZm8gaW50ZWxfZW5naW5lc1tdID0gewo+Pj4gwqDCoMKgwqDC oMKgwqDCoCB9LAo+Pj4gwqDCoMKgwqAgfSwKPj4+IMKgwqDCoMKgIFtCQ1MwXSA9IHsKPj4+IC3C oMKgwqDCoMKgwqDCoCAuZ2VuNl9od19pZCA9IEJDUzBfSFcsCj4+PiDCoMKgwqDCoMKgwqDCoMKg IC5jbGFzcyA9IENPUFlfRU5HSU5FX0NMQVNTLAo+Pj4gwqDCoMKgwqDCoMKgwqDCoCAuaW5zdGFu Y2UgPSAwLAo+Pj4gwqDCoMKgwqDCoMKgwqDCoCAubW1pb19iYXNlcyA9IHsKPj4+IEBAIC03MCw3 ICs2Nyw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZW5naW5lX2luZm8gaW50ZWxfZW5naW5lc1td ID0gewo+Pj4gwqDCoMKgwqDCoMKgwqDCoCB9LAo+Pj4gwqDCoMKgwqAgfSwKPj4+IMKgwqDCoMKg IFtWQ1MwXSA9IHsKPj4+IC3CoMKgwqDCoMKgwqDCoCAuZ2VuNl9od19pZCA9IFZDUzBfSFcsCj4+ PiDCoMKgwqDCoMKgwqDCoMKgIC5jbGFzcyA9IFZJREVPX0RFQ09ERV9DTEFTUywKPj4+IMKgwqDC oMKgwqDCoMKgwqAgLmluc3RhbmNlID0gMCwKPj4+IMKgwqDCoMKgwqDCoMKgwqAgLm1taW9fYmFz ZXMgPSB7Cj4+PiBAQCAtMTAyLDcgKzk4LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBlbmdpbmVf aW5mbyBpbnRlbF9lbmdpbmVzW10gPSB7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgIH0sCj4+PiDCoMKg wqDCoCB9LAo+Pj4gwqDCoMKgwqAgW1ZFQ1MwXSA9IHsKPj4+IC3CoMKgwqDCoMKgwqDCoCAuZ2Vu Nl9od19pZCA9IFZFQ1MwX0hXLAo+Pj4gwqDCoMKgwqDCoMKgwqDCoCAuY2xhc3MgPSBWSURFT19F TkhBTkNFTUVOVF9DTEFTUywKPj4+IMKgwqDCoMKgwqDCoMKgwqAgLmluc3RhbmNlID0gMCwKPj4+ IMKgwqDCoMKgwqDCoMKgwqAgLm1taW9fYmFzZXMgPSB7Cj4+PiBAQCAtMjkwLDcgKzI4NSw2IEBA IHN0YXRpYyBpbnQgaW50ZWxfZW5naW5lX3NldHVwKHN0cnVjdCBpbnRlbF9ndCAKPj4+ICpndCwg ZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQpCj4+PiDCoMKgwqDCoCBlbmdpbmUtPmk5MTUgPSBpOTE1 Owo+Pj4gwqDCoMKgwqAgZW5naW5lLT5ndCA9IGd0Owo+Pj4gwqDCoMKgwqAgZW5naW5lLT51bmNv cmUgPSBndC0+dW5jb3JlOwo+Pj4gLcKgwqDCoCBlbmdpbmUtPmdlbjZfaHdfaWQgPSBpbmZvLT5n ZW42X2h3X2lkOwo+Pj4gwqDCoMKgwqAgZ3VjX2NsYXNzID0gZW5naW5lX2NsYXNzX3RvX2d1Y19j bGFzcyhpbmZvLT5jbGFzcyk7Cj4+PiDCoMKgwqDCoCBlbmdpbmUtPmd1Y19pZCA9IE1BS0VfR1VD X0lEKGd1Y19jbGFzcywgaW5mby0+aW5zdGFuY2UpOwo+Pj4gwqDCoMKgwqAgZW5naW5lLT5tbWlv X2Jhc2UgPSBfX2VuZ2luZV9tbWlvX2Jhc2UoaTkxNSwgaW5mby0+bW1pb19iYXNlcyk7Cj4+PiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX3R5cGVzLmgg Cj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV90eXBlcy5oCj4+PiBp bmRleCAyNjY0MjJkOGQxYjEuLjY0MzMwYmZiNzY0MSAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV90eXBlcy5oCj4+PiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfdHlwZXMuaAo+Pj4gQEAgLTI4LDEzICsyOCw2IEBA Cj4+PiDCoCNpbmNsdWRlICJpbnRlbF93YWtlcmVmLmgiCj4+PiDCoCNpbmNsdWRlICJpbnRlbF93 b3JrYXJvdW5kc190eXBlcy5oIgo+Pj4gLS8qIExlZ2FjeSBIVyBFbmdpbmUgSUQgKi8KPj4+IC0K Pj4+IC0jZGVmaW5lIFJDUzBfSFfCoMKgwqDCoMKgwqDCoCAwCj4+PiAtI2RlZmluZSBWQ1MwX0hX wqDCoMKgwqDCoMKgwqAgMQo+Pj4gLSNkZWZpbmUgQkNTMF9IV8KgwqDCoMKgwqDCoMKgIDIKPj4+ IC0jZGVmaW5lIFZFQ1MwX0hXwqDCoMKgIDMKPj4+IC0KPj4+IMKgLyogR2VuMTErIEhXIEVuZ2lu ZSBjbGFzcyArIGluc3RhbmNlICovCj4+PiDCoCNkZWZpbmUgUkVOREVSX0NMQVNTwqDCoMKgwqDC oMKgwqAgMAo+Pj4gwqAjZGVmaW5lIFZJREVPX0RFQ09ERV9DTEFTU8KgwqDCoCAxCj4+PiBAQCAt MjY4LDcgKzI2MSw2IEBAIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mgewo+Pj4gwqDCoMKgwqAgaW50 ZWxfZW5naW5lX21hc2tfdCBtYXNrOwo+Pj4gLcKgwqDCoCB1OCBnZW42X2h3X2lkOwo+Pj4gwqDC oMKgwqAgdTggY2xhc3M7Cj4+PiDCoMKgwqDCoCB1OCBpbnN0YW5jZTsKPj4+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIAo+Pj4gYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X3JlZy5oCj4+PiBpbmRleCA4NzUwZmZjZTlkNjEuLmQ5MTM4NmY0ODI4ZSAxMDA2 NDQKPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPj4+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPj4+IEBAIC0yNTcyLDcgKzI1NzIsOSBAQCBz dGF0aWMgaW5saW5lIGJvb2wgCj4+PiBpOTE1X21taW9fcmVnX3ZhbGlkKGk5MTVfcmVnX3QgcmVn KQo+Pj4gwqAjZGVmaW5lwqDCoCBBUkJfTU9ERV9CV0dUTEJfRElTQUJMRSAoMSA8PCA5KQo+Pj4g wqAjZGVmaW5lwqDCoCBBUkJfTU9ERV9TV0laWkxFX0JEV8KgwqDCoCAoMSA8PCAxKQo+Pj4gwqAj ZGVmaW5lIFJFTkRFUl9IV1NfUEdBX0dFTjfCoMKgwqAgX01NSU8oMHgwNDA4MCkKPj4+IC0jZGVm aW5lIFJJTkdfRkFVTFRfUkVHKGVuZ2luZSnCoMKgwqAgX01NSU8oMHg0MDk0ICsgMHgxMDAgKiAK Pj4+IChlbmdpbmUpLT5nZW42X2h3X2lkKQo+Pj4gKwo+Pj4gKyNkZWZpbmUgX0dFTjZfRU5HSU5F X0NMQVNTX1RPX0lEKGNsYXNzKSBfUElDSygoY2xhc3MpLCAwLCAxLCAzLCAyKQo+Pj4gKyNkZWZp bmUgUklOR19GQVVMVF9SRUcoZW5naW5lKcKgwqDCoCBfTU1JTygweDQwOTQgKyAweDEwMCAqIAo+ Pj4gX0dFTjZfRU5HSU5FX0NMQVNTX1RPX0lEKChlbmdpbmUpLT5jbGFzcykpCj4+Cj4+IE1ha2Vz IHNlbnNlIHRvIG1lLgo+Pgo+PiBNYXliZSBIV19JRCBhbmQgSFdfQ0xBU1MgaW4gdGhlIG1hY3Jv IG5hbWU/IE5vdCBzdXJlLgo+IAo+IEkgY2FuIGRvIHRoYXQuLi4gSSB0aGluayBJIGF2b2lkZWQg aXQgYmVjYXVzZSBpdCBtYWtlcyB0aGUgbWFjcm8KPiB2ZXJ5IGJpZy4gQW55d2F5LCB0aGlzIHNo b3VsZCBiZSBjYWxsZWQgaW4ganVzdCBvbmUgcGxhY2UsIHNvIGl0IGRvZXNuJ3QKPiBtYXR0ZXIg bXVjaC4uLiBJIGNhbiBhZGQgaXQuCj4gCj4+Cj4+IE9ubHkgb3BlbiBJIGhhdmUgaXMgd2h5IHRo ZSAiR2VuMTErIEhXIEVuZ2luZSBjbGFzcyArIGluc3RhbmNlIiAKPj4gY29tbWVudCBhbmQgbm93 IHdlIHdvdWxkIHRpZSB0aGF0LCBhbGxlZ2VkbHkgR2VuMTEgY29uY2VwdCwgd2l0aCAKPj4gR2Vu Ni03LiBDYXJlIHRvIGRvIHNvbWUgZGlnZ2luZz8KPiAKPiBOb3Qgc3VyZS4gVGhpcyBjb21lcyBm cm9tIDNkN2IzMDM5NzQxZCAoImRybS9pOTE1OiBNb3ZlIGVuZ2luZSBJRHMgb3V0IAo+IG9mIGk5 MTVfcmVnLmgiKQo+IHRoYXQgSSByZXZpZXdlZCA6LW8KPiAKPiBDYydpbmfCoCBEYW5pZWxlLiBJ IGRvbid0IHNlZSAiY2xhc3MiIGFzIGEgR2VuMTErIHRoaW5nLiBJcyBpdCBqdXN0IHRoYXQKPiB0 aG9zZSBudW1iZXJzIHN0YXJ0ZWQgdG8gbWFrZSBzZW5zZSBmb3IgZ2VuMTE/wqAgU2luY2UKPiAK PiBhKSB3ZSBhcmUgdXNpbmcgdGhlIGNsYXNzIGV2ZW4gZm9yIEdSQVBISUNTX1ZFUiA8IDExCj4g YikgdGhlIGxlZ2FjeSBIVyBJRHMgc2hvdWxkbid0IGJlIHVzZWQgYW55d2hlcmUgZWxzZSBhbnlt b3JlCj4gCj4gCj4gd2UgY291bGQKPiAKPiAxKSBtb3ZlIHRoZSBsZWdhY3kgZGVmaW5lcyBiYWNr IHRvIGk5MTVfcmVnLmgKPiAyKSB1c2UgdGhlbSBpbiB0aGUgbWFjcm8gYWJvdmUgKElNTyB3b3Vs ZCBzbGlnaHRseSBpbXByb3ZlIHRoZQo+IHJlYWRhYmlsaXR5IG9mIHRoYXQgX1BJQ0soKSBjYWxs KQo+IDMpIFJlbW92ZSB0aGUgIkdlbjExKyIgY29tbWVudCBpbiB0aGUgX0NMQVNTIG1hY3JvcyB0 byBhdm9pZAo+IG1pc3VuZGVyc3RhbmRpbmdzCj4gCj4gCj4gVGhvdWdodHM/CgpXaGF0IE1hdHQg c3VnZ2VzdGVkIHNvdW5kcyBmaW5lIHRvIG1lICh1c2luZyBfUElDSyB3aXRoIApfUklOR19GQVVM VF9SRUdfUkNTIGV0YykuIEl0IHJldGlyZXMgdGhlIGNvbmNlcHQgb2YgaHcgaWQgZnJvbSB0aGUg Y29kZSAKYmFzZSBjb21wbGV0ZWx5IGFuZCBob3BlZnVsbHkgdGhlIG5lZWQgZm9yIGl0IGRvZXMg bm90IHJlLXN1cmZhY2UuCgpSZWdhcmRzLAoKVHZydGtvCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=