All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jani Nikula <jani.nikula@linux.intel.com>
To: "Christian König" <christian.koenig@amd.com>,
	"Sunil Khatri" <sunil.khatri@amd.com>,
	dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org
Cc: Alex Deucher <alexander.deucher@amd.com>,
	Tvrtko Ursulin <tvrtko.ursulin@igalia.com>,
	Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Subject: Re: [PATCH v6 1/5] drm: add macro drm_file_err to print process info
Date: Thu, 17 Apr 2025 14:30:15 +0300	[thread overview]
Message-ID: <87tt6nnhyw.fsf@intel.com> (raw)
In-Reply-To: <2ec09b8a-25f3-484c-b81c-f6478d9743cd@amd.com>

On Thu, 17 Apr 2025, Christian König <christian.koenig@amd.com> wrote:
> Am 17.04.25 um 13:07 schrieb Jani Nikula:
>> On Thu, 17 Apr 2025, Christian König <christian.koenig@amd.com> wrote:
>>> Am 17.04.25 um 11:35 schrieb Jani Nikula:
>>>> On Thu, 17 Apr 2025, Sunil Khatri <sunil.khatri@amd.com> wrote:
>>>>> Add a drm helper macro which append the process information for
>>>>> the drm_file over drm_err.
>>>>>
>>>>> v5: change to macro from function (Christian Koenig)
>>>>>     add helper functions for lock/unlock (Christian Koenig)
>>>>>
>>>>> v6: remove __maybe_unused and make function inline (Jani Nikula)
>>>>>     remove drm_print.h
>>>> I guess I gave all kinds of comments, but in the end my conclusion was:
>>>> why does *any* of this have to be static inline or macros? Make
>>>> drm_file_err() a regular function and hide the implementation inside
>>>> drm_file.c. That's the cleanest approach IMO.
>>> That won't work. The macro is necessary to concatenate the format strings.
>> I think you can handle them using struct va_format and %pV.
>
> Oh, really good point! I wasn't aware that this functionality exists.
>
> Going to discuss that with Sunil internally.

Please see the completely untested patch below for a starting point.

BR,
Jani.



From 55968ab339467c5b6e12ceb157ecbaf62eaa6082 Mon Sep 17 00:00:00 2001
From: Sunil Khatri <sunil.khatri@amd.com>
Date: Thu, 17 Apr 2025 14:43:51 +0530
Subject: [PATCH] drm: add macro drm_file_err to print process info
Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo
Cc: Jani Nikula <jani.nikula@intel.com>

Add a drm helper macro which append the process information for
the drm_file over drm_err.

v5: change to macro from function (Christian Koenig)
    add helper functions for lock/unlock (Christian Koenig)

v6: remove __maybe_unused and make function inline (Jani Nikula)
    remove drm_print.h

Signed-off-by: Sunil Khatri <sunil.khatri@amd.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/drm_file.c | 45 ++++++++++++++++++++++++++++++++++++++
 include/drm/drm_file.h     |  3 +++
 2 files changed, 48 insertions(+)

diff --git a/drivers/gpu/drm/drm_file.c b/drivers/gpu/drm/drm_file.c
index c299cd94d3f7..dea954f57890 100644
--- a/drivers/gpu/drm/drm_file.c
+++ b/drivers/gpu/drm/drm_file.c
@@ -1025,3 +1025,48 @@ struct file *mock_drm_getfile(struct drm_minor *minor, unsigned int flags)
 	return file;
 }
 EXPORT_SYMBOL_FOR_TESTS_ONLY(mock_drm_getfile);
+
+static struct task_struct *drm_task_lock(struct drm_file *file_priv)
+{
+	struct task_struct *task;
+	struct pid *pid;
+
+	mutex_lock(&file_priv->client_name_lock);
+	rcu_read_lock();
+	pid = rcu_dereference(file_priv->pid);
+	task = pid_task(pid, PIDTYPE_TGID);
+
+	return task;
+}
+
+static void drm_task_unlock(struct drm_file *file_priv)
+{
+	rcu_read_unlock();
+	mutex_unlock(&file_priv->client_name_lock);
+}
+/**
+ * drm_file_err - Fill info string with process name and pid
+ * @file_priv: context of interest for process name and pid
+ * @format: printf() like format string
+ *
+ * This update the user provided buffer with process
+ * name and pid information for @file_priv
+ */
+void drm_file_err(struct drm_file *file_priv, const char *format, ...)
+{
+	struct drm_device *dev = file_priv->minor->dev;
+	struct task_struct *task;
+	struct va_format vaf;
+	va_list args;
+
+	va_start(args, format);
+	vaf.fmt = format;
+	vaf.va = &args;
+
+	task = drm_task_lock(file_priv);
+	drm_err(dev, "comm: %s pid: %d client: %s %pV",
+		task ? task->comm : "", task ? task->pid : 0,
+		file_priv->client_name ?: "Unset", &vaf);
+	drm_task_unlock(file_priv);
+}
+EXPORT_SYMBOL(drm_file_err);
diff --git a/include/drm/drm_file.h b/include/drm/drm_file.h
index 94d365b22505..ceb08a67f0b7 100644
--- a/include/drm/drm_file.h
+++ b/include/drm/drm_file.h
@@ -446,6 +446,9 @@ static inline bool drm_is_accel_client(const struct drm_file *file_priv)
 	return file_priv->minor->type == DRM_MINOR_ACCEL;
 }
 
+__printf(2, 3)
+void drm_file_err(struct drm_file *file_priv, const char *format, ...);
+
 void drm_file_update_pid(struct drm_file *);
 
 struct drm_minor *drm_minor_acquire(struct xarray *minors_xa, unsigned int minor_id);
-- 
2.39.5




-- 
Jani Nikula, Intel

  reply	other threads:[~2025-04-17 11:30 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-04-17  9:13 [PATCH v6 1/5] drm: add macro drm_file_err to print process info Sunil Khatri
2025-04-17  9:13 ` [PATCH v6 2/5] drm/amdgpu: add drm_file reference in userq_mgr Sunil Khatri
2025-04-17  9:13 ` [PATCH v6 3/5] drm/amdgpu: use drm_file_err to add process info Sunil Khatri
2025-04-17  9:13 ` [PATCH v6 4/5] drm/amdgpu: change DRM_ERROR to drm_file_err in amdgpu_userqueue.c Sunil Khatri
2025-04-17  9:13 ` [PATCH v6 5/5] drm/amdgpu: change DRM_DBG_DRIVER to drm_dbg_driver Sunil Khatri
2025-04-17  9:35 ` [PATCH v6 1/5] drm: add macro drm_file_err to print process info Jani Nikula
2025-04-17  9:57   ` Christian König
2025-04-17 11:07     ` Jani Nikula
2025-04-17 11:18       ` Christian König
2025-04-17 11:30         ` Jani Nikula [this message]
2025-04-17 11:38           ` Khatri, Sunil

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87tt6nnhyw.fsf@intel.com \
    --to=jani.nikula@linux.intel.com \
    --cc=alexander.deucher@amd.com \
    --cc=amd-gfx@lists.freedesktop.org \
    --cc=christian.koenig@amd.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=pierre-eric.pelloux-prayer@amd.com \
    --cc=sunil.khatri@amd.com \
    --cc=tvrtko.ursulin@igalia.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.