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=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, 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 9474CC47094 for ; Thu, 10 Jun 2021 09:18: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 65D03613ED for ; Thu, 10 Jun 2021 09:18:23 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 65D03613ED Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.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 BFC7A6EC9A; Thu, 10 Jun 2021 09:18:09 +0000 (UTC) Received: from mail-wm1-x32e.google.com (mail-wm1-x32e.google.com [IPv6:2a00:1450:4864:20::32e]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1A3D26EC93; Thu, 10 Jun 2021 09:18:08 +0000 (UTC) Received: by mail-wm1-x32e.google.com with SMTP id h22-20020a05600c3516b02901a826f84095so5943828wmq.5; Thu, 10 Jun 2021 02:18:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=HYG/Pd3+8jYUJEQI4+1pC4wnbrb3VmqLasRQxc0dxjM=; b=u7AHgaXEabzHVZFPfrVorFnYYGt9ad7x/O43kJdNPHXxsuULs48kQlCatjXOIWHjBS RMKwlmc1W63Jk0X6hGwgkF7/berNj/PHJCgC+KaCSiJ0RntzbvbcjXY+6vvaPDE0yQpl jpLnq2eHalT2R2Ot8htn4s9MKhCkArURCdbrV4qg0WsdBFWSPdEi18GYq2fIsWfeBhYx 8g8ehtAxkY8ogO93UVndDYoj/+Uis2yqYOuE50e1hDG4N/1a6kMSiy8K9OdVBFvmqTmQ Y8g+RUhEMTNtfsqEegaf9QpyefZ3d66a4mWv+Z97HUdX1ciB6bPoB9z0Jof511aD6+Mo pkwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=HYG/Pd3+8jYUJEQI4+1pC4wnbrb3VmqLasRQxc0dxjM=; b=IRh0QdncBZ5+dYzGvzADb6QTBBCCzwbMZItv4onH5g0fVxZ0tdLYlSk0U5zXPKefaV 3djgs0yIMqOfznljvAKGWQXFizuhgMbkyb2VUEmgi/QQC9jX1T1oYx9czCko1E+/4dTF h8rBrXrkZ3+9NjCzECceQiS0eH4QVu8BRczIlYCSxCAt2iboXXSNI4p2njKU4zhPn7Sq lXEBFNzjtnLzmh/3IoxZVDqiTPwJ80Br+kqXCsJGI9n4j59DWOMFjKmoHIzNPBvKA2fD rIvA/9stughfm/FPhiXJdLdQzZdo7e6TyJE+D1ZXgOpsL8CcnzUVnD5FJ21GhBcQaCFC br0g== X-Gm-Message-State: AOAM533lxAD9h1bMpzytOJjE6yQY1cVRz0YrUbk0yiLkk0bnacvWhK5e 9NIeJeNbdURWMv2MC3GWzoY= X-Google-Smtp-Source: ABdhPJzfPKCjaXBXFGNgt55iZuvja5GHEdwfoWbs3TuIv1xnzZw9GKIC0ucL4dkXi381KcwxR9BVwA== X-Received: by 2002:a05:600c:2188:: with SMTP id e8mr14529940wme.129.1623316686726; Thu, 10 Jun 2021 02:18:06 -0700 (PDT) Received: from abel.fritz.box ([2a02:908:1252:fb60:561f:e43a:edf5:8f95]) by smtp.gmail.com with ESMTPSA id v8sm3087445wrc.29.2021.06.10.02.18.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Jun 2021 02:18:06 -0700 (PDT) From: "=?UTF-8?q?Christian=20K=C3=B6nig?=" X-Google-Original-From: =?UTF-8?q?Christian=20K=C3=B6nig?= To: daniel@ffwll.ch, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org Subject: [PATCH 7/7] drm/amdgpu: rework dma_resv handling Date: Thu, 10 Jun 2021 11:18:00 +0200 Message-Id: <20210610091800.1833-8-christian.koenig@amd.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210610091800.1833-1-christian.koenig@amd.com> References: <20210610091800.1833-1-christian.koenig@amd.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: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Drop the workaround and instead implement a better solution. Basically we are now chaining all submissions using a dma_fence_chain container and adding them as exclusive fence to the dma_resv object. This way other drivers can still sync to the single exclusive fence while amdgpu only sync to fences from different processes. Signed-off-by: Christian König --- drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.h | 1 + drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 54 +++++++++++++---- drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c | 65 --------------------- drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 3 +- drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_object.h | 1 - 6 files changed, 47 insertions(+), 79 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.h index a130e766cbdb..c905a4cfc173 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.h @@ -34,6 +34,7 @@ struct amdgpu_fpriv; struct amdgpu_bo_list_entry { struct ttm_validate_buffer tv; struct amdgpu_bo_va *bo_va; + struct dma_fence_chain *chain; uint32_t priority; struct page **user_pages; bool user_invalidated; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c index 325e82621467..f6f3029f958d 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c @@ -587,6 +587,20 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p, goto out; } + amdgpu_bo_list_for_each_entry(e, p->bo_list) { + struct amdgpu_bo *bo = ttm_to_amdgpu_bo(e->tv.bo); + + e->bo_va = amdgpu_vm_bo_find(vm, bo); + + if (bo->tbo.base.dma_buf && !amdgpu_bo_explicit_sync(bo)) { + e->chain = dma_fence_chain_alloc(); + if (!e->chain) { + r = -ENOMEM; + goto error_validate; + } + } + } + amdgpu_cs_get_threshold_for_moves(p->adev, &p->bytes_moved_threshold, &p->bytes_moved_vis_threshold); p->bytes_moved = 0; @@ -614,15 +628,6 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p, gws = p->bo_list->gws_obj; oa = p->bo_list->oa_obj; - amdgpu_bo_list_for_each_entry(e, p->bo_list) { - struct amdgpu_bo *bo = ttm_to_amdgpu_bo(e->tv.bo); - - /* Make sure we use the exclusive slot for shared BOs */ - if (bo->prime_shared_count) - e->tv.num_shared = 0; - e->bo_va = amdgpu_vm_bo_find(vm, bo); - } - if (gds) { p->job->gds_base = amdgpu_bo_gpu_offset(gds) >> PAGE_SHIFT; p->job->gds_size = amdgpu_bo_size(gds) >> PAGE_SHIFT; @@ -644,8 +649,13 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p, } error_validate: - if (r) + if (r) { + amdgpu_bo_list_for_each_entry(e, p->bo_list) { + dma_fence_chain_free(e->chain); + e->chain = NULL; + } ttm_eu_backoff_reservation(&p->ticket, &p->validated); + } out: return r; } @@ -685,9 +695,17 @@ static void amdgpu_cs_parser_fini(struct amdgpu_cs_parser *parser, int error, { unsigned i; - if (error && backoff) + if (error && backoff) { + struct amdgpu_bo_list_entry *e; + + amdgpu_bo_list_for_each_entry(e, parser->bo_list) { + dma_fence_chain_free(e->chain); + e->chain = NULL; + } + ttm_eu_backoff_reservation(&parser->ticket, &parser->validated); + } for (i = 0; i < parser->num_post_deps; i++) { drm_syncobj_put(parser->post_deps[i].syncobj); @@ -1260,6 +1278,20 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p, amdgpu_vm_move_to_lru_tail(p->adev, &fpriv->vm); + amdgpu_bo_list_for_each_entry(e, p->bo_list) { + struct dma_resv *resv = e->tv.bo->base.resv; + struct dma_fence_chain *chain = e->chain; + + if (!chain) + continue; + + dma_fence_chain_init(chain, dma_resv_excl_fence(resv), + dma_fence_get(p->fence), 1); + + rcu_assign_pointer(resv->fence_excl, &chain->base); + e->chain = NULL; + } + ttm_eu_fence_buffer_objects(&p->ticket, &p->validated, p->fence); mutex_unlock(&p->adev->notifier_lock); diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c index c3053b83b80c..23219fc3b28c 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c @@ -42,48 +42,6 @@ #include #include -static int -__dma_resv_make_exclusive(struct dma_resv *obj) -{ - struct dma_fence **fences; - unsigned int count; - int r; - - if (!dma_resv_shared_list(obj)) /* no shared fences to convert */ - return 0; - - r = dma_resv_get_fences(obj, NULL, &count, &fences); - if (r) - return r; - - if (count == 0) { - /* Now that was unexpected. */ - } else if (count == 1) { - dma_resv_add_excl_fence(obj, fences[0]); - dma_fence_put(fences[0]); - kfree(fences); - } else { - struct dma_fence_array *array; - - array = dma_fence_array_create(count, fences, - dma_fence_context_alloc(1), 0, - false); - if (!array) - goto err_fences_put; - - dma_resv_add_excl_fence(obj, &array->base); - dma_fence_put(&array->base); - } - - return 0; - -err_fences_put: - while (count--) - dma_fence_put(fences[count]); - kfree(fences); - return -ENOMEM; -} - /** * amdgpu_dma_buf_attach - &dma_buf_ops.attach implementation * @@ -110,24 +68,6 @@ static int amdgpu_dma_buf_attach(struct dma_buf *dmabuf, if (r < 0) goto out; - r = amdgpu_bo_reserve(bo, false); - if (unlikely(r != 0)) - goto out; - - /* - * We only create shared fences for internal use, but importers - * of the dmabuf rely on exclusive fences for implicitly - * tracking write hazards. As any of the current fences may - * correspond to a write, we need to convert all existing - * fences on the reservation object into a single exclusive - * fence. - */ - r = __dma_resv_make_exclusive(bo->tbo.base.resv); - if (r) - goto out; - - bo->prime_shared_count++; - amdgpu_bo_unreserve(bo); return 0; out: @@ -150,9 +90,6 @@ static void amdgpu_dma_buf_detach(struct dma_buf *dmabuf, struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj); struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev); - if (attach->dev->driver != adev->dev->driver && bo->prime_shared_count) - bo->prime_shared_count--; - pm_runtime_mark_last_busy(adev_to_drm(adev)->dev); pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); } @@ -406,8 +343,6 @@ amdgpu_dma_buf_create_obj(struct drm_device *dev, struct dma_buf *dma_buf) bo = gem_to_amdgpu_bo(gobj); bo->allowed_domains = AMDGPU_GEM_DOMAIN_GTT; bo->preferred_domains = AMDGPU_GEM_DOMAIN_GTT; - if (dma_buf->ops != &amdgpu_dmabuf_ops) - bo->prime_shared_count = 1; dma_resv_unlock(resv); return gobj; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c index 1c3e3b608332..5d82120fc160 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c @@ -829,7 +829,8 @@ int amdgpu_gem_op_ioctl(struct drm_device *dev, void *data, break; } case AMDGPU_GEM_OP_SET_PLACEMENT: - if (robj->prime_shared_count && (args->value & AMDGPU_GEM_DOMAIN_VRAM)) { + if (robj->tbo.base.import_attach && + args->value & AMDGPU_GEM_DOMAIN_VRAM) { r = -EINVAL; amdgpu_bo_unreserve(robj); break; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c index 96447e1d4c9c..30951b593809 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c @@ -871,7 +871,7 @@ int amdgpu_bo_pin_restricted(struct amdgpu_bo *bo, u32 domain, return -EINVAL; /* A shared bo cannot be migrated to VRAM */ - if (bo->prime_shared_count || bo->tbo.base.import_attach) { + if (bo->tbo.base.import_attach) { if (domain & AMDGPU_GEM_DOMAIN_GTT) domain = AMDGPU_GEM_DOMAIN_GTT; else diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h index b35962702278..55d7e90eaa72 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h @@ -98,7 +98,6 @@ struct amdgpu_bo { struct ttm_buffer_object tbo; struct ttm_bo_kmap_obj kmap; u64 flags; - unsigned prime_shared_count; /* per VM structure for page tables and with virtual addresses */ struct amdgpu_vm_bo_base *vm_bo; /* Constant after initialization */ -- 2.25.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=-13.5 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,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 2FB6AC48BCD for ; Thu, 10 Jun 2021 09:18:26 +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 02BE561406 for ; Thu, 10 Jun 2021 09:18:25 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 02BE561406 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=amd-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 14CC16EC9D; Thu, 10 Jun 2021 09:18:11 +0000 (UTC) Received: from mail-wm1-x32e.google.com (mail-wm1-x32e.google.com [IPv6:2a00:1450:4864:20::32e]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1A3D26EC93; Thu, 10 Jun 2021 09:18:08 +0000 (UTC) Received: by mail-wm1-x32e.google.com with SMTP id h22-20020a05600c3516b02901a826f84095so5943828wmq.5; Thu, 10 Jun 2021 02:18:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=HYG/Pd3+8jYUJEQI4+1pC4wnbrb3VmqLasRQxc0dxjM=; b=u7AHgaXEabzHVZFPfrVorFnYYGt9ad7x/O43kJdNPHXxsuULs48kQlCatjXOIWHjBS RMKwlmc1W63Jk0X6hGwgkF7/berNj/PHJCgC+KaCSiJ0RntzbvbcjXY+6vvaPDE0yQpl jpLnq2eHalT2R2Ot8htn4s9MKhCkArURCdbrV4qg0WsdBFWSPdEi18GYq2fIsWfeBhYx 8g8ehtAxkY8ogO93UVndDYoj/+Uis2yqYOuE50e1hDG4N/1a6kMSiy8K9OdVBFvmqTmQ Y8g+RUhEMTNtfsqEegaf9QpyefZ3d66a4mWv+Z97HUdX1ciB6bPoB9z0Jof511aD6+Mo pkwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=HYG/Pd3+8jYUJEQI4+1pC4wnbrb3VmqLasRQxc0dxjM=; b=IRh0QdncBZ5+dYzGvzADb6QTBBCCzwbMZItv4onH5g0fVxZ0tdLYlSk0U5zXPKefaV 3djgs0yIMqOfznljvAKGWQXFizuhgMbkyb2VUEmgi/QQC9jX1T1oYx9czCko1E+/4dTF h8rBrXrkZ3+9NjCzECceQiS0eH4QVu8BRczIlYCSxCAt2iboXXSNI4p2njKU4zhPn7Sq lXEBFNzjtnLzmh/3IoxZVDqiTPwJ80Br+kqXCsJGI9n4j59DWOMFjKmoHIzNPBvKA2fD rIvA/9stughfm/FPhiXJdLdQzZdo7e6TyJE+D1ZXgOpsL8CcnzUVnD5FJ21GhBcQaCFC br0g== X-Gm-Message-State: AOAM533lxAD9h1bMpzytOJjE6yQY1cVRz0YrUbk0yiLkk0bnacvWhK5e 9NIeJeNbdURWMv2MC3GWzoY= X-Google-Smtp-Source: ABdhPJzfPKCjaXBXFGNgt55iZuvja5GHEdwfoWbs3TuIv1xnzZw9GKIC0ucL4dkXi381KcwxR9BVwA== X-Received: by 2002:a05:600c:2188:: with SMTP id e8mr14529940wme.129.1623316686726; Thu, 10 Jun 2021 02:18:06 -0700 (PDT) Received: from abel.fritz.box ([2a02:908:1252:fb60:561f:e43a:edf5:8f95]) by smtp.gmail.com with ESMTPSA id v8sm3087445wrc.29.2021.06.10.02.18.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Jun 2021 02:18:06 -0700 (PDT) From: "=?UTF-8?q?Christian=20K=C3=B6nig?=" X-Google-Original-From: =?UTF-8?q?Christian=20K=C3=B6nig?= To: daniel@ffwll.ch, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org Subject: [PATCH 7/7] drm/amdgpu: rework dma_resv handling Date: Thu, 10 Jun 2021 11:18:00 +0200 Message-Id: <20210610091800.1833-8-christian.koenig@amd.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210610091800.1833-1-christian.koenig@amd.com> References: <20210610091800.1833-1-christian.koenig@amd.com> MIME-Version: 1.0 X-BeenThere: amd-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: amd-gfx-bounces@lists.freedesktop.org Sender: "amd-gfx" RHJvcCB0aGUgd29ya2Fyb3VuZCBhbmQgaW5zdGVhZCBpbXBsZW1lbnQgYSBiZXR0ZXIgc29sdXRp b24uCgpCYXNpY2FsbHkgd2UgYXJlIG5vdyBjaGFpbmluZyBhbGwgc3VibWlzc2lvbnMgdXNpbmcg YSBkbWFfZmVuY2VfY2hhaW4KY29udGFpbmVyIGFuZCBhZGRpbmcgdGhlbSBhcyBleGNsdXNpdmUg ZmVuY2UgdG8gdGhlIGRtYV9yZXN2IG9iamVjdC4KClRoaXMgd2F5IG90aGVyIGRyaXZlcnMgY2Fu IHN0aWxsIHN5bmMgdG8gdGhlIHNpbmdsZSBleGNsdXNpdmUgZmVuY2UKd2hpbGUgYW1kZ3B1IG9u bHkgc3luYyB0byBmZW5jZXMgZnJvbSBkaWZmZXJlbnQgcHJvY2Vzc2VzLgoKU2lnbmVkLW9mZi1i eTogQ2hyaXN0aWFuIEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29tPgotLS0KIGRyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9ib19saXN0LmggfCAgMSArCiBkcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfY3MuYyAgICAgIHwgNTQgKysrKysrKysrKysrKy0tLS0K IGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kbWFfYnVmLmMgfCA2NSAtLS0tLS0t LS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYyAg ICAgfCAgMyArLQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X29iamVjdC5jICB8 ICAyICstCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfb2JqZWN0LmggIHwgIDEg LQogNiBmaWxlcyBjaGFuZ2VkLCA0NyBpbnNlcnRpb25zKCspLCA3OSBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYm9fbGlzdC5oIGIv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2JvX2xpc3QuaAppbmRleCBhMTMwZTc2 NmNiZGIuLmM5MDVhNGNmYzE3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X2JvX2xpc3QuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRn cHVfYm9fbGlzdC5oCkBAIC0zNCw2ICszNCw3IEBAIHN0cnVjdCBhbWRncHVfZnByaXY7CiBzdHJ1 Y3QgYW1kZ3B1X2JvX2xpc3RfZW50cnkgewogCXN0cnVjdCB0dG1fdmFsaWRhdGVfYnVmZmVyCXR2 OwogCXN0cnVjdCBhbWRncHVfYm9fdmEJCSpib192YTsKKwlzdHJ1Y3QgZG1hX2ZlbmNlX2NoYWlu CQkqY2hhaW47CiAJdWludDMyX3QJCQlwcmlvcml0eTsKIAlzdHJ1Y3QgcGFnZQkJCSoqdXNlcl9w YWdlczsKIAlib29sCQkJCXVzZXJfaW52YWxpZGF0ZWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L2FtZGdwdV9jcy5jCmluZGV4IDMyNWU4MjYyMTQ2Ny4uZjZmMzAyOWY5NThkIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfY3MuYworKysgYi9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfY3MuYwpAQCAtNTg3LDYgKzU4NywyMCBAQCBzdGF0aWMg aW50IGFtZGdwdV9jc19wYXJzZXJfYm9zKHN0cnVjdCBhbWRncHVfY3NfcGFyc2VyICpwLAogCQln b3RvIG91dDsKIAl9CiAKKwlhbWRncHVfYm9fbGlzdF9mb3JfZWFjaF9lbnRyeShlLCBwLT5ib19s aXN0KSB7CisJCXN0cnVjdCBhbWRncHVfYm8gKmJvID0gdHRtX3RvX2FtZGdwdV9ibyhlLT50di5i byk7CisKKwkJZS0+Ym9fdmEgPSBhbWRncHVfdm1fYm9fZmluZCh2bSwgYm8pOworCisJCWlmIChi by0+dGJvLmJhc2UuZG1hX2J1ZiAmJiAhYW1kZ3B1X2JvX2V4cGxpY2l0X3N5bmMoYm8pKSB7CisJ CQllLT5jaGFpbiA9IGRtYV9mZW5jZV9jaGFpbl9hbGxvYygpOworCQkJaWYgKCFlLT5jaGFpbikg eworCQkJCXIgPSAtRU5PTUVNOworCQkJCWdvdG8gZXJyb3JfdmFsaWRhdGU7CisJCQl9CisJCX0K Kwl9CisKIAlhbWRncHVfY3NfZ2V0X3RocmVzaG9sZF9mb3JfbW92ZXMocC0+YWRldiwgJnAtPmJ5 dGVzX21vdmVkX3RocmVzaG9sZCwKIAkJCQkJICAmcC0+Ynl0ZXNfbW92ZWRfdmlzX3RocmVzaG9s ZCk7CiAJcC0+Ynl0ZXNfbW92ZWQgPSAwOwpAQCAtNjE0LDE1ICs2MjgsNiBAQCBzdGF0aWMgaW50 IGFtZGdwdV9jc19wYXJzZXJfYm9zKHN0cnVjdCBhbWRncHVfY3NfcGFyc2VyICpwLAogCWd3cyA9 IHAtPmJvX2xpc3QtPmd3c19vYmo7CiAJb2EgPSBwLT5ib19saXN0LT5vYV9vYmo7CiAKLQlhbWRn cHVfYm9fbGlzdF9mb3JfZWFjaF9lbnRyeShlLCBwLT5ib19saXN0KSB7Ci0JCXN0cnVjdCBhbWRn cHVfYm8gKmJvID0gdHRtX3RvX2FtZGdwdV9ibyhlLT50di5ibyk7Ci0KLQkJLyogTWFrZSBzdXJl IHdlIHVzZSB0aGUgZXhjbHVzaXZlIHNsb3QgZm9yIHNoYXJlZCBCT3MgKi8KLQkJaWYgKGJvLT5w cmltZV9zaGFyZWRfY291bnQpCi0JCQllLT50di5udW1fc2hhcmVkID0gMDsKLQkJZS0+Ym9fdmEg PSBhbWRncHVfdm1fYm9fZmluZCh2bSwgYm8pOwotCX0KLQogCWlmIChnZHMpIHsKIAkJcC0+am9i LT5nZHNfYmFzZSA9IGFtZGdwdV9ib19ncHVfb2Zmc2V0KGdkcykgPj4gUEFHRV9TSElGVDsKIAkJ cC0+am9iLT5nZHNfc2l6ZSA9IGFtZGdwdV9ib19zaXplKGdkcykgPj4gUEFHRV9TSElGVDsKQEAg LTY0NCw4ICs2NDksMTMgQEAgc3RhdGljIGludCBhbWRncHVfY3NfcGFyc2VyX2JvcyhzdHJ1Y3Qg YW1kZ3B1X2NzX3BhcnNlciAqcCwKIAl9CiAKIGVycm9yX3ZhbGlkYXRlOgotCWlmIChyKQorCWlm IChyKSB7CisJCWFtZGdwdV9ib19saXN0X2Zvcl9lYWNoX2VudHJ5KGUsIHAtPmJvX2xpc3QpIHsK KwkJCWRtYV9mZW5jZV9jaGFpbl9mcmVlKGUtPmNoYWluKTsKKwkJCWUtPmNoYWluID0gTlVMTDsK KwkJfQogCQl0dG1fZXVfYmFja29mZl9yZXNlcnZhdGlvbigmcC0+dGlja2V0LCAmcC0+dmFsaWRh dGVkKTsKKwl9CiBvdXQ6CiAJcmV0dXJuIHI7CiB9CkBAIC02ODUsOSArNjk1LDE3IEBAIHN0YXRp YyB2b2lkIGFtZGdwdV9jc19wYXJzZXJfZmluaShzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcGFy c2VyLCBpbnQgZXJyb3IsCiB7CiAJdW5zaWduZWQgaTsKIAotCWlmIChlcnJvciAmJiBiYWNrb2Zm KQorCWlmIChlcnJvciAmJiBiYWNrb2ZmKSB7CisJCXN0cnVjdCBhbWRncHVfYm9fbGlzdF9lbnRy eSAqZTsKKworCQlhbWRncHVfYm9fbGlzdF9mb3JfZWFjaF9lbnRyeShlLCBwYXJzZXItPmJvX2xp c3QpIHsKKwkJCWRtYV9mZW5jZV9jaGFpbl9mcmVlKGUtPmNoYWluKTsKKwkJCWUtPmNoYWluID0g TlVMTDsKKwkJfQorCiAJCXR0bV9ldV9iYWNrb2ZmX3Jlc2VydmF0aW9uKCZwYXJzZXItPnRpY2tl dCwKIAkJCQkJICAgJnBhcnNlci0+dmFsaWRhdGVkKTsKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwg cGFyc2VyLT5udW1fcG9zdF9kZXBzOyBpKyspIHsKIAkJZHJtX3N5bmNvYmpfcHV0KHBhcnNlci0+ cG9zdF9kZXBzW2ldLnN5bmNvYmopOwpAQCAtMTI2MCw2ICsxMjc4LDIwIEBAIHN0YXRpYyBpbnQg YW1kZ3B1X2NzX3N1Ym1pdChzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCwKIAogCWFtZGdwdV92 bV9tb3ZlX3RvX2xydV90YWlsKHAtPmFkZXYsICZmcHJpdi0+dm0pOwogCisJYW1kZ3B1X2JvX2xp c3RfZm9yX2VhY2hfZW50cnkoZSwgcC0+Ym9fbGlzdCkgeworCQlzdHJ1Y3QgZG1hX3Jlc3YgKnJl c3YgPSBlLT50di5iby0+YmFzZS5yZXN2OworCQlzdHJ1Y3QgZG1hX2ZlbmNlX2NoYWluICpjaGFp biA9IGUtPmNoYWluOworCisJCWlmICghY2hhaW4pCisJCQljb250aW51ZTsKKworCQlkbWFfZmVu Y2VfY2hhaW5faW5pdChjaGFpbiwgZG1hX3Jlc3ZfZXhjbF9mZW5jZShyZXN2KSwKKwkJCQkgICAg IGRtYV9mZW5jZV9nZXQocC0+ZmVuY2UpLCAxKTsKKworCQlyY3VfYXNzaWduX3BvaW50ZXIocmVz di0+ZmVuY2VfZXhjbCwgJmNoYWluLT5iYXNlKTsKKwkJZS0+Y2hhaW4gPSBOVUxMOworCX0KKwog CXR0bV9ldV9mZW5jZV9idWZmZXJfb2JqZWN0cygmcC0+dGlja2V0LCAmcC0+dmFsaWRhdGVkLCBw LT5mZW5jZSk7CiAJbXV0ZXhfdW5sb2NrKCZwLT5hZGV2LT5ub3RpZmllcl9sb2NrKTsKIApkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RtYV9idWYuYyBiL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kbWFfYnVmLmMKaW5kZXggYzMwNTNiODNi ODBjLi4yMzIxOWZjM2IyOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L2FtZGdwdV9kbWFfYnVmLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1 X2RtYV9idWYuYwpAQCAtNDIsNDggKzQyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9wY2ktcDJwZG1h Lmg+CiAjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogCi1zdGF0aWMgaW50Ci1fX2RtYV9y ZXN2X21ha2VfZXhjbHVzaXZlKHN0cnVjdCBkbWFfcmVzdiAqb2JqKQotewotCXN0cnVjdCBkbWFf ZmVuY2UgKipmZW5jZXM7Ci0JdW5zaWduZWQgaW50IGNvdW50OwotCWludCByOwotCi0JaWYgKCFk bWFfcmVzdl9zaGFyZWRfbGlzdChvYmopKSAvKiBubyBzaGFyZWQgZmVuY2VzIHRvIGNvbnZlcnQg Ki8KLQkJcmV0dXJuIDA7Ci0KLQlyID0gZG1hX3Jlc3ZfZ2V0X2ZlbmNlcyhvYmosIE5VTEwsICZj b3VudCwgJmZlbmNlcyk7Ci0JaWYgKHIpCi0JCXJldHVybiByOwotCi0JaWYgKGNvdW50ID09IDAp IHsKLQkJLyogTm93IHRoYXQgd2FzIHVuZXhwZWN0ZWQuICovCi0JfSBlbHNlIGlmIChjb3VudCA9 PSAxKSB7Ci0JCWRtYV9yZXN2X2FkZF9leGNsX2ZlbmNlKG9iaiwgZmVuY2VzWzBdKTsKLQkJZG1h X2ZlbmNlX3B1dChmZW5jZXNbMF0pOwotCQlrZnJlZShmZW5jZXMpOwotCX0gZWxzZSB7Ci0JCXN0 cnVjdCBkbWFfZmVuY2VfYXJyYXkgKmFycmF5OwotCi0JCWFycmF5ID0gZG1hX2ZlbmNlX2FycmF5 X2NyZWF0ZShjb3VudCwgZmVuY2VzLAotCQkJCQkgICAgICAgZG1hX2ZlbmNlX2NvbnRleHRfYWxs b2MoMSksIDAsCi0JCQkJCSAgICAgICBmYWxzZSk7Ci0JCWlmICghYXJyYXkpCi0JCQlnb3RvIGVy cl9mZW5jZXNfcHV0OwotCi0JCWRtYV9yZXN2X2FkZF9leGNsX2ZlbmNlKG9iaiwgJmFycmF5LT5i YXNlKTsKLQkJZG1hX2ZlbmNlX3B1dCgmYXJyYXktPmJhc2UpOwotCX0KLQotCXJldHVybiAwOwot Ci1lcnJfZmVuY2VzX3B1dDoKLQl3aGlsZSAoY291bnQtLSkKLQkJZG1hX2ZlbmNlX3B1dChmZW5j ZXNbY291bnRdKTsKLQlrZnJlZShmZW5jZXMpOwotCXJldHVybiAtRU5PTUVNOwotfQotCiAvKioK ICAqIGFtZGdwdV9kbWFfYnVmX2F0dGFjaCAtICZkbWFfYnVmX29wcy5hdHRhY2ggaW1wbGVtZW50 YXRpb24KICAqCkBAIC0xMTAsMjQgKzY4LDYgQEAgc3RhdGljIGludCBhbWRncHVfZG1hX2J1Zl9h dHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKIAlpZiAociA8IDApCiAJCWdvdG8gb3V0Owog Ci0JciA9IGFtZGdwdV9ib19yZXNlcnZlKGJvLCBmYWxzZSk7Ci0JaWYgKHVubGlrZWx5KHIgIT0g MCkpCi0JCWdvdG8gb3V0OwotCi0JLyoKLQkgKiBXZSBvbmx5IGNyZWF0ZSBzaGFyZWQgZmVuY2Vz IGZvciBpbnRlcm5hbCB1c2UsIGJ1dCBpbXBvcnRlcnMKLQkgKiBvZiB0aGUgZG1hYnVmIHJlbHkg b24gZXhjbHVzaXZlIGZlbmNlcyBmb3IgaW1wbGljaXRseQotCSAqIHRyYWNraW5nIHdyaXRlIGhh emFyZHMuIEFzIGFueSBvZiB0aGUgY3VycmVudCBmZW5jZXMgbWF5Ci0JICogY29ycmVzcG9uZCB0 byBhIHdyaXRlLCB3ZSBuZWVkIHRvIGNvbnZlcnQgYWxsIGV4aXN0aW5nCi0JICogZmVuY2VzIG9u IHRoZSByZXNlcnZhdGlvbiBvYmplY3QgaW50byBhIHNpbmdsZSBleGNsdXNpdmUKLQkgKiBmZW5j ZS4KLQkgKi8KLQlyID0gX19kbWFfcmVzdl9tYWtlX2V4Y2x1c2l2ZShiby0+dGJvLmJhc2UucmVz dik7Ci0JaWYgKHIpCi0JCWdvdG8gb3V0OwotCi0JYm8tPnByaW1lX3NoYXJlZF9jb3VudCsrOwot CWFtZGdwdV9ib191bnJlc2VydmUoYm8pOwogCXJldHVybiAwOwogCiBvdXQ6CkBAIC0xNTAsOSAr OTAsNiBAQCBzdGF0aWMgdm9pZCBhbWRncHVfZG1hX2J1Zl9kZXRhY2goc3RydWN0IGRtYV9idWYg KmRtYWJ1ZiwKIAlzdHJ1Y3QgYW1kZ3B1X2JvICpibyA9IGdlbV90b19hbWRncHVfYm8ob2JqKTsK IAlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IGFtZGdwdV90dG1fYWRldihiby0+dGJvLmJk ZXYpOwogCi0JaWYgKGF0dGFjaC0+ZGV2LT5kcml2ZXIgIT0gYWRldi0+ZGV2LT5kcml2ZXIgJiYg Ym8tPnByaW1lX3NoYXJlZF9jb3VudCkKLQkJYm8tPnByaW1lX3NoYXJlZF9jb3VudC0tOwotCiAJ cG1fcnVudGltZV9tYXJrX2xhc3RfYnVzeShhZGV2X3RvX2RybShhZGV2KS0+ZGV2KTsKIAlwbV9y dW50aW1lX3B1dF9hdXRvc3VzcGVuZChhZGV2X3RvX2RybShhZGV2KS0+ZGV2KTsKIH0KQEAgLTQw Niw4ICszNDMsNiBAQCBhbWRncHVfZG1hX2J1Zl9jcmVhdGVfb2JqKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmKQogCWJvID0gZ2VtX3RvX2FtZGdwdV9ibyhn b2JqKTsKIAliby0+YWxsb3dlZF9kb21haW5zID0gQU1ER1BVX0dFTV9ET01BSU5fR1RUOwogCWJv LT5wcmVmZXJyZWRfZG9tYWlucyA9IEFNREdQVV9HRU1fRE9NQUlOX0dUVDsKLQlpZiAoZG1hX2J1 Zi0+b3BzICE9ICZhbWRncHVfZG1hYnVmX29wcykKLQkJYm8tPnByaW1lX3NoYXJlZF9jb3VudCA9 IDE7CiAKIAlkbWFfcmVzdl91bmxvY2socmVzdik7CiAJcmV0dXJuIGdvYmo7CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9hbWRncHVfZ2VtLmMKaW5kZXggMWMzZTNiNjA4MzMyLi41ZDgyMTIwZmMx NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYwor KysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ2VtLmMKQEAgLTgyOSw3ICs4 MjksOCBAQCBpbnQgYW1kZ3B1X2dlbV9vcF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2 b2lkICpkYXRhLAogCQlicmVhazsKIAl9CiAJY2FzZSBBTURHUFVfR0VNX09QX1NFVF9QTEFDRU1F TlQ6Ci0JCWlmIChyb2JqLT5wcmltZV9zaGFyZWRfY291bnQgJiYgKGFyZ3MtPnZhbHVlICYgQU1E R1BVX0dFTV9ET01BSU5fVlJBTSkpIHsKKwkJaWYgKHJvYmotPnRiby5iYXNlLmltcG9ydF9hdHRh Y2ggJiYKKwkJICAgIGFyZ3MtPnZhbHVlICYgQU1ER1BVX0dFTV9ET01BSU5fVlJBTSkgewogCQkJ ciA9IC1FSU5WQUw7CiAJCQlhbWRncHVfYm9fdW5yZXNlcnZlKHJvYmopOwogCQkJYnJlYWs7CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfb2JqZWN0LmMgYi9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfb2JqZWN0LmMKaW5kZXggOTY0NDdlMWQ0 YzljLi4zMDk1MWI1OTM4MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L2FtZGdwdV9vYmplY3QuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf b2JqZWN0LmMKQEAgLTg3MSw3ICs4NzEsNyBAQCBpbnQgYW1kZ3B1X2JvX3Bpbl9yZXN0cmljdGVk KHN0cnVjdCBhbWRncHVfYm8gKmJvLCB1MzIgZG9tYWluLAogCQlyZXR1cm4gLUVJTlZBTDsKIAog CS8qIEEgc2hhcmVkIGJvIGNhbm5vdCBiZSBtaWdyYXRlZCB0byBWUkFNICovCi0JaWYgKGJvLT5w cmltZV9zaGFyZWRfY291bnQgfHwgYm8tPnRiby5iYXNlLmltcG9ydF9hdHRhY2gpIHsKKwlpZiAo Ym8tPnRiby5iYXNlLmltcG9ydF9hdHRhY2gpIHsKIAkJaWYgKGRvbWFpbiAmIEFNREdQVV9HRU1f RE9NQUlOX0dUVCkKIAkJCWRvbWFpbiA9IEFNREdQVV9HRU1fRE9NQUlOX0dUVDsKIAkJZWxzZQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X29iamVjdC5oIGIv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X29iamVjdC5oCmluZGV4IGIzNTk2Mjcw MjI3OC4uNTVkN2U5MGVhYTcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfb2JqZWN0LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1 X29iamVjdC5oCkBAIC05OCw3ICs5OCw2IEBAIHN0cnVjdCBhbWRncHVfYm8gewogCXN0cnVjdCB0 dG1fYnVmZmVyX29iamVjdAl0Ym87CiAJc3RydWN0IHR0bV9ib19rbWFwX29iagkJa21hcDsKIAl1 NjQJCQkJZmxhZ3M7Ci0JdW5zaWduZWQJCQlwcmltZV9zaGFyZWRfY291bnQ7CiAJLyogcGVyIFZN IHN0cnVjdHVyZSBmb3IgcGFnZSB0YWJsZXMgYW5kIHdpdGggdmlydHVhbCBhZGRyZXNzZXMgKi8K IAlzdHJ1Y3QgYW1kZ3B1X3ZtX2JvX2Jhc2UJKnZtX2JvOwogCS8qIENvbnN0YW50IGFmdGVyIGlu aXRpYWxpemF0aW9uICovCi0tIAoyLjI1LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmFtZC1nZnggbWFpbGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vYW1kLWdmeAo=