Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp783737pxb; Thu, 21 Jan 2021 21:51:37 -0800 (PST) X-Google-Smtp-Source: ABdhPJwhYQARYqDJKoVD+qimBb3CP+IhmY6aUjTkMNTL86Z1Zwu79wACE9HZSUo1+sxNNf+XpWDF X-Received: by 2002:a17:906:2f83:: with SMTP id w3mr1989728eji.292.1611294697284; Thu, 21 Jan 2021 21:51:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1611294697; cv=none; d=google.com; s=arc-20160816; b=ZVEf7h+J9OfSFo3ilbqCp0tEt69a7DSLFWbJlHMlnvHiUEqtjQ8hfiOb2j5rS2DaeM Btqor1jCsrVRrnK9KwUYbwCTmALJJ+7mgsiJbo3CVv8Tx6iJAj/JjHbrcTd33QnO6Bqo wlmX6wdT7of8ClujdEBcPej4Zzs/j6hNh+810BGzzrIX9S34ELEs5Q3zIPqO3+7u8b3F 8R6OpM32O0A2hWhkUpNW8JcKnhM4t6PAcEJiJ24CbXwujHPa/NZjhJ3WmX2AK49iZwJW IQtA7FLO6kZX4FL/q8wQx358npirWl/N+DG52tJzQOlRKiapfytemNty7h5nnU18yrsR q2SA== 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=BLXgpOXOllZOpAnIxHqD+UYHHzmwKo7AFJN3hA2f4pQ=; b=AbMvnLWeM5D2l/jUhrOT0ReKjS/PhJ9Zf9zhmFpEFim4Io2RyI8p+xLjpfY0xNtaaf tHG319WtwxdJLLnPhHusxMPxQCrBP4wWTrGrmAHynmg0MZOfa2m23hedpHaYmEZt1cWA HPfy1JrRNnFTzGc4XFq5Vi1S+K7EWgylfjDeAuJzjeeed1G08fORmc1CteOzYHWGkQ+Z bM6QDKH0WY+z5GVxeDRunJINWmzhDV9ZkjQ7NM35DPMz+fL8JSBwjHz2R15jCOJsoJpC CoKOZ0DVN++xHLfyJOwvsbxCWk7O9VGgU73qXhrbt++e+pl6xQDQVru6LZWu6kQXQ1v2 x3Tg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@android.com header.s=20161025 header.b=tbFctqzA; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=android.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id d13si2411375ejj.426.2021.01.21.21.50.41; Thu, 21 Jan 2021 21:51:37 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@android.com header.s=20161025 header.b=tbFctqzA; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=android.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726129AbhAVFct (ORCPT + 99 others); Fri, 22 Jan 2021 00:32:49 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49402 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725912AbhAVFco (ORCPT ); Fri, 22 Jan 2021 00:32:44 -0500 Received: from mail-pl1-x62a.google.com (mail-pl1-x62a.google.com [IPv6:2607:f8b0:4864:20::62a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A9121C06174A for ; Thu, 21 Jan 2021 21:32:04 -0800 (PST) Received: by mail-pl1-x62a.google.com with SMTP id h15so93762pli.8 for ; Thu, 21 Jan 2021 21:32:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=android.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=BLXgpOXOllZOpAnIxHqD+UYHHzmwKo7AFJN3hA2f4pQ=; b=tbFctqzA8MbsuRfWOhF7+/+paIyBF3tGT2Xt2BFWfgMIf/864NJN5Rua+rYjyBMOAI iZol7ydj8ULFhwH/EXNswxfwfO4XNCypF5xO9teuC9FW2HOkXna5LhsUJ523EnWqh0B5 QYzlKFR8seCOHX7neVmJMlFXLCQPolctCREXowxeTVA6GkdLdi3G1vJ+OtssRm/1DgYa qbnjJZqjEChBQZGI81Yw+MHuIM1wk6/K70lAKe+4XnoC5o/GweTdKp1qRn+mqLfyqRjf X2owyeS6CZD3J2TqEneV/mtHcmt1gd3TDz1pwiUuaVI8ZcoBdZjEJ/GDGcRW+Dmo4tCw oHyA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=BLXgpOXOllZOpAnIxHqD+UYHHzmwKo7AFJN3hA2f4pQ=; b=MifcDPfWVfco0L69cCZQV+RnF8TvbVB6APcqo4ump9LSyg1tQtu8KL45RED0zNmy6z eXFe+4ZB1VXci8trXym5aob5mq+y2zxOhoMyilSlwkBNVvwiHnm+g4nslLqm+wv+mp7J SihEdHeDrK4Oxj6HstFyo2szL9ZVxtyFIlGKZ9lwmyuqSajZA2IOgHeJhp6UsRCi407N hkDLbBZi3fVE2B1UC7UuL4/1Kc29gOzr0n2yUXsjz1VBElNQVZlhQSHQKaJyWHGy/g+b k/bJe+uuwXkanAhVg3ZrAbdl+IdS3ZEBSsF5vvcokugSSVeeBxri7OnSO4wOQtQAg2ZJ s8LQ== X-Gm-Message-State: AOAM532dMXiP2RRU9rnXox+3nfFPiSnbmLZNA3ZZ9h2V0qMEqX+Ep8dg TqSRf6FULOrJYivX3Y/KXtQbZg== X-Received: by 2002:a17:90b:4b86:: with SMTP id lr6mr3306071pjb.107.1611293524025; Thu, 21 Jan 2021 21:32:04 -0800 (PST) Received: from zzyiwei.c.googlers.com.com (254.80.82.34.bc.googleusercontent.com. [34.82.80.254]) by smtp.gmail.com with ESMTPSA id x186sm6600392pfd.57.2021.01.21.21.32.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 21 Jan 2021 21:32:03 -0800 (PST) From: Yiwei Zhang To: David Airlie , Gerd Hoffmann , Daniel Vetter Cc: dri-devel@lists.freedesktop.org, virtualization@lists.linux-foundation.org, linux-kernel@vger.kernel.org, kernel-team@android.com, Yiwei Zhang , Yiwei Zhang Subject: [PATCH v3] drm/virtio: trace total gem bo for virtio Date: Fri, 22 Jan 2021 05:31:59 +0000 Message-Id: <20210122053159.1720274-1-zzyiwei@android.com> X-Mailer: git-send-email 2.30.0.280.ga3ce27912f-goog In-Reply-To: <20210121091013.wlqyukat2w7fow33@sirius.home.kraxel.org> References: <20210121091013.wlqyukat2w7fow33@sirius.home.kraxel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Yiwei Zhang On the success of virtio_gpu_object_create, add size of newly allocated bo to the tracked total_mem. In drm_gem_object_funcs.free, after the gem bo lost its last refcount, subtract the bo size from the tracked total_mem if the original underlying memory allocation is successful. It's more accurate to do this in device driver layer to best match when the underlying resource gets allocated and destroyed during tracing. Signed-off-by: Yiwei Zhang --- drivers/gpu/drm/virtio/Kconfig | 1 + drivers/gpu/drm/virtio/virtgpu_drv.h | 2 ++ drivers/gpu/drm/virtio/virtgpu_object.c | 11 +++++++++++ 3 files changed, 14 insertions(+) diff --git a/drivers/gpu/drm/virtio/Kconfig b/drivers/gpu/drm/virtio/Kconfig index b925b8b1da16..e103b7e883b1 100644 --- a/drivers/gpu/drm/virtio/Kconfig +++ b/drivers/gpu/drm/virtio/Kconfig @@ -5,6 +5,7 @@ config DRM_VIRTIO_GPU select DRM_KMS_HELPER select DRM_GEM_SHMEM_HELPER select VIRTIO_DMA_SHARED_BUFFER + select TRACE_GPU_MEM help This is the virtual GPU driver for virtio. It can be used with QEMU based VMMs (like KVM or Xen). diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h index 6a232553c99b..7ab63ce9c6a9 100644 --- a/drivers/gpu/drm/virtio/virtgpu_drv.h +++ b/drivers/gpu/drm/virtio/virtgpu_drv.h @@ -249,6 +249,8 @@ struct virtio_gpu_device { spinlock_t resource_export_lock; /* protects map state and host_visible_mm */ spinlock_t host_visible_lock; + /* total memory backing gem bos */ + atomic64_t total_mem; }; struct virtio_gpu_fpriv { diff --git a/drivers/gpu/drm/virtio/virtgpu_object.c b/drivers/gpu/drm/virtio/virtgpu_object.c index d69a5b6da553..e2251fc41509 100644 --- a/drivers/gpu/drm/virtio/virtgpu_object.c +++ b/drivers/gpu/drm/virtio/virtgpu_object.c @@ -25,12 +25,21 @@ #include #include +#include #include "virtgpu_drv.h" static int virtio_gpu_virglrenderer_workaround = 1; module_param_named(virglhack, virtio_gpu_virglrenderer_workaround, int, 0400); +static inline void virtio_gpu_trace_total_mem(struct virtio_gpu_device *vgdev, + s64 delta) +{ + u64 total_mem = atomic64_add_return(delta, &vgdev->total_mem); + + trace_gpu_mem_total(vgdev->ddev->primary->index, 0, total_mem); +} + int virtio_gpu_resource_id_get(struct virtio_gpu_device *vgdev, uint32_t *resid) { if (virtio_gpu_virglrenderer_workaround) { @@ -104,6 +113,7 @@ static void virtio_gpu_free_object(struct drm_gem_object *obj) struct virtio_gpu_device *vgdev = bo->base.base.dev->dev_private; if (bo->created) { + virtio_gpu_trace_total_mem(vgdev, -(obj->size)); virtio_gpu_cmd_unref_resource(vgdev, bo); virtio_gpu_notify(vgdev); /* completion handler calls virtio_gpu_cleanup_object() */ @@ -265,6 +275,7 @@ int virtio_gpu_object_create(struct virtio_gpu_device *vgdev, virtio_gpu_object_attach(vgdev, bo, ents, nents); } + virtio_gpu_trace_total_mem(vgdev, shmem_obj->base.size); *bo_ptr = bo; return 0; -- 2.30.0.280.ga3ce27912f-goog