From: "Dixit, Ashutosh" <ashutosh.dixit@intel.com>
To: "Cavitt, Jonathan" <jonathan.cavitt@intel.com>
Cc: "intel-xe@lists.freedesktop.org" <intel-xe@lists.freedesktop.org>,
"Nerlige Ramappa, Umesh" <umesh.nerlige.ramappa@intel.com>,
"Souza, Jose" <jose.souza@intel.com>,
"Landwerlin, Lionel G" <lionel.g.landwerlin@intel.com>
Subject: Re: [PATCH 2/8] drm/xe/oa: Introduce 'struct xe_oa_fence'
Date: Mon, 19 Aug 2024 18:03:32 -0700 [thread overview]
Message-ID: <87msl8dmzf.wl-ashutosh.dixit@intel.com> (raw)
In-Reply-To: <CH0PR11MB544473F81952DC9812D05CABE5B92@CH0PR11MB5444.namprd11.prod.outlook.com>
On Thu, 08 Aug 2024 13:58:52 -0700, Cavitt, Jonathan wrote:
>
> -----Original Message-----
> From: Intel-xe <intel-xe-bounces@lists.freedesktop.org> On Behalf Of Ashutosh Dixit
> Sent: Thursday, August 8, 2024 10:42 AM
> To: intel-xe@lists.freedesktop.org
> Cc: Nerlige Ramappa, Umesh <umesh.nerlige.ramappa@intel.com>; Souza, Jose <jose.souza@intel.com>; Landwerlin, Lionel G <lionel.g.landwerlin@intel.com>
> Subject: [PATCH 2/8] drm/xe/oa: Introduce 'struct xe_oa_fence'
> >
> > Here we introduce 'struct xe_oa_fence' which will contain the fence used
> > for signalling xe_syncs (in a later patch). The struct also contains the
> > work struct used for signalling the fences. Otherwise, this patch is a
> > simple refactor of the previous patch. In this patch the work function is
> > executed synchronously.
> >
> > Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
>
> If I understand correctly, it seems this is moving the fence
> wait and put section to part of a work fini function that
> executes when the xe_oa_fence is closed?
The work function is scheduled to run, so that the wait can be executed
asynchronously after which the fence will be signalled (in Patch 5/8).
Though there are few changes here in v2, but the basic concept is the
same. See Patch 4 "drm/xe/oa: Signal output fences" in v2.
> LGTM.
> Reviewed-by: Jonathan Cavitt <jonathan.cavitt@intel.com>
Thanks.
--
Ashutosh
> -Jonathan Cavitt
>
> > ---
> > drivers/gpu/drm/xe/xe_oa.c | 73 ++++++++++++++++++++++++++++++--------
> > 1 file changed, 59 insertions(+), 14 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
> > index d842c801fb9f1..f97d64ffb460f 100644
> > --- a/drivers/gpu/drm/xe/xe_oa.c
> > +++ b/drivers/gpu/drm/xe/xe_oa.c
> > @@ -90,6 +90,15 @@ struct xe_oa_config_bo {
> > struct xe_bb *bb;
> > };
> >
> > +struct xe_oa_fence {
> > + /* @xe: pointer to xe device */
> > + struct xe_device *xe;
> > + /* @work: work to signal that OA configuration is applied */
> > + struct work_struct work;
> > + /* @config_fence: dma fence for OA config to be applied */
> > + struct dma_fence *config_fence;
> > +};
> > +
> > #define DRM_FMT(x) DRM_XE_OA_FMT_TYPE_##x
> >
> > static const struct xe_oa_format oa_formats[] = {
> > @@ -905,14 +914,51 @@ xe_oa_alloc_config_buffer(struct xe_oa_stream *stream, struct xe_oa_config *oa_c
> > return oa_bo;
> > }
> >
> > -static int xe_oa_emit_oa_config(struct xe_oa_stream *stream, struct xe_oa_config *config)
> > +static void xe_oa_fence_work_fn(struct work_struct *w)
> > {
> > #define NOA_PROGRAM_ADDITIONAL_DELAY_US 500
> > - struct xe_oa_config_bo *oa_bo;
> > + struct xe_oa_fence *ofence = container_of(w, typeof(*ofence), work);
> > int err = 0, us = NOA_PROGRAM_ADDITIONAL_DELAY_US;
> > - struct dma_fence *fence;
> > long timeout;
> >
> > + /* Wait till all previous batches have executed */
> > + timeout = dma_fence_wait_timeout(ofence->config_fence, false, 5 * HZ);
> > + dma_fence_put(ofence->config_fence);
> > + if (timeout < 0)
> > + err = timeout;
> > + else if (!timeout)
> > + err = -ETIME;
> > + if (err)
> > + drm_dbg(&ofence->xe->drm, "dma_fence_wait_timeout err %d\n", err);
> > +
> > + /* Additional empirical delay needed for NOA programming after registers are written */
> > + usleep_range(us, 2 * us);
> > +
> > + kfree(ofence);
> > +}
> > +
> > +static struct xe_oa_fence *xe_oa_fence_init(struct xe_device *xe, struct dma_fence *config_fence)
> > +{
> > + struct xe_oa_fence *ofence;
> > +
> > + ofence = kzalloc(sizeof(*ofence), GFP_KERNEL);
> > + if (!ofence)
> > + return ERR_PTR(-ENOMEM);
> > +
> > + ofence->xe = xe;
> > + INIT_WORK(&ofence->work, xe_oa_fence_work_fn);
> > + ofence->config_fence = config_fence;
> > +
> > + return ofence;
> > +}
> > +
> > +static int xe_oa_emit_oa_config(struct xe_oa_stream *stream, struct xe_oa_config *config)
> > +{
> > + struct xe_oa_config_bo *oa_bo;
> > + struct xe_oa_fence *ofence;
> > + struct dma_fence *fence;
> > + int err;
> > +
> > /* Emit OA configuration batch */
> > oa_bo = xe_oa_alloc_config_buffer(stream, config);
> > if (IS_ERR(oa_bo)) {
> > @@ -924,18 +970,17 @@ static int xe_oa_emit_oa_config(struct xe_oa_stream *stream, struct xe_oa_config
> > if (err)
> > goto exit;
> >
> > - /* Wait till all previous batches have executed */
> > - timeout = dma_fence_wait_timeout(fence, false, 5 * HZ);
> > - dma_fence_put(fence);
> > - if (timeout < 0)
> > - err = timeout;
> > - else if (!timeout)
> > - err = -ETIME;
> > - if (err)
> > - drm_dbg(&stream->oa->xe->drm, "dma_fence_wait_timeout err %d\n", err);
> > + ofence = xe_oa_fence_init(stream->oa->xe, fence);
> > + if (IS_ERR(ofence)) {
> > + err = PTR_ERR(ofence);
> > + goto put_fence;
> > + }
> >
> > - /* Additional empirical delay needed for NOA programming after registers are written */
> > - usleep_range(us, 2 * us);
> > + xe_oa_fence_work_fn(&ofence->work);
> > +
> > + return 0;
> > +put_fence:
> > + dma_fence_put(fence);
> > exit:
> > return err;
> > }
> > --
> > 2.41.0
> >
> >
next prev parent reply other threads:[~2024-08-20 1:18 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-08 17:41 [PATCH 0/8] drm/xe/oa: xe_syncs for OA Ashutosh Dixit
2024-08-08 17:41 ` [PATCH 1/8] drm/xe/oa: Separate batch submission from waiting for completion Ashutosh Dixit
2024-08-08 20:18 ` Cavitt, Jonathan
2024-08-20 1:01 ` Dixit, Ashutosh
2024-08-08 23:04 ` Matthew Brost
2024-08-20 1:00 ` Dixit, Ashutosh
2024-08-08 17:41 ` [PATCH 2/8] drm/xe/oa: Introduce 'struct xe_oa_fence' Ashutosh Dixit
2024-08-08 20:58 ` Cavitt, Jonathan
2024-08-20 1:03 ` Dixit, Ashutosh [this message]
2024-08-08 23:29 ` Matthew Brost
2024-08-08 17:41 ` [PATCH 3/8] drm/xe/oa/uapi: Define and parse OA sync properties Ashutosh Dixit
2024-08-08 21:05 ` Cavitt, Jonathan
2024-08-08 23:13 ` Matthew Brost
2024-08-20 1:04 ` Dixit, Ashutosh
2024-08-08 17:41 ` [PATCH 4/8] drm/xe/oa: Add input fence dependencies Ashutosh Dixit
2024-08-08 21:09 ` Cavitt, Jonathan
2024-08-20 1:05 ` Dixit, Ashutosh
2024-08-08 23:25 ` Matthew Brost
2024-08-20 1:06 ` Dixit, Ashutosh
2024-08-08 17:41 ` [PATCH 5/8] drm/xe/oa: Signal output fences Ashutosh Dixit
2024-08-08 21:16 ` Cavitt, Jonathan
2024-08-20 1:30 ` Dixit, Ashutosh
2024-08-08 23:19 ` Matthew Brost
2024-08-09 4:15 ` Dixit, Ashutosh
2024-08-09 4:50 ` Matthew Brost
2024-08-13 21:35 ` Dixit, Ashutosh
2024-08-20 1:30 ` Dixit, Ashutosh
2024-08-08 17:41 ` [PATCH 6/8] drm/xe/oa: Move functions up so they can be reused for config ioctl Ashutosh Dixit
2024-08-08 21:18 ` Cavitt, Jonathan
2024-08-08 17:41 ` [PATCH 7/8] drm/xe/oa: Add syncs support to OA " Ashutosh Dixit
2024-08-08 21:39 ` Cavitt, Jonathan
2024-08-20 1:40 ` Dixit, Ashutosh
2024-08-08 17:41 ` [PATCH 8/8] drm/xe/oa: Allow only certain property changes from " Ashutosh Dixit
2024-08-08 22:15 ` Cavitt, Jonathan
2024-08-20 1:45 ` Dixit, Ashutosh
2024-08-08 19:04 ` ✓ CI.Patch_applied: success for drm/xe/oa: xe_syncs for OA Patchwork
2024-08-08 19:04 ` ✓ CI.checkpatch: " Patchwork
2024-08-08 19:05 ` ✓ CI.KUnit: " Patchwork
2024-08-08 19:17 ` ✓ CI.Build: " Patchwork
2024-08-08 19:19 ` ✓ CI.Hooks: " Patchwork
2024-08-08 19:21 ` ✓ CI.checksparse: " Patchwork
2024-08-08 19:51 ` ✓ CI.BAT: " Patchwork
2024-08-08 22:26 ` ✗ CI.FULL: failure " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87msl8dmzf.wl-ashutosh.dixit@intel.com \
--to=ashutosh.dixit@intel.com \
--cc=intel-xe@lists.freedesktop.org \
--cc=jonathan.cavitt@intel.com \
--cc=jose.souza@intel.com \
--cc=lionel.g.landwerlin@intel.com \
--cc=umesh.nerlige.ramappa@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.