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 AAAFCC49EA6 for ; Thu, 24 Jun 2021 08:43:20 +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 55D4C613D8 for ; Thu, 24 Jun 2021 08:43:20 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 55D4C613D8 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 703C46EB2C; Thu, 24 Jun 2021 08:43:13 +0000 (UTC) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 17CFE6EB28; Thu, 24 Jun 2021 08:43:12 +0000 (UTC) IronPort-SDR: 9UXtcsh4qPEu4vTcicSrN2CwztDqnjAxS3Bg59PF/jRPmVDIQTkwBhSaRNu6zyUBoJ0S8eWZeL R8YzfrjUhsQw== X-IronPort-AV: E=McAfee;i="6200,9189,10024"; a="205601347" X-IronPort-AV: E=Sophos;i="5.83,296,1616482800"; d="scan'208";a="205601347" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jun 2021 01:43:11 -0700 IronPort-SDR: iHttE/23LaTdzLjzYIP0jx8bIhoLESXknTpVYalBQNEHi9eTzX8sMUUpSoEcuuXBhQtz128Efj xTTtQ1aaCJAQ== X-IronPort-AV: E=Sophos;i="5.83,296,1616482800"; d="scan'208";a="453344929" Received: from cmutgix-mobl.gar.corp.intel.com (HELO thellst-mobl1.intel.com) ([10.249.254.20]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jun 2021 01:43:09 -0700 From: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Subject: [PATCH v10 3/3] drm/i915/ttm: Use TTM for system memory Date: Thu, 24 Jun 2021 10:42:40 +0200 Message-Id: <20210624084240.270219-4-thomas.hellstrom@linux.intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210624084240.270219-1-thomas.hellstrom@linux.intel.com> References: <20210624084240.270219-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). v9: - Remove a DGFX warning in __i915_gem_object_release_shmem since it is called from the userptr code. --- drivers/gpu/drm/i915/gem/i915_gem_region.c | 4 -- drivers/gpu/drm/i915/gem/i915_gem_shmem.c | 2 + 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, 58 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..e9ac913b923a 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c @@ -302,6 +302,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 +561,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.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 A1141C49EA6 for ; Thu, 24 Jun 2021 08:43:23 +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 70908613DC for ; Thu, 24 Jun 2021 08:43:23 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 70908613DC 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 894276EB3C; Thu, 24 Jun 2021 08:43:16 +0000 (UTC) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 17CFE6EB28; Thu, 24 Jun 2021 08:43:12 +0000 (UTC) IronPort-SDR: 9UXtcsh4qPEu4vTcicSrN2CwztDqnjAxS3Bg59PF/jRPmVDIQTkwBhSaRNu6zyUBoJ0S8eWZeL R8YzfrjUhsQw== X-IronPort-AV: E=McAfee;i="6200,9189,10024"; a="205601347" X-IronPort-AV: E=Sophos;i="5.83,296,1616482800"; d="scan'208";a="205601347" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jun 2021 01:43:11 -0700 IronPort-SDR: iHttE/23LaTdzLjzYIP0jx8bIhoLESXknTpVYalBQNEHi9eTzX8sMUUpSoEcuuXBhQtz128Efj xTTtQ1aaCJAQ== X-IronPort-AV: E=Sophos;i="5.83,296,1616482800"; d="scan'208";a="453344929" Received: from cmutgix-mobl.gar.corp.intel.com (HELO thellst-mobl1.intel.com) ([10.249.254.20]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jun 2021 01:43:09 -0700 From: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Date: Thu, 24 Jun 2021 10:42:40 +0200 Message-Id: <20210624084240.270219-4-thomas.hellstrom@linux.intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210624084240.270219-1-thomas.hellstrom@linux.intel.com> References: <20210624084240.270219-1-thomas.hellstrom@linux.intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH v10 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 ZXBvcnRlZCBieSBNYXR0aGV3IEF1bGQpLgp2OToKLSBSZW1vdmUgYSBER0ZYIHdhcm5pbmcgaW4g X19pOTE1X2dlbV9vYmplY3RfcmVsZWFzZV9zaG1lbSBzaW5jZSBpdAogIGlzIGNhbGxlZCBmcm9t IHRoZSB1c2VycHRyIGNvZGUuCi0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2Vt X3JlZ2lvbi5jIHwgIDQgLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaG1l bS5jICB8ICAyICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV90dG0uYyAgICB8 IDUyICsrKysrKysrKysrKysrKysrLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmggICAgICAgICAgICB8ICAzIC0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tZW1vcnlf cmVnaW9uLmMgfCAgNyArKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21lbW9yeV9yZWdp b24uaCB8ICA4ICsrKysKIDYgZmlsZXMgY2hhbmdlZCwgNTggaW5zZXJ0aW9ucygrKSwgMTggZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2Vt X3JlZ2lvbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3JlZ2lvbi5jCmlu ZGV4IGQxZjE4NDA1NDBkZC4uNDkyNTU2MzAxOGI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9nZW0vaTkxNV9nZW1fcmVnaW9uLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z2VtL2k5MTVfZ2VtX3JlZ2lvbi5jCkBAIC0xMywxMSArMTMsNyBAQCB2b2lkIGk5MTVfZ2VtX29i amVjdF9pbml0X21lbW9yeV9yZWdpb24oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwK IHsKIAlvYmotPm1tLnJlZ2lvbiA9IGludGVsX21lbW9yeV9yZWdpb25fZ2V0KG1lbSk7CiAKLQlp ZiAob2JqLT5iYXNlLnNpemUgPD0gbWVtLT5taW5fcGFnZV9zaXplKQotCQlvYmotPmZsYWdzIHw9 IEk5MTVfQk9fQUxMT0NfQ09OVElHVU9VUzsKLQogCW11dGV4X2xvY2soJm1lbS0+b2JqZWN0cy5s b2NrKTsKLQogCWxpc3RfYWRkKCZvYmotPm1tLnJlZ2lvbl9saW5rLCAmbWVtLT5vYmplY3RzLmxp c3QpOwogCW11dGV4X3VubG9jaygmbWVtLT5vYmplY3RzLmxvY2spOwogfQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9nZW0vaTkxNV9nZW1fc2htZW0uYwppbmRleCA3YWExYzk1YzdiN2QuLmU5YWM5MTNi OTIzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVt LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMKQEAgLTMw Miw2ICszMDIsNyBAQCB2b2lkIGk5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXNfc2htZW0oc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHNnXwogCXN0cnVjdCBwYWdldmVjIHB2 ZWM7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKKwlHRU1fV0FSTl9PTihJU19ER0ZYKHRvX2k5MTUo b2JqLT5iYXNlLmRldikpKTsKIAlfX2k5MTVfZ2VtX29iamVjdF9yZWxlYXNlX3NobWVtKG9iaiwg cGFnZXMsIHRydWUpOwogCiAJaTkxNV9nZW1fZ3R0X2ZpbmlzaF9wYWdlcyhvYmosIHBhZ2VzKTsK QEAgLTU2MCw2ICs1NjEsNyBAQCBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3NobWVtX2Zyb21fZGF0 YShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJcmVzb3VyY2Vfc2l6ZV90IG9m ZnNldDsKIAlpbnQgZXJyOwogCisJR0VNX1dBUk5fT04oSVNfREdGWChkZXZfcHJpdikpOwogCW9i aiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfc2htZW0oZGV2X3ByaXYsIHJvdW5kX3VwKHNpemUs IFBBR0VfU0laRSkpOwogCWlmIChJU19FUlIob2JqKSkKIAkJcmV0dXJuIG9iajsKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV90dG0uYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2dlbS9pOTE1X2dlbV90dG0uYwppbmRleCBhMWRjNTkyYzExYmMuLjM2NDFhNmM3 YjNkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3R0bS5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV90dG0uYwpAQCAtMjg2LDYg KzI4NiwyNiBAQCBzdGF0aWMgdm9pZCBpOTE1X3R0bV9hZGp1c3RfZ2VtX2FmdGVyX21vdmUoc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIHsKIAlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmpl Y3QgKmJvID0gaTkxNV9nZW1fdG9fdHRtKG9iaik7CiAJdW5zaWduZWQgaW50IGNhY2hlX2xldmVs OworCXVuc2lnbmVkIGludCBpOworCisJLyoKKwkgKiBJZiBvYmplY3Qgd2FzIG1vdmVkIHRvIGFu IGFsbG93YWJsZSByZWdpb24sIHVwZGF0ZSB0aGUgb2JqZWN0CisJICogcmVnaW9uIHRvIGNvbnNp ZGVyIGl0IG1pZ3JhdGVkLiBOb3RlIHRoYXQgaWYgaXQncyBjdXJyZW50bHkgbm90CisJICogaW4g YW4gYWxsb3dhYmxlIHJlZ2lvbiwgaXQncyBldmljdGVkIGFuZCB3ZSBkb24ndCB1cGRhdGUgdGhl CisJICogb2JqZWN0IHJlZ2lvbi4KKwkgKi8KKwlpZiAoaW50ZWxfcmVnaW9uX3RvX3R0bV90eXBl KG9iai0+bW0ucmVnaW9uKSAhPSBiby0+cmVzb3VyY2UtPm1lbV90eXBlKSB7CisJCWZvciAoaSA9 IDA7IGkgPCBvYmotPm1tLm5fcGxhY2VtZW50czsgKytpKSB7CisJCQlzdHJ1Y3QgaW50ZWxfbWVt b3J5X3JlZ2lvbiAqbXIgPSBvYmotPm1tLnBsYWNlbWVudHNbaV07CisKKwkJCWlmIChpbnRlbF9y ZWdpb25fdG9fdHRtX3R5cGUobXIpID09IGJvLT5yZXNvdXJjZS0+bWVtX3R5cGUgJiYKKwkJCSAg ICBtciAhPSBvYmotPm1tLnJlZ2lvbikgeworCQkJCWk5MTVfZ2VtX29iamVjdF9yZWxlYXNlX21l bW9yeV9yZWdpb24ob2JqKTsKKwkJCQlpOTE1X2dlbV9vYmplY3RfaW5pdF9tZW1vcnlfcmVnaW9u KG9iaiwgbXIpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQogCiAJb2JqLT5tZW1fZmxhZ3Mg Jj0gfihJOTE1X0JPX0ZMQUdfU1RSVUNUX1BBR0UgfCBJOTE1X0JPX0ZMQUdfSU9NRU0pOwogCkBA IC02MTUsMTMgKzYzNSw2IEBAIHN0YXRpYyBpbnQgaTkxNV90dG1fZ2V0X3BhZ2VzKHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiAJLyogTW92ZSB0byB0aGUgcmVxdWVzdGVkIHBsYWNl bWVudC4gKi8KIAlpOTE1X3R0bV9wbGFjZW1lbnRfZnJvbV9vYmoob2JqLCAmcmVxdWVzdGVkLCBi dXN5LCAmcGxhY2VtZW50KTsKIAotCS8qCi0JICogRm9yIG5vdyB3ZSBzdXBwb3J0IExNRU0gb25s eSB3aXRoIFRUTS4KLQkgKiBUT0RPOiBSZW1vdmUgd2l0aCBzeXN0ZW0gc3VwcG9ydAotCSAqLwot CUdFTV9CVUdfT04ocmVxdWVzdGVkLm1lbV90eXBlIDwgSTkxNV9QTF9MTUVNMCB8fAotCQkgICBi dXN5WzBdLm1lbV90eXBlIDwgSTkxNV9QTF9MTUVNMCk7Ci0KIAkvKiBGaXJzdCB0cnkgb25seSB0 aGUgcmVxdWVzdGVkIHBsYWNlbWVudC4gTm8gZXZpY3Rpb24uICovCiAJcmVhbF9udW1fYnVzeSA9 IGZldGNoX2FuZF96ZXJvKCZwbGFjZW1lbnQubnVtX2J1c3lfcGxhY2VtZW50KTsKIAlyZXQgPSB0 dG1fYm9fdmFsaWRhdGUoYm8sICZwbGFjZW1lbnQsICZjdHgpOwpAQCAtNjM1LDkgKzY0OCw2IEBA IHN0YXRpYyBpbnQgaTkxNV90dG1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmopCiAJCSAgICByZXQgPT0gLUVBR0FJTikKIAkJCXJldHVybiByZXQ7CiAKLQkJLyogVE9E TzogUmVtb3ZlIHRoaXMgd2hlbiB3ZSBzdXBwb3J0IHN5c3RlbSBhcyBUVE0uICovCi0JCXJlYWxf bnVtX2J1c3kgPSAxOwotCiAJCS8qCiAJCSAqIElmIHRoZSBpbml0aWFsIGF0dGVtcHQgZmFpbHMs IGFsbG93IGFsbCBhY2NlcHRlZCBwbGFjZW1lbnRzLAogCQkgKiBldmljdGluZyBpZiBuZWNlc3Nh cnkuCkBAIC04NzMsMyArODgzLDI1IEBAIGludCBfX2k5MTVfZ2VtX3R0bV9vYmplY3RfaW5pdChz dHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtLAogCiAJcmV0dXJuIDA7CiB9CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbl9vcHMgdHRtX3N5c3RlbV9yZWdpb25f b3BzID0geworCS5pbml0X29iamVjdCA9IF9faTkxNV9nZW1fdHRtX29iamVjdF9pbml0LAorfTsK Kworc3RydWN0IGludGVsX21lbW9yeV9yZWdpb24gKgoraTkxNV9nZW1fdHRtX3N5c3RlbV9zZXR1 cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKKwkJCSAgdTE2IHR5cGUsIHUxNiBpbnN0 YW5jZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbXI7CisKKwltciA9IGludGVs X21lbW9yeV9yZWdpb25fY3JlYXRlKGk5MTUsIDAsCisJCQkJCXRvdGFscmFtX3BhZ2VzKCkgPDwg UEFHRV9TSElGVCwKKwkJCQkJUEFHRV9TSVpFLCAwLAorCQkJCQl0eXBlLCBpbnN0YW5jZSwKKwkJ CQkJJnR0bV9zeXN0ZW1fcmVnaW9uX29wcyk7CisJaWYgKElTX0VSUihtcikpCisJCXJldHVybiBt cjsKKworCWludGVsX21lbW9yeV9yZWdpb25fc2V0X25hbWUobXIsICJzeXN0ZW0tdHRtIik7CisJ cmV0dXJuIG1yOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu aCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggMDFlMTFmZTM4NjQyLi5i ZmJmYmFlNTc1NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgK KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMTc1MSw5ICsxNzUxLDYg QEAgdm9pZCBpOTE1X2dlbV9jbGVhbnVwX3VzZXJwdHIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KTsKIHZvaWQgaTkxNV9nZW1faW5pdF9lYXJseShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpOwogdm9pZCBpOTE1X2dlbV9jbGVhbnVwX2Vhcmx5KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiAKLXN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICpp OTE1X2dlbV9zaG1lbV9zZXR1cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKLQkJCQkJ CSB1MTYgdHlwZSwgdTE2IGluc3RhbmNlKTsKLQogc3RhdGljIGlubGluZSB2b2lkIGk5MTVfZ2Vt X2RyYWluX2ZyZWVkX29iamVjdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCiB7CiAJ LyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21lbW9yeV9yZWdpb24u YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21lbW9yeV9yZWdpb24uYwppbmRleCBkZjU5 Zjg4NGQzN2MuLjc3OWViMmZhOTBiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfbWVtb3J5X3JlZ2lvbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21l bW9yeV9yZWdpb24uYwpAQCAtMTczLDcgKzE3MywxMiBAQCBpbnQgaW50ZWxfbWVtb3J5X3JlZ2lv bnNfaHdfcHJvYmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCiAJCWluc3RhbmNlID0g aW50ZWxfcmVnaW9uX21hcFtpXS5pbnN0YW5jZTsKIAkJc3dpdGNoICh0eXBlKSB7CiAJCWNhc2Ug SU5URUxfTUVNT1JZX1NZU1RFTToKLQkJCW1lbSA9IGk5MTVfZ2VtX3NobWVtX3NldHVwKGk5MTUs IHR5cGUsIGluc3RhbmNlKTsKKwkJCWlmIChJU19ER0ZYKGk5MTUpKQorCQkJCW1lbSA9IGk5MTVf Z2VtX3R0bV9zeXN0ZW1fc2V0dXAoaTkxNSwgdHlwZSwKKwkJCQkJCQkJaW5zdGFuY2UpOworCQkJ ZWxzZQorCQkJCW1lbSA9IGk5MTVfZ2VtX3NobWVtX3NldHVwKGk5MTUsIHR5cGUsCisJCQkJCQkJ ICAgaW5zdGFuY2UpOwogCQkJYnJlYWs7CiAJCWNhc2UgSU5URUxfTUVNT1JZX1NUT0xFTl9MT0NB TDoKIAkJCW1lbSA9IGk5MTVfZ2VtX3N0b2xlbl9sbWVtX3NldHVwKGk5MTUsIHR5cGUsIGluc3Rh bmNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21lbW9yeV9yZWdp b24uaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21lbW9yeV9yZWdpb24uaAppbmRleCAy YmU4NDMzZDM3M2EuLmIxYjllNDYxZDUzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfbWVtb3J5X3JlZ2lvbi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X21lbW9yeV9yZWdpb24uaApAQCAtMTI1LDQgKzEyNSwxMiBAQCBpbnRlbF9tZW1vcnlfcmVnaW9u X3NldF9uYW1lKHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0sCiBpbnQgaW50ZWxfbWVt b3J5X3JlZ2lvbl9yZXNlcnZlKHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0sCiAJCQkJ cmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwKIAkJCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZSk7CisKK3N0 cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICoKK2k5MTVfZ2VtX3R0bV9zeXN0ZW1fc2V0dXAoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCisJCQkgIHUxNiB0eXBlLCB1MTYgaW5zdGFuY2Up Oworc3RydWN0IGludGVsX21lbW9yeV9yZWdpb24gKgoraTkxNV9nZW1fc2htZW1fc2V0dXAoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCisJCSAgICAgdTE2IHR5cGUsIHUxNiBpbnN0YW5j ZSk7CisKICNlbmRpZgotLSAKMi4zMS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pbnRlbC1nZngK