All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Dixit, Ashutosh" <ashutosh.dixit@intel.com>
To: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Cc: intel-xe@lists.freedesktop.org
Subject: Re: [Intel-xe] [PATCH 12/21] drm/xe/uapi: "Perf" layer to support multiple perf counter stream types
Date: Wed, 04 Oct 2023 21:33:41 -0700	[thread overview]
Message-ID: <87pm1t1ye2.wl-ashutosh.dixit@intel.com> (raw)
In-Reply-To: <ZRzKSyTTIiW46n58@unerlige-ril>

On Tue, 03 Oct 2023 19:13:31 -0700, Umesh Nerlige Ramappa wrote:
>
> On Tue, Sep 19, 2023 at 09:10:40AM -0700, Ashutosh Dixit wrote:
> > In XE, the plan is to support multiple types of perf counter streams (OA is
> > only one type of these streams). This requires addition of a PERF layer to
> > multiplex these different stream types through a single set of PERF
> > ioctl's.
> >
> > Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
> > ---
> > drivers/gpu/drm/xe/Makefile    |  1 +
> > drivers/gpu/drm/xe/xe_device.c |  8 +++---
> > drivers/gpu/drm/xe/xe_oa.c     | 43 +++++++++++++++++-----------
> > drivers/gpu/drm/xe/xe_perf.c   | 52 ++++++++++++++++++++++++++++++++++
> > drivers/gpu/drm/xe/xe_perf.h   | 18 ++++++++++++
> > include/uapi/drm/xe_drm.h      | 44 +++++++++++++++++++---------
> > 6 files changed, 133 insertions(+), 33 deletions(-)
> > 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 a40c4827b9c85..294874681cc6c 100644
> > --- a/drivers/gpu/drm/xe/Makefile
> > +++ b/drivers/gpu/drm/xe/Makefile
> > @@ -88,6 +88,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 7a179c4515633..770b9fe6e65df 100644
> > --- a/drivers/gpu/drm/xe/xe_device.c
> > +++ b/drivers/gpu/drm/xe/xe_device.c
> > @@ -25,8 +25,8 @@
> > #include "xe_irq.h"
> > #include "xe_mmio.h"
> > #include "xe_module.h"
> > -#include "xe_oa.h"
> > #include "xe_pcode.h"
> > +#include "xe_perf.h"
> > #include "xe_pm.h"
> > #include "xe_query.h"
> > #include "xe_tile.h"
> > @@ -115,9 +115,9 @@ static const struct drm_ioctl_desc xe_ioctls[] = {
> >			  DRM_RENDER_ALLOW),
> >	DRM_IOCTL_DEF_DRV(XE_VM_MADVISE, xe_vm_madvise_ioctl, DRM_RENDER_ALLOW),
> >
> > -	DRM_IOCTL_DEF_DRV(XE_OA_OPEN, xe_oa_stream_open_ioctl, DRM_RENDER_ALLOW),
> > -	DRM_IOCTL_DEF_DRV(XE_OA_ADD_CONFIG, xe_oa_add_config_ioctl, DRM_RENDER_ALLOW),
> > -	DRM_IOCTL_DEF_DRV(XE_OA_REMOVE_CONFIG, xe_oa_remove_config_ioctl, DRM_RENDER_ALLOW),
> > +	DRM_IOCTL_DEF_DRV(XE_PERF_OPEN, xe_perf_open_ioctl, DRM_RENDER_ALLOW),
> > +	DRM_IOCTL_DEF_DRV(XE_PERF_ADD_CONFIG, xe_perf_add_config_ioctl, DRM_RENDER_ALLOW),
> > +	DRM_IOCTL_DEF_DRV(XE_PERF_REMOVE_CONFIG, xe_perf_remove_config_ioctl, DRM_RENDER_ALLOW),
> >
> > };
> >
> > diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
> > index 506dd056805b2..63db0969a86b2 100644
> > --- a/drivers/gpu/drm/xe/xe_oa.c
> > +++ b/drivers/gpu/drm/xe/xe_oa.c
> > @@ -1173,13 +1173,13 @@ static long xe_oa_ioctl_locked(struct xe_oa_stream *stream,
> >			       unsigned long arg)
> > {
> >	switch (cmd) {
> > -	case XE_OA_IOCTL_ENABLE:
> > +	case XE_PERF_IOCTL_ENABLE:
> >		xe_oa_enable_locked(stream);
> >		return 0;
> > -	case XE_OA_IOCTL_DISABLE:
> > +	case XE_PERF_IOCTL_DISABLE:
> >		xe_oa_disable_locked(stream);
> >		return 0;
> > -	case XE_OA_IOCTL_CONFIG:
> > +	case XE_PERF_IOCTL_CONFIG:
> >		return xe_oa_config_locked(stream, arg);
> >	}
> >
> > @@ -1692,12 +1692,11 @@ static int xe_oa_read_properties_unlocked(struct xe_oa *oa, u64 __user *uprops,
> >	return 0;
> > }
> >
> > -int xe_oa_stream_open_ioctl(struct drm_device *dev, void *data,
> > -			    struct drm_file *file)
> > +int xe_oa_stream_open_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
> > {
> >	struct xe_oa *oa = &to_xe_device(dev)->oa;
> > -	struct drm_xe_oa_open_param *param = data;
> >	struct xe_oa_open_properties props = {};
> > +	struct drm_xe_oa_open_param param;
> >	u32 known_open_flags;
> >	struct xe_gt *gt;
> >	int ret;
> > @@ -1707,14 +1706,18 @@ int xe_oa_stream_open_ioctl(struct drm_device *dev, void *data,
> >		return -ENODEV;
> >	}
> >
> > +	ret = __copy_from_user(&param, data, sizeof(param));
> > +	if (XE_IOCTL_DBG(oa->xe, ret))
> > +		return -EFAULT;
> > +
> >	known_open_flags = XE_OA_FLAG_FD_CLOEXEC | XE_OA_FLAG_FD_NONBLOCK | XE_OA_FLAG_DISABLED;
> > -	if (param->flags & ~known_open_flags) {
> > +	if (param.flags & ~known_open_flags) {
> >		drm_dbg(&oa->xe->drm, "Unknown drm_xe_oa_open_param flag\n");
> >		return -EINVAL;
> >	}
> >
> > -	ret = xe_oa_read_properties_unlocked(oa, u64_to_user_ptr(param->properties_ptr),
> > -					     param->num_properties,
> > +	ret = xe_oa_read_properties_unlocked(oa, u64_to_user_ptr(param.properties_ptr),
> > +					     param.num_properties,
> >					     &props);
> >	if (ret)
> >		return ret;
> > @@ -1722,7 +1725,7 @@ int xe_oa_stream_open_ioctl(struct drm_device *dev, void *data,
> >	gt = props.hwe->gt;
> >
> >	mutex_lock(&gt->oa.lock);
> > -	ret = xe_oa_stream_open_ioctl_locked(oa, param, &props, file);
> > +	ret = xe_oa_stream_open_ioctl_locked(oa, &param, &props, file);
> >	mutex_unlock(&gt->oa.lock);
> >
> >	return ret;
> > @@ -1918,7 +1921,8 @@ int xe_oa_add_config_ioctl(struct drm_device *dev, void *data,
> >			   struct drm_file *file)
> > {
> >	struct xe_oa *oa = &to_xe_device(dev)->oa;
> > -	struct drm_xe_oa_config *arg = data;
> > +	struct drm_xe_oa_config param;
> > +	struct drm_xe_oa_config *arg = &param;
> >	struct xe_oa_config *oa_config, *tmp;
> >	struct xe_oa_reg *regs;
> >	int err, id;
> > @@ -1933,6 +1937,10 @@ int xe_oa_add_config_ioctl(struct drm_device *dev, void *data,
> >		return -EACCES;
> >	}
> >
> > +	err = __copy_from_user(&param, data, sizeof(param));
> > +	if (XE_IOCTL_DBG(oa->xe, err))
> > +		return -EFAULT;
> > +
> >	if ((!arg->mux_regs_ptr || !arg->n_mux_regs) &&
> >	    (!arg->boolean_regs_ptr || !arg->n_boolean_regs) &&
> >	    (!arg->flex_regs_ptr || !arg->n_flex_regs)) {
> > @@ -2035,7 +2043,7 @@ int xe_oa_remove_config_ioctl(struct drm_device *dev, void *data,
> > {
> >	struct xe_oa *oa = &to_xe_device(dev)->oa;
> >	struct xe_oa_config *oa_config;
> > -	u64 *arg = data;
> > +	u64 arg, *ptr = data;
> >	int ret;
> >
> >	if (!oa->xe) {
> > @@ -2048,22 +2056,25 @@ int xe_oa_remove_config_ioctl(struct drm_device *dev, void *data,
> >		return -EACCES;
> >	}
> >
> > +	ret = get_user(arg, ptr);
> > +	if (XE_IOCTL_DBG(oa->xe, ret))
> > +		return ret;
> > +
> >	ret = mutex_lock_interruptible(&oa->metrics_lock);
> >	if (ret)
> >		return ret;
> >
> > -	oa_config = idr_find(&oa->metrics_idr, *arg);
> > +	oa_config = idr_find(&oa->metrics_idr, arg);
> >	if (!oa_config) {
> >		drm_dbg(&oa->xe->drm, "Failed to remove unknown OA config\n");
> >		ret = -ENOENT;
> >		goto err_unlock;
> >	}
> >
> > -	WARN_ON(*arg != oa_config->id);
> > +	WARN_ON(arg != oa_config->id);
> >
> >	sysfs_remove_group(oa->metrics_kobj, &oa_config->sysfs_metric);
> > -
> > -	idr_remove(&oa->metrics_idr, *arg);
> > +	idr_remove(&oa->metrics_idr, arg);
> >
> >	mutex_unlock(&oa->metrics_lock);
> >
> > diff --git a/drivers/gpu/drm/xe/xe_perf.c b/drivers/gpu/drm/xe/xe_perf.c
> > new file mode 100644
> > index 0000000000000..0f747af59f245
> > --- /dev/null
> > +++ b/drivers/gpu/drm/xe/xe_perf.c
> > @@ -0,0 +1,52 @@
> > +// SPDX-License-Identifier: MIT
> > +/*
> > + * Copyright © 2023 Intel Corporation
> > + */
> > +
> > +#include "xe_oa.h"
> > +#include "xe_perf.h"
> > +
> > +int xe_perf_open_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) {
> > +	case XE_PERF_TYPE_OA:
> > +		return xe_oa_stream_open_ioctl(dev, (void *)arg->param, file);
> > +	default:
> > +		return -EINVAL;
>
> Wondering if a different unique error must be returned to indicate that a
> particular perf module is not supported. Other than that, this lgtm,

Somthing weird like ECONNABORTED? If ops are included here probably
EOPNOSUPP would also work. Probably doesn't matter much. Maybe I will
change to EOPNOSUPP for now.

> Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>

Thanks.
--
Ashutosh

  reply	other threads:[~2023-10-05  4:33 UTC|newest]

Thread overview: 88+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-19 16:10 [Intel-xe] [PATCH 00/21] Add OA functionality to Xe Ashutosh Dixit
2023-09-19 16:10 ` [Intel-xe] [PATCH 01/21] drm/xe/uapi: Introduce OA (observability architecture) uapi Ashutosh Dixit
2023-10-04  0:26   ` Umesh Nerlige Ramappa
2023-10-04  0:36     ` Dixit, Ashutosh
2023-11-04  1:23   ` Dixit, Ashutosh
2023-09-19 16:10 ` [Intel-xe] [PATCH 02/21] drm/xe/oa: Add OA types Ashutosh Dixit
2023-10-13 17:05   ` Umesh Nerlige Ramappa
2023-09-19 16:10 ` [Intel-xe] [PATCH 03/21] drm/xe/oa: Add registers and GPU commands used by OA Ashutosh Dixit
2023-10-13 17:06   ` Umesh Nerlige Ramappa
2023-11-17 22:52     ` Dixit, Ashutosh
2023-09-19 16:10 ` [Intel-xe] [PATCH 04/21] drm/xe/oa: Module init/exit and probe/remove Ashutosh Dixit
2023-10-13 17:50   ` Umesh Nerlige Ramappa
2023-10-20  7:08   ` [Intel-xe] [04/21] " Lionel Landwerlin
2023-10-27 20:28     ` Dixit, Ashutosh
2023-09-19 16:10 ` [Intel-xe] [PATCH 05/21] drm/xe/oa: Add/remove config ioctl's Ashutosh Dixit
2023-10-13 17:59   ` Umesh Nerlige Ramappa
2023-09-19 16:10 ` [Intel-xe] [PATCH 06/21] drm/xe/oa: Start implementing OA stream open ioctl Ashutosh Dixit
2023-10-13 18:09   ` Umesh Nerlige Ramappa
2023-09-19 16:10 ` [Intel-xe] [PATCH 07/21] drm/xe/oa: OA stream initialization Ashutosh Dixit
2023-10-04 15:22   ` Dixit, Ashutosh
2023-09-19 16:10 ` [Intel-xe] [PATCH 08/21] drm/xe/oa: Expose OA stream fd Ashutosh Dixit
2023-10-13 18:17   ` Umesh Nerlige Ramappa
2023-09-19 16:10 ` [Intel-xe] [PATCH 09/21] drm/xe/oa: Read file_operation Ashutosh Dixit
2023-10-14  0:56   ` Umesh Nerlige Ramappa
2023-09-19 16:10 ` [Intel-xe] [PATCH 10/21] drm/xe/oa: Implement queries Ashutosh Dixit
2023-10-14  0:58   ` Umesh Nerlige Ramappa
2023-09-19 16:10 ` [Intel-xe] [PATCH 11/21] drm/xe/oa: Override GuC RC with OA on PVC Ashutosh Dixit
2023-10-16 17:43   ` Umesh Nerlige Ramappa
2023-09-19 16:10 ` [Intel-xe] [PATCH 12/21] drm/xe/uapi: "Perf" layer to support multiple perf counter stream types Ashutosh Dixit
2023-10-04  2:13   ` Umesh Nerlige Ramappa
2023-10-05  4:33     ` Dixit, Ashutosh [this message]
2023-09-19 16:10 ` [Intel-xe] [PATCH 13/21] drm/xe/uapi: Multiplex PERF ops through a single PERF ioctl Ashutosh Dixit
2023-10-04  2:23   ` Umesh Nerlige Ramappa
2023-10-05  5:27     ` Dixit, Ashutosh
2023-10-05 15:22       ` Dixit, Ashutosh
2023-10-05 18:27         ` Umesh Nerlige Ramappa
2023-10-05 23:18           ` Dixit, Ashutosh
2023-09-19 16:10 ` [Intel-xe] [PATCH 14/21] drm/xe/uapi: Simplify OA configs in uapi Ashutosh Dixit
2023-10-04  2:26   ` Umesh Nerlige Ramappa
2023-10-04 15:44     ` Dixit, Ashutosh
2023-10-04 16:13       ` Rodrigo Vivi
2023-09-19 16:10 ` [Intel-xe] [PATCH 15/21] drm/xe/uapi: Remove OA format names from OA uapi Ashutosh Dixit
2023-10-04  2:33   ` Umesh Nerlige Ramappa
2023-10-05  6:13     ` Dixit, Ashutosh
2023-09-19 16:10 ` [Intel-xe] [PATCH 16/21] drm/xe/oa: Make xe_oa_timestamp_frequency per gt Ashutosh Dixit
2023-09-21 20:45   ` Rodrigo Vivi
2023-09-21 21:58     ` Dixit, Ashutosh
2023-09-22 19:10       ` Rodrigo Vivi
2023-09-19 16:10 ` [Intel-xe] [PATCH 17/21] drm/xe/oa: Remove filtering reports on context id Ashutosh Dixit
2023-10-14  1:01   ` Umesh Nerlige Ramappa
2023-10-20  7:30   ` [Intel-xe] [17/21] " Lionel Landwerlin
2023-10-20 17:00     ` Umesh Nerlige Ramappa
2023-09-19 16:10 ` [Intel-xe] [PATCH 18/21] drm/xe/uapi: More OA uapi fixes/additions Ashutosh Dixit
2023-10-04  0:23   ` Dixit, Ashutosh
2023-10-05 22:33   ` Dixit, Ashutosh
2023-10-12  3:14     ` Umesh Nerlige Ramappa
2023-10-20  7:28   ` [Intel-xe] [18/21] " Lionel Landwerlin
2023-10-27 20:28     ` Dixit, Ashutosh
2023-10-30 10:06       ` Lionel Landwerlin
2023-10-31  2:08         ` Dixit, Ashutosh
2023-09-19 16:10 ` [Intel-xe] [PATCH 19/21] drm/xe/uapi: Drop OA_IOCTL_VERSION Ashutosh Dixit
2023-09-19 17:02   ` Dixit, Ashutosh
2023-10-04  2:37     ` Umesh Nerlige Ramappa
2023-10-05  3:28       ` Dixit, Ashutosh
2023-10-05 19:35         ` Umesh Nerlige Ramappa
2023-10-20  7:36   ` [Intel-xe] [19/21] " Lionel Landwerlin
2023-10-23 23:02     ` Umesh Nerlige Ramappa
2023-10-24  4:08       ` Dixit, Ashutosh
2023-10-24 15:54         ` Dixit, Ashutosh
2023-09-19 16:10 ` [Intel-xe] [PATCH 20/21] drm/xe/uapi: Use OA unit id to identify OA unit Ashutosh Dixit
2023-10-04 22:37   ` Umesh Nerlige Ramappa
2023-10-05  3:04     ` Dixit, Ashutosh
2023-10-05  3:09       ` Dixit, Ashutosh
2023-09-19 16:10 ` [Intel-xe] [PATCH 21/21] drm/xe/uapi: Convert OA property key/value pairs to a struct Ashutosh Dixit
2023-09-21 23:53   ` Dixit, Ashutosh
2023-10-05  5:37     ` Dixit, Ashutosh
2023-10-05 19:26       ` Umesh Nerlige Ramappa
2023-09-19 16:19 ` [Intel-xe] ✓ CI.Patch_applied: success for Add OA functionality to Xe (rev6) Patchwork
2023-09-19 16:19 ` [Intel-xe] ✗ CI.checkpatch: warning " Patchwork
2023-09-19 16:21 ` [Intel-xe] ✓ CI.KUnit: success " Patchwork
2023-09-19 16:28 ` [Intel-xe] ✓ CI.Build: " Patchwork
2023-09-19 16:28 ` [Intel-xe] ✗ CI.Hooks: failure " Patchwork
2023-09-19 16:29 ` [Intel-xe] ✓ CI.checksparse: success " Patchwork
2023-09-19 17:04 ` [Intel-xe] ✗ CI.BAT: failure " Patchwork
2023-10-14  1:05 ` [Intel-xe] [PATCH 00/21] Add OA functionality to Xe Umesh Nerlige Ramappa
2023-10-20  7:44 ` Lionel Landwerlin
2023-10-20  7:52   ` Lionel Landwerlin
2023-10-31  6:51     ` Dixit, Ashutosh

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=87pm1t1ye2.wl-ashutosh.dixit@intel.com \
    --to=ashutosh.dixit@intel.com \
    --cc=intel-xe@lists.freedesktop.org \
    --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.