From nobody Mon Jun 22 21:17:30 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1C31DC433EF for ; Thu, 17 Mar 2022 00:29:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1353930AbiCQAa3 (ORCPT ); Wed, 16 Mar 2022 20:30:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38960 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1353085AbiCQAaZ (ORCPT ); Wed, 16 Mar 2022 20:30:25 -0400 Received: from mail-pl1-x631.google.com (mail-pl1-x631.google.com [IPv6:2607:f8b0:4864:20::631]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C03FE1CB1C; Wed, 16 Mar 2022 17:29:09 -0700 (PDT) Received: by mail-pl1-x631.google.com with SMTP id q11so3126975pln.11; Wed, 16 Mar 2022 17:29:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=vW5Zdse1i3pRk6JU03o69YBRQdnNrRsS1PGNiisfl5M=; b=Y+HYlj7Fx0m7n4FOWBBg1veZk4VCP5CBjgmxzIk7wQZLk55Fe4mwds3/DJkYQ6GHu4 jcQkWPLQFw9S5QPHA+1bB3a/lFbkUXgMU2U41M8rSCFjaBAcU7WhrvoJnFiWjZiI18Rj F/P4VuEKV+e2BqfZmK6BP1cKQleXvDzr7uVckbBnPpoyC5CQNeHU3L1V5cimAZhdaJ+G AWumgUfRpEO5f6joaOHEAKzNttNU9P8VVVzxayP2CpZ/JA/9pTm3VdwcoUKfsqHwdyXa n8IEf7QbArRd4gWVSpMISp6CVNwzJlNU0oY5llc8JeCGSEHKHZoET/9lSOble9PFqwB7 q4jQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=vW5Zdse1i3pRk6JU03o69YBRQdnNrRsS1PGNiisfl5M=; b=MlcJNvgMAXg+uPrvMeS+vS4yxhEp6EjuHJuS/ufWzMtaLNTGaUKo+flaW8DW78cLUS OBRdtN1gB3bixc1x8a/rpXaX98a18HWM5yg3QNST5LXjZTjY2UVir34wlbEt9+1pxxDc Y0SPcC5QbZ/K3E0lDMj1gkIyt1CFU4Q9dBmEW8vMMQACjphMIaYEdc6+D6RcRwIwpMeh xrt6CuZNoYYkVXH8cP/AFCv0TIuRPO5nC3mibE29VYTSriwu1KLDF7XtbaNk7sp/fDvi gAgl7DA8gKL2NjjKTQDJI8ljpqa6MQqY6q/AE+0okmIxVAki5FQJsBVeQhHgPZFTymvq e05g== X-Gm-Message-State: AOAM5323KlyCo4P85BcRbES+AXy4ZaaU2lupjz5Lv8REdSiiwgwd98AB QOWusRpPFzfrIiNsYb3tYl4= X-Google-Smtp-Source: ABdhPJyU1b6okhTFvq76TTO0crrILtMYBEA3bBgrFoxaGiqUSzOMMlyHdhzl+32t6hORIQZ04pajtg== X-Received: by 2002:a17:902:f54f:b0:152:7e6:c32d with SMTP id h15-20020a170902f54f00b0015207e6c32dmr2373188plf.125.1647476949217; Wed, 16 Mar 2022 17:29:09 -0700 (PDT) Received: from localhost ([2601:1c0:5200:a6:307:a401:7b76:c6e5]) by smtp.gmail.com with ESMTPSA id b1-20020a17090aa58100b001bcb7bad374sm7232549pjq.17.2022.03.16.17.29.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Mar 2022 17:29:08 -0700 (PDT) From: Rob Clark To: dri-devel@lists.freedesktop.org Cc: freedreno@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, Rob Clark , Rob Clark , Sean Paul , Abhinav Kumar , David Airlie , Daniel Vetter , Akhil P Oommen , Jonathan Marek , Jordan Crouse , =?UTF-8?q?Christian=20K=C3=B6nig?= , Dan Carpenter , Bjorn Andersson , Emma Anholt , Vladimir Lypak , linux-kernel@vger.kernel.org (open list) Subject: [PATCH 1/3] drm/msm: Add support for pointer params Date: Wed, 16 Mar 2022 17:29:43 -0700 Message-Id: <20220317002950.193449-2-robdclark@gmail.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220317002950.193449-1-robdclark@gmail.com> References: <20220317002950.193449-1-robdclark@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Rob Clark The 64b value field is already suffient to hold a pointer instead of immediate, but we also need a length field. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/adreno/adreno_gpu.c | 12 ++++++++++-- drivers/gpu/drm/msm/adreno/adreno_gpu.h | 4 ++-- drivers/gpu/drm/msm/msm_drv.c | 8 ++++---- drivers/gpu/drm/msm/msm_gpu.h | 4 ++-- drivers/gpu/drm/msm/msm_rd.c | 5 +++-- include/uapi/drm/msm_drm.h | 2 ++ 6 files changed, 23 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.c b/drivers/gpu/drm/msm/= adreno/adreno_gpu.c index 9efc84929be0..3d307b34854d 100644 --- a/drivers/gpu/drm/msm/adreno/adreno_gpu.c +++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.c @@ -229,10 +229,14 @@ adreno_iommu_create_address_space(struct msm_gpu *gpu, } =20 int adreno_get_param(struct msm_gpu *gpu, struct msm_file_private *ctx, - uint32_t param, uint64_t *value) + uint32_t param, uint64_t *value, uint32_t *len) { struct adreno_gpu *adreno_gpu =3D to_adreno_gpu(gpu); =20 + /* No pointer params yet */ + if (*len !=3D 0) + return -EINVAL; + switch (param) { case MSM_PARAM_GPU_ID: *value =3D adreno_gpu->info->revn; @@ -284,8 +288,12 @@ int adreno_get_param(struct msm_gpu *gpu, struct msm_f= ile_private *ctx, } =20 int adreno_set_param(struct msm_gpu *gpu, struct msm_file_private *ctx, - uint32_t param, uint64_t value) + uint32_t param, uint64_t value, uint32_t len) { + /* No pointer params yet */ + if (len !=3D 0) + return -EINVAL; + switch (param) { case MSM_PARAM_SYSPROF: if (!capable(CAP_SYS_ADMIN)) diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.h b/drivers/gpu/drm/msm/= adreno/adreno_gpu.h index 0490c5fbb780..ab3b5ef80332 100644 --- a/drivers/gpu/drm/msm/adreno/adreno_gpu.h +++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.h @@ -281,9 +281,9 @@ static inline int adreno_is_a650_family(struct adreno_g= pu *gpu) } =20 int adreno_get_param(struct msm_gpu *gpu, struct msm_file_private *ctx, - uint32_t param, uint64_t *value); + uint32_t param, uint64_t *value, uint32_t *len); int adreno_set_param(struct msm_gpu *gpu, struct msm_file_private *ctx, - uint32_t param, uint64_t value); + uint32_t param, uint64_t value, uint32_t len); const struct firmware *adreno_request_fw(struct adreno_gpu *adreno_gpu, const char *fwname); struct drm_gem_object *adreno_fw_create_bo(struct msm_gpu *gpu, diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c index 780f9748aaaf..a5eed5738ac8 100644 --- a/drivers/gpu/drm/msm/msm_drv.c +++ b/drivers/gpu/drm/msm/msm_drv.c @@ -610,7 +610,7 @@ static int msm_ioctl_get_param(struct drm_device *dev, = void *data, /* for now, we just have 3d pipe.. eventually this would need to * be more clever to dispatch to appropriate gpu module: */ - if (args->pipe !=3D MSM_PIPE_3D0) + if ((args->pipe !=3D MSM_PIPE_3D0) || (args->pad !=3D 0)) return -EINVAL; =20 gpu =3D priv->gpu; @@ -619,7 +619,7 @@ static int msm_ioctl_get_param(struct drm_device *dev, = void *data, return -ENXIO; =20 return gpu->funcs->get_param(gpu, file->driver_priv, - args->param, &args->value); + args->param, &args->value, &args->len); } =20 static int msm_ioctl_set_param(struct drm_device *dev, void *data, @@ -629,7 +629,7 @@ static int msm_ioctl_set_param(struct drm_device *dev, = void *data, struct drm_msm_param *args =3D data; struct msm_gpu *gpu; =20 - if (args->pipe !=3D MSM_PIPE_3D0) + if ((args->pipe !=3D MSM_PIPE_3D0) || (args->pad !=3D 0)) return -EINVAL; =20 gpu =3D priv->gpu; @@ -638,7 +638,7 @@ static int msm_ioctl_set_param(struct drm_device *dev, = void *data, return -ENXIO; =20 return gpu->funcs->set_param(gpu, file->driver_priv, - args->param, args->value); + args->param, args->value, args->len); } =20 static int msm_ioctl_gem_new(struct drm_device *dev, void *data, diff --git a/drivers/gpu/drm/msm/msm_gpu.h b/drivers/gpu/drm/msm/msm_gpu.h index a84140055920..c28c2ad9f52e 100644 --- a/drivers/gpu/drm/msm/msm_gpu.h +++ b/drivers/gpu/drm/msm/msm_gpu.h @@ -44,9 +44,9 @@ struct msm_gpu_config { */ struct msm_gpu_funcs { int (*get_param)(struct msm_gpu *gpu, struct msm_file_private *ctx, - uint32_t param, uint64_t *value); + uint32_t param, uint64_t *value, uint32_t *len); int (*set_param)(struct msm_gpu *gpu, struct msm_file_private *ctx, - uint32_t param, uint64_t value); + uint32_t param, uint64_t value, uint32_t len); int (*hw_init)(struct msm_gpu *gpu); int (*pm_suspend)(struct msm_gpu *gpu); int (*pm_resume)(struct msm_gpu *gpu); diff --git a/drivers/gpu/drm/msm/msm_rd.c b/drivers/gpu/drm/msm/msm_rd.c index 9d835331f214..a92ffde53f0b 100644 --- a/drivers/gpu/drm/msm/msm_rd.c +++ b/drivers/gpu/drm/msm/msm_rd.c @@ -180,6 +180,7 @@ static int rd_open(struct inode *inode, struct file *fi= le) struct msm_gpu *gpu =3D priv->gpu; uint64_t val; uint32_t gpu_id; + uint32_t zero =3D 0; int ret =3D 0; =20 if (!gpu) @@ -200,12 +201,12 @@ static int rd_open(struct inode *inode, struct file *= file) * * Note: These particular params do not require a context */ - gpu->funcs->get_param(gpu, NULL, MSM_PARAM_GPU_ID, &val); + gpu->funcs->get_param(gpu, NULL, MSM_PARAM_GPU_ID, &val, &zero); gpu_id =3D val; =20 rd_write_section(rd, RD_GPU_ID, &gpu_id, sizeof(gpu_id)); =20 - gpu->funcs->get_param(gpu, NULL, MSM_PARAM_CHIP_ID, &val); + gpu->funcs->get_param(gpu, NULL, MSM_PARAM_CHIP_ID, &val, &zero); rd_write_section(rd, RD_CHIP_ID, &val, sizeof(val)); =20 out: diff --git a/include/uapi/drm/msm_drm.h b/include/uapi/drm/msm_drm.h index 07efc8033492..0aa1a8cb4e0d 100644 --- a/include/uapi/drm/msm_drm.h +++ b/include/uapi/drm/msm_drm.h @@ -95,6 +95,8 @@ struct drm_msm_param { __u32 pipe; /* in, MSM_PIPE_x */ __u32 param; /* in, MSM_PARAM_x */ __u64 value; /* out (get_param) or in (set_param) */ + __u32 len; /* zero for non-pointer params */ + __u32 pad; /* must be zero */ }; =20 /* --=20 2.35.1 From nobody Mon Jun 22 21:17:30 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 812A5C433F5 for ; Thu, 17 Mar 2022 00:29:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1354455AbiCQAac (ORCPT ); Wed, 16 Mar 2022 20:30:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38998 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1353403AbiCQAa1 (ORCPT ); Wed, 16 Mar 2022 20:30:27 -0400 Received: from mail-pg1-x533.google.com (mail-pg1-x533.google.com [IPv6:2607:f8b0:4864:20::533]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1396A1CB02; Wed, 16 Mar 2022 17:29:12 -0700 (PDT) Received: by mail-pg1-x533.google.com with SMTP id q19so1401191pgm.6; Wed, 16 Mar 2022 17:29:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=CKSIvXkqxKLFm6MnEgEDHDzqzUeFog6pmD8CweFsghI=; b=fK5C0D6wt92zw/V7ISzNnKi4SqjYgu4ZQdD090gSE0mlYaTHhCaEsvuPel6xmJE9OH QVSgyOYMF1lmGUjny0cY+z0vrS9kJoAmZvh9Xdj7mnVa9Vztg/Dk3dKUAz8NhGYC8DEn kmYi3JmbRN9ervwY3YqJ/KVs77YAWBWzZ4JwmLaT0c+FudlB/mIiBxzwHuIk3sYpanc9 IRWMgSsBJQ1/qHDtkmog8Em9FGbNrYy90X5Xiu2GtnZaN0s+NDDyE+xYsTS44CDU4Abf nIqe+aAeIhOuZ0oaB3AwWsZWpNDsFHj+uzwo04C6A9IycBw5S/haN8LFzKnlJ/dlZsPK as7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=CKSIvXkqxKLFm6MnEgEDHDzqzUeFog6pmD8CweFsghI=; b=MeWHfVN4ZMkzb1LJRFcDrEW8ezBXFt+z4vNo1LI/8ol6ibFMnOIBSxkvqhVnwtfuzn B1dY6CwrCARcmpez8aSEYzY1+rqMCNIYIkBE/8LNFX2aA8Y+T2K9VtsC0/nYAC/ZXWCC /5BpvJO0kso8yQRtbTICTsAocMTycENOi5IlKWOWsQWYvepofgEjKYon8sZ3HqIltMdW 3emmmIFjv96jjNrJw3lXqbjbsh665RI4Z6DOQPHur55BWuPgNySfxeEUwU2KJzohJ7Mc vDHDGVDQFVIbs/AgR3ZcW1rrN8guOK813KavighAMZCYNqIVn6KjsUCyCZPHKuJ/VIjm M7cg== X-Gm-Message-State: AOAM530Xp4qF+xMYrE/B5yuA7MRSEAOolaEzVOhkEeq7z2+iUVw7jAjc qwK1xCRDa8L4ZbpXDexqv3PKiXdFZc4= X-Google-Smtp-Source: ABdhPJws2yciiCk0JB+zECpgQIpT79AGYFUcJramWhAX+xOChjfaW3HF+RJ5Cg/C8zb0jJ4t0EcUNA== X-Received: by 2002:a05:6a00:c93:b0:4f7:c76:921f with SMTP id a19-20020a056a000c9300b004f70c76921fmr1780365pfv.73.1647476951441; Wed, 16 Mar 2022 17:29:11 -0700 (PDT) Received: from localhost ([2601:1c0:5200:a6:307:a401:7b76:c6e5]) by smtp.gmail.com with ESMTPSA id t7-20020a056a0021c700b004f7916d44bcsm4523879pfj.220.2022.03.16.17.29.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Mar 2022 17:29:10 -0700 (PDT) From: Rob Clark To: dri-devel@lists.freedesktop.org Cc: freedreno@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, Rob Clark , Rob Clark , Sean Paul , Abhinav Kumar , David Airlie , Daniel Vetter , linux-kernel@vger.kernel.org (open list) Subject: [PATCH 2/3] drm/msm: Split out helper to get comm/cmdline Date: Wed, 16 Mar 2022 17:29:44 -0700 Message-Id: <20220317002950.193449-3-robdclark@gmail.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220317002950.193449-1-robdclark@gmail.com> References: <20220317002950.193449-1-robdclark@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Rob Clark Deduplicate this from fault_worker and recover_worker. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_gpu.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/drivers/gpu/drm/msm/msm_gpu.c b/drivers/gpu/drm/msm/msm_gpu.c index 8fe4aee96aa9..4ec62b601adc 100644 --- a/drivers/gpu/drm/msm/msm_gpu.c +++ b/drivers/gpu/drm/msm/msm_gpu.c @@ -362,6 +362,20 @@ find_submit(struct msm_ringbuffer *ring, uint32_t fenc= e) =20 static void retire_submits(struct msm_gpu *gpu); =20 +static void get_comm_cmdline(struct msm_gem_submit *submit, char **comm, c= har **cmd) +{ + struct task_struct *task; + + task =3D get_pid_task(submit->pid, PIDTYPE_PID); + if (!task) + return; + + *comm =3D kstrdup(task->comm, GFP_KERNEL); + *cmd =3D kstrdup_quotable_cmdline(task, GFP_KERNEL); + + put_task_struct(task); +} + static void recover_worker(struct kthread_work *work) { struct msm_gpu *gpu =3D container_of(work, struct msm_gpu, recover_work); @@ -378,18 +392,11 @@ static void recover_worker(struct kthread_work *work) =20 submit =3D find_submit(cur_ring, cur_ring->memptrs->fence + 1); if (submit) { - struct task_struct *task; - /* Increment the fault counts */ submit->queue->faults++; submit->aspace->faults++; =20 - task =3D get_pid_task(submit->pid, PIDTYPE_PID); - if (task) { - comm =3D kstrdup(task->comm, GFP_KERNEL); - cmd =3D kstrdup_quotable_cmdline(task, GFP_KERNEL); - put_task_struct(task); - } + get_comm_cmdline(submit, &comm, &cmd); =20 if (comm && cmd) { DRM_DEV_ERROR(dev->dev, "%s: offending task: %s (%s)\n", @@ -478,14 +485,7 @@ static void fault_worker(struct kthread_work *work) goto resume_smmu; =20 if (submit) { - struct task_struct *task; - - task =3D get_pid_task(submit->pid, PIDTYPE_PID); - if (task) { - comm =3D kstrdup(task->comm, GFP_KERNEL); - cmd =3D kstrdup_quotable_cmdline(task, GFP_KERNEL); - put_task_struct(task); - } + get_comm_cmdline(submit, &comm, &cmd); =20 /* * When we get GPU iova faults, we can get 1000s of them, --=20 2.35.1 From nobody Mon Jun 22 21:17:30 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0CB88C433EF for ; Thu, 17 Mar 2022 00:29:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1354145AbiCQAaf (ORCPT ); Wed, 16 Mar 2022 20:30:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39112 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1354124AbiCQAaa (ORCPT ); Wed, 16 Mar 2022 20:30:30 -0400 Received: from mail-pj1-x102a.google.com (mail-pj1-x102a.google.com [IPv6:2607:f8b0:4864:20::102a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 28EFF1CB15; Wed, 16 Mar 2022 17:29:15 -0700 (PDT) Received: by mail-pj1-x102a.google.com with SMTP id z12-20020a17090ad78c00b001bf022b69d6so4050756pju.2; Wed, 16 Mar 2022 17:29:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ZWZ7JEAL1DE1LvgRX3uWuLKQwPRiB58gmhQLlKG1GL0=; b=hQEZ3z2zvW6LDZb1FOtcB/Z5Ml8F/MMBihCYO7JC4NqXWVdgMI4YYRWpGo4MuOcEkT 5wBBk9O0n/yPi8OCM5GrZ1YE3w/bSaxI7CJDYVUnOaoSt0+HUa0ftK/pvhJ1TkIJMDGa s5lZ68P5qzgHJ7KsAPP6+BHHKJzIkZu00nu6sYsx9esjYnQ9mOTEz8umK2g6GDgA2Mgx NlLS642gdGy9ih9gf/sG9rwk/HeLSyexsqLUqUycz3mQDjUtKeE6sFJq35cEvsknuj5a QO+BBHVyPUuI4lUS6DsH9rFY+vENdP7uSK6JOFbpTxDXH/8z0ODAl/RF7plJtyQTVFKp b7KA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ZWZ7JEAL1DE1LvgRX3uWuLKQwPRiB58gmhQLlKG1GL0=; b=gMAlj6CdVCVcGcrGn8EVxmNVONV1Q7gNNw/B4H+GZc47kVqCr94Y4cS+qlx4IIE1D+ 4mQeE5bBFi6+uduhxGhrp0H5nfRYQITb8zMQ2gkpC+vISwBpwhGz35n/u/BuUeMELZWN nMbxgMOYVJjrd/YD8tfsodttkU/Z0MxVBUE/CxOZbdGL2+lzVVeauW7mwSn+M5VrgWTD fG3X2206FFw27FFgyqoXThS8YlL8DY3pPN4ZRWVhnTLNo7Kd5ZwxKl40X1XuII+DP9of 2Kztv2MeWnig/sykRMakUoTkPhXLCIwIiYIZMLRm6Ki3/4f8/6y3pJHmaPOIAL/Du3kr fA0A== X-Gm-Message-State: AOAM531YzArqSyc/s2zvs5keu3ZEab/wyJn08D6Yw/Mg0t9SK2LIJy4+ q0WiqQrAjqzaVNcdFkYtFjk= X-Google-Smtp-Source: ABdhPJyqVMjKPtyWbcZMNiGxIdqe6xlBdoDkqLHl3sBZooawf6OQo1w2RitJWq1Br+5vDBkCvEo2gw== X-Received: by 2002:a17:90b:4b8a:b0:1c6:33b2:9d6a with SMTP id lr10-20020a17090b4b8a00b001c633b29d6amr2363205pjb.225.1647476954684; Wed, 16 Mar 2022 17:29:14 -0700 (PDT) Received: from localhost ([2601:1c0:5200:a6:307:a401:7b76:c6e5]) by smtp.gmail.com with ESMTPSA id bh6-20020a056a00308600b004f6aa0367f6sm3744636pfb.118.2022.03.16.17.29.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Mar 2022 17:29:13 -0700 (PDT) From: Rob Clark To: dri-devel@lists.freedesktop.org Cc: freedreno@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, Rob Clark , Rob Clark , Sean Paul , Abhinav Kumar , David Airlie , Daniel Vetter , Akhil P Oommen , Jonathan Marek , Jordan Crouse , Emma Anholt , Dan Carpenter , linux-kernel@vger.kernel.org (open list) Subject: [PATCH 3/3] drm/msm: Add a way to override processes comm/cmdline Date: Wed, 16 Mar 2022 17:29:45 -0700 Message-Id: <20220317002950.193449-4-robdclark@gmail.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220317002950.193449-1-robdclark@gmail.com> References: <20220317002950.193449-1-robdclark@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Rob Clark 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. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/adreno/adreno_gpu.c | 40 +++++++++++++++++++++++-- drivers/gpu/drm/msm/msm_gpu.c | 11 +++++-- drivers/gpu/drm/msm/msm_gpu.h | 6 ++++ drivers/gpu/drm/msm/msm_submitqueue.c | 2 ++ include/uapi/drm/msm_drm.h | 2 ++ 5 files changed, 56 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.c b/drivers/gpu/drm/msm/= adreno/adreno_gpu.c index 3d307b34854d..c68dc9c722c7 100644 --- a/drivers/gpu/drm/msm/adreno/adreno_gpu.c +++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.c @@ -290,11 +290,45 @@ int adreno_get_param(struct msm_gpu *gpu, struct msm_= file_private *ctx, int adreno_set_param(struct msm_gpu *gpu, struct msm_file_private *ctx, uint32_t param, uint64_t value, uint32_t len) { - /* No pointer params yet */ - if (len !=3D 0) - return -EINVAL; + switch (param) { + case MSM_PARAM_COMM: + case MSM_PARAM_CMDLINE: + /* kstrdup_quotable_cmdline() limits to PAGE_SIZE, so + * that should be a reasonable upper bound + */ + if (len > PAGE_SIZE) + return -EINVAL; + break; + default: + if (len !=3D 0) + return -EINVAL; + } =20 switch (param) { + case MSM_PARAM_COMM: + case MSM_PARAM_CMDLINE: { + char *str, **paramp; + + str =3D kmalloc(len + 1, GFP_KERNEL); + if (copy_from_user(str, u64_to_user_ptr(value), len)) { + kfree(str); + return -EFAULT; + } + + /* Ensure string is null terminated: */ + str[len] =3D '\0'; + + if (param =3D=3D MSM_PARAM_COMM) { + paramp =3D &ctx->comm; + } else { + paramp =3D &ctx->cmdline; + } + + kfree(*paramp); + *paramp =3D str; + + return 0; + } case MSM_PARAM_SYSPROF: if (!capable(CAP_SYS_ADMIN)) return -EPERM; diff --git a/drivers/gpu/drm/msm/msm_gpu.c b/drivers/gpu/drm/msm/msm_gpu.c index 4ec62b601adc..68f3f8ade76d 100644 --- a/drivers/gpu/drm/msm/msm_gpu.c +++ b/drivers/gpu/drm/msm/msm_gpu.c @@ -364,14 +364,21 @@ static void retire_submits(struct msm_gpu *gpu); =20 static void get_comm_cmdline(struct msm_gem_submit *submit, char **comm, c= har **cmd) { + struct msm_file_private *ctx =3D submit->queue->ctx; struct task_struct *task; =20 + *comm =3D kstrdup(ctx->comm, GFP_KERNEL); + *cmd =3D kstrdup(ctx->cmdline, GFP_KERNEL); + task =3D get_pid_task(submit->pid, PIDTYPE_PID); if (!task) return; =20 - *comm =3D kstrdup(task->comm, GFP_KERNEL); - *cmd =3D kstrdup_quotable_cmdline(task, GFP_KERNEL); + if (!*comm) + *comm =3D kstrdup(task->comm, GFP_KERNEL); + + if (!*cmd) + *cmd =3D kstrdup_quotable_cmdline(task, GFP_KERNEL); =20 put_task_struct(task); } diff --git a/drivers/gpu/drm/msm/msm_gpu.h b/drivers/gpu/drm/msm/msm_gpu.h index c28c2ad9f52e..2c0203fd6ce3 100644 --- a/drivers/gpu/drm/msm/msm_gpu.h +++ b/drivers/gpu/drm/msm/msm_gpu.h @@ -355,6 +355,12 @@ struct msm_file_private { */ int sysprof; =20 + /** comm: Overridden task comm, see MSM_PARAM_COMM */ + char *comm; + + /** cmdline: Overridden task cmdline, see MSM_PARAM_CMDLINE */ + char *cmdline; + /** * elapsed: * diff --git a/drivers/gpu/drm/msm/msm_submitqueue.c b/drivers/gpu/drm/msm/ms= m_submitqueue.c index 79b6ccd6ce64..f486a3cd4e55 100644 --- a/drivers/gpu/drm/msm/msm_submitqueue.c +++ b/drivers/gpu/drm/msm/msm_submitqueue.c @@ -61,6 +61,8 @@ void __msm_file_private_destroy(struct kref *kref) } =20 msm_gem_address_space_put(ctx->aspace); + kfree(ctx->comm); + kfree(ctx->cmdline); kfree(ctx); } =20 diff --git a/include/uapi/drm/msm_drm.h b/include/uapi/drm/msm_drm.h index 0aa1a8cb4e0d..794ad1948497 100644 --- a/include/uapi/drm/msm_drm.h +++ b/include/uapi/drm/msm_drm.h @@ -82,6 +82,8 @@ struct drm_msm_timespec { #define MSM_PARAM_FAULTS 0x09 /* RO */ #define MSM_PARAM_SUSPENDS 0x0a /* RO */ #define MSM_PARAM_SYSPROF 0x0b /* WO: 1 preserves perfcntrs, 2 also di= sables suspend */ +#define MSM_PARAM_COMM 0x0c /* WO: override for task->comm */ +#define MSM_PARAM_CMDLINE 0x0d /* WO: override for task cmdline */ =20 /* For backwards compat. The original support for preemption was based on * a single ring per priority level so # of priority levels equals the # --=20 2.35.1