>-----Original Message----- >From: Aravind Iddamsetty <aravind.iddamse...@linux.intel.com> >Sent: Friday, October 20, 2023 11:59 AM >To: intel...@lists.freedesktop.org; dri-devel@lists.freedesktop.org; >alexander.deuc...@amd.com; airl...@gmail.com; dan...@ffwll.ch; >joonas.lahti...@linux.intel.com; ogab...@kernel.org; Tayar, Tomer (Habana) ><tta...@habana.ai>; hawking.zh...@amd.com; >harish.kasiviswanat...@amd.com; felix.kuehl...@amd.com; >luben.tui...@amd.com; Ruhl, Michael J <michael.j.r...@intel.com> >Subject: [RFC v2 5/5] drm/xe/RAS: send multicast event on occurrence of an >error > >Whenever a correctable or an uncorrectable error happens an event is sent >to the corresponding listeners of these groups. > >v2: Rebase
Hi Aravind, This looks reasonable to me. Reviewed-by: Michael J. Ruhl <michael.j.r...@intel.com> M >Signed-off-by: Aravind Iddamsetty <aravind.iddamse...@linux.intel.com> >--- > drivers/gpu/drm/xe/xe_hw_error.c | 33 >++++++++++++++++++++++++++++++++ > 1 file changed, 33 insertions(+) > >diff --git a/drivers/gpu/drm/xe/xe_hw_error.c >b/drivers/gpu/drm/xe/xe_hw_error.c >index bab6d4cf0b69..b0befb5e01cb 100644 >--- a/drivers/gpu/drm/xe/xe_hw_error.c >+++ b/drivers/gpu/drm/xe/xe_hw_error.c >@@ -786,6 +786,37 @@ xe_soc_hw_error_handler(struct xe_tile *tile, const >enum hardware_error hw_err) > (HARDWARE_ERROR_MAX << 1) + 1); > } > >+static void >+generate_netlink_event(struct xe_device *xe, const enum hardware_error >hw_err) >+{ >+ struct sk_buff *msg; >+ void *hdr; >+ >+ if (!xe->drm.drm_genl_family.module) >+ return; >+ >+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_ATOMIC); >+ if (!msg) { >+ drm_dbg_driver(&xe->drm, "couldn't allocate memory for error >multicast event\n"); >+ return; >+ } >+ >+ hdr = genlmsg_put(msg, 0, 0, &xe->drm.drm_genl_family, 0, >DRM_RAS_CMD_ERROR_EVENT); >+ if (!hdr) { >+ drm_dbg_driver(&xe->drm, "mutlicast msg buffer is small\n"); >+ nlmsg_free(msg); >+ return; >+ } >+ >+ genlmsg_end(msg, hdr); >+ >+ genlmsg_multicast(&xe->drm.drm_genl_family, msg, 0, >+ hw_err ? >+ DRM_GENL_MCAST_UNCORR_ERR >+ : DRM_GENL_MCAST_CORR_ERR, >+ GFP_ATOMIC); >+} >+ > static void > xe_hw_error_source_handler(struct xe_tile *tile, const enum hardware_error >hw_err) > { >@@ -849,6 +880,8 @@ xe_hw_error_source_handler(struct xe_tile *tile, const >enum hardware_error hw_er > } > > xe_mmio_write32(gt, DEV_ERR_STAT_REG(hw_err), errsrc); >+ >+ generate_netlink_event(tile_to_xe(tile), hw_err); > unlock: > spin_unlock_irqrestore(&tile_to_xe(tile)->irq.lock, flags); > } >-- >2.25.1