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 A1EEFC48BE6 for ; Mon, 14 Jun 2021 17:45: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 7189D61350 for ; Mon, 14 Jun 2021 17:45:46 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7189D61350 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 AAF8D6E0EB; Mon, 14 Jun 2021 17:45:41 +0000 (UTC) Received: from mail-ej1-x630.google.com (mail-ej1-x630.google.com [IPv6:2a00:1450:4864:20::630]) by gabe.freedesktop.org (Postfix) with ESMTPS id E95B26E0D4; Mon, 14 Jun 2021 17:45:39 +0000 (UTC) Received: by mail-ej1-x630.google.com with SMTP id ce15so17976285ejb.4; Mon, 14 Jun 2021 10:45:39 -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=dH/O7+R0L2tQE918WSiUMOlJGLZJ/DD+l7mg4nUqIEc=; b=t3RRMLH71D5s8gB6TutZjOEwxvjw2H7el1TXG9aTarT+kyXWWb2jVqI0Zq7mFYjztb I9nVtYmGZBwXsRpLnesiEoU0pd2TZCNcWHd7/x3tYIkgiRimzsfdzaNVTXMmgmiVt2pv JcnTViWdqGFZNzjUMWXhXIo1WgacBB8fVb0LIs5KiWZifbv2gPXnTsu4kvfQDIi4GhDb 6saa1mMpM3vmmmPLnlePPoTDVM95PWkMZyF8e8wjrwkCBnHyQrBFqcvezcGApu0JOjbL rIkbhT5ImjbXo07TKYV7TDTOEQ+JxImE+pqOCzicqs2r+DwsGmnQg+tJbNBtgwCMq5PQ U5XQ== 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=dH/O7+R0L2tQE918WSiUMOlJGLZJ/DD+l7mg4nUqIEc=; b=CPl5R1t/dG+vPKy8zGPCOLnLgahPKV6AuSznUrHn+5JJjNL1ubXymISr6tFUY1LXqP peM8eqaQQek03H7gnnx3D8fGt2qpjL62og3zchgZva1dxAjxWr33UjMxnILN7W3dWVSE 0H6JNVvJXlEUgnQg18m8TgxfDknYGrQE/tZJEfyKWzkdiER2zXmoi8FIjClvMSQasyBt myzug/0DDJG1eeQBExXQ2SMjr/Fv/fpllxS/1VaL1Et4+1tLheinfV/GWg15pjm0rNk4 aHRlpQUxOtaR7FcF9POQlaVrRV2nV+0EG71o7+8zNYqDJGDZIRYEuqjDM+xBGE7bCccq v5wQ== X-Gm-Message-State: AOAM530wMP7oFVs0ZaohHwvX7rkGx2GI72hZNr9229DYnR7OcTWq/3Op AB/PX3DKJCxKq0+5lhTIxL+tCflNVsQ= X-Google-Smtp-Source: ABdhPJzF+0ektFBvPfUT9EoiIaGdIesyKowWU1amlO6e21cf4fly/blphMCfWoIr4zvSuFZR+n3gmg== X-Received: by 2002:a17:907:330d:: with SMTP id ym13mr16244907ejb.160.1623692738544; Mon, 14 Jun 2021 10:45:38 -0700 (PDT) Received: from abel.fritz.box ([2a02:908:1252:fb60:3d13:a2c3:d033:759a]) by smtp.gmail.com with ESMTPSA id a3sm77485edu.61.2021.06.14.10.45.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Jun 2021 10:45:38 -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 2/2] drm/amdgpu: rework dma_resv handling v3 Date: Mon, 14 Jun 2021 19:45:36 +0200 Message-Id: <20210614174536.5188-2-christian.koenig@amd.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210614174536.5188-1-christian.koenig@amd.com> References: <20210614174536.5188-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. v3: add the shared fence first before the exclusive one Signed-off-by: Christian König --- drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.h | 1 + drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 62 ++++++++++++++++---- 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, 55 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 9ce649a1a8d3..25655414e9c0 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c @@ -572,6 +572,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; @@ -599,15 +613,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; @@ -629,8 +634,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; } @@ -670,9 +680,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); @@ -1245,6 +1263,28 @@ 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; + + /* + * Work around dma_resv shortcommings by wrapping up the + * submission in a dma_fence_chain and add it as exclusive + * fence, but first add the submission as shared fence to make + * sure that shared fences never signal before the exclusive + * one. + */ + dma_fence_chain_init(chain, dma_resv_excl_fence(resv), + dma_fence_get(p->fence), 1); + + dma_resv_add_shared_fence(resv, p->fence); + 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 9cf4beaf646c..0780e8d18992 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 b7a2070d90af..d13490975ac3 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c @@ -892,7 +892,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 126df03a7066..c03dfd298f45 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h @@ -99,7 +99,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 AEFCFC47094 for ; Mon, 14 Jun 2021 17:45:45 +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 8116461350 for ; Mon, 14 Jun 2021 17:45:45 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8116461350 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 72CC46E0DF; Mon, 14 Jun 2021 17:45:41 +0000 (UTC) Received: from mail-ej1-x630.google.com (mail-ej1-x630.google.com [IPv6:2a00:1450:4864:20::630]) by gabe.freedesktop.org (Postfix) with ESMTPS id E95B26E0D4; Mon, 14 Jun 2021 17:45:39 +0000 (UTC) Received: by mail-ej1-x630.google.com with SMTP id ce15so17976285ejb.4; Mon, 14 Jun 2021 10:45:39 -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=dH/O7+R0L2tQE918WSiUMOlJGLZJ/DD+l7mg4nUqIEc=; b=t3RRMLH71D5s8gB6TutZjOEwxvjw2H7el1TXG9aTarT+kyXWWb2jVqI0Zq7mFYjztb I9nVtYmGZBwXsRpLnesiEoU0pd2TZCNcWHd7/x3tYIkgiRimzsfdzaNVTXMmgmiVt2pv JcnTViWdqGFZNzjUMWXhXIo1WgacBB8fVb0LIs5KiWZifbv2gPXnTsu4kvfQDIi4GhDb 6saa1mMpM3vmmmPLnlePPoTDVM95PWkMZyF8e8wjrwkCBnHyQrBFqcvezcGApu0JOjbL rIkbhT5ImjbXo07TKYV7TDTOEQ+JxImE+pqOCzicqs2r+DwsGmnQg+tJbNBtgwCMq5PQ U5XQ== 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=dH/O7+R0L2tQE918WSiUMOlJGLZJ/DD+l7mg4nUqIEc=; b=CPl5R1t/dG+vPKy8zGPCOLnLgahPKV6AuSznUrHn+5JJjNL1ubXymISr6tFUY1LXqP peM8eqaQQek03H7gnnx3D8fGt2qpjL62og3zchgZva1dxAjxWr33UjMxnILN7W3dWVSE 0H6JNVvJXlEUgnQg18m8TgxfDknYGrQE/tZJEfyKWzkdiER2zXmoi8FIjClvMSQasyBt myzug/0DDJG1eeQBExXQ2SMjr/Fv/fpllxS/1VaL1Et4+1tLheinfV/GWg15pjm0rNk4 aHRlpQUxOtaR7FcF9POQlaVrRV2nV+0EG71o7+8zNYqDJGDZIRYEuqjDM+xBGE7bCccq v5wQ== X-Gm-Message-State: AOAM530wMP7oFVs0ZaohHwvX7rkGx2GI72hZNr9229DYnR7OcTWq/3Op AB/PX3DKJCxKq0+5lhTIxL+tCflNVsQ= X-Google-Smtp-Source: ABdhPJzF+0ektFBvPfUT9EoiIaGdIesyKowWU1amlO6e21cf4fly/blphMCfWoIr4zvSuFZR+n3gmg== X-Received: by 2002:a17:907:330d:: with SMTP id ym13mr16244907ejb.160.1623692738544; Mon, 14 Jun 2021 10:45:38 -0700 (PDT) Received: from abel.fritz.box ([2a02:908:1252:fb60:3d13:a2c3:d033:759a]) by smtp.gmail.com with ESMTPSA id a3sm77485edu.61.2021.06.14.10.45.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Jun 2021 10:45:38 -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 2/2] drm/amdgpu: rework dma_resv handling v3 Date: Mon, 14 Jun 2021 19:45:36 +0200 Message-Id: <20210614174536.5188-2-christian.koenig@amd.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210614174536.5188-1-christian.koenig@amd.com> References: <20210614174536.5188-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 bHkgc3luYyB0byBmZW5jZXMgZnJvbSBkaWZmZXJlbnQgcHJvY2Vzc2VzLgoKdjM6IGFkZCB0aGUg c2hhcmVkIGZlbmNlIGZpcnN0IGJlZm9yZSB0aGUgZXhjbHVzaXZlIG9uZQoKU2lnbmVkLW9mZi1i eTogQ2hyaXN0aWFuIEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29tPgotLS0KIGRyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9ib19saXN0LmggfCAgMSArCiBkcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfY3MuYyAgICAgIHwgNjIgKysrKysrKysrKysrKysrKy0t LS0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kbWFfYnVmLmMgfCA2NSAtLS0t LS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0u YyAgICAgfCAgMyArLQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X29iamVjdC5j ICB8ICAyICstCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfb2JqZWN0LmggIHwg IDEgLQogNiBmaWxlcyBjaGFuZ2VkLCA1NSBpbnNlcnRpb25zKCspLCA3OSBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYm9fbGlzdC5o IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2JvX2xpc3QuaAppbmRleCBhMTMw ZTc2NmNiZGIuLmM5MDVhNGNmYzE3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1X2JvX2xpc3QuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfYm9fbGlzdC5oCkBAIC0zNCw2ICszNCw3IEBAIHN0cnVjdCBhbWRncHVfZnByaXY7CiBz dHJ1Y3QgYW1kZ3B1X2JvX2xpc3RfZW50cnkgewogCXN0cnVjdCB0dG1fdmFsaWRhdGVfYnVmZmVy CXR2OwogCXN0cnVjdCBhbWRncHVfYm9fdmEJCSpib192YTsKKwlzdHJ1Y3QgZG1hX2ZlbmNlX2No YWluCQkqY2hhaW47CiAJdWludDMyX3QJCQlwcmlvcml0eTsKIAlzdHJ1Y3QgcGFnZQkJCSoqdXNl cl9wYWdlczsKIAlib29sCQkJCXVzZXJfaW52YWxpZGF0ZWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9jcy5jCmluZGV4IDljZTY0OWExYThkMy4uMjU2NTU0MTRlOWMwIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfY3MuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfY3MuYwpAQCAtNTcyLDYgKzU3MiwyMCBAQCBzdGF0 aWMgaW50IGFtZGdwdV9jc19wYXJzZXJfYm9zKHN0cnVjdCBhbWRncHVfY3NfcGFyc2VyICpwLAog CQlnb3RvIG91dDsKIAl9CiAKKwlhbWRncHVfYm9fbGlzdF9mb3JfZWFjaF9lbnRyeShlLCBwLT5i b19saXN0KSB7CisJCXN0cnVjdCBhbWRncHVfYm8gKmJvID0gdHRtX3RvX2FtZGdwdV9ibyhlLT50 di5ibyk7CisKKwkJZS0+Ym9fdmEgPSBhbWRncHVfdm1fYm9fZmluZCh2bSwgYm8pOworCisJCWlm IChiby0+dGJvLmJhc2UuZG1hX2J1ZiAmJiAhYW1kZ3B1X2JvX2V4cGxpY2l0X3N5bmMoYm8pKSB7 CisJCQllLT5jaGFpbiA9IGRtYV9mZW5jZV9jaGFpbl9hbGxvYygpOworCQkJaWYgKCFlLT5jaGFp bikgeworCQkJCXIgPSAtRU5PTUVNOworCQkJCWdvdG8gZXJyb3JfdmFsaWRhdGU7CisJCQl9CisJ CX0KKwl9CisKIAlhbWRncHVfY3NfZ2V0X3RocmVzaG9sZF9mb3JfbW92ZXMocC0+YWRldiwgJnAt PmJ5dGVzX21vdmVkX3RocmVzaG9sZCwKIAkJCQkJICAmcC0+Ynl0ZXNfbW92ZWRfdmlzX3RocmVz aG9sZCk7CiAJcC0+Ynl0ZXNfbW92ZWQgPSAwOwpAQCAtNTk5LDE1ICs2MTMsNiBAQCBzdGF0aWMg aW50IGFtZGdwdV9jc19wYXJzZXJfYm9zKHN0cnVjdCBhbWRncHVfY3NfcGFyc2VyICpwLAogCWd3 cyA9IHAtPmJvX2xpc3QtPmd3c19vYmo7CiAJb2EgPSBwLT5ib19saXN0LT5vYV9vYmo7CiAKLQlh bWRncHVfYm9fbGlzdF9mb3JfZWFjaF9lbnRyeShlLCBwLT5ib19saXN0KSB7Ci0JCXN0cnVjdCBh bWRncHVfYm8gKmJvID0gdHRtX3RvX2FtZGdwdV9ibyhlLT50di5ibyk7Ci0KLQkJLyogTWFrZSBz dXJlIHdlIHVzZSB0aGUgZXhjbHVzaXZlIHNsb3QgZm9yIHNoYXJlZCBCT3MgKi8KLQkJaWYgKGJv LT5wcmltZV9zaGFyZWRfY291bnQpCi0JCQllLT50di5udW1fc2hhcmVkID0gMDsKLQkJZS0+Ym9f dmEgPSBhbWRncHVfdm1fYm9fZmluZCh2bSwgYm8pOwotCX0KLQogCWlmIChnZHMpIHsKIAkJcC0+ am9iLT5nZHNfYmFzZSA9IGFtZGdwdV9ib19ncHVfb2Zmc2V0KGdkcykgPj4gUEFHRV9TSElGVDsK IAkJcC0+am9iLT5nZHNfc2l6ZSA9IGFtZGdwdV9ib19zaXplKGdkcykgPj4gUEFHRV9TSElGVDsK QEAgLTYyOSw4ICs2MzQsMTMgQEAgc3RhdGljIGludCBhbWRncHVfY3NfcGFyc2VyX2JvcyhzdHJ1 Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCwKIAl9CiAKIGVycm9yX3ZhbGlkYXRlOgotCWlmIChyKQor CWlmIChyKSB7CisJCWFtZGdwdV9ib19saXN0X2Zvcl9lYWNoX2VudHJ5KGUsIHAtPmJvX2xpc3Qp IHsKKwkJCWRtYV9mZW5jZV9jaGFpbl9mcmVlKGUtPmNoYWluKTsKKwkJCWUtPmNoYWluID0gTlVM TDsKKwkJfQogCQl0dG1fZXVfYmFja29mZl9yZXNlcnZhdGlvbigmcC0+dGlja2V0LCAmcC0+dmFs aWRhdGVkKTsKKwl9CiBvdXQ6CiAJcmV0dXJuIHI7CiB9CkBAIC02NzAsOSArNjgwLDE3IEBAIHN0 YXRpYyB2b2lkIGFtZGdwdV9jc19wYXJzZXJfZmluaShzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAq cGFyc2VyLCBpbnQgZXJyb3IsCiB7CiAJdW5zaWduZWQgaTsKIAotCWlmIChlcnJvciAmJiBiYWNr b2ZmKQorCWlmIChlcnJvciAmJiBiYWNrb2ZmKSB7CisJCXN0cnVjdCBhbWRncHVfYm9fbGlzdF9l bnRyeSAqZTsKKworCQlhbWRncHVfYm9fbGlzdF9mb3JfZWFjaF9lbnRyeShlLCBwYXJzZXItPmJv X2xpc3QpIHsKKwkJCWRtYV9mZW5jZV9jaGFpbl9mcmVlKGUtPmNoYWluKTsKKwkJCWUtPmNoYWlu ID0gTlVMTDsKKwkJfQorCiAJCXR0bV9ldV9iYWNrb2ZmX3Jlc2VydmF0aW9uKCZwYXJzZXItPnRp Y2tldCwKIAkJCQkJICAgJnBhcnNlci0+dmFsaWRhdGVkKTsKKwl9CiAKIAlmb3IgKGkgPSAwOyBp IDwgcGFyc2VyLT5udW1fcG9zdF9kZXBzOyBpKyspIHsKIAkJZHJtX3N5bmNvYmpfcHV0KHBhcnNl ci0+cG9zdF9kZXBzW2ldLnN5bmNvYmopOwpAQCAtMTI0NSw2ICsxMjYzLDI4IEBAIHN0YXRpYyBp bnQgYW1kZ3B1X2NzX3N1Ym1pdChzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCwKIAogCWFtZGdw dV92bV9tb3ZlX3RvX2xydV90YWlsKHAtPmFkZXYsICZmcHJpdi0+dm0pOwogCisJYW1kZ3B1X2Jv X2xpc3RfZm9yX2VhY2hfZW50cnkoZSwgcC0+Ym9fbGlzdCkgeworCQlzdHJ1Y3QgZG1hX3Jlc3Yg KnJlc3YgPSBlLT50di5iby0+YmFzZS5yZXN2OworCQlzdHJ1Y3QgZG1hX2ZlbmNlX2NoYWluICpj aGFpbiA9IGUtPmNoYWluOworCisJCWlmICghY2hhaW4pCisJCQljb250aW51ZTsKKworCQkvKgor CQkgKiBXb3JrIGFyb3VuZCBkbWFfcmVzdiBzaG9ydGNvbW1pbmdzIGJ5IHdyYXBwaW5nIHVwIHRo ZQorCQkgKiBzdWJtaXNzaW9uIGluIGEgZG1hX2ZlbmNlX2NoYWluIGFuZCBhZGQgaXQgYXMgZXhj bHVzaXZlCisJCSAqIGZlbmNlLCBidXQgZmlyc3QgYWRkIHRoZSBzdWJtaXNzaW9uIGFzIHNoYXJl ZCBmZW5jZSB0byBtYWtlCisJCSAqIHN1cmUgdGhhdCBzaGFyZWQgZmVuY2VzIG5ldmVyIHNpZ25h bCBiZWZvcmUgdGhlIGV4Y2x1c2l2ZQorCQkgKiBvbmUuCisJCSAqLworCQlkbWFfZmVuY2VfY2hh aW5faW5pdChjaGFpbiwgZG1hX3Jlc3ZfZXhjbF9mZW5jZShyZXN2KSwKKwkJCQkgICAgIGRtYV9m ZW5jZV9nZXQocC0+ZmVuY2UpLCAxKTsKKworCQlkbWFfcmVzdl9hZGRfc2hhcmVkX2ZlbmNlKHJl c3YsIHAtPmZlbmNlKTsKKwkJcmN1X2Fzc2lnbl9wb2ludGVyKHJlc3YtPmZlbmNlX2V4Y2wsICZj aGFpbi0+YmFzZSk7CisJCWUtPmNoYWluID0gTlVMTDsKKwl9CisKIAl0dG1fZXVfZmVuY2VfYnVm ZmVyX29iamVjdHMoJnAtPnRpY2tldCwgJnAtPnZhbGlkYXRlZCwgcC0+ZmVuY2UpOwogCW11dGV4 X3VubG9jaygmcC0+YWRldi0+bm90aWZpZXJfbG9jayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kbWFfYnVmLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9hbWRncHVfZG1hX2J1Zi5jCmluZGV4IGMzMDUzYjgzYjgwYy4uMjMyMTlmYzNiMjhj IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZG1hX2J1Zi5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kbWFfYnVmLmMKQEAgLTQy LDQ4ICs0Miw2IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLXAycGRtYS5oPgogI2luY2x1ZGUgPGxp bnV4L3BtX3J1bnRpbWUuaD4KIAotc3RhdGljIGludAotX19kbWFfcmVzdl9tYWtlX2V4Y2x1c2l2 ZShzdHJ1Y3QgZG1hX3Jlc3YgKm9iaikKLXsKLQlzdHJ1Y3QgZG1hX2ZlbmNlICoqZmVuY2VzOwot CXVuc2lnbmVkIGludCBjb3VudDsKLQlpbnQgcjsKLQotCWlmICghZG1hX3Jlc3Zfc2hhcmVkX2xp c3Qob2JqKSkgLyogbm8gc2hhcmVkIGZlbmNlcyB0byBjb252ZXJ0ICovCi0JCXJldHVybiAwOwot Ci0JciA9IGRtYV9yZXN2X2dldF9mZW5jZXMob2JqLCBOVUxMLCAmY291bnQsICZmZW5jZXMpOwot CWlmIChyKQotCQlyZXR1cm4gcjsKLQotCWlmIChjb3VudCA9PSAwKSB7Ci0JCS8qIE5vdyB0aGF0 IHdhcyB1bmV4cGVjdGVkLiAqLwotCX0gZWxzZSBpZiAoY291bnQgPT0gMSkgewotCQlkbWFfcmVz dl9hZGRfZXhjbF9mZW5jZShvYmosIGZlbmNlc1swXSk7Ci0JCWRtYV9mZW5jZV9wdXQoZmVuY2Vz WzBdKTsKLQkJa2ZyZWUoZmVuY2VzKTsKLQl9IGVsc2UgewotCQlzdHJ1Y3QgZG1hX2ZlbmNlX2Fy cmF5ICphcnJheTsKLQotCQlhcnJheSA9IGRtYV9mZW5jZV9hcnJheV9jcmVhdGUoY291bnQsIGZl bmNlcywKLQkJCQkJICAgICAgIGRtYV9mZW5jZV9jb250ZXh0X2FsbG9jKDEpLCAwLAotCQkJCQkg ICAgICAgZmFsc2UpOwotCQlpZiAoIWFycmF5KQotCQkJZ290byBlcnJfZmVuY2VzX3B1dDsKLQot CQlkbWFfcmVzdl9hZGRfZXhjbF9mZW5jZShvYmosICZhcnJheS0+YmFzZSk7Ci0JCWRtYV9mZW5j ZV9wdXQoJmFycmF5LT5iYXNlKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyX2ZlbmNlc19wdXQ6 Ci0Jd2hpbGUgKGNvdW50LS0pCi0JCWRtYV9mZW5jZV9wdXQoZmVuY2VzW2NvdW50XSk7Ci0Ja2Zy ZWUoZmVuY2VzKTsKLQlyZXR1cm4gLUVOT01FTTsKLX0KLQogLyoqCiAgKiBhbWRncHVfZG1hX2J1 Zl9hdHRhY2ggLSAmZG1hX2J1Zl9vcHMuYXR0YWNoIGltcGxlbWVudGF0aW9uCiAgKgpAQCAtMTEw LDI0ICs2OCw2IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2RtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFf YnVmICpkbWFidWYsCiAJaWYgKHIgPCAwKQogCQlnb3RvIG91dDsKIAotCXIgPSBhbWRncHVfYm9f cmVzZXJ2ZShibywgZmFsc2UpOwotCWlmICh1bmxpa2VseShyICE9IDApKQotCQlnb3RvIG91dDsK LQotCS8qCi0JICogV2Ugb25seSBjcmVhdGUgc2hhcmVkIGZlbmNlcyBmb3IgaW50ZXJuYWwgdXNl LCBidXQgaW1wb3J0ZXJzCi0JICogb2YgdGhlIGRtYWJ1ZiByZWx5IG9uIGV4Y2x1c2l2ZSBmZW5j ZXMgZm9yIGltcGxpY2l0bHkKLQkgKiB0cmFja2luZyB3cml0ZSBoYXphcmRzLiBBcyBhbnkgb2Yg dGhlIGN1cnJlbnQgZmVuY2VzIG1heQotCSAqIGNvcnJlc3BvbmQgdG8gYSB3cml0ZSwgd2UgbmVl ZCB0byBjb252ZXJ0IGFsbCBleGlzdGluZwotCSAqIGZlbmNlcyBvbiB0aGUgcmVzZXJ2YXRpb24g b2JqZWN0IGludG8gYSBzaW5nbGUgZXhjbHVzaXZlCi0JICogZmVuY2UuCi0JICovCi0JciA9IF9f ZG1hX3Jlc3ZfbWFrZV9leGNsdXNpdmUoYm8tPnRiby5iYXNlLnJlc3YpOwotCWlmIChyKQotCQln b3RvIG91dDsKLQotCWJvLT5wcmltZV9zaGFyZWRfY291bnQrKzsKLQlhbWRncHVfYm9fdW5yZXNl cnZlKGJvKTsKIAlyZXR1cm4gMDsKIAogb3V0OgpAQCAtMTUwLDkgKzkwLDYgQEAgc3RhdGljIHZv aWQgYW1kZ3B1X2RtYV9idWZfZGV0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCiAJc3RydWN0 IGFtZGdwdV9ibyAqYm8gPSBnZW1fdG9fYW1kZ3B1X2JvKG9iaik7CiAJc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYgPSBhbWRncHVfdHRtX2FkZXYoYm8tPnRiby5iZGV2KTsKIAotCWlmIChhdHRh Y2gtPmRldi0+ZHJpdmVyICE9IGFkZXYtPmRldi0+ZHJpdmVyICYmIGJvLT5wcmltZV9zaGFyZWRf Y291bnQpCi0JCWJvLT5wcmltZV9zaGFyZWRfY291bnQtLTsKLQogCXBtX3J1bnRpbWVfbWFya19s YXN0X2J1c3koYWRldl90b19kcm0oYWRldiktPmRldik7CiAJcG1fcnVudGltZV9wdXRfYXV0b3N1 c3BlbmQoYWRldl90b19kcm0oYWRldiktPmRldik7CiB9CkBAIC00MDYsOCArMzQzLDYgQEAgYW1k Z3B1X2RtYV9idWZfY3JlYXRlX29iaihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZG1h X2J1ZiAqZG1hX2J1ZikKIAlibyA9IGdlbV90b19hbWRncHVfYm8oZ29iaik7CiAJYm8tPmFsbG93 ZWRfZG9tYWlucyA9IEFNREdQVV9HRU1fRE9NQUlOX0dUVDsKIAliby0+cHJlZmVycmVkX2RvbWFp bnMgPSBBTURHUFVfR0VNX0RPTUFJTl9HVFQ7Ci0JaWYgKGRtYV9idWYtPm9wcyAhPSAmYW1kZ3B1 X2RtYWJ1Zl9vcHMpCi0JCWJvLT5wcmltZV9zaGFyZWRfY291bnQgPSAxOwogCiAJZG1hX3Jlc3Zf dW5sb2NrKHJlc3YpOwogCXJldHVybiBnb2JqOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1k Z3B1X2dlbS5jCmluZGV4IDljZjRiZWFmNjQ2Yy4uMDc4MGU4ZDE4OTkyIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2dlbS5jCkBAIC04MjksNyArODI5LDggQEAgaW50IGFtZGdw dV9nZW1fb3BfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJYnJl YWs7CiAJfQogCWNhc2UgQU1ER1BVX0dFTV9PUF9TRVRfUExBQ0VNRU5UOgotCQlpZiAocm9iai0+ cHJpbWVfc2hhcmVkX2NvdW50ICYmIChhcmdzLT52YWx1ZSAmIEFNREdQVV9HRU1fRE9NQUlOX1ZS QU0pKSB7CisJCWlmIChyb2JqLT50Ym8uYmFzZS5pbXBvcnRfYXR0YWNoICYmCisJCSAgICBhcmdz LT52YWx1ZSAmIEFNREdQVV9HRU1fRE9NQUlOX1ZSQU0pIHsKIAkJCXIgPSAtRUlOVkFMOwogCQkJ YW1kZ3B1X2JvX3VucmVzZXJ2ZShyb2JqKTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X29iamVjdC5jIGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X29iamVjdC5jCmluZGV4IGI3YTIwNzBkOTBhZi4uZDEzNDkwOTc1YWMz IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfb2JqZWN0LmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X29iamVjdC5jCkBAIC04OTIs NyArODkyLDcgQEAgaW50IGFtZGdwdV9ib19waW5fcmVzdHJpY3RlZChzdHJ1Y3QgYW1kZ3B1X2Jv ICpibywgdTMyIGRvbWFpbiwKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBBIHNoYXJlZCBibyBj YW5ub3QgYmUgbWlncmF0ZWQgdG8gVlJBTSAqLwotCWlmIChiby0+cHJpbWVfc2hhcmVkX2NvdW50 IHx8IGJvLT50Ym8uYmFzZS5pbXBvcnRfYXR0YWNoKSB7CisJaWYgKGJvLT50Ym8uYmFzZS5pbXBv cnRfYXR0YWNoKSB7CiAJCWlmIChkb21haW4gJiBBTURHUFVfR0VNX0RPTUFJTl9HVFQpCiAJCQlk b21haW4gPSBBTURHUFVfR0VNX0RPTUFJTl9HVFQ7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuaCBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuaAppbmRleCAxMjZkZjAzYTcwNjYuLmMwM2RmZDI5OGY0 NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X29iamVjdC5o CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuaApAQCAtOTks NyArOTksNiBAQCBzdHJ1Y3QgYW1kZ3B1X2JvIHsKIAlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QJ dGJvOwogCXN0cnVjdCB0dG1fYm9fa21hcF9vYmoJCWttYXA7CiAJdTY0CQkJCWZsYWdzOwotCXVu c2lnbmVkCQkJcHJpbWVfc2hhcmVkX2NvdW50OwogCS8qIHBlciBWTSBzdHJ1Y3R1cmUgZm9yIHBh Z2UgdGFibGVzIGFuZCB3aXRoIHZpcnR1YWwgYWRkcmVzc2VzICovCiAJc3RydWN0IGFtZGdwdV92 bV9ib19iYXNlCSp2bV9ibzsKIAkvKiBDb25zdGFudCBhZnRlciBpbml0aWFsaXphdGlvbiAqLwot LSAKMi4yNS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwphbWQtZ2Z4IG1haWxpbmcgbGlzdAphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngK