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 9DBECC49EA3 for ; Mon, 14 Jun 2021 16:28: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 66D866023F for ; Mon, 14 Jun 2021 16:28:44 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 66D866023F Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=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 80D7789BA9; Mon, 14 Jun 2021 16:28:43 +0000 (UTC) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7383389B5F; Mon, 14 Jun 2021 16:28:42 +0000 (UTC) IronPort-SDR: l0CIW9g+PqRDOfDNa5VPW1iMxJxJdbUHAW6/1SXpc1UR7tu2C8mg51oioU81DsiHxdx5M52ejN /eGKVtB5s1mg== X-IronPort-AV: E=McAfee;i="6200,9189,10015"; a="192953881" X-IronPort-AV: E=Sophos;i="5.83,273,1616482800"; d="scan'208";a="192953881" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Jun 2021 09:28:40 -0700 IronPort-SDR: 872yyFXLjdqnJvub87v8nh0onq5VdqcNLj67K0nK31C7qIPVYzRNtyPQONGwjML5FU//VkLPGu lbc7NOzmytcg== X-IronPort-AV: E=Sophos;i="5.83,273,1616482800"; d="scan'208";a="484138714" Received: from hwang1-mobl.ccr.corp.intel.com (HELO intel.com) ([10.254.36.39]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Jun 2021 09:28:38 -0700 Date: Mon, 14 Jun 2021 12:28:35 -0400 From: Rodrigo Vivi To: Zbigniew =?utf-8?Q?Kempczy=C5=84ski?= Subject: Re: [Intel-gfx] [PATCH] drm/i915: Add relocation exceptions for two other platforms Message-ID: References: <20210610103955.67802-1-zbigniew.kempczynski@intel.com> <20210611060900.GA3298@zkempczy-mobl2> <20210614083530.GB3302@zkempczy-mobl2> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20210614083530.GB3302@zkempczy-mobl2> 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: Daniel Vetter , intel-gfx@lists.freedesktop.org, Lucas De Marchi , dri-devel@lists.freedesktop.org Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" On Mon, Jun 14, 2021 at 10:35:30AM +0200, Zbigniew Kempczyński wrote: > On Fri, Jun 11, 2021 at 04:54:32AM -0400, Rodrigo Vivi wrote: > > On Fri, Jun 11, 2021 at 08:09:00AM +0200, Zbigniew Kempczyński wrote: > > > On Thu, Jun 10, 2021 at 10:36:12AM -0400, Rodrigo Vivi wrote: > > > > On Thu, Jun 10, 2021 at 12:39:55PM +0200, Zbigniew Kempczyński wrote: > > > > > We have established previously we stop using relocations starting > > > > > from gen12 platforms with Tigerlake as an exception. We keep this > > > > > statement but we want to enable relocations conditionally for > > > > > Rocketlake and Alderlake under require_force_probe flag set. > > > > > > > > > > Keeping relocations under require_force_probe flag is interim solution > > > > > until IGTs will be rewritten to use softpin. > > > > > > > > hmm... to be really honest I'm not so happy that we are introducing > > > > a new criteria to the force_probe. > > > > > > > > The criteria was to have a functional driver and not to track uapi. > > > > > > > > But on the other hand I do recognize that the current definition > > > > of the flag allows that, because we have established that with > > > > this behavior, the "driver for new Intel graphics devices that > > > > are recognized but not properly supported by this kernel version" > > > > (as stated in the Kconfig for the DRM_I915_FORCE_PROBE). > > > > > > > > However... > > > > > > > > > > > > > > v2: - remove inline from function definition (Jani) > > > > > - fix indentation > > > > > > > > > > v3: change to GRAPHICS_VER() (Zbigniew) > > > > > > > > > > Signed-off-by: Zbigniew Kempczyński > > > > > Cc: Dave Airlie > > > > > Cc: Daniel Vetter > > > > > Cc: Jason Ekstrand > > > > > Acked-by: Dave Airlie > > > > > --- > > > > > .../gpu/drm/i915/gem/i915_gem_execbuffer.c | 24 +++++++++++++++---- > > > > > 1 file changed, 19 insertions(+), 5 deletions(-) > > > > > > > > > > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c > > > > > index a8abc9af5ff4..30c4f0549ea0 100644 > > > > > --- a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c > > > > > +++ b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c > > > > > @@ -491,16 +491,30 @@ eb_unreserve_vma(struct eb_vma *ev) > > > > > ev->flags &= ~__EXEC_OBJECT_RESERVED; > > > > > } > > > > > > > > > > +static bool platform_has_relocs_enabled(const struct i915_execbuffer *eb) > > > > > +{ > > > > > + /* > > > > > + * Relocations are disallowed starting from gen12 with Tigerlake > > > > > + * as an exception. We allow temporarily use relocations for Rocketlake > > > > > + * and Alderlake when require_force_probe flag is set. > > > > > + */ > > > > > + if (GRAPHICS_VER(eb->i915) < 12 || IS_TIGERLAKE(eb->i915)) > > > > > + return true; > > > > > + > > > > > + if (INTEL_INFO(eb->i915)->require_force_probe && > > > > > + (IS_ROCKETLAKE(eb->i915) > > > > > > > > This ship has sailed... RKL is not protected by this flag any longer. > > > > Should this be on the TGL side now? > > > > > > +Lucas > > > > > > I think no, RKL has relocations disabled so we cannot put it to TGL side. > > > So if RKL is already released then putting it under require_force_probe > > > flag is wrong and only I can do is to remove it from that condition. > > > There's no option to unblock RKL on IGT CI until we rewrite all the tests. > > > We have to rely then on ADL* with require_force_probe flag to check how > > > ADL will work with relocations. > > > > So... I'm confused now. I'm missing the point of this patch then. > > I thought the reason was to protect from any user space to attempt to > > use the relocation, unless using the force_probe temporarily only for > > these platforms. > > But if I'm understanding correctly now it is only to silence CI?! > > Is that the case? > > Is the CI noise so bad? > > The point of the patch is to verify driver on ADL. IGT still uses > relocations (we're rewriting them now but it takes time) so execbuf > on ADL just exits with failure. We're blind right now about driver > behavior and we want to address this - temporary enable relocations > on ADL (under flag) to see if driver works properly on that platform. Okay, so I believe we need a bigger code refactor here. Whenever we attempt to use the relocation but we are on ADL we need to have a big bold message saying this should not be used. That this code path is deprecated and getting removed... My fear is that after adding this some UMD, other than IGT, would start using relocation back again and then the removal of require_force_probe of ADL would mean regression and we would need to support that forever again. Ideally a bold drm_warn, but I understand this might impact CI so at least a drm_info with capital letters... > > > > > > > > > > > > > > > || IS_ALDERLAKE_S(eb->i915) || > > > > > + IS_ALDERLAKE_P(eb->i915))) > > > > > > > > How to ensure that we will easily catch this when removing the > > > > flag? > > > > > > > > I mean, should we have a GEM_BUG or drm_err message when these > > > > platforms in this list has not the required_force_probe? > > > > > > I don't think we need GEM_BUG()/drm_err() - when IGT tests will support > > > both - reloc + no-reloc - then condition will be limited to: > > > > > > if (GRAPHICS_VER(eb->i915) < 12 || IS_TIGERLAKE(eb->i915)) > > > return true; > > > > > > return false; > > > > > > so require_force_probe condition will be deleted and we won't need it > > > anymore (IGTs will be ready). > > > > yes... > > but then, when we remove the flag we will forget to come here and remove > > this check. > > I think we won't forget - this is cherry on top of rewriting IGT - > to switch to no-reloc on ADL, so that condition disappear. believe me, we will forget to remove this function if we don't start warning that ADL is not protected by the flag anymore... like we were about to add RKL and live that useless there forever... > > > > > Oh, and I just thought that we might need drm_error when the protection > > doesn't exist for the platform, but also a drm_info to the user to tell > > this is a temporary accepted behavior, but that will be removed later > > > > The concern is if any other userspace was using the flag and suddently move to a > > version without the flag, it would be considered a regression... > > That means I don't understand the meaning of that flag. I thought it is > to enforce probe of driver on platform which behavior is not already > well defined and we want to "try" driver on it. The goal of the flag is to protect end users to get a unstable driver support. In special, linux installer .iso images where driver cannot be updated... if user gets a old .iso with driver from the enabling times and a brand new platform, the installation migh hang or get blank screens. It was a nightmare in the past. But the flag was never intended to be used with UAPI decisions, so this case here is changing this... > > -- > Zbigniew > > > > > > > > > -- > > > Zbigniew > > > > > > > > > > > > + return true; > > > > > + > > > > > + return false; > > > > > +} > > > > > + > > > > > static int > > > > > eb_validate_vma(struct i915_execbuffer *eb, > > > > > struct drm_i915_gem_exec_object2 *entry, > > > > > struct i915_vma *vma) > > > > > { > > > > > - /* Relocations are disallowed for all platforms after TGL-LP. This > > > > > - * also covers all platforms with local memory. > > > > > - */ > > > > > - if (entry->relocation_count && > > > > > - GRAPHICS_VER(eb->i915) >= 12 && !IS_TIGERLAKE(eb->i915)) > > > > > + if (entry->relocation_count && !platform_has_relocs_enabled(eb)) > > > > > return -EINVAL; > > > > > > > > > > if (unlikely(entry->flags & eb->invalid_flags)) > > > > > -- > > > > > 2.26.0 > > > > > > > > > > _______________________________________________ > > > > > Intel-gfx mailing list > > > > > Intel-gfx@lists.freedesktop.org > > > > > https://lists.freedesktop.org/mailman/listinfo/intel-gfx > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx 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 D7CDDC2B9F4 for ; Mon, 14 Jun 2021 16:28: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 82AE7613D3 for ; Mon, 14 Jun 2021 16:28:43 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 82AE7613D3 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=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 29B1489B5F; Mon, 14 Jun 2021 16:28:43 +0000 (UTC) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7383389B5F; Mon, 14 Jun 2021 16:28:42 +0000 (UTC) IronPort-SDR: l0CIW9g+PqRDOfDNa5VPW1iMxJxJdbUHAW6/1SXpc1UR7tu2C8mg51oioU81DsiHxdx5M52ejN /eGKVtB5s1mg== X-IronPort-AV: E=McAfee;i="6200,9189,10015"; a="192953881" X-IronPort-AV: E=Sophos;i="5.83,273,1616482800"; d="scan'208";a="192953881" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Jun 2021 09:28:40 -0700 IronPort-SDR: 872yyFXLjdqnJvub87v8nh0onq5VdqcNLj67K0nK31C7qIPVYzRNtyPQONGwjML5FU//VkLPGu lbc7NOzmytcg== X-IronPort-AV: E=Sophos;i="5.83,273,1616482800"; d="scan'208";a="484138714" Received: from hwang1-mobl.ccr.corp.intel.com (HELO intel.com) ([10.254.36.39]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Jun 2021 09:28:38 -0700 Date: Mon, 14 Jun 2021 12:28:35 -0400 From: Rodrigo Vivi To: Zbigniew =?utf-8?Q?Kempczy=C5=84ski?= Message-ID: References: <20210610103955.67802-1-zbigniew.kempczynski@intel.com> <20210611060900.GA3298@zkempczy-mobl2> <20210614083530.GB3302@zkempczy-mobl2> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20210614083530.GB3302@zkempczy-mobl2> Subject: Re: [Intel-gfx] [PATCH] drm/i915: Add relocation exceptions for two other platforms 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: Daniel Vetter , intel-gfx@lists.freedesktop.org, Lucas De Marchi , dri-devel@lists.freedesktop.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" T24gTW9uLCBKdW4gMTQsIDIwMjEgYXQgMTA6MzU6MzBBTSArMDIwMCwgWmJpZ25pZXcgS2VtcGN6 ecWEc2tpIHdyb3RlOgo+IE9uIEZyaSwgSnVuIDExLCAyMDIxIGF0IDA0OjU0OjMyQU0gLTA0MDAs IFJvZHJpZ28gVml2aSB3cm90ZToKPiA+IE9uIEZyaSwgSnVuIDExLCAyMDIxIGF0IDA4OjA5OjAw QU0gKzAyMDAsIFpiaWduaWV3IEtlbXBjennFhHNraSB3cm90ZToKPiA+ID4gT24gVGh1LCBKdW4g MTAsIDIwMjEgYXQgMTA6MzY6MTJBTSAtMDQwMCwgUm9kcmlnbyBWaXZpIHdyb3RlOgo+ID4gPiA+ IE9uIFRodSwgSnVuIDEwLCAyMDIxIGF0IDEyOjM5OjU1UE0gKzAyMDAsIFpiaWduaWV3IEtlbXBj ennFhHNraSB3cm90ZToKPiA+ID4gPiA+IFdlIGhhdmUgZXN0YWJsaXNoZWQgcHJldmlvdXNseSB3 ZSBzdG9wIHVzaW5nIHJlbG9jYXRpb25zIHN0YXJ0aW5nCj4gPiA+ID4gPiBmcm9tIGdlbjEyIHBs YXRmb3JtcyB3aXRoIFRpZ2VybGFrZSBhcyBhbiBleGNlcHRpb24uIFdlIGtlZXAgdGhpcwo+ID4g PiA+ID4gc3RhdGVtZW50IGJ1dCB3ZSB3YW50IHRvIGVuYWJsZSByZWxvY2F0aW9ucyBjb25kaXRp b25hbGx5IGZvcgo+ID4gPiA+ID4gUm9ja2V0bGFrZSBhbmQgQWxkZXJsYWtlIHVuZGVyIHJlcXVp cmVfZm9yY2VfcHJvYmUgZmxhZyBzZXQuCj4gPiA+ID4gPiAKPiA+ID4gPiA+IEtlZXBpbmcgcmVs b2NhdGlvbnMgdW5kZXIgcmVxdWlyZV9mb3JjZV9wcm9iZSBmbGFnIGlzIGludGVyaW0gc29sdXRp b24KPiA+ID4gPiA+IHVudGlsIElHVHMgd2lsbCBiZSByZXdyaXR0ZW4gdG8gdXNlIHNvZnRwaW4u Cj4gPiA+ID4gCj4gPiA+ID4gaG1tLi4uIHRvIGJlIHJlYWxseSBob25lc3QgSSdtIG5vdCBzbyBo YXBweSB0aGF0IHdlIGFyZSBpbnRyb2R1Y2luZwo+ID4gPiA+IGEgbmV3IGNyaXRlcmlhIHRvIHRo ZSBmb3JjZV9wcm9iZS4KPiA+ID4gPiAKPiA+ID4gPiBUaGUgY3JpdGVyaWEgd2FzIHRvIGhhdmUg YSBmdW5jdGlvbmFsIGRyaXZlciBhbmQgbm90IHRvIHRyYWNrIHVhcGkuCj4gPiA+ID4gCj4gPiA+ ID4gQnV0IG9uIHRoZSBvdGhlciBoYW5kIEkgZG8gcmVjb2duaXplIHRoYXQgdGhlIGN1cnJlbnQg ZGVmaW5pdGlvbgo+ID4gPiA+IG9mIHRoZSBmbGFnIGFsbG93cyB0aGF0LCBiZWNhdXNlIHdlIGhh dmUgZXN0YWJsaXNoZWQgdGhhdCB3aXRoCj4gPiA+ID4gdGhpcyBiZWhhdmlvciwgdGhlICJkcml2 ZXIgZm9yIG5ldyBJbnRlbCBncmFwaGljcyBkZXZpY2VzIHRoYXQKPiA+ID4gPiBhcmUgcmVjb2du aXplZCBidXQgbm90IHByb3Blcmx5IHN1cHBvcnRlZCBieSB0aGlzIGtlcm5lbCB2ZXJzaW9uIgo+ ID4gPiA+IChhcyBzdGF0ZWQgaW4gdGhlIEtjb25maWcgZm9yIHRoZSBEUk1fSTkxNV9GT1JDRV9Q Uk9CRSkuCj4gPiA+ID4gCj4gPiA+ID4gSG93ZXZlci4uLgo+ID4gPiA+IAo+ID4gPiA+ID4gCj4g PiA+ID4gPiB2MjogLSByZW1vdmUgaW5saW5lIGZyb20gZnVuY3Rpb24gZGVmaW5pdGlvbiAoSmFu aSkKPiA+ID4gPiA+ICAgICAtIGZpeCBpbmRlbnRhdGlvbgo+ID4gPiA+ID4gCj4gPiA+ID4gPiB2 MzogY2hhbmdlIHRvIEdSQVBISUNTX1ZFUigpIChaYmlnbmlldykKPiA+ID4gPiA+IAo+ID4gPiA+ ID4gU2lnbmVkLW9mZi1ieTogWmJpZ25pZXcgS2VtcGN6ecWEc2tpIDx6Ymlnbmlldy5rZW1wY3p5 bnNraUBpbnRlbC5jb20+Cj4gPiA+ID4gPiBDYzogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0 LmNvbT4KPiA+ID4gPiA+IENjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGludGVsLmNv bT4KPiA+ID4gPiA+IENjOiBKYXNvbiBFa3N0cmFuZCA8amFzb25Aamxla3N0cmFuZC5uZXQ+Cj4g PiA+ID4gPiBBY2tlZC1ieTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KPiA+ID4g PiA+IC0tLQo+ID4gPiA+ID4gIC4uLi9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2V4ZWNidWZm ZXIuYyAgICB8IDI0ICsrKysrKysrKysrKysrKy0tLS0KPiA+ID4gPiA+ICAxIGZpbGUgY2hhbmdl ZCwgMTkgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKPiA+ID4gPiA+IAo+ID4gPiA+ID4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9leGVjYnVmZmVy LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fZXhlY2J1ZmZlci5jCj4gPiA+ ID4gPiBpbmRleCBhOGFiYzlhZjVmZjQuLjMwYzRmMDU0OWVhMCAxMDA2NDQKPiA+ID4gPiA+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKPiA+ID4g PiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9leGVjYnVmZmVyLmMK PiA+ID4gPiA+IEBAIC00OTEsMTYgKzQ5MSwzMCBAQCBlYl91bnJlc2VydmVfdm1hKHN0cnVjdCBl Yl92bWEgKmV2KQo+ID4gPiA+ID4gIAlldi0+ZmxhZ3MgJj0gfl9fRVhFQ19PQkpFQ1RfUkVTRVJW RUQ7Cj4gPiA+ID4gPiAgfQo+ID4gPiA+ID4gIAo+ID4gPiA+ID4gK3N0YXRpYyBib29sIHBsYXRm b3JtX2hhc19yZWxvY3NfZW5hYmxlZChjb25zdCBzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYikK PiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiArCS8qCj4gPiA+ID4gPiArCSAqIFJlbG9jYXRpb25zIGFy ZSBkaXNhbGxvd2VkIHN0YXJ0aW5nIGZyb20gZ2VuMTIgd2l0aCBUaWdlcmxha2UKPiA+ID4gPiA+ ICsJICogYXMgYW4gZXhjZXB0aW9uLiBXZSBhbGxvdyB0ZW1wb3JhcmlseSB1c2UgcmVsb2NhdGlv bnMgZm9yIFJvY2tldGxha2UKPiA+ID4gPiA+ICsJICogYW5kIEFsZGVybGFrZSB3aGVuIHJlcXVp cmVfZm9yY2VfcHJvYmUgZmxhZyBpcyBzZXQuCj4gPiA+ID4gPiArCSAqLwo+ID4gPiA+ID4gKwlp ZiAoR1JBUEhJQ1NfVkVSKGViLT5pOTE1KSA8IDEyIHx8IElTX1RJR0VSTEFLRShlYi0+aTkxNSkp Cj4gPiA+ID4gPiArCQlyZXR1cm4gdHJ1ZTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJaWYgKElO VEVMX0lORk8oZWItPmk5MTUpLT5yZXF1aXJlX2ZvcmNlX3Byb2JlICYmCj4gPiA+ID4gPiArCSAg ICAoSVNfUk9DS0VUTEFLRShlYi0+aTkxNSkKPiA+ID4gPiAKPiA+ID4gPiBUaGlzIHNoaXAgaGFz IHNhaWxlZC4uLiBSS0wgaXMgbm90IHByb3RlY3RlZCBieSB0aGlzIGZsYWcgYW55IGxvbmdlci4K PiA+ID4gPiBTaG91bGQgdGhpcyBiZSBvbiB0aGUgVEdMIHNpZGUgbm93Pwo+ID4gPiAKPiA+ID4g K0x1Y2FzCj4gPiA+IAo+ID4gPiBJIHRoaW5rIG5vLCBSS0wgaGFzIHJlbG9jYXRpb25zIGRpc2Fi bGVkIHNvIHdlIGNhbm5vdCBwdXQgaXQgdG8gVEdMIHNpZGUuCj4gPiA+IFNvIGlmIFJLTCBpcyBh bHJlYWR5IHJlbGVhc2VkIHRoZW4gcHV0dGluZyBpdCB1bmRlciByZXF1aXJlX2ZvcmNlX3Byb2Jl IAo+ID4gPiBmbGFnIGlzIHdyb25nIGFuZCBvbmx5IEkgY2FuIGRvIGlzIHRvIHJlbW92ZSBpdCBm cm9tIHRoYXQgY29uZGl0aW9uLiAKPiA+ID4gVGhlcmUncyBubyBvcHRpb24gdG8gdW5ibG9jayBS S0wgb24gSUdUIENJIHVudGlsIHdlIHJld3JpdGUgYWxsIHRoZSB0ZXN0cy4KPiA+ID4gV2UgaGF2 ZSB0byByZWx5IHRoZW4gb24gQURMKiB3aXRoIHJlcXVpcmVfZm9yY2VfcHJvYmUgZmxhZyB0byBj aGVjayBob3cKPiA+ID4gQURMIHdpbGwgd29yayB3aXRoIHJlbG9jYXRpb25zLiAKPiA+IAo+ID4g U28uLi4gSSdtIGNvbmZ1c2VkIG5vdy4gSSdtIG1pc3NpbmcgdGhlIHBvaW50IG9mIHRoaXMgcGF0 Y2ggdGhlbi4KPiA+IEkgdGhvdWdodCB0aGUgcmVhc29uIHdhcyB0byBwcm90ZWN0IGZyb20gYW55 IHVzZXIgc3BhY2UgdG8gYXR0ZW1wdCB0bwo+ID4gdXNlIHRoZSByZWxvY2F0aW9uLCB1bmxlc3Mg dXNpbmcgdGhlIGZvcmNlX3Byb2JlIHRlbXBvcmFyaWx5IG9ubHkgZm9yCj4gPiB0aGVzZSBwbGF0 Zm9ybXMuCj4gPiBCdXQgaWYgSSdtIHVuZGVyc3RhbmRpbmcgY29ycmVjdGx5IG5vdyBpdCBpcyBv bmx5IHRvIHNpbGVuY2UgQ0k/IQo+ID4gSXMgdGhhdCB0aGUgY2FzZT8KPiA+IElzIHRoZSBDSSBu b2lzZSBzbyBiYWQ/Cj4gCj4gVGhlIHBvaW50IG9mIHRoZSBwYXRjaCBpcyB0byB2ZXJpZnkgZHJp dmVyIG9uIEFETC4gSUdUIHN0aWxsIHVzZXMgCj4gcmVsb2NhdGlvbnMgKHdlJ3JlIHJld3JpdGlu ZyB0aGVtIG5vdyBidXQgaXQgdGFrZXMgdGltZSkgc28gZXhlY2J1Zgo+IG9uIEFETCBqdXN0IGV4 aXRzIHdpdGggZmFpbHVyZS4gV2UncmUgYmxpbmQgcmlnaHQgbm93IGFib3V0IGRyaXZlcgo+IGJl aGF2aW9yIGFuZCB3ZSB3YW50IHRvIGFkZHJlc3MgdGhpcyAtIHRlbXBvcmFyeSBlbmFibGUgcmVs b2NhdGlvbnMKPiBvbiBBREwgKHVuZGVyIGZsYWcpIHRvIHNlZSBpZiBkcml2ZXIgd29ya3MgcHJv cGVybHkgb24gdGhhdCBwbGF0Zm9ybS4KCk9rYXksIHNvIEkgYmVsaWV2ZSB3ZSBuZWVkIGEgYmln Z2VyIGNvZGUgcmVmYWN0b3IgaGVyZS4gV2hlbmV2ZXIKd2UgYXR0ZW1wdCB0byB1c2UgdGhlIHJl bG9jYXRpb24gYnV0IHdlIGFyZSBvbiBBREwgd2UgbmVlZCB0byBoYXZlCmEgYmlnIGJvbGQgbWVz c2FnZSBzYXlpbmcgdGhpcyBzaG91bGQgbm90IGJlIHVzZWQuIFRoYXQgdGhpcyBjb2RlCnBhdGgg aXMgZGVwcmVjYXRlZCBhbmQgZ2V0dGluZyByZW1vdmVkLi4uCgpNeSBmZWFyIGlzIHRoYXQgYWZ0 ZXIgYWRkaW5nIHRoaXMgc29tZSBVTUQsIG90aGVyIHRoYW4gSUdULAp3b3VsZCBzdGFydCB1c2lu ZyByZWxvY2F0aW9uIGJhY2sgYWdhaW4gYW5kIHRoZW4gdGhlIHJlbW92YWwKb2YgcmVxdWlyZV9m b3JjZV9wcm9iZSBvZiBBREwgd291bGQgbWVhbiByZWdyZXNzaW9uIGFuZCB3ZSB3b3VsZApuZWVk IHRvIHN1cHBvcnQgdGhhdCBmb3JldmVyIGFnYWluLgoKSWRlYWxseSBhIGJvbGQgZHJtX3dhcm4s IGJ1dCBJIHVuZGVyc3RhbmQgdGhpcyBtaWdodCBpbXBhY3QgQ0kKc28gYXQgbGVhc3QgYSBkcm1f aW5mbyB3aXRoIGNhcGl0YWwgbGV0dGVycy4uLgoKPiAKPiA+IAo+ID4gPiAKPiA+ID4gPiAKPiA+ ID4gPiA+ICB8fCBJU19BTERFUkxBS0VfUyhlYi0+aTkxNSkgfHwKPiA+ID4gPiA+ICsJICAgICBJ U19BTERFUkxBS0VfUChlYi0+aTkxNSkpKQo+ID4gPiA+IAo+ID4gPiA+IEhvdyB0byBlbnN1cmUg dGhhdCB3ZSB3aWxsIGVhc2lseSBjYXRjaCB0aGlzIHdoZW4gcmVtb3ZpbmcgdGhlCj4gPiA+ID4g ZmxhZz8KPiA+ID4gPiAKPiA+ID4gPiBJIG1lYW4sIHNob3VsZCB3ZSBoYXZlIGEgR0VNX0JVRyBv ciBkcm1fZXJyIG1lc3NhZ2Ugd2hlbiB0aGVzZQo+ID4gPiA+IHBsYXRmb3JtcyBpbiB0aGlzIGxp c3QgaGFzIG5vdCB0aGUgcmVxdWlyZWRfZm9yY2VfcHJvYmU/Cj4gPiA+IAo+ID4gPiBJIGRvbid0 IHRoaW5rIHdlIG5lZWQgR0VNX0JVRygpL2RybV9lcnIoKSAtIHdoZW4gSUdUIHRlc3RzIHdpbGwg c3VwcG9ydAo+ID4gPiBib3RoIC0gcmVsb2MgKyBuby1yZWxvYyAtIHRoZW4gY29uZGl0aW9uIHdp bGwgYmUgbGltaXRlZCB0bzoKPiA+ID4gCj4gPiA+ICAgICAgICAgaWYgKEdSQVBISUNTX1ZFUihl Yi0+aTkxNSkgPCAxMiB8fCBJU19USUdFUkxBS0UoZWItPmk5MTUpKQo+ID4gPiAgICAgICAgICAg ICAgICAgcmV0dXJuIHRydWU7Cj4gPiA+ICAKPiA+ID4gICAgICAgICByZXR1cm4gZmFsc2U7Cj4g PiA+IAo+ID4gPiBzbyByZXF1aXJlX2ZvcmNlX3Byb2JlIGNvbmRpdGlvbiB3aWxsIGJlIGRlbGV0 ZWQgYW5kIHdlIHdvbid0IG5lZWQgaXQKPiA+ID4gYW55bW9yZSAoSUdUcyB3aWxsIGJlIHJlYWR5 KS4KPiA+IAo+ID4geWVzLi4uCj4gPiBidXQgdGhlbiwgd2hlbiB3ZSByZW1vdmUgdGhlIGZsYWcg d2Ugd2lsbCBmb3JnZXQgdG8gY29tZSBoZXJlIGFuZCByZW1vdmUKPiA+IHRoaXMgY2hlY2suCj4g Cj4gSSB0aGluayB3ZSB3b24ndCBmb3JnZXQgLSB0aGlzIGlzIGNoZXJyeSBvbiB0b3Agb2YgcmV3 cml0aW5nIElHVCAtCj4gdG8gc3dpdGNoIHRvIG5vLXJlbG9jIG9uIEFETCwgc28gdGhhdCBjb25k aXRpb24gZGlzYXBwZWFyLgoKYmVsaWV2ZSBtZSwgd2Ugd2lsbCBmb3JnZXQgdG8gcmVtb3ZlIHRo aXMgZnVuY3Rpb24gaWYgd2UgZG9uJ3QKc3RhcnQgd2FybmluZyB0aGF0IEFETCBpcyBub3QgcHJv dGVjdGVkIGJ5IHRoZSBmbGFnIGFueW1vcmUuLi4KbGlrZSB3ZSB3ZXJlIGFib3V0IHRvIGFkZCBS S0wgYW5kIGxpdmUgdGhhdCB1c2VsZXNzIHRoZXJlIGZvcmV2ZXIuLi4KCj4gCj4gPiAKPiA+IE9o LCBhbmQgSSBqdXN0IHRob3VnaHQgdGhhdCB3ZSBtaWdodCBuZWVkIGRybV9lcnJvciB3aGVuIHRo ZSBwcm90ZWN0aW9uCj4gPiBkb2Vzbid0IGV4aXN0IGZvciB0aGUgcGxhdGZvcm0sIGJ1dCBhbHNv IGEgZHJtX2luZm8gdG8gdGhlIHVzZXIgdG8gdGVsbAo+ID4gdGhpcyBpcyBhIHRlbXBvcmFyeSBh Y2NlcHRlZCBiZWhhdmlvciwgYnV0IHRoYXQgd2lsbCBiZSByZW1vdmVkIGxhdGVyCj4gPiAKPiA+ IFRoZSBjb25jZXJuIGlzIGlmIGFueSBvdGhlciB1c2Vyc3BhY2Ugd2FzIHVzaW5nIHRoZSBmbGFn IGFuZCBzdWRkZW50bHkgbW92ZSB0byBhCj4gPiB2ZXJzaW9uIHdpdGhvdXQgdGhlIGZsYWcsIGl0 IHdvdWxkIGJlIGNvbnNpZGVyZWQgYSByZWdyZXNzaW9uLi4uCj4gCj4gVGhhdCBtZWFucyBJIGRv bid0IHVuZGVyc3RhbmQgdGhlIG1lYW5pbmcgb2YgdGhhdCBmbGFnLiBJIHRob3VnaHQgaXQgaXMK PiB0byBlbmZvcmNlIHByb2JlIG9mIGRyaXZlciBvbiBwbGF0Zm9ybSB3aGljaCBiZWhhdmlvciBp cyBub3QgYWxyZWFkeSAKPiB3ZWxsIGRlZmluZWQgYW5kIHdlIHdhbnQgdG8gInRyeSIgZHJpdmVy IG9uIGl0LgoKVGhlIGdvYWwgb2YgdGhlIGZsYWcgaXMgdG8gcHJvdGVjdCBlbmQgdXNlcnMgdG8g Z2V0IGEgdW5zdGFibGUgZHJpdmVyCnN1cHBvcnQuIEluIHNwZWNpYWwsIGxpbnV4IGluc3RhbGxl ciAuaXNvIGltYWdlcyB3aGVyZSBkcml2ZXIgY2Fubm90IGJlCnVwZGF0ZWQuLi4gaWYgdXNlciBn ZXRzIGEgb2xkIC5pc28gd2l0aCBkcml2ZXIgZnJvbSB0aGUgZW5hYmxpbmcgdGltZXMKYW5kIGEg YnJhbmQgbmV3IHBsYXRmb3JtLCB0aGUgaW5zdGFsbGF0aW9uIG1pZ2ggaGFuZyBvciBnZXQgYmxh bmsgc2NyZWVucy4KSXQgd2FzIGEgbmlnaHRtYXJlIGluIHRoZSBwYXN0LgoKQnV0IHRoZSBmbGFn IHdhcyBuZXZlciBpbnRlbmRlZCB0byBiZSB1c2VkIHdpdGggVUFQSSBkZWNpc2lvbnMsIHNvCnRo aXMgY2FzZSBoZXJlIGlzIGNoYW5naW5nIHRoaXMuLi4KCj4gCj4gLS0KPiBaYmlnbmlldwo+IAo+ ID4gCj4gPiA+IAo+ID4gPiAtLQo+ID4gPiBaYmlnbmlldwo+ID4gPiAKPiA+ID4gPiAKPiA+ID4g PiA+ICsJCXJldHVybiB0cnVlOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlyZXR1cm4gZmFsc2U7 Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gIHN0YXRpYyBpbnQKPiA+ID4gPiA+ ICBlYl92YWxpZGF0ZV92bWEoc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIsCj4gPiA+ID4gPiAg CQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZW50cnksCj4gPiA+ID4gPiAgCQlz dHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiA+ID4gPiA+ICB7Cj4gPiA+ID4gPiAtCS8qIFJlbG9jYXRp b25zIGFyZSBkaXNhbGxvd2VkIGZvciBhbGwgcGxhdGZvcm1zIGFmdGVyIFRHTC1MUC4gIFRoaXMK PiA+ID4gPiA+IC0JICogYWxzbyBjb3ZlcnMgYWxsIHBsYXRmb3JtcyB3aXRoIGxvY2FsIG1lbW9y eS4KPiA+ID4gPiA+IC0JICovCj4gPiA+ID4gPiAtCWlmIChlbnRyeS0+cmVsb2NhdGlvbl9jb3Vu dCAmJgo+ID4gPiA+ID4gLQkgICAgR1JBUEhJQ1NfVkVSKGViLT5pOTE1KSA+PSAxMiAmJiAhSVNf VElHRVJMQUtFKGViLT5pOTE1KSkKPiA+ID4gPiA+ICsJaWYgKGVudHJ5LT5yZWxvY2F0aW9uX2Nv dW50ICYmICFwbGF0Zm9ybV9oYXNfcmVsb2NzX2VuYWJsZWQoZWIpKQo+ID4gPiA+ID4gIAkJcmV0 dXJuIC1FSU5WQUw7Cj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAgCWlmICh1bmxpa2VseShlbnRyeS0+ ZmxhZ3MgJiBlYi0+aW52YWxpZF9mbGFncykpCj4gPiA+ID4gPiAtLSAKPiA+ID4gPiA+IDIuMjYu MAo+ID4gPiA+ID4gCj4gPiA+ID4gPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwo+ID4gPiA+ID4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+ID4gPiA+ID4g SW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+ID4gPiA+ID4gaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKPiBfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IEludGVsLWdmeCBtYWlsaW5nIGxp c3QKPiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRl bC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==