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 DB16DC48BE8 for ; Mon, 14 Jun 2021 09:53:19 +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 B17E861245 for ; Mon, 14 Jun 2021 09:53:19 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B17E861245 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 F28D789D8A; Mon, 14 Jun 2021 09:53:13 +0000 (UTC) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id EA2CE89D84; Mon, 14 Jun 2021 09:53:10 +0000 (UTC) IronPort-SDR: 0BNRjjOlSqsSjZuwpQKuoL5x1oiOiFx9Ag7Nb90b7/S8sbF1fdf03coPl8PpsA3bXJ6vJJOls6 Oz/4ktmxciuw== X-IronPort-AV: E=McAfee;i="6200,9189,10014"; a="269634176" X-IronPort-AV: E=Sophos;i="5.83,273,1616482800"; d="scan'208";a="269634176" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Jun 2021 02:53:09 -0700 IronPort-SDR: a5Vt79M2i7+C0qcL1XQ4RVbijwAVxRRK9n8Qb+ZqiVsTUuh7IMpsYQCjej2NRtwxgQaMpHJwph O4OcjwFSO6jg== X-IronPort-AV: E=Sophos;i="5.83,273,1616482800"; d="scan'208";a="449838994" Received: from janlundk-mobl1.ger.corp.intel.com (HELO thellst-mobl1.intel.com) ([10.249.254.32]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Jun 2021 02:53:08 -0700 From: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Subject: [PATCH v3 3/4] drm/i915/ttm: Calculate the object placement at get_pages time Date: Mon, 14 Jun 2021 11:52:29 +0200 Message-Id: <20210614095230.126284-4-thomas.hellstrom@linux.intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210614095230.126284-1-thomas.hellstrom@linux.intel.com> References: <20210614095230.126284-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?= , matthew.auld@intel.com Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Instead of relying on a static placement, calculate at get_pages() time. This should work for LMEM regions and system for now. For stolen we need to take preallocated range into account. That will if needed be added later. Signed-off-by: Thomas Hellström Reviewed-by: Matthew Auld --- v2: - Fixed a style issue (Reported by Matthew Auld) v3: - Make sure we don't add more placements to the stack-allocated vector than there is room for. (Reported by Matthew Auld) --- drivers/gpu/drm/i915/gem/i915_gem_ttm.c | 94 ++++++++++++++++++------- drivers/gpu/drm/i915/intel_region_ttm.c | 8 ++- drivers/gpu/drm/i915/intel_region_ttm.h | 2 + 3 files changed, 77 insertions(+), 27 deletions(-) diff --git a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c b/drivers/gpu/drm/i915/gem/i915_gem_ttm.c index 5176682a7d19..33213be45050 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_ttm.c @@ -24,6 +24,11 @@ #define I915_TTM_PRIO_NO_PAGES 1 #define I915_TTM_PRIO_HAS_PAGES 2 +/* + * Size of struct ttm_place vector in on-stack struct ttm_placement allocs + */ +#define I915_TTM_MAX_PLACEMENTS INTEL_REGION_UNKNOWN + /** * struct i915_ttm_tt - TTM page vector with additional private information * @ttm: The base TTM page vector. @@ -42,32 +47,18 @@ struct i915_ttm_tt { struct sg_table *cached_st; }; -static const struct ttm_place lmem0_sys_placement_flags[] = { - { - .fpfn = 0, - .lpfn = 0, - .mem_type = I915_PL_LMEM0, - .flags = 0, - }, { - .fpfn = 0, - .lpfn = 0, - .mem_type = I915_PL_SYSTEM, - .flags = 0, - } -}; - -static struct ttm_placement i915_lmem0_placement = { - .num_placement = 1, - .placement = &lmem0_sys_placement_flags[0], - .num_busy_placement = 1, - .busy_placement = &lmem0_sys_placement_flags[0], +static const struct ttm_place sys_placement_flags = { + .fpfn = 0, + .lpfn = 0, + .mem_type = I915_PL_SYSTEM, + .flags = 0, }; static struct ttm_placement i915_sys_placement = { .num_placement = 1, - .placement = &lmem0_sys_placement_flags[1], + .placement = &sys_placement_flags, .num_busy_placement = 1, - .busy_placement = &lmem0_sys_placement_flags[1], + .busy_placement = &sys_placement_flags, }; static bool gpu_binds_iomem(struct ttm_resource *mem) @@ -83,6 +74,55 @@ static bool cpu_maps_iomem(struct ttm_resource *mem) static void i915_ttm_adjust_lru(struct drm_i915_gem_object *obj); +static enum ttm_caching +i915_ttm_select_tt_caching(const struct drm_i915_gem_object *obj) +{ + /* + * Objects only allowed in system get cached cpu-mappings. + * Other objects get WC mapping for now. Even if in system. + */ + if (obj->mm.region->type == INTEL_MEMORY_SYSTEM && + obj->mm.n_placements <= 1) + return ttm_cached; + + return ttm_write_combined; +} + +static void +i915_ttm_place_from_region(const struct intel_memory_region *mr, + struct ttm_place *place) +{ + memset(place, 0, sizeof(*place)); + place->mem_type = intel_region_to_ttm_type(mr); +} + +static void +i915_ttm_placement_from_obj(const struct drm_i915_gem_object *obj, + struct ttm_place *requested, + struct ttm_place *busy, + struct ttm_placement *placement) +{ + unsigned int num_allowed = obj->mm.n_placements; + unsigned int i; + + placement->num_placement = 1; + i915_ttm_place_from_region(num_allowed ? obj->mm.placements[0] : + obj->mm.region, requested); + + /* Cache this on object? */ + placement->num_busy_placement = num_allowed; + for (i = 0; i < placement->num_busy_placement; ++i) + i915_ttm_place_from_region(obj->mm.placements[i], busy + i); + + if (num_allowed == 0) { + *busy = *requested; + placement->num_busy_placement = 1; + } + + placement->placement = requested; + placement->busy_placement = busy; +} + static struct ttm_tt *i915_ttm_tt_create(struct ttm_buffer_object *bo, uint32_t page_flags) { @@ -100,7 +140,8 @@ static struct ttm_tt *i915_ttm_tt_create(struct ttm_buffer_object *bo, man->use_tt) page_flags |= TTM_PAGE_FLAG_ZERO_ALLOC; - ret = ttm_tt_init(&i915_tt->ttm, bo, page_flags, ttm_write_combined); + ret = ttm_tt_init(&i915_tt->ttm, bo, page_flags, + i915_ttm_select_tt_caching(obj)); if (ret) { kfree(i915_tt); return NULL; @@ -464,10 +505,15 @@ static int i915_ttm_get_pages(struct drm_i915_gem_object *obj) .no_wait_gpu = false, }; struct sg_table *st; + struct ttm_place requested, busy[I915_TTM_MAX_PLACEMENTS]; + struct ttm_placement placement; int ret; + GEM_BUG_ON(obj->mm.n_placements > I915_TTM_MAX_PLACEMENTS); + /* Move to the requested placement. */ - ret = ttm_bo_validate(bo, &i915_lmem0_placement, &ctx); + i915_ttm_placement_from_obj(obj, &requested, busy, &placement); + ret = ttm_bo_validate(bo, &placement, &ctx); if (ret) return ret == -ENOSPC ? -ENXIO : ret; @@ -683,7 +729,6 @@ int __i915_gem_ttm_object_init(struct intel_memory_region *mem, i915_gem_object_make_unshrinkable(obj); INIT_RADIX_TREE(&obj->ttm.get_io_page.radix, GFP_KERNEL | __GFP_NOWARN); mutex_init(&obj->ttm.get_io_page.lock); - bo_type = (obj->flags & I915_BO_ALLOC_USER) ? ttm_bo_type_device : ttm_bo_type_kernel; @@ -707,7 +752,6 @@ int __i915_gem_ttm_object_init(struct intel_memory_region *mem, i915_ttm_adjust_domains_after_cpu_move(obj); i915_ttm_adjust_gem_after_move(obj); i915_gem_object_unlock(obj); - out: /* i915 wants -ENXIO when out of memory region space. */ return (ret == -ENOSPC) ? -ENXIO : ret; diff --git a/drivers/gpu/drm/i915/intel_region_ttm.c b/drivers/gpu/drm/i915/intel_region_ttm.c index 27fe0668d094..5a664f6cc93f 100644 --- a/drivers/gpu/drm/i915/intel_region_ttm.c +++ b/drivers/gpu/drm/i915/intel_region_ttm.c @@ -50,12 +50,16 @@ void intel_region_ttm_device_fini(struct drm_i915_private *dev_priv) * driver-private types for now, reserving TTM_PL_VRAM for stolen * memory and TTM_PL_TT for GGTT use if decided to implement this. */ -static int intel_region_to_ttm_type(struct intel_memory_region *mem) +int intel_region_to_ttm_type(const struct intel_memory_region *mem) { int type; GEM_BUG_ON(mem->type != INTEL_MEMORY_LOCAL && - mem->type != INTEL_MEMORY_MOCK); + mem->type != INTEL_MEMORY_MOCK && + mem->type != INTEL_MEMORY_SYSTEM); + + if (mem->type == INTEL_MEMORY_SYSTEM) + return TTM_PL_SYSTEM; type = mem->instance + TTM_PL_PRIV; GEM_BUG_ON(type >= TTM_NUM_MEM_TYPES); diff --git a/drivers/gpu/drm/i915/intel_region_ttm.h b/drivers/gpu/drm/i915/intel_region_ttm.h index e8cf830fda6f..649491844e79 100644 --- a/drivers/gpu/drm/i915/intel_region_ttm.h +++ b/drivers/gpu/drm/i915/intel_region_ttm.h @@ -28,6 +28,8 @@ struct sg_table *intel_region_ttm_node_to_st(struct intel_memory_region *mem, void intel_region_ttm_node_free(struct intel_memory_region *mem, struct ttm_resource *node); +int intel_region_to_ttm_type(const struct intel_memory_region *mem); + struct ttm_device_funcs *i915_ttm_driver(void); #ifdef CONFIG_DRM_I915_SELFTEST -- 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.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 480D6C48BE6 for ; Mon, 14 Jun 2021 09:53:22 +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 1A5F661245 for ; Mon, 14 Jun 2021 09:53:22 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1A5F661245 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 EFD2089DA3; Mon, 14 Jun 2021 09:53:15 +0000 (UTC) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id EA2CE89D84; Mon, 14 Jun 2021 09:53:10 +0000 (UTC) IronPort-SDR: 0BNRjjOlSqsSjZuwpQKuoL5x1oiOiFx9Ag7Nb90b7/S8sbF1fdf03coPl8PpsA3bXJ6vJJOls6 Oz/4ktmxciuw== X-IronPort-AV: E=McAfee;i="6200,9189,10014"; a="269634176" X-IronPort-AV: E=Sophos;i="5.83,273,1616482800"; d="scan'208";a="269634176" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Jun 2021 02:53:09 -0700 IronPort-SDR: a5Vt79M2i7+C0qcL1XQ4RVbijwAVxRRK9n8Qb+ZqiVsTUuh7IMpsYQCjej2NRtwxgQaMpHJwph O4OcjwFSO6jg== X-IronPort-AV: E=Sophos;i="5.83,273,1616482800"; d="scan'208";a="449838994" Received: from janlundk-mobl1.ger.corp.intel.com (HELO thellst-mobl1.intel.com) ([10.249.254.32]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Jun 2021 02:53:08 -0700 From: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Date: Mon, 14 Jun 2021 11:52:29 +0200 Message-Id: <20210614095230.126284-4-thomas.hellstrom@linux.intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210614095230.126284-1-thomas.hellstrom@linux.intel.com> References: <20210614095230.126284-1-thomas.hellstrom@linux.intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH v3 3/4] drm/i915/ttm: Calculate the object placement at get_pages time 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?= , matthew.auld@intel.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" SW5zdGVhZCBvZiByZWx5aW5nIG9uIGEgc3RhdGljIHBsYWNlbWVudCwgY2FsY3VsYXRlIGF0IGdl dF9wYWdlcygpIHRpbWUuClRoaXMgc2hvdWxkIHdvcmsgZm9yIExNRU0gcmVnaW9ucyBhbmQgc3lz dGVtIGZvciBub3cuIEZvciBzdG9sZW4gd2UgbmVlZAp0byB0YWtlIHByZWFsbG9jYXRlZCByYW5n ZSBpbnRvIGFjY291bnQuIFRoYXQgd2lsbCBpZiBuZWVkZWQgYmUgYWRkZWQKbGF0ZXIuCgpTaWdu ZWQtb2ZmLWJ5OiBUaG9tYXMgSGVsbHN0csO2bSA8dGhvbWFzLmhlbGxzdHJvbUBsaW51eC5pbnRl bC5jb20+ClJldmlld2VkLWJ5OiBNYXR0aGV3IEF1bGQgPG1hdHRoZXcuYXVsZEBpbnRlbC5jb20+ Ci0tLQp2MjoKLSBGaXhlZCBhIHN0eWxlIGlzc3VlIChSZXBvcnRlZCBieSBNYXR0aGV3IEF1bGQp CnYzOgotIE1ha2Ugc3VyZSB3ZSBkb24ndCBhZGQgbW9yZSBwbGFjZW1lbnRzIHRvIHRoZSBzdGFj ay1hbGxvY2F0ZWQgdmVjdG9yCiAgdGhhbiB0aGVyZSBpcyByb29tIGZvci4gKFJlcG9ydGVkIGJ5 IE1hdHRoZXcgQXVsZCkKLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdHRt LmMgfCA5NCArKysrKysrKysrKysrKysrKystLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9yZWdpb25fdHRtLmMgfCAgOCArKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Jl Z2lvbl90dG0uaCB8ICAyICsKIDMgZmlsZXMgY2hhbmdlZCwgNzcgaW5zZXJ0aW9ucygrKSwgMjcg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVf Z2VtX3R0bS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3R0bS5jCmluZGV4 IDUxNzY2ODJhN2QxOS4uMzMyMTNiZTQ1MDUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9nZW0vaTkxNV9nZW1fdHRtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5 MTVfZ2VtX3R0bS5jCkBAIC0yNCw2ICsyNCwxMSBAQAogI2RlZmluZSBJOTE1X1RUTV9QUklPX05P X1BBR0VTICAxCiAjZGVmaW5lIEk5MTVfVFRNX1BSSU9fSEFTX1BBR0VTIDIKIAorLyoKKyAqIFNp emUgb2Ygc3RydWN0IHR0bV9wbGFjZSB2ZWN0b3IgaW4gb24tc3RhY2sgc3RydWN0IHR0bV9wbGFj ZW1lbnQgYWxsb2NzCisgKi8KKyNkZWZpbmUgSTkxNV9UVE1fTUFYX1BMQUNFTUVOVFMgSU5URUxf UkVHSU9OX1VOS05PV04KKwogLyoqCiAgKiBzdHJ1Y3QgaTkxNV90dG1fdHQgLSBUVE0gcGFnZSB2 ZWN0b3Igd2l0aCBhZGRpdGlvbmFsIHByaXZhdGUgaW5mb3JtYXRpb24KICAqIEB0dG06IFRoZSBi YXNlIFRUTSBwYWdlIHZlY3Rvci4KQEAgLTQyLDMyICs0NywxOCBAQCBzdHJ1Y3QgaTkxNV90dG1f dHQgewogCXN0cnVjdCBzZ190YWJsZSAqY2FjaGVkX3N0OwogfTsKIAotc3RhdGljIGNvbnN0IHN0 cnVjdCB0dG1fcGxhY2UgbG1lbTBfc3lzX3BsYWNlbWVudF9mbGFnc1tdID0gewotCXsKLQkJLmZw Zm4gPSAwLAotCQkubHBmbiA9IDAsCi0JCS5tZW1fdHlwZSA9IEk5MTVfUExfTE1FTTAsCi0JCS5m bGFncyA9IDAsCi0JfSwgewotCQkuZnBmbiA9IDAsCi0JCS5scGZuID0gMCwKLQkJLm1lbV90eXBl ID0gSTkxNV9QTF9TWVNURU0sCi0JCS5mbGFncyA9IDAsCi0JfQotfTsKLQotc3RhdGljIHN0cnVj dCB0dG1fcGxhY2VtZW50IGk5MTVfbG1lbTBfcGxhY2VtZW50ID0gewotCS5udW1fcGxhY2VtZW50 ID0gMSwKLQkucGxhY2VtZW50ID0gJmxtZW0wX3N5c19wbGFjZW1lbnRfZmxhZ3NbMF0sCi0JLm51 bV9idXN5X3BsYWNlbWVudCA9IDEsCi0JLmJ1c3lfcGxhY2VtZW50ID0gJmxtZW0wX3N5c19wbGFj ZW1lbnRfZmxhZ3NbMF0sCitzdGF0aWMgY29uc3Qgc3RydWN0IHR0bV9wbGFjZSBzeXNfcGxhY2Vt ZW50X2ZsYWdzID0geworCS5mcGZuID0gMCwKKwkubHBmbiA9IDAsCisJLm1lbV90eXBlID0gSTkx NV9QTF9TWVNURU0sCisJLmZsYWdzID0gMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdHRtX3BsYWNl bWVudCBpOTE1X3N5c19wbGFjZW1lbnQgPSB7CiAJLm51bV9wbGFjZW1lbnQgPSAxLAotCS5wbGFj ZW1lbnQgPSAmbG1lbTBfc3lzX3BsYWNlbWVudF9mbGFnc1sxXSwKKwkucGxhY2VtZW50ID0gJnN5 c19wbGFjZW1lbnRfZmxhZ3MsCiAJLm51bV9idXN5X3BsYWNlbWVudCA9IDEsCi0JLmJ1c3lfcGxh Y2VtZW50ID0gJmxtZW0wX3N5c19wbGFjZW1lbnRfZmxhZ3NbMV0sCisJLmJ1c3lfcGxhY2VtZW50 ID0gJnN5c19wbGFjZW1lbnRfZmxhZ3MsCiB9OwogCiBzdGF0aWMgYm9vbCBncHVfYmluZHNfaW9t ZW0oc3RydWN0IHR0bV9yZXNvdXJjZSAqbWVtKQpAQCAtODMsNiArNzQsNTUgQEAgc3RhdGljIGJv b2wgY3B1X21hcHNfaW9tZW0oc3RydWN0IHR0bV9yZXNvdXJjZSAqbWVtKQogCiBzdGF0aWMgdm9p ZCBpOTE1X3R0bV9hZGp1c3RfbHJ1KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopOwog CitzdGF0aWMgZW51bSB0dG1fY2FjaGluZworaTkxNV90dG1fc2VsZWN0X3R0X2NhY2hpbmcoY29u c3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3sKKwkvKgorCSAqIE9iamVjdHMg b25seSBhbGxvd2VkIGluIHN5c3RlbSBnZXQgY2FjaGVkIGNwdS1tYXBwaW5ncy4KKwkgKiBPdGhl ciBvYmplY3RzIGdldCBXQyBtYXBwaW5nIGZvciBub3cuIEV2ZW4gaWYgaW4gc3lzdGVtLgorCSAq LworCWlmIChvYmotPm1tLnJlZ2lvbi0+dHlwZSA9PSBJTlRFTF9NRU1PUllfU1lTVEVNICYmCisJ ICAgIG9iai0+bW0ubl9wbGFjZW1lbnRzIDw9IDEpCisJCXJldHVybiB0dG1fY2FjaGVkOworCisJ cmV0dXJuIHR0bV93cml0ZV9jb21iaW5lZDsKK30KKworc3RhdGljIHZvaWQKK2k5MTVfdHRtX3Bs YWNlX2Zyb21fcmVnaW9uKGNvbnN0IHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptciwKKwkJ CSAgIHN0cnVjdCB0dG1fcGxhY2UgKnBsYWNlKQoreworCW1lbXNldChwbGFjZSwgMCwgc2l6ZW9m KCpwbGFjZSkpOworCXBsYWNlLT5tZW1fdHlwZSA9IGludGVsX3JlZ2lvbl90b190dG1fdHlwZSht cik7Cit9CisKK3N0YXRpYyB2b2lkCitpOTE1X3R0bV9wbGFjZW1lbnRfZnJvbV9vYmooY29uc3Qg c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJCSAgICBzdHJ1Y3QgdHRtX3BsYWNl ICpyZXF1ZXN0ZWQsCisJCQkgICAgc3RydWN0IHR0bV9wbGFjZSAqYnVzeSwKKwkJCSAgICBzdHJ1 Y3QgdHRtX3BsYWNlbWVudCAqcGxhY2VtZW50KQoreworCXVuc2lnbmVkIGludCBudW1fYWxsb3dl ZCA9IG9iai0+bW0ubl9wbGFjZW1lbnRzOworCXVuc2lnbmVkIGludCBpOworCisJcGxhY2VtZW50 LT5udW1fcGxhY2VtZW50ID0gMTsKKwlpOTE1X3R0bV9wbGFjZV9mcm9tX3JlZ2lvbihudW1fYWxs b3dlZCA/IG9iai0+bW0ucGxhY2VtZW50c1swXSA6CisJCQkJICAgb2JqLT5tbS5yZWdpb24sIHJl cXVlc3RlZCk7CisKKwkvKiBDYWNoZSB0aGlzIG9uIG9iamVjdD8gKi8KKwlwbGFjZW1lbnQtPm51 bV9idXN5X3BsYWNlbWVudCA9IG51bV9hbGxvd2VkOworCWZvciAoaSA9IDA7IGkgPCBwbGFjZW1l bnQtPm51bV9idXN5X3BsYWNlbWVudDsgKytpKQorCQlpOTE1X3R0bV9wbGFjZV9mcm9tX3JlZ2lv bihvYmotPm1tLnBsYWNlbWVudHNbaV0sIGJ1c3kgKyBpKTsKKworCWlmIChudW1fYWxsb3dlZCA9 PSAwKSB7CisJCSpidXN5ID0gKnJlcXVlc3RlZDsKKwkJcGxhY2VtZW50LT5udW1fYnVzeV9wbGFj ZW1lbnQgPSAxOworCX0KKworCXBsYWNlbWVudC0+cGxhY2VtZW50ID0gcmVxdWVzdGVkOworCXBs YWNlbWVudC0+YnVzeV9wbGFjZW1lbnQgPSBidXN5OworfQorCiBzdGF0aWMgc3RydWN0IHR0bV90 dCAqaTkxNV90dG1fdHRfY3JlYXRlKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sCiAJCQkJ CSB1aW50MzJfdCBwYWdlX2ZsYWdzKQogewpAQCAtMTAwLDcgKzE0MCw4IEBAIHN0YXRpYyBzdHJ1 Y3QgdHRtX3R0ICppOTE1X3R0bV90dF9jcmVhdGUoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpi bywKIAkgICAgbWFuLT51c2VfdHQpCiAJCXBhZ2VfZmxhZ3MgfD0gVFRNX1BBR0VfRkxBR19aRVJP X0FMTE9DOwogCi0JcmV0ID0gdHRtX3R0X2luaXQoJmk5MTVfdHQtPnR0bSwgYm8sIHBhZ2VfZmxh Z3MsIHR0bV93cml0ZV9jb21iaW5lZCk7CisJcmV0ID0gdHRtX3R0X2luaXQoJmk5MTVfdHQtPnR0 bSwgYm8sIHBhZ2VfZmxhZ3MsCisJCQkgIGk5MTVfdHRtX3NlbGVjdF90dF9jYWNoaW5nKG9iaikp OwogCWlmIChyZXQpIHsKIAkJa2ZyZWUoaTkxNV90dCk7CiAJCXJldHVybiBOVUxMOwpAQCAtNDY0 LDEwICs1MDUsMTUgQEAgc3RhdGljIGludCBpOTE1X3R0bV9nZXRfcGFnZXMoc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iaikKIAkJLm5vX3dhaXRfZ3B1ID0gZmFsc2UsCiAJfTsKIAlzdHJ1 Y3Qgc2dfdGFibGUgKnN0OworCXN0cnVjdCB0dG1fcGxhY2UgcmVxdWVzdGVkLCBidXN5W0k5MTVf VFRNX01BWF9QTEFDRU1FTlRTXTsKKwlzdHJ1Y3QgdHRtX3BsYWNlbWVudCBwbGFjZW1lbnQ7CiAJ aW50IHJldDsKIAorCUdFTV9CVUdfT04ob2JqLT5tbS5uX3BsYWNlbWVudHMgPiBJOTE1X1RUTV9N QVhfUExBQ0VNRU5UUyk7CisKIAkvKiBNb3ZlIHRvIHRoZSByZXF1ZXN0ZWQgcGxhY2VtZW50LiAq LwotCXJldCA9IHR0bV9ib192YWxpZGF0ZShibywgJmk5MTVfbG1lbTBfcGxhY2VtZW50LCAmY3R4 KTsKKwlpOTE1X3R0bV9wbGFjZW1lbnRfZnJvbV9vYmoob2JqLCAmcmVxdWVzdGVkLCBidXN5LCAm cGxhY2VtZW50KTsKKwlyZXQgPSB0dG1fYm9fdmFsaWRhdGUoYm8sICZwbGFjZW1lbnQsICZjdHgp OwogCWlmIChyZXQpCiAJCXJldHVybiByZXQgPT0gLUVOT1NQQyA/IC1FTlhJTyA6IHJldDsKIApA QCAtNjgzLDcgKzcyOSw2IEBAIGludCBfX2k5MTVfZ2VtX3R0bV9vYmplY3RfaW5pdChzdHJ1Y3Qg aW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtLAogCWk5MTVfZ2VtX29iamVjdF9tYWtlX3Vuc2hyaW5r YWJsZShvYmopOwogCUlOSVRfUkFESVhfVFJFRSgmb2JqLT50dG0uZ2V0X2lvX3BhZ2UucmFkaXgs IEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pOwogCW11dGV4X2luaXQoJm9iai0+dHRtLmdldF9p b19wYWdlLmxvY2spOwotCiAJYm9fdHlwZSA9IChvYmotPmZsYWdzICYgSTkxNV9CT19BTExPQ19V U0VSKSA/IHR0bV9ib190eXBlX2RldmljZSA6CiAJCXR0bV9ib190eXBlX2tlcm5lbDsKIApAQCAt NzA3LDcgKzc1Miw2IEBAIGludCBfX2k5MTVfZ2VtX3R0bV9vYmplY3RfaW5pdChzdHJ1Y3QgaW50 ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtLAogCWk5MTVfdHRtX2FkanVzdF9kb21haW5zX2FmdGVyX2Nw dV9tb3ZlKG9iaik7CiAJaTkxNV90dG1fYWRqdXN0X2dlbV9hZnRlcl9tb3ZlKG9iaik7CiAJaTkx NV9nZW1fb2JqZWN0X3VubG9jayhvYmopOwotCiBvdXQ6CiAJLyogaTkxNSB3YW50cyAtRU5YSU8g d2hlbiBvdXQgb2YgbWVtb3J5IHJlZ2lvbiBzcGFjZS4gKi8KIAlyZXR1cm4gKHJldCA9PSAtRU5P U1BDKSA/IC1FTlhJTyA6IHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3JlZ2lvbl90dG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JlZ2lvbl90dG0u YwppbmRleCAyN2ZlMDY2OGQwOTQuLjVhNjY0ZjZjYzkzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfcmVnaW9uX3R0bS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3JlZ2lvbl90dG0uYwpAQCAtNTAsMTIgKzUwLDE2IEBAIHZvaWQgaW50ZWxfcmVnaW9u X3R0bV9kZXZpY2VfZmluaShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAgKiBk cml2ZXItcHJpdmF0ZSB0eXBlcyBmb3Igbm93LCByZXNlcnZpbmcgVFRNX1BMX1ZSQU0gZm9yIHN0 b2xlbgogICogbWVtb3J5IGFuZCBUVE1fUExfVFQgZm9yIEdHVFQgdXNlIGlmIGRlY2lkZWQgdG8g aW1wbGVtZW50IHRoaXMuCiAgKi8KLXN0YXRpYyBpbnQgaW50ZWxfcmVnaW9uX3RvX3R0bV90eXBl KHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0pCitpbnQgaW50ZWxfcmVnaW9uX3RvX3R0 bV90eXBlKGNvbnN0IHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0pCiB7CiAJaW50IHR5 cGU7CiAKIAlHRU1fQlVHX09OKG1lbS0+dHlwZSAhPSBJTlRFTF9NRU1PUllfTE9DQUwgJiYKLQkJ ICAgbWVtLT50eXBlICE9IElOVEVMX01FTU9SWV9NT0NLKTsKKwkJICAgbWVtLT50eXBlICE9IElO VEVMX01FTU9SWV9NT0NLICYmCisJCSAgIG1lbS0+dHlwZSAhPSBJTlRFTF9NRU1PUllfU1lTVEVN KTsKKworCWlmIChtZW0tPnR5cGUgPT0gSU5URUxfTUVNT1JZX1NZU1RFTSkKKwkJcmV0dXJuIFRU TV9QTF9TWVNURU07CiAKIAl0eXBlID0gbWVtLT5pbnN0YW5jZSArIFRUTV9QTF9QUklWOwogCUdF TV9CVUdfT04odHlwZSA+PSBUVE1fTlVNX01FTV9UWVBFUyk7CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9yZWdpb25fdHRtLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9yZWdpb25fdHRtLmgKaW5kZXggZThjZjgzMGZkYTZmLi42NDk0OTE4NDRlNzkgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JlZ2lvbl90dG0uaAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yZWdpb25fdHRtLmgKQEAgLTI4LDYgKzI4LDggQEAgc3Ry dWN0IHNnX3RhYmxlICppbnRlbF9yZWdpb25fdHRtX25vZGVfdG9fc3Qoc3RydWN0IGludGVsX21l bW9yeV9yZWdpb24gKm1lbSwKIHZvaWQgaW50ZWxfcmVnaW9uX3R0bV9ub2RlX2ZyZWUoc3RydWN0 IGludGVsX21lbW9yeV9yZWdpb24gKm1lbSwKIAkJCQlzdHJ1Y3QgdHRtX3Jlc291cmNlICpub2Rl KTsKIAoraW50IGludGVsX3JlZ2lvbl90b190dG1fdHlwZShjb25zdCBzdHJ1Y3QgaW50ZWxfbWVt b3J5X3JlZ2lvbiAqbWVtKTsKKwogc3RydWN0IHR0bV9kZXZpY2VfZnVuY3MgKmk5MTVfdHRtX2Ry aXZlcih2b2lkKTsKIAogI2lmZGVmIENPTkZJR19EUk1fSTkxNV9TRUxGVEVTVAotLSAKMi4zMS4x CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1n ZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK