Add a drm helper function which get the process information for the drm_file and append the process information using the existing drm_err.
Signed-off-by: Sunil Khatri <sunil.kha...@amd.com> --- include/drm/drm_file.h | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/include/drm/drm_file.h b/include/drm/drm_file.h index 94d365b22505..e329299a2b2c 100644 --- a/include/drm/drm_file.h +++ b/include/drm/drm_file.h @@ -37,6 +37,7 @@ #include <uapi/drm/drm.h> #include <drm/drm_prime.h> +#include <drm/drm_print.h> struct dma_fence; struct drm_file; @@ -446,6 +447,45 @@ static inline bool drm_is_accel_client(const struct drm_file *file_priv) return file_priv->minor->type == DRM_MINOR_ACCEL; } +/** + * drm_file_err - Fill info string with process name and pid + * @file_priv: context of interest for process name and pid + * @fmt: prinf() like format string + * + * This update the user provided buffer with process + * name and pid information for @file_priv + */ +__printf(2, 3) +static inline void drm_file_err(struct drm_file *file_priv, const char *fmt, ...) +{ + struct task_struct *task; + struct pid *pid; + struct drm_device *dev = file_priv->minor->dev; + char new_fmt[256]; + char final_fmt[512]; + va_list args; + + mutex_lock(&file_priv->client_name_lock); + rcu_read_lock(); + pid = rcu_dereference(file_priv->pid); + task = pid_task(pid, PIDTYPE_TGID); + + if (drm_WARN_ON_ONCE(dev, !task)) + return; + + snprintf(new_fmt, sizeof(new_fmt), "proc:%s pid:%d client_name:%s %s", + task->comm, task->pid, file_priv->client_name ?: "Unset", fmt); + + va_start(args, fmt); + vsnprintf(final_fmt, sizeof(final_fmt), new_fmt, args); + + drm_err(dev, "%s", final_fmt); + va_end(args); + + rcu_read_unlock(); + mutex_unlock(&file_priv->client_name_lock); +} + void drm_file_update_pid(struct drm_file *); struct drm_minor *drm_minor_acquire(struct xarray *minors_xa, unsigned int minor_id); -- 2.34.1