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.7 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 378EAC4707A for ; Fri, 21 May 2021 15:33:36 +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 02DF7613D6 for ; Fri, 21 May 2021 15:33:35 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 02DF7613D6 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 C4A226EE29; Fri, 21 May 2021 15:33:28 +0000 (UTC) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 466EA6E194; Fri, 21 May 2021 15:33:25 +0000 (UTC) IronPort-SDR: laRf8g4gMKE6Tw4ZJ7Wf1gyUAidMBFiNb+cZX6063dQB0BK/MJ6RlE0mY//10AjWVAO/Sm8vkm pASwjV56UNcQ== X-IronPort-AV: E=McAfee;i="6200,9189,9990"; a="265415731" X-IronPort-AV: E=Sophos;i="5.82,319,1613462400"; d="scan'208";a="265415731" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 May 2021 08:33:24 -0700 IronPort-SDR: ZBYU24nXIQEJdoVEWeOGA8hHwhIztSO2xc6fB/vw8+BLcvhAkEfNInlVDG6/bN9TszqTb/P4PB J+UP3Pb4zW3A== X-IronPort-AV: E=Sophos;i="5.82,319,1613462400"; d="scan'208";a="441125480" Received: from imarinmo-mobl1.ger.corp.intel.com (HELO thellst-mobl1.intel.com) ([10.249.254.34]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 May 2021 08:33:22 -0700 From: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Subject: [PATCH v3 10/12] drm/ttm, drm/amdgpu: Allow the driver some control over swapping Date: Fri, 21 May 2021 17:32:51 +0200 Message-Id: <20210521153253.518037-11-thomas.hellstrom@linux.intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210521153253.518037-1-thomas.hellstrom@linux.intel.com> References: <20210521153253.518037-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?= , =?UTF-8?q?Christian=20K=C3=B6nig?= Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" We are calling the eviction_valuable driver callback at eviction time to determine whether we actually can evict a buffer object. The upcoming i915 TTM backend needs the same functionality for swapout, and that might actually be beneficial to other drivers as well. Add an eviction_valuable call also in the swapout path. Try to keep the current behaviour for all drivers by returning true if the buffer object is already in the TTM_PL_SYSTEM placement. We change behaviour for the case where a buffer object is in a TT backed placement when swapped out, in which case the drivers normal eviction_valuable path is run. Finally make sure we don't try to swapout a bo that was recently purged and therefore unpopulated. Reviewed-by: Maarten Lankhorst Cc: Christian König Signed-off-by: Thomas Hellström --- v3: - Don't export ttm_tt_unpopulate - Fix confusion reading the locked pointer instead of the value pointed to in ttm_bo_evict_swapout_allowable (Reported by Maarten Lankhorst) --- drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 4 +++ drivers/gpu/drm/ttm/ttm_bo.c | 43 ++++++++++++++++--------- drivers/gpu/drm/ttm/ttm_tt.c | 3 ++ 3 files changed, 34 insertions(+), 16 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c index 8c7ec09eb1a4..d5a9d7a88315 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c @@ -1399,6 +1399,10 @@ static bool amdgpu_ttm_bo_eviction_valuable(struct ttm_buffer_object *bo, struct dma_fence *f; int i; + /* Swapout? */ + if (bo->mem.mem_type == TTM_PL_SYSTEM) + return true; + if (bo->type == ttm_bo_type_kernel && !amdgpu_vm_evictable(ttm_to_amdgpu_bo(bo))) return false; diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c index a8fa3375b8aa..f45486837b44 100644 --- a/drivers/gpu/drm/ttm/ttm_bo.c +++ b/drivers/gpu/drm/ttm/ttm_bo.c @@ -536,6 +536,10 @@ static int ttm_bo_evict(struct ttm_buffer_object *bo, bool ttm_bo_eviction_valuable(struct ttm_buffer_object *bo, const struct ttm_place *place) { + dma_resv_assert_held(bo->base.resv); + if (bo->mem.mem_type == TTM_PL_SYSTEM) + return true; + /* Don't evict this BO if it's outside of the * requested placement range */ @@ -558,7 +562,9 @@ EXPORT_SYMBOL(ttm_bo_eviction_valuable); * b. Otherwise, trylock it. */ static bool ttm_bo_evict_swapout_allowable(struct ttm_buffer_object *bo, - struct ttm_operation_ctx *ctx, bool *locked, bool *busy) + struct ttm_operation_ctx *ctx, + const struct ttm_place *place, + bool *locked, bool *busy) { bool ret = false; @@ -576,6 +582,14 @@ static bool ttm_bo_evict_swapout_allowable(struct ttm_buffer_object *bo, *busy = !ret; } + if (ret && place && !bo->bdev->funcs->eviction_valuable(bo, place)) { + ret = false; + if (*locked) { + dma_resv_unlock(bo->base.resv); + *locked = false; + } + } + return ret; } @@ -630,20 +644,14 @@ int ttm_mem_evict_first(struct ttm_device *bdev, list_for_each_entry(bo, &man->lru[i], lru) { bool busy; - if (!ttm_bo_evict_swapout_allowable(bo, ctx, &locked, - &busy)) { + if (!ttm_bo_evict_swapout_allowable(bo, ctx, place, + &locked, &busy)) { if (busy && !busy_bo && ticket != dma_resv_locking_ctx(bo->base.resv)) busy_bo = bo; continue; } - if (place && !bdev->funcs->eviction_valuable(bo, - place)) { - if (locked) - dma_resv_unlock(bo->base.resv); - continue; - } if (!ttm_bo_get_unless_zero(bo)) { if (locked) dma_resv_unlock(bo->base.resv); @@ -1138,10 +1146,18 @@ EXPORT_SYMBOL(ttm_bo_wait); int ttm_bo_swapout(struct ttm_buffer_object *bo, struct ttm_operation_ctx *ctx, gfp_t gfp_flags) { + struct ttm_place place = {}; bool locked; int ret; - if (!ttm_bo_evict_swapout_allowable(bo, ctx, &locked, NULL)) + /* + * While the bo may already reside in SYSTEM placement, set + * SYSTEM as new placement to cover also the move further below. + * The driver may use the fact that we're moving from SYSTEM + * as an indication that we're about to swap out. + */ + place.mem_type = TTM_PL_SYSTEM; + if (!ttm_bo_evict_swapout_allowable(bo, ctx, &place, &locked, NULL)) return -EBUSY; if (!ttm_bo_get_unless_zero(bo)) { @@ -1166,12 +1182,7 @@ int ttm_bo_swapout(struct ttm_buffer_object *bo, struct ttm_operation_ctx *ctx, if (bo->mem.mem_type != TTM_PL_SYSTEM) { struct ttm_operation_ctx ctx = { false, false }; struct ttm_resource evict_mem; - struct ttm_place place, hop; - - memset(&place, 0, sizeof(place)); - memset(&hop, 0, sizeof(hop)); - - place.mem_type = TTM_PL_SYSTEM; + struct ttm_place hop = {}; ret = ttm_resource_alloc(bo, &place, &evict_mem); if (unlikely(ret)) diff --git a/drivers/gpu/drm/ttm/ttm_tt.c b/drivers/gpu/drm/ttm/ttm_tt.c index 913b330a234b..d9793cbb6d13 100644 --- a/drivers/gpu/drm/ttm/ttm_tt.c +++ b/drivers/gpu/drm/ttm/ttm_tt.c @@ -263,6 +263,9 @@ int ttm_tt_swapout(struct ttm_device *bdev, struct ttm_tt *ttm, struct page *to_page; int i, ret; + if (!ttm_tt_is_populated(ttm)) + return 0; + swap_storage = shmem_file_setup("ttm swap", size, 0); if (IS_ERR(swap_storage)) { pr_err("Failed allocating swap storage\n"); -- 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=-16.7 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 9CB0BC47078 for ; Fri, 21 May 2021 15:33: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 6C9506135B for ; Fri, 21 May 2021 15:33:42 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6C9506135B 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 B66D36F59E; Fri, 21 May 2021 15:33:34 +0000 (UTC) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 466EA6E194; Fri, 21 May 2021 15:33:25 +0000 (UTC) IronPort-SDR: laRf8g4gMKE6Tw4ZJ7Wf1gyUAidMBFiNb+cZX6063dQB0BK/MJ6RlE0mY//10AjWVAO/Sm8vkm pASwjV56UNcQ== X-IronPort-AV: E=McAfee;i="6200,9189,9990"; a="265415731" X-IronPort-AV: E=Sophos;i="5.82,319,1613462400"; d="scan'208";a="265415731" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 May 2021 08:33:24 -0700 IronPort-SDR: ZBYU24nXIQEJdoVEWeOGA8hHwhIztSO2xc6fB/vw8+BLcvhAkEfNInlVDG6/bN9TszqTb/P4PB J+UP3Pb4zW3A== X-IronPort-AV: E=Sophos;i="5.82,319,1613462400"; d="scan'208";a="441125480" Received: from imarinmo-mobl1.ger.corp.intel.com (HELO thellst-mobl1.intel.com) ([10.249.254.34]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 May 2021 08:33:22 -0700 From: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Date: Fri, 21 May 2021 17:32:51 +0200 Message-Id: <20210521153253.518037-11-thomas.hellstrom@linux.intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210521153253.518037-1-thomas.hellstrom@linux.intel.com> References: <20210521153253.518037-1-thomas.hellstrom@linux.intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH v3 10/12] drm/ttm, drm/amdgpu: Allow the driver some control over swapping 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?= , =?UTF-8?q?Christian=20K=C3=B6nig?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" V2UgYXJlIGNhbGxpbmcgdGhlIGV2aWN0aW9uX3ZhbHVhYmxlIGRyaXZlciBjYWxsYmFjayBhdCBl dmljdGlvbiB0aW1lIHRvCmRldGVybWluZSB3aGV0aGVyIHdlIGFjdHVhbGx5IGNhbiBldmljdCBh IGJ1ZmZlciBvYmplY3QuClRoZSB1cGNvbWluZyBpOTE1IFRUTSBiYWNrZW5kIG5lZWRzIHRoZSBz YW1lIGZ1bmN0aW9uYWxpdHkgZm9yIHN3YXBvdXQsCmFuZCB0aGF0IG1pZ2h0IGFjdHVhbGx5IGJl IGJlbmVmaWNpYWwgdG8gb3RoZXIgZHJpdmVycyBhcyB3ZWxsLgoKQWRkIGFuIGV2aWN0aW9uX3Zh bHVhYmxlIGNhbGwgYWxzbyBpbiB0aGUgc3dhcG91dCBwYXRoLiBUcnkgdG8ga2VlcCB0aGUKY3Vy cmVudCBiZWhhdmlvdXIgZm9yIGFsbCBkcml2ZXJzIGJ5IHJldHVybmluZyB0cnVlIGlmIHRoZSBi dWZmZXIgb2JqZWN0CmlzIGFscmVhZHkgaW4gdGhlIFRUTV9QTF9TWVNURU0gcGxhY2VtZW50LiBX ZSBjaGFuZ2UgYmVoYXZpb3VyIGZvciB0aGUKY2FzZSB3aGVyZSBhIGJ1ZmZlciBvYmplY3QgaXMg aW4gYSBUVCBiYWNrZWQgcGxhY2VtZW50IHdoZW4gc3dhcHBlZCBvdXQsCmluIHdoaWNoIGNhc2Ug dGhlIGRyaXZlcnMgbm9ybWFsIGV2aWN0aW9uX3ZhbHVhYmxlIHBhdGggaXMgcnVuLgoKRmluYWxs eSBtYWtlIHN1cmUgd2UgZG9uJ3QgdHJ5IHRvIHN3YXBvdXQgYSBibyB0aGF0IHdhcyByZWNlbnRs eSBwdXJnZWQKYW5kIHRoZXJlZm9yZSB1bnBvcHVsYXRlZC4KClJldmlld2VkLWJ5OiBNYWFydGVu IExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXguaW50ZWwuY29tPgpDYzogQ2hyaXN0 aWFuIEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29tPgpTaWduZWQtb2ZmLWJ5OiBUaG9t YXMgSGVsbHN0csO2bSA8dGhvbWFzLmhlbGxzdHJvbUBsaW51eC5pbnRlbC5jb20+Ci0tLQp2MzoK LSBEb24ndCBleHBvcnQgdHRtX3R0X3VucG9wdWxhdGUKLSBGaXggY29uZnVzaW9uIHJlYWRpbmcg dGhlIGxvY2tlZCBwb2ludGVyIGluc3RlYWQgb2YgdGhlIHZhbHVlCiAgcG9pbnRlZCB0byBpbiB0 dG1fYm9fZXZpY3Rfc3dhcG91dF9hbGxvd2FibGUgKFJlcG9ydGVkIGJ5CiAgTWFhcnRlbiBMYW5r aG9yc3QpCi0tLQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5jIHwgIDQg KysrCiBkcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5jICAgICAgICAgICAgfCA0MyArKysrKysr KysrKysrKysrLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV90dC5jICAgICAgICAg ICAgfCAgMyArKwogMyBmaWxlcyBjaGFuZ2VkLCAzNCBpbnNlcnRpb25zKCspLCAxNiBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRt LmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmMKaW5kZXggOGM3ZWMw OWViMWE0Li5kNWE5ZDdhODgzMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV90dG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf dHRtLmMKQEAgLTEzOTksNiArMTM5OSwxMCBAQCBzdGF0aWMgYm9vbCBhbWRncHVfdHRtX2JvX2V2 aWN0aW9uX3ZhbHVhYmxlKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sCiAJc3RydWN0IGRt YV9mZW5jZSAqZjsKIAlpbnQgaTsKIAorCS8qIFN3YXBvdXQ/ICovCisJaWYgKGJvLT5tZW0ubWVt X3R5cGUgPT0gVFRNX1BMX1NZU1RFTSkKKwkJcmV0dXJuIHRydWU7CisKIAlpZiAoYm8tPnR5cGUg PT0gdHRtX2JvX3R5cGVfa2VybmVsICYmCiAJICAgICFhbWRncHVfdm1fZXZpY3RhYmxlKHR0bV90 b19hbWRncHVfYm8oYm8pKSkKIAkJcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3R0bS90dG1fYm8uYyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMKaW5kZXgg YThmYTMzNzViOGFhLi5mNDU0ODY4MzdiNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90 dG0vdHRtX2JvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm8uYwpAQCAtNTM2LDYg KzUzNiwxMCBAQCBzdGF0aWMgaW50IHR0bV9ib19ldmljdChzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmpl Y3QgKmJvLAogYm9vbCB0dG1fYm9fZXZpY3Rpb25fdmFsdWFibGUoc3RydWN0IHR0bV9idWZmZXJf b2JqZWN0ICpibywKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCB0dG1fcGxhY2UgKnBsYWNlKQogewor CWRtYV9yZXN2X2Fzc2VydF9oZWxkKGJvLT5iYXNlLnJlc3YpOworCWlmIChiby0+bWVtLm1lbV90 eXBlID09IFRUTV9QTF9TWVNURU0pCisJCXJldHVybiB0cnVlOworCiAJLyogRG9uJ3QgZXZpY3Qg dGhpcyBCTyBpZiBpdCdzIG91dHNpZGUgb2YgdGhlCiAJICogcmVxdWVzdGVkIHBsYWNlbWVudCBy YW5nZQogCSAqLwpAQCAtNTU4LDcgKzU2Miw5IEBAIEVYUE9SVF9TWU1CT0wodHRtX2JvX2V2aWN0 aW9uX3ZhbHVhYmxlKTsKICAqIGIuIE90aGVyd2lzZSwgdHJ5bG9jayBpdC4KICAqLwogc3RhdGlj IGJvb2wgdHRtX2JvX2V2aWN0X3N3YXBvdXRfYWxsb3dhYmxlKHN0cnVjdCB0dG1fYnVmZmVyX29i amVjdCAqYm8sCi0JCQlzdHJ1Y3QgdHRtX29wZXJhdGlvbl9jdHggKmN0eCwgYm9vbCAqbG9ja2Vk LCBib29sICpidXN5KQorCQkJCQkgICBzdHJ1Y3QgdHRtX29wZXJhdGlvbl9jdHggKmN0eCwKKwkJ CQkJICAgY29uc3Qgc3RydWN0IHR0bV9wbGFjZSAqcGxhY2UsCisJCQkJCSAgIGJvb2wgKmxvY2tl ZCwgYm9vbCAqYnVzeSkKIHsKIAlib29sIHJldCA9IGZhbHNlOwogCkBAIC01NzYsNiArNTgyLDE0 IEBAIHN0YXRpYyBib29sIHR0bV9ib19ldmljdF9zd2Fwb3V0X2FsbG93YWJsZShzdHJ1Y3QgdHRt X2J1ZmZlcl9vYmplY3QgKmJvLAogCQkJKmJ1c3kgPSAhcmV0OwogCX0KIAorCWlmIChyZXQgJiYg cGxhY2UgJiYgIWJvLT5iZGV2LT5mdW5jcy0+ZXZpY3Rpb25fdmFsdWFibGUoYm8sIHBsYWNlKSkg eworCQlyZXQgPSBmYWxzZTsKKwkJaWYgKCpsb2NrZWQpIHsKKwkJCWRtYV9yZXN2X3VubG9jayhi by0+YmFzZS5yZXN2KTsKKwkJCSpsb2NrZWQgPSBmYWxzZTsKKwkJfQorCX0KKwogCXJldHVybiBy ZXQ7CiB9CiAKQEAgLTYzMCwyMCArNjQ0LDE0IEBAIGludCB0dG1fbWVtX2V2aWN0X2ZpcnN0KHN0 cnVjdCB0dG1fZGV2aWNlICpiZGV2LAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJvLCAmbWFuLT5s cnVbaV0sIGxydSkgewogCQkJYm9vbCBidXN5OwogCi0JCQlpZiAoIXR0bV9ib19ldmljdF9zd2Fw b3V0X2FsbG93YWJsZShibywgY3R4LCAmbG9ja2VkLAotCQkJCQkJCSAgICAmYnVzeSkpIHsKKwkJ CWlmICghdHRtX2JvX2V2aWN0X3N3YXBvdXRfYWxsb3dhYmxlKGJvLCBjdHgsIHBsYWNlLAorCQkJ CQkJCSAgICAmbG9ja2VkLCAmYnVzeSkpIHsKIAkJCQlpZiAoYnVzeSAmJiAhYnVzeV9ibyAmJiB0 aWNrZXQgIT0KIAkJCQkgICAgZG1hX3Jlc3ZfbG9ja2luZ19jdHgoYm8tPmJhc2UucmVzdikpCiAJ CQkJCWJ1c3lfYm8gPSBibzsKIAkJCQljb250aW51ZTsKIAkJCX0KIAotCQkJaWYgKHBsYWNlICYm ICFiZGV2LT5mdW5jcy0+ZXZpY3Rpb25fdmFsdWFibGUoYm8sCi0JCQkJCQkJCSAgICAgIHBsYWNl KSkgewotCQkJCWlmIChsb2NrZWQpCi0JCQkJCWRtYV9yZXN2X3VubG9jayhiby0+YmFzZS5yZXN2 KTsKLQkJCQljb250aW51ZTsKLQkJCX0KIAkJCWlmICghdHRtX2JvX2dldF91bmxlc3NfemVybyhi bykpIHsKIAkJCQlpZiAobG9ja2VkKQogCQkJCQlkbWFfcmVzdl91bmxvY2soYm8tPmJhc2UucmVz dik7CkBAIC0xMTM4LDEwICsxMTQ2LDE4IEBAIEVYUE9SVF9TWU1CT0wodHRtX2JvX3dhaXQpOwog aW50IHR0bV9ib19zd2Fwb3V0KHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sIHN0cnVjdCB0 dG1fb3BlcmF0aW9uX2N0eCAqY3R4LAogCQkgICBnZnBfdCBnZnBfZmxhZ3MpCiB7CisJc3RydWN0 IHR0bV9wbGFjZSBwbGFjZSA9IHt9OwogCWJvb2wgbG9ja2VkOwogCWludCByZXQ7CiAKLQlpZiAo IXR0bV9ib19ldmljdF9zd2Fwb3V0X2FsbG93YWJsZShibywgY3R4LCAmbG9ja2VkLCBOVUxMKSkK KwkvKgorCSAqIFdoaWxlIHRoZSBibyBtYXkgYWxyZWFkeSByZXNpZGUgaW4gU1lTVEVNIHBsYWNl bWVudCwgc2V0CisJICogU1lTVEVNIGFzIG5ldyBwbGFjZW1lbnQgdG8gY292ZXIgYWxzbyB0aGUg bW92ZSBmdXJ0aGVyIGJlbG93LgorCSAqIFRoZSBkcml2ZXIgbWF5IHVzZSB0aGUgZmFjdCB0aGF0 IHdlJ3JlIG1vdmluZyBmcm9tIFNZU1RFTQorCSAqIGFzIGFuIGluZGljYXRpb24gdGhhdCB3ZSdy ZSBhYm91dCB0byBzd2FwIG91dC4KKwkgKi8KKwlwbGFjZS5tZW1fdHlwZSA9IFRUTV9QTF9TWVNU RU07CisJaWYgKCF0dG1fYm9fZXZpY3Rfc3dhcG91dF9hbGxvd2FibGUoYm8sIGN0eCwgJnBsYWNl LCAmbG9ja2VkLCBOVUxMKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCWlmICghdHRtX2JvX2dldF91 bmxlc3NfemVybyhibykpIHsKQEAgLTExNjYsMTIgKzExODIsNyBAQCBpbnQgdHRtX2JvX3N3YXBv dXQoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywgc3RydWN0IHR0bV9vcGVyYXRpb25fY3R4 ICpjdHgsCiAJaWYgKGJvLT5tZW0ubWVtX3R5cGUgIT0gVFRNX1BMX1NZU1RFTSkgewogCQlzdHJ1 Y3QgdHRtX29wZXJhdGlvbl9jdHggY3R4ID0geyBmYWxzZSwgZmFsc2UgfTsKIAkJc3RydWN0IHR0 bV9yZXNvdXJjZSBldmljdF9tZW07Ci0JCXN0cnVjdCB0dG1fcGxhY2UgcGxhY2UsIGhvcDsKLQot CQltZW1zZXQoJnBsYWNlLCAwLCBzaXplb2YocGxhY2UpKTsKLQkJbWVtc2V0KCZob3AsIDAsIHNp emVvZihob3ApKTsKLQotCQlwbGFjZS5tZW1fdHlwZSA9IFRUTV9QTF9TWVNURU07CisJCXN0cnVj dCB0dG1fcGxhY2UgaG9wID0ge307CiAKIAkJcmV0ID0gdHRtX3Jlc291cmNlX2FsbG9jKGJvLCAm cGxhY2UsICZldmljdF9tZW0pOwogCQlpZiAodW5saWtlbHkocmV0KSkKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS90dG0vdHRtX3R0LmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV90dC5j CmluZGV4IDkxM2IzMzBhMjM0Yi4uZDk3OTNjYmI2ZDEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vdHRtL3R0bV90dC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3R0LmMKQEAg LTI2Myw2ICsyNjMsOSBAQCBpbnQgdHRtX3R0X3N3YXBvdXQoc3RydWN0IHR0bV9kZXZpY2UgKmJk ZXYsIHN0cnVjdCB0dG1fdHQgKnR0bSwKIAlzdHJ1Y3QgcGFnZSAqdG9fcGFnZTsKIAlpbnQgaSwg cmV0OwogCisJaWYgKCF0dG1fdHRfaXNfcG9wdWxhdGVkKHR0bSkpCisJCXJldHVybiAwOworCiAJ c3dhcF9zdG9yYWdlID0gc2htZW1fZmlsZV9zZXR1cCgidHRtIHN3YXAiLCBzaXplLCAwKTsKIAlp ZiAoSVNfRVJSKHN3YXBfc3RvcmFnZSkpIHsKIAkJcHJfZXJyKCJGYWlsZWQgYWxsb2NhdGluZyBz d2FwIHN0b3JhZ2VcbiIpOwotLSAKMi4zMS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pbnRlbC1nZngK