From patchwork Fri Nov 4 15:52:29 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Clark X-Patchwork-Id: 15650 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:6687:0:0:0:0:0 with SMTP id l7csp489031wru; Fri, 4 Nov 2022 08:56:32 -0700 (PDT) X-Google-Smtp-Source: AMsMyM7rn5RI2Trgt3yPwQikVZKqMJI6AQFSyrPTX5yzF4Ow6GQieX5OMJ/Of+RaEoBqajx3j3k2 X-Received: by 2002:a17:906:5dcc:b0:78d:e76a:ef23 with SMTP id p12-20020a1709065dcc00b0078de76aef23mr33859609ejv.317.1667577392067; Fri, 04 Nov 2022 08:56:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1667577392; cv=none; d=google.com; s=arc-20160816; b=CfO39Ovm+wQZecjkU14RJTdQJaatbmbvnIaAC0PmHrThZwPUyknduJgINsx1T5GnOb NSIlhtrgn/3zBgOOmwadA/yo8rihPfTplD7j+/x664pPeRCVshq6ndcqk0rP4SK2nD4L MgUsBddwonC4+oMSOrixAJ9xgV7pjDIl/oTx4lcIh+K8cMwQs5kzRnOAGg1LXrbkN/9i BPvRydteNcAF2Anii1SG37kJEQRHLNR+/TTykbykFdTSankUiPSTSLOSeNilTRFdC9wz AYTnnxs9fanYXdgwN/Rjh249bhgXheHn93qy+SVYGqkHeb8U3JqwHK1QJGBAiMinEiZ1 14Ug== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=h91PY4kE003Fzt7Dp6s2LtF8+Ku5gtgrJGFgjbiXW0Y=; b=ENI+iMLE66PAm3MpThnmDKpRrCryoB1y3kYmhEMCsXrwB9qGRQgdPeQy5DsGDhxXEI /O7ELDpq8QAl9/ydfvdgIzPe00L34kpGJ8npWo42QMx1fqallReZjrlFvIpejmuC9fUC KqT33YujscPnTVCuHUwybB88W5/zOK02Ux9nii/DNzClyYDaji/VcCjUWDVNz2PNQBj9 Zu9G97mjfbZhzSe84VmoM7ji+QIM5fFFrEM6NhShjWclzw793UhrF/ZRiMaHXY6P5MZW kFNUB28lYd8NZEjI92rx+XroTdsRuCaCSVKgHOqHczgAaHT6GSJwtV5y2gEBBmcun94Q bRWQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=fZfNmpLb; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id c16-20020aa7d610000000b004610f91a242si4890186edr.300.2022.11.04.08.56.09; Fri, 04 Nov 2022 08:56:32 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=fZfNmpLb; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231443AbiKDPwO (ORCPT + 99 others); Fri, 4 Nov 2022 11:52:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57452 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229995AbiKDPwL (ORCPT ); Fri, 4 Nov 2022 11:52:11 -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 0A1602D763; Fri, 4 Nov 2022 08:52:08 -0700 (PDT) Received: by mail-pj1-x102a.google.com with SMTP id m14-20020a17090a3f8e00b00212dab39bcdso8634165pjc.0; Fri, 04 Nov 2022 08:52:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=h91PY4kE003Fzt7Dp6s2LtF8+Ku5gtgrJGFgjbiXW0Y=; b=fZfNmpLbARw2htsWecPLMgqjYPXVCha4yMS8ZDbD2ibFKN0J+n0z1donudEwT68czq a0Napturob7ia7xuzL1aB8P2BRUnsbBoS56zzlP4bsMwS3v0iD1ekMG6/YiSja5OdMBh ZCp/Zuw4eFXMl/9YJFXMK7h0CS5Ws0Jx7n+Kbc3sXjDM8Lu7Vg6FRDU0RqK/bDLQCZOi obao476g+hOwqCoByP4oL/i2QR58pWgfSbrhdrn5d0YF+Ifeqb2RFpTqn99sjrMwzQva xg2F99kYPErdBIQAkV2v+HdMxcyQ923U6Dvjb8E1W3FPlEvL4id57fFAJYKXEcJuUpNa SVZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=h91PY4kE003Fzt7Dp6s2LtF8+Ku5gtgrJGFgjbiXW0Y=; b=APKqNQhpKUOKfUM8/zdN47R2aw14vYM5q8mB3whvG+pSU4WRuvUIIxuRUMOPROMEKy x++KxBksvIgom0S1oEaAyHj9DiPxvAFfXVLV3Yu3v/l6zU01jSaDgrudwFuTZ5IoDzpa dyG10K6sP6qZkANyju8JKNro6sLJzf+x2GXxcLUc++pt+ufDeKTiddLXZIE7pO8n0eTa S3Tr76Osb0D0B8iCOdY0Pl2cswceI6CunW+3bkSa6VzDSnl6S+QYweV5DwelaP36BuTI zhO6dsW+kcnIlX98IPm5zbaKZt63QXaIjcEv53rRgLoMbTnsRg+5w5n/eR+qBALvHKSM zeEg== X-Gm-Message-State: ACrzQf00ahYgFFyhSBcvXlRY5IEead6rMo0kGvOrQyRz1L1zHnItLBsE U6NI8r9E1G2kaFtK5ddA2s0= X-Received: by 2002:a17:90b:152:b0:213:dfd6:3e5e with SMTP id em18-20020a17090b015200b00213dfd63e5emr27484666pjb.229.1667577127429; Fri, 04 Nov 2022 08:52:07 -0700 (PDT) Received: from localhost ([2a00:79e1:abd:4a00:2703:3c72:eb1a:cffd]) by smtp.gmail.com with ESMTPSA id j4-20020a17090ac48400b002130c269b6fsm1868454pjt.1.2022.11.04.08.52.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Nov 2022 08:52:07 -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 , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , David Airlie , Daniel Vetter , linux-kernel@vger.kernel.org (open list) Subject: [RFC] drm/msm: Boost on waits Date: Fri, 4 Nov 2022 08:52:29 -0700 Message-Id: <20221104155229.528193-1-robdclark@gmail.com> X-Mailer: git-send-email 2.38.1 MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1748581631196962876?= X-GMAIL-MSGID: =?utf-8?q?1748581631196962876?= From: Rob Clark Minimize interactive latency by boosting frequency when userspace is waiting on the GPU to finish. Signed-off-by: Rob Clark --- I did contemplate also boosting on dma_fence_wait(), but (a) that would require some extra plumbing thru gpu-sched, (b) that only captures a sub-set of wait-on-dma-fence patterns, and (c) waiting on a dma-fence doesn't always imply urgency (for ex, virglrenderer poll()ing on a dma- fence to know when to send a fence irq to VM guest). But the driver WAIT_FENCE and CPU_PREP ioctls map to things like glFinish() where it is pretty clear that there is something wishing the GPU would finish sooner. drivers/gpu/drm/msm/msm_drv.c | 7 +++++-- drivers/gpu/drm/msm/msm_gem.c | 6 ++++++ drivers/gpu/drm/msm/msm_gpu_devfreq.c | 2 +- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c index c3b77b44b2aa..017a512982a2 100644 --- a/drivers/gpu/drm/msm/msm_drv.c +++ b/drivers/gpu/drm/msm/msm_drv.c @@ -894,7 +894,7 @@ static int msm_ioctl_gem_info(struct drm_device *dev, void *data, } static int wait_fence(struct msm_gpu_submitqueue *queue, uint32_t fence_id, - ktime_t timeout) + ktime_t timeout, struct msm_gpu *gpu) { struct dma_fence *fence; int ret; @@ -924,6 +924,9 @@ static int wait_fence(struct msm_gpu_submitqueue *queue, uint32_t fence_id, if (!fence) return 0; + if (!dma_fence_is_signaled(fence)) + msm_devfreq_boost(gpu, 2); + ret = dma_fence_wait_timeout(fence, true, timeout_to_jiffies(&timeout)); if (ret == 0) { ret = -ETIMEDOUT; @@ -956,7 +959,7 @@ static int msm_ioctl_wait_fence(struct drm_device *dev, void *data, if (!queue) return -ENOENT; - ret = wait_fence(queue, args->fence, to_ktime(args->timeout)); + ret = wait_fence(queue, args->fence, to_ktime(args->timeout), priv->gpu); msm_submitqueue_put(queue); diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c index 1dee0d18abbb..fbda0e3a94f8 100644 --- a/drivers/gpu/drm/msm/msm_gem.c +++ b/drivers/gpu/drm/msm/msm_gem.c @@ -846,6 +846,12 @@ int msm_gem_cpu_prep(struct drm_gem_object *obj, uint32_t op, ktime_t *timeout) op & MSM_PREP_NOSYNC ? 0 : timeout_to_jiffies(timeout); long ret; + if (!dma_resv_test_signaled(obj->resv, dma_resv_usage_rw(write))) { + struct msm_drm_private *priv = obj->dev->dev_private; + + msm_devfreq_boost(priv->gpu, 2); + } + ret = dma_resv_wait_timeout(obj->resv, dma_resv_usage_rw(write), true, remain); if (ret == 0) diff --git a/drivers/gpu/drm/msm/msm_gpu_devfreq.c b/drivers/gpu/drm/msm/msm_gpu_devfreq.c index 85c443a37e4e..025940eb08d1 100644 --- a/drivers/gpu/drm/msm/msm_gpu_devfreq.c +++ b/drivers/gpu/drm/msm/msm_gpu_devfreq.c @@ -305,7 +305,7 @@ void msm_devfreq_boost(struct msm_gpu *gpu, unsigned factor) struct msm_gpu_devfreq *df = &gpu->devfreq; uint64_t freq; - if (!has_devfreq(gpu)) + if (!gpu || !has_devfreq(gpu)) return; freq = get_freq(gpu);