From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf0-f198.google.com (mail-pf0-f198.google.com [209.85.192.198]) by kanga.kvack.org (Postfix) with ESMTP id 98A286B0069 for ; Fri, 6 Oct 2017 10:51:14 -0400 (EDT) Received: by mail-pf0-f198.google.com with SMTP id a7so38776421pfj.3 for ; Fri, 06 Oct 2017 07:51:14 -0700 (PDT) Received: from mga14.intel.com (mga14.intel.com. [192.55.52.115]) by mx.google.com with ESMTPS id h13si1237197pgn.39.2017.10.06.07.51.12 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 06 Oct 2017 07:51:13 -0700 (PDT) From: Matthew Auld Subject: [PATCH 02/21] drm/i915: introduce simple gemfs Date: Fri, 6 Oct 2017 15:50:22 +0100 Message-Id: <20171006145041.21673-3-matthew.auld@intel.com> In-Reply-To: <20171006145041.21673-1-matthew.auld@intel.com> References: <20171006145041.21673-1-matthew.auld@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: owner-linux-mm@kvack.org List-ID: To: intel-gfx@lists.freedesktop.org Cc: Joonas Lahtinen , Chris Wilson , Dave Hansen , "Kirill A . Shutemov" , Hugh Dickins , linux-mm@kvack.org Not a fully blown gemfs, just our very own tmpfs kernel mount. Doing so moves us away from the shmemfs shm_mnt, and gives us the much needed flexibility to do things like set our own mount options, namely huge= which should allow us to enable the use of transparent-huge-pages for our shmem backed objects. v2: various improvements suggested by Joonas v3: move gemfs instance to i915.mm and simplify now that we have file_setup_with_mnt v4: fallback to tmpfs shm_mnt upon failure to setup gemfs v5: make tmpfs fallback kinder v5: better gemfs failure message flags variable Signed-off-by: Matthew Auld Cc: Joonas Lahtinen Cc: Chris Wilson Cc: Dave Hansen Cc: Kirill A. Shutemov Cc: Hugh Dickins Cc: linux-mm@kvack.org Reviewed-by: Joonas Lahtinen --- drivers/gpu/drm/i915/Makefile | 1 + drivers/gpu/drm/i915/i915_drv.h | 5 +++ drivers/gpu/drm/i915/i915_gem.c | 33 ++++++++++++++- drivers/gpu/drm/i915/i915_gemfs.c | 52 ++++++++++++++++++++++++ drivers/gpu/drm/i915/i915_gemfs.h | 34 ++++++++++++++++ drivers/gpu/drm/i915/selftests/mock_gem_device.c | 4 ++ 6 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 drivers/gpu/drm/i915/i915_gemfs.c create mode 100644 drivers/gpu/drm/i915/i915_gemfs.h diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile index 51d0d2929a4b..66d23b619db1 100644 --- a/drivers/gpu/drm/i915/Makefile +++ b/drivers/gpu/drm/i915/Makefile @@ -47,6 +47,7 @@ i915-y += i915_cmd_parser.o \ i915_gem_tiling.o \ i915_gem_timeline.o \ i915_gem_userptr.o \ + i915_gemfs.o \ i915_trace_points.o \ i915_vma.o \ intel_breadcrumbs.o \ diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 1fc7080bfa7b..ec6f320cc4f5 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -1511,6 +1511,11 @@ struct i915_gem_mm { /** Usable portion of the GTT for GEM */ dma_addr_t stolen_base; /* limited to low memory (32-bit) */ + /** + * tmpfs instance used for shmem backed objects + */ + struct vfsmount *gemfs; + /** PPGTT used for aliasing the PPGTT with the GTT */ struct i915_hw_ppgtt *aliasing_ppgtt; diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index ab8c6946fea4..81d70d23a057 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -35,6 +35,7 @@ #include "intel_drv.h" #include "intel_frontbuffer.h" #include "intel_mocs.h" +#include "i915_gemfs.h" #include #include #include @@ -4251,6 +4252,30 @@ static const struct drm_i915_gem_object_ops i915_gem_object_ops = { .pwrite = i915_gem_object_pwrite_gtt, }; +static int i915_gem_object_create_shmem(struct drm_device *dev, + struct drm_gem_object *obj, + size_t size) +{ + struct drm_i915_private *i915 = to_i915(dev); + unsigned long flags = VM_NORESERVE; + struct file *filp; + + drm_gem_private_object_init(dev, obj, size); + + if (i915->mm.gemfs) + filp = shmem_file_setup_with_mnt(i915->mm.gemfs, "i915", size, + flags); + else + filp = shmem_file_setup("i915", size, flags); + + if (IS_ERR(filp)) + return PTR_ERR(filp); + + obj->filp = filp; + + return 0; +} + struct drm_i915_gem_object * i915_gem_object_create(struct drm_i915_private *dev_priv, u64 size) { @@ -4275,7 +4300,7 @@ i915_gem_object_create(struct drm_i915_private *dev_priv, u64 size) if (obj == NULL) return ERR_PTR(-ENOMEM); - ret = drm_gem_object_init(&dev_priv->drm, &obj->base, size); + ret = i915_gem_object_create_shmem(&dev_priv->drm, &obj->base, size); if (ret) goto fail; @@ -4915,6 +4940,10 @@ i915_gem_load_init(struct drm_i915_private *dev_priv) spin_lock_init(&dev_priv->fb_tracking.lock); + err = i915_gemfs_init(dev_priv); + if (err) + DRM_NOTE("Unable to create a private tmpfs mount, hugepage support will be disabled(%d).\n", err); + return 0; err_priorities: @@ -4953,6 +4982,8 @@ void i915_gem_load_cleanup(struct drm_i915_private *dev_priv) /* And ensure that our DESTROY_BY_RCU slabs are truly destroyed */ rcu_barrier(); + + i915_gemfs_fini(dev_priv); } int i915_gem_freeze(struct drm_i915_private *dev_priv) diff --git a/drivers/gpu/drm/i915/i915_gemfs.c b/drivers/gpu/drm/i915/i915_gemfs.c new file mode 100644 index 000000000000..168d0bd98f60 --- /dev/null +++ b/drivers/gpu/drm/i915/i915_gemfs.c @@ -0,0 +1,52 @@ +/* + * Copyright A(C) 2017 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + */ + +#include +#include + +#include "i915_drv.h" +#include "i915_gemfs.h" + +int i915_gemfs_init(struct drm_i915_private *i915) +{ + struct file_system_type *type; + struct vfsmount *gemfs; + + type = get_fs_type("tmpfs"); + if (!type) + return -ENODEV; + + gemfs = kern_mount(type); + if (IS_ERR(gemfs)) + return PTR_ERR(gemfs); + + i915->mm.gemfs = gemfs; + + return 0; +} + +void i915_gemfs_fini(struct drm_i915_private *i915) +{ + kern_unmount(i915->mm.gemfs); +} diff --git a/drivers/gpu/drm/i915/i915_gemfs.h b/drivers/gpu/drm/i915/i915_gemfs.h new file mode 100644 index 000000000000..cca8bdc5b93e --- /dev/null +++ b/drivers/gpu/drm/i915/i915_gemfs.h @@ -0,0 +1,34 @@ +/* + * Copyright A(C) 2017 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + */ + +#ifndef __I915_GEMFS_H__ +#define __I915_GEMFS_H__ + +struct drm_i915_private; + +int i915_gemfs_init(struct drm_i915_private *i915); + +void i915_gemfs_fini(struct drm_i915_private *i915); + +#endif diff --git a/drivers/gpu/drm/i915/selftests/mock_gem_device.c b/drivers/gpu/drm/i915/selftests/mock_gem_device.c index 0c8225d677e9..e189d2b5f6c1 100644 --- a/drivers/gpu/drm/i915/selftests/mock_gem_device.c +++ b/drivers/gpu/drm/i915/selftests/mock_gem_device.c @@ -83,6 +83,8 @@ static void mock_device_release(struct drm_device *dev) kmem_cache_destroy(i915->vmas); kmem_cache_destroy(i915->objects); + i915_gemfs_fini(i915); + drm_dev_fini(&i915->drm); put_device(&i915->drm.pdev->dev); } @@ -243,6 +245,8 @@ struct drm_i915_private *mock_gem_device(void) if (!i915->preempt_context) goto err_kernel_context; + WARN_ON(i915_gemfs_init(i915)); + return i915; err_kernel_context: -- 2.13.5 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthew Auld Subject: [PATCH 02/21] drm/i915: introduce simple gemfs Date: Fri, 6 Oct 2017 15:50:22 +0100 Message-ID: <20171006145041.21673-3-matthew.auld@intel.com> References: <20171006145041.21673-1-matthew.auld@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id 18E986FA55 for ; Fri, 6 Oct 2017 14:50:48 +0000 (UTC) In-Reply-To: <20171006145041.21673-1-matthew.auld@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org Cc: Dave Hansen , Hugh Dickins , linux-mm@kvack.org, "Kirill A . Shutemov" List-Id: intel-gfx@lists.freedesktop.org Tm90IGEgZnVsbHkgYmxvd24gZ2VtZnMsIGp1c3Qgb3VyIHZlcnkgb3duIHRtcGZzIGtlcm5lbCBt b3VudC4gRG9pbmcgc28KbW92ZXMgdXMgYXdheSBmcm9tIHRoZSBzaG1lbWZzIHNobV9tbnQsIGFu ZCBnaXZlcyB1cyB0aGUgbXVjaCBuZWVkZWQKZmxleGliaWxpdHkgdG8gZG8gdGhpbmdzIGxpa2Ug c2V0IG91ciBvd24gbW91bnQgb3B0aW9ucywgbmFtZWx5IGh1Z2U9CndoaWNoIHNob3VsZCBhbGxv dyB1cyB0byBlbmFibGUgdGhlIHVzZSBvZiB0cmFuc3BhcmVudC1odWdlLXBhZ2VzIGZvcgpvdXIg c2htZW0gYmFja2VkIG9iamVjdHMuCgp2MjogdmFyaW91cyBpbXByb3ZlbWVudHMgc3VnZ2VzdGVk IGJ5IEpvb25hcwoKdjM6IG1vdmUgZ2VtZnMgaW5zdGFuY2UgdG8gaTkxNS5tbSBhbmQgc2ltcGxp Znkgbm93IHRoYXQgd2UgaGF2ZQpmaWxlX3NldHVwX3dpdGhfbW50Cgp2NDogZmFsbGJhY2sgdG8g dG1wZnMgc2htX21udCB1cG9uIGZhaWx1cmUgdG8gc2V0dXAgZ2VtZnMKCnY1OiBtYWtlIHRtcGZz IGZhbGxiYWNrIGtpbmRlcgoKdjU6IGJldHRlciBnZW1mcyBmYWlsdXJlIG1lc3NhZ2UKICAgIGZs YWdzIHZhcmlhYmxlCgpTaWduZWQtb2ZmLWJ5OiBNYXR0aGV3IEF1bGQgPG1hdHRoZXcuYXVsZEBp bnRlbC5jb20+CkNjOiBKb29uYXMgTGFodGluZW4gPGpvb25hcy5sYWh0aW5lbkBsaW51eC5pbnRl bC5jb20+CkNjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KQ2M6IERh dmUgSGFuc2VuIDxkYXZlLmhhbnNlbkBpbnRlbC5jb20+CkNjOiBLaXJpbGwgQS4gU2h1dGVtb3Yg PGtpcmlsbEBzaHV0ZW1vdi5uYW1lPgpDYzogSHVnaCBEaWNraW5zIDxodWdoZEBnb29nbGUuY29t PgpDYzogbGludXgtbW1Aa3ZhY2sub3JnClJldmlld2VkLWJ5OiBKb29uYXMgTGFodGluZW4gPGpv b25hcy5sYWh0aW5lbkBsaW51eC5pbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv TWFrZWZpbGUgICAgICAgICAgICAgICAgICAgIHwgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuaCAgICAgICAgICAgICAgICAgIHwgIDUgKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbS5jICAgICAgICAgICAgICAgICAgfCAzMyArKysrKysrKysrKysrKy0KIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtZnMuYyAgICAgICAgICAgICAgICB8IDUyICsrKysrKysr KysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1mcy5oICAgICAg ICAgICAgICAgIHwgMzQgKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvc2Vs ZnRlc3RzL21vY2tfZ2VtX2RldmljZS5jIHwgIDQgKysKIDYgZmlsZXMgY2hhbmdlZCwgMTI4IGlu c2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbWZzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbWZzLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9N YWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IDUxZDBkMjkyOWE0 Yi4uNjZkMjNiNjE5ZGIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtNDcsNiArNDcsNyBAQCBp OTE1LXkgKz0gaTkxNV9jbWRfcGFyc2VyLm8gXAogCSAgaTkxNV9nZW1fdGlsaW5nLm8gXAogCSAg aTkxNV9nZW1fdGltZWxpbmUubyBcCiAJICBpOTE1X2dlbV91c2VycHRyLm8gXAorCSAgaTkxNV9n ZW1mcy5vIFwKIAkgIGk5MTVfdHJhY2VfcG9pbnRzLm8gXAogCSAgaTkxNV92bWEubyBcCiAJICBp bnRlbF9icmVhZGNydW1icy5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IDFmYzcwODBi ZmE3Yi4uZWM2ZjMyMGNjNGY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTE1MTEsNiAr MTUxMSwxMSBAQCBzdHJ1Y3QgaTkxNV9nZW1fbW0gewogCS8qKiBVc2FibGUgcG9ydGlvbiBvZiB0 aGUgR1RUIGZvciBHRU0gKi8KIAlkbWFfYWRkcl90IHN0b2xlbl9iYXNlOyAvKiBsaW1pdGVkIHRv IGxvdyBtZW1vcnkgKDMyLWJpdCkgKi8KIAorCS8qKgorCSAqIHRtcGZzIGluc3RhbmNlIHVzZWQg Zm9yIHNobWVtIGJhY2tlZCBvYmplY3RzCisJICovCisJc3RydWN0IHZmc21vdW50ICpnZW1mczsK KwogCS8qKiBQUEdUVCB1c2VkIGZvciBhbGlhc2luZyB0aGUgUFBHVFQgd2l0aCB0aGUgR1RUICov CiAJc3RydWN0IGk5MTVfaHdfcHBndHQgKmFsaWFzaW5nX3BwZ3R0OwogCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW0uYwppbmRleCBhYjhjNjk0NmZlYTQuLjgxZDcwZDIzYTA1NyAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dlbS5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCiAjaW5j bHVkZSAiaW50ZWxfZnJvbnRidWZmZXIuaCIKICNpbmNsdWRlICJpbnRlbF9tb2NzLmgiCisjaW5j bHVkZSAiaTkxNV9nZW1mcy5oIgogI2luY2x1ZGUgPGxpbnV4L2RtYS1mZW5jZS1hcnJheS5oPgog I2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9yZXNlcnZhdGlvbi5o PgpAQCAtNDI1MSw2ICs0MjUyLDMwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdF9vcHMgaTkxNV9nZW1fb2JqZWN0X29wcyA9IHsKIAkucHdyaXRlID0gaTkxNV9nZW1f b2JqZWN0X3B3cml0ZV9ndHQsCiB9OwogCitzdGF0aWMgaW50IGk5MTVfZ2VtX29iamVjdF9jcmVh dGVfc2htZW0oc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGRybV9nZW1fb2Jq ZWN0ICpvYmosCisJCQkJCXNpemVfdCBzaXplKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1ID0gdG9faTkxNShkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBWTV9OT1JFU0VS VkU7CisJc3RydWN0IGZpbGUgKmZpbHA7CisKKwlkcm1fZ2VtX3ByaXZhdGVfb2JqZWN0X2luaXQo ZGV2LCBvYmosIHNpemUpOworCisJaWYgKGk5MTUtPm1tLmdlbWZzKQorCQlmaWxwID0gc2htZW1f ZmlsZV9zZXR1cF93aXRoX21udChpOTE1LT5tbS5nZW1mcywgImk5MTUiLCBzaXplLAorCQkJCQkJ IGZsYWdzKTsKKwllbHNlCisJCWZpbHAgPSBzaG1lbV9maWxlX3NldHVwKCJpOTE1Iiwgc2l6ZSwg ZmxhZ3MpOworCisJaWYgKElTX0VSUihmaWxwKSkKKwkJcmV0dXJuIFBUUl9FUlIoZmlscCk7CisK KwlvYmotPmZpbHAgPSBmaWxwOworCisJcmV0dXJuIDA7Cit9CisKIHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICoKIGk5MTVfZ2VtX29iamVjdF9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LCB1NjQgc2l6ZSkKIHsKQEAgLTQyNzUsNyArNDMwMCw3IEBAIGk5MTVfZ2Vt X29iamVjdF9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1NjQgc2l6 ZSkKIAlpZiAob2JqID09IE5VTEwpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JcmV0 ID0gZHJtX2dlbV9vYmplY3RfaW5pdCgmZGV2X3ByaXYtPmRybSwgJm9iai0+YmFzZSwgc2l6ZSk7 CisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9zaG1lbSgmZGV2X3ByaXYtPmRybSwgJm9i ai0+YmFzZSwgc2l6ZSk7CiAJaWYgKHJldCkKIAkJZ290byBmYWlsOwogCkBAIC00OTE1LDYgKzQ5 NDAsMTAgQEAgaTkxNV9nZW1fbG9hZF9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikKIAogCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+ZmJfdHJhY2tpbmcubG9jayk7CiAK KwllcnIgPSBpOTE1X2dlbWZzX2luaXQoZGV2X3ByaXYpOworCWlmIChlcnIpCisJCURSTV9OT1RF KCJVbmFibGUgdG8gY3JlYXRlIGEgcHJpdmF0ZSB0bXBmcyBtb3VudCwgaHVnZXBhZ2Ugc3VwcG9y dCB3aWxsIGJlIGRpc2FibGVkKCVkKS5cbiIsIGVycik7CisKIAlyZXR1cm4gMDsKIAogZXJyX3By aW9yaXRpZXM6CkBAIC00OTUzLDYgKzQ5ODIsOCBAQCB2b2lkIGk5MTVfZ2VtX2xvYWRfY2xlYW51 cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAKIAkvKiBBbmQgZW5zdXJlIHRo YXQgb3VyIERFU1RST1lfQllfUkNVIHNsYWJzIGFyZSB0cnVseSBkZXN0cm95ZWQgKi8KIAlyY3Vf YmFycmllcigpOworCisJaTkxNV9nZW1mc19maW5pKGRldl9wcml2KTsKIH0KIAogaW50IGk5MTVf Z2VtX2ZyZWV6ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbWZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbWZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4x NjhkMGJkOThmNjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbWZzLmMKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE3IEludGVs IENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBv ZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0 d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiks CisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRp bmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5 LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxs IGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRo ZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xs b3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQg dGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgp IHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMg b2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT IElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElF RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5G UklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdI VCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVS V0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUg U09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJF LgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb3Vu dC5oPgorCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKyNpbmNsdWRlICJpOTE1X2dlbWZzLmgiCisK K2ludCBpOTE1X2dlbWZzX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCit7CisJ c3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGU7CisJc3RydWN0IHZmc21vdW50ICpnZW1mczsK KworCXR5cGUgPSBnZXRfZnNfdHlwZSgidG1wZnMiKTsKKwlpZiAoIXR5cGUpCisJCXJldHVybiAt RU5PREVWOworCisJZ2VtZnMgPSBrZXJuX21vdW50KHR5cGUpOworCWlmIChJU19FUlIoZ2VtZnMp KQorCQlyZXR1cm4gUFRSX0VSUihnZW1mcyk7CisKKwlpOTE1LT5tbS5nZW1mcyA9IGdlbWZzOwor CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgaTkxNV9nZW1mc19maW5pKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1KQoreworCWtlcm5fdW5tb3VudChpOTE1LT5tbS5nZW1mcyk7Cit9CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbWZzLmggYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi5jY2E4YmRjNWI5M2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbWZzLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE3 IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhp cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3 YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJh Z3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9y dGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENP UFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVS CisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNP RlRXQVJFLgorICoKKyAqLworCisjaWZuZGVmIF9fSTkxNV9HRU1GU19IX18KKyNkZWZpbmUgX19J OTE1X0dFTUZTX0hfXworCitzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZTsKKworaW50IGk5MTVfZ2Vt ZnNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7CisKK3ZvaWQgaTkxNV9nZW1m c19maW5pKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKKworI2VuZGlmCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja19nZW1fZGV2aWNlLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja19nZW1fZGV2aWNlLmMKaW5kZXggMGM4 MjI1ZDY3N2U5Li5lMTg5ZDJiNWY2YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L3NlbGZ0ZXN0cy9tb2NrX2dlbV9kZXZpY2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9z ZWxmdGVzdHMvbW9ja19nZW1fZGV2aWNlLmMKQEAgLTgzLDYgKzgzLDggQEAgc3RhdGljIHZvaWQg bW9ja19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCWttZW1fY2FjaGVf ZGVzdHJveShpOTE1LT52bWFzKTsKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koaTkxNS0+b2JqZWN0cyk7 CiAKKwlpOTE1X2dlbWZzX2ZpbmkoaTkxNSk7CisKIAlkcm1fZGV2X2ZpbmkoJmk5MTUtPmRybSk7 CiAJcHV0X2RldmljZSgmaTkxNS0+ZHJtLnBkZXYtPmRldik7CiB9CkBAIC0yNDMsNiArMjQ1LDgg QEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKm1vY2tfZ2VtX2RldmljZSh2b2lkKQogCWlmICgh aTkxNS0+cHJlZW1wdF9jb250ZXh0KQogCQlnb3RvIGVycl9rZXJuZWxfY29udGV4dDsKIAorCVdB Uk5fT04oaTkxNV9nZW1mc19pbml0KGk5MTUpKTsKKwogCXJldHVybiBpOTE1OwogCiBlcnJfa2Vy bmVsX2NvbnRleHQ6Ci0tIAoyLjEzLjUKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2ludGVsLWdmeAo=