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_PASS 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 E5DC9ECDE43 for ; Fri, 19 Oct 2018 06:19:04 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id B5C5121477 for ; Fri, 19 Oct 2018 06:19:04 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B5C5121477 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727111AbeJSOX3 (ORCPT ); Fri, 19 Oct 2018 10:23:29 -0400 Received: from mx1.redhat.com ([209.132.183.28]:57554 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726542AbeJSOX1 (ORCPT ); Fri, 19 Oct 2018 10:23:27 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 4D370308404C; Fri, 19 Oct 2018 06:18:50 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-116-238.ams2.redhat.com [10.36.116.238]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9903E5C6C2; Fri, 19 Oct 2018 06:18:49 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 4BCBAB3D48; Fri, 19 Oct 2018 08:18:48 +0200 (CEST) From: Gerd Hoffmann To: dri-devel@lists.freedesktop.org Cc: Gerd Hoffmann , David Airlie , virtualization@lists.linux-foundation.org (open list:VIRTIO GPU DRIVER), linux-kernel@vger.kernel.org (open list) Subject: [PATCH v2 6/6] drm/virtio: fix resource id handling Date: Fri, 19 Oct 2018 08:18:47 +0200 Message-Id: <20181019061847.18958-7-kraxel@redhat.com> In-Reply-To: <20181019061847.18958-1-kraxel@redhat.com> References: <20181019061847.18958-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.40]); Fri, 19 Oct 2018 06:18:50 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Move virtio_gpu_resource_id_{get,put} to virtgpu_object.c and make them static. Allocate and free the id on creation and destroy, drop all other calls. That way objects have a valid handle for the whole lifetime of the object. Also fixes ids leaking. Worst offender are dumb buffers, and I think some error paths too. Signed-off-by: Gerd Hoffmann --- drivers/gpu/drm/virtio/virtgpu_drv.h | 3 --- drivers/gpu/drm/virtio/virtgpu_fb.c | 1 - drivers/gpu/drm/virtio/virtgpu_gem.c | 1 - drivers/gpu/drm/virtio/virtgpu_ioctl.c | 1 - drivers/gpu/drm/virtio/virtgpu_object.c | 23 +++++++++++++++++++++++ drivers/gpu/drm/virtio/virtgpu_vq.c | 20 -------------------- 6 files changed, 23 insertions(+), 26 deletions(-) diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h index c6b0a938ba..78ad8f58ed 100644 --- a/drivers/gpu/drm/virtio/virtgpu_drv.h +++ b/drivers/gpu/drm/virtio/virtgpu_drv.h @@ -260,9 +260,6 @@ int virtio_gpu_surface_dirty(struct virtio_gpu_framebuffer *qfb, /* virtio vg */ int virtio_gpu_alloc_vbufs(struct virtio_gpu_device *vgdev); void virtio_gpu_free_vbufs(struct virtio_gpu_device *vgdev); -void virtio_gpu_resource_id_get(struct virtio_gpu_device *vgdev, - uint32_t *resid); -void virtio_gpu_resource_id_put(struct virtio_gpu_device *vgdev, uint32_t id); void virtio_gpu_cmd_create_resource(struct virtio_gpu_device *vgdev, struct virtio_gpu_object *bo, uint32_t format, diff --git a/drivers/gpu/drm/virtio/virtgpu_fb.c b/drivers/gpu/drm/virtio/virtgpu_fb.c index c22a8246b6..fb1cc8b2f1 100644 --- a/drivers/gpu/drm/virtio/virtgpu_fb.c +++ b/drivers/gpu/drm/virtio/virtgpu_fb.c @@ -231,7 +231,6 @@ static int virtio_gpufb_create(struct drm_fb_helper *helper, if (IS_ERR(obj)) return PTR_ERR(obj); - virtio_gpu_resource_id_get(vgdev, &obj->hw_res_handle); virtio_gpu_cmd_create_resource(vgdev, obj, format, mode_cmd.width, mode_cmd.height); diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c b/drivers/gpu/drm/virtio/virtgpu_gem.c index 665d18a49d..f065863939 100644 --- a/drivers/gpu/drm/virtio/virtgpu_gem.c +++ b/drivers/gpu/drm/virtio/virtgpu_gem.c @@ -103,7 +103,6 @@ int virtio_gpu_mode_dumb_create(struct drm_file *file_priv, format = virtio_gpu_translate_format(DRM_FORMAT_HOST_XRGB8888); obj = gem_to_virtio_gpu_obj(gobj); - virtio_gpu_resource_id_get(vgdev, &obj->hw_res_handle); virtio_gpu_cmd_create_resource(vgdev, obj, format, args->width, args->height); diff --git a/drivers/gpu/drm/virtio/virtgpu_ioctl.c b/drivers/gpu/drm/virtio/virtgpu_ioctl.c index 6179d93167..bc5afa4f90 100644 --- a/drivers/gpu/drm/virtio/virtgpu_ioctl.c +++ b/drivers/gpu/drm/virtio/virtgpu_ioctl.c @@ -253,7 +253,6 @@ static int virtio_gpu_resource_create_ioctl(struct drm_device *dev, void *data, if (IS_ERR(qobj)) return PTR_ERR(qobj); obj = &qobj->gem_base; - virtio_gpu_resource_id_get(vgdev, &qobj->hw_res_handle); if (!vgdev->has_virgl_3d) { virtio_gpu_cmd_create_resource(vgdev, qobj, rc->format, diff --git a/drivers/gpu/drm/virtio/virtgpu_object.c b/drivers/gpu/drm/virtio/virtgpu_object.c index 6611c487d7..8bd1ebe13b 100644 --- a/drivers/gpu/drm/virtio/virtgpu_object.c +++ b/drivers/gpu/drm/virtio/virtgpu_object.c @@ -25,6 +25,26 @@ #include "virtgpu_drv.h" +static void virtio_gpu_resource_id_get(struct virtio_gpu_device *vgdev, + uint32_t *resid) +{ + int handle; + + idr_preload(GFP_KERNEL); + spin_lock(&vgdev->resource_idr_lock); + handle = idr_alloc(&vgdev->resource_idr, NULL, 1, 0, GFP_NOWAIT); + spin_unlock(&vgdev->resource_idr_lock); + idr_preload_end(); + *resid = handle; +} + +static void virtio_gpu_resource_id_put(struct virtio_gpu_device *vgdev, uint32_t id) +{ + spin_lock(&vgdev->resource_idr_lock); + idr_remove(&vgdev->resource_idr, id); + spin_unlock(&vgdev->resource_idr_lock); +} + static void virtio_gpu_ttm_bo_destroy(struct ttm_buffer_object *tbo) { struct virtio_gpu_object *bo; @@ -40,6 +60,7 @@ static void virtio_gpu_ttm_bo_destroy(struct ttm_buffer_object *tbo) if (bo->vmap) virtio_gpu_object_kunmap(bo); drm_gem_object_release(&bo->gem_base); + virtio_gpu_resource_id_put(vgdev, bo->hw_res_handle); kfree(bo); } @@ -81,9 +102,11 @@ int virtio_gpu_object_create(struct virtio_gpu_device *vgdev, bo = kzalloc(sizeof(struct virtio_gpu_object), GFP_KERNEL); if (bo == NULL) return -ENOMEM; + virtio_gpu_resource_id_get(vgdev, &bo->hw_res_handle); size = roundup(size, PAGE_SIZE); ret = drm_gem_object_init(vgdev->ddev, &bo->gem_base, size); if (ret != 0) { + virtio_gpu_resource_id_put(vgdev, bo->hw_res_handle); kfree(bo); return ret; } diff --git a/drivers/gpu/drm/virtio/virtgpu_vq.c b/drivers/gpu/drm/virtio/virtgpu_vq.c index ea3d13793d..d2861da2bb 100644 --- a/drivers/gpu/drm/virtio/virtgpu_vq.c +++ b/drivers/gpu/drm/virtio/virtgpu_vq.c @@ -38,26 +38,6 @@ + MAX_INLINE_CMD_SIZE \ + MAX_INLINE_RESP_SIZE) -void virtio_gpu_resource_id_get(struct virtio_gpu_device *vgdev, - uint32_t *resid) -{ - int handle; - - idr_preload(GFP_KERNEL); - spin_lock(&vgdev->resource_idr_lock); - handle = idr_alloc(&vgdev->resource_idr, NULL, 1, 0, GFP_NOWAIT); - spin_unlock(&vgdev->resource_idr_lock); - idr_preload_end(); - *resid = handle; -} - -void virtio_gpu_resource_id_put(struct virtio_gpu_device *vgdev, uint32_t id) -{ - spin_lock(&vgdev->resource_idr_lock); - idr_remove(&vgdev->resource_idr, id); - spin_unlock(&vgdev->resource_idr_lock); -} - void virtio_gpu_ctrl_ack(struct virtqueue *vq) { struct drm_device *dev = vq->vdev->priv; -- 2.9.3 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gerd Hoffmann Subject: [PATCH v2 6/6] drm/virtio: fix resource id handling Date: Fri, 19 Oct 2018 08:18:47 +0200 Message-ID: <20181019061847.18958-7-kraxel@redhat.com> References: <20181019061847.18958-1-kraxel@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by gabe.freedesktop.org (Postfix) with ESMTPS id AAF7F6E1B3 for ; Fri, 19 Oct 2018 06:18:50 +0000 (UTC) In-Reply-To: <20181019061847.18958-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: David Airlie , open list , Gerd Hoffmann , "open list:VIRTIO GPU DRIVER" List-Id: dri-devel@lists.freedesktop.org TW92ZSB2aXJ0aW9fZ3B1X3Jlc291cmNlX2lkX3tnZXQscHV0fSB0byB2aXJ0Z3B1X29iamVjdC5j IGFuZCBtYWtlIHRoZW0Kc3RhdGljLiAgQWxsb2NhdGUgYW5kIGZyZWUgdGhlIGlkIG9uIGNyZWF0 aW9uIGFuZCBkZXN0cm95LCBkcm9wIGFsbApvdGhlciBjYWxscy4gIFRoYXQgd2F5IG9iamVjdHMg aGF2ZSBhIHZhbGlkIGhhbmRsZSBmb3IgdGhlIHdob2xlCmxpZmV0aW1lIG9mIHRoZSBvYmplY3Qu CgpBbHNvIGZpeGVzIGlkcyBsZWFraW5nLiAgV29yc3Qgb2ZmZW5kZXIgYXJlIGR1bWIgYnVmZmVy cywgYW5kIEkgdGhpbmsKc29tZSBlcnJvciBwYXRocyB0b28uCgpTaWduZWQtb2ZmLWJ5OiBHZXJk IEhvZmZtYW5uIDxrcmF4ZWxAcmVkaGF0LmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vdmlydGlv L3ZpcnRncHVfZHJ2LmggICAgfCAgMyAtLS0KIGRyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdw dV9mYi5jICAgICB8ICAxIC0KIGRyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9nZW0uYyAg ICB8ICAxIC0KIGRyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9pb2N0bC5jICB8ICAxIC0K IGRyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9vYmplY3QuYyB8IDIzICsrKysrKysrKysr KysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfdnEuYyAgICAgfCAy MCAtLS0tLS0tLS0tLS0tLS0tLS0tLQogNiBmaWxlcyBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCsp LCAyNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3Zp cnRncHVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfZHJ2LmgKaW5kZXgg YzZiMGE5MzhiYS4uNzhhZDhmNThlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZpcnRp by92aXJ0Z3B1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9kcnYu aApAQCAtMjYwLDkgKzI2MCw2IEBAIGludCB2aXJ0aW9fZ3B1X3N1cmZhY2VfZGlydHkoc3RydWN0 IHZpcnRpb19ncHVfZnJhbWVidWZmZXIgKnFmYiwKIC8qIHZpcnRpbyB2ZyAqLwogaW50IHZpcnRp b19ncHVfYWxsb2NfdmJ1ZnMoc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2Rldik7CiB2b2lk IHZpcnRpb19ncHVfZnJlZV92YnVmcyhzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2KTsK LXZvaWQgdmlydGlvX2dwdV9yZXNvdXJjZV9pZF9nZXQoc3RydWN0IHZpcnRpb19ncHVfZGV2aWNl ICp2Z2RldiwKLQkJCSAgICAgICB1aW50MzJfdCAqcmVzaWQpOwotdm9pZCB2aXJ0aW9fZ3B1X3Jl c291cmNlX2lkX3B1dChzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2LCB1aW50MzJfdCBp ZCk7CiB2b2lkIHZpcnRpb19ncHVfY21kX2NyZWF0ZV9yZXNvdXJjZShzdHJ1Y3QgdmlydGlvX2dw dV9kZXZpY2UgKnZnZGV2LAogCQkJCSAgICBzdHJ1Y3QgdmlydGlvX2dwdV9vYmplY3QgKmJvLAog CQkJCSAgICB1aW50MzJfdCBmb3JtYXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmly dGlvL3ZpcnRncHVfZmIuYyBiL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9mYi5jCmlu ZGV4IGMyMmE4MjQ2YjYuLmZiMWNjOGIyZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92 aXJ0aW8vdmlydGdwdV9mYi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9m Yi5jCkBAIC0yMzEsNyArMjMxLDYgQEAgc3RhdGljIGludCB2aXJ0aW9fZ3B1ZmJfY3JlYXRlKHN0 cnVjdCBkcm1fZmJfaGVscGVyICpoZWxwZXIsCiAJaWYgKElTX0VSUihvYmopKQogCQlyZXR1cm4g UFRSX0VSUihvYmopOwogCi0JdmlydGlvX2dwdV9yZXNvdXJjZV9pZF9nZXQodmdkZXYsICZvYmot Pmh3X3Jlc19oYW5kbGUpOwogCXZpcnRpb19ncHVfY21kX2NyZWF0ZV9yZXNvdXJjZSh2Z2Rldiwg b2JqLCBmb3JtYXQsCiAJCQkJICAgICAgIG1vZGVfY21kLndpZHRoLCBtb2RlX2NtZC5oZWlnaHQp OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfZ2VtLmMgYi9k cml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfZ2VtLmMKaW5kZXggNjY1ZDE4YTQ5ZC4uZjA2 NTg2MzkzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2dlbS5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9nZW0uYwpAQCAtMTAzLDcgKzEw Myw2IEBAIGludCB2aXJ0aW9fZ3B1X21vZGVfZHVtYl9jcmVhdGUoc3RydWN0IGRybV9maWxlICpm aWxlX3ByaXYsCiAKIAlmb3JtYXQgPSB2aXJ0aW9fZ3B1X3RyYW5zbGF0ZV9mb3JtYXQoRFJNX0ZP Uk1BVF9IT1NUX1hSR0I4ODg4KTsKIAlvYmogPSBnZW1fdG9fdmlydGlvX2dwdV9vYmooZ29iaik7 Ci0JdmlydGlvX2dwdV9yZXNvdXJjZV9pZF9nZXQodmdkZXYsICZvYmotPmh3X3Jlc19oYW5kbGUp OwogCXZpcnRpb19ncHVfY21kX2NyZWF0ZV9yZXNvdXJjZSh2Z2Rldiwgb2JqLCBmb3JtYXQsCiAJ CQkJICAgICAgIGFyZ3MtPndpZHRoLCBhcmdzLT5oZWlnaHQpOwogCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfaW9jdGwuYyBiL2RyaXZlcnMvZ3B1L2RybS92aXJ0 aW8vdmlydGdwdV9pb2N0bC5jCmluZGV4IDYxNzlkOTMxNjcuLmJjNWFmYTRmOTAgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9pb2N0bC5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS92aXJ0aW8vdmlydGdwdV9pb2N0bC5jCkBAIC0yNTMsNyArMjUzLDYgQEAgc3RhdGlj IGludCB2aXJ0aW9fZ3B1X3Jlc291cmNlX2NyZWF0ZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCB2b2lkICpkYXRhLAogCWlmIChJU19FUlIocW9iaikpCiAJCXJldHVybiBQVFJfRVJSKHFv YmopOwogCW9iaiA9ICZxb2JqLT5nZW1fYmFzZTsKLQl2aXJ0aW9fZ3B1X3Jlc291cmNlX2lkX2dl dCh2Z2RldiwgJnFvYmotPmh3X3Jlc19oYW5kbGUpOwogCiAJaWYgKCF2Z2Rldi0+aGFzX3Zpcmds XzNkKSB7CiAJCXZpcnRpb19ncHVfY21kX2NyZWF0ZV9yZXNvdXJjZSh2Z2RldiwgcW9iaiwgcmMt PmZvcm1hdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9vYmpl Y3QuYyBiL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9vYmplY3QuYwppbmRleCA2NjEx YzQ4N2Q3Li44YmQxZWJlMTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3Zp cnRncHVfb2JqZWN0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X29iamVj dC5jCkBAIC0yNSw2ICsyNSwyNiBAQAogCiAjaW5jbHVkZSAidmlydGdwdV9kcnYuaCIKIAorc3Rh dGljIHZvaWQgdmlydGlvX2dwdV9yZXNvdXJjZV9pZF9nZXQoc3RydWN0IHZpcnRpb19ncHVfZGV2 aWNlICp2Z2RldiwKKwkJCQkgICAgICAgdWludDMyX3QgKnJlc2lkKQoreworCWludCBoYW5kbGU7 CisKKwlpZHJfcHJlbG9hZChHRlBfS0VSTkVMKTsKKwlzcGluX2xvY2soJnZnZGV2LT5yZXNvdXJj ZV9pZHJfbG9jayk7CisJaGFuZGxlID0gaWRyX2FsbG9jKCZ2Z2Rldi0+cmVzb3VyY2VfaWRyLCBO VUxMLCAxLCAwLCBHRlBfTk9XQUlUKTsKKwlzcGluX3VubG9jaygmdmdkZXYtPnJlc291cmNlX2lk cl9sb2NrKTsKKwlpZHJfcHJlbG9hZF9lbmQoKTsKKwkqcmVzaWQgPSBoYW5kbGU7Cit9CisKK3N0 YXRpYyB2b2lkIHZpcnRpb19ncHVfcmVzb3VyY2VfaWRfcHV0KHN0cnVjdCB2aXJ0aW9fZ3B1X2Rl dmljZSAqdmdkZXYsIHVpbnQzMl90IGlkKQoreworCXNwaW5fbG9jaygmdmdkZXYtPnJlc291cmNl X2lkcl9sb2NrKTsKKwlpZHJfcmVtb3ZlKCZ2Z2Rldi0+cmVzb3VyY2VfaWRyLCBpZCk7CisJc3Bp bl91bmxvY2soJnZnZGV2LT5yZXNvdXJjZV9pZHJfbG9jayk7Cit9CisKIHN0YXRpYyB2b2lkIHZp cnRpb19ncHVfdHRtX2JvX2Rlc3Ryb3koc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICp0Ym8pCiB7 CiAJc3RydWN0IHZpcnRpb19ncHVfb2JqZWN0ICpibzsKQEAgLTQwLDYgKzYwLDcgQEAgc3RhdGlj IHZvaWQgdmlydGlvX2dwdV90dG1fYm9fZGVzdHJveShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3Qg KnRibykKIAlpZiAoYm8tPnZtYXApCiAJCXZpcnRpb19ncHVfb2JqZWN0X2t1bm1hcChibyk7CiAJ ZHJtX2dlbV9vYmplY3RfcmVsZWFzZSgmYm8tPmdlbV9iYXNlKTsKKwl2aXJ0aW9fZ3B1X3Jlc291 cmNlX2lkX3B1dCh2Z2RldiwgYm8tPmh3X3Jlc19oYW5kbGUpOwogCWtmcmVlKGJvKTsKIH0KIApA QCAtODEsOSArMTAyLDExIEBAIGludCB2aXJ0aW9fZ3B1X29iamVjdF9jcmVhdGUoc3RydWN0IHZp cnRpb19ncHVfZGV2aWNlICp2Z2RldiwKIAlibyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2aXJ0 aW9fZ3B1X29iamVjdCksIEdGUF9LRVJORUwpOwogCWlmIChibyA9PSBOVUxMKQogCQlyZXR1cm4g LUVOT01FTTsKKwl2aXJ0aW9fZ3B1X3Jlc291cmNlX2lkX2dldCh2Z2RldiwgJmJvLT5od19yZXNf aGFuZGxlKTsKIAlzaXplID0gcm91bmR1cChzaXplLCBQQUdFX1NJWkUpOwogCXJldCA9IGRybV9n ZW1fb2JqZWN0X2luaXQodmdkZXYtPmRkZXYsICZiby0+Z2VtX2Jhc2UsIHNpemUpOwogCWlmIChy ZXQgIT0gMCkgeworCQl2aXJ0aW9fZ3B1X3Jlc291cmNlX2lkX3B1dCh2Z2RldiwgYm8tPmh3X3Jl c19oYW5kbGUpOwogCQlrZnJlZShibyk7CiAJCXJldHVybiByZXQ7CiAJfQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X3ZxLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmly dGlvL3ZpcnRncHVfdnEuYwppbmRleCBlYTNkMTM3OTNkLi5kMjg2MWRhMmJiIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfdnEuYworKysgYi9kcml2ZXJzL2dwdS9k cm0vdmlydGlvL3ZpcnRncHVfdnEuYwpAQCAtMzgsMjYgKzM4LDYgQEAKIAkJCSAgICAgICArIE1B WF9JTkxJTkVfQ01EX1NJWkUJCSBcCiAJCQkgICAgICAgKyBNQVhfSU5MSU5FX1JFU1BfU0laRSkK IAotdm9pZCB2aXJ0aW9fZ3B1X3Jlc291cmNlX2lkX2dldChzdHJ1Y3QgdmlydGlvX2dwdV9kZXZp Y2UgKnZnZGV2LAotCQkJCXVpbnQzMl90ICpyZXNpZCkKLXsKLQlpbnQgaGFuZGxlOwotCi0JaWRy X3ByZWxvYWQoR0ZQX0tFUk5FTCk7Ci0Jc3Bpbl9sb2NrKCZ2Z2Rldi0+cmVzb3VyY2VfaWRyX2xv Y2spOwotCWhhbmRsZSA9IGlkcl9hbGxvYygmdmdkZXYtPnJlc291cmNlX2lkciwgTlVMTCwgMSwg MCwgR0ZQX05PV0FJVCk7Ci0Jc3Bpbl91bmxvY2soJnZnZGV2LT5yZXNvdXJjZV9pZHJfbG9jayk7 Ci0JaWRyX3ByZWxvYWRfZW5kKCk7Ci0JKnJlc2lkID0gaGFuZGxlOwotfQotCi12b2lkIHZpcnRp b19ncHVfcmVzb3VyY2VfaWRfcHV0KHN0cnVjdCB2aXJ0aW9fZ3B1X2RldmljZSAqdmdkZXYsIHVp bnQzMl90IGlkKQotewotCXNwaW5fbG9jaygmdmdkZXYtPnJlc291cmNlX2lkcl9sb2NrKTsKLQlp ZHJfcmVtb3ZlKCZ2Z2Rldi0+cmVzb3VyY2VfaWRyLCBpZCk7Ci0Jc3Bpbl91bmxvY2soJnZnZGV2 LT5yZXNvdXJjZV9pZHJfbG9jayk7Ci19Ci0KIHZvaWQgdmlydGlvX2dwdV9jdHJsX2FjayhzdHJ1 Y3QgdmlydHF1ZXVlICp2cSkKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gdnEtPnZkZXYt PnByaXY7Ci0tIAoyLjkuMwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJp LWRldmVsCg==