Received: by 10.213.65.68 with SMTP id h4csp1570999imn; Wed, 4 Apr 2018 23:17:23 -0700 (PDT) X-Google-Smtp-Source: AIpwx4+gL963cMKm+7pdmqlNhwjqI0C/05Km5rz/hF2mCvUm7VpMA0i/UPe8Gjr/dUiVC6/twcKk X-Received: by 2002:a17:902:bd91:: with SMTP id q17-v6mr19784199pls.330.1522909043542; Wed, 04 Apr 2018 23:17:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1522909043; cv=none; d=google.com; s=arc-20160816; b=Mwgn/kUUoOeU6T3iUW2R0so3TsxFElayctUGXPnhn9pJ73hDVH1/A/Blt1dNiOJglT wJgGhs77fdtC48IR4eI8fAGodIyYn756kaATWRbH8Ov9/sRAdniZ3ulQ8a8o7/yeIjLM N05a/31nTM4PYitv1aa1E3oNiWwxFNFiQvPMVnMKDzr5PlMnA2jOJ8GKZtYN142LBdhd EC+z0lbgL8KpuBnHW3zJNhmnRVx3nLla6nIm3fico0RhUmF73Cq1kE7lFXYzC8lzAxm+ w9DpudgnlZReGFncW/FZ5qV23DtsD37P8SaveuaqDwWPmHUUfYq1L570/Mmw608cBNzU B6jw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature :arc-authentication-results; bh=h4DEPaEyCUV3ZSOJVABnzNhxE+urge6oB1UiTkZKryA=; b=p+nO8ZxwXEdcPS3E2z3p05b3orSafETy7WPUCtfbYE+ujbbySSOTsNkIaDC7rVT+Ux KlB1yMrs8PmGCmkjpf00AJtbHYKRAZpQ0YqOb4ScBWam7Bze2YMt/5r+xW4MYA+LIEma CgXt84FiM4Y997ianLsEB7wt5ZPtLomyj29SG2fI0rDbg+kgyaNcEZ1GS5ZohJGwTrEz 3zSBSF+FSLUWhuWLNkmV6zqVJgVWfl1MogXjDkKlH0AGlrdMgAJnAxUInyingOFkdoeI AjwMqicSMYtaGz6CgxAfl5ZiZnreNOUa8/fn+pkiFVIAL6UXh2dM0qIRBYgEw8uU7DUs wNLQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@ffwll.ch header.s=google header.b=ULD1iLub; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q19-v6si7811215pls.457.2018.04.04.23.17.09; Wed, 04 Apr 2018 23:17:23 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=fail header.i=@ffwll.ch header.s=google header.b=ULD1iLub; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751270AbeDEGQD (ORCPT + 99 others); Thu, 5 Apr 2018 02:16:03 -0400 Received: from mail-io0-f193.google.com ([209.85.223.193]:39930 "EHLO mail-io0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750853AbeDEGQC (ORCPT ); Thu, 5 Apr 2018 02:16:02 -0400 Received: by mail-io0-f193.google.com with SMTP id v13so29192696iob.6 for ; Wed, 04 Apr 2018 23:16:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:cc; bh=h4DEPaEyCUV3ZSOJVABnzNhxE+urge6oB1UiTkZKryA=; b=ULD1iLub/dB2cBzPkYU89XI4q9V5I1nQe8pRZb/qGxp9isW+aGmWjKa3yJeE6SDc/9 LVv4NE6TTqfvU0Jsvc6uFK+QnhmxXpQ4avt1vMD6nUUOmGl1efV13IlmMAtWEeesFi1V KKEGi2wGmDKEjA991DGn+nFCeuglnQT2cHSNM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:sender:in-reply-to:references:from :date:message-id:subject:to:cc; bh=h4DEPaEyCUV3ZSOJVABnzNhxE+urge6oB1UiTkZKryA=; b=JrnsX3pyLpg7+ppfyLgfeD3JXJRNOsVFGJXaoSFVAIDiXQXbK39vAuhM1KvddKYsQg PU3v5gzeUEs1QCbOoP3zkbsRgOmIAfaCfhSFDHjzZCafCi2QNp3oCjhHdR1j+mlrncqD abEmrvBifGYYmYxZF7WLv1pgJnwTiJfWJP87tghjfD9f2qxiCJf99PtT5YGa5/oVmRoZ V/QKS14JA1FTKOqUkLhC2yxQGZjY76mpF3k7Tm42E+u4ssYGYn57LFQ2RVuaQV3JRMDR X8+iGFOGLocxgFgw3AWy2c49dh91jt/K4s4hTDYRo8T6i4UX/Da69a0oQ9vyaLk1Jn99 bAeA== X-Gm-Message-State: ALQs6tCooz+K0kZV6On0h43s6aUG2S3BvEWA3NoFeSFC5UvyWtAcKVN8 k3xPM8GF4gD5iIk5KgBfWtlc6LO/ftnw6LA7mvVMiw== X-Received: by 10.107.164.199 with SMTP id d68mr20001772ioj.34.1522908961601; Wed, 04 Apr 2018 23:16:01 -0700 (PDT) MIME-Version: 1.0 Received: by 10.79.40.129 with HTTP; Wed, 4 Apr 2018 23:16:01 -0700 (PDT) X-Originating-IP: [212.51.149.109] In-Reply-To: <20180404223251.28449-1-eric@anholt.net> References: <20180404223251.28449-1-eric@anholt.net> From: Daniel Vetter Date: Thu, 5 Apr 2018 08:16:01 +0200 X-Google-Sender-Auth: sqkZ24Uo3-9t6JO8g7QZzOd_aQk Message-ID: Subject: Re: [PATCH] drm/sched: Extend the documentation. To: Eric Anholt Cc: dri-devel , Alex Deucher , =?UTF-8?Q?Christian_K=C3=B6nig?= , Linux Kernel Mailing List Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Apr 5, 2018 at 12:32 AM, Eric Anholt wrote: > These comments answer all the questions I had for myself when > implementing a driver using the GPU scheduler. > > Signed-off-by: Eric Anholt Pulling all these comments into the generated kerneldoc would be awesome, maybe as a new "GPU Scheduler" chapter at the end of drm-mm.rst? Would mean a bit of busywork to convert the existing raw comments into proper kerneldoc. Also has the benefit that 0day will complain when you forget to update the comment when editing the function prototype - kerneldoc which isn't included anywhere in .rst won't be checked automatically. -Daniel > --- > include/drm/gpu_scheduler.h | 46 +++++++++++++++++++++++++++++++++---- > 1 file changed, 42 insertions(+), 4 deletions(-) > > diff --git a/include/drm/gpu_scheduler.h b/include/drm/gpu_scheduler.h > index dfd54fb94e10..c053a32341bf 100644 > --- a/include/drm/gpu_scheduler.h > +++ b/include/drm/gpu_scheduler.h > @@ -43,10 +43,12 @@ enum drm_sched_priority { > }; > > /** > - * A scheduler entity is a wrapper around a job queue or a group > - * of other entities. Entities take turns emitting jobs from their > - * job queues to corresponding hardware ring based on scheduling > - * policy. > + * drm_sched_entity - A wrapper around a job queue (typically attached > + * to the DRM file_priv). > + * > + * Entities will emit jobs in order to their corresponding hardware > + * ring, and the scheduler will alternate between entities based on > + * scheduling policy. > */ > struct drm_sched_entity { > struct list_head list; > @@ -78,7 +80,18 @@ struct drm_sched_rq { > > struct drm_sched_fence { > struct dma_fence scheduled; > + > + /* This fence is what will be signaled by the scheduler when > + * the job is completed. > + * > + * When setting up an out fence for the job, you should use > + * this, since it's available immediately upon > + * drm_sched_job_init(), and the fence returned by the driver > + * from run_job() won't be created until the dependencies have > + * resolved. > + */ > struct dma_fence finished; > + > struct dma_fence_cb cb; > struct dma_fence *parent; > struct drm_gpu_scheduler *sched; > @@ -88,6 +101,13 @@ struct drm_sched_fence { > > struct drm_sched_fence *to_drm_sched_fence(struct dma_fence *f); > > +/** > + * drm_sched_job - A job to be run by an entity. > + * > + * A job is created by the driver using drm_sched_job_init(), and > + * should call drm_sched_entity_push_job() once it wants the scheduler > + * to schedule the job. > + */ > struct drm_sched_job { > struct spsc_node queue_node; > struct drm_gpu_scheduler *sched; > @@ -112,10 +132,28 @@ static inline bool drm_sched_invalidate_job(struct drm_sched_job *s_job, > * these functions should be implemented in driver side > */ > struct drm_sched_backend_ops { > + /* Called when the scheduler is considering scheduling this > + * job next, to get another struct dma_fence for this job to > + * block on. Once it returns NULL, run_job() may be called. > + */ > struct dma_fence *(*dependency)(struct drm_sched_job *sched_job, > struct drm_sched_entity *s_entity); > + > + /* Called to execute the job once all of the dependencies have > + * been resolved. This may be called multiple times, if > + * timedout_job() has happened and drm_sched_job_recovery() > + * decides to try it again. > + */ > struct dma_fence *(*run_job)(struct drm_sched_job *sched_job); > + > + /* Called when a job has taken too long to execute, to trigger > + * GPU recovery. > + */ > void (*timedout_job)(struct drm_sched_job *sched_job); > + > + /* Called once the job's finished fence has been signaled and > + * it's time to clean it up. > + */ > void (*free_job)(struct drm_sched_job *sched_job); > }; > > -- > 2.17.0 > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch