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=-10.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 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 EBDAEC2B9F4 for ; Thu, 17 Jun 2021 21:09:15 +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 9B78B61351 for ; Thu, 17 Jun 2021 21:09:15 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9B78B61351 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 1CC266E0B9; Thu, 17 Jun 2021 21:09:15 +0000 (UTC) Received: from mail-ot1-x32a.google.com (mail-ot1-x32a.google.com [IPv6:2607:f8b0:4864:20::32a]) by gabe.freedesktop.org (Postfix) with ESMTPS id 530B16E0B9; Thu, 17 Jun 2021 21:09:14 +0000 (UTC) Received: by mail-ot1-x32a.google.com with SMTP id f3-20020a0568301c23b029044ce5da4794so941990ote.11; Thu, 17 Jun 2021 14:09:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=T1t5ixBhfU+YgoATEdeETMrWXi3D+eheoYh3m8rilvs=; b=GTugJAszOvZK3WBgCPvu9lklVWmg9fUOhzLn/Adiqfqm2e4sUFtElsRcmnnmo0mbGE CYVivq1NOCOBBdHhTbqg29f1kNhm47yV+yP7Jc0YNALnyCCxoM/FQbvke7RrdRVnCi80 gi+YK25ceqXEiZCcfIdCyEx2Y50CuHvbV4W6vaoDyfhTd/3TIoOKiRe9tkYe8i//PyWp U7dOIJn2Z5jjzCs02XtryTsHUqi3qawq9VZnZPYdqJa6lAXS1kR5LrIcmzzmenSDJG3x YsxsykhCd3/Rj078ljSq+qkPBTq9qFk4PL/vzIfJbBXq5h2c6heZgSdofpEYKPEWyEe0 l+0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=T1t5ixBhfU+YgoATEdeETMrWXi3D+eheoYh3m8rilvs=; b=W68LXI3TTozI42IeLENVSXg5qU3Pe6TIwJLO3NrYtGCpgeo6IP1zFydmBql3iMNHx/ zuBJB+OeXgQclWCHaV6h9SHwWxJ31K0ccwifJ34WZoG81YbP/dJHfhr6Z9eYUJUVQRag Kv2Havyfm6J4c1opCxav9dXm0BI8lBpAOD4VaVhfHPcJsfuSFwGcrGSTnFgcw5I7pWfn CwctO1yoGQ4aDyQ6tfqXaZ6He85CiKzIW29XShd/JW87N9I+ahD9XTS2bX26QQkGvsiU uywx/5GjT+4wiXaH4to9kjAVhHM94+HPgdiiBlwv8e/H33QkkVojghsCE/KeNQt0clbm xraA== X-Gm-Message-State: AOAM531z5G2mdAVlaLHg+6+jxHQdHPfnezte4zJE7E6pJcVMG8Ea4ots M7iYBVfNSImnzJ0Ns/o4rhwx97D5EwljgF1Dij4= X-Google-Smtp-Source: ABdhPJwi78AD8pVRr5taz6+b4kZzNSERcghLlPEpZIPhnSXAqohmaVxh1IfAuuQTJMhu9oj78BoXNeXJxB0MuObu+no= X-Received: by 2002:a05:6830:1e64:: with SMTP id m4mr6339671otr.23.1623964153469; Thu, 17 Jun 2021 14:09:13 -0700 (PDT) MIME-Version: 1.0 References: <20210614174536.5188-1-christian.koenig@amd.com> <20210614174536.5188-2-christian.koenig@amd.com> In-Reply-To: <20210614174536.5188-2-christian.koenig@amd.com> From: Alex Deucher Date: Thu, 17 Jun 2021 17:09:02 -0400 Message-ID: Subject: Re: [PATCH 2/2] drm/amdgpu: rework dma_resv handling v3 To: =?UTF-8?Q?Christian_K=C3=B6nig?= Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable 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: , Cc: amd-gfx list , Maling list - DRI developers Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" On Mon, Jun 14, 2021 at 1:45 PM Christian K=C3=B6nig wrote: > > 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=C3=B6nig Series is: Reviewed-by: Alex Deucher > --- > 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/dr= m/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_par= ser *p, > goto out; > } > > + amdgpu_bo_list_for_each_entry(e, p->bo_list) { > + struct amdgpu_bo *bo =3D ttm_to_amdgpu_bo(e->tv.bo); > + > + e->bo_va =3D amdgpu_vm_bo_find(vm, bo); > + > + if (bo->tbo.base.dma_buf && !amdgpu_bo_explicit_sync(bo))= { > + e->chain =3D dma_fence_chain_alloc(); > + if (!e->chain) { > + r =3D -ENOMEM; > + goto error_validate; > + } > + } > + } > + > amdgpu_cs_get_threshold_for_moves(p->adev, &p->bytes_moved_thresh= old, > &p->bytes_moved_vis_threshold); > p->bytes_moved =3D 0; > @@ -599,15 +613,6 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_par= ser *p, > gws =3D p->bo_list->gws_obj; > oa =3D p->bo_list->oa_obj; > > - amdgpu_bo_list_for_each_entry(e, p->bo_list) { > - struct amdgpu_bo *bo =3D 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 =3D 0; > - e->bo_va =3D amdgpu_vm_bo_find(vm, bo); > - } > - > if (gds) { > p->job->gds_base =3D amdgpu_bo_gpu_offset(gds) >> PAGE_SH= IFT; > p->job->gds_size =3D amdgpu_bo_size(gds) >> PAGE_SHIFT; > @@ -629,8 +634,13 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_par= ser *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 =3D 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_p= arser *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 =3D NULL; > + } > + > ttm_eu_backoff_reservation(&parser->ticket, > &parser->validated); > + } > > for (i =3D 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_parse= r *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 =3D e->tv.bo->base.resv; > + struct dma_fence_chain *chain =3D e->chain; > + > + if (!chain) > + continue; > + > + /* > + * Work around dma_resv shortcommings by wrapping up the > + * submission in a dma_fence_chain and add it as exclusiv= e > + * fence, but first add the submission as shared fence to= make > + * sure that shared fences never signal before the exclus= ive > + * 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 =3D 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/dr= m/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 =3D dma_resv_get_fences(obj, NULL, &count, &fences); > - if (r) > - return r; > - > - if (count =3D=3D 0) { > - /* Now that was unexpected. */ > - } else if (count =3D=3D 1) { > - dma_resv_add_excl_fence(obj, fences[0]); > - dma_fence_put(fences[0]); > - kfree(fences); > - } else { > - struct dma_fence_array *array; > - > - array =3D 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 *dmab= uf, > if (r < 0) > goto out; > > - r =3D amdgpu_bo_reserve(bo, false); > - if (unlikely(r !=3D 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 =3D __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 *dmab= uf, > struct amdgpu_bo *bo =3D gem_to_amdgpu_bo(obj); > struct amdgpu_device *adev =3D amdgpu_ttm_adev(bo->tbo.bdev); > > - if (attach->dev->driver !=3D adev->dev->driver && bo->prime_share= d_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, str= uct dma_buf *dma_buf) > bo =3D gem_to_amdgpu_bo(gobj); > bo->allowed_domains =3D AMDGPU_GEM_DOMAIN_GTT; > bo->preferred_domains =3D AMDGPU_GEM_DOMAIN_GTT; > - if (dma_buf->ops !=3D &amdgpu_dmabuf_ops) > - bo->prime_shared_count =3D 1; > > dma_resv_unlock(resv); > return gobj; > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/am= d/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 =3D -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, u3= 2 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 =3D 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 > > _______________________________________________ > amd-gfx mailing list > amd-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/amd-gfx 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=-10.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 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 C2AC6C2B9F4 for ; Thu, 17 Jun 2021 21:09:18 +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 79AB461164 for ; Thu, 17 Jun 2021 21:09:18 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 79AB461164 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 ACB896E950; Thu, 17 Jun 2021 21:09:15 +0000 (UTC) Received: from mail-ot1-x32a.google.com (mail-ot1-x32a.google.com [IPv6:2607:f8b0:4864:20::32a]) by gabe.freedesktop.org (Postfix) with ESMTPS id 530B16E0B9; Thu, 17 Jun 2021 21:09:14 +0000 (UTC) Received: by mail-ot1-x32a.google.com with SMTP id f3-20020a0568301c23b029044ce5da4794so941990ote.11; Thu, 17 Jun 2021 14:09:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=T1t5ixBhfU+YgoATEdeETMrWXi3D+eheoYh3m8rilvs=; b=GTugJAszOvZK3WBgCPvu9lklVWmg9fUOhzLn/Adiqfqm2e4sUFtElsRcmnnmo0mbGE CYVivq1NOCOBBdHhTbqg29f1kNhm47yV+yP7Jc0YNALnyCCxoM/FQbvke7RrdRVnCi80 gi+YK25ceqXEiZCcfIdCyEx2Y50CuHvbV4W6vaoDyfhTd/3TIoOKiRe9tkYe8i//PyWp U7dOIJn2Z5jjzCs02XtryTsHUqi3qawq9VZnZPYdqJa6lAXS1kR5LrIcmzzmenSDJG3x YsxsykhCd3/Rj078ljSq+qkPBTq9qFk4PL/vzIfJbBXq5h2c6heZgSdofpEYKPEWyEe0 l+0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=T1t5ixBhfU+YgoATEdeETMrWXi3D+eheoYh3m8rilvs=; b=W68LXI3TTozI42IeLENVSXg5qU3Pe6TIwJLO3NrYtGCpgeo6IP1zFydmBql3iMNHx/ zuBJB+OeXgQclWCHaV6h9SHwWxJ31K0ccwifJ34WZoG81YbP/dJHfhr6Z9eYUJUVQRag Kv2Havyfm6J4c1opCxav9dXm0BI8lBpAOD4VaVhfHPcJsfuSFwGcrGSTnFgcw5I7pWfn CwctO1yoGQ4aDyQ6tfqXaZ6He85CiKzIW29XShd/JW87N9I+ahD9XTS2bX26QQkGvsiU uywx/5GjT+4wiXaH4to9kjAVhHM94+HPgdiiBlwv8e/H33QkkVojghsCE/KeNQt0clbm xraA== X-Gm-Message-State: AOAM531z5G2mdAVlaLHg+6+jxHQdHPfnezte4zJE7E6pJcVMG8Ea4ots M7iYBVfNSImnzJ0Ns/o4rhwx97D5EwljgF1Dij4= X-Google-Smtp-Source: ABdhPJwi78AD8pVRr5taz6+b4kZzNSERcghLlPEpZIPhnSXAqohmaVxh1IfAuuQTJMhu9oj78BoXNeXJxB0MuObu+no= X-Received: by 2002:a05:6830:1e64:: with SMTP id m4mr6339671otr.23.1623964153469; Thu, 17 Jun 2021 14:09:13 -0700 (PDT) MIME-Version: 1.0 References: <20210614174536.5188-1-christian.koenig@amd.com> <20210614174536.5188-2-christian.koenig@amd.com> In-Reply-To: <20210614174536.5188-2-christian.koenig@amd.com> From: Alex Deucher Date: Thu, 17 Jun 2021 17:09:02 -0400 Message-ID: Subject: Re: [PATCH 2/2] drm/amdgpu: rework dma_resv handling v3 To: =?UTF-8?Q?Christian_K=C3=B6nig?= 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: , Cc: amd-gfx list , Maling list - DRI developers , Daniel Vetter Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: amd-gfx-bounces@lists.freedesktop.org Sender: "amd-gfx" T24gTW9uLCBKdW4gMTQsIDIwMjEgYXQgMTo0NSBQTSBDaHJpc3RpYW4gS8O2bmlnCjxja29lbmln LmxlaWNodHp1bWVya2VuQGdtYWlsLmNvbT4gd3JvdGU6Cj4KPiBEcm9wIHRoZSB3b3JrYXJvdW5k IGFuZCBpbnN0ZWFkIGltcGxlbWVudCBhIGJldHRlciBzb2x1dGlvbi4KPgo+IEJhc2ljYWxseSB3 ZSBhcmUgbm93IGNoYWluaW5nIGFsbCBzdWJtaXNzaW9ucyB1c2luZyBhIGRtYV9mZW5jZV9jaGFp bgo+IGNvbnRhaW5lciBhbmQgYWRkaW5nIHRoZW0gYXMgZXhjbHVzaXZlIGZlbmNlIHRvIHRoZSBk bWFfcmVzdiBvYmplY3QuCj4KPiBUaGlzIHdheSBvdGhlciBkcml2ZXJzIGNhbiBzdGlsbCBzeW5j IHRvIHRoZSBzaW5nbGUgZXhjbHVzaXZlIGZlbmNlCj4gd2hpbGUgYW1kZ3B1IG9ubHkgc3luYyB0 byBmZW5jZXMgZnJvbSBkaWZmZXJlbnQgcHJvY2Vzc2VzLgo+Cj4gdjM6IGFkZCB0aGUgc2hhcmVk IGZlbmNlIGZpcnN0IGJlZm9yZSB0aGUgZXhjbHVzaXZlIG9uZQo+Cj4gU2lnbmVkLW9mZi1ieTog Q2hyaXN0aWFuIEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29tPgoKU2VyaWVzIGlzOgpS ZXZpZXdlZC1ieTogQWxleCBEZXVjaGVyIDxhbGV4YW5kZXIuZGV1Y2hlckBhbWQuY29tPgoKPiAt LS0KPiAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2JvX2xpc3QuaCB8ICAxICsK PiAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2NzLmMgICAgICB8IDYyICsrKysr KysrKysrKysrKystLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kbWFf YnVmLmMgfCA2NSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1X2dlbS5jICAgICB8ICAzICstCj4gIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9vYmplY3QuYyAgfCAgMiArLQo+ICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfb2JqZWN0LmggIHwgIDEgLQo+ICA2IGZpbGVzIGNoYW5nZWQsIDU1IGluc2VydGlv bnMoKyksIDc5IGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdV9ib19saXN0LmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfYm9fbGlzdC5oCj4gaW5kZXggYTEzMGU3NjZjYmRiLi5jOTA1YTRjZmMxNzMgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2JvX2xpc3QuaAo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9ib19saXN0LmgKPiBAQCAtMzQs NiArMzQsNyBAQCBzdHJ1Y3QgYW1kZ3B1X2Zwcml2Owo+ICBzdHJ1Y3QgYW1kZ3B1X2JvX2xpc3Rf ZW50cnkgewo+ICAgICAgICAgc3RydWN0IHR0bV92YWxpZGF0ZV9idWZmZXIgICAgICB0djsKPiAg ICAgICAgIHN0cnVjdCBhbWRncHVfYm9fdmEgICAgICAgICAgICAgKmJvX3ZhOwo+ICsgICAgICAg c3RydWN0IGRtYV9mZW5jZV9jaGFpbiAgICAgICAgICAqY2hhaW47Cj4gICAgICAgICB1aW50MzJf dCAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXR5Owo+ICAgICAgICAgc3RydWN0IHBhZ2Ug ICAgICAgICAgICAgICAgICAgICAqKnVzZXJfcGFnZXM7Cj4gICAgICAgICBib29sICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVzZXJfaW52YWxpZGF0ZWQ7Cj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1X2NzLmMKPiBpbmRleCA5Y2U2NDlhMWE4ZDMuLjI1NjU1NDE0ZTljMCAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfY3MuYwo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5jCj4gQEAgLTU3Miw2ICs1NzIs MjAgQEAgc3RhdGljIGludCBhbWRncHVfY3NfcGFyc2VyX2JvcyhzdHJ1Y3QgYW1kZ3B1X2NzX3Bh cnNlciAqcCwKPiAgICAgICAgICAgICAgICAgZ290byBvdXQ7Cj4gICAgICAgICB9Cj4KPiArICAg ICAgIGFtZGdwdV9ib19saXN0X2Zvcl9lYWNoX2VudHJ5KGUsIHAtPmJvX2xpc3QpIHsKPiArICAg ICAgICAgICAgICAgc3RydWN0IGFtZGdwdV9ibyAqYm8gPSB0dG1fdG9fYW1kZ3B1X2JvKGUtPnR2 LmJvKTsKPiArCj4gKyAgICAgICAgICAgICAgIGUtPmJvX3ZhID0gYW1kZ3B1X3ZtX2JvX2ZpbmQo dm0sIGJvKTsKPiArCj4gKyAgICAgICAgICAgICAgIGlmIChiby0+dGJvLmJhc2UuZG1hX2J1ZiAm JiAhYW1kZ3B1X2JvX2V4cGxpY2l0X3N5bmMoYm8pKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAg ICAgZS0+Y2hhaW4gPSBkbWFfZmVuY2VfY2hhaW5fYWxsb2MoKTsKPiArICAgICAgICAgICAgICAg ICAgICAgICBpZiAoIWUtPmNoYWluKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByID0gLUVOT01FTTsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJy b3JfdmFsaWRhdGU7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICAg ICB9Cj4gKyAgICAgICB9Cj4gKwo+ICAgICAgICAgYW1kZ3B1X2NzX2dldF90aHJlc2hvbGRfZm9y X21vdmVzKHAtPmFkZXYsICZwLT5ieXRlc19tb3ZlZF90aHJlc2hvbGQsCj4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnAtPmJ5dGVzX21vdmVkX3Zpc190aHJlc2hv bGQpOwo+ICAgICAgICAgcC0+Ynl0ZXNfbW92ZWQgPSAwOwo+IEBAIC01OTksMTUgKzYxMyw2IEBA IHN0YXRpYyBpbnQgYW1kZ3B1X2NzX3BhcnNlcl9ib3Moc3RydWN0IGFtZGdwdV9jc19wYXJzZXIg KnAsCj4gICAgICAgICBnd3MgPSBwLT5ib19saXN0LT5nd3Nfb2JqOwo+ICAgICAgICAgb2EgPSBw LT5ib19saXN0LT5vYV9vYmo7Cj4KPiAtICAgICAgIGFtZGdwdV9ib19saXN0X2Zvcl9lYWNoX2Vu dHJ5KGUsIHAtPmJvX2xpc3QpIHsKPiAtICAgICAgICAgICAgICAgc3RydWN0IGFtZGdwdV9ibyAq Ym8gPSB0dG1fdG9fYW1kZ3B1X2JvKGUtPnR2LmJvKTsKPiAtCj4gLSAgICAgICAgICAgICAgIC8q IE1ha2Ugc3VyZSB3ZSB1c2UgdGhlIGV4Y2x1c2l2ZSBzbG90IGZvciBzaGFyZWQgQk9zICovCj4g LSAgICAgICAgICAgICAgIGlmIChiby0+cHJpbWVfc2hhcmVkX2NvdW50KQo+IC0gICAgICAgICAg ICAgICAgICAgICAgIGUtPnR2Lm51bV9zaGFyZWQgPSAwOwo+IC0gICAgICAgICAgICAgICBlLT5i b192YSA9IGFtZGdwdV92bV9ib19maW5kKHZtLCBibyk7Cj4gLSAgICAgICB9Cj4gLQo+ICAgICAg ICAgaWYgKGdkcykgewo+ICAgICAgICAgICAgICAgICBwLT5qb2ItPmdkc19iYXNlID0gYW1kZ3B1 X2JvX2dwdV9vZmZzZXQoZ2RzKSA+PiBQQUdFX1NISUZUOwo+ICAgICAgICAgICAgICAgICBwLT5q b2ItPmdkc19zaXplID0gYW1kZ3B1X2JvX3NpemUoZ2RzKSA+PiBQQUdFX1NISUZUOwo+IEBAIC02 MjksOCArNjM0LDEzIEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2NzX3BhcnNlcl9ib3Moc3RydWN0IGFt ZGdwdV9jc19wYXJzZXIgKnAsCj4gICAgICAgICB9Cj4KPiAgZXJyb3JfdmFsaWRhdGU6Cj4gLSAg ICAgICBpZiAocikKPiArICAgICAgIGlmIChyKSB7Cj4gKyAgICAgICAgICAgICAgIGFtZGdwdV9i b19saXN0X2Zvcl9lYWNoX2VudHJ5KGUsIHAtPmJvX2xpc3QpIHsKPiArICAgICAgICAgICAgICAg ICAgICAgICBkbWFfZmVuY2VfY2hhaW5fZnJlZShlLT5jaGFpbik7Cj4gKyAgICAgICAgICAgICAg ICAgICAgICAgZS0+Y2hhaW4gPSBOVUxMOwo+ICsgICAgICAgICAgICAgICB9Cj4gICAgICAgICAg ICAgICAgIHR0bV9ldV9iYWNrb2ZmX3Jlc2VydmF0aW9uKCZwLT50aWNrZXQsICZwLT52YWxpZGF0 ZWQpOwo+ICsgICAgICAgfQo+ICBvdXQ6Cj4gICAgICAgICByZXR1cm4gcjsKPiAgfQo+IEBAIC02 NzAsOSArNjgwLDE3IEBAIHN0YXRpYyB2b2lkIGFtZGdwdV9jc19wYXJzZXJfZmluaShzdHJ1Y3Qg YW1kZ3B1X2NzX3BhcnNlciAqcGFyc2VyLCBpbnQgZXJyb3IsCj4gIHsKPiAgICAgICAgIHVuc2ln bmVkIGk7Cj4KPiAtICAgICAgIGlmIChlcnJvciAmJiBiYWNrb2ZmKQo+ICsgICAgICAgaWYgKGVy cm9yICYmIGJhY2tvZmYpIHsKPiArICAgICAgICAgICAgICAgc3RydWN0IGFtZGdwdV9ib19saXN0 X2VudHJ5ICplOwo+ICsKPiArICAgICAgICAgICAgICAgYW1kZ3B1X2JvX2xpc3RfZm9yX2VhY2hf ZW50cnkoZSwgcGFyc2VyLT5ib19saXN0KSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgZG1h X2ZlbmNlX2NoYWluX2ZyZWUoZS0+Y2hhaW4pOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGUt PmNoYWluID0gTlVMTDsKPiArICAgICAgICAgICAgICAgfQo+ICsKPiAgICAgICAgICAgICAgICAg dHRtX2V1X2JhY2tvZmZfcmVzZXJ2YXRpb24oJnBhcnNlci0+dGlja2V0LAo+ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGFyc2VyLT52YWxpZGF0ZWQpOwo+ICsg ICAgICAgfQo+Cj4gICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFyc2VyLT5udW1fcG9zdF9kZXBz OyBpKyspIHsKPiAgICAgICAgICAgICAgICAgZHJtX3N5bmNvYmpfcHV0KHBhcnNlci0+cG9zdF9k ZXBzW2ldLnN5bmNvYmopOwo+IEBAIC0xMjQ1LDYgKzEyNjMsMjggQEAgc3RhdGljIGludCBhbWRn cHVfY3Nfc3VibWl0KHN0cnVjdCBhbWRncHVfY3NfcGFyc2VyICpwLAo+Cj4gICAgICAgICBhbWRn cHVfdm1fbW92ZV90b19scnVfdGFpbChwLT5hZGV2LCAmZnByaXYtPnZtKTsKPgo+ICsgICAgICAg YW1kZ3B1X2JvX2xpc3RfZm9yX2VhY2hfZW50cnkoZSwgcC0+Ym9fbGlzdCkgewo+ICsgICAgICAg ICAgICAgICBzdHJ1Y3QgZG1hX3Jlc3YgKnJlc3YgPSBlLT50di5iby0+YmFzZS5yZXN2Owo+ICsg ICAgICAgICAgICAgICBzdHJ1Y3QgZG1hX2ZlbmNlX2NoYWluICpjaGFpbiA9IGUtPmNoYWluOwo+ ICsKPiArICAgICAgICAgICAgICAgaWYgKCFjaGFpbikKPiArICAgICAgICAgICAgICAgICAgICAg ICBjb250aW51ZTsKPiArCj4gKyAgICAgICAgICAgICAgIC8qCj4gKyAgICAgICAgICAgICAgICAq IFdvcmsgYXJvdW5kIGRtYV9yZXN2IHNob3J0Y29tbWluZ3MgYnkgd3JhcHBpbmcgdXAgdGhlCj4g KyAgICAgICAgICAgICAgICAqIHN1Ym1pc3Npb24gaW4gYSBkbWFfZmVuY2VfY2hhaW4gYW5kIGFk ZCBpdCBhcyBleGNsdXNpdmUKPiArICAgICAgICAgICAgICAgICogZmVuY2UsIGJ1dCBmaXJzdCBh ZGQgdGhlIHN1Ym1pc3Npb24gYXMgc2hhcmVkIGZlbmNlIHRvIG1ha2UKPiArICAgICAgICAgICAg ICAgICogc3VyZSB0aGF0IHNoYXJlZCBmZW5jZXMgbmV2ZXIgc2lnbmFsIGJlZm9yZSB0aGUgZXhj bHVzaXZlCj4gKyAgICAgICAgICAgICAgICAqIG9uZS4KPiArICAgICAgICAgICAgICAgICovCj4g KyAgICAgICAgICAgICAgIGRtYV9mZW5jZV9jaGFpbl9pbml0KGNoYWluLCBkbWFfcmVzdl9leGNs X2ZlbmNlKHJlc3YpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWFf ZmVuY2VfZ2V0KHAtPmZlbmNlKSwgMSk7Cj4gKwo+ICsgICAgICAgICAgICAgICBkbWFfcmVzdl9h ZGRfc2hhcmVkX2ZlbmNlKHJlc3YsIHAtPmZlbmNlKTsKPiArICAgICAgICAgICAgICAgcmN1X2Fz c2lnbl9wb2ludGVyKHJlc3YtPmZlbmNlX2V4Y2wsICZjaGFpbi0+YmFzZSk7Cj4gKyAgICAgICAg ICAgICAgIGUtPmNoYWluID0gTlVMTDsKPiArICAgICAgIH0KPiArCj4gICAgICAgICB0dG1fZXVf ZmVuY2VfYnVmZmVyX29iamVjdHMoJnAtPnRpY2tldCwgJnAtPnZhbGlkYXRlZCwgcC0+ZmVuY2Up Owo+ICAgICAgICAgbXV0ZXhfdW5sb2NrKCZwLT5hZGV2LT5ub3RpZmllcl9sb2NrKTsKPgo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZG1hX2J1Zi5jIGIv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RtYV9idWYuYwo+IGluZGV4IGMzMDUz YjgzYjgwYy4uMjMyMTlmYzNiMjhjIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV9kbWFfYnVmLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfZG1hX2J1Zi5jCj4gQEAgLTQyLDQ4ICs0Miw2IEBACj4gICNpbmNsdWRlIDxsaW51 eC9wY2ktcDJwZG1hLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+Cj4KPiAtc3Rh dGljIGludAo+IC1fX2RtYV9yZXN2X21ha2VfZXhjbHVzaXZlKHN0cnVjdCBkbWFfcmVzdiAqb2Jq KQo+IC17Cj4gLSAgICAgICBzdHJ1Y3QgZG1hX2ZlbmNlICoqZmVuY2VzOwo+IC0gICAgICAgdW5z aWduZWQgaW50IGNvdW50Owo+IC0gICAgICAgaW50IHI7Cj4gLQo+IC0gICAgICAgaWYgKCFkbWFf cmVzdl9zaGFyZWRfbGlzdChvYmopKSAvKiBubyBzaGFyZWQgZmVuY2VzIHRvIGNvbnZlcnQgKi8K PiAtICAgICAgICAgICAgICAgcmV0dXJuIDA7Cj4gLQo+IC0gICAgICAgciA9IGRtYV9yZXN2X2dl dF9mZW5jZXMob2JqLCBOVUxMLCAmY291bnQsICZmZW5jZXMpOwo+IC0gICAgICAgaWYgKHIpCj4g LSAgICAgICAgICAgICAgIHJldHVybiByOwo+IC0KPiAtICAgICAgIGlmIChjb3VudCA9PSAwKSB7 Cj4gLSAgICAgICAgICAgICAgIC8qIE5vdyB0aGF0IHdhcyB1bmV4cGVjdGVkLiAqLwo+IC0gICAg ICAgfSBlbHNlIGlmIChjb3VudCA9PSAxKSB7Cj4gLSAgICAgICAgICAgICAgIGRtYV9yZXN2X2Fk ZF9leGNsX2ZlbmNlKG9iaiwgZmVuY2VzWzBdKTsKPiAtICAgICAgICAgICAgICAgZG1hX2ZlbmNl X3B1dChmZW5jZXNbMF0pOwo+IC0gICAgICAgICAgICAgICBrZnJlZShmZW5jZXMpOwo+IC0gICAg ICAgfSBlbHNlIHsKPiAtICAgICAgICAgICAgICAgc3RydWN0IGRtYV9mZW5jZV9hcnJheSAqYXJy YXk7Cj4gLQo+IC0gICAgICAgICAgICAgICBhcnJheSA9IGRtYV9mZW5jZV9hcnJheV9jcmVhdGUo Y291bnQsIGZlbmNlcywKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRtYV9mZW5jZV9jb250ZXh0X2FsbG9jKDEpLCAwLAo+IC0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpOwo+IC0gICAgICAgICAgICAgICBp ZiAoIWFycmF5KQo+IC0gICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyX2ZlbmNlc19wdXQ7 Cj4gLQo+IC0gICAgICAgICAgICAgICBkbWFfcmVzdl9hZGRfZXhjbF9mZW5jZShvYmosICZhcnJh eS0+YmFzZSk7Cj4gLSAgICAgICAgICAgICAgIGRtYV9mZW5jZV9wdXQoJmFycmF5LT5iYXNlKTsK PiAtICAgICAgIH0KPiAtCj4gLSAgICAgICByZXR1cm4gMDsKPiAtCj4gLWVycl9mZW5jZXNfcHV0 Ogo+IC0gICAgICAgd2hpbGUgKGNvdW50LS0pCj4gLSAgICAgICAgICAgICAgIGRtYV9mZW5jZV9w dXQoZmVuY2VzW2NvdW50XSk7Cj4gLSAgICAgICBrZnJlZShmZW5jZXMpOwo+IC0gICAgICAgcmV0 dXJuIC1FTk9NRU07Cj4gLX0KPiAtCj4gIC8qKgo+ICAgKiBhbWRncHVfZG1hX2J1Zl9hdHRhY2gg LSAmZG1hX2J1Zl9vcHMuYXR0YWNoIGltcGxlbWVudGF0aW9uCj4gICAqCj4gQEAgLTExMCwyNCAr NjgsNiBAQCBzdGF0aWMgaW50IGFtZGdwdV9kbWFfYnVmX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAq ZG1hYnVmLAo+ICAgICAgICAgaWYgKHIgPCAwKQo+ICAgICAgICAgICAgICAgICBnb3RvIG91dDsK Pgo+IC0gICAgICAgciA9IGFtZGdwdV9ib19yZXNlcnZlKGJvLCBmYWxzZSk7Cj4gLSAgICAgICBp ZiAodW5saWtlbHkociAhPSAwKSkKPiAtICAgICAgICAgICAgICAgZ290byBvdXQ7Cj4gLQo+IC0g ICAgICAgLyoKPiAtICAgICAgICAqIFdlIG9ubHkgY3JlYXRlIHNoYXJlZCBmZW5jZXMgZm9yIGlu dGVybmFsIHVzZSwgYnV0IGltcG9ydGVycwo+IC0gICAgICAgICogb2YgdGhlIGRtYWJ1ZiByZWx5 IG9uIGV4Y2x1c2l2ZSBmZW5jZXMgZm9yIGltcGxpY2l0bHkKPiAtICAgICAgICAqIHRyYWNraW5n IHdyaXRlIGhhemFyZHMuIEFzIGFueSBvZiB0aGUgY3VycmVudCBmZW5jZXMgbWF5Cj4gLSAgICAg ICAgKiBjb3JyZXNwb25kIHRvIGEgd3JpdGUsIHdlIG5lZWQgdG8gY29udmVydCBhbGwgZXhpc3Rp bmcKPiAtICAgICAgICAqIGZlbmNlcyBvbiB0aGUgcmVzZXJ2YXRpb24gb2JqZWN0IGludG8gYSBz aW5nbGUgZXhjbHVzaXZlCj4gLSAgICAgICAgKiBmZW5jZS4KPiAtICAgICAgICAqLwo+IC0gICAg ICAgciA9IF9fZG1hX3Jlc3ZfbWFrZV9leGNsdXNpdmUoYm8tPnRiby5iYXNlLnJlc3YpOwo+IC0g ICAgICAgaWYgKHIpCj4gLSAgICAgICAgICAgICAgIGdvdG8gb3V0Owo+IC0KPiAtICAgICAgIGJv LT5wcmltZV9zaGFyZWRfY291bnQrKzsKPiAtICAgICAgIGFtZGdwdV9ib191bnJlc2VydmUoYm8p Owo+ICAgICAgICAgcmV0dXJuIDA7Cj4KPiAgb3V0Ogo+IEBAIC0xNTAsOSArOTAsNiBAQCBzdGF0 aWMgdm9pZCBhbWRncHVfZG1hX2J1Zl9kZXRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKPiAg ICAgICAgIHN0cnVjdCBhbWRncHVfYm8gKmJvID0gZ2VtX3RvX2FtZGdwdV9ibyhvYmopOwo+ICAg ICAgICAgc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBhbWRncHVfdHRtX2FkZXYoYm8tPnRi by5iZGV2KTsKPgo+IC0gICAgICAgaWYgKGF0dGFjaC0+ZGV2LT5kcml2ZXIgIT0gYWRldi0+ZGV2 LT5kcml2ZXIgJiYgYm8tPnByaW1lX3NoYXJlZF9jb3VudCkKPiAtICAgICAgICAgICAgICAgYm8t PnByaW1lX3NoYXJlZF9jb3VudC0tOwo+IC0KPiAgICAgICAgIHBtX3J1bnRpbWVfbWFya19sYXN0 X2J1c3koYWRldl90b19kcm0oYWRldiktPmRldik7Cj4gICAgICAgICBwbV9ydW50aW1lX3B1dF9h dXRvc3VzcGVuZChhZGV2X3RvX2RybShhZGV2KS0+ZGV2KTsKPiAgfQo+IEBAIC00MDYsOCArMzQz LDYgQEAgYW1kZ3B1X2RtYV9idWZfY3JlYXRlX29iaihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBz dHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZikKPiAgICAgICAgIGJvID0gZ2VtX3RvX2FtZGdwdV9ibyhn b2JqKTsKPiAgICAgICAgIGJvLT5hbGxvd2VkX2RvbWFpbnMgPSBBTURHUFVfR0VNX0RPTUFJTl9H VFQ7Cj4gICAgICAgICBiby0+cHJlZmVycmVkX2RvbWFpbnMgPSBBTURHUFVfR0VNX0RPTUFJTl9H VFQ7Cj4gLSAgICAgICBpZiAoZG1hX2J1Zi0+b3BzICE9ICZhbWRncHVfZG1hYnVmX29wcykKPiAt ICAgICAgICAgICAgICAgYm8tPnByaW1lX3NoYXJlZF9jb3VudCA9IDE7Cj4KPiAgICAgICAgIGRt YV9yZXN2X3VubG9jayhyZXN2KTsKPiAgICAgICAgIHJldHVybiBnb2JqOwo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9hbWRncHVfZ2VtLmMKPiBpbmRleCA5Y2Y0YmVhZjY0NmMuLjA3ODBlOGQx ODk5MiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ2Vt LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ2VtLmMKPiBAQCAt ODI5LDcgKzgyOSw4IEBAIGludCBhbWRncHVfZ2VtX29wX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHZvaWQgKmRhdGEsCj4gICAgICAgICAgICAgICAgIGJyZWFrOwo+ICAgICAgICAgfQo+ ICAgICAgICAgY2FzZSBBTURHUFVfR0VNX09QX1NFVF9QTEFDRU1FTlQ6Cj4gLSAgICAgICAgICAg ICAgIGlmIChyb2JqLT5wcmltZV9zaGFyZWRfY291bnQgJiYgKGFyZ3MtPnZhbHVlICYgQU1ER1BV X0dFTV9ET01BSU5fVlJBTSkpIHsKPiArICAgICAgICAgICAgICAgaWYgKHJvYmotPnRiby5iYXNl LmltcG9ydF9hdHRhY2ggJiYKPiArICAgICAgICAgICAgICAgICAgIGFyZ3MtPnZhbHVlICYgQU1E R1BVX0dFTV9ET01BSU5fVlJBTSkgewo+ICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAtRUlO VkFMOwo+ICAgICAgICAgICAgICAgICAgICAgICAgIGFtZGdwdV9ib191bnJlc2VydmUocm9iaik7 Cj4gICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV9vYmplY3QuYwo+IGluZGV4IGI3YTIwNzBkOTBhZi4uZDEzNDkwOTc1YWMz IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3Qu Ywo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuYwo+IEBA IC04OTIsNyArODkyLDcgQEAgaW50IGFtZGdwdV9ib19waW5fcmVzdHJpY3RlZChzdHJ1Y3QgYW1k Z3B1X2JvICpibywgdTMyIGRvbWFpbiwKPiAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7 Cj4KPiAgICAgICAgIC8qIEEgc2hhcmVkIGJvIGNhbm5vdCBiZSBtaWdyYXRlZCB0byBWUkFNICov Cj4gLSAgICAgICBpZiAoYm8tPnByaW1lX3NoYXJlZF9jb3VudCB8fCBiby0+dGJvLmJhc2UuaW1w b3J0X2F0dGFjaCkgewo+ICsgICAgICAgaWYgKGJvLT50Ym8uYmFzZS5pbXBvcnRfYXR0YWNoKSB7 Cj4gICAgICAgICAgICAgICAgIGlmIChkb21haW4gJiBBTURHUFVfR0VNX0RPTUFJTl9HVFQpCj4g ICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluID0gQU1ER1BVX0dFTV9ET01BSU5fR1RUOwo+ ICAgICAgICAgICAgICAgICBlbHNlCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV9vYmplY3QuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdw dV9vYmplY3QuaAo+IGluZGV4IDEyNmRmMDNhNzA2Ni4uYzAzZGZkMjk4ZjQ1IDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuaAo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuaAo+IEBAIC05OSw3ICs5OSw2 IEBAIHN0cnVjdCBhbWRncHVfYm8gewo+ICAgICAgICAgc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0 ICAgICAgICB0Ym87Cj4gICAgICAgICBzdHJ1Y3QgdHRtX2JvX2ttYXBfb2JqICAgICAgICAgIGtt YXA7Cj4gICAgICAgICB1NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzOwo+IC0g ICAgICAgdW5zaWduZWQgICAgICAgICAgICAgICAgICAgICAgICBwcmltZV9zaGFyZWRfY291bnQ7 Cj4gICAgICAgICAvKiBwZXIgVk0gc3RydWN0dXJlIGZvciBwYWdlIHRhYmxlcyBhbmQgd2l0aCB2 aXJ0dWFsIGFkZHJlc3NlcyAqLwo+ICAgICAgICAgc3RydWN0IGFtZGdwdV92bV9ib19iYXNlICAg ICAgICAqdm1fYm87Cj4gICAgICAgICAvKiBDb25zdGFudCBhZnRlciBpbml0aWFsaXphdGlvbiAq Lwo+IC0tCj4gMi4yNS4xCj4KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwo+IGFtZC1nZnggbWFpbGluZyBsaXN0Cj4gYW1kLWdmeEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2FtZC1nZngKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K YW1kLWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg==