Received: by 2002:a05:7412:37c9:b0:e2:908c:2ebd with SMTP id jz9csp1086776rdb; Tue, 19 Sep 2023 21:48:41 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE8UpKsuUIEo8iRPgcTUaDnrRwSUcF7E9wpbBC93DZ8iS16I0oXjpJJ3nQAWvtn2xaDCP00 X-Received: by 2002:a05:6358:9143:b0:142:d1cb:48ab with SMTP id r3-20020a056358914300b00142d1cb48abmr1853630rwr.15.1695185320980; Tue, 19 Sep 2023 21:48:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695185320; cv=none; d=google.com; s=arc-20160816; b=jj2WGjuIKIrokTbd6JNTC37EJb2zyZzctUzy1t1FhXNuvlul0UNgDpGhKkYM5zc774 vb4NzUHjL0F4Gr1GJG6V4WUmqaGx8Ys0+iFXP/xjsm/c3ymf4WTQFFfjVbw8SerOeDfq t0zwGB7MALErWxORXeFBxTjBy6e8Nm9G/E7x/MhUSxvZNVHwnj75RMs5dB39ADGJQI9i DsHhB7A7KOBzn5buervqAy2h6BAdQC+MrutMJ0+4aCHLTREtY1f1NBflP/1U7KDD+h2M Iy3zbUg5TSWuCsGme6LNl3UzqvuOpWkr6i0PpIC7Dg0cZgE/Vejn48T8TRE+ZjGGia7m +AAg== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=ClFp5+Zzoy+M6qizp6zy4LTcNVBRxoIaVsWYqNDFwKs=; fh=J6jIr4zQ7C+2dedjt84bZIf7pTpHxTiA88jNoeHaVQc=; b=KTzbB64ce/bvV5N5dLMwOOBFhFOKaztGFyoQq330TnJ+tZn7rSlY/EZrIaTnBkZoYV ol7xqAip2ZIcsBMipdB6twSShWBDxa40jpa7SEuy6I+9hY0m/C9axtk3kzymkf6Mqtvq kEZ3+NQARiAhSflK6tJFXMMzQ/yLxHqasKEme/G2LZqCh4R2XFaFs+IKLofe1gKE/+a+ LU6bcUEGDREIuIGEiZ6lOIHsuOkamofk37Diyg6oruu2Zod8RnDEM5dA5LMmehpPDOpV QuMKz+8MblQ17uNKmpr3DYcp+cC5pHfAzz95ZxHHsVLeUNL5WYtmho8AgVlREFHV2ZX6 fyCg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@collabora.com header.s=mail header.b=YCYqfPye; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=collabora.com Return-Path: Received: from agentk.vger.email (agentk.vger.email. [2620:137:e000::3:2]) by mx.google.com with ESMTPS id cm11-20020a17090afa0b00b00263d559dbf1si737702pjb.55.2023.09.19.21.48.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Sep 2023 21:48:40 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) client-ip=2620:137:e000::3:2; Authentication-Results: mx.google.com; dkim=pass header.i=@collabora.com header.s=mail header.b=YCYqfPye; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=collabora.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by agentk.vger.email (Postfix) with ESMTP id 6BEEB819ADBA; Tue, 19 Sep 2023 16:36:40 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233666AbjISXg0 (ORCPT + 99 others); Tue, 19 Sep 2023 19:36:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42004 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233527AbjISXgP (ORCPT ); Tue, 19 Sep 2023 19:36:15 -0400 Received: from madras.collabora.co.uk (madras.collabora.co.uk [IPv6:2a00:1098:0:82:1000:25:2eeb:e5ab]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1D289C0; Tue, 19 Sep 2023 16:36:10 -0700 (PDT) Received: from localhost.localdomain (unknown [IPv6:2a02:8010:65b5:0:1ac0:4dff:feee:236a]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: alarumbe) by madras.collabora.co.uk (Postfix) with ESMTPSA id 7D4B566071A3; Wed, 20 Sep 2023 00:36:06 +0100 (BST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1695166566; bh=D8FJsJmU8pGFx+LOiGoEx6ey1t/Dq5oamCR5JeST1eU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=YCYqfPyetEQv6KYvkVIOrIdkxnPy2Hcc2l9PSOFksuwp59HyGtjFay7IV5ca4jjGY JGFH5A0wMriM+Ew5F3IZXMpjTDtDFrobT4KwMs34gy9LcqaAcjUfEt+KC+JK4je3BT bb+tF1+EwCr5G5yh2VH3KEBgOGx80IJsbuQXkzO+UxcB814wKf0YU1dUpXcvyeWOv0 +d67z+WcaJecv+45WCTmYYK1fm4sHFIijzaPs6pYwo8F1v6xZeI6E4OKCiW0et7obi +b0zUzgPl3JqPtXmyx/KMPseKccsOQImlMKkj3k+k2qCSNzm+nk2lgbpBL+ZJlLZ1v POf6zVZGikmNQ== From: =?UTF-8?q?Adri=C3=A1n=20Larumbe?= To: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, daniel@ffwll.ch, robdclark@gmail.com, quic_abhinavk@quicinc.com, dmitry.baryshkov@linaro.org, sean@poorly.run, marijn.suijten@somainline.org, robh@kernel.org, steven.price@arm.com Cc: adrian.larumbe@collabora.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, healych@amazon.com, kernel@collabora.com, Boris Brezillon Subject: [PATCH v6 5/6] drm/panfrost: Implement generic DRM object RSS reporting function Date: Wed, 20 Sep 2023 00:34:53 +0100 Message-ID: <20230919233556.1458793-6-adrian.larumbe@collabora.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230919233556.1458793-1-adrian.larumbe@collabora.com> References: <20230919233556.1458793-1-adrian.larumbe@collabora.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on agentk.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (agentk.vger.email [0.0.0.0]); Tue, 19 Sep 2023 16:36:40 -0700 (PDT) BO's RSS is updated every time new pages are allocated on demand and mapped for the object at GPU page fault's IRQ handler, but only for heap buffers. The reason this is unnecessary for non-heap buffers is that they are mapped onto the GPU's VA space and backed by physical memory in their entirety at BO creation time. This calculation is unnecessary for imported PRIME objects, since heap buffers cannot be exported by our driver, and the actual BO RSS size is the one reported in its attached dmabuf structure. Signed-off-by: Adrián Larumbe Reviewed-by: Boris Brezillon Reviewed-by: Steven Price --- drivers/gpu/drm/panfrost/panfrost_gem.c | 15 +++++++++++++++ drivers/gpu/drm/panfrost/panfrost_gem.h | 5 +++++ drivers/gpu/drm/panfrost/panfrost_mmu.c | 1 + 3 files changed, 21 insertions(+) diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.c b/drivers/gpu/drm/panfrost/panfrost_gem.c index 7d8f83d20539..4365434b48db 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gem.c +++ b/drivers/gpu/drm/panfrost/panfrost_gem.c @@ -208,6 +208,20 @@ static enum drm_gem_object_status panfrost_gem_status(struct drm_gem_object *obj return res; } +static size_t panfrost_gem_rss(struct drm_gem_object *obj) +{ + struct panfrost_gem_object *bo = to_panfrost_bo(obj); + + if (bo->is_heap) { + return bo->heap_rss_size; + } else if (bo->base.pages) { + WARN_ON(bo->heap_rss_size); + return bo->base.base.size; + } else { + return 0; + } +} + static const struct drm_gem_object_funcs panfrost_gem_funcs = { .free = panfrost_gem_free_object, .open = panfrost_gem_open, @@ -220,6 +234,7 @@ static const struct drm_gem_object_funcs panfrost_gem_funcs = { .vunmap = drm_gem_shmem_object_vunmap, .mmap = drm_gem_shmem_object_mmap, .status = panfrost_gem_status, + .rss = panfrost_gem_rss, .vm_ops = &drm_gem_shmem_vm_ops, }; diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.h b/drivers/gpu/drm/panfrost/panfrost_gem.h index ad2877eeeccd..13c0a8149c3a 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gem.h +++ b/drivers/gpu/drm/panfrost/panfrost_gem.h @@ -36,6 +36,11 @@ struct panfrost_gem_object { */ atomic_t gpu_usecount; + /* + * Object chunk size currently mapped onto physical memory + */ + size_t heap_rss_size; + bool noexec :1; bool is_heap :1; }; diff --git a/drivers/gpu/drm/panfrost/panfrost_mmu.c b/drivers/gpu/drm/panfrost/panfrost_mmu.c index d54d4e7b2195..7b1490cdaa48 100644 --- a/drivers/gpu/drm/panfrost/panfrost_mmu.c +++ b/drivers/gpu/drm/panfrost/panfrost_mmu.c @@ -522,6 +522,7 @@ static int panfrost_mmu_map_fault_addr(struct panfrost_device *pfdev, int as, IOMMU_WRITE | IOMMU_READ | IOMMU_NOEXEC, sgt); bomapping->active = true; + bo->heap_rss_size += SZ_2; dev_dbg(pfdev->dev, "mapped page fault @ AS%d %llx", as, addr); -- 2.42.0