From patchwork Tue Sep 12 08:36:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Adri=C3=A1n_Larumbe?= X-Patchwork-Id: 138637 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9ecd:0:b0:3f2:4152:657d with SMTP id t13csp847961vqx; Tue, 12 Sep 2023 21:32:53 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFziRM8WUfT/hkeZACsihbDKeTJ/JG9vB2Y8Wtrv39QeCyvrWIHTvJj8Es/6muLV4IhyrAD X-Received: by 2002:a17:90a:4105:b0:273:e70d:570d with SMTP id u5-20020a17090a410500b00273e70d570dmr1135750pjf.14.1694579573270; Tue, 12 Sep 2023 21:32:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1694579573; cv=none; d=google.com; s=arc-20160816; b=ezZeey/kHMMdnxu6ryrfYANLjWwUxYhR1Co0V2Y05V0gFAmPamfbffNZwPM6GVeY86 WvhvPSFRK56BiBEUPdS/xzjppOwH6OMKx1gcZITuPDTl0DO7Y+vzc0fw/dtvVwRukzp/ v0DAKfnzHRNywH/8DSKAa+Xea/oKqu+C9MraaDv95IHW7HTW5kcMLH/HNF0q9E4D3rsZ d+T6/C36kaaW0rU9F1Qo1x+bYLN3KJ4ohJmokU/TKRrabCc4utbl/SLkh6CwzuC2yl3C xwhpevQd+d8wIqEGlqEB+zf8zYfMvl8Wpooa2NYhZsxmIWL4e4TM7uyvNlaxopbHb4i+ S7LA== 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=McfOWxegSn+SvjMzQ4mg8m5Elp3B511DCPdOhkxDiS8=; fh=FTgSgXNODyKPnkMLWI9rYUhDWD+RBdHVvNtucDUCZvw=; b=ErCqMcBqVkAOBhE0ZER5mm2vZZpEe8B9hRrRS/Lq1Tl1KVQTiZ7naRP5SBr5Z+U3rj XwVIF/J5C2ETQajsEd0qXA2LMtDfrSvlzEE70m9UmFwkvQy71uPxS0oq7+Yb7qVpsliK yoTIA5dgJqDokW7ituGB+aMPK2bljZznRec9Ysd2MoPHX4MeVXmxpIQr+DTcK+2FVjFc FRRYQk2C/pRFPuWCqoD6nUYpjqWqElsDLORvlWhd5J8AkcyX1aGov5IJfOFB/5k6clLy v9cSEIYvNz9FIvj6tgbgxPrmedC2w04VDRxLu5LJqCT77NZhhj/4N/Sej8zu/h+JcljV vQxA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@collabora.com header.s=mail header.b=GJgdND8Z; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 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 howler.vger.email (howler.vger.email. [2620:137:e000::3:4]) by mx.google.com with ESMTPS id n6-20020a17090a9f0600b00263419c5c00si716617pjp.50.2023.09.12.21.32.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Sep 2023 21:32:53 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) client-ip=2620:137:e000::3:4; Authentication-Results: mx.google.com; dkim=pass header.i=@collabora.com header.s=mail header.b=GJgdND8Z; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 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 howler.vger.email (Postfix) with ESMTP id A726E8313025; Tue, 12 Sep 2023 01:42:40 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at howler.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232968AbjILImf (ORCPT + 38 others); Tue, 12 Sep 2023 04:42:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50364 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232494AbjILImN (ORCPT ); Tue, 12 Sep 2023 04:42:13 -0400 Received: from madras.collabora.co.uk (madras.collabora.co.uk [46.235.227.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 406D21703; Tue, 12 Sep 2023 01:40:58 -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 2EF796607328; Tue, 12 Sep 2023 09:40:56 +0100 (BST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1694508056; bh=iBqI4Z7ebPKZ4rLAU3PznW4JmlLp+hcNVWlIPUkNVTk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GJgdND8ZgFFA8LKAZxZ+0EL7TQKdn9SMREsVwkxakkhYAMABXPrJTEfY1QhHYJ58T GXEECuIwARdRMnglGweTscZ5pLsoiprpEF/OgWKvm02yzbe1k+W0dzdsR8+QYEgv/U qs5BU52ymgvgE2noeRV4zmYz/mLabzhACASd0pWiVYERvpjGwD9E5vSGzi10bREDX3 mxrL1Ay7stMCJ2XO08Z1VBYbPYdvXrl+8wRHL7vbV8mF3aUFv3IGW5kMwZAKdQkvGb UPUjIlOp/tveqla2fNmHF/RWfDbof4DZebOGT3NTXcxksUajursaQ4ho9MluFaGwn1 8KLp7kNjgnA3A== From: =?utf-8?q?Adri=C3=A1n_Larumbe?= 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 Subject: [PATCH v4 5/6] drm/panfrost: Implement generic DRM object RSS reporting function Date: Tue, 12 Sep 2023 09:36:59 +0100 Message-ID: <20230912084044.955864-6-adrian.larumbe@collabora.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230912084044.955864-1-adrian.larumbe@collabora.com> References: <20230912084044.955864-1-adrian.larumbe@collabora.com> MIME-Version: 1.0 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 (howler.vger.email [0.0.0.0]); Tue, 12 Sep 2023 01:42:40 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1776848553982424818 X-GMAIL-MSGID: 1776895470567812676 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 --- 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);