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,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 C63A0C4743C for ; Wed, 23 Jun 2021 06:28:57 +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 8E8BA6120D for ; Wed, 23 Jun 2021 06:28:57 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8E8BA6120D 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 079EE89EA6; Wed, 23 Jun 2021 06:28:51 +0000 (UTC) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 54CDC89C18; Wed, 23 Jun 2021 06:28:50 +0000 (UTC) IronPort-SDR: e6Rf2pV0fMWmoB9nfjwFS99CFh2utO3RbbLmbsTsSkowcUSHxN6jqXcW52/Z8ymJvoRSh6zOb/ Szqc1dt5b43g== X-IronPort-AV: E=McAfee;i="6200,9189,10023"; a="268342193" X-IronPort-AV: E=Sophos;i="5.83,293,1616482800"; d="scan'208";a="268342193" Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Jun 2021 23:28:48 -0700 IronPort-SDR: jxpg3eUYfdVT96C2HOxCJ2cA1mWXDu2zHrEMu8QtzyHy5NYx3GR+6/ITVFacEllC+d6rEDHBC3 3hwhUZY4orIQ== X-IronPort-AV: E=Sophos;i="5.83,293,1616482800"; d="scan'208";a="639346885" Received: from ibanaga-mobl.ger.corp.intel.com (HELO thellst-mobl1.intel.com) ([10.249.254.100]) by fmsmga006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Jun 2021 23:28:46 -0700 From: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Subject: [PATCH v8 3/3] drm/i915/ttm: Use TTM for system memory Date: Wed, 23 Jun 2021 08:28:25 +0200 Message-Id: <20210623062825.417187-4-thomas.hellstrom@linux.intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210623062825.417187-1-thomas.hellstrom@linux.intel.com> References: <20210623062825.417187-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" For discrete, use TTM for both cached and WC system memory. That means we currently rely on the TTM memory accounting / shrinker. For cached system memory we should consider remaining shmem-backed, which can be implemented from our ttm_tt_populate callback. We can then also reuse our own very elaborate shrinker for that memory. If an object is evicted to a gem allowable region, we will now consider the object migrated, and we flip the gem region and move the object to a different region list. Since we are now changing gem regions, we can't any longer rely on the CONTIGUOUS flag being set based on the region min page size, so remove that flag update. If we want to reintroduce it, we need to put it in the mutable flags. Signed-off-by: Thomas Hellström Reviewed-by: Matthew Auld --- v2: - Fix IS_ERR_OR_NULL() check to IS_ERR() (Reported by Matthew Auld) v3: - Commit message typo fix v6: - Fix TODO:s for supporting system memory with TTM. - Update the object GEM region after a TTM move if compatible. - Add a couple of warnings for shmem on DGFX. v8: - When changing regions, also move the object to the new region list (Reported by Matthew Auld). --- drivers/gpu/drm/i915/gem/i915_gem_region.c | 4 -- drivers/gpu/drm/i915/gem/i915_gem_shmem.c | 3 ++ drivers/gpu/drm/i915/gem/i915_gem_ttm.c | 52 +++++++++++++++++----- drivers/gpu/drm/i915/i915_drv.h | 3 -- drivers/gpu/drm/i915/intel_memory_region.c | 7 ++- drivers/gpu/drm/i915/intel_memory_region.h | 8 ++++ 6 files changed, 59 insertions(+), 18 deletions(-) diff --git a/drivers/gpu/drm/i915/gem/i915_gem_region.c b/drivers/gpu/drm/i915/gem/i915_gem_region.c index d1f1840540dd..4925563018b4 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_region.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_region.c @@ -13,11 +13,7 @@ void i915_gem_object_init_memory_region(struct drm_i915_gem_object *obj, { obj->mm.region = intel_memory_region_get(mem); - if (obj->base.size <= mem->min_page_size) - obj->flags |= I915_BO_ALLOC_CONTIGUOUS; - mutex_lock(&mem->objects.lock); - list_add(&obj->mm.region_link, &mem->objects.list); mutex_unlock(&mem->objects.lock); } diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c index 7aa1c95c7b7d..3648ae1d6628 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c @@ -284,6 +284,7 @@ __i915_gem_object_release_shmem(struct drm_i915_gem_object *obj, bool needs_clflush) { GEM_BUG_ON(obj->mm.madv == __I915_MADV_PURGED); + GEM_WARN_ON(IS_DGFX(to_i915(obj->base.dev))); if (obj->mm.madv == I915_MADV_DONTNEED) obj->mm.dirty = false; @@ -302,6 +303,7 @@ void i915_gem_object_put_pages_shmem(struct drm_i915_gem_object *obj, struct sg_ struct pagevec pvec; struct page *page; + GEM_WARN_ON(IS_DGFX(to_i915(obj->base.dev))); __i915_gem_object_release_shmem(obj, pages, true); i915_gem_gtt_finish_pages(obj, pages); @@ -560,6 +562,7 @@ i915_gem_object_create_shmem_from_data(struct drm_i915_private *dev_priv, resource_size_t offset; int err; + GEM_WARN_ON(IS_DGFX(dev_priv)); obj = i915_gem_object_create_shmem(dev_priv, round_up(size, PAGE_SIZE)); if (IS_ERR(obj)) return obj; diff --git a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c b/drivers/gpu/drm/i915/gem/i915_gem_ttm.c index a1dc592c11bc..3641a6c7b3d9 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_ttm.c @@ -286,6 +286,26 @@ static void i915_ttm_adjust_gem_after_move(struct drm_i915_gem_object *obj) { struct ttm_buffer_object *bo = i915_gem_to_ttm(obj); unsigned int cache_level; + unsigned int i; + + /* + * If object was moved to an allowable region, update the object + * region to consider it migrated. Note that if it's currently not + * in an allowable region, it's evicted and we don't update the + * object region. + */ + if (intel_region_to_ttm_type(obj->mm.region) != bo->resource->mem_type) { + for (i = 0; i < obj->mm.n_placements; ++i) { + struct intel_memory_region *mr = obj->mm.placements[i]; + + if (intel_region_to_ttm_type(mr) == bo->resource->mem_type && + mr != obj->mm.region) { + i915_gem_object_release_memory_region(obj); + i915_gem_object_init_memory_region(obj, mr); + break; + } + } + } obj->mem_flags &= ~(I915_BO_FLAG_STRUCT_PAGE | I915_BO_FLAG_IOMEM); @@ -615,13 +635,6 @@ static int i915_ttm_get_pages(struct drm_i915_gem_object *obj) /* Move to the requested placement. */ i915_ttm_placement_from_obj(obj, &requested, busy, &placement); - /* - * For now we support LMEM only with TTM. - * TODO: Remove with system support - */ - GEM_BUG_ON(requested.mem_type < I915_PL_LMEM0 || - busy[0].mem_type < I915_PL_LMEM0); - /* First try only the requested placement. No eviction. */ real_num_busy = fetch_and_zero(&placement.num_busy_placement); ret = ttm_bo_validate(bo, &placement, &ctx); @@ -635,9 +648,6 @@ static int i915_ttm_get_pages(struct drm_i915_gem_object *obj) ret == -EAGAIN) return ret; - /* TODO: Remove this when we support system as TTM. */ - real_num_busy = 1; - /* * If the initial attempt fails, allow all accepted placements, * evicting if necessary. @@ -873,3 +883,25 @@ int __i915_gem_ttm_object_init(struct intel_memory_region *mem, return 0; } + +static const struct intel_memory_region_ops ttm_system_region_ops = { + .init_object = __i915_gem_ttm_object_init, +}; + +struct intel_memory_region * +i915_gem_ttm_system_setup(struct drm_i915_private *i915, + u16 type, u16 instance) +{ + struct intel_memory_region *mr; + + mr = intel_memory_region_create(i915, 0, + totalram_pages() << PAGE_SHIFT, + PAGE_SIZE, 0, + type, instance, + &ttm_system_region_ops); + if (IS_ERR(mr)) + return mr; + + intel_memory_region_set_name(mr, "system-ttm"); + return mr; +} diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 01e11fe38642..bfbfbae57573 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -1751,9 +1751,6 @@ void i915_gem_cleanup_userptr(struct drm_i915_private *dev_priv); void i915_gem_init_early(struct drm_i915_private *dev_priv); void i915_gem_cleanup_early(struct drm_i915_private *dev_priv); -struct intel_memory_region *i915_gem_shmem_setup(struct drm_i915_private *i915, - u16 type, u16 instance); - static inline void i915_gem_drain_freed_objects(struct drm_i915_private *i915) { /* diff --git a/drivers/gpu/drm/i915/intel_memory_region.c b/drivers/gpu/drm/i915/intel_memory_region.c index df59f884d37c..779eb2fa90b6 100644 --- a/drivers/gpu/drm/i915/intel_memory_region.c +++ b/drivers/gpu/drm/i915/intel_memory_region.c @@ -173,7 +173,12 @@ int intel_memory_regions_hw_probe(struct drm_i915_private *i915) instance = intel_region_map[i].instance; switch (type) { case INTEL_MEMORY_SYSTEM: - mem = i915_gem_shmem_setup(i915, type, instance); + if (IS_DGFX(i915)) + mem = i915_gem_ttm_system_setup(i915, type, + instance); + else + mem = i915_gem_shmem_setup(i915, type, + instance); break; case INTEL_MEMORY_STOLEN_LOCAL: mem = i915_gem_stolen_lmem_setup(i915, type, instance); diff --git a/drivers/gpu/drm/i915/intel_memory_region.h b/drivers/gpu/drm/i915/intel_memory_region.h index 2be8433d373a..b1b9e461d53b 100644 --- a/drivers/gpu/drm/i915/intel_memory_region.h +++ b/drivers/gpu/drm/i915/intel_memory_region.h @@ -125,4 +125,12 @@ intel_memory_region_set_name(struct intel_memory_region *mem, int intel_memory_region_reserve(struct intel_memory_region *mem, resource_size_t offset, resource_size_t size); + +struct intel_memory_region * +i915_gem_ttm_system_setup(struct drm_i915_private *i915, + u16 type, u16 instance); +struct intel_memory_region * +i915_gem_shmem_setup(struct drm_i915_private *i915, + u16 type, u16 instance); + #endif -- 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,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 8D02DC4743C for ; Wed, 23 Jun 2021 06:29:01 +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 5CE386120D for ; Wed, 23 Jun 2021 06:29:01 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5CE386120D 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 9738C6E094; Wed, 23 Jun 2021 06:28:55 +0000 (UTC) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 54CDC89C18; Wed, 23 Jun 2021 06:28:50 +0000 (UTC) IronPort-SDR: e6Rf2pV0fMWmoB9nfjwFS99CFh2utO3RbbLmbsTsSkowcUSHxN6jqXcW52/Z8ymJvoRSh6zOb/ Szqc1dt5b43g== X-IronPort-AV: E=McAfee;i="6200,9189,10023"; a="268342193" X-IronPort-AV: E=Sophos;i="5.83,293,1616482800"; d="scan'208";a="268342193" Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Jun 2021 23:28:48 -0700 IronPort-SDR: jxpg3eUYfdVT96C2HOxCJ2cA1mWXDu2zHrEMu8QtzyHy5NYx3GR+6/ITVFacEllC+d6rEDHBC3 3hwhUZY4orIQ== X-IronPort-AV: E=Sophos;i="5.83,293,1616482800"; d="scan'208";a="639346885" Received: from ibanaga-mobl.ger.corp.intel.com (HELO thellst-mobl1.intel.com) ([10.249.254.100]) by fmsmga006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Jun 2021 23:28:46 -0700 From: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Date: Wed, 23 Jun 2021 08:28:25 +0200 Message-Id: <20210623062825.417187-4-thomas.hellstrom@linux.intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210623062825.417187-1-thomas.hellstrom@linux.intel.com> References: <20210623062825.417187-1-thomas.hellstrom@linux.intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH v8 3/3] drm/i915/ttm: Use TTM for system memory 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" Rm9yIGRpc2NyZXRlLCB1c2UgVFRNIGZvciBib3RoIGNhY2hlZCBhbmQgV0Mgc3lzdGVtIG1lbW9y eS4gVGhhdCBtZWFucwp3ZSBjdXJyZW50bHkgcmVseSBvbiB0aGUgVFRNIG1lbW9yeSBhY2NvdW50 aW5nIC8gc2hyaW5rZXIuIEZvciBjYWNoZWQKc3lzdGVtIG1lbW9yeSB3ZSBzaG91bGQgY29uc2lk ZXIgcmVtYWluaW5nIHNobWVtLWJhY2tlZCwgd2hpY2ggY2FuIGJlCmltcGxlbWVudGVkIGZyb20g b3VyIHR0bV90dF9wb3B1bGF0ZSBjYWxsYmFjay4gV2UgY2FuIHRoZW4gYWxzbyByZXVzZSBvdXIK b3duIHZlcnkgZWxhYm9yYXRlIHNocmlua2VyIGZvciB0aGF0IG1lbW9yeS4KCklmIGFuIG9iamVj dCBpcyBldmljdGVkIHRvIGEgZ2VtIGFsbG93YWJsZSByZWdpb24sIHdlIHdpbGwgbm93IGNvbnNp ZGVyCnRoZSBvYmplY3QgbWlncmF0ZWQsIGFuZCB3ZSBmbGlwIHRoZSBnZW0gcmVnaW9uIGFuZCBt b3ZlIHRoZSBvYmplY3QgdG8gYQpkaWZmZXJlbnQgcmVnaW9uIGxpc3QuIFNpbmNlIHdlIGFyZSBu b3cgY2hhbmdpbmcgZ2VtIHJlZ2lvbnMsIHdlIGNhbid0CmFueSBsb25nZXIgcmVseSBvbiB0aGUg Q09OVElHVU9VUyBmbGFnIGJlaW5nIHNldCBiYXNlZCBvbiB0aGUgcmVnaW9uCm1pbiBwYWdlIHNp emUsIHNvIHJlbW92ZSB0aGF0IGZsYWcgdXBkYXRlLiBJZiB3ZSB3YW50IHRvIHJlaW50cm9kdWNl IGl0LAp3ZSBuZWVkIHRvIHB1dCBpdCBpbiB0aGUgbXV0YWJsZSBmbGFncy4KClNpZ25lZC1vZmYt Ynk6IFRob21hcyBIZWxsc3Ryw7ZtIDx0aG9tYXMuaGVsbHN0cm9tQGxpbnV4LmludGVsLmNvbT4K UmV2aWV3ZWQtYnk6IE1hdHRoZXcgQXVsZCA8bWF0dGhldy5hdWxkQGludGVsLmNvbT4KLS0tCnYy OgotIEZpeCBJU19FUlJfT1JfTlVMTCgpIGNoZWNrIHRvIElTX0VSUigpIChSZXBvcnRlZCBieSBN YXR0aGV3IEF1bGQpCnYzOgotIENvbW1pdCBtZXNzYWdlIHR5cG8gZml4CnY2OgotIEZpeCBUT0RP OnMgZm9yIHN1cHBvcnRpbmcgc3lzdGVtIG1lbW9yeSB3aXRoIFRUTS4KLSBVcGRhdGUgdGhlIG9i amVjdCBHRU0gcmVnaW9uIGFmdGVyIGEgVFRNIG1vdmUgaWYgY29tcGF0aWJsZS4KLSBBZGQgYSBj b3VwbGUgb2Ygd2FybmluZ3MgZm9yIHNobWVtIG9uIERHRlguCnY4OgotIFdoZW4gY2hhbmdpbmcg cmVnaW9ucywgYWxzbyBtb3ZlIHRoZSBvYmplY3QgdG8gdGhlIG5ldyByZWdpb24gbGlzdAogIChS ZXBvcnRlZCBieSBNYXR0aGV3IEF1bGQpLgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9p OTE1X2dlbV9yZWdpb24uYyB8ICA0IC0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9n ZW1fc2htZW0uYyAgfCAgMyArKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3R0 bS5jICAgIHwgNTIgKysrKysrKysrKysrKysrKystLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuaCAgICAgICAgICAgIHwgIDMgLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X21lbW9yeV9yZWdpb24uYyB8ICA3ICsrLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbWVt b3J5X3JlZ2lvbi5oIHwgIDggKysrKwogNiBmaWxlcyBjaGFuZ2VkLCA1OSBpbnNlcnRpb25zKCsp LCAxOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0v aTkxNV9nZW1fcmVnaW9uLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcmVn aW9uLmMKaW5kZXggZDFmMTg0MDU0MGRkLi40OTI1NTYzMDE4YjQgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9yZWdpb24uYworKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9nZW0vaTkxNV9nZW1fcmVnaW9uLmMKQEAgLTEzLDExICsxMyw3IEBAIHZvaWQgaTkx NV9nZW1fb2JqZWN0X2luaXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqLAogewogCW9iai0+bW0ucmVnaW9uID0gaW50ZWxfbWVtb3J5X3JlZ2lvbl9nZXQobWVt KTsKIAotCWlmIChvYmotPmJhc2Uuc2l6ZSA8PSBtZW0tPm1pbl9wYWdlX3NpemUpCi0JCW9iai0+ ZmxhZ3MgfD0gSTkxNV9CT19BTExPQ19DT05USUdVT1VTOwotCiAJbXV0ZXhfbG9jaygmbWVtLT5v YmplY3RzLmxvY2spOwotCiAJbGlzdF9hZGQoJm9iai0+bW0ucmVnaW9uX2xpbmssICZtZW0tPm9i amVjdHMubGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZtZW0tPm9iamVjdHMubG9jayk7CiB9CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2htZW0uYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaG1lbS5jCmluZGV4IDdhYTFjOTVjN2I3ZC4u MzY0OGFlMWQ2NjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9n ZW1fc2htZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2htZW0u YwpAQCAtMjg0LDYgKzI4NCw3IEBAIF9faTkxNV9nZW1fb2JqZWN0X3JlbGVhc2Vfc2htZW0oc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJCQlib29sIG5lZWRzX2NsZmx1c2gpCiB7 CiAJR0VNX0JVR19PTihvYmotPm1tLm1hZHYgPT0gX19JOTE1X01BRFZfUFVSR0VEKTsKKwlHRU1f V0FSTl9PTihJU19ER0ZYKHRvX2k5MTUob2JqLT5iYXNlLmRldikpKTsKIAogCWlmIChvYmotPm1t Lm1hZHYgPT0gSTkxNV9NQURWX0RPTlRORUVEKQogCQlvYmotPm1tLmRpcnR5ID0gZmFsc2U7CkBA IC0zMDIsNiArMzAzLDcgQEAgdm9pZCBpOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzX3NobWVtKHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBzZ18KIAlzdHJ1Y3QgcGFnZXZl YyBwdmVjOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCisJR0VNX1dBUk5fT04oSVNfREdGWCh0b19p OTE1KG9iai0+YmFzZS5kZXYpKSk7CiAJX19pOTE1X2dlbV9vYmplY3RfcmVsZWFzZV9zaG1lbShv YmosIHBhZ2VzLCB0cnVlKTsKIAogCWk5MTVfZ2VtX2d0dF9maW5pc2hfcGFnZXMob2JqLCBwYWdl cyk7CkBAIC01NjAsNiArNTYyLDcgQEAgaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9zaG1lbV9mcm9t X2RhdGEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCXJlc291cmNlX3NpemVf dCBvZmZzZXQ7CiAJaW50IGVycjsKIAorCUdFTV9XQVJOX09OKElTX0RHRlgoZGV2X3ByaXYpKTsK IAlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3NobWVtKGRldl9wcml2LCByb3VuZF91cChz aXplLCBQQUdFX1NJWkUpKTsKIAlpZiAoSVNfRVJSKG9iaikpCiAJCXJldHVybiBvYmo7CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdHRtLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdHRtLmMKaW5kZXggYTFkYzU5MmMxMWJjLi4zNjQx YTZjN2IzZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV90 dG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdHRtLmMKQEAgLTI4 Niw2ICsyODYsMjYgQEAgc3RhdGljIHZvaWQgaTkxNV90dG1fYWRqdXN0X2dlbV9hZnRlcl9tb3Zl KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiB7CiAJc3RydWN0IHR0bV9idWZmZXJf b2JqZWN0ICpibyA9IGk5MTVfZ2VtX3RvX3R0bShvYmopOwogCXVuc2lnbmVkIGludCBjYWNoZV9s ZXZlbDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCS8qCisJICogSWYgb2JqZWN0IHdhcyBtb3ZlZCB0 byBhbiBhbGxvd2FibGUgcmVnaW9uLCB1cGRhdGUgdGhlIG9iamVjdAorCSAqIHJlZ2lvbiB0byBj b25zaWRlciBpdCBtaWdyYXRlZC4gTm90ZSB0aGF0IGlmIGl0J3MgY3VycmVudGx5IG5vdAorCSAq IGluIGFuIGFsbG93YWJsZSByZWdpb24sIGl0J3MgZXZpY3RlZCBhbmQgd2UgZG9uJ3QgdXBkYXRl IHRoZQorCSAqIG9iamVjdCByZWdpb24uCisJICovCisJaWYgKGludGVsX3JlZ2lvbl90b190dG1f dHlwZShvYmotPm1tLnJlZ2lvbikgIT0gYm8tPnJlc291cmNlLT5tZW1fdHlwZSkgeworCQlmb3Ig KGkgPSAwOyBpIDwgb2JqLT5tbS5uX3BsYWNlbWVudHM7ICsraSkgeworCQkJc3RydWN0IGludGVs X21lbW9yeV9yZWdpb24gKm1yID0gb2JqLT5tbS5wbGFjZW1lbnRzW2ldOworCisJCQlpZiAoaW50 ZWxfcmVnaW9uX3RvX3R0bV90eXBlKG1yKSA9PSBiby0+cmVzb3VyY2UtPm1lbV90eXBlICYmCisJ CQkgICAgbXIgIT0gb2JqLT5tbS5yZWdpb24pIHsKKwkJCQlpOTE1X2dlbV9vYmplY3RfcmVsZWFz ZV9tZW1vcnlfcmVnaW9uKG9iaik7CisJCQkJaTkxNV9nZW1fb2JqZWN0X2luaXRfbWVtb3J5X3Jl Z2lvbihvYmosIG1yKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KIAogCW9iai0+bWVtX2Zs YWdzICY9IH4oSTkxNV9CT19GTEFHX1NUUlVDVF9QQUdFIHwgSTkxNV9CT19GTEFHX0lPTUVNKTsK IApAQCAtNjE1LDEzICs2MzUsNiBAQCBzdGF0aWMgaW50IGk5MTVfdHRtX2dldF9wYWdlcyhzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogCS8qIE1vdmUgdG8gdGhlIHJlcXVlc3RlZCBw bGFjZW1lbnQuICovCiAJaTkxNV90dG1fcGxhY2VtZW50X2Zyb21fb2JqKG9iaiwgJnJlcXVlc3Rl ZCwgYnVzeSwgJnBsYWNlbWVudCk7CiAKLQkvKgotCSAqIEZvciBub3cgd2Ugc3VwcG9ydCBMTUVN IG9ubHkgd2l0aCBUVE0uCi0JICogVE9ETzogUmVtb3ZlIHdpdGggc3lzdGVtIHN1cHBvcnQKLQkg Ki8KLQlHRU1fQlVHX09OKHJlcXVlc3RlZC5tZW1fdHlwZSA8IEk5MTVfUExfTE1FTTAgfHwKLQkJ ICAgYnVzeVswXS5tZW1fdHlwZSA8IEk5MTVfUExfTE1FTTApOwotCiAJLyogRmlyc3QgdHJ5IG9u bHkgdGhlIHJlcXVlc3RlZCBwbGFjZW1lbnQuIE5vIGV2aWN0aW9uLiAqLwogCXJlYWxfbnVtX2J1 c3kgPSBmZXRjaF9hbmRfemVybygmcGxhY2VtZW50Lm51bV9idXN5X3BsYWNlbWVudCk7CiAJcmV0 ID0gdHRtX2JvX3ZhbGlkYXRlKGJvLCAmcGxhY2VtZW50LCAmY3R4KTsKQEAgLTYzNSw5ICs2NDgs NiBAQCBzdGF0aWMgaW50IGk5MTVfdHRtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqKQogCQkgICAgcmV0ID09IC1FQUdBSU4pCiAJCQlyZXR1cm4gcmV0OwogCi0JCS8q IFRPRE86IFJlbW92ZSB0aGlzIHdoZW4gd2Ugc3VwcG9ydCBzeXN0ZW0gYXMgVFRNLiAqLwotCQly ZWFsX251bV9idXN5ID0gMTsKLQogCQkvKgogCQkgKiBJZiB0aGUgaW5pdGlhbCBhdHRlbXB0IGZh aWxzLCBhbGxvdyBhbGwgYWNjZXB0ZWQgcGxhY2VtZW50cywKIAkJICogZXZpY3RpbmcgaWYgbmVj ZXNzYXJ5LgpAQCAtODczLDMgKzg4MywyNSBAQCBpbnQgX19pOTE1X2dlbV90dG1fb2JqZWN0X2lu aXQoc3RydWN0IGludGVsX21lbW9yeV9yZWdpb24gKm1lbSwKIAogCXJldHVybiAwOwogfQorCitz dGF0aWMgY29uc3Qgc3RydWN0IGludGVsX21lbW9yeV9yZWdpb25fb3BzIHR0bV9zeXN0ZW1fcmVn aW9uX29wcyA9IHsKKwkuaW5pdF9vYmplY3QgPSBfX2k5MTVfZ2VtX3R0bV9vYmplY3RfaW5pdCwK K307CisKK3N0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICoKK2k5MTVfZ2VtX3R0bV9zeXN0ZW1f c2V0dXAoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCisJCQkgIHUxNiB0eXBlLCB1MTYg aW5zdGFuY2UpCit7CisJc3RydWN0IGludGVsX21lbW9yeV9yZWdpb24gKm1yOworCisJbXIgPSBp bnRlbF9tZW1vcnlfcmVnaW9uX2NyZWF0ZShpOTE1LCAwLAorCQkJCQl0b3RhbHJhbV9wYWdlcygp IDw8IFBBR0VfU0hJRlQsCisJCQkJCVBBR0VfU0laRSwgMCwKKwkJCQkJdHlwZSwgaW5zdGFuY2Us CisJCQkJCSZ0dG1fc3lzdGVtX3JlZ2lvbl9vcHMpOworCWlmIChJU19FUlIobXIpKQorCQlyZXR1 cm4gbXI7CisKKwlpbnRlbF9tZW1vcnlfcmVnaW9uX3NldF9uYW1lKG1yLCAic3lzdGVtLXR0bSIp OworCXJldHVybiBtcjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IDAxZTExZmUzODY0 Mi4uYmZiZmJhZTU3NTczIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Ry di5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTE3NTEsOSArMTc1 MSw2IEBAIHZvaWQgaTkxNV9nZW1fY2xlYW51cF91c2VycHRyKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdik7CiB2b2lkIGk5MTVfZ2VtX2luaXRfZWFybHkoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KTsKIHZvaWQgaTkxNV9nZW1fY2xlYW51cF9lYXJseShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogCi1zdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lv biAqaTkxNV9nZW1fc2htZW1fc2V0dXAoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCi0J CQkJCQkgdTE2IHR5cGUsIHUxNiBpbnN0YW5jZSk7Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpOTE1 X2dlbV9kcmFpbl9mcmVlZF9vYmplY3RzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQog ewogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tZW1vcnlfcmVn aW9uLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tZW1vcnlfcmVnaW9uLmMKaW5kZXgg ZGY1OWY4ODRkMzdjLi43NzllYjJmYTkwYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX21lbW9yeV9yZWdpb24uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9tZW1vcnlfcmVnaW9uLmMKQEAgLTE3Myw3ICsxNzMsMTIgQEAgaW50IGludGVsX21lbW9yeV9y ZWdpb25zX2h3X3Byb2JlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQogCQlpbnN0YW5j ZSA9IGludGVsX3JlZ2lvbl9tYXBbaV0uaW5zdGFuY2U7CiAJCXN3aXRjaCAodHlwZSkgewogCQlj YXNlIElOVEVMX01FTU9SWV9TWVNURU06Ci0JCQltZW0gPSBpOTE1X2dlbV9zaG1lbV9zZXR1cChp OTE1LCB0eXBlLCBpbnN0YW5jZSk7CisJCQlpZiAoSVNfREdGWChpOTE1KSkKKwkJCQltZW0gPSBp OTE1X2dlbV90dG1fc3lzdGVtX3NldHVwKGk5MTUsIHR5cGUsCisJCQkJCQkJCWluc3RhbmNlKTsK KwkJCWVsc2UKKwkJCQltZW0gPSBpOTE1X2dlbV9zaG1lbV9zZXR1cChpOTE1LCB0eXBlLAorCQkJ CQkJCSAgIGluc3RhbmNlKTsKIAkJCWJyZWFrOwogCQljYXNlIElOVEVMX01FTU9SWV9TVE9MRU5f TE9DQUw6CiAJCQltZW0gPSBpOTE1X2dlbV9zdG9sZW5fbG1lbV9zZXR1cChpOTE1LCB0eXBlLCBp bnN0YW5jZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tZW1vcnlf cmVnaW9uLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tZW1vcnlfcmVnaW9uLmgKaW5k ZXggMmJlODQzM2QzNzNhLi5iMWI5ZTQ2MWQ1M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX21lbW9yeV9yZWdpb24uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9tZW1vcnlfcmVnaW9uLmgKQEAgLTEyNSw0ICsxMjUsMTIgQEAgaW50ZWxfbWVtb3J5X3Jl Z2lvbl9zZXRfbmFtZShzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtLAogaW50IGludGVs X21lbW9yeV9yZWdpb25fcmVzZXJ2ZShzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtLAog CQkJCXJlc291cmNlX3NpemVfdCBvZmZzZXQsCiAJCQkJcmVzb3VyY2Vfc2l6ZV90IHNpemUpOwor CitzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqCitpOTE1X2dlbV90dG1fc3lzdGVtX3NldHVw KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAorCQkJICB1MTYgdHlwZSwgdTE2IGluc3Rh bmNlKTsKK3N0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICoKK2k5MTVfZ2VtX3NobWVtX3NldHVw KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAorCQkgICAgIHUxNiB0eXBlLCB1MTYgaW5z dGFuY2UpOworCiAjZW5kaWYKLS0gCjIuMzEuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vaW50ZWwtZ2Z4Cg==