Received: by 2002:a05:6a10:1d13:0:0:0:0 with SMTP id pp19csp189738pxb; Mon, 16 Aug 2021 03:16:56 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwPVIPUEnVtzJhaC9yl6ULkls6C3TS4wXIhXNsezAkbqB8kgKOnBqitP7ddOePl+GBJzuA8 X-Received: by 2002:a17:907:393:: with SMTP id ss19mr15643144ejb.468.1629109016398; Mon, 16 Aug 2021 03:16:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1629109016; cv=none; d=google.com; s=arc-20160816; b=JzVlpURhIh3S9nFmrQANjCma+LGzTbvTcsd7JmeF7JZLqTm1ZeA9BOu7x9PgnoAQEV 2ojw6RQmyo2dt6uzPxoBYR5K7ccI0c/RIuaCiWc7PtyQUkzVpXXUj9n7zyisCDMvDMWc ugMIs7RSq+Iu7Defk6/7PKCeEe5EtI+op60eevWC3+ELoFCccp7p/FNNoRTznZhTh42p DTsKYJESsjKCE+Q/7cIObPeAVJf3RyGZ1yr05r8oB2J3fZ/+Czkjf2ZAyNHshkljCNB/ cpu3XRPjeQZ6YBCmEy8wG3rvAJ9Gt1YGX3hbwFzPvZj7X02KwpuSo3EEpSBWKKWWI0+c T/ng== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-language:content-transfer-encoding :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject:dkim-signature; bh=HEiM/mHMC+8fZgGgGDrXO50KgFWhokpC7aZfIza5YoU=; b=bB0WHcZiDdJw9HbiaespgnIZaifqIWe9oUTRfwBdkP4tp3XFP/psXX28UKvTr5+TON dCuLw9pwJJZvyZpQ80ANM3Pk6odBrz43QeeWFDeoes1SvHJlQLXtFdTMzSQb94tJENFZ TW8ItrlIqN6gC0FPsNTaH8g2oMjfXS+m/6jILSsk6/+IN0hH6Z73Mr9CxZIeBs7hCS+F ODhxoTwd/R/DeZrgTapYRE4/CoqWJ+Y4S5ANyf2LjYbLLURT+fSBkHJFj2D1qhu339Ci 9dH423yOTggVXKCMtD+cx8osIZcy4+qgcsUmHhaG9547hKRo7r27RM1id3SIvUyLA7b/ bOkQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=Alj3JYG7; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y12si1964461edd.393.2021.08.16.03.16.33; Mon, 16 Aug 2021 03:16:56 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=Alj3JYG7; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235056AbhHPKPK (ORCPT + 99 others); Mon, 16 Aug 2021 06:15:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33702 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233252AbhHPKPJ (ORCPT ); Mon, 16 Aug 2021 06:15:09 -0400 Received: from mail-wr1-x42c.google.com (mail-wr1-x42c.google.com [IPv6:2a00:1450:4864:20::42c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 54429C061764; Mon, 16 Aug 2021 03:14:38 -0700 (PDT) Received: by mail-wr1-x42c.google.com with SMTP id k29so22757893wrd.7; Mon, 16 Aug 2021 03:14:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding:content-language; bh=HEiM/mHMC+8fZgGgGDrXO50KgFWhokpC7aZfIza5YoU=; b=Alj3JYG7a9UTx5Tj/BtzO+qKDd1xCGe0XdfEAcw9Dau4ACK96PX+Djr/axmyQgoX6R Qvw1P5WoBQ0Zu4439v4+F5DLDdDCoS2adFB2fGQ/+RfPhE2BPUKvDB4iS3xNV2DWhqEh ciwDM/15gCMos0rxTHUU6AcIchpqLSHjNOy5QZYERvtL+zHfGLZUj6qzXSLnKRpwB4Sf 7DBTcFZ2h1usxN7rpOQU3MhNGARGMuAB3Eih9eKDGUQtDk5r0DupKGA+6vrFRuR4zMyE PeKoORolAUgrtvZWdokZqasLxdrn1iIAAu5M4MglS+0i19PVVSOYx7NsLHTJWAXq0rJS vE+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding :content-language; bh=HEiM/mHMC+8fZgGgGDrXO50KgFWhokpC7aZfIza5YoU=; b=j/TAEGWnctdHa3E7Jrj+X0oqbWw1ltcu/pTAV3vbZjpNnM+9d32ERWMWzaTDNCnVsY fhKTbLgaJx3RfC+xegz519ZICFPwd7gHn5dV+U71s1GnGGBajHoC4E/uCRyPQfVxIpXr GrkB++o7yQYvKbBkEFxuTfMFhDklgZ430E+Ri5YhqBbhzxBOtmRuebavudH76sGwGY4T UeX3lOVLFWmgNXckKtEMrAbRKkEfLLCvBnwiF4qqSia4oxfqPtnb9NumRYkQ079XokaN K5Z24WSvGOgKrdUCUWnZMgIAv3xy3Ozc+7D9OQvSEZvkoWkPB6aaXhwN1gycMpj941eQ HEQA== X-Gm-Message-State: AOAM533b6mcEV122I5JdAn+Q0C7pKf8H13fd/ukqiKb6sMOI3ygiF8KV XWQ1+wj0UKUb3zTqcOochGg= X-Received: by 2002:adf:9084:: with SMTP id i4mr17980571wri.23.1629108876990; Mon, 16 Aug 2021 03:14:36 -0700 (PDT) Received: from ?IPv6:2a02:908:1252:fb60:7d83:fd8:eb16:8605? ([2a02:908:1252:fb60:7d83:fd8:eb16:8605]) by smtp.gmail.com with ESMTPSA id q22sm10646849wmj.32.2021.08.16.03.14.35 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 16 Aug 2021 03:14:36 -0700 (PDT) Subject: Re: [PATCH v2 4/5] drm/scheduler: Add fence deadline support To: Rob Clark , dri-devel@lists.freedesktop.org Cc: linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, Daniel Vetter , Rob Clark , David Airlie , Sumit Semwal , =?UTF-8?Q?Christian_K=c3=b6nig?= , Tian Tao , Alex Deucher , Luben Tuikov , Andrey Grodzovsky , Steven Price , Roy Sun , Lee Jones , Jack Zhang , open list , "open list:DMA BUFFER SHARING FRAMEWORK" , "moderated list:DMA BUFFER SHARING FRAMEWORK" References: <20210807183804.459850-1-robdclark@gmail.com> <20210807183804.459850-5-robdclark@gmail.com> From: =?UTF-8?Q?Christian_K=c3=b6nig?= Message-ID: Date: Mon, 16 Aug 2021 12:14:35 +0200 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: <20210807183804.459850-5-robdclark@gmail.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-US Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Am 07.08.21 um 20:37 schrieb Rob Clark: > From: Rob Clark > > As the finished fence is the one that is exposed to userspace, and > therefore the one that other operations, like atomic update, would > block on, we need to propagate the deadline from from the finished > fence to the actual hw fence. > > Signed-off-by: Rob Clark > --- > drivers/gpu/drm/scheduler/sched_fence.c | 25 +++++++++++++++++++++++++ > drivers/gpu/drm/scheduler/sched_main.c | 3 +++ > include/drm/gpu_scheduler.h | 6 ++++++ > 3 files changed, 34 insertions(+) > > diff --git a/drivers/gpu/drm/scheduler/sched_fence.c b/drivers/gpu/drm/scheduler/sched_fence.c > index 69de2c76731f..f389dca44185 100644 > --- a/drivers/gpu/drm/scheduler/sched_fence.c > +++ b/drivers/gpu/drm/scheduler/sched_fence.c > @@ -128,6 +128,30 @@ static void drm_sched_fence_release_finished(struct dma_fence *f) > dma_fence_put(&fence->scheduled); > } > > +static void drm_sched_fence_set_deadline_finished(struct dma_fence *f, > + ktime_t deadline) > +{ > + struct drm_sched_fence *fence = to_drm_sched_fence(f); > + unsigned long flags; > + > + spin_lock_irqsave(&fence->lock, flags); > + > + /* If we already have an earlier deadline, keep it: */ > + if (test_bit(DMA_FENCE_FLAG_HAS_DEADLINE_BIT, &f->flags) && > + ktime_before(fence->deadline, deadline)) { > + spin_unlock_irqrestore(&fence->lock, flags); > + return; > + } > + > + fence->deadline = deadline; > + set_bit(DMA_FENCE_FLAG_HAS_DEADLINE_BIT, &f->flags); > + > + spin_unlock_irqrestore(&fence->lock, flags); > + > + if (fence->parent) > + dma_fence_set_deadline(fence->parent, deadline); > +} > + > static const struct dma_fence_ops drm_sched_fence_ops_scheduled = { > .get_driver_name = drm_sched_fence_get_driver_name, > .get_timeline_name = drm_sched_fence_get_timeline_name, > @@ -138,6 +162,7 @@ static const struct dma_fence_ops drm_sched_fence_ops_finished = { > .get_driver_name = drm_sched_fence_get_driver_name, > .get_timeline_name = drm_sched_fence_get_timeline_name, > .release = drm_sched_fence_release_finished, > + .set_deadline = drm_sched_fence_set_deadline_finished, > }; > > struct drm_sched_fence *to_drm_sched_fence(struct dma_fence *f) > diff --git a/drivers/gpu/drm/scheduler/sched_main.c b/drivers/gpu/drm/scheduler/sched_main.c > index a2a953693b45..3ab0900d3596 100644 > --- a/drivers/gpu/drm/scheduler/sched_main.c > +++ b/drivers/gpu/drm/scheduler/sched_main.c > @@ -818,6 +818,9 @@ static int drm_sched_main(void *param) > > if (!IS_ERR_OR_NULL(fence)) { > s_fence->parent = dma_fence_get(fence); > + if (test_bit(DMA_FENCE_FLAG_HAS_DEADLINE_BIT, > + &s_fence->finished.flags)) > + dma_fence_set_deadline(fence, s_fence->deadline); Maybe move this into a dma_sched_fence_set_parent() function. Apart from that looks good to me. Regards, Christian. > r = dma_fence_add_callback(fence, &sched_job->cb, > drm_sched_job_done_cb); > if (r == -ENOENT) > diff --git a/include/drm/gpu_scheduler.h b/include/drm/gpu_scheduler.h > index d18af49fd009..0f08ade614ae 100644 > --- a/include/drm/gpu_scheduler.h > +++ b/include/drm/gpu_scheduler.h > @@ -144,6 +144,12 @@ struct drm_sched_fence { > */ > struct dma_fence finished; > > + /** > + * @deadline: deadline set on &drm_sched_fence.finished which > + * potentially needs to be propagated to &drm_sched_fence.parent > + */ > + ktime_t deadline; > + > /** > * @parent: the fence returned by &drm_sched_backend_ops.run_job > * when scheduling the job on hardware. We signal the