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.7 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 834FCC433B4 for ; Fri, 21 May 2021 09:10:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 52582613CA for ; Fri, 21 May 2021 09:10:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235567AbhEUJLc (ORCPT ); Fri, 21 May 2021 05:11:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54122 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233695AbhEUJLb (ORCPT ); Fri, 21 May 2021 05:11:31 -0400 Received: from mail-wr1-x432.google.com (mail-wr1-x432.google.com [IPv6:2a00:1450:4864:20::432]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A7A47C061574 for ; Fri, 21 May 2021 02:10:08 -0700 (PDT) Received: by mail-wr1-x432.google.com with SMTP id z17so20281547wrq.7 for ; Fri, 21 May 2021 02:10:08 -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=uR9DJ2jr8CtcwsyrpRGKPhRjzhUtmedeglZUml8ukWI=; b=D358aI72G7Z8RB1g0ZjFMZ550KSzBgA01qygw0+7GbzVZyVPpi+fbyIfMjSzFocn1M ZHY3VuqQTFFGTnqiz2rrknwFjnc9bugVRhUc4PBRVYITNWRLCy+/yT9BWhDjLmoB1TLp 2hD2rj6mpcyXXjkmi/fOmlXrQqcqtAhn/OVVE= 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=uR9DJ2jr8CtcwsyrpRGKPhRjzhUtmedeglZUml8ukWI=; b=ce+kqq0L1Brw2a2/VR4fZrm9SMt6c1qSPKQSPEYExw0GSjn2bUn0W14DxayI1fVmKT 6S6NS/uIJf4+3n9Y9jbyEegwRBYA8q3J5shIpQT2Q4ZpLNxEwBVl1xLgiaLKqvBCVHv7 eTCskCfzEm/XnGbWHvPPdy8uOT4EIUY1qsoGorPJQW17xnFbKQZsXcr4b+uwkohFM5j2 nL8NdSH002pVo/mcfLmgaO/J2AwwmYKk3M1ysiol+5W0UGTHY0z8MMYZAl0O+b2jHG7o +2oUJsQeSHreSXUKzAllYnfuhmdyvsGeJIL/WA9ElUuVSoMkleO9bAtSbnsGRlNCC+5z tnjw== X-Gm-Message-State: AOAM530cA5t1vZVhDDrYJusW0gUEQFJ+MDuYrBAI6dlAhqld06rEMVzp qq3dgXb3nQwSs3zIRaSxFBJAgw== X-Google-Smtp-Source: ABdhPJyV03WtTPWcuWSUSfzX27B39Gja1SJYx6ys8Uq9kTJPc/guCGF6Ua1Qi84vOdtB1jBqU6XmOw== X-Received: by 2002:a5d:6d8f:: with SMTP id l15mr8522028wrs.313.1621588207333; Fri, 21 May 2021 02:10:07 -0700 (PDT) Received: from phenom.ffwll.local ([2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa]) by smtp.gmail.com with ESMTPSA id y2sm13589457wmq.45.2021.05.21.02.10.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 May 2021 02:10:06 -0700 (PDT) From: Daniel Vetter To: DRI Development Cc: Intel Graphics Development , Daniel Vetter , =?UTF-8?q?Christian=20K=C3=B6nig?= , Luben Tuikov , Alex Deucher , Lee Jones , Steven Price , Rob Herring , Tomeu Vizoso , Alyssa Rosenzweig , Sumit Semwal , linux-media@vger.kernel.org, linaro-mm-sig@lists.linaro.org, Daniel Vetter Subject: [PATCH 03/11] drm/panfrost: Use xarray and helpers for depedency tracking Date: Fri, 21 May 2021 11:09:51 +0200 Message-Id: <20210521090959.1663703-3-daniel.vetter@ffwll.ch> X-Mailer: git-send-email 2.31.0 In-Reply-To: <20210521090959.1663703-1-daniel.vetter@ffwll.ch> References: <20210521090959.1663703-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 More consistency and prep work for the next patch. Aside: I wonder whether we shouldn't just move this entire xarray business into the scheduler so that not everyone has to reinvent the same wheels. Cc'ing some scheduler people for this too. Cc: "Christian König" Cc: Luben Tuikov Cc: Alex Deucher Cc: Lee Jones Cc: Steven Price Cc: Rob Herring Cc: Tomeu Vizoso Cc: Alyssa Rosenzweig Cc: Sumit Semwal Cc: linux-media@vger.kernel.org Cc: linaro-mm-sig@lists.linaro.org Signed-off-by: Daniel Vetter --- drivers/gpu/drm/panfrost/panfrost_drv.c | 41 ++++++++--------- drivers/gpu/drm/panfrost/panfrost_job.c | 61 ++++++++++--------------- drivers/gpu/drm/panfrost/panfrost_job.h | 8 ++-- 3 files changed, 46 insertions(+), 64 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c index ca07098a6141..7977b4752b5c 100644 --- a/drivers/gpu/drm/panfrost/panfrost_drv.c +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c @@ -137,12 +137,6 @@ panfrost_lookup_bos(struct drm_device *dev, if (!job->bo_count) return 0; - job->implicit_fences = kvmalloc_array(job->bo_count, - sizeof(struct dma_fence *), - GFP_KERNEL | __GFP_ZERO); - if (!job->implicit_fences) - return -ENOMEM; - ret = drm_gem_objects_lookup(file_priv, (void __user *)(uintptr_t)args->bo_handles, job->bo_count, &job->bos); @@ -173,7 +167,7 @@ panfrost_lookup_bos(struct drm_device *dev, } /** - * panfrost_copy_in_sync() - Sets up job->in_fences[] with the sync objects + * panfrost_copy_in_sync() - Sets up job->deps with the sync objects * referenced by the job. * @dev: DRM device * @file_priv: DRM file for this fd @@ -193,22 +187,14 @@ panfrost_copy_in_sync(struct drm_device *dev, { u32 *handles; int ret = 0; - int i; + int i, in_fence_count; - job->in_fence_count = args->in_sync_count; + in_fence_count = args->in_sync_count; - if (!job->in_fence_count) + if (!in_fence_count) return 0; - job->in_fences = kvmalloc_array(job->in_fence_count, - sizeof(struct dma_fence *), - GFP_KERNEL | __GFP_ZERO); - if (!job->in_fences) { - DRM_DEBUG("Failed to allocate job in fences\n"); - return -ENOMEM; - } - - handles = kvmalloc_array(job->in_fence_count, sizeof(u32), GFP_KERNEL); + handles = kvmalloc_array(in_fence_count, sizeof(u32), GFP_KERNEL); if (!handles) { ret = -ENOMEM; DRM_DEBUG("Failed to allocate incoming syncobj handles\n"); @@ -217,16 +203,23 @@ panfrost_copy_in_sync(struct drm_device *dev, if (copy_from_user(handles, (void __user *)(uintptr_t)args->in_syncs, - job->in_fence_count * sizeof(u32))) { + in_fence_count * sizeof(u32))) { ret = -EFAULT; DRM_DEBUG("Failed to copy in syncobj handles\n"); goto fail; } - for (i = 0; i < job->in_fence_count; i++) { + for (i = 0; i < in_fence_count; i++) { + struct dma_fence *fence; + ret = drm_syncobj_find_fence(file_priv, handles[i], 0, 0, - &job->in_fences[i]); - if (ret == -EINVAL) + &fence); + if (ret) + goto fail; + + ret = drm_gem_fence_array_add(&job->deps, fence); + + if (ret) goto fail; } @@ -264,6 +257,8 @@ 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; diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panfrost/panfrost_job.c index f5d39ee14ab5..707d912ff64a 100644 --- a/drivers/gpu/drm/panfrost/panfrost_job.c +++ b/drivers/gpu/drm/panfrost/panfrost_job.c @@ -196,14 +196,21 @@ static void panfrost_job_hw_submit(struct panfrost_job *job, int js) job_write(pfdev, JS_COMMAND_NEXT(js), JS_COMMAND_START); } -static void panfrost_acquire_object_fences(struct drm_gem_object **bos, - int bo_count, - struct dma_fence **implicit_fences) +static int panfrost_acquire_object_fences(struct drm_gem_object **bos, + int bo_count, + struct xarray *deps) { - int i; + int i, ret; - for (i = 0; i < bo_count; i++) - implicit_fences[i] = dma_resv_get_excl_rcu(bos[i]->resv); + for (i = 0; i < bo_count; i++) { + struct dma_fence *fence = dma_resv_get_excl_rcu(bos[i]->resv); + + ret = drm_gem_fence_array_add(deps, fence); + if (ret) + return ret; + } + + return 0; } static void panfrost_attach_object_fences(struct drm_gem_object **bos, @@ -236,8 +243,10 @@ int panfrost_job_push(struct panfrost_job *job) kref_get(&job->refcount); /* put by scheduler job completion */ - panfrost_acquire_object_fences(job->bos, job->bo_count, - job->implicit_fences); + ret = panfrost_acquire_object_fences(job->bos, job->bo_count, + &job->deps); + if (ret) + goto unlock; drm_sched_entity_push_job(&job->base, entity); @@ -254,18 +263,15 @@ 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; - if (job->in_fences) { - for (i = 0; i < job->in_fence_count; i++) - dma_fence_put(job->in_fences[i]); - kvfree(job->in_fences); - } - if (job->implicit_fences) { - for (i = 0; i < job->bo_count; i++) - dma_fence_put(job->implicit_fences[i]); - kvfree(job->implicit_fences); + 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); @@ -308,26 +314,9 @@ 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); - struct dma_fence *fence; - unsigned int i; - /* Explicit fences */ - for (i = 0; i < job->in_fence_count; i++) { - if (job->in_fences[i]) { - fence = job->in_fences[i]; - job->in_fences[i] = NULL; - return fence; - } - } - - /* Implicit fences, max. one per BO */ - for (i = 0; i < job->bo_count; i++) { - if (job->implicit_fences[i]) { - fence = job->implicit_fences[i]; - job->implicit_fences[i] = NULL; - return fence; - } - } + if (!xa_empty(&job->deps)) + return xa_erase(&job->deps, job->last_dep++); return NULL; } diff --git a/drivers/gpu/drm/panfrost/panfrost_job.h b/drivers/gpu/drm/panfrost/panfrost_job.h index bbd3ba97ff67..82306a03b57e 100644 --- a/drivers/gpu/drm/panfrost/panfrost_job.h +++ b/drivers/gpu/drm/panfrost/panfrost_job.h @@ -19,9 +19,9 @@ struct panfrost_job { struct panfrost_device *pfdev; struct panfrost_file_priv *file_priv; - /* Optional fences userspace can pass in for the job to depend on. */ - struct dma_fence **in_fences; - u32 in_fence_count; + /* 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; @@ -30,8 +30,6 @@ struct panfrost_job { __u32 requirements; __u32 flush_id; - /* Exclusive fences we have taken from the BOs to wait for */ - struct dma_fence **implicit_fences; struct panfrost_gem_mapping **mappings; struct drm_gem_object **bos; u32 bo_count; -- 2.31.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.5 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 877EAC433ED for ; Fri, 21 May 2021 09:10:25 +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 4AADF613AC for ; Fri, 21 May 2021 09:10:25 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4AADF613AC 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 B07F06F5F7; Fri, 21 May 2021 09:10:15 +0000 (UTC) Received: from mail-wr1-x433.google.com (mail-wr1-x433.google.com [IPv6:2a00:1450:4864:20::433]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6E7616F5E8 for ; Fri, 21 May 2021 09:10:08 +0000 (UTC) Received: by mail-wr1-x433.google.com with SMTP id q5so20294335wrs.4 for ; Fri, 21 May 2021 02:10:08 -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=uR9DJ2jr8CtcwsyrpRGKPhRjzhUtmedeglZUml8ukWI=; b=D358aI72G7Z8RB1g0ZjFMZ550KSzBgA01qygw0+7GbzVZyVPpi+fbyIfMjSzFocn1M ZHY3VuqQTFFGTnqiz2rrknwFjnc9bugVRhUc4PBRVYITNWRLCy+/yT9BWhDjLmoB1TLp 2hD2rj6mpcyXXjkmi/fOmlXrQqcqtAhn/OVVE= 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=uR9DJ2jr8CtcwsyrpRGKPhRjzhUtmedeglZUml8ukWI=; b=Np3HMJwQ/CHD/2CKGD0xgUx83UBFMgPLQ8v1THWEWvNibe6tY0QyWduHB/D22ZbZo3 +oeY2WclCAbQwo01b8P4bl6EISc8fIZnBwjRtaBIhw0NOzu4qU/Sht9mmihSOS6zdiHx 0C6S7f0RzdE4etSigqqTII2419zpw7mdTLvAiw1Y2tTAFNSuXaHJfzrWnuB9PqxTGRam /5KpeuiiRk5MKPao6AOsaDNdVWHI0tz/gCSenP7WAvReXLoMEbkp7HKW06+QNIIFrOKz Yjxdv9yPAP+9hhVDhFTaPyRRRT7SGIvU3R2VoKN4RVfwA0bSPpL/6+qef70tYGCvGHLT JY+g== X-Gm-Message-State: AOAM531ObWLa/RfnbPSoG5d3NdX2Z43+KrHiPKeepjUM+TW28FcKxP4x sdcSpEWCspRkdhFuATYMZrYn7o0rw0b18A== X-Google-Smtp-Source: ABdhPJyV03WtTPWcuWSUSfzX27B39Gja1SJYx6ys8Uq9kTJPc/guCGF6Ua1Qi84vOdtB1jBqU6XmOw== X-Received: by 2002:a5d:6d8f:: with SMTP id l15mr8522028wrs.313.1621588207333; Fri, 21 May 2021 02:10:07 -0700 (PDT) Received: from phenom.ffwll.local ([2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa]) by smtp.gmail.com with ESMTPSA id y2sm13589457wmq.45.2021.05.21.02.10.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 May 2021 02:10:06 -0700 (PDT) From: Daniel Vetter To: DRI Development Subject: [PATCH 03/11] drm/panfrost: Use xarray and helpers for depedency tracking Date: Fri, 21 May 2021 11:09:51 +0200 Message-Id: <20210521090959.1663703-3-daniel.vetter@ffwll.ch> X-Mailer: git-send-email 2.31.0 In-Reply-To: <20210521090959.1663703-1-daniel.vetter@ffwll.ch> References: <20210521090959.1663703-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 , Daniel Vetter , Intel Graphics Development , Steven Price , linaro-mm-sig@lists.linaro.org, Luben Tuikov , Alyssa Rosenzweig , Alex Deucher , Daniel Vetter , Lee Jones , =?UTF-8?q?Christian=20K=C3=B6nig?= , linux-media@vger.kernel.org Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" More consistency and prep work for the next patch. Aside: I wonder whether we shouldn't just move this entire xarray business into the scheduler so that not everyone has to reinvent the same wheels. Cc'ing some scheduler people for this too. Cc: "Christian König" Cc: Luben Tuikov Cc: Alex Deucher Cc: Lee Jones Cc: Steven Price Cc: Rob Herring Cc: Tomeu Vizoso Cc: Alyssa Rosenzweig Cc: Sumit Semwal Cc: linux-media@vger.kernel.org Cc: linaro-mm-sig@lists.linaro.org Signed-off-by: Daniel Vetter --- drivers/gpu/drm/panfrost/panfrost_drv.c | 41 ++++++++--------- drivers/gpu/drm/panfrost/panfrost_job.c | 61 ++++++++++--------------- drivers/gpu/drm/panfrost/panfrost_job.h | 8 ++-- 3 files changed, 46 insertions(+), 64 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c index ca07098a6141..7977b4752b5c 100644 --- a/drivers/gpu/drm/panfrost/panfrost_drv.c +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c @@ -137,12 +137,6 @@ panfrost_lookup_bos(struct drm_device *dev, if (!job->bo_count) return 0; - job->implicit_fences = kvmalloc_array(job->bo_count, - sizeof(struct dma_fence *), - GFP_KERNEL | __GFP_ZERO); - if (!job->implicit_fences) - return -ENOMEM; - ret = drm_gem_objects_lookup(file_priv, (void __user *)(uintptr_t)args->bo_handles, job->bo_count, &job->bos); @@ -173,7 +167,7 @@ panfrost_lookup_bos(struct drm_device *dev, } /** - * panfrost_copy_in_sync() - Sets up job->in_fences[] with the sync objects + * panfrost_copy_in_sync() - Sets up job->deps with the sync objects * referenced by the job. * @dev: DRM device * @file_priv: DRM file for this fd @@ -193,22 +187,14 @@ panfrost_copy_in_sync(struct drm_device *dev, { u32 *handles; int ret = 0; - int i; + int i, in_fence_count; - job->in_fence_count = args->in_sync_count; + in_fence_count = args->in_sync_count; - if (!job->in_fence_count) + if (!in_fence_count) return 0; - job->in_fences = kvmalloc_array(job->in_fence_count, - sizeof(struct dma_fence *), - GFP_KERNEL | __GFP_ZERO); - if (!job->in_fences) { - DRM_DEBUG("Failed to allocate job in fences\n"); - return -ENOMEM; - } - - handles = kvmalloc_array(job->in_fence_count, sizeof(u32), GFP_KERNEL); + handles = kvmalloc_array(in_fence_count, sizeof(u32), GFP_KERNEL); if (!handles) { ret = -ENOMEM; DRM_DEBUG("Failed to allocate incoming syncobj handles\n"); @@ -217,16 +203,23 @@ panfrost_copy_in_sync(struct drm_device *dev, if (copy_from_user(handles, (void __user *)(uintptr_t)args->in_syncs, - job->in_fence_count * sizeof(u32))) { + in_fence_count * sizeof(u32))) { ret = -EFAULT; DRM_DEBUG("Failed to copy in syncobj handles\n"); goto fail; } - for (i = 0; i < job->in_fence_count; i++) { + for (i = 0; i < in_fence_count; i++) { + struct dma_fence *fence; + ret = drm_syncobj_find_fence(file_priv, handles[i], 0, 0, - &job->in_fences[i]); - if (ret == -EINVAL) + &fence); + if (ret) + goto fail; + + ret = drm_gem_fence_array_add(&job->deps, fence); + + if (ret) goto fail; } @@ -264,6 +257,8 @@ 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; diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panfrost/panfrost_job.c index f5d39ee14ab5..707d912ff64a 100644 --- a/drivers/gpu/drm/panfrost/panfrost_job.c +++ b/drivers/gpu/drm/panfrost/panfrost_job.c @@ -196,14 +196,21 @@ static void panfrost_job_hw_submit(struct panfrost_job *job, int js) job_write(pfdev, JS_COMMAND_NEXT(js), JS_COMMAND_START); } -static void panfrost_acquire_object_fences(struct drm_gem_object **bos, - int bo_count, - struct dma_fence **implicit_fences) +static int panfrost_acquire_object_fences(struct drm_gem_object **bos, + int bo_count, + struct xarray *deps) { - int i; + int i, ret; - for (i = 0; i < bo_count; i++) - implicit_fences[i] = dma_resv_get_excl_rcu(bos[i]->resv); + for (i = 0; i < bo_count; i++) { + struct dma_fence *fence = dma_resv_get_excl_rcu(bos[i]->resv); + + ret = drm_gem_fence_array_add(deps, fence); + if (ret) + return ret; + } + + return 0; } static void panfrost_attach_object_fences(struct drm_gem_object **bos, @@ -236,8 +243,10 @@ int panfrost_job_push(struct panfrost_job *job) kref_get(&job->refcount); /* put by scheduler job completion */ - panfrost_acquire_object_fences(job->bos, job->bo_count, - job->implicit_fences); + ret = panfrost_acquire_object_fences(job->bos, job->bo_count, + &job->deps); + if (ret) + goto unlock; drm_sched_entity_push_job(&job->base, entity); @@ -254,18 +263,15 @@ 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; - if (job->in_fences) { - for (i = 0; i < job->in_fence_count; i++) - dma_fence_put(job->in_fences[i]); - kvfree(job->in_fences); - } - if (job->implicit_fences) { - for (i = 0; i < job->bo_count; i++) - dma_fence_put(job->implicit_fences[i]); - kvfree(job->implicit_fences); + 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); @@ -308,26 +314,9 @@ 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); - struct dma_fence *fence; - unsigned int i; - /* Explicit fences */ - for (i = 0; i < job->in_fence_count; i++) { - if (job->in_fences[i]) { - fence = job->in_fences[i]; - job->in_fences[i] = NULL; - return fence; - } - } - - /* Implicit fences, max. one per BO */ - for (i = 0; i < job->bo_count; i++) { - if (job->implicit_fences[i]) { - fence = job->implicit_fences[i]; - job->implicit_fences[i] = NULL; - return fence; - } - } + if (!xa_empty(&job->deps)) + return xa_erase(&job->deps, job->last_dep++); return NULL; } diff --git a/drivers/gpu/drm/panfrost/panfrost_job.h b/drivers/gpu/drm/panfrost/panfrost_job.h index bbd3ba97ff67..82306a03b57e 100644 --- a/drivers/gpu/drm/panfrost/panfrost_job.h +++ b/drivers/gpu/drm/panfrost/panfrost_job.h @@ -19,9 +19,9 @@ struct panfrost_job { struct panfrost_device *pfdev; struct panfrost_file_priv *file_priv; - /* Optional fences userspace can pass in for the job to depend on. */ - struct dma_fence **in_fences; - u32 in_fence_count; + /* 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; @@ -30,8 +30,6 @@ struct panfrost_job { __u32 requirements; __u32 flush_id; - /* Exclusive fences we have taken from the BOs to wait for */ - struct dma_fence **implicit_fences; struct panfrost_gem_mapping **mappings; struct drm_gem_object **bos; u32 bo_count; -- 2.31.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.5 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 8BDD7C433ED for ; Fri, 21 May 2021 09:10:21 +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 4CA4C613AC for ; Fri, 21 May 2021 09:10:21 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4CA4C613AC 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 A20826F5EA; Fri, 21 May 2021 09:10:11 +0000 (UTC) Received: from mail-wr1-x433.google.com (mail-wr1-x433.google.com [IPv6:2a00:1450:4864:20::433]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6DE026F5E7 for ; Fri, 21 May 2021 09:10:08 +0000 (UTC) Received: by mail-wr1-x433.google.com with SMTP id x7so686163wrt.12 for ; Fri, 21 May 2021 02:10:08 -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=uR9DJ2jr8CtcwsyrpRGKPhRjzhUtmedeglZUml8ukWI=; b=D358aI72G7Z8RB1g0ZjFMZ550KSzBgA01qygw0+7GbzVZyVPpi+fbyIfMjSzFocn1M ZHY3VuqQTFFGTnqiz2rrknwFjnc9bugVRhUc4PBRVYITNWRLCy+/yT9BWhDjLmoB1TLp 2hD2rj6mpcyXXjkmi/fOmlXrQqcqtAhn/OVVE= 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=uR9DJ2jr8CtcwsyrpRGKPhRjzhUtmedeglZUml8ukWI=; b=bvXRC6YK3NIOICXLYlA8hCwOOfrGmVYWtOAXVEmU2B/RFL0xsT+Z/Ne5ZpWkBfp/m8 bi3GidwcjJ9jXg+qbU/BxP0gvZjL8LqeHHXhLIw+Uj++VCkMxGkAiSMIsyiXQOoFtvje CThwGQH9rnzU+WvxakKZhcpqFazgcsqo7pptP/2hFWzyUYbGx/ASP5ipIwatNMmuoyzF r6qy0lplYFdUwXs8sKgoLh7IHCIRXuGUhXGb/dfTUI81avS1PxGc3U3RkR42RBJYhX7T dUMtEd+b3GmE13UJW4hXhzEYGH9tqCtBhAxxGqtxyHEGx05SPOp1sCz8QKyJAir3QmFX tGJw== X-Gm-Message-State: AOAM532ZDBumTgXaiYKN+ebJZR1oFJsK/mFEWwb3EiBLXmB9tLwwgzFE HgerekvbMIYD7ZZJFfahJBV1Ww== X-Google-Smtp-Source: ABdhPJyV03WtTPWcuWSUSfzX27B39Gja1SJYx6ys8Uq9kTJPc/guCGF6Ua1Qi84vOdtB1jBqU6XmOw== X-Received: by 2002:a5d:6d8f:: with SMTP id l15mr8522028wrs.313.1621588207333; Fri, 21 May 2021 02:10:07 -0700 (PDT) Received: from phenom.ffwll.local ([2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa]) by smtp.gmail.com with ESMTPSA id y2sm13589457wmq.45.2021.05.21.02.10.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 May 2021 02:10:06 -0700 (PDT) From: Daniel Vetter To: DRI Development Date: Fri, 21 May 2021 11:09:51 +0200 Message-Id: <20210521090959.1663703-3-daniel.vetter@ffwll.ch> X-Mailer: git-send-email 2.31.0 In-Reply-To: <20210521090959.1663703-1-daniel.vetter@ffwll.ch> References: <20210521090959.1663703-1-daniel.vetter@ffwll.ch> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH 03/11] drm/panfrost: Use xarray and helpers for depedency 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: Sumit Semwal , Rob Herring , Tomeu Vizoso , Daniel Vetter , Intel Graphics Development , Steven Price , linaro-mm-sig@lists.linaro.org, Luben Tuikov , Alyssa Rosenzweig , Alex Deucher , Daniel Vetter , Lee Jones , =?UTF-8?q?Christian=20K=C3=B6nig?= , 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" TW9yZSBjb25zaXN0ZW5jeSBhbmQgcHJlcCB3b3JrIGZvciB0aGUgbmV4dCBwYXRjaC4KCkFzaWRl OiBJIHdvbmRlciB3aGV0aGVyIHdlIHNob3VsZG4ndCBqdXN0IG1vdmUgdGhpcyBlbnRpcmUgeGFy cmF5CmJ1c2luZXNzIGludG8gdGhlIHNjaGVkdWxlciBzbyB0aGF0IG5vdCBldmVyeW9uZSBoYXMg dG8gcmVpbnZlbnQgdGhlCnNhbWUgd2hlZWxzLiBDYydpbmcgc29tZSBzY2hlZHVsZXIgcGVvcGxl IGZvciB0aGlzIHRvby4KCkNjOiAiQ2hyaXN0aWFuIEvDtm5pZyIgPGNocmlzdGlhbi5rb2VuaWdA YW1kLmNvbT4KQ2M6IEx1YmVuIFR1aWtvdiA8bHViZW4udHVpa292QGFtZC5jb20+CkNjOiBBbGV4 IERldWNoZXIgPGFsZXhhbmRlci5kZXVjaGVyQGFtZC5jb20+CkNjOiBMZWUgSm9uZXMgPGxlZS5q b25lc0BsaW5hcm8ub3JnPgpDYzogU3RldmVuIFByaWNlIDxzdGV2ZW4ucHJpY2VAYXJtLmNvbT4K Q2M6IFJvYiBIZXJyaW5nIDxyb2JoQGtlcm5lbC5vcmc+CkNjOiBUb21ldSBWaXpvc28gPHRvbWV1 LnZpem9zb0Bjb2xsYWJvcmEuY29tPgpDYzogQWx5c3NhIFJvc2VuendlaWcgPGFseXNzYS5yb3Nl bnp3ZWlnQGNvbGxhYm9yYS5jb20+CkNjOiBTdW1pdCBTZW13YWwgPHN1bWl0LnNlbXdhbEBsaW5h cm8ub3JnPgpDYzogbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnCkNjOiBsaW5hcm8tbW0tc2ln QGxpc3RzLmxpbmFyby5vcmcKU2lnbmVkLW9mZi1ieTogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZl dHRlckBpbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2Ry di5jIHwgNDEgKysrKysrKystLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5m cm9zdF9qb2IuYyB8IDYxICsrKysrKysrKystLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2Ry bS9wYW5mcm9zdC9wYW5mcm9zdF9qb2IuaCB8ICA4ICsrLS0KIDMgZmlsZXMgY2hhbmdlZCwgNDYg aW5zZXJ0aW9ucygrKSwgNjQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3Bh bmZyb3N0X2Rydi5jCmluZGV4IGNhMDcwOThhNjE0MS4uNzk3N2I0NzUyYjVjIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZHJ2LmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2Rydi5jCkBAIC0xMzcsMTIgKzEzNyw2IEBAIHBhbmZy b3N0X2xvb2t1cF9ib3Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAlpZiAoIWpvYi0+Ym9fY291 bnQpCiAJCXJldHVybiAwOwogCi0Jam9iLT5pbXBsaWNpdF9mZW5jZXMgPSBrdm1hbGxvY19hcnJh eShqb2ItPmJvX2NvdW50LAotCQkJCSAgc2l6ZW9mKHN0cnVjdCBkbWFfZmVuY2UgKiksCi0JCQkJ ICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7Ci0JaWYgKCFqb2ItPmltcGxpY2l0X2ZlbmNlcykK LQkJcmV0dXJuIC1FTk9NRU07Ci0KIAlyZXQgPSBkcm1fZ2VtX29iamVjdHNfbG9va3VwKGZpbGVf cHJpdiwKIAkJCQkgICAgICh2b2lkIF9fdXNlciAqKSh1aW50cHRyX3QpYXJncy0+Ym9faGFuZGxl cywKIAkJCQkgICAgIGpvYi0+Ym9fY291bnQsICZqb2ItPmJvcyk7CkBAIC0xNzMsNyArMTY3LDcg QEAgcGFuZnJvc3RfbG9va3VwX2JvcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogfQogCiAvKioK LSAqIHBhbmZyb3N0X2NvcHlfaW5fc3luYygpIC0gU2V0cyB1cCBqb2ItPmluX2ZlbmNlc1tdIHdp dGggdGhlIHN5bmMgb2JqZWN0cworICogcGFuZnJvc3RfY29weV9pbl9zeW5jKCkgLSBTZXRzIHVw IGpvYi0+ZGVwcyB3aXRoIHRoZSBzeW5jIG9iamVjdHMKICAqIHJlZmVyZW5jZWQgYnkgdGhlIGpv Yi4KICAqIEBkZXY6IERSTSBkZXZpY2UKICAqIEBmaWxlX3ByaXY6IERSTSBmaWxlIGZvciB0aGlz IGZkCkBAIC0xOTMsMjIgKzE4NywxNCBAQCBwYW5mcm9zdF9jb3B5X2luX3N5bmMoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwKIHsKIAl1MzIgKmhhbmRsZXM7CiAJaW50IHJldCA9IDA7Ci0JaW50IGk7 CisJaW50IGksIGluX2ZlbmNlX2NvdW50OwogCi0Jam9iLT5pbl9mZW5jZV9jb3VudCA9IGFyZ3Mt PmluX3N5bmNfY291bnQ7CisJaW5fZmVuY2VfY291bnQgPSBhcmdzLT5pbl9zeW5jX2NvdW50Owog Ci0JaWYgKCFqb2ItPmluX2ZlbmNlX2NvdW50KQorCWlmICghaW5fZmVuY2VfY291bnQpCiAJCXJl dHVybiAwOwogCi0Jam9iLT5pbl9mZW5jZXMgPSBrdm1hbGxvY19hcnJheShqb2ItPmluX2ZlbmNl X2NvdW50LAotCQkJCQlzaXplb2Yoc3RydWN0IGRtYV9mZW5jZSAqKSwKLQkJCQkJR0ZQX0tFUk5F TCB8IF9fR0ZQX1pFUk8pOwotCWlmICgham9iLT5pbl9mZW5jZXMpIHsKLQkJRFJNX0RFQlVHKCJG YWlsZWQgdG8gYWxsb2NhdGUgam9iIGluIGZlbmNlc1xuIik7Ci0JCXJldHVybiAtRU5PTUVNOwot CX0KLQotCWhhbmRsZXMgPSBrdm1hbGxvY19hcnJheShqb2ItPmluX2ZlbmNlX2NvdW50LCBzaXpl b2YodTMyKSwgR0ZQX0tFUk5FTCk7CisJaGFuZGxlcyA9IGt2bWFsbG9jX2FycmF5KGluX2ZlbmNl X2NvdW50LCBzaXplb2YodTMyKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFoYW5kbGVzKSB7CiAJCXJl dCA9IC1FTk9NRU07CiAJCURSTV9ERUJVRygiRmFpbGVkIHRvIGFsbG9jYXRlIGluY29taW5nIHN5 bmNvYmogaGFuZGxlc1xuIik7CkBAIC0yMTcsMTYgKzIwMywyMyBAQCBwYW5mcm9zdF9jb3B5X2lu X3N5bmMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAogCWlmIChjb3B5X2Zyb21fdXNlcihoYW5k bGVzLAogCQkJICAgKHZvaWQgX191c2VyICopKHVpbnRwdHJfdClhcmdzLT5pbl9zeW5jcywKLQkJ CSAgIGpvYi0+aW5fZmVuY2VfY291bnQgKiBzaXplb2YodTMyKSkpIHsKKwkJCSAgIGluX2ZlbmNl X2NvdW50ICogc2l6ZW9mKHUzMikpKSB7CiAJCXJldCA9IC1FRkFVTFQ7CiAJCURSTV9ERUJVRygi RmFpbGVkIHRvIGNvcHkgaW4gc3luY29iaiBoYW5kbGVzXG4iKTsKIAkJZ290byBmYWlsOwogCX0K IAotCWZvciAoaSA9IDA7IGkgPCBqb2ItPmluX2ZlbmNlX2NvdW50OyBpKyspIHsKKwlmb3IgKGkg PSAwOyBpIDwgaW5fZmVuY2VfY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5j ZTsKKwogCQlyZXQgPSBkcm1fc3luY29ial9maW5kX2ZlbmNlKGZpbGVfcHJpdiwgaGFuZGxlc1tp XSwgMCwgMCwKLQkJCQkJICAgICAmam9iLT5pbl9mZW5jZXNbaV0pOwotCQlpZiAocmV0ID09IC1F SU5WQUwpCisJCQkJCSAgICAgJmZlbmNlKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbDsKKwor CQlyZXQgPSBkcm1fZ2VtX2ZlbmNlX2FycmF5X2FkZCgmam9iLT5kZXBzLCBmZW5jZSk7CisKKwkJ aWYgKHJldCkKIAkJCWdvdG8gZmFpbDsKIAl9CiAKQEAgLTI2NCw2ICsyNTcsOCBAQCBzdGF0aWMg aW50IHBhbmZyb3N0X2lvY3RsX3N1Ym1pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpk YXRhLAogCiAJa3JlZl9pbml0KCZqb2ItPnJlZmNvdW50KTsKIAorCXhhX2luaXRfZmxhZ3MoJmpv Yi0+ZGVwcywgWEFfRkxBR1NfQUxMT0MpOworCiAJam9iLT5wZmRldiA9IHBmZGV2OwogCWpvYi0+ amMgPSBhcmdzLT5qYzsKIAlqb2ItPnJlcXVpcmVtZW50cyA9IGFyZ3MtPnJlcXVpcmVtZW50czsK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9qb2IuYyBiL2Ry aXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9qb2IuYwppbmRleCBmNWQzOWVlMTRhYjUu LjcwN2Q5MTJmZjY0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZy b3N0X2pvYi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9qb2IuYwpA QCAtMTk2LDE0ICsxOTYsMjEgQEAgc3RhdGljIHZvaWQgcGFuZnJvc3Rfam9iX2h3X3N1Ym1pdChz dHJ1Y3QgcGFuZnJvc3Rfam9iICpqb2IsIGludCBqcykKIAlqb2Jfd3JpdGUocGZkZXYsIEpTX0NP TU1BTkRfTkVYVChqcyksIEpTX0NPTU1BTkRfU1RBUlQpOwogfQogCi1zdGF0aWMgdm9pZCBwYW5m cm9zdF9hY3F1aXJlX29iamVjdF9mZW5jZXMoc3RydWN0IGRybV9nZW1fb2JqZWN0ICoqYm9zLAot CQkJCQkgICBpbnQgYm9fY291bnQsCi0JCQkJCSAgIHN0cnVjdCBkbWFfZmVuY2UgKippbXBsaWNp dF9mZW5jZXMpCitzdGF0aWMgaW50IHBhbmZyb3N0X2FjcXVpcmVfb2JqZWN0X2ZlbmNlcyhzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKipib3MsCisJCQkJCSAgaW50IGJvX2NvdW50LAorCQkJCQkgIHN0 cnVjdCB4YXJyYXkgKmRlcHMpCiB7Ci0JaW50IGk7CisJaW50IGksIHJldDsKIAotCWZvciAoaSA9 IDA7IGkgPCBib19jb3VudDsgaSsrKQotCQlpbXBsaWNpdF9mZW5jZXNbaV0gPSBkbWFfcmVzdl9n ZXRfZXhjbF9yY3UoYm9zW2ldLT5yZXN2KTsKKwlmb3IgKGkgPSAwOyBpIDwgYm9fY291bnQ7IGkr KykgeworCQlzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSA9IGRtYV9yZXN2X2dldF9leGNsX3JjdShi b3NbaV0tPnJlc3YpOworCisJCXJldCA9IGRybV9nZW1fZmVuY2VfYXJyYXlfYWRkKGRlcHMsIGZl bmNlKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7CiB9CiAK IHN0YXRpYyB2b2lkIHBhbmZyb3N0X2F0dGFjaF9vYmplY3RfZmVuY2VzKHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqKmJvcywKQEAgLTIzNiw4ICsyNDMsMTAgQEAgaW50IHBhbmZyb3N0X2pvYl9wdXNo KHN0cnVjdCBwYW5mcm9zdF9qb2IgKmpvYikKIAogCWtyZWZfZ2V0KCZqb2ItPnJlZmNvdW50KTsg LyogcHV0IGJ5IHNjaGVkdWxlciBqb2IgY29tcGxldGlvbiAqLwogCi0JcGFuZnJvc3RfYWNxdWly ZV9vYmplY3RfZmVuY2VzKGpvYi0+Ym9zLCBqb2ItPmJvX2NvdW50LAotCQkJCSAgICAgICBqb2It PmltcGxpY2l0X2ZlbmNlcyk7CisJcmV0ID0gcGFuZnJvc3RfYWNxdWlyZV9vYmplY3RfZmVuY2Vz KGpvYi0+Ym9zLCBqb2ItPmJvX2NvdW50LAorCQkJCQkgICAgICZqb2ItPmRlcHMpOworCWlmIChy ZXQpCisJCWdvdG8gdW5sb2NrOwogCiAJZHJtX3NjaGVkX2VudGl0eV9wdXNoX2pvYigmam9iLT5i YXNlLCBlbnRpdHkpOwogCkBAIC0yNTQsMTggKzI2MywxNSBAQCBzdGF0aWMgdm9pZCBwYW5mcm9z dF9qb2JfY2xlYW51cChzdHJ1Y3Qga3JlZiAqcmVmKQogewogCXN0cnVjdCBwYW5mcm9zdF9qb2Ig KmpvYiA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBwYW5mcm9zdF9qb2IsCiAJCQkJCQlyZWZj b3VudCk7CisJc3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7CisJdW5zaWduZWQgbG9uZyBpbmRleDsK IAl1bnNpZ25lZCBpbnQgaTsKIAotCWlmIChqb2ItPmluX2ZlbmNlcykgewotCQlmb3IgKGkgPSAw OyBpIDwgam9iLT5pbl9mZW5jZV9jb3VudDsgaSsrKQotCQkJZG1hX2ZlbmNlX3B1dChqb2ItPmlu X2ZlbmNlc1tpXSk7Ci0JCWt2ZnJlZShqb2ItPmluX2ZlbmNlcyk7Ci0JfQotCWlmIChqb2ItPmlt cGxpY2l0X2ZlbmNlcykgewotCQlmb3IgKGkgPSAwOyBpIDwgam9iLT5ib19jb3VudDsgaSsrKQot CQkJZG1hX2ZlbmNlX3B1dChqb2ItPmltcGxpY2l0X2ZlbmNlc1tpXSk7Ci0JCWt2ZnJlZShqb2It PmltcGxpY2l0X2ZlbmNlcyk7CisJeGFfZm9yX2VhY2goJmpvYi0+ZGVwcywgaW5kZXgsIGZlbmNl KSB7CisJCWRtYV9mZW5jZV9wdXQoZmVuY2UpOwogCX0KKwl4YV9kZXN0cm95KCZqb2ItPmRlcHMp OworCiAJZG1hX2ZlbmNlX3B1dChqb2ItPmRvbmVfZmVuY2UpOwogCWRtYV9mZW5jZV9wdXQoam9i LT5yZW5kZXJfZG9uZV9mZW5jZSk7CiAKQEAgLTMwOCwyNiArMzE0LDkgQEAgc3RhdGljIHN0cnVj dCBkbWFfZmVuY2UgKnBhbmZyb3N0X2pvYl9kZXBlbmRlbmN5KHN0cnVjdCBkcm1fc2NoZWRfam9i ICpzY2hlZF9qb2IKIAkJCQkJCSBzdHJ1Y3QgZHJtX3NjaGVkX2VudGl0eSAqc19lbnRpdHkpCiB7 CiAJc3RydWN0IHBhbmZyb3N0X2pvYiAqam9iID0gdG9fcGFuZnJvc3Rfam9iKHNjaGVkX2pvYik7 Ci0Jc3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7Ci0JdW5zaWduZWQgaW50IGk7CiAKLQkvKiBFeHBs aWNpdCBmZW5jZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgam9iLT5pbl9mZW5jZV9jb3VudDsgaSsr KSB7Ci0JCWlmIChqb2ItPmluX2ZlbmNlc1tpXSkgewotCQkJZmVuY2UgPSBqb2ItPmluX2ZlbmNl c1tpXTsKLQkJCWpvYi0+aW5fZmVuY2VzW2ldID0gTlVMTDsKLQkJCXJldHVybiBmZW5jZTsKLQkJ fQotCX0KLQotCS8qIEltcGxpY2l0IGZlbmNlcywgbWF4LiBvbmUgcGVyIEJPICovCi0JZm9yIChp ID0gMDsgaSA8IGpvYi0+Ym9fY291bnQ7IGkrKykgewotCQlpZiAoam9iLT5pbXBsaWNpdF9mZW5j ZXNbaV0pIHsKLQkJCWZlbmNlID0gam9iLT5pbXBsaWNpdF9mZW5jZXNbaV07Ci0JCQlqb2ItPmlt cGxpY2l0X2ZlbmNlc1tpXSA9IE5VTEw7Ci0JCQlyZXR1cm4gZmVuY2U7Ci0JCX0KLQl9CisJaWYg KCF4YV9lbXB0eSgmam9iLT5kZXBzKSkKKwkJcmV0dXJuIHhhX2VyYXNlKCZqb2ItPmRlcHMsIGpv Yi0+bGFzdF9kZXArKyk7CiAKIAlyZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9qb2IuaCBiL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9z dC9wYW5mcm9zdF9qb2IuaAppbmRleCBiYmQzYmE5N2ZmNjcuLjgyMzA2YTAzYjU3ZSAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2pvYi5oCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9qb2IuaApAQCAtMTksOSArMTksOSBAQCBzdHJ1 Y3QgcGFuZnJvc3Rfam9iIHsKIAlzdHJ1Y3QgcGFuZnJvc3RfZGV2aWNlICpwZmRldjsKIAlzdHJ1 Y3QgcGFuZnJvc3RfZmlsZV9wcml2ICpmaWxlX3ByaXY7CiAKLQkvKiBPcHRpb25hbCBmZW5jZXMg dXNlcnNwYWNlIGNhbiBwYXNzIGluIGZvciB0aGUgam9iIHRvIGRlcGVuZCBvbi4gKi8KLQlzdHJ1 Y3QgZG1hX2ZlbmNlICoqaW5fZmVuY2VzOwotCXUzMiBpbl9mZW5jZV9jb3VudDsKKwkvKiBDb250 YWlucyBib3RoIGV4cGxpY2l0IGFuZCBpbXBsaWNpdCBmZW5jZXMgKi8KKwlzdHJ1Y3QgeGFycmF5 IGRlcHM7CisJdW5zaWduZWQgbG9uZyBsYXN0X2RlcDsKIAogCS8qIEZlbmNlIHRvIGJlIHNpZ25h bGVkIGJ5IElSUSBoYW5kbGVyIHdoZW4gdGhlIGpvYiBpcyBjb21wbGV0ZS4gKi8KIAlzdHJ1Y3Qg ZG1hX2ZlbmNlICpkb25lX2ZlbmNlOwpAQCAtMzAsOCArMzAsNiBAQCBzdHJ1Y3QgcGFuZnJvc3Rf am9iIHsKIAlfX3UzMiByZXF1aXJlbWVudHM7CiAJX191MzIgZmx1c2hfaWQ7CiAKLQkvKiBFeGNs dXNpdmUgZmVuY2VzIHdlIGhhdmUgdGFrZW4gZnJvbSB0aGUgQk9zIHRvIHdhaXQgZm9yICovCi0J c3RydWN0IGRtYV9mZW5jZSAqKmltcGxpY2l0X2ZlbmNlczsKIAlzdHJ1Y3QgcGFuZnJvc3RfZ2Vt X21hcHBpbmcgKiptYXBwaW5nczsKIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKipib3M7CiAJdTMy IGJvX2NvdW50OwotLSAKMi4zMS4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9pbnRlbC1nZngK