>-----Original Message-----
>From: Aravind Iddamsetty <[email protected]>
>Sent: Friday, October 20, 2023 11:59 AM
>To: [email protected]; [email protected];
>[email protected]; [email protected]; [email protected];
>[email protected]; [email protected]; Tayar, Tomer (Habana)
><[email protected]>; [email protected];
>[email protected]; [email protected];
>[email protected]; Ruhl, Michael J <[email protected]>
>Subject: [RFC 4/5] drm/netlink: Define multicast groups
>
>Netlink subsystem supports event notifications to userspace. we define
>two multicast groups for correctable and uncorrectable errors to which
>userspace can subscribe and be notified when any of those errors happen.
>The group names are local to the driver's genl netlink family.

Hi Aravind,

This looks reasonable to me.

Reviewed-by: Michael J. Ruhl <[email protected]>

M

>Signed-off-by: Aravind Iddamsetty <[email protected]>
>---
> drivers/gpu/drm/drm_netlink.c  | 7 +++++++
> include/drm/drm_netlink.h      | 5 +++++
> include/uapi/drm/drm_netlink.h | 4 ++++
> 3 files changed, 16 insertions(+)
>
>diff --git a/drivers/gpu/drm/drm_netlink.c b/drivers/gpu/drm/drm_netlink.c
>index 8add249c1da3..425a7355a573 100644
>--- a/drivers/gpu/drm/drm_netlink.c
>+++ b/drivers/gpu/drm/drm_netlink.c
>@@ -12,6 +12,11 @@
>
> DEFINE_XARRAY(drm_dev_xarray);
>
>+static const struct genl_multicast_group drm_event_mcgrps[] = {
>+      [DRM_GENL_MCAST_CORR_ERR] = { .name =
>DRM_GENL_MCAST_GROUP_NAME_CORR_ERR, },
>+      [DRM_GENL_MCAST_UNCORR_ERR] = { .name =
>DRM_GENL_MCAST_GROUP_NAME_UNCORR_ERR, },
>+};
>+
> /**
>  * drm_genl_reply - response to a request
>  * @msg: socket buffer
>@@ -133,6 +138,8 @@ static void drm_genl_family_init(struct drm_device
>*dev)
>       dev->drm_genl_family.ops = drm_genl_ops;
>       dev->drm_genl_family.n_ops = ARRAY_SIZE(drm_genl_ops);
>       dev->drm_genl_family.maxattr = DRM_ATTR_MAX;
>+      dev->drm_genl_family.mcgrps = drm_event_mcgrps;
>+      dev->drm_genl_family.n_mcgrps = ARRAY_SIZE(drm_event_mcgrps);
>       dev->drm_genl_family.module = dev->dev->driver->owner;
> }
>
>diff --git a/include/drm/drm_netlink.h b/include/drm/drm_netlink.h
>index 54527dae7847..758239643c17 100644
>--- a/include/drm/drm_netlink.h
>+++ b/include/drm/drm_netlink.h
>@@ -13,6 +13,11 @@
>
> struct drm_device;
>
>+enum mcgrps_events {
>+      DRM_GENL_MCAST_CORR_ERR,
>+      DRM_GENL_MCAST_UNCORR_ERR,
>+};
>+
> struct driver_genl_ops {
>       int                    (*doit)(struct drm_device *dev,
>                                      struct sk_buff *skb,
>diff --git a/include/uapi/drm/drm_netlink.h b/include/uapi/drm/drm_netlink.h
>index aab42147a20e..c7a0ce5b4624 100644
>--- a/include/uapi/drm/drm_netlink.h
>+++ b/include/uapi/drm/drm_netlink.h
>@@ -26,6 +26,8 @@
> #define _DRM_NETLINK_H_
>
> #define DRM_GENL_VERSION 1
>+#define DRM_GENL_MCAST_GROUP_NAME_CORR_ERR    "drm_corr_err"
>+#define DRM_GENL_MCAST_GROUP_NAME_UNCORR_ERR
>       "drm_uncorr_err"
>
> #if defined(__cplusplus)
> extern "C" {
>@@ -43,6 +45,8 @@ enum drm_genl_error_cmds {
>       DRM_RAS_CMD_READ_ONE,
>       /** @DRM_RAS_CMD_READ_ALL: Command to get counters of all
>errors */
>       DRM_RAS_CMD_READ_ALL,
>+      /** @DRM_RAS_CMD_ERROR_EVENT: Command sent as part of
>multicast event */
>+      DRM_RAS_CMD_ERROR_EVENT,
>
>       __DRM_CMD_MAX,
>       DRM_CMD_MAX = __DRM_CMD_MAX - 1,
>--
>2.25.1

Reply via email to