From: Zack Rusin <za...@vmware.com>

There's been a lot of cotable resizes on startup which we can track
by adding a mks stat to measure both the invocation count and
time spent doing cotable resizes.

This is only used if kernel is configured with CONFIG_DRM_VMWGFX_MKSSTATS
The stats are collected on the host size inside the vmware-stats.log
file.

Signed-off-by: Zack Rusin <za...@vmware.com>
Reviewed-by: Michael Banack <bana...@vmware.com>
Reviewed-by: Martin Krastev <krast...@vmware.com>
Reviewed-by: Maaz Mombasawala <mombasawa...@vmware.com>
---
 drivers/gpu/drm/vmwgfx/vmwgfx_cotable.c | 13 +++++++++++--
 drivers/gpu/drm/vmwgfx/vmwgfx_mksstat.h |  2 ++
 drivers/gpu/drm/vmwgfx/vmwgfx_msg.c     | 16 +++++++++-------
 3 files changed, 22 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_cotable.c 
b/drivers/gpu/drm/vmwgfx/vmwgfx_cotable.c
index 79b30dc9d825..a4c30f950d7c 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_cotable.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_cotable.c
@@ -33,6 +33,7 @@
 #include <drm/ttm/ttm_placement.h>
 
 #include "vmwgfx_drv.h"
+#include "vmwgfx_mksstat.h"
 #include "vmwgfx_resource_priv.h"
 #include "vmwgfx_so.h"
 
@@ -395,9 +396,12 @@ static int vmw_cotable_resize(struct vmw_resource *res, 
size_t new_size)
        int ret;
        size_t i;
 
+       MKS_STAT_TIME_DECL(MKSSTAT_KERN_COTABLE_RESIZE);
+       MKS_STAT_TIME_PUSH(MKSSTAT_KERN_COTABLE_RESIZE);
+
        ret = vmw_cotable_readback(res);
        if (ret)
-               return ret;
+               goto out_done;
 
        cur_size_read_back = vcotbl->size_read_back;
        vcotbl->size_read_back = old_size_read_back;
@@ -411,7 +415,7 @@ static int vmw_cotable_resize(struct vmw_resource *res, 
size_t new_size)
                            true, true, vmw_bo_bo_free, &buf);
        if (ret) {
                DRM_ERROR("Failed initializing new cotable MOB.\n");
-               return ret;
+               goto out_done;
        }
 
        bo = &buf->base;
@@ -485,6 +489,8 @@ static int vmw_cotable_resize(struct vmw_resource *res, 
size_t new_size)
        /* Release the pin acquired in vmw_bo_init */
        ttm_bo_unpin(bo);
 
+       MKS_STAT_TIME_POP(MKSSTAT_KERN_COTABLE_RESIZE);
+
        return 0;
 
 out_map_new:
@@ -494,6 +500,9 @@ static int vmw_cotable_resize(struct vmw_resource *res, 
size_t new_size)
        ttm_bo_unreserve(bo);
        vmw_bo_unreference(&buf);
 
+out_done:
+       MKS_STAT_TIME_POP(MKSSTAT_KERN_COTABLE_RESIZE);
+
        return ret;
 }
 
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_mksstat.h 
b/drivers/gpu/drm/vmwgfx/vmwgfx_mksstat.h
index 0509f55f07b4..ede74c7fdbbf 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_mksstat.h
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_mksstat.h
@@ -29,6 +29,7 @@
 #define _VMWGFX_MKSSTAT_H_
 
 #include <asm/page.h>
+#include <linux/kconfig.h>
 
 /* Reservation marker for mksstat pid's */
 #define MKSSTAT_PID_RESERVED -1
@@ -41,6 +42,7 @@
 
 typedef enum {
        MKSSTAT_KERN_EXECBUF, /* vmw_execbuf_ioctl */
+       MKSSTAT_KERN_COTABLE_RESIZE,
 
        MKSSTAT_KERN_COUNT /* Reserved entry; always last */
 } mksstat_kern_stats_t;
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_msg.c 
b/drivers/gpu/drm/vmwgfx/vmwgfx_msg.c
index a6cea35eaa01..8700d038d74d 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_msg.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_msg.c
@@ -85,7 +85,14 @@ struct rpc_channel {
        u32 cookie_low;
 };
 
-
+#if IS_ENABLED(CONFIG_DRM_VMWGFX_MKSSTATS)
+/* Kernel mksGuestStats counter names and desciptions; same order as enum 
mksstat_kern_stats_t */
+static const char* const mksstat_kern_name_desc[MKSSTAT_KERN_COUNT][2] =
+{
+       { "vmw_execbuf_ioctl", "vmw_execbuf_ioctl" },
+       { "vmw_cotable_resize", "vmw_cotable_resize" },
+};
+#endif
 
 /**
  * vmw_open_channel
@@ -695,12 +702,6 @@ static inline void hypervisor_ppn_remove(PPN64 pfn)
 /* Header to the text description of mksGuestStat instance descriptor */
 #define MKSSTAT_KERNEL_DESCRIPTION "vmwgfx"
 
-/* Kernel mksGuestStats counter names and desciptions; same order as enum 
mksstat_kern_stats_t */
-static const char* const mksstat_kern_name_desc[MKSSTAT_KERN_COUNT][2] =
-{
-       { "vmw_execbuf_ioctl", "vmw_execbuf_ioctl" },
-};
-
 /**
  * mksstat_init_record: Initializes an MKSGuestStatCounter-based record
  * for the respective mksGuestStat index.
@@ -786,6 +787,7 @@ static int mksstat_init_kern_id(struct page **ppage)
        /* Set up all kernel-internal counters and corresponding structures */
        pstrs_acc = pstrs;
        pstrs_acc = mksstat_init_record_time(MKSSTAT_KERN_EXECBUF, pstat, 
pinfo, pstrs_acc);
+       pstrs_acc = mksstat_init_record_time(MKSSTAT_KERN_COTABLE_RESIZE, 
pstat, pinfo, pstrs_acc);
 
        /* Add new counters above, in their order of appearance in 
mksstat_kern_stats_t */
 
-- 
2.34.1

Reply via email to