[Intel-xe] [PATCH V7 1/6] drm/xe: Add sysfs entries for engines under its GT

Upadhyay, Tejas tejas.upadhyay at intel.com
Wed Jul 26 09:24:18 UTC 2023



> -----Original Message-----
> From: Vishwanathapura, Niranjana <niranjana.vishwanathapura at intel.com>
> Sent: Wednesday, July 26, 2023 11:54 AM
> To: Upadhyay, Tejas <tejas.upadhyay at intel.com>
> Cc: intel-xe at lists.freedesktop.org; Brost, Matthew
> <matthew.brost at intel.com>
> Subject: Re: [PATCH V7 1/6] drm/xe: Add sysfs entries for engines under its
> GT
> 
> On Tue, Jul 25, 2023 at 05:19:58PM +0530, Tejas Upadhyay wrote:
> >Add engines sysfs directory under its GT and create sub directory for
> >all engine class (note its not per instance) present on GT.
> >
> >For example,
> >DUT# cat /sys/class/drm/cardX/device/tileN/gtN/engines/
> >bcs/ ccs/
> >
> >V4 :
> >   - Rebase to resolve conflicts - CI
> >V3 :
> >   - Move code in its own file
> >   - Rename API name
> >V2 :
> >   - Correct class mask logic - Himal
> >   - Remove extra parenthesis
> >
> >Signed-off-by: Tejas Upadhyay <tejas.upadhyay at intel.com>
> >---
> > drivers/gpu/drm/xe/Makefile                |   1 +
> > drivers/gpu/drm/xe/xe_engine_class_sysfs.c | 111
> +++++++++++++++++++++
> >drivers/gpu/drm/xe/xe_engine_class_sysfs.h |  13 +++
> > drivers/gpu/drm/xe/xe_gt.c                 |   7 ++
> > 4 files changed, 132 insertions(+)
> > create mode 100644 drivers/gpu/drm/xe/xe_engine_class_sysfs.c
> > create mode 100644 drivers/gpu/drm/xe/xe_engine_class_sysfs.h
> >
> >diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
> >index 4ea9e3150c20..7ced39ee52f8 100644
> >--- a/drivers/gpu/drm/xe/Makefile
> >+++ b/drivers/gpu/drm/xe/Makefile
> >@@ -52,6 +52,7 @@ xe-y += xe_bb.o \
> > 	xe_device_sysfs.o \
> > 	xe_dma_buf.o \
> > 	xe_engine.o \
> >+	xe_engine_class_sysfs.o \
> > 	xe_exec.o \
> > 	xe_execlist.o \
> > 	xe_force_wake.o \
> >diff --git a/drivers/gpu/drm/xe/xe_engine_class_sysfs.c
> >b/drivers/gpu/drm/xe/xe_engine_class_sysfs.c
> >new file mode 100644
> >index 000000000000..9959b0362d71
> >--- /dev/null
> >+++ b/drivers/gpu/drm/xe/xe_engine_class_sysfs.c
> >@@ -0,0 +1,111 @@
> >+// SPDX-License-Identifier: MIT
> >+/*
> >+ * Copyright (c) 2023 Intel Corporation
> >+ */
> >+
> >+#include <drm/drm_managed.h>
> >+#include <linux/kobject.h>
> >+#include <linux/sysfs.h>
> >+
> >+#include "xe_engine_class_sysfs.h"
> >+
> >+static void kobj_xe_engine_release(struct kobject *kobj) {
> >+	kfree(kobj);
> >+}
> >+
> >+static const struct kobj_type kobj_xe_engine_type = {
> >+	.release = kobj_xe_engine_release,
> >+	.sysfs_ops = &kobj_sysfs_ops
> >+};
> >+
> >+static struct kobject *
> >+kobj_xe_engine(struct kobject *parent, char *name) {
> >+	struct kobject *kobj;
> >+
> >+	kobj = kzalloc(sizeof(*kobj), GFP_KERNEL);
> >+	if (!kobj)
> >+		return NULL;
> >+
> >+	kobject_init(kobj, &kobj_xe_engine_type);
> >+	if (kobject_add(kobj, parent, "%s", name)) {
> >+		kobject_put(kobj);
> >+		return NULL;
> >+	}
> >+
> >+	return kobj;
> >+}
> >+
> >+static void xe_engine_sysfs_kobj_release(struct kobject *kobj) {
> >+	kfree(kobj);
> >+}
> >+
> >+static const struct kobj_type xe_engine_sysfs_kobj_type = {
> >+	.release = xe_engine_sysfs_kobj_release,
> >+	.sysfs_ops = &kobj_sysfs_ops,
> >+};
> >+
> >+int xe_engine_class_sysfs_init(struct xe_gt *gt) {
> >+	struct xe_hw_engine *hwe;
> >+	enum xe_hw_engine_id id;
> >+	struct kobject *kobj;
> >+	u16 class_mask = 0;
> >+	int err = 0;
> >+
> >+	kobj = kzalloc(sizeof(*kobj), GFP_KERNEL);
> >+	if (!kobj)
> >+		return -ENOMEM;
> >+
> >+	kobject_init(kobj, &xe_engine_sysfs_kobj_type);
> >+
> >+	err = kobject_add(kobj, gt->sysfs, "engines");
> >+	if (err) {
> >+		kobject_put(kobj);
> >+		return err;
> >+	}
> >+
> >+	for_each_hw_engine(hwe, gt, id) {
> >+		char name[MAX_ENGINE_CLASS_NAME_LEN];
> >+		struct kobject *khwe;
> >+
> >+		if (hwe->class == XE_ENGINE_CLASS_OTHER ||
> >+		    hwe->class == XE_ENGINE_CLASS_MAX)
> >+			continue;
> >+
> >+		if ((class_mask >> hwe->class) & 1)
> >+			continue;
> >+
> >+		class_mask |= 1 << hwe->class;
> >+
> >+		switch (hwe->class) {
> >+		case XE_ENGINE_CLASS_RENDER:
> >+			strcpy(name, "rcs");
> >+			break;
> >+		case XE_ENGINE_CLASS_VIDEO_DECODE:
> >+			strcpy(name, "vcs");
> >+			break;
> >+		case XE_ENGINE_CLASS_VIDEO_ENHANCE:
> >+			strcpy(name, "vecs");
> >+			break;
> >+		case XE_ENGINE_CLASS_COPY:
> >+			strcpy(name, "bcs");
> >+			break;
> >+		case XE_ENGINE_CLASS_COMPUTE:
> >+			strcpy(name, "ccs");
> >+			break;
> >+		default:
> >+			kobject_put(kobj);
> >+			return -EINVAL;
> >+		}
> >+
> >+		khwe = kobj_xe_engine(kobj, name);
> >+		if (!khwe) {
> >+			kobject_put(kobj);
> >+			return -EINVAL;
> >+		}
> 
> NIT...having khwe here and replace it keclass in next patch seems like
> patches are not self contained. May be it is better to start with keclass in this
> patch itself?

I don't think it is good idea, engine_class_intf includes sched parameters which are part of default scheduler parameters, that is part of second patch. For this patch to introduce top level engine directories only kobject is enough.

Thanks,
Tejas

> 
> Niranjana
> 
> >+	}
> >+	return err;
> >+}
> >diff --git a/drivers/gpu/drm/xe/xe_engine_class_sysfs.h
> >b/drivers/gpu/drm/xe/xe_engine_class_sysfs.h
> >new file mode 100644
> >index 000000000000..f195dacc1ec6
> >--- /dev/null
> >+++ b/drivers/gpu/drm/xe/xe_engine_class_sysfs.h
> >@@ -0,0 +1,13 @@
> >+/* SPDX-License-Identifier: MIT */
> >+/*
> >+ * Copyright (c) 2023 Intel Corporation
> >+ */
> >+
> >+#ifndef _XE_ENGINE_CLASS_SYSFS_H_
> >+#define _XE_ENGINE_CLASS_SYSFS_H__
> >+
> >+#include "xe_gt.h"
> >+
> >+#define MAX_ENGINE_CLASS_NAME_LEN    16
> >+int xe_engine_class_sysfs_init(struct xe_gt *gt); #endif
> >diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c
> >index 3e32d38aeeea..a8176de9f536 100644
> >--- a/drivers/gpu/drm/xe/xe_gt.c
> >+++ b/drivers/gpu/drm/xe/xe_gt.c
> >@@ -14,6 +14,7 @@
> > #include "xe_bo.h"
> > #include "xe_device.h"
> > #include "xe_engine.h"
> >+#include "xe_engine_class_sysfs.h"
> > #include "xe_execlist.h"
> > #include "xe_force_wake.h"
> > #include "xe_ggtt.h"
> >@@ -322,6 +323,12 @@ static int gt_fw_domain_init(struct xe_gt *gt)
> > 	if (err)
> > 		goto err_force_wake;
> >
> >+	err = xe_engine_class_sysfs_init(gt);
> >+	if (err)
> >+		drm_warn(&gt_to_xe(gt)->drm,
> >+			 "failed to register engines sysfs directory, err: %d\n",
> >+			 err);
> >+
> > 	err = xe_force_wake_put(gt_to_fw(gt), XE_FW_GT);
> > 	XE_WARN_ON(err);
> > 	xe_device_mem_access_put(gt_to_xe(gt));
> >--
> >2.25.1
> >


More information about the Intel-xe mailing list