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=-6.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED 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 CC1F1C0650F for ; Mon, 5 Aug 2019 12:44:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 9E4FF21734 for ; Mon, 5 Aug 2019 12:44:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729039AbfHEMo0 (ORCPT ); Mon, 5 Aug 2019 08:44:26 -0400 Received: from mx1.redhat.com ([209.132.183.28]:63333 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728803AbfHEMnQ (ORCPT ); Mon, 5 Aug 2019 08:43:16 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id E3E2B6B; Mon, 5 Aug 2019 12:43:15 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-116-81.ams2.redhat.com [10.36.116.81]) by smtp.corp.redhat.com (Postfix) with ESMTP id 1C8B55DA8C; Mon, 5 Aug 2019 12:43:11 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 259A517472; Mon, 5 Aug 2019 14:43:11 +0200 (CEST) From: Gerd Hoffmann To: dri-devel@lists.freedesktop.org Cc: intel-gfx@lists.freedesktop.org, thomas@shipmail.org, tzimmermann@suse.de, ckoenig.leichtzumerken@gmail.com, bskeggs@redhat.com, daniel@ffwll.ch, Gerd Hoffmann , Dave Airlie , David Airlie , Maarten Lankhorst , Maxime Ripard , Sean Paul , Xinliang Liu , Rongrong Zou , Xinwei Kong , Chen Feng , Hans de Goede , linux-kernel@vger.kernel.org (open list) Subject: [PATCH v5 02/18] drm/vram: use embedded gem object Date: Mon, 5 Aug 2019 14:42:54 +0200 Message-Id: <20190805124310.3275-3-kraxel@redhat.com> In-Reply-To: <20190805124310.3275-1-kraxel@redhat.com> References: <20190805124310.3275-1-kraxel@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Mon, 05 Aug 2019 12:43:16 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Drop drm_gem_object from drm_gem_vram_object, use the ttm_buffer_object.base instead. Signed-off-by: Gerd Hoffmann Reviewed-by: Christian König Acked-by: Thomas Zimmermann --- include/drm/drm_gem_vram_helper.h | 3 +-- drivers/gpu/drm/ast/ast_main.c | 2 +- drivers/gpu/drm/drm_gem_vram_helper.c | 18 +++++++++--------- drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c | 2 +- drivers/gpu/drm/vboxvideo/vbox_main.c | 2 +- 5 files changed, 13 insertions(+), 14 deletions(-) diff --git a/include/drm/drm_gem_vram_helper.h b/include/drm/drm_gem_vram_helper.h index b41d932eb53a..ac217d768456 100644 --- a/include/drm/drm_gem_vram_helper.h +++ b/include/drm/drm_gem_vram_helper.h @@ -36,7 +36,6 @@ struct vm_area_struct; * video memory becomes scarce. */ struct drm_gem_vram_object { - struct drm_gem_object gem; struct ttm_buffer_object bo; struct ttm_bo_kmap_obj kmap; @@ -68,7 +67,7 @@ static inline struct drm_gem_vram_object *drm_gem_vram_of_bo( static inline struct drm_gem_vram_object *drm_gem_vram_of_gem( struct drm_gem_object *gem) { - return container_of(gem, struct drm_gem_vram_object, gem); + return container_of(gem, struct drm_gem_vram_object, bo.base); } struct drm_gem_vram_object *drm_gem_vram_create(struct drm_device *dev, diff --git a/drivers/gpu/drm/ast/ast_main.c b/drivers/gpu/drm/ast/ast_main.c index 0a1bb9c05195..dab77b2bc8ac 100644 --- a/drivers/gpu/drm/ast/ast_main.c +++ b/drivers/gpu/drm/ast/ast_main.c @@ -554,6 +554,6 @@ int ast_gem_create(struct drm_device *dev, DRM_ERROR("failed to allocate GEM object\n"); return ret; } - *obj = &gbo->gem; + *obj = &gbo->bo.base; return 0; } diff --git a/drivers/gpu/drm/drm_gem_vram_helper.c b/drivers/gpu/drm/drm_gem_vram_helper.c index e0fbfb6570cf..fc13920b3cb4 100644 --- a/drivers/gpu/drm/drm_gem_vram_helper.c +++ b/drivers/gpu/drm/drm_gem_vram_helper.c @@ -26,7 +26,7 @@ static void drm_gem_vram_cleanup(struct drm_gem_vram_object *gbo) * TTM buffer object in 'bo' has already been cleaned * up; only release the GEM object. */ - drm_gem_object_release(&gbo->gem); + drm_gem_object_release(&gbo->bo.base); } static void drm_gem_vram_destroy(struct drm_gem_vram_object *gbo) @@ -82,10 +82,10 @@ static int drm_gem_vram_init(struct drm_device *dev, int ret; size_t acc_size; - if (!gbo->gem.funcs) - gbo->gem.funcs = &drm_gem_vram_object_funcs; + if (!gbo->bo.base.funcs) + gbo->bo.base.funcs = &drm_gem_vram_object_funcs; - ret = drm_gem_object_init(dev, &gbo->gem, size); + ret = drm_gem_object_init(dev, &gbo->bo.base, size); if (ret) return ret; @@ -103,7 +103,7 @@ static int drm_gem_vram_init(struct drm_device *dev, return 0; err_drm_gem_object_release: - drm_gem_object_release(&gbo->gem); + drm_gem_object_release(&gbo->bo.base); return ret; } @@ -383,11 +383,11 @@ int drm_gem_vram_fill_create_dumb(struct drm_file *file, if (IS_ERR(gbo)) return PTR_ERR(gbo); - ret = drm_gem_handle_create(file, &gbo->gem, &handle); + ret = drm_gem_handle_create(file, &gbo->bo.base, &handle); if (ret) goto err_drm_gem_object_put_unlocked; - drm_gem_object_put_unlocked(&gbo->gem); + drm_gem_object_put_unlocked(&gbo->bo.base); args->pitch = pitch; args->size = size; @@ -396,7 +396,7 @@ int drm_gem_vram_fill_create_dumb(struct drm_file *file, return 0; err_drm_gem_object_put_unlocked: - drm_gem_object_put_unlocked(&gbo->gem); + drm_gem_object_put_unlocked(&gbo->bo.base); return ret; } EXPORT_SYMBOL(drm_gem_vram_fill_create_dumb); @@ -446,7 +446,7 @@ int drm_gem_vram_bo_driver_verify_access(struct ttm_buffer_object *bo, { struct drm_gem_vram_object *gbo = drm_gem_vram_of_bo(bo); - return drm_vma_node_verify_access(&gbo->gem.vma_node, + return drm_vma_node_verify_access(&gbo->bo.base.vma_node, filp->private_data); } EXPORT_SYMBOL(drm_gem_vram_bo_driver_verify_access); diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c index cfc2faabda14..9f6e473e6295 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c @@ -66,7 +66,7 @@ int hibmc_gem_create(struct drm_device *dev, u32 size, bool iskernel, DRM_ERROR("failed to allocate GEM object: %d\n", ret); return ret; } - *obj = &gbo->gem; + *obj = &gbo->bo.base; return 0; } diff --git a/drivers/gpu/drm/vboxvideo/vbox_main.c b/drivers/gpu/drm/vboxvideo/vbox_main.c index 18693e2bf72a..02fa8277ff1e 100644 --- a/drivers/gpu/drm/vboxvideo/vbox_main.c +++ b/drivers/gpu/drm/vboxvideo/vbox_main.c @@ -292,7 +292,7 @@ int vbox_gem_create(struct vbox_private *vbox, return ret; } - *obj = &gbo->gem; + *obj = &gbo->bo.base; return 0; } -- 2.18.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gerd Hoffmann Subject: [PATCH v5 02/18] drm/vram: use embedded gem object Date: Mon, 5 Aug 2019 14:42:54 +0200 Message-ID: <20190805124310.3275-3-kraxel@redhat.com> References: <20190805124310.3275-1-kraxel@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190805124310.3275-1-kraxel@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: thomas@shipmail.org, tzimmermann@suse.de, Hans de Goede , David Airlie , ckoenig.leichtzumerken@gmail.com, intel-gfx@lists.freedesktop.org, open list , Xinliang Liu , Maxime Ripard , Xinwei Kong , bskeggs@redhat.com, Chen Feng , Rongrong Zou , Dave Airlie , Sean Paul , Gerd Hoffmann List-Id: dri-devel@lists.freedesktop.org RHJvcCBkcm1fZ2VtX29iamVjdCBmcm9tIGRybV9nZW1fdnJhbV9vYmplY3QsIHVzZSB0aGUKdHRt X2J1ZmZlcl9vYmplY3QuYmFzZSBpbnN0ZWFkLgoKU2lnbmVkLW9mZi1ieTogR2VyZCBIb2ZmbWFu biA8a3JheGVsQHJlZGhhdC5jb20+ClJldmlld2VkLWJ5OiBDaHJpc3RpYW4gS8O2bmlnIDxjaHJp c3RpYW4ua29lbmlnQGFtZC5jb20+CkFja2VkLWJ5OiBUaG9tYXMgWmltbWVybWFubiA8dHppbW1l cm1hbm5Ac3VzZS5kZT4KLS0tCiBpbmNsdWRlL2RybS9kcm1fZ2VtX3ZyYW1faGVscGVyLmggICAg ICAgICAgIHwgIDMgKy0tCiBkcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9tYWluLmMgICAgICAgICAg ICAgIHwgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3ZyYW1faGVscGVyLmMgICAgICAg fCAxOCArKysrKysrKystLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9oaXNpbGljb24vaGlibWMv aGlibWNfdHRtLmMgfCAgMiArLQogZHJpdmVycy9ncHUvZHJtL3Zib3h2aWRlby92Ym94X21haW4u YyAgICAgICB8ICAyICstCiA1IGZpbGVzIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDE0IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9nZW1fdnJhbV9oZWxwZXIu aCBiL2luY2x1ZGUvZHJtL2RybV9nZW1fdnJhbV9oZWxwZXIuaAppbmRleCBiNDFkOTMyZWI1M2Eu LmFjMjE3ZDc2ODQ1NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2dlbV92cmFtX2hlbHBl ci5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9nZW1fdnJhbV9oZWxwZXIuaApAQCAtMzYsNyArMzYs NiBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7CiAgKiB2aWRlbyBtZW1vcnkgYmVjb21lcyBzY2Fy Y2UuCiAgKi8KIHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0IHsKLQlzdHJ1Y3QgZHJtX2dlbV9v YmplY3QgZ2VtOwogCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCBibzsKIAlzdHJ1Y3QgdHRtX2Jv X2ttYXBfb2JqIGttYXA7CiAKQEAgLTY4LDcgKzY3LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qg ZHJtX2dlbV92cmFtX29iamVjdCAqZHJtX2dlbV92cmFtX29mX2JvKAogc3RhdGljIGlubGluZSBz dHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZHJtX2dlbV92cmFtX29mX2dlbSgKIAlzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKmdlbSkKIHsKLQlyZXR1cm4gY29udGFpbmVyX29mKGdlbSwgc3RydWN0 IGRybV9nZW1fdnJhbV9vYmplY3QsIGdlbSk7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihnZW0sIHN0 cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0LCBiby5iYXNlKTsKIH0KIAogc3RydWN0IGRybV9nZW1f dnJhbV9vYmplY3QgKmRybV9nZW1fdnJhbV9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hc3QvYXN0X21haW4uYyBiL2RyaXZlcnMvZ3B1 L2RybS9hc3QvYXN0X21haW4uYwppbmRleCAwYTFiYjljMDUxOTUuLmRhYjc3YjJiYzhhYyAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfbWFpbi5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9hc3QvYXN0X21haW4uYwpAQCAtNTU0LDYgKzU1NCw2IEBAIGludCBhc3RfZ2VtX2NyZWF0 ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gYWxsb2Nh dGUgR0VNIG9iamVjdFxuIik7CiAJCXJldHVybiByZXQ7CiAJfQotCSpvYmogPSAmZ2JvLT5nZW07 CisJKm9iaiA9ICZnYm8tPmJvLmJhc2U7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vZHJtX2dlbV92cmFtX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9n ZW1fdnJhbV9oZWxwZXIuYwppbmRleCBlMGZiZmI2NTcwY2YuLmZjMTM5MjBiM2NiNCAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fdnJhbV9oZWxwZXIuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vZHJtX2dlbV92cmFtX2hlbHBlci5jCkBAIC0yNiw3ICsyNiw3IEBAIHN0YXRpYyB2 b2lkIGRybV9nZW1fdnJhbV9jbGVhbnVwKHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8p CiAJICogVFRNIGJ1ZmZlciBvYmplY3QgaW4gJ2JvJyBoYXMgYWxyZWFkeSBiZWVuIGNsZWFuZWQK IAkgKiB1cDsgb25seSByZWxlYXNlIHRoZSBHRU0gb2JqZWN0LgogCSAqLwotCWRybV9nZW1fb2Jq ZWN0X3JlbGVhc2UoJmdiby0+Z2VtKTsKKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKCZnYm8tPmJv LmJhc2UpOwogfQogCiBzdGF0aWMgdm9pZCBkcm1fZ2VtX3ZyYW1fZGVzdHJveShzdHJ1Y3QgZHJt X2dlbV92cmFtX29iamVjdCAqZ2JvKQpAQCAtODIsMTAgKzgyLDEwIEBAIHN0YXRpYyBpbnQgZHJt X2dlbV92cmFtX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAlpbnQgcmV0OwogCXNpemVf dCBhY2Nfc2l6ZTsKIAotCWlmICghZ2JvLT5nZW0uZnVuY3MpCi0JCWdiby0+Z2VtLmZ1bmNzID0g JmRybV9nZW1fdnJhbV9vYmplY3RfZnVuY3M7CisJaWYgKCFnYm8tPmJvLmJhc2UuZnVuY3MpCisJ CWdiby0+Ym8uYmFzZS5mdW5jcyA9ICZkcm1fZ2VtX3ZyYW1fb2JqZWN0X2Z1bmNzOwogCi0JcmV0 ID0gZHJtX2dlbV9vYmplY3RfaW5pdChkZXYsICZnYm8tPmdlbSwgc2l6ZSk7CisJcmV0ID0gZHJt X2dlbV9vYmplY3RfaW5pdChkZXYsICZnYm8tPmJvLmJhc2UsIHNpemUpOwogCWlmIChyZXQpCiAJ CXJldHVybiByZXQ7CiAKQEAgLTEwMyw3ICsxMDMsNyBAQCBzdGF0aWMgaW50IGRybV9nZW1fdnJh bV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJcmV0dXJuIDA7CiAKIGVycl9kcm1fZ2Vt X29iamVjdF9yZWxlYXNlOgotCWRybV9nZW1fb2JqZWN0X3JlbGVhc2UoJmdiby0+Z2VtKTsKKwlk cm1fZ2VtX29iamVjdF9yZWxlYXNlKCZnYm8tPmJvLmJhc2UpOwogCXJldHVybiByZXQ7CiB9CiAK QEAgLTM4MywxMSArMzgzLDExIEBAIGludCBkcm1fZ2VtX3ZyYW1fZmlsbF9jcmVhdGVfZHVtYihz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsCiAJaWYgKElTX0VSUihnYm8pKQogCQlyZXR1cm4gUFRSX0VS UihnYm8pOwogCi0JcmV0ID0gZHJtX2dlbV9oYW5kbGVfY3JlYXRlKGZpbGUsICZnYm8tPmdlbSwg JmhhbmRsZSk7CisJcmV0ID0gZHJtX2dlbV9oYW5kbGVfY3JlYXRlKGZpbGUsICZnYm8tPmJvLmJh c2UsICZoYW5kbGUpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2RybV9nZW1fb2JqZWN0X3B1dF91 bmxvY2tlZDsKIAotCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZCgmZ2JvLT5nZW0pOworCWRy bV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZCgmZ2JvLT5iby5iYXNlKTsKIAogCWFyZ3MtPnBpdGNo ID0gcGl0Y2g7CiAJYXJncy0+c2l6ZSA9IHNpemU7CkBAIC0zOTYsNyArMzk2LDcgQEAgaW50IGRy bV9nZW1fdnJhbV9maWxsX2NyZWF0ZV9kdW1iKHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKIAlyZXR1 cm4gMDsKIAogZXJyX2RybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZDoKLQlkcm1fZ2VtX29iamVj dF9wdXRfdW5sb2NrZWQoJmdiby0+Z2VtKTsKKwlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQo Jmdiby0+Ym8uYmFzZSk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2dlbV92 cmFtX2ZpbGxfY3JlYXRlX2R1bWIpOwpAQCAtNDQ2LDcgKzQ0Niw3IEBAIGludCBkcm1fZ2VtX3Zy YW1fYm9fZHJpdmVyX3ZlcmlmeV9hY2Nlc3Moc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywK IHsKIAlzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvID0gZHJtX2dlbV92cmFtX29mX2Jv KGJvKTsKIAotCXJldHVybiBkcm1fdm1hX25vZGVfdmVyaWZ5X2FjY2VzcygmZ2JvLT5nZW0udm1h X25vZGUsCisJcmV0dXJuIGRybV92bWFfbm9kZV92ZXJpZnlfYWNjZXNzKCZnYm8tPmJvLmJhc2Uu dm1hX25vZGUsCiAJCQkJCSAgZmlscC0+cHJpdmF0ZV9kYXRhKTsKIH0KIEVYUE9SVF9TWU1CT0wo ZHJtX2dlbV92cmFtX2JvX2RyaXZlcl92ZXJpZnlfYWNjZXNzKTsKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9oaXNpbGljb24vaGlibWMvaGlibWNfdHRtLmMgYi9kcml2ZXJzL2dwdS9kcm0v aGlzaWxpY29uL2hpYm1jL2hpYm1jX3R0bS5jCmluZGV4IGNmYzJmYWFiZGExNC4uOWY2ZTQ3M2U2 Mjk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaGlzaWxpY29uL2hpYm1jL2hpYm1jX3R0 bS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9oaXNpbGljb24vaGlibWMvaGlibWNfdHRtLmMKQEAg LTY2LDcgKzY2LDcgQEAgaW50IGhpYm1jX2dlbV9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgdTMyIHNpemUsIGJvb2wgaXNrZXJuZWwsCiAJCQlEUk1fRVJST1IoImZhaWxlZCB0byBhbGxv Y2F0ZSBHRU0gb2JqZWN0OiAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9Ci0JKm9iaiA9 ICZnYm8tPmdlbTsKKwkqb2JqID0gJmdiby0+Ym8uYmFzZTsKIAlyZXR1cm4gMDsKIH0KIApkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Zib3h2aWRlby92Ym94X21haW4uYyBiL2RyaXZlcnMv Z3B1L2RybS92Ym94dmlkZW8vdmJveF9tYWluLmMKaW5kZXggMTg2OTNlMmJmNzJhLi4wMmZhODI3 N2ZmMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92Ym94dmlkZW8vdmJveF9tYWluLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL3Zib3h2aWRlby92Ym94X21haW4uYwpAQCAtMjkyLDcgKzI5 Miw3IEBAIGludCB2Ym94X2dlbV9jcmVhdGUoc3RydWN0IHZib3hfcHJpdmF0ZSAqdmJveCwKIAkJ cmV0dXJuIHJldDsKIAl9CiAKLQkqb2JqID0gJmdiby0+Z2VtOworCSpvYmogPSAmZ2JvLT5iby5i YXNlOwogCiAJcmV0dXJuIDA7CiB9Ci0tIAoyLjE4LjEKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVs QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==