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=-16.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,USER_AGENT_GIT 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 93352C433B4 for ; Tue, 11 May 2021 13:26:27 +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 09D6061288 for ; Tue, 11 May 2021 13:26:26 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 09D6061288 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 A96316EA43; Tue, 11 May 2021 13:26:21 +0000 (UTC) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id 006066EA3C; Tue, 11 May 2021 13:26:18 +0000 (UTC) IronPort-SDR: LfZxtojGUuTKzRhnuYiSLrtEFh/xSEYi8WTs5VZxVIhCRNj3Z/CBbItA7oFxHcmieoY9VlHyFA I63bXmokkM0Q== X-IronPort-AV: E=McAfee;i="6200,9189,9980"; a="196345417" X-IronPort-AV: E=Sophos;i="5.82,290,1613462400"; d="scan'208";a="196345417" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 May 2021 06:26:18 -0700 IronPort-SDR: OsMYZ0cbbp5SlmZJEY88ZOOUWYIIqDsCbevHE2iDtFpfo3suD1dtAWQhZnpiDkZU9KDZwAnJbI KPUK4gCl3eSQ== X-IronPort-AV: E=Sophos;i="5.82,290,1613462400"; d="scan'208";a="468905441" Received: from kjeldbeg-mobl2.ger.corp.intel.com (HELO thellst-mobl1.intel.com) ([10.249.254.168]) by fmsmga002-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 May 2021 06:26:17 -0700 From: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Subject: [PATCH 7/7] drm/i915/lmem: Verify checks for lmem residency Date: Tue, 11 May 2021 15:25:25 +0200 Message-Id: <20210511132525.377190-8-thomas.hellstrom@linux.intel.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210511132525.377190-1-thomas.hellstrom@linux.intel.com> References: <20210511132525.377190-1-thomas.hellstrom@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 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: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Since objects can be migrated or evicted when not pinned or locked, update the checks for lmem residency or future residency so that the value returned is not immediately stale. Signed-off-by: Thomas Hellström --- drivers/gpu/drm/i915/display/intel_display.c | 2 +- drivers/gpu/drm/i915/gem/i915_gem_lmem.c | 42 +++++++++++++++++++- drivers/gpu/drm/i915/gem/i915_gem_object.c | 29 ++++++++++++++ drivers/gpu/drm/i915/gem/i915_gem_object.h | 4 ++ 4 files changed, 75 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c index de1f13d203b5..b95def2d5af3 100644 --- a/drivers/gpu/drm/i915/display/intel_display.c +++ b/drivers/gpu/drm/i915/display/intel_display.c @@ -11615,7 +11615,7 @@ intel_user_framebuffer_create(struct drm_device *dev, /* object is backed with LMEM for discrete */ i915 = to_i915(obj->base.dev); - if (HAS_LMEM(i915) && !i915_gem_object_is_lmem(obj)) { + if (HAS_LMEM(i915) && !i915_gem_object_validates_to_lmem(obj)) { /* object is "remote", not in local memory */ i915_gem_object_put(obj); return ERR_PTR(-EREMOTE); diff --git a/drivers/gpu/drm/i915/gem/i915_gem_lmem.c b/drivers/gpu/drm/i915/gem/i915_gem_lmem.c index 2b8cd15de1d9..d539dffa1554 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_lmem.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_lmem.c @@ -23,10 +23,50 @@ i915_gem_object_lmem_io_map(struct drm_i915_gem_object *obj, return io_mapping_map_wc(&obj->mm.region->iomap, offset, size); } +/** + * i915_gem_object_validates_to_lmem - Whether the object is resident in + * lmem when pages are present. + * @obj: The object to check. + * + * Migratable objects residency may change from under us if the object is + * not pinned or locked. This function is intended to be used to check whether + * the object can only reside in lmem when pages are present. + * + * Return: Whether the object is always resident in lmem when pages are + * present. + */ +bool i915_gem_object_validates_to_lmem(struct drm_i915_gem_object *obj) +{ + struct intel_memory_region *mr = READ_ONCE(obj->mm.region); + + return !i915_gem_object_migratable(obj) && + mr && (mr->type == INTEL_MEMORY_LOCAL || + mr->type == INTEL_MEMORY_STOLEN_LOCAL); +} + +/** + * i915_gem_object_is_lmem - Whether the object is resident in + * lmem + * @obj: The object to check. + * + * Even if an object is allowed to migrate and change memory region, + * this function checks whether it will always be present in lmem when + * valid *or* if that's not the case, whether it's currently resident in lmem. + * For migratable and evictable objects, the latter only makes sense when + * the object is locked. + * + * Return: Whether the object migratable but resident in lmem, or not + * migratable and will be present in lmem when valid. + */ bool i915_gem_object_is_lmem(struct drm_i915_gem_object *obj) { - struct intel_memory_region *mr = obj->mm.region; + struct intel_memory_region *mr = READ_ONCE(obj->mm.region); +#ifdef CONFIG_LOCKDEP + if (i915_gem_object_migratable(obj) && + i915_gem_object_evictable(obj)) + assert_object_held(obj); +#endif return mr && (mr->type == INTEL_MEMORY_LOCAL || mr->type == INTEL_MEMORY_STOLEN_LOCAL); } diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.c b/drivers/gpu/drm/i915/gem/i915_gem_object.c index c53488f391dd..0475b1c94454 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_object.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.c @@ -458,6 +458,35 @@ bool i915_gem_object_evictable(struct drm_i915_gem_object *obj) return pin_count == 0; } +/** + * i915_gem_object_migratable - Whether the object is migratable out of the + * current region. + * @obj: Pointer to the object. + * + * Return: Whether the object is allowed to be resident in other + * regions than the current while pages are present. + */ +bool i915_gem_object_migratable(struct drm_i915_gem_object *obj) +{ + struct intel_memory_region *mr = READ_ONCE(obj->mm.region); + struct intel_memory_region *placement; + int i; + + if (!mr) + return false; + + if (!obj->mm.n_placements) + return false; + + for (i = 0; i < obj->mm.n_placements; ++i) { + placement = obj->mm.placements[i]; + if (placement != mr) + return true; + } + + return false; +} + void i915_gem_init__objects(struct drm_i915_private *i915) { INIT_WORK(&i915->mm.free_work, __i915_gem_free_work); diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.h b/drivers/gpu/drm/i915/gem/i915_gem_object.h index ae5930e307d5..a3ad8cf4eefd 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_object.h +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.h @@ -596,6 +596,10 @@ void __i915_gem_free_object(struct drm_i915_gem_object *obj); bool i915_gem_object_evictable(struct drm_i915_gem_object *obj); +bool i915_gem_object_migratable(struct drm_i915_gem_object *obj); + +bool i915_gem_object_validates_to_lmem(struct drm_i915_gem_object *obj); + #ifdef CONFIG_MMU_NOTIFIER static inline bool i915_gem_object_is_userptr(struct drm_i915_gem_object *obj) -- 2.30.2 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=-16.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,USER_AGENT_GIT 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 97CBDC43462 for ; Tue, 11 May 2021 13:26:27 +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 3C38D6191C for ; Tue, 11 May 2021 13:26:25 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3C38D6191C 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 94C4D6EA3D; Tue, 11 May 2021 13:26:20 +0000 (UTC) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id 006066EA3C; Tue, 11 May 2021 13:26:18 +0000 (UTC) IronPort-SDR: LfZxtojGUuTKzRhnuYiSLrtEFh/xSEYi8WTs5VZxVIhCRNj3Z/CBbItA7oFxHcmieoY9VlHyFA I63bXmokkM0Q== X-IronPort-AV: E=McAfee;i="6200,9189,9980"; a="196345417" X-IronPort-AV: E=Sophos;i="5.82,290,1613462400"; d="scan'208";a="196345417" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 May 2021 06:26:18 -0700 IronPort-SDR: OsMYZ0cbbp5SlmZJEY88ZOOUWYIIqDsCbevHE2iDtFpfo3suD1dtAWQhZnpiDkZU9KDZwAnJbI KPUK4gCl3eSQ== X-IronPort-AV: E=Sophos;i="5.82,290,1613462400"; d="scan'208";a="468905441" Received: from kjeldbeg-mobl2.ger.corp.intel.com (HELO thellst-mobl1.intel.com) ([10.249.254.168]) by fmsmga002-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 May 2021 06:26:17 -0700 From: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Date: Tue, 11 May 2021 15:25:25 +0200 Message-Id: <20210511132525.377190-8-thomas.hellstrom@linux.intel.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210511132525.377190-1-thomas.hellstrom@linux.intel.com> References: <20210511132525.377190-1-thomas.hellstrom@linux.intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH 7/7] drm/i915/lmem: Verify checks for lmem residency 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=20Hellstr=C3=B6m?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" U2luY2Ugb2JqZWN0cyBjYW4gYmUgbWlncmF0ZWQgb3IgZXZpY3RlZCB3aGVuIG5vdCBwaW5uZWQg b3IgbG9ja2VkLAp1cGRhdGUgdGhlIGNoZWNrcyBmb3IgbG1lbSByZXNpZGVuY3kgb3IgZnV0dXJl IHJlc2lkZW5jeSBzbyB0aGF0CnRoZSB2YWx1ZSByZXR1cm5lZCBpcyBub3QgaW1tZWRpYXRlbHkg c3RhbGUuCgpTaWduZWQtb2ZmLWJ5OiBUaG9tYXMgSGVsbHN0csO2bSA8dGhvbWFzLmhlbGxzdHJv bUBsaW51eC5pbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9kaXNwbGF5LmMgfCAgMiArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2xt ZW0uYyAgICAgfCA0MiArKysrKysrKysrKysrKysrKysrLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv Z2VtL2k5MTVfZ2VtX29iamVjdC5jICAgfCAyOSArKysrKysrKysrKysrKwogZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5oICAgfCAgNCArKwogNCBmaWxlcyBjaGFuZ2Vk LCA3NSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMKaW5kZXggZGUxZjEzZDIwM2I1Li5iOTVkZWYyZDVh ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxh eS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCkBA IC0xMTYxNSw3ICsxMTYxNSw3IEBAIGludGVsX3VzZXJfZnJhbWVidWZmZXJfY3JlYXRlKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsCiAKIAkvKiBvYmplY3QgaXMgYmFja2VkIHdpdGggTE1FTSBmb3Ig ZGlzY3JldGUgKi8KIAlpOTE1ID0gdG9faTkxNShvYmotPmJhc2UuZGV2KTsKLQlpZiAoSEFTX0xN RU0oaTkxNSkgJiYgIWk5MTVfZ2VtX29iamVjdF9pc19sbWVtKG9iaikpIHsKKwlpZiAoSEFTX0xN RU0oaTkxNSkgJiYgIWk5MTVfZ2VtX29iamVjdF92YWxpZGF0ZXNfdG9fbG1lbShvYmopKSB7CiAJ CS8qIG9iamVjdCBpcyAicmVtb3RlIiwgbm90IGluIGxvY2FsIG1lbW9yeSAqLwogCQlpOTE1X2dl bV9vYmplY3RfcHV0KG9iaik7CiAJCXJldHVybiBFUlJfUFRSKC1FUkVNT1RFKTsKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9sbWVtLmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fbG1lbS5jCmluZGV4IDJiOGNkMTVkZTFkOS4uZDUzOWRm ZmExNTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fbG1l bS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9sbWVtLmMKQEAgLTIz LDEwICsyMyw1MCBAQCBpOTE1X2dlbV9vYmplY3RfbG1lbV9pb19tYXAoc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaiwKIAlyZXR1cm4gaW9fbWFwcGluZ19tYXBfd2MoJm9iai0+bW0ucmVn aW9uLT5pb21hcCwgb2Zmc2V0LCBzaXplKTsKIH0KIAorLyoqCisgKiBpOTE1X2dlbV9vYmplY3Rf dmFsaWRhdGVzX3RvX2xtZW0gLSBXaGV0aGVyIHRoZSBvYmplY3QgaXMgcmVzaWRlbnQgaW4KKyAq IGxtZW0gd2hlbiBwYWdlcyBhcmUgcHJlc2VudC4KKyAqIEBvYmo6IFRoZSBvYmplY3QgdG8gY2hl Y2suCisgKgorICogTWlncmF0YWJsZSBvYmplY3RzIHJlc2lkZW5jeSBtYXkgY2hhbmdlIGZyb20g dW5kZXIgdXMgaWYgdGhlIG9iamVjdCBpcworICogbm90IHBpbm5lZCBvciBsb2NrZWQuIFRoaXMg ZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyCisgKiB0aGUg b2JqZWN0IGNhbiBvbmx5IHJlc2lkZSBpbiBsbWVtIHdoZW4gcGFnZXMgYXJlIHByZXNlbnQuCisg KgorICogUmV0dXJuOiBXaGV0aGVyIHRoZSBvYmplY3QgaXMgYWx3YXlzIHJlc2lkZW50IGluIGxt ZW0gd2hlbiBwYWdlcyBhcmUKKyAqIHByZXNlbnQuCisgKi8KK2Jvb2wgaTkxNV9nZW1fb2JqZWN0 X3ZhbGlkYXRlc190b19sbWVtKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCit7CisJ c3RydWN0IGludGVsX21lbW9yeV9yZWdpb24gKm1yID0gUkVBRF9PTkNFKG9iai0+bW0ucmVnaW9u KTsKKworCXJldHVybiAhaTkxNV9nZW1fb2JqZWN0X21pZ3JhdGFibGUob2JqKSAmJgorCQltciAm JiAobXItPnR5cGUgPT0gSU5URUxfTUVNT1JZX0xPQ0FMIHx8CisJCSAgICAgICBtci0+dHlwZSA9 PSBJTlRFTF9NRU1PUllfU1RPTEVOX0xPQ0FMKTsKK30KKworLyoqCisgKiBpOTE1X2dlbV9vYmpl Y3RfaXNfbG1lbSAtIFdoZXRoZXIgdGhlIG9iamVjdCBpcyByZXNpZGVudCBpbgorICogbG1lbQor ICogQG9iajogVGhlIG9iamVjdCB0byBjaGVjay4KKyAqCisgKiBFdmVuIGlmIGFuIG9iamVjdCBp cyBhbGxvd2VkIHRvIG1pZ3JhdGUgYW5kIGNoYW5nZSBtZW1vcnkgcmVnaW9uLAorICogdGhpcyBm dW5jdGlvbiBjaGVja3Mgd2hldGhlciBpdCB3aWxsIGFsd2F5cyBiZSBwcmVzZW50IGluIGxtZW0g d2hlbgorICogdmFsaWQgKm9yKiBpZiB0aGF0J3Mgbm90IHRoZSBjYXNlLCB3aGV0aGVyIGl0J3Mg Y3VycmVudGx5IHJlc2lkZW50IGluIGxtZW0uCisgKiBGb3IgbWlncmF0YWJsZSBhbmQgZXZpY3Rh YmxlIG9iamVjdHMsIHRoZSBsYXR0ZXIgb25seSBtYWtlcyBzZW5zZSB3aGVuCisgKiB0aGUgb2Jq ZWN0IGlzIGxvY2tlZC4KKyAqCisgKiBSZXR1cm46IFdoZXRoZXIgdGhlIG9iamVjdCBtaWdyYXRh YmxlIGJ1dCByZXNpZGVudCBpbiBsbWVtLCBvciBub3QKKyAqIG1pZ3JhdGFibGUgYW5kIHdpbGwg YmUgcHJlc2VudCBpbiBsbWVtIHdoZW4gdmFsaWQuCisgKi8KIGJvb2wgaTkxNV9nZW1fb2JqZWN0 X2lzX2xtZW0oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIHsKLQlzdHJ1Y3QgaW50 ZWxfbWVtb3J5X3JlZ2lvbiAqbXIgPSBvYmotPm1tLnJlZ2lvbjsKKwlzdHJ1Y3QgaW50ZWxfbWVt b3J5X3JlZ2lvbiAqbXIgPSBSRUFEX09OQ0Uob2JqLT5tbS5yZWdpb24pOwogCisjaWZkZWYgQ09O RklHX0xPQ0tERVAKKwlpZiAoaTkxNV9nZW1fb2JqZWN0X21pZ3JhdGFibGUob2JqKSAmJgorCSAg ICBpOTE1X2dlbV9vYmplY3RfZXZpY3RhYmxlKG9iaikpCisJCWFzc2VydF9vYmplY3RfaGVsZChv YmopOworI2VuZGlmCiAJcmV0dXJuIG1yICYmIChtci0+dHlwZSA9PSBJTlRFTF9NRU1PUllfTE9D QUwgfHwKIAkJICAgICAgbXItPnR5cGUgPT0gSU5URUxfTUVNT1JZX1NUT0xFTl9MT0NBTCk7CiB9 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmMKaW5kZXggYzUzNDg4 ZjM5MWRkLi4wNDc1YjFjOTQ0NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dl bS9pOTE1X2dlbV9vYmplY3QuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9n ZW1fb2JqZWN0LmMKQEAgLTQ1OCw2ICs0NTgsMzUgQEAgYm9vbCBpOTE1X2dlbV9vYmplY3RfZXZp Y3RhYmxlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiAJcmV0dXJuIHBpbl9jb3Vu dCA9PSAwOwogfQogCisvKioKKyAqIGk5MTVfZ2VtX29iamVjdF9taWdyYXRhYmxlIC0gV2hldGhl ciB0aGUgb2JqZWN0IGlzIG1pZ3JhdGFibGUgb3V0IG9mIHRoZQorICogY3VycmVudCByZWdpb24u CisgKiBAb2JqOiBQb2ludGVyIHRvIHRoZSBvYmplY3QuCisgKgorICogUmV0dXJuOiBXaGV0aGVy IHRoZSBvYmplY3QgaXMgYWxsb3dlZCB0byBiZSByZXNpZGVudCBpbiBvdGhlcgorICogcmVnaW9u cyB0aGFuIHRoZSBjdXJyZW50IHdoaWxlIHBhZ2VzIGFyZSBwcmVzZW50LgorICovCitib29sIGk5 MTVfZ2VtX29iamVjdF9taWdyYXRhYmxlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmop Cit7CisJc3RydWN0IGludGVsX21lbW9yeV9yZWdpb24gKm1yID0gUkVBRF9PTkNFKG9iai0+bW0u cmVnaW9uKTsKKwlzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqcGxhY2VtZW50OworCWludCBp OworCisJaWYgKCFtcikKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKCFvYmotPm1tLm5fcGxhY2Vt ZW50cykKKwkJcmV0dXJuIGZhbHNlOworCisJZm9yIChpID0gMDsgaSA8IG9iai0+bW0ubl9wbGFj ZW1lbnRzOyArK2kpIHsKKwkJcGxhY2VtZW50ID0gb2JqLT5tbS5wbGFjZW1lbnRzW2ldOworCQlp ZiAocGxhY2VtZW50ICE9IG1yKQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNl OworfQorCiB2b2lkIGk5MTVfZ2VtX2luaXRfX29iamVjdHMoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUpCiB7CiAJSU5JVF9XT1JLKCZpOTE1LT5tbS5mcmVlX3dvcmssIF9faTkxNV9nZW1f ZnJlZV93b3JrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dl bV9vYmplY3QuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuaApp bmRleCBhZTU5MzBlMzA3ZDUuLmEzYWQ4Y2Y0ZWVmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2dlbS9pOTE1X2dlbV9vYmplY3QuaApAQCAtNTk2LDYgKzU5NiwxMCBAQCB2b2lkIF9faTkxNV9n ZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7CiAKIGJvb2wg aTkxNV9nZW1fb2JqZWN0X2V2aWN0YWJsZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq KTsKIAorYm9vbCBpOTE1X2dlbV9vYmplY3RfbWlncmF0YWJsZShzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqKTsKKworYm9vbCBpOTE1X2dlbV9vYmplY3RfdmFsaWRhdGVzX3RvX2xtZW0o c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7CisKICNpZmRlZiBDT05GSUdfTU1VX05P VElGSUVSCiBzdGF0aWMgaW5saW5lIGJvb2wKIGk5MTVfZ2VtX29iamVjdF9pc191c2VycHRyKHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCi0tIAoyLjMwLjIKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QK SW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=