Re: [PATCH v3 06/23] drm/xe/log: Add SIGID log helpers for location
"Mallesh, Koujalagi" <[email protected]> Mon, 3 Aug 2026 14:20:25 +0530
| Newsgroups | org.freedesktop.lists.intel-xe |
|---|---|
| Message-ID | <[email protected]> |
On 30-07-2026 08:51 pm, Michal Wajdeczko wrote: > We can determine the location of the SIGID error source based on the > type of the xe pointer being currently available. Add helper macros > that will accept any of xe_device, xe_tile or xe_gt pointers instead > of plain pci_dev to generate valid XE_LOG_LOCATION identifier and then > call low-level xe_log_emit(pdev) function. > > Signed-off-by: Michal Wajdeczko <[email protected]> LGTM, Reviewed-by: Mallesh Koujalagi <[email protected]> > Cc: Rodrigo Vivi <[email protected]> > --- > Cc: Aravind Iddamsetty <[email protected]> > Cc: Mallesh Koujalagi <[email protected]> > --- > drivers/gpu/drm/xe/xe_log.h | 36 ++++++++++++++++++++++++++++++++++++ > 1 file changed, 36 insertions(+) > > diff --git a/drivers/gpu/drm/xe/xe_log.h b/drivers/gpu/drm/xe/xe_log.h > index 73daf37d6463..510cedae6e14 100644 > --- a/drivers/gpu/drm/xe/xe_log.h > +++ b/drivers/gpu/drm/xe/xe_log.h > @@ -8,7 +8,9 @@ > > #include <linux/cper.h> > > +#include "abi/xe_log_abi.h" > #include "abi/xe_sigid_abi.h" > +#include "xe_any.h" > > struct pci_dev; > > @@ -33,4 +35,38 @@ void xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid, > xe_log_emit((pdev), CPER_SEV_INFORMATIONAL, (sig), (comp), (loc), \ > (data), (len), fmt, ##args) > > +#define xe_log_location_type(any) \ > + _Generic((any), \ > + struct xe_gt * : XE_LOG_LOCATION_TYPE_GT, \ > + const struct xe_gt * : XE_LOG_LOCATION_TYPE_GT, \ > + struct xe_tile * : XE_LOG_LOCATION_TYPE_TILE, \ > + const struct xe_tile * : XE_LOG_LOCATION_TYPE_TILE, \ > + struct xe_device * : XE_LOG_LOCATION_TYPE_DEVICE, \ > + const struct xe_device * : XE_LOG_LOCATION_TYPE_DEVICE, \ > + struct pci_dev * : XE_LOG_LOCATION_TYPE_DEVICE, \ > + struct device * : XE_LOG_LOCATION_TYPE_DEVICE) > + > +#define xe_log_location(any) \ > + PREP_XE_LOG_LOCATION(xe_log_location_type(any), xe_any_id(any)) > + > +/** > + * xe_log_from() - Emit a structured SIGID log entry using @any pointer as location. > + * @any: the &xe_device or &xe_tile or &xe_gt pointer this report relates to > + * @cper_sev: CPER severity (CPER_SEV_FATAL, CPER_SEV_RECOVERABLE, ...) > + * @sigid: signature identifier, see &enum xe_sigid > + * @component: component identifer > + * @data: pointer to the additional details, or ERR_PTR, or NULL if not applicable > + * @len: length of the @data in bytes, or 0 if not applicable > + * @fmt: printf-style format string > + * @args: arguments for the @fmt format string > + * > + * The location used to emit SIGID entry will be based on the @any pointer type. > + * See xe_log_emit() for more details. > + */ > +#define xe_log_from(any, cper_sev, sigid, component, data, len, fmt, args...) do { \ > + typeof(any) ___any = (any); \ > + xe_log_emit(xe_any_to_pdev(___any), (cper_sev), (sigid), (component), \ > + xe_log_location(___any), (data), (len), fmt, ##args); \ > +} while (0) > + > #endif