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=-18.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,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 6C635C11F66 for ; Mon, 12 Jul 2021 20:02:11 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 588DB61242 for ; Mon, 12 Jul 2021 20:02:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234982AbhGLUE7 (ORCPT ); Mon, 12 Jul 2021 16:04:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49328 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236668AbhGLUEy (ORCPT ); Mon, 12 Jul 2021 16:04:54 -0400 Received: from mail-wm1-x329.google.com (mail-wm1-x329.google.com [IPv6:2a00:1450:4864:20::329]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B0CA6C0613DD for ; Mon, 12 Jul 2021 13:02:05 -0700 (PDT) Received: by mail-wm1-x329.google.com with SMTP id w13so12166293wmc.3 for ; Mon, 12 Jul 2021 13:02:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+0jQYIsm5Js9C1AjIzuq6eeQkARdEqcH+X7YWC5aMAo=; b=MsFUEyt0amcc/5aIeCGjA5X/fPAGcaemhqCDWttlOgkKliOGhW78Tq/JrwN1yyHXyN xO3HSYozDNVLo3wHCOBM+srpZiAJ95kKxjMkwcx6eT88UKpGsQiB40ztQ1UP9WywAvqd 87Us5mW8uNip8VWCpwxwt3adVeFljxAcLfA10= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=+0jQYIsm5Js9C1AjIzuq6eeQkARdEqcH+X7YWC5aMAo=; b=mrvdrv8uo6jKY4yhB7Ge4FYJNCb0Km68LQT4zuVKGWsSszPdtuN25FrlBfCWIOvS4R dxIoBJcNXaBFvZJp5agiGLM51/CbmvjU3HRbwoswAZEePDa2bktYMUcS4Tk6u4SpO/jG w+rs+b2Vj5GpQLrE0xbs8jtmzjQFpI6JqvnX3IuSo5p//3QPyCUxW/GuTyTC4qXLqXJ3 RT6ptHDxN/oCPzxQMSgpyoO0NMgeI/5agS+RifE/LEKO2nicQZyCH+nDcU1bnj8uP33W ECOZURxEL+08aAgOubzzZsRj6j30npGLyMPmmNUbABASk6kfIog1PIWhQ1LEGOvPHzYp PH+w== X-Gm-Message-State: AOAM532ryxXfRomog0iHJ6Lj0JoG3iNOb0cJiBMeOF/nASIMzye3uVok arI4KVBdtcIfpePmtXrKbJ1Dmw== X-Google-Smtp-Source: ABdhPJwUIaG4n4vquSxoVNtBJZqvn2Eps/h+0H0QVUubGzscK0wRQ39PS7+zWCKH5y//LRTwjbeEQQ== X-Received: by 2002:a05:600c:a45:: with SMTP id c5mr16790644wmq.153.1626120124338; Mon, 12 Jul 2021 13:02:04 -0700 (PDT) Received: from phenom.ffwll.local ([2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa]) by smtp.gmail.com with ESMTPSA id l14sm9858221wrs.22.2021.07.12.13.02.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Jul 2021 13:02:03 -0700 (PDT) From: Daniel Vetter To: DRI Development Cc: Intel Graphics Development , Daniel Vetter , Steven Price , Daniel Vetter , Rob Herring , Tomeu Vizoso , Alyssa Rosenzweig , Sumit Semwal , =?UTF-8?q?Christian=20K=C3=B6nig?= , linux-media@vger.kernel.org, linaro-mm-sig@lists.linaro.org Subject: [PATCH v4 06/18] drm/panfrost: use scheduler dependency tracking Date: Mon, 12 Jul 2021 19:53:40 +0200 Message-Id: <20210712175352.802687-7-daniel.vetter@ffwll.ch> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210712175352.802687-1-daniel.vetter@ffwll.ch> References: <20210712175352.802687-1-daniel.vetter@ffwll.ch> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org 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 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); -- 2.32.0 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.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT 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 CB581C07E99 for ; Mon, 12 Jul 2021 20:02:23 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 97D4B611CC for ; Mon, 12 Jul 2021 20:02:23 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 97D4B611CC Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ffwll.ch 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 66FBD89DB4; Mon, 12 Jul 2021 20:02:08 +0000 (UTC) Received: from mail-wm1-x334.google.com (mail-wm1-x334.google.com [IPv6:2a00:1450:4864:20::334]) by gabe.freedesktop.org (Postfix) with ESMTPS id A0F8489DD2 for ; Mon, 12 Jul 2021 20:02:05 +0000 (UTC) Received: by mail-wm1-x334.google.com with SMTP id a5-20020a7bc1c50000b02901e3bbe0939bso826381wmj.0 for ; Mon, 12 Jul 2021 13:02:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+0jQYIsm5Js9C1AjIzuq6eeQkARdEqcH+X7YWC5aMAo=; b=MsFUEyt0amcc/5aIeCGjA5X/fPAGcaemhqCDWttlOgkKliOGhW78Tq/JrwN1yyHXyN xO3HSYozDNVLo3wHCOBM+srpZiAJ95kKxjMkwcx6eT88UKpGsQiB40ztQ1UP9WywAvqd 87Us5mW8uNip8VWCpwxwt3adVeFljxAcLfA10= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=+0jQYIsm5Js9C1AjIzuq6eeQkARdEqcH+X7YWC5aMAo=; b=ngTFHMaBBSHH/bgeNy+wocAubntNmb974mVh2P7yigmy7wYC2I39puRbm5t7NbaUzB CYfzOyr8GZa6O3LI4D6M7XB3SSxHOGy1YhyI4j7sTAzArbQlTklS1mDT2ZtiNbWEpSMF LaICekAo1sPUMDP/a55U90f642vPyi2n2aLorfpoKrrO8lIRH6VMFWZFs78dVAmLBJTV vd4cY4rmsu2N9VQJ8ZlgI+E4RxqXrVAdu/ZAjEYWK09vVyHkFOBEWOi7TLKwFDsrGVOZ ppFOPtb4dHd0X3XJyGehhqpgQC9HnGGgoroD/N7ngQ0Qdf0wNxGkrggj2xWcC3h6O/sw VeLg== X-Gm-Message-State: AOAM532bHfUHTjDZTcAjSProQWw74gg+jPjUmQBW5kJJCNQVAu3mMVNX G2mJnUOmkh3w2MtMvoaIjpNnXknCi+1XeA== X-Google-Smtp-Source: ABdhPJwUIaG4n4vquSxoVNtBJZqvn2Eps/h+0H0QVUubGzscK0wRQ39PS7+zWCKH5y//LRTwjbeEQQ== X-Received: by 2002:a05:600c:a45:: with SMTP id c5mr16790644wmq.153.1626120124338; Mon, 12 Jul 2021 13:02:04 -0700 (PDT) Received: from phenom.ffwll.local ([2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa]) by smtp.gmail.com with ESMTPSA id l14sm9858221wrs.22.2021.07.12.13.02.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Jul 2021 13:02:03 -0700 (PDT) From: Daniel Vetter To: DRI Development Subject: [PATCH v4 06/18] drm/panfrost: use scheduler dependency tracking Date: Mon, 12 Jul 2021 19:53:40 +0200 Message-Id: <20210712175352.802687-7-daniel.vetter@ffwll.ch> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210712175352.802687-1-daniel.vetter@ffwll.ch> References: <20210712175352.802687-1-daniel.vetter@ffwll.ch> 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: , Cc: Tomeu Vizoso , =?UTF-8?q?Christian=20K=C3=B6nig?= , Daniel Vetter , Intel Graphics Development , Steven Price , 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" 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 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); -- 2.32.0 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.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,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 697A9C07E9A for ; Mon, 12 Jul 2021 20:02:19 +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 3D7E0611CC for ; Mon, 12 Jul 2021 20:02:19 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3D7E0611CC Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ffwll.ch 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 C70E389DED; Mon, 12 Jul 2021 20:02:06 +0000 (UTC) Received: from mail-wm1-x32e.google.com (mail-wm1-x32e.google.com [IPv6:2a00:1450:4864:20::32e]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9BE1289DCF for ; Mon, 12 Jul 2021 20:02:05 +0000 (UTC) Received: by mail-wm1-x32e.google.com with SMTP id l17-20020a05600c1d11b029021f84fcaf75so23365wms.1 for ; Mon, 12 Jul 2021 13:02:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+0jQYIsm5Js9C1AjIzuq6eeQkARdEqcH+X7YWC5aMAo=; b=MsFUEyt0amcc/5aIeCGjA5X/fPAGcaemhqCDWttlOgkKliOGhW78Tq/JrwN1yyHXyN xO3HSYozDNVLo3wHCOBM+srpZiAJ95kKxjMkwcx6eT88UKpGsQiB40ztQ1UP9WywAvqd 87Us5mW8uNip8VWCpwxwt3adVeFljxAcLfA10= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=+0jQYIsm5Js9C1AjIzuq6eeQkARdEqcH+X7YWC5aMAo=; b=f0njaJuJc7Xq0JeX065bk1W3nqE9oKDd2ov1sMX3hWwz+AjQR0bNMkUF0ATGiNtOKl VWXz+cjzTp8hnadxrLiEkPAunsJgxNksn2rIHoqsSYZ2rQyYPHNT+8MXn5liqZ7Myp0S lwvFOio9F6N7nPxyJIvFDV8YQIwRrE63ShEUoiIU55k18yIeu5DbPT2ra18budxtu4S9 JagcPHpod/ovLdyx+zqcOItY3lgRLgDxeBg8S++hOqC2wMJGAvPoFWCbCmDkI3au8mGf 12No5YlEL8OnZiEv4DLnQUt8HDD4k90Jhs+eCDKCF1x0n7SLEfbGJaiYPHPEiY8xiuG9 /JkQ== X-Gm-Message-State: AOAM531j+KiPjfEFAqR9PU/yX3Su+TuuwsNv99AXO76LiM6M3R9JXr6N oiwuyhQ3hwNeOiuRt5pFcy0XaA== X-Google-Smtp-Source: ABdhPJwUIaG4n4vquSxoVNtBJZqvn2Eps/h+0H0QVUubGzscK0wRQ39PS7+zWCKH5y//LRTwjbeEQQ== X-Received: by 2002:a05:600c:a45:: with SMTP id c5mr16790644wmq.153.1626120124338; Mon, 12 Jul 2021 13:02:04 -0700 (PDT) Received: from phenom.ffwll.local ([2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa]) by smtp.gmail.com with ESMTPSA id l14sm9858221wrs.22.2021.07.12.13.02.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Jul 2021 13:02:03 -0700 (PDT) From: Daniel Vetter To: DRI Development Date: Mon, 12 Jul 2021 19:53:40 +0200 Message-Id: <20210712175352.802687-7-daniel.vetter@ffwll.ch> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210712175352.802687-1-daniel.vetter@ffwll.ch> References: <20210712175352.802687-1-daniel.vetter@ffwll.ch> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH v4 06/18] 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 , =?UTF-8?q?Christian=20K=C3=B6nig?= , Daniel Vetter , Intel Graphics Development , Steven Price , 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" SnVzdCBkZWxldGVzIHNvbWUgY29kZSB0aGF0J3Mgbm93IG1vcmUgc2hhcmVkLgoKTm90ZSB0aGF0 IHRoYW5rcyB0byB0aGUgc3BsaXQgaW50byBkcm1fc2NoZWRfam9iX2luaXQvYXJtIHdlIGNhbiBu b3cKZWFzaWx5IHB1bGwgdGhlIF9pbml0KCkgcGFydCBmcm9tIHVuZGVyIHRoZSBzdWJtaXNzaW9u IGxvY2sgd2F5IGFoZWFkCndoZXJlIHdlJ3JlIGFkZGluZyB0aGUgc3luYyBmaWxlIGluLWZlbmNl cyBhcyBkZXBlbmRlbmNpZXMuCgp2MjogQ29ycmVjdGx5IGNsZWFuIHVwIHRoZSBwYXJ0aWFsbHkg c2V0IHVwIGpvYiwgbm93IHRoYXQgam9iX2luaXQoKQphbmQgam9iX2FybSgpIGFyZSBhcGFydCAo RW1tYSkuCgpSZXZpZXdlZC1ieTogU3RldmVuIFByaWNlIDxzdGV2ZW4ucHJpY2VAYXJtLmNvbT4K U2lnbmVkLW9mZi1ieTogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBpbnRlbC5jb20+CkNj OiBSb2IgSGVycmluZyA8cm9iaEBrZXJuZWwub3JnPgpDYzogVG9tZXUgVml6b3NvIDx0b21ldS52 aXpvc29AY29sbGFib3JhLmNvbT4KQ2M6IFN0ZXZlbiBQcmljZSA8c3RldmVuLnByaWNlQGFybS5j b20+CkNjOiBBbHlzc2EgUm9zZW56d2VpZyA8YWx5c3NhLnJvc2VuendlaWdAY29sbGFib3JhLmNv bT4KQ2M6IFN1bWl0IFNlbXdhbCA8c3VtaXQuc2Vtd2FsQGxpbmFyby5vcmc+CkNjOiAiQ2hyaXN0 aWFuIEvDtm5pZyIgPGNocmlzdGlhbi5rb2VuaWdAYW1kLmNvbT4KQ2M6IGxpbnV4LW1lZGlhQHZn ZXIua2VybmVsLm9yZwpDYzogbGluYXJvLW1tLXNpZ0BsaXN0cy5saW5hcm8ub3JnCi0tLQogZHJp dmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2Rydi5jIHwgMTYgKysrKysrKystLS0KIGRy aXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9qb2IuYyB8IDM3ICsrKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9qb2IuaCB8ICA1 ICstLS0KIDMgZmlsZXMgY2hhbmdlZCwgMTcgaW5zZXJ0aW9ucygrKSwgNDEgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2Rydi5jIGIv ZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2Rydi5jCmluZGV4IDFmZmFlZjVlYzVm Zi4uOWY1M2JlYTA3ZDYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFu ZnJvc3RfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2Rydi5j CkBAIC0yMTgsNyArMjE4LDcgQEAgcGFuZnJvc3RfY29weV9pbl9zeW5jKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsCiAJCWlmIChyZXQpCiAJCQlnb3RvIGZhaWw7CiAKLQkJcmV0ID0gZHJtX2dlbV9m ZW5jZV9hcnJheV9hZGQoJmpvYi0+ZGVwcywgZmVuY2UpOworCQlyZXQgPSBkcm1fc2NoZWRfam9i X2F3YWl0X2ZlbmNlKCZqb2ItPmJhc2UsIGZlbmNlKTsKIAogCQlpZiAocmV0KQogCQkJZ290byBm YWlsOwpAQCAtMjM2LDcgKzIzNiw3IEBAIHN0YXRpYyBpbnQgcGFuZnJvc3RfaW9jdGxfc3VibWl0 KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJc3RydWN0IGRybV9wYW5mcm9z dF9zdWJtaXQgKmFyZ3MgPSBkYXRhOwogCXN0cnVjdCBkcm1fc3luY29iaiAqc3luY19vdXQgPSBO VUxMOwogCXN0cnVjdCBwYW5mcm9zdF9qb2IgKmpvYjsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0 ID0gMCwgc2xvdDsKIAogCWlmICghYXJncy0+amMpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjU4 LDE0ICsyNTgsMjAgQEAgc3RhdGljIGludCBwYW5mcm9zdF9pb2N0bF9zdWJtaXQoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAogCWtyZWZfaW5pdCgmam9iLT5yZWZjb3VudCk7 CiAKLQl4YV9pbml0X2ZsYWdzKCZqb2ItPmRlcHMsIFhBX0ZMQUdTX0FMTE9DKTsKLQogCWpvYi0+ cGZkZXYgPSBwZmRldjsKIAlqb2ItPmpjID0gYXJncy0+amM7CiAJam9iLT5yZXF1aXJlbWVudHMg PSBhcmdzLT5yZXF1aXJlbWVudHM7CiAJam9iLT5mbHVzaF9pZCA9IHBhbmZyb3N0X2dwdV9nZXRf bGF0ZXN0X2ZsdXNoX2lkKHBmZGV2KTsKIAlqb2ItPmZpbGVfcHJpdiA9IGZpbGUtPmRyaXZlcl9w cml2OwogCisJc2xvdCA9IHBhbmZyb3N0X2pvYl9nZXRfc2xvdChqb2IpOworCisJcmV0ID0gZHJt X3NjaGVkX2pvYl9pbml0KCZqb2ItPmJhc2UsCisJCQkJICZqb2ItPmZpbGVfcHJpdi0+c2NoZWRf ZW50aXR5W3Nsb3RdLAorCQkJCSBOVUxMKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxfam9iX3B1 dDsKKwogCXJldCA9IHBhbmZyb3N0X2NvcHlfaW5fc3luYyhkZXYsIGZpbGUsIGFyZ3MsIGpvYik7 CiAJaWYgKHJldCkKIAkJZ290byBmYWlsX2pvYjsKQEAgLTI4Myw2ICsyODksOCBAQCBzdGF0aWMg aW50IHBhbmZyb3N0X2lvY3RsX3N1Ym1pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpk YXRhLAogCQlkcm1fc3luY29ial9yZXBsYWNlX2ZlbmNlKHN5bmNfb3V0LCBqb2ItPnJlbmRlcl9k b25lX2ZlbmNlKTsKIAogZmFpbF9qb2I6CisJZHJtX3NjaGVkX2pvYl9jbGVhbnVwKCZqb2ItPmJh c2UpOworZmFpbF9qb2JfcHV0OgogCXBhbmZyb3N0X2pvYl9wdXQoam9iKTsKIGZhaWxfb3V0X3N5 bmM6CiAJaWYgKHN5bmNfb3V0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0 L3BhbmZyb3N0X2pvYi5jIGIvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2pvYi5j CmluZGV4IDRiYzk2Mjc2M2UxZi4uODZjODQzZDg4MjJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vcGFuZnJvc3QvcGFuZnJvc3Rfam9iLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmZy b3N0L3BhbmZyb3N0X2pvYi5jCkBAIC0xMDIsNyArMTAyLDcgQEAgc3RhdGljIHN0cnVjdCBkbWFf ZmVuY2UgKnBhbmZyb3N0X2ZlbmNlX2NyZWF0ZShzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRl diwgaW4KIAlyZXR1cm4gJmZlbmNlLT5iYXNlOwogfQogCi1zdGF0aWMgaW50IHBhbmZyb3N0X2pv Yl9nZXRfc2xvdChzdHJ1Y3QgcGFuZnJvc3Rfam9iICpqb2IpCitpbnQgcGFuZnJvc3Rfam9iX2dl dF9zbG90KHN0cnVjdCBwYW5mcm9zdF9qb2IgKmpvYikKIHsKIAkvKiBKUzA6IGZyYWdtZW50IGpv YnMuCiAJICogSlMxOiB2ZXJ0ZXgvdGlsZXIgam9icwpAQCAtMjQyLDEzICsyNDIsMTMgQEAgc3Rh dGljIHZvaWQgcGFuZnJvc3Rfam9iX2h3X3N1Ym1pdChzdHJ1Y3QgcGFuZnJvc3Rfam9iICpqb2Is IGludCBqcykKIAogc3RhdGljIGludCBwYW5mcm9zdF9hY3F1aXJlX29iamVjdF9mZW5jZXMoc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICoqYm9zLAogCQkJCQkgIGludCBib19jb3VudCwKLQkJCQkJICBz dHJ1Y3QgeGFycmF5ICpkZXBzKQorCQkJCQkgIHN0cnVjdCBkcm1fc2NoZWRfam9iICpqb2IpCiB7 CiAJaW50IGksIHJldDsKIAogCWZvciAoaSA9IDA7IGkgPCBib19jb3VudDsgaSsrKSB7CiAJCS8q IHBhbmZyb3N0IGFsd2F5cyB1c2VzIHdyaXRlIG1vZGUgaW4gaXRzIGN1cnJlbnQgdWFwaSAqLwot CQlyZXQgPSBkcm1fZ2VtX2ZlbmNlX2FycmF5X2FkZF9pbXBsaWNpdChkZXBzLCBib3NbaV0sIHRy dWUpOworCQlyZXQgPSBkcm1fc2NoZWRfam9iX2F3YWl0X2ltcGxpY2l0KGpvYiwgYm9zW2ldLCB0 cnVlKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJfQpAQCAtMjY5LDMxICsyNjksMjEg QEAgc3RhdGljIHZvaWQgcGFuZnJvc3RfYXR0YWNoX29iamVjdF9mZW5jZXMoc3RydWN0IGRybV9n ZW1fb2JqZWN0ICoqYm9zLAogaW50IHBhbmZyb3N0X2pvYl9wdXNoKHN0cnVjdCBwYW5mcm9zdF9q b2IgKmpvYikKIHsKIAlzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldiA9IGpvYi0+cGZkZXY7 Ci0JaW50IHNsb3QgPSBwYW5mcm9zdF9qb2JfZ2V0X3Nsb3Qoam9iKTsKLQlzdHJ1Y3QgZHJtX3Nj aGVkX2VudGl0eSAqZW50aXR5ID0gJmpvYi0+ZmlsZV9wcml2LT5zY2hlZF9lbnRpdHlbc2xvdF07 CiAJc3RydWN0IHd3X2FjcXVpcmVfY3R4IGFjcXVpcmVfY3R4OwogCWludCByZXQgPSAwOwogCi0K IAlyZXQgPSBkcm1fZ2VtX2xvY2tfcmVzZXJ2YXRpb25zKGpvYi0+Ym9zLCBqb2ItPmJvX2NvdW50 LAogCQkJCQkgICAgJmFjcXVpcmVfY3R4KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCiAJ bXV0ZXhfbG9jaygmcGZkZXYtPnNjaGVkX2xvY2spOwotCi0JcmV0ID0gZHJtX3NjaGVkX2pvYl9p bml0KCZqb2ItPmJhc2UsIGVudGl0eSwgTlVMTCk7Ci0JaWYgKHJldCkgewotCQltdXRleF91bmxv Y2soJnBmZGV2LT5zY2hlZF9sb2NrKTsKLQkJZ290byB1bmxvY2s7Ci0JfQotCiAJZHJtX3NjaGVk X2pvYl9hcm0oJmpvYi0+YmFzZSk7CiAKIAlqb2ItPnJlbmRlcl9kb25lX2ZlbmNlID0gZG1hX2Zl bmNlX2dldCgmam9iLT5iYXNlLnNfZmVuY2UtPmZpbmlzaGVkKTsKIAogCXJldCA9IHBhbmZyb3N0 X2FjcXVpcmVfb2JqZWN0X2ZlbmNlcyhqb2ItPmJvcywgam9iLT5ib19jb3VudCwKLQkJCQkJICAg ICAmam9iLT5kZXBzKTsKKwkJCQkJICAgICAmam9iLT5iYXNlKTsKIAlpZiAocmV0KSB7CiAJCW11 dGV4X3VubG9jaygmcGZkZXYtPnNjaGVkX2xvY2spOwogCQlnb3RvIHVubG9jazsKQEAgLTMxOCwx NSArMzA4LDggQEAgc3RhdGljIHZvaWQgcGFuZnJvc3Rfam9iX2NsZWFudXAoc3RydWN0IGtyZWYg KnJlZikKIHsKIAlzdHJ1Y3QgcGFuZnJvc3Rfam9iICpqb2IgPSBjb250YWluZXJfb2YocmVmLCBz dHJ1Y3QgcGFuZnJvc3Rfam9iLAogCQkJCQkJcmVmY291bnQpOwotCXN0cnVjdCBkbWFfZmVuY2Ug KmZlbmNlOwotCXVuc2lnbmVkIGxvbmcgaW5kZXg7CiAJdW5zaWduZWQgaW50IGk7CiAKLQl4YV9m b3JfZWFjaCgmam9iLT5kZXBzLCBpbmRleCwgZmVuY2UpIHsKLQkJZG1hX2ZlbmNlX3B1dChmZW5j ZSk7Ci0JfQotCXhhX2Rlc3Ryb3koJmpvYi0+ZGVwcyk7Ci0KIAlkbWFfZmVuY2VfcHV0KGpvYi0+ ZG9uZV9mZW5jZSk7CiAJZG1hX2ZlbmNlX3B1dChqb2ItPnJlbmRlcl9kb25lX2ZlbmNlKTsKIApA QCAtMzY1LDE3ICszNDgsNiBAQCBzdGF0aWMgdm9pZCBwYW5mcm9zdF9qb2JfZnJlZShzdHJ1Y3Qg ZHJtX3NjaGVkX2pvYiAqc2NoZWRfam9iKQogCXBhbmZyb3N0X2pvYl9wdXQoam9iKTsKIH0KIAot c3RhdGljIHN0cnVjdCBkbWFfZmVuY2UgKnBhbmZyb3N0X2pvYl9kZXBlbmRlbmN5KHN0cnVjdCBk cm1fc2NoZWRfam9iICpzY2hlZF9qb2IsCi0JCQkJCQkgc3RydWN0IGRybV9zY2hlZF9lbnRpdHkg KnNfZW50aXR5KQotewotCXN0cnVjdCBwYW5mcm9zdF9qb2IgKmpvYiA9IHRvX3BhbmZyb3N0X2pv YihzY2hlZF9qb2IpOwotCi0JaWYgKCF4YV9lbXB0eSgmam9iLT5kZXBzKSkKLQkJcmV0dXJuIHhh X2VyYXNlKCZqb2ItPmRlcHMsIGpvYi0+bGFzdF9kZXArKyk7Ci0KLQlyZXR1cm4gTlVMTDsKLX0K LQogc3RhdGljIHN0cnVjdCBkbWFfZmVuY2UgKnBhbmZyb3N0X2pvYl9ydW4oc3RydWN0IGRybV9z Y2hlZF9qb2IgKnNjaGVkX2pvYikKIHsKIAlzdHJ1Y3QgcGFuZnJvc3Rfam9iICpqb2IgPSB0b19w YW5mcm9zdF9qb2Ioc2NoZWRfam9iKTsKQEAgLTc2NSw3ICs3MzcsNiBAQCBzdGF0aWMgdm9pZCBw YW5mcm9zdF9yZXNldF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIH0KIAogc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fc2NoZWRfYmFja2VuZF9vcHMgcGFuZnJvc3Rfc2NoZWRfb3BzID0g ewotCS5kZXBlbmRlbmN5ID0gcGFuZnJvc3Rfam9iX2RlcGVuZGVuY3ksCiAJLnJ1bl9qb2IgPSBw YW5mcm9zdF9qb2JfcnVuLAogCS50aW1lZG91dF9qb2IgPSBwYW5mcm9zdF9qb2JfdGltZWRvdXQs CiAJLmZyZWVfam9iID0gcGFuZnJvc3Rfam9iX2ZyZWUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9qb2IuaCBiL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9w YW5mcm9zdF9qb2IuaAppbmRleCA4MjMwNmEwM2I1N2UuLjc3ZTZkMGU2ZjYxMiAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2pvYi5oCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9qb2IuaApAQCAtMTksMTAgKzE5LDYgQEAgc3RydWN0 IHBhbmZyb3N0X2pvYiB7CiAJc3RydWN0IHBhbmZyb3N0X2RldmljZSAqcGZkZXY7CiAJc3RydWN0 IHBhbmZyb3N0X2ZpbGVfcHJpdiAqZmlsZV9wcml2OwogCi0JLyogQ29udGFpbnMgYm90aCBleHBs aWNpdCBhbmQgaW1wbGljaXQgZmVuY2VzICovCi0Jc3RydWN0IHhhcnJheSBkZXBzOwotCXVuc2ln bmVkIGxvbmcgbGFzdF9kZXA7Ci0KIAkvKiBGZW5jZSB0byBiZSBzaWduYWxlZCBieSBJUlEgaGFu ZGxlciB3aGVuIHRoZSBqb2IgaXMgY29tcGxldGUuICovCiAJc3RydWN0IGRtYV9mZW5jZSAqZG9u ZV9mZW5jZTsKIApAQCAtNDIsNiArMzgsNyBAQCBpbnQgcGFuZnJvc3Rfam9iX2luaXQoc3RydWN0 IHBhbmZyb3N0X2RldmljZSAqcGZkZXYpOwogdm9pZCBwYW5mcm9zdF9qb2JfZmluaShzdHJ1Y3Qg cGFuZnJvc3RfZGV2aWNlICpwZmRldik7CiBpbnQgcGFuZnJvc3Rfam9iX29wZW4oc3RydWN0IHBh bmZyb3N0X2ZpbGVfcHJpdiAqcGFuZnJvc3RfcHJpdik7CiB2b2lkIHBhbmZyb3N0X2pvYl9jbG9z ZShzdHJ1Y3QgcGFuZnJvc3RfZmlsZV9wcml2ICpwYW5mcm9zdF9wcml2KTsKK2ludCBwYW5mcm9z dF9qb2JfZ2V0X3Nsb3Qoc3RydWN0IHBhbmZyb3N0X2pvYiAqam9iKTsKIGludCBwYW5mcm9zdF9q b2JfcHVzaChzdHJ1Y3QgcGFuZnJvc3Rfam9iICpqb2IpOwogdm9pZCBwYW5mcm9zdF9qb2JfcHV0 KHN0cnVjdCBwYW5mcm9zdF9qb2IgKmpvYik7CiB2b2lkIHBhbmZyb3N0X2pvYl9lbmFibGVfaW50 ZXJydXB0cyhzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldik7Ci0tIAoyLjMyLjAKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWls aW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=