All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Dixit, Ashutosh" <ashutosh.dixit@intel.com>
To: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: <intel-xe@lists.freedesktop.org>
Subject: Re: [PATCH 01/17] drm/xe/perf/uapi: "Perf" layer to support multiple perf counter stream types
Date: Tue, 11 Jun 2024 19:03:10 -0700	[thread overview]
Message-ID: <8734pi2a01.wl-ashutosh.dixit@intel.com> (raw)
In-Reply-To: <57eea603-9fc3-4309-8349-f136ffc3a22c@intel.com>

On Sat, 08 Jun 2024 03:44:24 -0700, Michal Wajdeczko wrote:
>

Hi Michal,

> Hi Ashutosh,
>
> Please find few late btw comments below.

Np, thanks for the review.

You can see a consolidated (or full tree) diff of the changes in response
to your comments (in v17) here:

https://patchwork.freedesktop.org/series/134742/

v17 itself can be seen here:

https://patchwork.freedesktop.org/series/121084/#rev17

>
> On 07.06.2024 22:43, Ashutosh Dixit wrote:
> > In Xe, the plan is to support multiple types of perf counter streams (OA is
> > only one type of these streams). Rather than introduce NxM ioctls for
> > these (N perf streams with M ioctl's per perf stream), we decide to
> > multiplex these (N different stream types and the M ops for each of these
> > stream types) through a single PERF ioctl. This multiplexing is the purpose
> > of the PERF layer.
> >
> > In addition to PERF DRM ioctl's, another set of ioctl's on the PERF fd are
> > defined. These are expected to be common to different PERF stream types and
> > therefore defined at the PERF layer itself.
> >
> > v2: Add param_size to 'struct drm_xe_perf_param' (Umesh)
> > v3: Rename 'enum drm_xe_perf_ops' to
> >     'enum drm_xe_perf_ioctls' (Guy Zadicario)
> >     Add DRM_ prefix to ioctl names to indicate uapi names
> > v4: Add 'enum drm_xe_perf_op' previously missed out (Guy Zadicario)
> > v5: Squash the ops and PERF layer patches into a single patch (Umesh)
> >     Remove param_size from struct 'drm_xe_perf_param' (Umesh)
> > v6: Add DRM_XE_PERF_IOCTL_STATUS
> > v7: Add DRM_XE_PERF_IOCTL_INFO
> >
> > Acked-by: Guy Zadicario <gzadicario@habana.ai>
> > Acked-by: José Roberto de Souza <jose.souza@intel.com>
> > Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
> > Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
> > ---
> >  drivers/gpu/drm/xe/Makefile    |  1 +
> >  drivers/gpu/drm/xe/xe_device.c |  2 ++
> >  drivers/gpu/drm/xe/xe_perf.c   | 21 ++++++++++++
> >  drivers/gpu/drm/xe/xe_perf.h   | 16 +++++++++
> >  include/uapi/drm/xe_drm.h      | 63 ++++++++++++++++++++++++++++++++++
> >  5 files changed, 103 insertions(+)
> >  create mode 100644 drivers/gpu/drm/xe/xe_perf.c
> >  create mode 100644 drivers/gpu/drm/xe/xe_perf.h
> >
> > diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
> > index 0c3e3adabb27..7a91b318efa5 100644
> > --- a/drivers/gpu/drm/xe/Makefile
> > +++ b/drivers/gpu/drm/xe/Makefile
> > @@ -95,6 +95,7 @@ xe-y += xe_bb.o \
> >	xe_pat.o \
> >	xe_pci.o \
> >	xe_pcode.o \
> > +	xe_perf.o \
> >	xe_pm.o \
> >	xe_preempt_fence.o \
> >	xe_pt.o \
> > diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
> > index 0ff95a0ea5ea..31ab04b4bd5c 100644
> > --- a/drivers/gpu/drm/xe/xe_device.c
> > +++ b/drivers/gpu/drm/xe/xe_device.c
> > @@ -43,6 +43,7 @@
> >  #include "xe_module.h"
> >  #include "xe_pat.h"
> >  #include "xe_pcode.h"
> > +#include "xe_perf.h"
> >  #include "xe_pm.h"
> >  #include "xe_query.h"
> >  #include "xe_sriov.h"
> > @@ -140,6 +141,7 @@ static const struct drm_ioctl_desc xe_ioctls[] = {
> >			  DRM_RENDER_ALLOW),
> >	DRM_IOCTL_DEF_DRV(XE_WAIT_USER_FENCE, xe_wait_user_fence_ioctl,
> >			  DRM_RENDER_ALLOW),
> > +	DRM_IOCTL_DEF_DRV(XE_PERF, xe_perf_ioctl, DRM_RENDER_ALLOW),
> >  };
> >
> >  static long xe_drm_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
> > diff --git a/drivers/gpu/drm/xe/xe_perf.c b/drivers/gpu/drm/xe/xe_perf.c
> > new file mode 100644
> > index 000000000000..a130076b59aa
> > --- /dev/null
> > +++ b/drivers/gpu/drm/xe/xe_perf.c
> > @@ -0,0 +1,21 @@
> > +// SPDX-License-Identifier: MIT
> > +/*
> > + * Copyright © 2023 Intel Corporation
>
> maybe it's time to use 2023-2024 ?

Done.

>
> > + */
> > +
> > +#include <linux/errno.h>
> > +
> > +#include "xe_perf.h"
> > +
> > +int xe_perf_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
> > +{
> > +	struct drm_xe_perf_param *arg = data;
> > +
> > +	if (arg->extensions)
> > +		return -EINVAL;
> > +
> > +	switch (arg->perf_type) {
> > +	default:
> > +		return -EINVAL;
> > +	}
> > +}
> > diff --git a/drivers/gpu/drm/xe/xe_perf.h b/drivers/gpu/drm/xe/xe_perf.h
> > new file mode 100644
> > index 000000000000..254cc7cf49fe
> > --- /dev/null
> > +++ b/drivers/gpu/drm/xe/xe_perf.h
> > @@ -0,0 +1,16 @@
> > +/* SPDX-License-Identifier: MIT */
> > +/*
> > + * Copyright © 2023 Intel Corporation
> > + */
> > +
> > +#ifndef _XE_PERF_H_
> > +#define _XE_PERF_H_
> > +
> > +#include <drm/xe_drm.h>
>
> this is not needed here as you already have required forward decls

Done, moved to .c

>
> > +
> > +struct drm_device;
> > +struct drm_file;
> > +
> > +int xe_perf_ioctl(struct drm_device *dev, void *data, struct drm_file *file);
> > +
> > +#endif
> > diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
> > index d7b0903c22b2..03df64600aa0 100644
> > --- a/include/uapi/drm/xe_drm.h
> > +++ b/include/uapi/drm/xe_drm.h
> > @@ -100,6 +100,8 @@ extern "C" {
> >  #define DRM_XE_EXEC_QUEUE_GET_PROPERTY	0x08
> >  #define DRM_XE_EXEC			0x09
> >  #define DRM_XE_WAIT_USER_FENCE		0x0a
> > +#define DRM_XE_PERF			0x0b
> > +
> >  /* Must be kept compact -- no holes */
> >
> >  #define DRM_IOCTL_XE_DEVICE_QUERY		DRM_IOWR(DRM_COMMAND_BASE + DRM_XE_DEVICE_QUERY, struct drm_xe_device_query)
> > @@ -113,6 +115,7 @@ extern "C" {
> >  #define DRM_IOCTL_XE_EXEC_QUEUE_GET_PROPERTY	DRM_IOWR(DRM_COMMAND_BASE + DRM_XE_EXEC_QUEUE_GET_PROPERTY, struct drm_xe_exec_queue_get_property)
> >  #define DRM_IOCTL_XE_EXEC			DRM_IOW(DRM_COMMAND_BASE + DRM_XE_EXEC, struct drm_xe_exec)
> >  #define DRM_IOCTL_XE_WAIT_USER_FENCE		DRM_IOWR(DRM_COMMAND_BASE + DRM_XE_WAIT_USER_FENCE, struct drm_xe_wait_user_fence)
> > +#define DRM_IOCTL_XE_PERF			DRM_IOW(DRM_COMMAND_BASE + DRM_XE_PERF, struct drm_xe_perf_param)
> >
> >  /**
> >   * DOC: Xe IOCTL Extensions
> > @@ -1370,6 +1373,66 @@ struct drm_xe_wait_user_fence {
> >	__u64 reserved[2];
> >  };
> >
> > +/** enum drm_xe_perf_type - Perf stream types */
>
> can we make it multi-line to look more like other top level kernel-doc?

Done.

>
> > +enum drm_xe_perf_type {
> > +	DRM_XE_PERF_TYPE_MAX,
>
> as this is likely a special case enumerator, maybe it's worth to name it
> differently then the real enumerators that should only be used
>
> and add some note about it's expected use model?

I named it __DRM_XE_PERF_TYPE_MAX and marked it as non-ABI. It will likely
not be used but I would like to introduce 'enum drm_xe_perf_type' in this
patch since it is part of the 'perf layer'. I could drop
DRM_XE_PERF_TYPE_MAX, but C does not allow empty enum's.

>
> > +};
> > +
> > +/**
> > + * enum drm_xe_perf_op - Perf stream ops
> > + */
> > +enum drm_xe_perf_op {
> > +	/** @DRM_XE_PERF_OP_STREAM_OPEN: Open a perf counter stream */
> > +	DRM_XE_PERF_OP_STREAM_OPEN,
> > +
> > +	/** @DRM_XE_PERF_OP_ADD_CONFIG: Add perf stream config */
> > +	DRM_XE_PERF_OP_ADD_CONFIG,
> > +
> > +	/** @DRM_XE_PERF_OP_REMOVE_CONFIG: Remove perf stream config */
> > +	DRM_XE_PERF_OP_REMOVE_CONFIG,
> > +};
> > +
> > +/**
> > + * struct drm_xe_perf_param - Input of &DRM_XE_PERF
> > + *
> > + * The perf layer enables multiplexing perf counter streams of multiple
> > + * types. The actual params for a particular stream operation are supplied
> > + * via the @param pointer (use __copy_from_user to get these params).
> > + */
> > +struct drm_xe_perf_param {
> > +	/** @extensions: Pointer to the first extension struct, if any */
> > +	__u64 extensions;
> > +	/** @perf_type: Perf stream type, of enum @drm_xe_perf_type */
> > +	__u64 perf_type;
> > +	/** @perf_op: Perf op, of enum @drm_xe_perf_op */
> > +	__u64 perf_op;
> > +	/** @param: Pointer to actual stream params */
> > +	__u64 param;
> > +};
> > +
> > +/**
> > + * enum drm_xe_perf_ioctls - Perf fd ioctl's
> > + *
> > + * Information exchanged between userspace and kernel for perf fd ioctl's
> > + * is stream type specific
> > + */
> > +enum drm_xe_perf_ioctls {
> > +	/** @DRM_XE_PERF_IOCTL_ENABLE: Enable data capture for a stream */
> > +	DRM_XE_PERF_IOCTL_ENABLE = _IO('i', 0x0),
> > +
> > +	/** @DRM_XE_PERF_IOCTL_DISABLE: Disable data capture for a stream */
> > +	DRM_XE_PERF_IOCTL_DISABLE = _IO('i', 0x1),
> > +
> > +	/** @DRM_XE_PERF_IOCTL_CONFIG: Change stream configuration */
> > +	DRM_XE_PERF_IOCTL_CONFIG = _IO('i', 0x2),
> > +
> > +	/** @DRM_XE_PERF_IOCTL_STATUS: Return stream status */
> > +	DRM_XE_PERF_IOCTL_STATUS = _IO('i', 0x3),
> > +
> > +	/** @DRM_XE_PERF_IOCTL_INFO: Return stream info */
> > +	DRM_XE_PERF_IOCTL_INFO = _IO('i', 0x4),
> > +};
> > +
> >  #if defined(__cplusplus)
> >  }
> >  #endif

Thanks.
--
Ashutosh

  reply	other threads:[~2024-06-12  2:08 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-06-07 20:43 [PATCH v16 00/17] Add OA functionality to Xe Ashutosh Dixit
2024-06-07 20:43 ` [PATCH 01/17] drm/xe/perf/uapi: "Perf" layer to support multiple perf counter stream types Ashutosh Dixit
2024-06-08 10:44   ` Michal Wajdeczko
2024-06-12  2:03     ` Dixit, Ashutosh [this message]
2024-06-07 20:43 ` [PATCH 02/17] drm/xe/perf/uapi: Add perf_stream_paranoid sysctl Ashutosh Dixit
2024-06-07 20:43 ` [PATCH 03/17] drm/xe/oa/uapi: Add OA data formats Ashutosh Dixit
2024-06-08 10:54   ` Michal Wajdeczko
2024-06-12  2:03     ` Dixit, Ashutosh
2024-06-13 15:39       ` Michal Wajdeczko
2024-06-17 19:32         ` Rodrigo Vivi
2024-06-07 20:43 ` [PATCH 04/17] drm/xe/oa/uapi: Initialize OA units Ashutosh Dixit
2024-06-08 11:09   ` Michal Wajdeczko
2024-06-12  2:03     ` Dixit, Ashutosh
2024-06-07 20:43 ` [PATCH 05/17] drm/xe/oa/uapi: Add/remove OA config perf ops Ashutosh Dixit
2024-06-08 11:15   ` Michal Wajdeczko
2024-06-12  2:03     ` Dixit, Ashutosh
2024-06-07 20:43 ` [PATCH 06/17] drm/xe/oa/uapi: Define and parse OA stream properties Ashutosh Dixit
2024-06-07 20:43 ` [PATCH 07/17] drm/xe/oa: OA stream initialization (OAG) Ashutosh Dixit
2024-06-07 20:43 ` [PATCH 08/17] drm/xe/oa/uapi: Expose OA stream fd Ashutosh Dixit
2024-06-07 20:43 ` [PATCH 09/17] drm/xe/oa/uapi: Read file_operation Ashutosh Dixit
2024-06-07 20:43 ` [PATCH 10/17] drm/xe/oa: Add OAR support Ashutosh Dixit
2024-06-08 11:30   ` Michal Wajdeczko
2024-06-12  2:04     ` Dixit, Ashutosh
2024-06-07 20:43 ` [PATCH 11/17] drm/xe/oa: Add OAC support Ashutosh Dixit
2024-06-07 20:43 ` [PATCH 12/17] drm/xe/oa/uapi: Query OA unit properties Ashutosh Dixit
2024-06-07 20:43 ` [PATCH 13/17] drm/xe/oa/uapi: OA buffer mmap Ashutosh Dixit
2024-06-07 20:43 ` [PATCH 14/17] drm/xe/oa: Add MMIO trigger support Ashutosh Dixit
2024-06-07 20:43 ` [PATCH 15/17] drm/xe/oa: Override GuC RC with OA on PVC Ashutosh Dixit
2024-06-08 11:45   ` Michal Wajdeczko
2024-06-12  2:04     ` Dixit, Ashutosh
2024-06-07 20:43 ` [PATCH 16/17] drm/xe/oa: Changes to OA_TAKEN Ashutosh Dixit
2024-06-07 20:43 ` [PATCH 17/17] drm/xe/oa: Enable Xe2+ overrun mode Ashutosh Dixit
2024-06-07 21:37 ` ✓ CI.Patch_applied: success for Add OA functionality to Xe (rev16) Patchwork
2024-06-07 21:38 ` ✗ CI.checkpatch: warning " Patchwork
2024-06-07 21:39 ` ✓ CI.KUnit: success " Patchwork
2024-06-07 21:50 ` ✓ CI.Build: " Patchwork
2024-06-07 21:52 ` ✓ CI.Hooks: " Patchwork
2024-06-07 21:54 ` ✓ CI.checksparse: " Patchwork
2024-06-07 22:54 ` ✓ CI.BAT: " Patchwork
2024-06-08 13:22 ` ✓ CI.FULL: " Patchwork
  -- strict thread matches above, loose matches on Subject: below --
2024-06-18  1:45 [PATCH v19 00/17] Add OA functionality to Xe Ashutosh Dixit
2024-06-18  1:45 ` [PATCH 01/17] drm/xe/perf/uapi: "Perf" layer to support multiple perf counter stream types Ashutosh Dixit
2024-06-17 22:36 [PATCH v18 00/17] Add OA functionality to Xe Ashutosh Dixit
2024-06-17 22:36 ` [PATCH 01/17] drm/xe/perf/uapi: "Perf" layer to support multiple perf counter stream types Ashutosh Dixit
2024-06-12  2:05 [PATCH v17 00/17] Add OA functionality to Xe Ashutosh Dixit
2024-06-12  2:05 ` [PATCH 01/17] drm/xe/perf/uapi: "Perf" layer to support multiple perf counter stream types Ashutosh Dixit
2024-05-27  1:43 [PATCH v15 00/17] Add OA functionality to Xe Ashutosh Dixit
2024-05-27  1:43 ` [PATCH 01/17] drm/xe/perf/uapi: "Perf" layer to support multiple perf counter stream types Ashutosh Dixit
2024-05-24 19:01 [PATCH v14 00/17] Add OA functionality to Xe Ashutosh Dixit
2024-05-24 19:01 ` [PATCH 01/17] drm/xe/perf/uapi: "Perf" layer to support multiple perf counter stream types Ashutosh Dixit
2024-03-15  1:35 [PATCH 00/17] Add OA functionality to Xe Ashutosh Dixit
2024-03-15  1:35 ` [PATCH 01/17] drm/xe/perf/uapi: "Perf" layer to support multiple perf counter stream types Ashutosh Dixit
2024-03-12  3:38 [PATCH v12 00/17] Add OA functionality to Xe Ashutosh Dixit
2024-03-12  3:39 ` [PATCH 01/17] drm/xe/perf/uapi: "Perf" layer to support multiple perf counter stream types Ashutosh Dixit
2023-12-08  6:43 [PATCH v7 00/17] Add OA functionality to Xe Ashutosh Dixit
2023-12-08  6:43 ` [PATCH 01/17] drm/xe/perf/uapi: "Perf" layer to support multiple perf counter stream types Ashutosh Dixit

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=8734pi2a01.wl-ashutosh.dixit@intel.com \
    --to=ashutosh.dixit@intel.com \
    --cc=intel-xe@lists.freedesktop.org \
    --cc=michal.wajdeczko@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.