From patchwork Tue Feb 1 16:16:11 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Clark X-Patchwork-Id: 12732009 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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 3D1D9C433FE for ; Tue, 1 Feb 2022 16:16:17 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 1C29610E2C2; Tue, 1 Feb 2022 16:16:16 +0000 (UTC) Received: from mail-pl1-x632.google.com (mail-pl1-x632.google.com [IPv6:2607:f8b0:4864:20::632]) by gabe.freedesktop.org (Postfix) with ESMTPS id DF16010E6D3; Tue, 1 Feb 2022 16:16:14 +0000 (UTC) Received: by mail-pl1-x632.google.com with SMTP id y17so15757658plg.7; Tue, 01 Feb 2022 08:16:14 -0800 (PST) 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=MnkWsxsvgV6jYlqjrCgNZZOUCGjYTcXq/86qZc0VO9M=; b=UBrDJDmLtPc0Wui/p8WtSn0X0DOXGqERJ0OBiM9RZY1a+CpAeLYVN+wktPLEfLGGIT GEHmrum1IBw5vL3uNkt4nIqnfC/W9sJBERsdJ2RYeBc4Hc2Kn1li78SZ8KhFAF7Ef/4P rdqUwnXElWHXRj+BdbP+LvlkjMtvBH8eSYWZx9OMEMl8hjcXyRUruJ1jLh0gQzpkvet6 B319MiDnddh+0Ei1tHGQlX1YrT3WdKjyMi4A6CQHAeFN77ANF8Sy4khE+Zft9yfJUnQJ nobm1jDazoW3xqCiqfycvOE0BPyWJgvBdPE2IDFCBI7QOWgGjsxbdKpOCkABvYgep68h +7Aw== 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=MnkWsxsvgV6jYlqjrCgNZZOUCGjYTcXq/86qZc0VO9M=; b=qiOaxnIiiPJRTiTE+AKA5VBfrvdAPK5WwTuJlba24S2EIvM6Y8tCfwGIVr9a8xzaan DJ9TLJ5MrpaWE+HhSIOk7DtZNIPLluA1dz09DcGhcqnWyWijmd5c/bUdkviOG39hyys1 QeYjEtnRn2jFf1tUfhGA9ADkPlskwHT1euru2BSwV0PsEu4DGZphDKTehb3UpTgm+S32 32LTfBpprcl3N6fHSS/M0DOxzYcKUWyFYok7qIJ0y4MTWmqOWbLyZN/TFslP97NdHi/W 6QWX7GfI6Ys/2H8jn5uSCYasBilsYhlAg/I9dYooIqsMsRlud2ao6dnp72f5+Ty5Un3Y mQqQ== X-Gm-Message-State: AOAM533NgTGFS/GcrVoM/FoF8cvXj3nLKifAQY/naWO8zkGE5t8mGp/i 3HnTq1JxvFBYeOLjnNYuoEl1D4cV/jA= X-Google-Smtp-Source: ABdhPJzas4QP0D3ikc29XHmeyrMd+rn5viftGv/vHPmDifvADb4DEq1nXoSG2jHN2PdGQ3XPGpIIlQ== X-Received: by 2002:a17:902:c40d:: with SMTP id k13mr25884655plk.151.1643732173932; Tue, 01 Feb 2022 08:16:13 -0800 (PST) Received: from localhost (c-73-25-156-94.hsd1.or.comcast.net. [73.25.156.94]) by smtp.gmail.com with ESMTPSA id 207sm16403918pgh.32.2022.02.01.08.16.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Feb 2022 08:16:12 -0800 (PST) From: Rob Clark To: dri-devel@lists.freedesktop.org Subject: [PATCH v2 1/2] drm/msm/gpu: Add ctx to get_param() Date: Tue, 1 Feb 2022 08:16:11 -0800 Message-Id: <20220201161618.778455-2-robdclark@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220201161618.778455-1-robdclark@gmail.com> References: <20220201161618.778455-1-robdclark@gmail.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Rob Clark , Jonathan Marek , Emma Anholt , Akhil P Oommen , David Airlie , linux-arm-msm@vger.kernel.org, Yangtao Li , Vladimir Lypak , Abhinav Kumar , Jordan Crouse , Sean Paul , Bjorn Andersson , Yiwei Zhang , Stephen Boyd , freedreno@lists.freedesktop.org, =?utf-8?q?Christian_K=C3=B6nig?= , open list Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" From: Rob Clark Prep work for next patch. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/adreno/adreno_gpu.c | 3 ++- drivers/gpu/drm/msm/adreno/adreno_gpu.h | 3 ++- drivers/gpu/drm/msm/msm_drv.c | 3 ++- drivers/gpu/drm/msm/msm_gpu.h | 3 ++- drivers/gpu/drm/msm/msm_rd.c | 6 ++++-- 5 files changed, 12 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.c b/drivers/gpu/drm/msm/adreno/adreno_gpu.c index f33cfa4ef1c8..caa9076197de 100644 --- a/drivers/gpu/drm/msm/adreno/adreno_gpu.c +++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.c @@ -227,7 +227,8 @@ adreno_iommu_create_address_space(struct msm_gpu *gpu, return aspace; } -int adreno_get_param(struct msm_gpu *gpu, uint32_t param, uint64_t *value) +int adreno_get_param(struct msm_gpu *gpu, struct msm_file_private *ctx, + uint32_t param, uint64_t *value) { struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu); diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.h b/drivers/gpu/drm/msm/adreno/adreno_gpu.h index cffabe7d33c1..432590036b31 100644 --- a/drivers/gpu/drm/msm/adreno/adreno_gpu.h +++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.h @@ -279,7 +279,8 @@ static inline int adreno_is_a650_family(struct adreno_gpu *gpu) adreno_is_a660_family(gpu); } -int adreno_get_param(struct msm_gpu *gpu, uint32_t param, uint64_t *value); +int adreno_get_param(struct msm_gpu *gpu, struct msm_file_private *ctx, + uint32_t param, uint64_t *value); 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 555666e3f960..72060247e43c 100644 --- a/drivers/gpu/drm/msm/msm_drv.c +++ b/drivers/gpu/drm/msm/msm_drv.c @@ -763,7 +763,8 @@ static int msm_ioctl_get_param(struct drm_device *dev, void *data, if (!gpu) return -ENXIO; - return gpu->funcs->get_param(gpu, args->param, &args->value); + return gpu->funcs->get_param(gpu, file->driver_priv, + args->param, &args->value); } 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 92aa1e9196c6..ba8407231340 100644 --- a/drivers/gpu/drm/msm/msm_gpu.h +++ b/drivers/gpu/drm/msm/msm_gpu.h @@ -42,7 +42,8 @@ struct msm_gpu_config { * + z180_gpu */ struct msm_gpu_funcs { - int (*get_param)(struct msm_gpu *gpu, uint32_t param, uint64_t *value); + int (*get_param)(struct msm_gpu *gpu, struct msm_file_private *ctx, + uint32_t param, uint64_t *value); 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 7e4d6460719e..dd3605b46264 100644 --- a/drivers/gpu/drm/msm/msm_rd.c +++ b/drivers/gpu/drm/msm/msm_rd.c @@ -197,13 +197,15 @@ static int rd_open(struct inode *inode, struct file *file) /* the parsing tools need to know gpu-id to know which * register database to load. + * + * Note: These particular param does not require a context */ - gpu->funcs->get_param(gpu, MSM_PARAM_GPU_ID, &val); + gpu->funcs->get_param(gpu, NULL, MSM_PARAM_GPU_ID, &val); gpu_id = val; rd_write_section(rd, RD_GPU_ID, &gpu_id, sizeof(gpu_id)); - gpu->funcs->get_param(gpu, MSM_PARAM_CHIP_ID, &val); + gpu->funcs->get_param(gpu, NULL, MSM_PARAM_CHIP_ID, &val); rd_write_section(rd, RD_CHIP_ID, &val, sizeof(val)); out: From patchwork Tue Feb 1 16:16:12 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Clark X-Patchwork-Id: 12732010 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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 13135C433FE for ; Tue, 1 Feb 2022 16:16:21 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id CF8D110E6D5; Tue, 1 Feb 2022 16:16:19 +0000 (UTC) Received: from mail-pj1-x102f.google.com (mail-pj1-x102f.google.com [IPv6:2607:f8b0:4864:20::102f]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2195310E6D5; Tue, 1 Feb 2022 16:16:19 +0000 (UTC) Received: by mail-pj1-x102f.google.com with SMTP id s2-20020a17090ad48200b001b501977b23so3521896pju.2; Tue, 01 Feb 2022 08:16:19 -0800 (PST) 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=soKMugPn64vQ/cfc9qI0s3Cw/G/MYetWeT20PxsquF4=; b=h3bPV0//plQxMZfuT+9RNiWxNYKrtEB83JukyF6bReF1l/KWFtaNff26CfLlGcSqce UO12LUvG5IKcYpA6gZyImS7dHlz97uDuPbonID3vUo9yKEnvATNCX8VKuxO5Whrm7no+ r+Unjy0evx78N2PGYxUkJIWg6WQFtbLgVF5UqTGbh6ZoRVrbBAtbhJL6gJM7SVwBfBT5 9fg6IkCw3xYyTAjTGGtOxZ7K0pkg2su87bDZTkpNRHiqcPOe5R4eUI+ONpLliHYaj6E9 bHLL6ktgqGvCuZzomRPWFbEQc4qwJqPh02kxb58YRDlTD6VwaWaYr0LBGS812pwAL+pc Nj0w== 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=soKMugPn64vQ/cfc9qI0s3Cw/G/MYetWeT20PxsquF4=; b=ZeitIu/QJvYJRVadwyFhIOYOC2HPCLsbLKdiGckLwe+V4NwARnheE9vUt1b/jE9I/W zLat9Wp/z0GGulYaX+oLC13EAkHMRV1hL8qCtIj9BnYABRNtGNcTRHy6UW36m6wC849c rOgJx7eGz/QgT0w0YBhwigDmHZNyAIlmVo4+T/8EMOytxn+FiL+PF4U7xjDcqYMkhXP+ A21yqx3ezALailqhpXKW3kYR2Hdr02VrZ/EecjH6z6mUTNP+dPJA83qNLPMChEUFePXl jQ/a1VmELkoZcgMn3X6PxDefmnWijvfpTLUrhwvjU+eFGA3JwlXr2rdoApurOzbwcr4v 0K/w== X-Gm-Message-State: AOAM533gR3uc1xz12+hcAnEpTaYCuvHX0oddZtaU4bydzxowGqjBvhZX NnSfuwdTCxY+t2O083xEkbNhq6hA+1o= X-Google-Smtp-Source: ABdhPJyxK0MpVj2a1YNiDWbtzm8rzXl8lp2pT9v7xwVfV932u5By8bLQxW4ej3tKDuokrBkV4OGciA== X-Received: by 2002:a17:902:bf01:: with SMTP id bi1mr26784360plb.87.1643732177929; Tue, 01 Feb 2022 08:16:17 -0800 (PST) Received: from localhost (c-73-25-156-94.hsd1.or.comcast.net. [73.25.156.94]) by smtp.gmail.com with ESMTPSA id d22sm15617930pfl.71.2022.02.01.08.16.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Feb 2022 08:16:16 -0800 (PST) From: Rob Clark To: dri-devel@lists.freedesktop.org Subject: [PATCH v2 2/2] drm/msm/gpu: Track global faults per address-space Date: Tue, 1 Feb 2022 08:16:12 -0800 Message-Id: <20220201161618.778455-3-robdclark@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220201161618.778455-1-robdclark@gmail.com> References: <20220201161618.778455-1-robdclark@gmail.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Rob Clark , Jonathan Marek , Emma Anholt , Akhil P Oommen , David Airlie , linux-arm-msm@vger.kernel.org, Yangtao Li , Abhinav Kumar , Jordan Crouse , Sean Paul , Yiwei Zhang , Stephen Boyd , freedreno@lists.freedesktop.org, =?utf-8?q?Christian_K=C3=B6nig?= , open list Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" From: Rob Clark Other processes don't need to know about faults that they are isolated from by virtue of address space isolation. They are only interested in whether some of their state might have been corrupted. But to be safe, also track unattributed faults. This case should really never happen unless there is a kernel bug (and that would never happen, right?) v2: Instead of adding a new param, just change the behavior of the existing param to match what userspace actually wants [anholt] Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/5934 Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/adreno/adreno_gpu.c | 2 +- drivers/gpu/drm/msm/msm_gem.h | 3 +++ drivers/gpu/drm/msm/msm_gpu.c | 8 +++++++- drivers/gpu/drm/msm/msm_gpu.h | 5 ++++- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.c b/drivers/gpu/drm/msm/adreno/adreno_gpu.c index caa9076197de..58dfb23cf2af 100644 --- a/drivers/gpu/drm/msm/adreno/adreno_gpu.c +++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.c @@ -269,7 +269,7 @@ int adreno_get_param(struct msm_gpu *gpu, struct msm_file_private *ctx, *value = 0; return 0; case MSM_PARAM_FAULTS: - *value = gpu->global_faults; + *value = gpu->global_faults + ctx->aspace->faults; return 0; case MSM_PARAM_SUSPENDS: *value = gpu->suspend_count; diff --git a/drivers/gpu/drm/msm/msm_gem.h b/drivers/gpu/drm/msm/msm_gem.h index 54ca0817d807..af612add5264 100644 --- a/drivers/gpu/drm/msm/msm_gem.h +++ b/drivers/gpu/drm/msm/msm_gem.h @@ -35,6 +35,9 @@ struct msm_gem_address_space { * will be non-NULL: */ struct pid *pid; + + /* @faults: the number of GPU hangs associated with this address space */ + int faults; }; struct msm_gem_vma { diff --git a/drivers/gpu/drm/msm/msm_gpu.c b/drivers/gpu/drm/msm/msm_gpu.c index 2c1049c0ea14..942bf41403ff 100644 --- a/drivers/gpu/drm/msm/msm_gpu.c +++ b/drivers/gpu/drm/msm/msm_gpu.c @@ -370,8 +370,8 @@ static void recover_worker(struct kthread_work *work) struct task_struct *task; /* Increment the fault counts */ - gpu->global_faults++; submit->queue->faults++; + submit->aspace->faults++; task = get_pid_task(submit->pid, PIDTYPE_PID); if (task) { @@ -389,6 +389,12 @@ static void recover_worker(struct kthread_work *work) } else { msm_rd_dump_submit(priv->hangrd, submit, NULL); } + } else { + /* + * We couldn't attribute this fault to any particular context, + * so increment the global fault count instead. + */ + gpu->global_faults++; } /* Record the crash state */ diff --git a/drivers/gpu/drm/msm/msm_gpu.h b/drivers/gpu/drm/msm/msm_gpu.h index ba8407231340..c99627fc99dd 100644 --- a/drivers/gpu/drm/msm/msm_gpu.h +++ b/drivers/gpu/drm/msm/msm_gpu.h @@ -200,7 +200,10 @@ struct msm_gpu { /* does gpu need hw_init? */ bool needs_hw_init; - /* number of GPU hangs (for all contexts) */ + /** + * global_faults: number of GPU hangs not attributed to a particular + * address space + */ int global_faults; void __iomem *mmio;