From: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
To: intel-xe@lists.freedesktop.org, dri-devel@lists.freedesktop.org
Cc: alexander.deucher@amd.com, joonas.lahtinen@linux.intel.com,
airlied@gmail.com, daniel@ffwll.ch
Subject: [Intel-xe] [RFC 2/5] drm/xe/RAS: Register a genl netlink family
Date: Fri, 26 May 2023 21:50:13 +0530 [thread overview]
Message-ID: <20230526162016.428357-3-aravind.iddamsetty@intel.com> (raw)
In-Reply-To: <20230526162016.428357-1-aravind.iddamsetty@intel.com>
Use the generic netlink(genl) subsystem to expose the RAS counters to
userspace. We define a family structure and operations and register to
genl subsystem and these callbacks will be invoked by genl subsystem when
userspace sends a registered command with a family identifier to genl
subsystem.
Signed-off-by: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
---
drivers/gpu/drm/xe/Makefile | 1 +
drivers/gpu/drm/xe/xe_device.c | 3 +
drivers/gpu/drm/xe/xe_device_types.h | 2 +
drivers/gpu/drm/xe/xe_module.c | 2 +
drivers/gpu/drm/xe/xe_netlink.c | 89 ++++++++++++++++++++++++++++
drivers/gpu/drm/xe/xe_netlink.h | 14 +++++
6 files changed, 111 insertions(+)
create mode 100644 drivers/gpu/drm/xe/xe_netlink.c
create mode 100644 drivers/gpu/drm/xe/xe_netlink.h
diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
index b84e191ba14f..2b42165bc824 100644
--- a/drivers/gpu/drm/xe/Makefile
+++ b/drivers/gpu/drm/xe/Makefile
@@ -67,6 +67,7 @@ xe-y += xe_bb.o \
xe_mmio.o \
xe_mocs.o \
xe_module.o \
+ xe_netlink.o \
xe_pat.o \
xe_pci.o \
xe_pcode.o \
diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index 323356a44e7f..aa12ef12d9dc 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -24,6 +24,7 @@
#include "xe_irq.h"
#include "xe_mmio.h"
#include "xe_module.h"
+#include "xe_netlink.h"
#include "xe_pcode.h"
#include "xe_pm.h"
#include "xe_query.h"
@@ -317,6 +318,8 @@ int xe_device_probe(struct xe_device *xe)
xe_display_register(xe);
+ xe_genl_register(xe);
+
xe_debugfs_register(xe);
err = drmm_add_action_or_reset(&xe->drm, xe_device_sanitize, xe);
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index 682ebdd1c09e..c9612a54c48f 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -10,6 +10,7 @@
#include <drm/drm_device.h>
#include <drm/drm_file.h>
+#include <drm/drm_netlink.h>
#include <drm/ttm/ttm_device.h>
#include "xe_gt_types.h"
@@ -347,6 +348,7 @@ struct xe_device {
u32 lvds_channel_mode;
} params;
#endif
+ struct genl_family xe_genl_family;
};
/**
diff --git a/drivers/gpu/drm/xe/xe_module.c b/drivers/gpu/drm/xe/xe_module.c
index 6860586ce7f8..1eb73eb9a9a5 100644
--- a/drivers/gpu/drm/xe/xe_module.c
+++ b/drivers/gpu/drm/xe/xe_module.c
@@ -11,6 +11,7 @@
#include "xe_drv.h"
#include "xe_hw_fence.h"
#include "xe_module.h"
+#include "xe_netlink.h"
#include "xe_pci.h"
#include "xe_sched_job.h"
@@ -67,6 +68,7 @@ static void __exit xe_exit(void)
{
int i;
+ xe_genl_cleanup();
xe_unregister_pci_driver();
for (i = ARRAY_SIZE(init_funcs) - 1; i >= 0; i--)
diff --git a/drivers/gpu/drm/xe/xe_netlink.c b/drivers/gpu/drm/xe/xe_netlink.c
new file mode 100644
index 000000000000..63ef238ebc27
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_netlink.c
@@ -0,0 +1,89 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2023 Intel Corporation
+ */
+
+#include <drm/drm_managed.h>
+
+#include "xe_device.h"
+
+DEFINE_XARRAY(xe_xarray);
+
+static int xe_genl_list_errors(struct sk_buff *msg, struct genl_info *info)
+{
+ return 0;
+}
+
+static int xe_genl_read_error(struct sk_buff *msg, struct genl_info *info)
+{
+ return 0;
+}
+
+/* operations definition */
+static const struct genl_ops xe_genl_ops[] = {
+ {
+ .cmd = DRM_CMD_QUERY,
+ .doit = xe_genl_list_errors,
+ .policy = drm_attr_policy_query,
+ },
+ {
+ .cmd = DRM_CMD_READ_ONE,
+ .doit = xe_genl_read_error,
+ .policy = drm_attr_policy_read_one,
+ },
+ {
+ .cmd = DRM_CMD_READ_ALL,
+ .doit = xe_genl_list_errors,
+ .policy = drm_attr_policy_query,
+ },
+};
+
+static void xe_genl_deregister(struct drm_device *dev, void *arg)
+{
+ struct xe_device *xe = arg;
+
+ xa_erase(&xe_xarray, xe->xe_genl_family.id);
+
+ drm_dbg_driver(&xe->drm, "unregistering genl family %s\n", xe->xe_genl_family.name);
+
+ genl_unregister_family(&xe->xe_genl_family);
+}
+
+static void xe_genl_family_init(struct xe_device *xe)
+{
+ /* Use drm primary node name eg: card0 to name the genl family */
+ snprintf(xe->xe_genl_family.name, sizeof(xe->xe_genl_family.name), "%s", xe->drm.primary->kdev->kobj.name);
+ xe->xe_genl_family.version = DRM_GENL_VERSION;
+ xe->xe_genl_family.parallel_ops = true;
+ xe->xe_genl_family.ops = xe_genl_ops;
+ xe->xe_genl_family.n_ops = ARRAY_SIZE(xe_genl_ops);
+ xe->xe_genl_family.maxattr = DRM_ATTR_MAX;
+ xe->xe_genl_family.module = THIS_MODULE;
+}
+
+int xe_genl_register(struct xe_device *xe)
+{
+ int ret;
+
+ xe_genl_family_init(xe);
+
+ ret = genl_register_family(&xe->xe_genl_family);
+ if (ret < 0) {
+ drm_warn(&xe->drm, "xe genl family registration failed\n");
+ return ret;
+ }
+
+ drm_dbg_driver(&xe->drm, "genl family id %d and name %s\n", xe->xe_genl_family.id, xe->xe_genl_family.name);
+
+ xa_store(&xe_xarray, xe->xe_genl_family.id, xe, GFP_KERNEL);
+
+ ret = drmm_add_action_or_reset(&xe->drm, xe_genl_deregister, xe);
+
+ return ret;
+}
+
+void xe_genl_cleanup(void)
+{
+ /* destroy xarray */
+ xa_destroy(&xe_xarray);
+}
diff --git a/drivers/gpu/drm/xe/xe_netlink.h b/drivers/gpu/drm/xe/xe_netlink.h
new file mode 100644
index 000000000000..3bbddb620539
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_netlink.h
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2021 Intel Corporation
+ */
+
+#ifndef _XE_GENL_H_
+#define _XE_GENL_H_
+
+#include "xe_device.h"
+
+int xe_genl_register(struct xe_device *xe);
+void xe_genl_cleanup(void);
+
+#endif
--
2.25.1
WARNING: multiple messages have this Message-ID (diff)
From: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
To: intel-xe@lists.freedesktop.org, dri-devel@lists.freedesktop.org
Cc: alexander.deucher@amd.com, ogabbay@kernel.org
Subject: [RFC 2/5] drm/xe/RAS: Register a genl netlink family
Date: Fri, 26 May 2023 21:50:13 +0530 [thread overview]
Message-ID: <20230526162016.428357-3-aravind.iddamsetty@intel.com> (raw)
In-Reply-To: <20230526162016.428357-1-aravind.iddamsetty@intel.com>
Use the generic netlink(genl) subsystem to expose the RAS counters to
userspace. We define a family structure and operations and register to
genl subsystem and these callbacks will be invoked by genl subsystem when
userspace sends a registered command with a family identifier to genl
subsystem.
Signed-off-by: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
---
drivers/gpu/drm/xe/Makefile | 1 +
drivers/gpu/drm/xe/xe_device.c | 3 +
drivers/gpu/drm/xe/xe_device_types.h | 2 +
drivers/gpu/drm/xe/xe_module.c | 2 +
drivers/gpu/drm/xe/xe_netlink.c | 89 ++++++++++++++++++++++++++++
drivers/gpu/drm/xe/xe_netlink.h | 14 +++++
6 files changed, 111 insertions(+)
create mode 100644 drivers/gpu/drm/xe/xe_netlink.c
create mode 100644 drivers/gpu/drm/xe/xe_netlink.h
diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
index b84e191ba14f..2b42165bc824 100644
--- a/drivers/gpu/drm/xe/Makefile
+++ b/drivers/gpu/drm/xe/Makefile
@@ -67,6 +67,7 @@ xe-y += xe_bb.o \
xe_mmio.o \
xe_mocs.o \
xe_module.o \
+ xe_netlink.o \
xe_pat.o \
xe_pci.o \
xe_pcode.o \
diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index 323356a44e7f..aa12ef12d9dc 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -24,6 +24,7 @@
#include "xe_irq.h"
#include "xe_mmio.h"
#include "xe_module.h"
+#include "xe_netlink.h"
#include "xe_pcode.h"
#include "xe_pm.h"
#include "xe_query.h"
@@ -317,6 +318,8 @@ int xe_device_probe(struct xe_device *xe)
xe_display_register(xe);
+ xe_genl_register(xe);
+
xe_debugfs_register(xe);
err = drmm_add_action_or_reset(&xe->drm, xe_device_sanitize, xe);
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index 682ebdd1c09e..c9612a54c48f 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -10,6 +10,7 @@
#include <drm/drm_device.h>
#include <drm/drm_file.h>
+#include <drm/drm_netlink.h>
#include <drm/ttm/ttm_device.h>
#include "xe_gt_types.h"
@@ -347,6 +348,7 @@ struct xe_device {
u32 lvds_channel_mode;
} params;
#endif
+ struct genl_family xe_genl_family;
};
/**
diff --git a/drivers/gpu/drm/xe/xe_module.c b/drivers/gpu/drm/xe/xe_module.c
index 6860586ce7f8..1eb73eb9a9a5 100644
--- a/drivers/gpu/drm/xe/xe_module.c
+++ b/drivers/gpu/drm/xe/xe_module.c
@@ -11,6 +11,7 @@
#include "xe_drv.h"
#include "xe_hw_fence.h"
#include "xe_module.h"
+#include "xe_netlink.h"
#include "xe_pci.h"
#include "xe_sched_job.h"
@@ -67,6 +68,7 @@ static void __exit xe_exit(void)
{
int i;
+ xe_genl_cleanup();
xe_unregister_pci_driver();
for (i = ARRAY_SIZE(init_funcs) - 1; i >= 0; i--)
diff --git a/drivers/gpu/drm/xe/xe_netlink.c b/drivers/gpu/drm/xe/xe_netlink.c
new file mode 100644
index 000000000000..63ef238ebc27
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_netlink.c
@@ -0,0 +1,89 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2023 Intel Corporation
+ */
+
+#include <drm/drm_managed.h>
+
+#include "xe_device.h"
+
+DEFINE_XARRAY(xe_xarray);
+
+static int xe_genl_list_errors(struct sk_buff *msg, struct genl_info *info)
+{
+ return 0;
+}
+
+static int xe_genl_read_error(struct sk_buff *msg, struct genl_info *info)
+{
+ return 0;
+}
+
+/* operations definition */
+static const struct genl_ops xe_genl_ops[] = {
+ {
+ .cmd = DRM_CMD_QUERY,
+ .doit = xe_genl_list_errors,
+ .policy = drm_attr_policy_query,
+ },
+ {
+ .cmd = DRM_CMD_READ_ONE,
+ .doit = xe_genl_read_error,
+ .policy = drm_attr_policy_read_one,
+ },
+ {
+ .cmd = DRM_CMD_READ_ALL,
+ .doit = xe_genl_list_errors,
+ .policy = drm_attr_policy_query,
+ },
+};
+
+static void xe_genl_deregister(struct drm_device *dev, void *arg)
+{
+ struct xe_device *xe = arg;
+
+ xa_erase(&xe_xarray, xe->xe_genl_family.id);
+
+ drm_dbg_driver(&xe->drm, "unregistering genl family %s\n", xe->xe_genl_family.name);
+
+ genl_unregister_family(&xe->xe_genl_family);
+}
+
+static void xe_genl_family_init(struct xe_device *xe)
+{
+ /* Use drm primary node name eg: card0 to name the genl family */
+ snprintf(xe->xe_genl_family.name, sizeof(xe->xe_genl_family.name), "%s", xe->drm.primary->kdev->kobj.name);
+ xe->xe_genl_family.version = DRM_GENL_VERSION;
+ xe->xe_genl_family.parallel_ops = true;
+ xe->xe_genl_family.ops = xe_genl_ops;
+ xe->xe_genl_family.n_ops = ARRAY_SIZE(xe_genl_ops);
+ xe->xe_genl_family.maxattr = DRM_ATTR_MAX;
+ xe->xe_genl_family.module = THIS_MODULE;
+}
+
+int xe_genl_register(struct xe_device *xe)
+{
+ int ret;
+
+ xe_genl_family_init(xe);
+
+ ret = genl_register_family(&xe->xe_genl_family);
+ if (ret < 0) {
+ drm_warn(&xe->drm, "xe genl family registration failed\n");
+ return ret;
+ }
+
+ drm_dbg_driver(&xe->drm, "genl family id %d and name %s\n", xe->xe_genl_family.id, xe->xe_genl_family.name);
+
+ xa_store(&xe_xarray, xe->xe_genl_family.id, xe, GFP_KERNEL);
+
+ ret = drmm_add_action_or_reset(&xe->drm, xe_genl_deregister, xe);
+
+ return ret;
+}
+
+void xe_genl_cleanup(void)
+{
+ /* destroy xarray */
+ xa_destroy(&xe_xarray);
+}
diff --git a/drivers/gpu/drm/xe/xe_netlink.h b/drivers/gpu/drm/xe/xe_netlink.h
new file mode 100644
index 000000000000..3bbddb620539
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_netlink.h
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2021 Intel Corporation
+ */
+
+#ifndef _XE_GENL_H_
+#define _XE_GENL_H_
+
+#include "xe_device.h"
+
+int xe_genl_register(struct xe_device *xe);
+void xe_genl_cleanup(void);
+
+#endif
--
2.25.1
next prev parent reply other threads:[~2023-05-26 16:21 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-26 16:20 [Intel-xe] [RFC 0/5] Proposal to use netlink for RAS and Telemetry across drm subsystem Aravind Iddamsetty
2023-05-26 16:20 ` Aravind Iddamsetty
2023-05-26 16:20 ` [Intel-xe] [RFC 1/5] drm/netlink: Add netlink infrastructure Aravind Iddamsetty
2023-05-26 16:20 ` Aravind Iddamsetty
2023-06-04 17:07 ` [Intel-xe] " Tomer Tayar
2023-06-04 17:07 ` Tomer Tayar
2023-06-05 17:18 ` Iddamsetty, Aravind
2023-06-05 17:18 ` Iddamsetty, Aravind
2023-06-06 14:04 ` Tomer Tayar
2023-06-06 14:04 ` Tomer Tayar
2023-06-21 6:40 ` Iddamsetty, Aravind
2023-06-21 6:40 ` Iddamsetty, Aravind
2023-05-26 16:20 ` Aravind Iddamsetty [this message]
2023-05-26 16:20 ` [RFC 2/5] drm/xe/RAS: Register a genl netlink family Aravind Iddamsetty
2023-06-04 17:09 ` [Intel-xe] " Tomer Tayar
2023-06-04 17:09 ` Tomer Tayar
2023-06-05 17:21 ` Iddamsetty, Aravind
2023-06-05 17:21 ` Iddamsetty, Aravind
2023-05-26 16:20 ` [Intel-xe] [RFC 3/5] drm/xe/RAS: Expose the error counters Aravind Iddamsetty
2023-05-26 16:20 ` Aravind Iddamsetty
2023-05-26 16:20 ` [Intel-xe] [RFC 4/5] drm/netlink: define multicast groups Aravind Iddamsetty
2023-05-26 16:20 ` Aravind Iddamsetty
2023-05-26 16:20 ` [Intel-xe] [RFC 5/5] drm/xe/RAS: send multicast event on occurrence of an error Aravind Iddamsetty
2023-05-26 16:20 ` Aravind Iddamsetty
2023-05-26 16:54 ` [Intel-xe] ✗ CI.Patch_applied: failure for Proposal to use netlink for RAS and Telemetry across drm subsystem Patchwork
2023-06-04 17:07 ` [Intel-xe] [RFC 0/5] " Tomer Tayar
2023-06-04 17:07 ` Tomer Tayar
2023-06-05 17:17 ` Iddamsetty, Aravind
2023-06-05 17:17 ` Iddamsetty, Aravind
2023-06-05 16:47 ` Alex Deucher
2023-06-05 16:47 ` Alex Deucher
2023-06-06 11:56 ` [Intel-xe] " Iddamsetty, Aravind
2023-06-06 11:56 ` Iddamsetty, Aravind
2023-06-21 17:24 ` [Intel-xe] " Sebastian Wick
2023-06-21 17:24 ` Sebastian Wick
2023-07-17 12:02 ` [Intel-xe] " Oded Gabbay
2023-07-17 12:02 ` Oded Gabbay
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=20230526162016.428357-3-aravind.iddamsetty@intel.com \
--to=aravind.iddamsetty@intel.com \
--cc=airlied@gmail.com \
--cc=alexander.deucher@amd.com \
--cc=daniel@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=joonas.lahtinen@linux.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.