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 E45DAC47083 for ; Wed, 2 Jun 2021 17:08:52 +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 B4D4C61CA6 for ; Wed, 2 Jun 2021 17:08:52 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B4D4C61CA6 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 52A2B6EE12; Wed, 2 Jun 2021 17:08:39 +0000 (UTC) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id AA5B06EE03; Wed, 2 Jun 2021 17:08:37 +0000 (UTC) IronPort-SDR: bVhWTHkv7PRXl6A4q64dj3jWFWqrdaBg7NgHkBdPamP2KOD2zBmOuSJMd8vuxBx4zR6fASS/m3 HGI63qXvaxuw== X-IronPort-AV: E=McAfee;i="6200,9189,10003"; a="225133301" X-IronPort-AV: E=Sophos;i="5.83,242,1616482800"; d="scan'208";a="225133301" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Jun 2021 10:07:45 -0700 IronPort-SDR: iCRwkFJDv/DV2f5Pi06x4NGat4CKdjH1KqD//B6Su6S8379CgXgLiDCT+DQUOZcc8rUgJb/SUs e9Z4tZq6FMLw== X-IronPort-AV: E=Sophos;i="5.83,242,1616482800"; d="scan'208";a="550220256" Received: from ibanaga-mobl.ger.corp.intel.com (HELO thellst-mobl1.intel.com) ([10.249.254.50]) by fmsmga001-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Jun 2021 10:07:44 -0700 From: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Subject: [PATCH 4/5] drm/i915/ttm: Use TTM for system memory Date: Wed, 2 Jun 2021 19:07:15 +0200 Message-Id: <20210602170716.280491-5-thomas.hellstrom@linux.intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210602170716.280491-1-thomas.hellstrom@linux.intel.com> References: <20210602170716.280491-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" 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 calback. We can then also reuse our own very elaborate shrinker for that memory. Signed-off-by: Thomas Hellström --- drivers/gpu/drm/i915/gem/i915_gem_ttm.c | 22 ++++++++++++++++++++++ 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 ++++++++ 4 files changed, 36 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c b/drivers/gpu/drm/i915/gem/i915_gem_ttm.c index 8e1c01168c6d..42e89bf43708 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_ttm.c @@ -755,3 +755,25 @@ int __i915_gem_ttm_object_init(struct intel_memory_region *mem, /* i915 wants -ENXIO when out of memory region space. */ return (ret == -ENOSPC) ? -ENXIO : ret; } + +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_OR_NULL(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 524aaeb0e842..c6cc16ccce36 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -1768,9 +1768,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 bd27e897d4d0..a42bb36c2aea 100644 --- a/drivers/gpu/drm/i915/intel_memory_region.c +++ b/drivers/gpu/drm/i915/intel_memory_region.c @@ -220,7 +220,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 7b5fa97c0b59..4d084424b55c 100644 --- a/drivers/gpu/drm/i915/intel_memory_region.h +++ b/drivers/gpu/drm/i915/intel_memory_region.h @@ -142,4 +142,12 @@ void intel_memory_region_unreserve(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,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 71371C47083 for ; Wed, 2 Jun 2021 17:08:46 +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 4057A61CA8 for ; Wed, 2 Jun 2021 17:08:46 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4057A61CA8 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 ADE266EE0D; Wed, 2 Jun 2021 17:08:38 +0000 (UTC) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id AA5B06EE03; Wed, 2 Jun 2021 17:08:37 +0000 (UTC) IronPort-SDR: bVhWTHkv7PRXl6A4q64dj3jWFWqrdaBg7NgHkBdPamP2KOD2zBmOuSJMd8vuxBx4zR6fASS/m3 HGI63qXvaxuw== X-IronPort-AV: E=McAfee;i="6200,9189,10003"; a="225133301" X-IronPort-AV: E=Sophos;i="5.83,242,1616482800"; d="scan'208";a="225133301" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Jun 2021 10:07:45 -0700 IronPort-SDR: iCRwkFJDv/DV2f5Pi06x4NGat4CKdjH1KqD//B6Su6S8379CgXgLiDCT+DQUOZcc8rUgJb/SUs e9Z4tZq6FMLw== X-IronPort-AV: E=Sophos;i="5.83,242,1616482800"; d="scan'208";a="550220256" Received: from ibanaga-mobl.ger.corp.intel.com (HELO thellst-mobl1.intel.com) ([10.249.254.50]) by fmsmga001-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Jun 2021 10:07:44 -0700 From: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Date: Wed, 2 Jun 2021 19:07:15 +0200 Message-Id: <20210602170716.280491-5-thomas.hellstrom@linux.intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210602170716.280491-1-thomas.hellstrom@linux.intel.com> References: <20210602170716.280491-1-thomas.hellstrom@linux.intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH 4/5] 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?= 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 b3VyIHR0bV90dF9wb3B1bGF0ZSBjYWxiYWNrLiBXZSBjYW4gdGhlbiBhbHNvIHJldXNlIG91cgpv d24gdmVyeSBlbGFib3JhdGUgc2hyaW5rZXIgZm9yIHRoYXQgbWVtb3J5LgoKU2lnbmVkLW9mZi1i eTogVGhvbWFzIEhlbGxzdHLDtm0gPHRob21hcy5oZWxsc3Ryb21AbGludXguaW50ZWwuY29tPgot LS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV90dG0uYyAgICB8IDIyICsrKysr KysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAg ICAgICB8ICAzIC0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbWVtb3J5X3JlZ2lvbi5j IHwgIDcgKysrKysrLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbWVtb3J5X3JlZ2lvbi5o IHwgIDggKysrKysrKysKIDQgZmlsZXMgY2hhbmdlZCwgMzYgaW5zZXJ0aW9ucygrKSwgNCBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1f dHRtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdHRtLmMKaW5kZXggOGUx YzAxMTY4YzZkLi40MmU4OWJmNDM3MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2dlbS9pOTE1X2dlbV90dG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9n ZW1fdHRtLmMKQEAgLTc1NSwzICs3NTUsMjUgQEAgaW50IF9faTkxNV9nZW1fdHRtX29iamVjdF9p bml0KHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0sCiAJLyogaTkxNSB3YW50cyAtRU5Y SU8gd2hlbiBvdXQgb2YgbWVtb3J5IHJlZ2lvbiBzcGFjZS4gKi8KIAlyZXR1cm4gKHJldCA9PSAt RU5PU1BDKSA/IC1FTlhJTyA6IHJldDsKIH0KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9t ZW1vcnlfcmVnaW9uX29wcyB0dG1fc3lzdGVtX3JlZ2lvbl9vcHMgPSB7CisJLmluaXRfb2JqZWN0 ID0gX19pOTE1X2dlbV90dG1fb2JqZWN0X2luaXQsCit9OworCitzdHJ1Y3QgaW50ZWxfbWVtb3J5 X3JlZ2lvbiAqCitpOTE1X2dlbV90dG1fc3lzdGVtX3NldHVwKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1LAorCQkJICB1MTYgdHlwZSwgdTE2IGluc3RhbmNlKQoreworCXN0cnVjdCBpbnRl bF9tZW1vcnlfcmVnaW9uICptcjsKKworCW1yID0gaW50ZWxfbWVtb3J5X3JlZ2lvbl9jcmVhdGUo aTkxNSwgMCwKKwkJCQkJdG90YWxyYW1fcGFnZXMoKSA8PCBQQUdFX1NISUZULAorCQkJCQlQQUdF X1NJWkUsIDAsCisJCQkJCXR5cGUsIGluc3RhbmNlLAorCQkJCQkmdHRtX3N5c3RlbV9yZWdpb25f b3BzKTsKKwlpZiAoSVNfRVJSX09SX05VTEwobXIpKQorCQlyZXR1cm4gbXI7CisKKwlpbnRlbF9t ZW1vcnlfcmVnaW9uX3NldF9uYW1lKG1yLCAic3lzdGVtLXR0bSIpOworCXJldHVybiBtcjsKK30K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IDUyNGFhZWIwZTg0Mi4uYzZjYzE2Y2NjZTM2IDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTE3NjgsOSArMTc2OCw2IEBAIHZvaWQgaTkxNV9n ZW1fY2xlYW51cF91c2VycHRyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiB2 b2lkIGk5MTVfZ2VtX2luaXRfZWFybHkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KTsKIHZvaWQgaTkxNV9nZW1fY2xlYW51cF9lYXJseShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpOwogCi1zdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqaTkxNV9nZW1fc2htZW1f c2V0dXAoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCi0JCQkJCQkgdTE2IHR5cGUsIHUx NiBpbnN0YW5jZSk7Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpOTE1X2dlbV9kcmFpbl9mcmVlZF9v YmplY3RzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQogewogCS8qCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tZW1vcnlfcmVnaW9uLmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9tZW1vcnlfcmVnaW9uLmMKaW5kZXggYmQyN2U4OTdkNGQwLi5hNDJi YjM2YzJhZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21lbW9yeV9y ZWdpb24uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tZW1vcnlfcmVnaW9uLmMK QEAgLTIyMCw3ICsyMjAsMTIgQEAgaW50IGludGVsX21lbW9yeV9yZWdpb25zX2h3X3Byb2JlKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQogCQlpbnN0YW5jZSA9IGludGVsX3JlZ2lvbl9t YXBbaV0uaW5zdGFuY2U7CiAJCXN3aXRjaCAodHlwZSkgewogCQljYXNlIElOVEVMX01FTU9SWV9T WVNURU06Ci0JCQltZW0gPSBpOTE1X2dlbV9zaG1lbV9zZXR1cChpOTE1LCB0eXBlLCBpbnN0YW5j ZSk7CisJCQlpZiAoSVNfREdGWChpOTE1KSkKKwkJCQltZW0gPSBpOTE1X2dlbV90dG1fc3lzdGVt X3NldHVwKGk5MTUsIHR5cGUsCisJCQkJCQkJCWluc3RhbmNlKTsKKwkJCWVsc2UKKwkJCQltZW0g PSBpOTE1X2dlbV9zaG1lbV9zZXR1cChpOTE1LCB0eXBlLAorCQkJCQkJCSAgIGluc3RhbmNlKTsK IAkJCWJyZWFrOwogCQljYXNlIElOVEVMX01FTU9SWV9TVE9MRU5fTE9DQUw6CiAJCQltZW0gPSBp OTE1X2dlbV9zdG9sZW5fbG1lbV9zZXR1cChpOTE1LCB0eXBlLCBpbnN0YW5jZSk7CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tZW1vcnlfcmVnaW9uLmggYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9tZW1vcnlfcmVnaW9uLmgKaW5kZXggN2I1ZmE5N2MwYjU5Li40 ZDA4NDQyNGI1NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21lbW9y eV9yZWdpb24uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tZW1vcnlfcmVnaW9u LmgKQEAgLTE0Miw0ICsxNDIsMTIgQEAgdm9pZCBpbnRlbF9tZW1vcnlfcmVnaW9uX3VucmVzZXJ2 ZShzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtKTsKIGludCBpbnRlbF9tZW1vcnlfcmVn aW9uX3Jlc2VydmUoc3RydWN0IGludGVsX21lbW9yeV9yZWdpb24gKm1lbSwKIAkJCQlyZXNvdXJj ZV9zaXplX3Qgb2Zmc2V0LAogCQkJCXJlc291cmNlX3NpemVfdCBzaXplKTsKKworc3RydWN0IGlu dGVsX21lbW9yeV9yZWdpb24gKgoraTkxNV9nZW1fdHRtX3N5c3RlbV9zZXR1cChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSwKKwkJCSAgdTE2IHR5cGUsIHUxNiBpbnN0YW5jZSk7CitzdHJ1 Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqCitpOTE1X2dlbV9zaG1lbV9zZXR1cChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSwKKwkJICAgICB1MTYgdHlwZSwgdTE2IGluc3RhbmNlKTsKKwog I2VuZGlmCi0tIAoyLjMxLjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lu dGVsLWdmeAo=