On Wed, Jul 30, 2025 at 12:19:55PM +0530, Aravind Iddamsetty wrote: > 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. > > Reviewed-by: Michael J. Ruhl <michael.j.r...@intel.com> > Signed-off-by: Aravind Iddamsetty <aravind.iddamse...@linux.intel.com> > --- > 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 da4bfde32a22..a7c0a4401ca9 100644 > --- a/drivers/gpu/drm/drm_netlink.c > +++ b/drivers/gpu/drm/drm_netlink.c > @@ -15,6 +15,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, }, > +};
this was the thing I thought for that 'monitor' but well, that can be ignored and we can indeed leave this per error component. but I also don't like it to be forced. It should be a driver definition and driver adoption. > + > /** > * drm_genl_reply - response to a request > * @msg: socket buffer > @@ -156,6 +161,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 4a746222337a..9e48147d0d36 100644 > --- a/include/drm/drm_netlink.h > +++ b/include/drm/drm_netlink.h > @@ -12,6 +12,11 @@ struct drm_device; > struct genl_info; > struct sk_buff; > > +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 58afb6e8d84a..c978efaab124 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" { > @@ -50,6 +52,8 @@ enum drm_genl_error_cmds { > DRM_RAS_CMD_READ_BLOCK, > /** @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 >