[PATCH] drm/xe/uapi: Rename xe perf layer as xe observation layer

Umesh Nerlige Ramappa umesh.nerlige.ramappa at intel.com
Tue Jul 2 22:45:26 UTC 2024


On Tue, Jul 02, 2024 at 02:40:34PM -0700, Ashutosh Dixit wrote:
>In Xe, the perf layer allows capture of HW counter streams. These HW
>counters are generally performance related but don't have to be necessarily
>so. Also, the name "perf" is a carryover from i915 and is not preferred.
>
>Here we propose the name "observation" for this common layer which allows
>capture of different types of these counter streams.
>
>v2: Rename observability layer to observation layer and in code
>    s/obsrv/observation/ (Lucas/Rodrigo)
>
>Fixes: 52c2e956dceb ("drm/xe/perf/uapi: "Perf" layer to support multiple
>       perf counter stream types")
>Fixes: fe8929bdf835 ("drm/xe/perf/uapi: Add perf_stream_paranoid sysctl")
>Acked-by: Lucas De Marchi <lucas.demarchi at intel.com>
>Acked-by: Rodrigo Vivi <rodrigo.vivi at intel.com>
>Signed-off-by: Ashutosh Dixit <ashutosh.dixit at intel.com>

Applied the patch and grepped for perf/obsrv/observation, LGTM,

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

Thanks,
Umesh
>---
> drivers/gpu/drm/xe/Makefile          |   2 +-
> drivers/gpu/drm/xe/xe_device.c       |   4 +-
> drivers/gpu/drm/xe/xe_device_types.h |   2 +-
> drivers/gpu/drm/xe/xe_gt_types.h     |   2 +-
> drivers/gpu/drm/xe/xe_module.c       |   6 +-
> drivers/gpu/drm/xe/xe_oa.c           |  34 ++++-----
> drivers/gpu/drm/xe/xe_observation.c  |  93 ++++++++++++++++++++++++
> drivers/gpu/drm/xe/xe_observation.h  |  20 ++++++
> drivers/gpu/drm/xe/xe_perf.c         |  92 ------------------------
> drivers/gpu/drm/xe/xe_perf.h         |  20 ------
> include/uapi/drm/xe_drm.h            | 102 ++++++++++++++-------------
> 11 files changed, 190 insertions(+), 187 deletions(-)
> create mode 100644 drivers/gpu/drm/xe/xe_observation.c
> create mode 100644 drivers/gpu/drm/xe/xe_observation.h
> delete mode 100644 drivers/gpu/drm/xe/xe_perf.c
> delete mode 100644 drivers/gpu/drm/xe/xe_perf.h
>
>diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
>index b1e03bfe4a68..628c245c4822 100644
>--- a/drivers/gpu/drm/xe/Makefile
>+++ b/drivers/gpu/drm/xe/Makefile
>@@ -96,10 +96,10 @@ xe-y += xe_bb.o \
> 	xe_mocs.o \
> 	xe_module.o \
> 	xe_oa.o \
>+	xe_observation.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 cfda7cb5df2c..03492fbcb8fb 100644
>--- a/drivers/gpu/drm/xe/xe_device.c
>+++ b/drivers/gpu/drm/xe/xe_device.c
>@@ -42,9 +42,9 @@
> #include "xe_memirq.h"
> #include "xe_mmio.h"
> #include "xe_module.h"
>+#include "xe_observation.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"
>@@ -142,7 +142,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),
>+	DRM_IOCTL_DEF_DRV(XE_OBSERVATION, xe_observation_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_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
>index c37be471d11c..3bca6d344744 100644
>--- a/drivers/gpu/drm/xe/xe_device_types.h
>+++ b/drivers/gpu/drm/xe/xe_device_types.h
>@@ -463,7 +463,7 @@ struct xe_device {
> 	/** @heci_gsc: graphics security controller */
> 	struct xe_heci_gsc heci_gsc;
>
>-	/** @oa: oa perf counter subsystem */
>+	/** @oa: oa observation subsystem */
> 	struct xe_oa oa;
>
> 	/** @needs_flr_on_fini: requests function-reset on fini */
>diff --git a/drivers/gpu/drm/xe/xe_gt_types.h b/drivers/gpu/drm/xe/xe_gt_types.h
>index 24bb95de920f..6b5e0b45efb0 100644
>--- a/drivers/gpu/drm/xe/xe_gt_types.h
>+++ b/drivers/gpu/drm/xe/xe_gt_types.h
>@@ -389,7 +389,7 @@ struct xe_gt {
> 		u8 instances_per_class[XE_ENGINE_CLASS_MAX];
> 	} user_engines;
>
>-	/** @oa: oa perf counter subsystem per gt info */
>+	/** @oa: oa observation subsystem per gt info */
> 	struct xe_oa_gt oa;
> };
>
>diff --git a/drivers/gpu/drm/xe/xe_module.c b/drivers/gpu/drm/xe/xe_module.c
>index 893858a2eea0..499540add465 100644
>--- a/drivers/gpu/drm/xe/xe_module.c
>+++ b/drivers/gpu/drm/xe/xe_module.c
>@@ -11,7 +11,7 @@
> #include "xe_drv.h"
> #include "xe_hw_fence.h"
> #include "xe_pci.h"
>-#include "xe_perf.h"
>+#include "xe_observation.h"
> #include "xe_sched_job.h"
>
> struct xe_modparam xe_modparam = {
>@@ -80,8 +80,8 @@ static const struct init_funcs init_funcs[] = {
> 		.exit = xe_unregister_pci_driver,
> 	},
> 	{
>-		.init = xe_perf_sysctl_register,
>-		.exit = xe_perf_sysctl_unregister,
>+		.init = xe_observation_sysctl_register,
>+		.exit = xe_observation_sysctl_unregister,
> 	},
> };
>
>diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
>index 4188516a7816..6d69f751bf78 100644
>--- a/drivers/gpu/drm/xe/xe_oa.c
>+++ b/drivers/gpu/drm/xe/xe_oa.c
>@@ -32,7 +32,7 @@
> #include "xe_macros.h"
> #include "xe_mmio.h"
> #include "xe_oa.h"
>-#include "xe_perf.h"
>+#include "xe_observation.h"
> #include "xe_pm.h"
> #include "xe_sched_job.h"
> #include "xe_sriov.h"
>@@ -481,7 +481,7 @@ static int __xe_oa_read(struct xe_oa_stream *stream, char __user *buf,
> 					  OASTATUS_RELEVANT_BITS, 0);
> 	/*
> 	 * Signal to userspace that there is non-zero OA status to read via
>-	 * @DRM_XE_PERF_IOCTL_STATUS perf fd ioctl
>+	 * @DRM_XE_OBSERVATION_IOCTL_STATUS observation stream fd ioctl
> 	 */
> 	if (stream->oa_status & OASTATUS_RELEVANT_BITS)
> 		return -EIO;
>@@ -1158,15 +1158,15 @@ static long xe_oa_ioctl_locked(struct xe_oa_stream *stream,
> 			       unsigned long arg)
> {
> 	switch (cmd) {
>-	case DRM_XE_PERF_IOCTL_ENABLE:
>+	case DRM_XE_OBSERVATION_IOCTL_ENABLE:
> 		return xe_oa_enable_locked(stream);
>-	case DRM_XE_PERF_IOCTL_DISABLE:
>+	case DRM_XE_OBSERVATION_IOCTL_DISABLE:
> 		return xe_oa_disable_locked(stream);
>-	case DRM_XE_PERF_IOCTL_CONFIG:
>+	case DRM_XE_OBSERVATION_IOCTL_CONFIG:
> 		return xe_oa_config_locked(stream, arg);
>-	case DRM_XE_PERF_IOCTL_STATUS:
>+	case DRM_XE_OBSERVATION_IOCTL_STATUS:
> 		return xe_oa_status_locked(stream, arg);
>-	case DRM_XE_PERF_IOCTL_INFO:
>+	case DRM_XE_OBSERVATION_IOCTL_INFO:
> 		return xe_oa_info_locked(stream, arg);
> 	}
>
>@@ -1209,7 +1209,7 @@ static int xe_oa_release(struct inode *inode, struct file *file)
> 	xe_oa_destroy_locked(stream);
> 	mutex_unlock(&gt->oa.gt_lock);
>
>-	/* Release the reference the perf stream kept on the driver */
>+	/* Release the reference the OA stream kept on the driver */
> 	drm_dev_put(&gt_to_xe(gt)->drm);
>
> 	return 0;
>@@ -1222,7 +1222,7 @@ static int xe_oa_mmap(struct file *file, struct vm_area_struct *vma)
> 	unsigned long start = vma->vm_start;
> 	int i, ret;
>
>-	if (xe_perf_stream_paranoid && !perfmon_capable()) {
>+	if (xe_observation_paranoid && !perfmon_capable()) {
> 		drm_dbg(&stream->oa->xe->drm, "Insufficient privilege to map OA buffer\n");
> 		return -EACCES;
> 	}
>@@ -1789,8 +1789,8 @@ static int xe_oa_user_extensions(struct xe_oa *oa, u64 extension, int ext_number
>  * @file: @drm_file
>  *
>  * The functions opens an OA stream. An OA stream, opened with specified
>- * properties, enables perf counter samples to be collected, either
>- * periodically (time based sampling), or on request (using perf queries)
>+ * properties, enables OA counter samples to be collected, either
>+ * periodically (time based sampling), or on request (using OA queries)
>  */
> int xe_oa_stream_open_ioctl(struct drm_device *dev, u64 data, struct drm_file *file)
> {
>@@ -1836,8 +1836,8 @@ int xe_oa_stream_open_ioctl(struct drm_device *dev, u64 data, struct drm_file *f
> 		privileged_op = true;
> 	}
>
>-	if (privileged_op && xe_perf_stream_paranoid && !perfmon_capable()) {
>-		drm_dbg(&oa->xe->drm, "Insufficient privileges to open xe perf stream\n");
>+	if (privileged_op && xe_observation_paranoid && !perfmon_capable()) {
>+		drm_dbg(&oa->xe->drm, "Insufficient privileges to open xe OA stream\n");
> 		ret = -EACCES;
> 		goto err_exec_q;
> 	}
>@@ -2097,7 +2097,7 @@ int xe_oa_add_config_ioctl(struct drm_device *dev, u64 data, struct drm_file *fi
> 		return -ENODEV;
> 	}
>
>-	if (xe_perf_stream_paranoid && !perfmon_capable()) {
>+	if (xe_observation_paranoid && !perfmon_capable()) {
> 		drm_dbg(&oa->xe->drm, "Insufficient privileges to add xe OA config\n");
> 		return -EACCES;
> 	}
>@@ -2181,7 +2181,7 @@ int xe_oa_add_config_ioctl(struct drm_device *dev, u64 data, struct drm_file *fi
> /**
>  * xe_oa_remove_config_ioctl - Removes one OA config
>  * @dev: @drm_device
>- * @data: pointer to struct @drm_xe_perf_param
>+ * @data: pointer to struct @drm_xe_observation_param
>  * @file: @drm_file
>  */
> int xe_oa_remove_config_ioctl(struct drm_device *dev, u64 data, struct drm_file *file)
>@@ -2197,7 +2197,7 @@ int xe_oa_remove_config_ioctl(struct drm_device *dev, u64 data, struct drm_file
> 		return -ENODEV;
> 	}
>
>-	if (xe_perf_stream_paranoid && !perfmon_capable()) {
>+	if (xe_observation_paranoid && !perfmon_capable()) {
> 		drm_dbg(&oa->xe->drm, "Insufficient privileges to remove xe OA config\n");
> 		return -EACCES;
> 	}
>@@ -2381,7 +2381,7 @@ static int xe_oa_init_gt(struct xe_gt *gt)
>
> 	/*
> 	 * Fused off engines can result in oa_unit's with num_engines == 0. These units
>-	 * will appear in OA unit query, but no perf streams can be opened on them.
>+	 * will appear in OA unit query, but no OA streams can be opened on them.
> 	 */
> 	gt->oa.num_oa_units = num_oa_units;
> 	gt->oa.oa_unit = u;
>diff --git a/drivers/gpu/drm/xe/xe_observation.c b/drivers/gpu/drm/xe/xe_observation.c
>new file mode 100644
>index 000000000000..54b7c8c8e10e
>--- /dev/null
>+++ b/drivers/gpu/drm/xe/xe_observation.c
>@@ -0,0 +1,93 @@
>+// SPDX-License-Identifier: MIT
>+/*
>+ * Copyright © 2023-2024 Intel Corporation
>+ */
>+
>+#include <linux/errno.h>
>+#include <linux/sysctl.h>
>+
>+#include <drm/xe_drm.h>
>+
>+#include "xe_oa.h"
>+#include "xe_observation.h"
>+
>+u32 xe_observation_paranoid = true;
>+static struct ctl_table_header *sysctl_header;
>+
>+static int xe_oa_ioctl(struct drm_device *dev, struct drm_xe_observation_param *arg,
>+		       struct drm_file *file)
>+{
>+	switch (arg->observation_op) {
>+	case DRM_XE_OBSERVATION_OP_STREAM_OPEN:
>+		return xe_oa_stream_open_ioctl(dev, arg->param, file);
>+	case DRM_XE_OBSERVATION_OP_ADD_CONFIG:
>+		return xe_oa_add_config_ioctl(dev, arg->param, file);
>+	case DRM_XE_OBSERVATION_OP_REMOVE_CONFIG:
>+		return xe_oa_remove_config_ioctl(dev, arg->param, file);
>+	default:
>+		return -EINVAL;
>+	}
>+}
>+
>+/**
>+ * xe_observation_ioctl - The top level observation layer ioctl
>+ * @dev: @drm_device
>+ * @data: pointer to struct @drm_xe_observation_param
>+ * @file: @drm_file
>+ *
>+ * The function is called for different observation streams types and
>+ * allows execution of different operations supported by those stream
>+ * types.
>+ *
>+ * Return: 0 on success or a negative error code on failure.
>+ */
>+int xe_observation_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
>+{
>+	struct drm_xe_observation_param *arg = data;
>+
>+	if (arg->extensions)
>+		return -EINVAL;
>+
>+	switch (arg->observation_type) {
>+	case DRM_XE_OBSERVATION_TYPE_OA:
>+		return xe_oa_ioctl(dev, arg, file);
>+	default:
>+		return -EINVAL;
>+	}
>+}
>+
>+static struct ctl_table observation_ctl_table[] = {
>+	{
>+	 .procname = "xe_observation_paranoid",
>+	 .data = &xe_observation_paranoid,
>+	 .maxlen = sizeof(xe_observation_paranoid),
>+	 .mode = 0644,
>+	 .proc_handler = proc_dointvec_minmax,
>+	 .extra1 = SYSCTL_ZERO,
>+	 .extra2 = SYSCTL_ONE,
>+	 },
>+	{}
>+};
>+
>+/**
>+ * xe_observation_sysctl_register - Register xe_observation_paranoid sysctl
>+ *
>+ * Normally only superuser/root can access observation stream
>+ * data. However, superuser can set xe_observation_paranoid sysctl to 0 to
>+ * allow non-privileged users to also access observation data.
>+ *
>+ * Return: always returns 0
>+ */
>+int xe_observation_sysctl_register(void)
>+{
>+	sysctl_header = register_sysctl("dev/xe", observation_ctl_table);
>+	return 0;
>+}
>+
>+/**
>+ * xe_observation_sysctl_unregister - Unregister xe_observation_paranoid sysctl
>+ */
>+void xe_observation_sysctl_unregister(void)
>+{
>+	unregister_sysctl_table(sysctl_header);
>+}
>diff --git a/drivers/gpu/drm/xe/xe_observation.h b/drivers/gpu/drm/xe/xe_observation.h
>new file mode 100644
>index 000000000000..17816998e966
>--- /dev/null
>+++ b/drivers/gpu/drm/xe/xe_observation.h
>@@ -0,0 +1,20 @@
>+/* SPDX-License-Identifier: MIT */
>+/*
>+ * Copyright © 2023-2024 Intel Corporation
>+ */
>+
>+#ifndef _XE_OBSERVATION_H_
>+#define _XE_OBSERVATION_H_
>+
>+#include <linux/types.h>
>+
>+struct drm_device;
>+struct drm_file;
>+
>+extern u32 xe_observation_paranoid;
>+
>+int xe_observation_ioctl(struct drm_device *dev, void *data, struct drm_file *file);
>+int xe_observation_sysctl_register(void);
>+void xe_observation_sysctl_unregister(void);
>+
>+#endif
>diff --git a/drivers/gpu/drm/xe/xe_perf.c b/drivers/gpu/drm/xe/xe_perf.c
>deleted file mode 100644
>index d6cd74cadf34..000000000000
>--- a/drivers/gpu/drm/xe/xe_perf.c
>+++ /dev/null
>@@ -1,92 +0,0 @@
>-// SPDX-License-Identifier: MIT
>-/*
>- * Copyright © 2023-2024 Intel Corporation
>- */
>-
>-#include <linux/errno.h>
>-#include <linux/sysctl.h>
>-
>-#include <drm/xe_drm.h>
>-
>-#include "xe_oa.h"
>-#include "xe_perf.h"
>-
>-u32 xe_perf_stream_paranoid = true;
>-static struct ctl_table_header *sysctl_header;
>-
>-static int xe_oa_ioctl(struct drm_device *dev, struct drm_xe_perf_param *arg,
>-		       struct drm_file *file)
>-{
>-	switch (arg->perf_op) {
>-	case DRM_XE_PERF_OP_STREAM_OPEN:
>-		return xe_oa_stream_open_ioctl(dev, arg->param, file);
>-	case DRM_XE_PERF_OP_ADD_CONFIG:
>-		return xe_oa_add_config_ioctl(dev, arg->param, file);
>-	case DRM_XE_PERF_OP_REMOVE_CONFIG:
>-		return xe_oa_remove_config_ioctl(dev, arg->param, file);
>-	default:
>-		return -EINVAL;
>-	}
>-}
>-
>-/**
>- * xe_perf_ioctl - The top level perf layer ioctl
>- * @dev: @drm_device
>- * @data: pointer to struct @drm_xe_perf_param
>- * @file: @drm_file
>- *
>- * The function is called for different perf streams types and allows execution
>- * of different operations supported by those perf stream types.
>- *
>- * Return: 0 on success or a negative error code on failure.
>- */
>-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) {
>-	case DRM_XE_PERF_TYPE_OA:
>-		return xe_oa_ioctl(dev, arg, file);
>-	default:
>-		return -EINVAL;
>-	}
>-}
>-
>-static struct ctl_table perf_ctl_table[] = {
>-	{
>-	 .procname = "perf_stream_paranoid",
>-	 .data = &xe_perf_stream_paranoid,
>-	 .maxlen = sizeof(xe_perf_stream_paranoid),
>-	 .mode = 0644,
>-	 .proc_handler = proc_dointvec_minmax,
>-	 .extra1 = SYSCTL_ZERO,
>-	 .extra2 = SYSCTL_ONE,
>-	 },
>-	{}
>-};
>-
>-/**
>- * xe_perf_sysctl_register - Register "perf_stream_paranoid" sysctl
>- *
>- * Normally only superuser/root can access perf counter data. However,
>- * superuser can set perf_stream_paranoid sysctl to 0 to allow non-privileged
>- * users to also access perf data.
>- *
>- * Return: always returns 0
>- */
>-int xe_perf_sysctl_register(void)
>-{
>-	sysctl_header = register_sysctl("dev/xe", perf_ctl_table);
>-	return 0;
>-}
>-
>-/**
>- * xe_perf_sysctl_unregister - Unregister "perf_stream_paranoid" sysctl
>- */
>-void xe_perf_sysctl_unregister(void)
>-{
>-	unregister_sysctl_table(sysctl_header);
>-}
>diff --git a/drivers/gpu/drm/xe/xe_perf.h b/drivers/gpu/drm/xe/xe_perf.h
>deleted file mode 100644
>index 53a8377a1bb1..000000000000
>--- a/drivers/gpu/drm/xe/xe_perf.h
>+++ /dev/null
>@@ -1,20 +0,0 @@
>-/* SPDX-License-Identifier: MIT */
>-/*
>- * Copyright © 2023-2024 Intel Corporation
>- */
>-
>-#ifndef _XE_PERF_H_
>-#define _XE_PERF_H_
>-
>-#include <linux/types.h>
>-
>-struct drm_device;
>-struct drm_file;
>-
>-extern u32 xe_perf_stream_paranoid;
>-
>-int xe_perf_ioctl(struct drm_device *dev, void *data, struct drm_file *file);
>-int xe_perf_sysctl_register(void);
>-void xe_perf_sysctl_unregister(void);
>-
>-#endif
>diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
>index 12eaa8532b5c..33544ef78d3e 100644
>--- a/include/uapi/drm/xe_drm.h
>+++ b/include/uapi/drm/xe_drm.h
>@@ -80,7 +80,7 @@ extern "C" {
>  *  - &DRM_IOCTL_XE_EXEC_QUEUE_GET_PROPERTY
>  *  - &DRM_IOCTL_XE_EXEC
>  *  - &DRM_IOCTL_XE_WAIT_USER_FENCE
>- *  - &DRM_IOCTL_XE_PERF
>+ *  - &DRM_IOCTL_XE_OBSERVATION
>  */
>
> /*
>@@ -101,7 +101,7 @@ 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
>+#define DRM_XE_OBSERVATION		0x0b
>
> /* Must be kept compact -- no holes */
>
>@@ -116,7 +116,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)
>+#define DRM_IOCTL_XE_OBSERVATION		DRM_IOW(DRM_COMMAND_BASE + DRM_XE_OBSERVATION, struct drm_xe_observation_param)
>
> /**
>  * DOC: Xe IOCTL Extensions
>@@ -1376,66 +1376,67 @@ struct drm_xe_wait_user_fence {
> };
>
> /**
>- * enum drm_xe_perf_type - Perf stream types
>+ * enum drm_xe_observation_type - Observation stream types
>  */
>-enum drm_xe_perf_type {
>-	/** @DRM_XE_PERF_TYPE_OA: OA perf stream type */
>-	DRM_XE_PERF_TYPE_OA,
>+enum drm_xe_observation_type {
>+	/** @DRM_XE_OBSERVATION_TYPE_OA: OA observation stream type */
>+	DRM_XE_OBSERVATION_TYPE_OA,
> };
>
> /**
>- * enum drm_xe_perf_op - Perf stream ops
>+ * enum drm_xe_observation_op - Observation stream ops
>  */
>-enum drm_xe_perf_op {
>-	/** @DRM_XE_PERF_OP_STREAM_OPEN: Open a perf counter stream */
>-	DRM_XE_PERF_OP_STREAM_OPEN,
>+enum drm_xe_observation_op {
>+	/** @DRM_XE_OBSERVATION_OP_STREAM_OPEN: Open an observation stream */
>+	DRM_XE_OBSERVATION_OP_STREAM_OPEN,
>
>-	/** @DRM_XE_PERF_OP_ADD_CONFIG: Add perf stream config */
>-	DRM_XE_PERF_OP_ADD_CONFIG,
>+	/** @DRM_XE_OBSERVATION_OP_ADD_CONFIG: Add observation stream config */
>+	DRM_XE_OBSERVATION_OP_ADD_CONFIG,
>
>-	/** @DRM_XE_PERF_OP_REMOVE_CONFIG: Remove perf stream config */
>-	DRM_XE_PERF_OP_REMOVE_CONFIG,
>+	/** @DRM_XE_OBSERVATION_OP_REMOVE_CONFIG: Remove observation stream config */
>+	DRM_XE_OBSERVATION_OP_REMOVE_CONFIG,
> };
>
> /**
>- * struct drm_xe_perf_param - Input of &DRM_XE_PERF
>+ * struct drm_xe_observation_param - Input of &DRM_XE_OBSERVATION
>  *
>- * 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).
>+ * The observation layer enables multiplexing observation 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 {
>+struct drm_xe_observation_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;
>+	/** @observation_type: observation stream type, of enum @drm_xe_observation_type */
>+	__u64 observation_type;
>+	/** @observation_op: observation stream op, of enum @drm_xe_observation_op */
>+	__u64 observation_op;
> 	/** @param: Pointer to actual stream params */
> 	__u64 param;
> };
>
> /**
>- * enum drm_xe_perf_ioctls - Perf fd ioctl's
>+ * enum drm_xe_observation_ioctls - Observation stream fd ioctl's
>  *
>- * Information exchanged between userspace and kernel for perf fd ioctl's
>- * is stream type specific
>+ * Information exchanged between userspace and kernel for observation 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),
>+enum drm_xe_observation_ioctls {
>+	/** @DRM_XE_OBSERVATION_IOCTL_ENABLE: Enable data capture for an observation stream */
>+	DRM_XE_OBSERVATION_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_OBSERVATION_IOCTL_DISABLE: Disable data capture for a observation stream */
>+	DRM_XE_OBSERVATION_IOCTL_DISABLE = _IO('i', 0x1),
>
>-	/** @DRM_XE_PERF_IOCTL_CONFIG: Change stream configuration */
>-	DRM_XE_PERF_IOCTL_CONFIG = _IO('i', 0x2),
>+	/** @DRM_XE_OBSERVATION_IOCTL_CONFIG: Change observation stream configuration */
>+	DRM_XE_OBSERVATION_IOCTL_CONFIG = _IO('i', 0x2),
>
>-	/** @DRM_XE_PERF_IOCTL_STATUS: Return stream status */
>-	DRM_XE_PERF_IOCTL_STATUS = _IO('i', 0x3),
>+	/** @DRM_XE_OBSERVATION_IOCTL_STATUS: Return observation stream status */
>+	DRM_XE_OBSERVATION_IOCTL_STATUS = _IO('i', 0x3),
>
>-	/** @DRM_XE_PERF_IOCTL_INFO: Return stream info */
>-	DRM_XE_PERF_IOCTL_INFO = _IO('i', 0x4),
>+	/** @DRM_XE_OBSERVATION_IOCTL_INFO: Return observation stream info */
>+	DRM_XE_OBSERVATION_IOCTL_INFO = _IO('i', 0x4),
> };
>
> /**
>@@ -1546,12 +1547,12 @@ enum drm_xe_oa_format_type {
>  * Stream params are specified as a chain of @drm_xe_ext_set_property
>  * struct's, with @property values from enum @drm_xe_oa_property_id and
>  * @drm_xe_user_extension base.name set to @DRM_XE_OA_EXTENSION_SET_PROPERTY.
>- * @param field in struct @drm_xe_perf_param points to the first
>+ * @param field in struct @drm_xe_observation_param points to the first
>  * @drm_xe_ext_set_property struct.
>  *
>- * Exactly the same mechanism is also used for stream reconfiguration using
>- * the @DRM_XE_PERF_IOCTL_CONFIG perf fd ioctl, though only a subset of
>- * properties below can be specified for stream reconfiguration.
>+ * Exactly the same mechanism is also used for stream reconfiguration using the
>+ * @DRM_XE_OBSERVATION_IOCTL_CONFIG observation stream fd ioctl, though only a
>+ * subset of properties below can be specified for stream reconfiguration.
>  */
> enum drm_xe_oa_property_id {
> #define DRM_XE_OA_EXTENSION_SET_PROPERTY	0
>@@ -1571,11 +1572,11 @@ enum drm_xe_oa_property_id {
>
> 	/**
> 	 * @DRM_XE_OA_PROPERTY_OA_METRIC_SET: OA metrics defining contents of OA
>-	 * reports, previously added via @DRM_XE_PERF_OP_ADD_CONFIG.
>+	 * reports, previously added via @DRM_XE_OBSERVATION_OP_ADD_CONFIG.
> 	 */
> 	DRM_XE_OA_PROPERTY_OA_METRIC_SET,
>
>-	/** @DRM_XE_OA_PROPERTY_OA_FORMAT: Perf counter report format */
>+	/** @DRM_XE_OA_PROPERTY_OA_FORMAT: OA counter report format */
> 	DRM_XE_OA_PROPERTY_OA_FORMAT,
> 	/*
> 	 * OA_FORMAT's are specified the same way as in PRM/Bspec 52198/60942,
>@@ -1596,13 +1597,13 @@ enum drm_xe_oa_property_id {
>
> 	/**
> 	 * @DRM_XE_OA_PROPERTY_OA_DISABLED: A value of 1 will open the OA
>-	 * stream in a DISABLED state (see @DRM_XE_PERF_IOCTL_ENABLE).
>+	 * stream in a DISABLED state (see @DRM_XE_OBSERVATION_IOCTL_ENABLE).
> 	 */
> 	DRM_XE_OA_PROPERTY_OA_DISABLED,
>
> 	/**
> 	 * @DRM_XE_OA_PROPERTY_EXEC_QUEUE_ID: Open the stream for a specific
>-	 * @exec_queue_id. Perf queries can be executed on this exec queue.
>+	 * @exec_queue_id. OA queries can be executed on this exec queue.
> 	 */
> 	DRM_XE_OA_PROPERTY_EXEC_QUEUE_ID,
>
>@@ -1622,7 +1623,7 @@ enum drm_xe_oa_property_id {
> /**
>  * struct drm_xe_oa_config - OA metric configuration
>  *
>- * Multiple OA configs can be added using @DRM_XE_PERF_OP_ADD_CONFIG. A
>+ * Multiple OA configs can be added using @DRM_XE_OBSERVATION_OP_ADD_CONFIG. A
>  * particular config can be specified when opening an OA stream using
>  * @DRM_XE_OA_PROPERTY_OA_METRIC_SET property.
>  */
>@@ -1645,8 +1646,9 @@ struct drm_xe_oa_config {
>
> /**
>  * struct drm_xe_oa_stream_status - OA stream status returned from
>- * @DRM_XE_PERF_IOCTL_STATUS perf fd ioctl. Userspace can call the ioctl to
>- * query stream status in response to EIO errno from perf fd read().
>+ * @DRM_XE_OBSERVATION_IOCTL_STATUS observation stream fd ioctl. Userspace can
>+ * call the ioctl to query stream status in response to EIO errno from
>+ * observation fd read().
>  */
> struct drm_xe_oa_stream_status {
> 	/** @extensions: Pointer to the first extension struct, if any */
>@@ -1665,7 +1667,7 @@ struct drm_xe_oa_stream_status {
>
> /**
>  * struct drm_xe_oa_stream_info - OA stream info returned from
>- * @DRM_XE_PERF_IOCTL_INFO perf fd ioctl
>+ * @DRM_XE_OBSERVATION_IOCTL_INFO observation stream fd ioctl
>  */
> struct drm_xe_oa_stream_info {
> 	/** @extensions: Pointer to the first extension struct, if any */
>-- 
>2.41.0
>


More information about the Intel-xe mailing list