summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/msm/msm_gpu.c
diff options
context:
space:
mode:
authorRob Clark <robdclark@chromium.org>2022-03-17 09:51:40 -0700
committerRob Clark <robdclark@chromium.org>2022-04-21 15:01:09 -0700
commitd4726d7700688835f4784d3b94de6fff2cbe16c2 (patch)
tree6c9827730d3ae9d6544b3881a25ffca0edf8c9df /drivers/gpu/drm/msm/msm_gpu.c
parent39ba0c0d6cd13e9ae5fe0a75313efdbb3449d87a (diff)
downloadlinux-d4726d7700688835f4784d3b94de6fff2cbe16c2.tar.bz2
drm/msm: Add a way to override processes comm/cmdline
In the cause of using the GPU via virtgpu, the host side process is really a sort of proxy, and not terribly interesting from the PoV of crash/fault logging. Add a way to override these per process so that we can see the guest process's name. v2: Handle kmalloc failure, add comment to explain kstrdup returns NULL if passed NULL [Dan Carpenter] Signed-off-by: Rob Clark <robdclark@chromium.org> Link: https://lore.kernel.org/r/20220317165144.222101-4-robdclark@gmail.com Signed-off-by: Rob Clark <robdclark@chromium.org>
Diffstat (limited to 'drivers/gpu/drm/msm/msm_gpu.c')
-rw-r--r--drivers/gpu/drm/msm/msm_gpu.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/drivers/gpu/drm/msm/msm_gpu.c b/drivers/gpu/drm/msm/msm_gpu.c
index 7a88dd6568c0..f292b70c1e6d 100644
--- a/drivers/gpu/drm/msm/msm_gpu.c
+++ b/drivers/gpu/drm/msm/msm_gpu.c
@@ -353,14 +353,22 @@ static void retire_submits(struct msm_gpu *gpu);
static void get_comm_cmdline(struct msm_gem_submit *submit, char **comm, char **cmd)
{
+ struct msm_file_private *ctx = submit->queue->ctx;
struct task_struct *task;
+ /* Note that kstrdup will return NULL if argument is NULL: */
+ *comm = kstrdup(ctx->comm, GFP_KERNEL);
+ *cmd = kstrdup(ctx->cmdline, GFP_KERNEL);
+
task = get_pid_task(submit->pid, PIDTYPE_PID);
if (!task)
return;
- *comm = kstrdup(task->comm, GFP_KERNEL);
- *cmd = kstrdup_quotable_cmdline(task, GFP_KERNEL);
+ if (!*comm)
+ *comm = kstrdup(task->comm, GFP_KERNEL);
+
+ if (!*cmd)
+ *cmd = kstrdup_quotable_cmdline(task, GFP_KERNEL);
put_task_struct(task);
}