[PATCH 2/2] drm/xe/oa: Allow subsequent OA streams to be opened on an exec_queue
Cavitt, Jonathan
jonathan.cavitt at intel.com
Fri Nov 8 23:42:40 UTC 2024
-----Original Message-----
From: Intel-xe <intel-xe-bounces at lists.freedesktop.org> On Behalf Of Ashutosh Dixit
Sent: Friday, November 8, 2024 3:06 PM
To: intel-xe at lists.freedesktop.org
Cc: Nerlige Ramappa, Umesh <umesh.nerlige.ramappa at intel.com>
Subject: [PATCH 2/2] drm/xe/oa: Allow subsequent OA streams to be opened on an exec_queue
>
> The restriction that OA not be enabled on an active exec queue only applies
> to the first OA stream opened on the exec queue. Subsequent OA streams can
> be opened on the exec queue since this will not toggle the
> OAC_CONTEXT_ENABLE bit.
>
> Fixes: 2f4a730fcd2d ("drm/xe/oa: Add OAR support")
> Cc: stable at vger.kernel.org
> Signed-off-by: Ashutosh Dixit <ashutosh.dixit at intel.com>
> ---
> drivers/gpu/drm/xe/xe_exec_queue_types.h | 2 ++
> drivers/gpu/drm/xe/xe_oa.c | 8 ++++++--
> 2 files changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_exec_queue_types.h b/drivers/gpu/drm/xe/xe_exec_queue_types.h
> index 1158b6062a6cd..6e3311c22404e 100644
> --- a/drivers/gpu/drm/xe/xe_exec_queue_types.h
> +++ b/drivers/gpu/drm/xe/xe_exec_queue_types.h
> @@ -142,6 +142,8 @@ struct xe_exec_queue {
> u64 tlb_flush_seqno;
> /** @hw_engine_group_link: link into exec queues in the same hw engine group */
> struct list_head hw_engine_group_link;
> + /** @oa: this exec_queue is used for OA (OAR/OAC) */
> + bool oa;
Opening the first OA stream sets the OAC_CONTEXT_ENABLE bit. Would it be possible
to read that bit instead of adding an additional bool to the exec queue?
I won't block on this, just asking.
-Jonathan Cavitt
> /** @lrc: logical ring context for this exec queue */
> struct xe_lrc *lrc[] __counted_by(width);
> };
> diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
> index b0692b8ca0a3d..53d2946ea3052 100644
> --- a/drivers/gpu/drm/xe/xe_oa.c
> +++ b/drivers/gpu/drm/xe/xe_oa.c
> @@ -1915,6 +1915,9 @@ static int xe_oa_stream_open_ioctl_locked(struct xe_oa *oa,
> goto err_disable;
> }
>
> + if (stream->exec_q && !stream->exec_q->oa)
> + stream->exec_q->oa = true;
> +
> /* Hold a reference on the drm device till stream_fd is released */
> drm_dev_get(&stream->oa->xe->drm);
>
> @@ -2068,9 +2071,10 @@ int xe_oa_stream_open_ioctl(struct drm_device *dev, u64 data, struct drm_file *f
> /*
> * Disallow OA from being enabled on active exec_queue's. Enabling OA toggles
> * the OAC_CONTEXT_ENABLE bit in CTXT_SR_CTL register, which changes the size
> - * and layout of the underlying HW context image and can cause hangs.
> + * and layout of the underlying HW context image and can cause hangs. This
> + * restriction holds only for the first OA stream opened on the exec queue.
> */
> - if (XE_IOCTL_DBG(oa->xe, exec_queue_enabled(param.exec_q))) {
> + if (XE_IOCTL_DBG(oa->xe, !param.exec_q->oa && exec_queue_enabled(param.exec_q))) {
> ret = -EADDRINUSE;
> goto err_exec_q;
> }
> --
> 2.41.0
>
>
More information about the Intel-xe
mailing list