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=-16.7 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 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 B8DBDC07E99 for ; Mon, 12 Jul 2021 09:19:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 9D88C61008 for ; Mon, 12 Jul 2021 09:19:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1352805AbhGLJWI (ORCPT ); Mon, 12 Jul 2021 05:22:08 -0400 Received: from foss.arm.com ([217.140.110.172]:51972 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1352830AbhGLJWH (ORCPT ); Mon, 12 Jul 2021 05:22:07 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 6C9B81FB; Mon, 12 Jul 2021 02:19:19 -0700 (PDT) Received: from [192.168.1.179] (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id C37623F694; Mon, 12 Jul 2021 02:19:17 -0700 (PDT) Subject: Re: [PATCH v3 07/20] drm/panfrost: use scheduler dependency tracking To: Daniel Vetter , DRI Development Cc: Intel Graphics Development , Daniel Vetter , Rob Herring , Tomeu Vizoso , Alyssa Rosenzweig , Sumit Semwal , =?UTF-8?Q?Christian_K=c3=b6nig?= , linux-media@vger.kernel.org, linaro-mm-sig@lists.linaro.org References: <20210708173754.3877540-1-daniel.vetter@ffwll.ch> <20210708173754.3877540-8-daniel.vetter@ffwll.ch> From: Steven Price Message-ID: Date: Mon, 12 Jul 2021 10:19:12 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: <20210708173754.3877540-8-daniel.vetter@ffwll.ch> Content-Type: text/plain; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org On 08/07/2021 18:37, Daniel Vetter wrote: > Just deletes some code that's now more shared. > > Note that thanks to the split into drm_sched_job_init/arm we can now > easily pull the _init() part from under the submission lock way ahead > where we're adding the sync file in-fences as dependencies. > > v2: Correctly clean up the partially set up job, now that job_init() > and job_arm() are apart (Emma). > > Reviewed-by: Steven Price (v1) v2/v3 are also: Reviewed-by: Steven Price Thanks, Steve > Signed-off-by: Daniel Vetter > Cc: Rob Herring > Cc: Tomeu Vizoso > Cc: Steven Price > Cc: Alyssa Rosenzweig > Cc: Sumit Semwal > Cc: "Christian König" > Cc: linux-media@vger.kernel.org > Cc: linaro-mm-sig@lists.linaro.org > --- > drivers/gpu/drm/panfrost/panfrost_drv.c | 16 ++++++++--- > drivers/gpu/drm/panfrost/panfrost_job.c | 37 +++---------------------- > drivers/gpu/drm/panfrost/panfrost_job.h | 5 +--- > 3 files changed, 17 insertions(+), 41 deletions(-) > > diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c > index 1ffaef5ec5ff..9f53bea07d61 100644 > --- a/drivers/gpu/drm/panfrost/panfrost_drv.c > +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c > @@ -218,7 +218,7 @@ panfrost_copy_in_sync(struct drm_device *dev, > if (ret) > goto fail; > > - ret = drm_gem_fence_array_add(&job->deps, fence); > + ret = drm_sched_job_await_fence(&job->base, fence); > > if (ret) > goto fail; > @@ -236,7 +236,7 @@ static int panfrost_ioctl_submit(struct drm_device *dev, void *data, > struct drm_panfrost_submit *args = data; > struct drm_syncobj *sync_out = NULL; > struct panfrost_job *job; > - int ret = 0; > + int ret = 0, slot; > > if (!args->jc) > return -EINVAL; > @@ -258,14 +258,20 @@ static int panfrost_ioctl_submit(struct drm_device *dev, void *data, > > kref_init(&job->refcount); > > - xa_init_flags(&job->deps, XA_FLAGS_ALLOC); > - > job->pfdev = pfdev; > job->jc = args->jc; > job->requirements = args->requirements; > job->flush_id = panfrost_gpu_get_latest_flush_id(pfdev); > job->file_priv = file->driver_priv; > > + slot = panfrost_job_get_slot(job); > + > + ret = drm_sched_job_init(&job->base, > + &job->file_priv->sched_entity[slot], > + NULL); > + if (ret) > + goto fail_job_put; > + > ret = panfrost_copy_in_sync(dev, file, args, job); > if (ret) > goto fail_job; > @@ -283,6 +289,8 @@ static int panfrost_ioctl_submit(struct drm_device *dev, void *data, > drm_syncobj_replace_fence(sync_out, job->render_done_fence); > > fail_job: > + drm_sched_job_cleanup(&job->base); > +fail_job_put: > panfrost_job_put(job); > fail_out_sync: > if (sync_out) > diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panfrost/panfrost_job.c > index 4bc962763e1f..86c843d8822e 100644 > --- a/drivers/gpu/drm/panfrost/panfrost_job.c > +++ b/drivers/gpu/drm/panfrost/panfrost_job.c > @@ -102,7 +102,7 @@ static struct dma_fence *panfrost_fence_create(struct panfrost_device *pfdev, in > return &fence->base; > } > > -static int panfrost_job_get_slot(struct panfrost_job *job) > +int panfrost_job_get_slot(struct panfrost_job *job) > { > /* JS0: fragment jobs. > * JS1: vertex/tiler jobs > @@ -242,13 +242,13 @@ static void panfrost_job_hw_submit(struct panfrost_job *job, int js) > > static int panfrost_acquire_object_fences(struct drm_gem_object **bos, > int bo_count, > - struct xarray *deps) > + struct drm_sched_job *job) > { > int i, ret; > > for (i = 0; i < bo_count; i++) { > /* panfrost always uses write mode in its current uapi */ > - ret = drm_gem_fence_array_add_implicit(deps, bos[i], true); > + ret = drm_sched_job_await_implicit(job, bos[i], true); > if (ret) > return ret; > } > @@ -269,31 +269,21 @@ static void panfrost_attach_object_fences(struct drm_gem_object **bos, > int panfrost_job_push(struct panfrost_job *job) > { > struct panfrost_device *pfdev = job->pfdev; > - int slot = panfrost_job_get_slot(job); > - struct drm_sched_entity *entity = &job->file_priv->sched_entity[slot]; > struct ww_acquire_ctx acquire_ctx; > int ret = 0; > > - > ret = drm_gem_lock_reservations(job->bos, job->bo_count, > &acquire_ctx); > if (ret) > return ret; > > mutex_lock(&pfdev->sched_lock); > - > - ret = drm_sched_job_init(&job->base, entity, NULL); > - if (ret) { > - mutex_unlock(&pfdev->sched_lock); > - goto unlock; > - } > - > drm_sched_job_arm(&job->base); > > job->render_done_fence = dma_fence_get(&job->base.s_fence->finished); > > ret = panfrost_acquire_object_fences(job->bos, job->bo_count, > - &job->deps); > + &job->base); > if (ret) { > mutex_unlock(&pfdev->sched_lock); > goto unlock; > @@ -318,15 +308,8 @@ static void panfrost_job_cleanup(struct kref *ref) > { > struct panfrost_job *job = container_of(ref, struct panfrost_job, > refcount); > - struct dma_fence *fence; > - unsigned long index; > unsigned int i; > > - xa_for_each(&job->deps, index, fence) { > - dma_fence_put(fence); > - } > - xa_destroy(&job->deps); > - > dma_fence_put(job->done_fence); > dma_fence_put(job->render_done_fence); > > @@ -365,17 +348,6 @@ static void panfrost_job_free(struct drm_sched_job *sched_job) > panfrost_job_put(job); > } > > -static struct dma_fence *panfrost_job_dependency(struct drm_sched_job *sched_job, > - struct drm_sched_entity *s_entity) > -{ > - struct panfrost_job *job = to_panfrost_job(sched_job); > - > - if (!xa_empty(&job->deps)) > - return xa_erase(&job->deps, job->last_dep++); > - > - return NULL; > -} > - > static struct dma_fence *panfrost_job_run(struct drm_sched_job *sched_job) > { > struct panfrost_job *job = to_panfrost_job(sched_job); > @@ -765,7 +737,6 @@ static void panfrost_reset_work(struct work_struct *work) > } > > static const struct drm_sched_backend_ops panfrost_sched_ops = { > - .dependency = panfrost_job_dependency, > .run_job = panfrost_job_run, > .timedout_job = panfrost_job_timedout, > .free_job = panfrost_job_free > diff --git a/drivers/gpu/drm/panfrost/panfrost_job.h b/drivers/gpu/drm/panfrost/panfrost_job.h > index 82306a03b57e..77e6d0e6f612 100644 > --- a/drivers/gpu/drm/panfrost/panfrost_job.h > +++ b/drivers/gpu/drm/panfrost/panfrost_job.h > @@ -19,10 +19,6 @@ struct panfrost_job { > struct panfrost_device *pfdev; > struct panfrost_file_priv *file_priv; > > - /* Contains both explicit and implicit fences */ > - struct xarray deps; > - unsigned long last_dep; > - > /* Fence to be signaled by IRQ handler when the job is complete. */ > struct dma_fence *done_fence; > > @@ -42,6 +38,7 @@ int panfrost_job_init(struct panfrost_device *pfdev); > void panfrost_job_fini(struct panfrost_device *pfdev); > int panfrost_job_open(struct panfrost_file_priv *panfrost_priv); > void panfrost_job_close(struct panfrost_file_priv *panfrost_priv); > +int panfrost_job_get_slot(struct panfrost_job *job); > int panfrost_job_push(struct panfrost_job *job); > void panfrost_job_put(struct panfrost_job *job); > void panfrost_job_enable_interrupts(struct panfrost_device *pfdev); > 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=-16.7 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=unavailable 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 838D5C07E99 for ; Mon, 12 Jul 2021 09:19:24 +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 334FC61008 for ; Mon, 12 Jul 2021 09:19:24 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 334FC61008 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=arm.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 E9DC289B96; Mon, 12 Jul 2021 09:19:21 +0000 (UTC) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by gabe.freedesktop.org (Postfix) with ESMTP id 432D689BC2; Mon, 12 Jul 2021 09:19:20 +0000 (UTC) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 6C9B81FB; Mon, 12 Jul 2021 02:19:19 -0700 (PDT) Received: from [192.168.1.179] (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id C37623F694; Mon, 12 Jul 2021 02:19:17 -0700 (PDT) Subject: Re: [PATCH v3 07/20] drm/panfrost: use scheduler dependency tracking To: Daniel Vetter , DRI Development References: <20210708173754.3877540-1-daniel.vetter@ffwll.ch> <20210708173754.3877540-8-daniel.vetter@ffwll.ch> From: Steven Price Message-ID: Date: Mon, 12 Jul 2021 10:19:12 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: <20210708173754.3877540-8-daniel.vetter@ffwll.ch> Content-Type: text/plain; charset=utf-8 Content-Language: en-GB 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: , Cc: Tomeu Vizoso , Intel Graphics Development , =?UTF-8?Q?Christian_K=c3=b6nig?= , linaro-mm-sig@lists.linaro.org, Alyssa Rosenzweig , Daniel Vetter , linux-media@vger.kernel.org Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" On 08/07/2021 18:37, Daniel Vetter wrote: > Just deletes some code that's now more shared. > > Note that thanks to the split into drm_sched_job_init/arm we can now > easily pull the _init() part from under the submission lock way ahead > where we're adding the sync file in-fences as dependencies. > > v2: Correctly clean up the partially set up job, now that job_init() > and job_arm() are apart (Emma). > > Reviewed-by: Steven Price (v1) v2/v3 are also: Reviewed-by: Steven Price Thanks, Steve > Signed-off-by: Daniel Vetter > Cc: Rob Herring > Cc: Tomeu Vizoso > Cc: Steven Price > Cc: Alyssa Rosenzweig > Cc: Sumit Semwal > Cc: "Christian König" > Cc: linux-media@vger.kernel.org > Cc: linaro-mm-sig@lists.linaro.org > --- > drivers/gpu/drm/panfrost/panfrost_drv.c | 16 ++++++++--- > drivers/gpu/drm/panfrost/panfrost_job.c | 37 +++---------------------- > drivers/gpu/drm/panfrost/panfrost_job.h | 5 +--- > 3 files changed, 17 insertions(+), 41 deletions(-) > > diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c > index 1ffaef5ec5ff..9f53bea07d61 100644 > --- a/drivers/gpu/drm/panfrost/panfrost_drv.c > +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c > @@ -218,7 +218,7 @@ panfrost_copy_in_sync(struct drm_device *dev, > if (ret) > goto fail; > > - ret = drm_gem_fence_array_add(&job->deps, fence); > + ret = drm_sched_job_await_fence(&job->base, fence); > > if (ret) > goto fail; > @@ -236,7 +236,7 @@ static int panfrost_ioctl_submit(struct drm_device *dev, void *data, > struct drm_panfrost_submit *args = data; > struct drm_syncobj *sync_out = NULL; > struct panfrost_job *job; > - int ret = 0; > + int ret = 0, slot; > > if (!args->jc) > return -EINVAL; > @@ -258,14 +258,20 @@ static int panfrost_ioctl_submit(struct drm_device *dev, void *data, > > kref_init(&job->refcount); > > - xa_init_flags(&job->deps, XA_FLAGS_ALLOC); > - > job->pfdev = pfdev; > job->jc = args->jc; > job->requirements = args->requirements; > job->flush_id = panfrost_gpu_get_latest_flush_id(pfdev); > job->file_priv = file->driver_priv; > > + slot = panfrost_job_get_slot(job); > + > + ret = drm_sched_job_init(&job->base, > + &job->file_priv->sched_entity[slot], > + NULL); > + if (ret) > + goto fail_job_put; > + > ret = panfrost_copy_in_sync(dev, file, args, job); > if (ret) > goto fail_job; > @@ -283,6 +289,8 @@ static int panfrost_ioctl_submit(struct drm_device *dev, void *data, > drm_syncobj_replace_fence(sync_out, job->render_done_fence); > > fail_job: > + drm_sched_job_cleanup(&job->base); > +fail_job_put: > panfrost_job_put(job); > fail_out_sync: > if (sync_out) > diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panfrost/panfrost_job.c > index 4bc962763e1f..86c843d8822e 100644 > --- a/drivers/gpu/drm/panfrost/panfrost_job.c > +++ b/drivers/gpu/drm/panfrost/panfrost_job.c > @@ -102,7 +102,7 @@ static struct dma_fence *panfrost_fence_create(struct panfrost_device *pfdev, in > return &fence->base; > } > > -static int panfrost_job_get_slot(struct panfrost_job *job) > +int panfrost_job_get_slot(struct panfrost_job *job) > { > /* JS0: fragment jobs. > * JS1: vertex/tiler jobs > @@ -242,13 +242,13 @@ static void panfrost_job_hw_submit(struct panfrost_job *job, int js) > > static int panfrost_acquire_object_fences(struct drm_gem_object **bos, > int bo_count, > - struct xarray *deps) > + struct drm_sched_job *job) > { > int i, ret; > > for (i = 0; i < bo_count; i++) { > /* panfrost always uses write mode in its current uapi */ > - ret = drm_gem_fence_array_add_implicit(deps, bos[i], true); > + ret = drm_sched_job_await_implicit(job, bos[i], true); > if (ret) > return ret; > } > @@ -269,31 +269,21 @@ static void panfrost_attach_object_fences(struct drm_gem_object **bos, > int panfrost_job_push(struct panfrost_job *job) > { > struct panfrost_device *pfdev = job->pfdev; > - int slot = panfrost_job_get_slot(job); > - struct drm_sched_entity *entity = &job->file_priv->sched_entity[slot]; > struct ww_acquire_ctx acquire_ctx; > int ret = 0; > > - > ret = drm_gem_lock_reservations(job->bos, job->bo_count, > &acquire_ctx); > if (ret) > return ret; > > mutex_lock(&pfdev->sched_lock); > - > - ret = drm_sched_job_init(&job->base, entity, NULL); > - if (ret) { > - mutex_unlock(&pfdev->sched_lock); > - goto unlock; > - } > - > drm_sched_job_arm(&job->base); > > job->render_done_fence = dma_fence_get(&job->base.s_fence->finished); > > ret = panfrost_acquire_object_fences(job->bos, job->bo_count, > - &job->deps); > + &job->base); > if (ret) { > mutex_unlock(&pfdev->sched_lock); > goto unlock; > @@ -318,15 +308,8 @@ static void panfrost_job_cleanup(struct kref *ref) > { > struct panfrost_job *job = container_of(ref, struct panfrost_job, > refcount); > - struct dma_fence *fence; > - unsigned long index; > unsigned int i; > > - xa_for_each(&job->deps, index, fence) { > - dma_fence_put(fence); > - } > - xa_destroy(&job->deps); > - > dma_fence_put(job->done_fence); > dma_fence_put(job->render_done_fence); > > @@ -365,17 +348,6 @@ static void panfrost_job_free(struct drm_sched_job *sched_job) > panfrost_job_put(job); > } > > -static struct dma_fence *panfrost_job_dependency(struct drm_sched_job *sched_job, > - struct drm_sched_entity *s_entity) > -{ > - struct panfrost_job *job = to_panfrost_job(sched_job); > - > - if (!xa_empty(&job->deps)) > - return xa_erase(&job->deps, job->last_dep++); > - > - return NULL; > -} > - > static struct dma_fence *panfrost_job_run(struct drm_sched_job *sched_job) > { > struct panfrost_job *job = to_panfrost_job(sched_job); > @@ -765,7 +737,6 @@ static void panfrost_reset_work(struct work_struct *work) > } > > static const struct drm_sched_backend_ops panfrost_sched_ops = { > - .dependency = panfrost_job_dependency, > .run_job = panfrost_job_run, > .timedout_job = panfrost_job_timedout, > .free_job = panfrost_job_free > diff --git a/drivers/gpu/drm/panfrost/panfrost_job.h b/drivers/gpu/drm/panfrost/panfrost_job.h > index 82306a03b57e..77e6d0e6f612 100644 > --- a/drivers/gpu/drm/panfrost/panfrost_job.h > +++ b/drivers/gpu/drm/panfrost/panfrost_job.h > @@ -19,10 +19,6 @@ struct panfrost_job { > struct panfrost_device *pfdev; > struct panfrost_file_priv *file_priv; > > - /* Contains both explicit and implicit fences */ > - struct xarray deps; > - unsigned long last_dep; > - > /* Fence to be signaled by IRQ handler when the job is complete. */ > struct dma_fence *done_fence; > > @@ -42,6 +38,7 @@ int panfrost_job_init(struct panfrost_device *pfdev); > void panfrost_job_fini(struct panfrost_device *pfdev); > int panfrost_job_open(struct panfrost_file_priv *panfrost_priv); > void panfrost_job_close(struct panfrost_file_priv *panfrost_priv); > +int panfrost_job_get_slot(struct panfrost_job *job); > int panfrost_job_push(struct panfrost_job *job); > void panfrost_job_put(struct panfrost_job *job); > void panfrost_job_enable_interrupts(struct panfrost_device *pfdev); > 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=-16.7 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 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 D2CBEC07E9B for ; Mon, 12 Jul 2021 09:19:22 +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 99ADE60FF0 for ; Mon, 12 Jul 2021 09:19:22 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 99ADE60FF0 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 3312D89BC2; Mon, 12 Jul 2021 09:19:22 +0000 (UTC) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by gabe.freedesktop.org (Postfix) with ESMTP id 432D689BC2; Mon, 12 Jul 2021 09:19:20 +0000 (UTC) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 6C9B81FB; Mon, 12 Jul 2021 02:19:19 -0700 (PDT) Received: from [192.168.1.179] (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id C37623F694; Mon, 12 Jul 2021 02:19:17 -0700 (PDT) To: Daniel Vetter , DRI Development References: <20210708173754.3877540-1-daniel.vetter@ffwll.ch> <20210708173754.3877540-8-daniel.vetter@ffwll.ch> From: Steven Price Message-ID: Date: Mon, 12 Jul 2021 10:19:12 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: <20210708173754.3877540-8-daniel.vetter@ffwll.ch> Content-Language: en-GB Subject: Re: [Intel-gfx] [PATCH v3 07/20] drm/panfrost: use scheduler dependency tracking X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Rob Herring , Tomeu Vizoso , Intel Graphics Development , =?UTF-8?Q?Christian_K=c3=b6nig?= , linaro-mm-sig@lists.linaro.org, Alyssa Rosenzweig , Daniel Vetter , Sumit Semwal , linux-media@vger.kernel.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" T24gMDgvMDcvMjAyMSAxODozNywgRGFuaWVsIFZldHRlciB3cm90ZToKPiBKdXN0IGRlbGV0ZXMg c29tZSBjb2RlIHRoYXQncyBub3cgbW9yZSBzaGFyZWQuCj4gCj4gTm90ZSB0aGF0IHRoYW5rcyB0 byB0aGUgc3BsaXQgaW50byBkcm1fc2NoZWRfam9iX2luaXQvYXJtIHdlIGNhbiBub3cKPiBlYXNp bHkgcHVsbCB0aGUgX2luaXQoKSBwYXJ0IGZyb20gdW5kZXIgdGhlIHN1Ym1pc3Npb24gbG9jayB3 YXkgYWhlYWQKPiB3aGVyZSB3ZSdyZSBhZGRpbmcgdGhlIHN5bmMgZmlsZSBpbi1mZW5jZXMgYXMg ZGVwZW5kZW5jaWVzLgo+IAo+IHYyOiBDb3JyZWN0bHkgY2xlYW4gdXAgdGhlIHBhcnRpYWxseSBz ZXQgdXAgam9iLCBub3cgdGhhdCBqb2JfaW5pdCgpCj4gYW5kIGpvYl9hcm0oKSBhcmUgYXBhcnQg KEVtbWEpLgo+IAo+IFJldmlld2VkLWJ5OiBTdGV2ZW4gUHJpY2UgPHN0ZXZlbi5wcmljZUBhcm0u Y29tPiAodjEpCgp2Mi92MyBhcmUgYWxzbzoKClJldmlld2VkLWJ5OiBTdGV2ZW4gUHJpY2UgPHN0 ZXZlbi5wcmljZUBhcm0uY29tPgoKVGhhbmtzLAoKU3RldmUKCj4gU2lnbmVkLW9mZi1ieTogRGFu aWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBpbnRlbC5jb20+Cj4gQ2M6IFJvYiBIZXJyaW5nIDxy b2JoQGtlcm5lbC5vcmc+Cj4gQ2M6IFRvbWV1IFZpem9zbyA8dG9tZXUudml6b3NvQGNvbGxhYm9y YS5jb20+Cj4gQ2M6IFN0ZXZlbiBQcmljZSA8c3RldmVuLnByaWNlQGFybS5jb20+Cj4gQ2M6IEFs eXNzYSBSb3Nlbnp3ZWlnIDxhbHlzc2Eucm9zZW56d2VpZ0Bjb2xsYWJvcmEuY29tPgo+IENjOiBT dW1pdCBTZW13YWwgPHN1bWl0LnNlbXdhbEBsaW5hcm8ub3JnPgo+IENjOiAiQ2hyaXN0aWFuIEvD tm5pZyIgPGNocmlzdGlhbi5rb2VuaWdAYW1kLmNvbT4KPiBDYzogbGludXgtbWVkaWFAdmdlci5r ZXJuZWwub3JnCj4gQ2M6IGxpbmFyby1tbS1zaWdAbGlzdHMubGluYXJvLm9yZwo+IC0tLQo+ICBk cml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZHJ2LmMgfCAxNiArKysrKysrKy0tLQo+ ICBkcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3Rfam9iLmMgfCAzNyArKystLS0tLS0t LS0tLS0tLS0tLS0tLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9qb2Iu aCB8ICA1ICstLS0KPiAgMyBmaWxlcyBjaGFuZ2VkLCAxNyBpbnNlcnRpb25zKCspLCA0MSBkZWxl dGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZy b3N0X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2Rydi5jCj4gaW5k ZXggMWZmYWVmNWVjNWZmLi45ZjUzYmVhMDdkNjEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2Rydi5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmZy b3N0L3BhbmZyb3N0X2Rydi5jCj4gQEAgLTIxOCw3ICsyMTgsNyBAQCBwYW5mcm9zdF9jb3B5X2lu X3N5bmMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgCQlpZiAocmV0KQo+ICAJCQlnb3RvIGZh aWw7Cj4gIAo+IC0JCXJldCA9IGRybV9nZW1fZmVuY2VfYXJyYXlfYWRkKCZqb2ItPmRlcHMsIGZl bmNlKTsKPiArCQlyZXQgPSBkcm1fc2NoZWRfam9iX2F3YWl0X2ZlbmNlKCZqb2ItPmJhc2UsIGZl bmNlKTsKPiAgCj4gIAkJaWYgKHJldCkKPiAgCQkJZ290byBmYWlsOwo+IEBAIC0yMzYsNyArMjM2 LDcgQEAgc3RhdGljIGludCBwYW5mcm9zdF9pb2N0bF9zdWJtaXQoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgdm9pZCAqZGF0YSwKPiAgCXN0cnVjdCBkcm1fcGFuZnJvc3Rfc3VibWl0ICphcmdzID0g ZGF0YTsKPiAgCXN0cnVjdCBkcm1fc3luY29iaiAqc3luY19vdXQgPSBOVUxMOwo+ICAJc3RydWN0 IHBhbmZyb3N0X2pvYiAqam9iOwo+IC0JaW50IHJldCA9IDA7Cj4gKwlpbnQgcmV0ID0gMCwgc2xv dDsKPiAgCj4gIAlpZiAoIWFyZ3MtPmpjKQo+ICAJCXJldHVybiAtRUlOVkFMOwo+IEBAIC0yNTgs MTQgKzI1OCwyMCBAQCBzdGF0aWMgaW50IHBhbmZyb3N0X2lvY3RsX3N1Ym1pdChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICAKPiAgCWtyZWZfaW5pdCgmam9iLT5yZWZjb3Vu dCk7Cj4gIAo+IC0JeGFfaW5pdF9mbGFncygmam9iLT5kZXBzLCBYQV9GTEFHU19BTExPQyk7Cj4g LQo+ICAJam9iLT5wZmRldiA9IHBmZGV2Owo+ICAJam9iLT5qYyA9IGFyZ3MtPmpjOwo+ICAJam9i LT5yZXF1aXJlbWVudHMgPSBhcmdzLT5yZXF1aXJlbWVudHM7Cj4gIAlqb2ItPmZsdXNoX2lkID0g cGFuZnJvc3RfZ3B1X2dldF9sYXRlc3RfZmx1c2hfaWQocGZkZXYpOwo+ICAJam9iLT5maWxlX3By aXYgPSBmaWxlLT5kcml2ZXJfcHJpdjsKPiAgCj4gKwlzbG90ID0gcGFuZnJvc3Rfam9iX2dldF9z bG90KGpvYik7Cj4gKwo+ICsJcmV0ID0gZHJtX3NjaGVkX2pvYl9pbml0KCZqb2ItPmJhc2UsCj4g KwkJCQkgJmpvYi0+ZmlsZV9wcml2LT5zY2hlZF9lbnRpdHlbc2xvdF0sCj4gKwkJCQkgTlVMTCk7 Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZmFpbF9qb2JfcHV0Owo+ICsKPiAgCXJldCA9IHBhbmZy b3N0X2NvcHlfaW5fc3luYyhkZXYsIGZpbGUsIGFyZ3MsIGpvYik7Cj4gIAlpZiAocmV0KQo+ICAJ CWdvdG8gZmFpbF9qb2I7Cj4gQEAgLTI4Myw2ICsyODksOCBAQCBzdGF0aWMgaW50IHBhbmZyb3N0 X2lvY3RsX3N1Ym1pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICAJCWRy bV9zeW5jb2JqX3JlcGxhY2VfZmVuY2Uoc3luY19vdXQsIGpvYi0+cmVuZGVyX2RvbmVfZmVuY2Up Owo+ICAKPiAgZmFpbF9qb2I6Cj4gKwlkcm1fc2NoZWRfam9iX2NsZWFudXAoJmpvYi0+YmFzZSk7 Cj4gK2ZhaWxfam9iX3B1dDoKPiAgCXBhbmZyb3N0X2pvYl9wdXQoam9iKTsKPiAgZmFpbF9vdXRf c3luYzoKPiAgCWlmIChzeW5jX291dCkKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Bh bmZyb3N0L3BhbmZyb3N0X2pvYi5jIGIvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0 X2pvYi5jCj4gaW5kZXggNGJjOTYyNzYzZTFmLi44NmM4NDNkODgyMmUgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2pvYi5jCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2pvYi5jCj4gQEAgLTEwMiw3ICsxMDIsNyBAQCBzdGF0 aWMgc3RydWN0IGRtYV9mZW5jZSAqcGFuZnJvc3RfZmVuY2VfY3JlYXRlKHN0cnVjdCBwYW5mcm9z dF9kZXZpY2UgKnBmZGV2LCBpbgo+ICAJcmV0dXJuICZmZW5jZS0+YmFzZTsKPiAgfQo+ICAKPiAt c3RhdGljIGludCBwYW5mcm9zdF9qb2JfZ2V0X3Nsb3Qoc3RydWN0IHBhbmZyb3N0X2pvYiAqam9i KQo+ICtpbnQgcGFuZnJvc3Rfam9iX2dldF9zbG90KHN0cnVjdCBwYW5mcm9zdF9qb2IgKmpvYikK PiAgewo+ICAJLyogSlMwOiBmcmFnbWVudCBqb2JzLgo+ICAJICogSlMxOiB2ZXJ0ZXgvdGlsZXIg am9icwo+IEBAIC0yNDIsMTMgKzI0MiwxMyBAQCBzdGF0aWMgdm9pZCBwYW5mcm9zdF9qb2JfaHdf c3VibWl0KHN0cnVjdCBwYW5mcm9zdF9qb2IgKmpvYiwgaW50IGpzKQo+ICAKPiAgc3RhdGljIGlu dCBwYW5mcm9zdF9hY3F1aXJlX29iamVjdF9mZW5jZXMoc3RydWN0IGRybV9nZW1fb2JqZWN0ICoq Ym9zLAo+ICAJCQkJCSAgaW50IGJvX2NvdW50LAo+IC0JCQkJCSAgc3RydWN0IHhhcnJheSAqZGVw cykKPiArCQkJCQkgIHN0cnVjdCBkcm1fc2NoZWRfam9iICpqb2IpCj4gIHsKPiAgCWludCBpLCBy ZXQ7Cj4gIAo+ICAJZm9yIChpID0gMDsgaSA8IGJvX2NvdW50OyBpKyspIHsKPiAgCQkvKiBwYW5m cm9zdCBhbHdheXMgdXNlcyB3cml0ZSBtb2RlIGluIGl0cyBjdXJyZW50IHVhcGkgKi8KPiAtCQly ZXQgPSBkcm1fZ2VtX2ZlbmNlX2FycmF5X2FkZF9pbXBsaWNpdChkZXBzLCBib3NbaV0sIHRydWUp Owo+ICsJCXJldCA9IGRybV9zY2hlZF9qb2JfYXdhaXRfaW1wbGljaXQoam9iLCBib3NbaV0sIHRy dWUpOwo+ICAJCWlmIChyZXQpCj4gIAkJCXJldHVybiByZXQ7Cj4gIAl9Cj4gQEAgLTI2OSwzMSAr MjY5LDIxIEBAIHN0YXRpYyB2b2lkIHBhbmZyb3N0X2F0dGFjaF9vYmplY3RfZmVuY2VzKHN0cnVj dCBkcm1fZ2VtX29iamVjdCAqKmJvcywKPiAgaW50IHBhbmZyb3N0X2pvYl9wdXNoKHN0cnVjdCBw YW5mcm9zdF9qb2IgKmpvYikKPiAgewo+ICAJc3RydWN0IHBhbmZyb3N0X2RldmljZSAqcGZkZXYg PSBqb2ItPnBmZGV2Owo+IC0JaW50IHNsb3QgPSBwYW5mcm9zdF9qb2JfZ2V0X3Nsb3Qoam9iKTsK PiAtCXN0cnVjdCBkcm1fc2NoZWRfZW50aXR5ICplbnRpdHkgPSAmam9iLT5maWxlX3ByaXYtPnNj aGVkX2VudGl0eVtzbG90XTsKPiAgCXN0cnVjdCB3d19hY3F1aXJlX2N0eCBhY3F1aXJlX2N0eDsK PiAgCWludCByZXQgPSAwOwo+ICAKPiAtCj4gIAlyZXQgPSBkcm1fZ2VtX2xvY2tfcmVzZXJ2YXRp b25zKGpvYi0+Ym9zLCBqb2ItPmJvX2NvdW50LAo+ICAJCQkJCSAgICAmYWNxdWlyZV9jdHgpOwo+ ICAJaWYgKHJldCkKPiAgCQlyZXR1cm4gcmV0Owo+ICAKPiAgCW11dGV4X2xvY2soJnBmZGV2LT5z Y2hlZF9sb2NrKTsKPiAtCj4gLQlyZXQgPSBkcm1fc2NoZWRfam9iX2luaXQoJmpvYi0+YmFzZSwg ZW50aXR5LCBOVUxMKTsKPiAtCWlmIChyZXQpIHsKPiAtCQltdXRleF91bmxvY2soJnBmZGV2LT5z Y2hlZF9sb2NrKTsKPiAtCQlnb3RvIHVubG9jazsKPiAtCX0KPiAtCj4gIAlkcm1fc2NoZWRfam9i X2FybSgmam9iLT5iYXNlKTsKPiAgCj4gIAlqb2ItPnJlbmRlcl9kb25lX2ZlbmNlID0gZG1hX2Zl bmNlX2dldCgmam9iLT5iYXNlLnNfZmVuY2UtPmZpbmlzaGVkKTsKPiAgCj4gIAlyZXQgPSBwYW5m cm9zdF9hY3F1aXJlX29iamVjdF9mZW5jZXMoam9iLT5ib3MsIGpvYi0+Ym9fY291bnQsCj4gLQkJ CQkJICAgICAmam9iLT5kZXBzKTsKPiArCQkJCQkgICAgICZqb2ItPmJhc2UpOwo+ICAJaWYgKHJl dCkgewo+ICAJCW11dGV4X3VubG9jaygmcGZkZXYtPnNjaGVkX2xvY2spOwo+ICAJCWdvdG8gdW5s b2NrOwo+IEBAIC0zMTgsMTUgKzMwOCw4IEBAIHN0YXRpYyB2b2lkIHBhbmZyb3N0X2pvYl9jbGVh bnVwKHN0cnVjdCBrcmVmICpyZWYpCj4gIHsKPiAgCXN0cnVjdCBwYW5mcm9zdF9qb2IgKmpvYiA9 IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBwYW5mcm9zdF9qb2IsCj4gIAkJCQkJCXJlZmNvdW50 KTsKPiAtCXN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlOwo+IC0JdW5zaWduZWQgbG9uZyBpbmRleDsK PiAgCXVuc2lnbmVkIGludCBpOwo+ICAKPiAtCXhhX2Zvcl9lYWNoKCZqb2ItPmRlcHMsIGluZGV4 LCBmZW5jZSkgewo+IC0JCWRtYV9mZW5jZV9wdXQoZmVuY2UpOwo+IC0JfQo+IC0JeGFfZGVzdHJv eSgmam9iLT5kZXBzKTsKPiAtCj4gIAlkbWFfZmVuY2VfcHV0KGpvYi0+ZG9uZV9mZW5jZSk7Cj4g IAlkbWFfZmVuY2VfcHV0KGpvYi0+cmVuZGVyX2RvbmVfZmVuY2UpOwo+ICAKPiBAQCAtMzY1LDE3 ICszNDgsNiBAQCBzdGF0aWMgdm9pZCBwYW5mcm9zdF9qb2JfZnJlZShzdHJ1Y3QgZHJtX3NjaGVk X2pvYiAqc2NoZWRfam9iKQo+ICAJcGFuZnJvc3Rfam9iX3B1dChqb2IpOwo+ICB9Cj4gIAo+IC1z dGF0aWMgc3RydWN0IGRtYV9mZW5jZSAqcGFuZnJvc3Rfam9iX2RlcGVuZGVuY3koc3RydWN0IGRy bV9zY2hlZF9qb2IgKnNjaGVkX2pvYiwKPiAtCQkJCQkJIHN0cnVjdCBkcm1fc2NoZWRfZW50aXR5 ICpzX2VudGl0eSkKPiAtewo+IC0Jc3RydWN0IHBhbmZyb3N0X2pvYiAqam9iID0gdG9fcGFuZnJv c3Rfam9iKHNjaGVkX2pvYik7Cj4gLQo+IC0JaWYgKCF4YV9lbXB0eSgmam9iLT5kZXBzKSkKPiAt CQlyZXR1cm4geGFfZXJhc2UoJmpvYi0+ZGVwcywgam9iLT5sYXN0X2RlcCsrKTsKPiAtCj4gLQly ZXR1cm4gTlVMTDsKPiAtfQo+IC0KPiAgc3RhdGljIHN0cnVjdCBkbWFfZmVuY2UgKnBhbmZyb3N0 X2pvYl9ydW4oc3RydWN0IGRybV9zY2hlZF9qb2IgKnNjaGVkX2pvYikKPiAgewo+ICAJc3RydWN0 IHBhbmZyb3N0X2pvYiAqam9iID0gdG9fcGFuZnJvc3Rfam9iKHNjaGVkX2pvYik7Cj4gQEAgLTc2 NSw3ICs3MzcsNiBAQCBzdGF0aWMgdm9pZCBwYW5mcm9zdF9yZXNldF93b3JrKHN0cnVjdCB3b3Jr X3N0cnVjdCAqd29yaykKPiAgfQo+ICAKPiAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fc2NoZWRf YmFja2VuZF9vcHMgcGFuZnJvc3Rfc2NoZWRfb3BzID0gewo+IC0JLmRlcGVuZGVuY3kgPSBwYW5m cm9zdF9qb2JfZGVwZW5kZW5jeSwKPiAgCS5ydW5fam9iID0gcGFuZnJvc3Rfam9iX3J1biwKPiAg CS50aW1lZG91dF9qb2IgPSBwYW5mcm9zdF9qb2JfdGltZWRvdXQsCj4gIAkuZnJlZV9qb2IgPSBw YW5mcm9zdF9qb2JfZnJlZQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3Qv cGFuZnJvc3Rfam9iLmggYi9kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3Rfam9iLmgK PiBpbmRleCA4MjMwNmEwM2I1N2UuLjc3ZTZkMGU2ZjYxMiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3Rfam9iLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v cGFuZnJvc3QvcGFuZnJvc3Rfam9iLmgKPiBAQCAtMTksMTAgKzE5LDYgQEAgc3RydWN0IHBhbmZy b3N0X2pvYiB7Cj4gIAlzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldjsKPiAgCXN0cnVjdCBw YW5mcm9zdF9maWxlX3ByaXYgKmZpbGVfcHJpdjsKPiAgCj4gLQkvKiBDb250YWlucyBib3RoIGV4 cGxpY2l0IGFuZCBpbXBsaWNpdCBmZW5jZXMgKi8KPiAtCXN0cnVjdCB4YXJyYXkgZGVwczsKPiAt CXVuc2lnbmVkIGxvbmcgbGFzdF9kZXA7Cj4gLQo+ICAJLyogRmVuY2UgdG8gYmUgc2lnbmFsZWQg YnkgSVJRIGhhbmRsZXIgd2hlbiB0aGUgam9iIGlzIGNvbXBsZXRlLiAqLwo+ICAJc3RydWN0IGRt YV9mZW5jZSAqZG9uZV9mZW5jZTsKPiAgCj4gQEAgLTQyLDYgKzM4LDcgQEAgaW50IHBhbmZyb3N0 X2pvYl9pbml0KHN0cnVjdCBwYW5mcm9zdF9kZXZpY2UgKnBmZGV2KTsKPiAgdm9pZCBwYW5mcm9z dF9qb2JfZmluaShzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldik7Cj4gIGludCBwYW5mcm9z dF9qb2Jfb3BlbihzdHJ1Y3QgcGFuZnJvc3RfZmlsZV9wcml2ICpwYW5mcm9zdF9wcml2KTsKPiAg dm9pZCBwYW5mcm9zdF9qb2JfY2xvc2Uoc3RydWN0IHBhbmZyb3N0X2ZpbGVfcHJpdiAqcGFuZnJv c3RfcHJpdik7Cj4gK2ludCBwYW5mcm9zdF9qb2JfZ2V0X3Nsb3Qoc3RydWN0IHBhbmZyb3N0X2pv YiAqam9iKTsKPiAgaW50IHBhbmZyb3N0X2pvYl9wdXNoKHN0cnVjdCBwYW5mcm9zdF9qb2IgKmpv Yik7Cj4gIHZvaWQgcGFuZnJvc3Rfam9iX3B1dChzdHJ1Y3QgcGFuZnJvc3Rfam9iICpqb2IpOwo+ ICB2b2lkIHBhbmZyb3N0X2pvYl9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3QgcGFuZnJvc3RfZGV2 aWNlICpwZmRldik7Cj4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRl bC1nZngK