From: Rob Clark <robdcl...@chromium.org>

Use the new helper to export stats about memory usage.

v2: Drop unintended hunk
v3: Rebase

Signed-off-by: Rob Clark <robdcl...@chromium.org>
Reviewed-by: Emil Velikov <emil.l.veli...@gmail.com>
---
 drivers/gpu/drm/msm/msm_drv.c |  2 ++
 drivers/gpu/drm/msm/msm_gem.c | 15 +++++++++++++++
 2 files changed, 17 insertions(+)

diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index 1e941aa77609..81a1371c0307 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -1045,20 +1045,22 @@ static const struct drm_ioctl_desc msm_ioctls[] = {
 
 static void msm_show_fdinfo(struct drm_printer *p, struct drm_file *file)
 {
        struct drm_device *dev = file->minor->dev;
        struct msm_drm_private *priv = dev->dev_private;
 
        if (!priv->gpu)
                return;
 
        msm_gpu_show_fdinfo(priv->gpu, file->driver_priv, p);
+
+       drm_show_memory_stats(p, file);
 }
 
 static const struct file_operations fops = {
        .owner = THIS_MODULE,
        DRM_GEM_FOPS,
        .show_fdinfo = drm_show_fdinfo,
 };
 
 static const struct drm_driver msm_driver = {
        .driver_features    = DRIVER_GEM |
diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c
index cd39b9d8abdb..20cfd86d2b32 100644
--- a/drivers/gpu/drm/msm/msm_gem.c
+++ b/drivers/gpu/drm/msm/msm_gem.c
@@ -1083,34 +1083,49 @@ int msm_gem_new_handle(struct drm_device *dev, struct 
drm_file *file,
                msm_gem_object_set_name(obj, "%s", name);
 
        ret = drm_gem_handle_create(file, obj, handle);
 
        /* drop reference from allocate - handle holds it now */
        drm_gem_object_put(obj);
 
        return ret;
 }
 
+static enum drm_gem_object_status msm_gem_status(struct drm_gem_object *obj)
+{
+       struct msm_gem_object *msm_obj = to_msm_bo(obj);
+       enum drm_gem_object_status status = 0;
+
+       if (msm_obj->pages)
+               status |= DRM_GEM_OBJECT_RESIDENT;
+
+       if (msm_obj->madv == MSM_MADV_DONTNEED)
+               status |= DRM_GEM_OBJECT_PURGEABLE;
+
+       return status;
+}
+
 static const struct vm_operations_struct vm_ops = {
        .fault = msm_gem_fault,
        .open = drm_gem_vm_open,
        .close = drm_gem_vm_close,
 };
 
 static const struct drm_gem_object_funcs msm_gem_object_funcs = {
        .free = msm_gem_free_object,
        .pin = msm_gem_prime_pin,
        .unpin = msm_gem_prime_unpin,
        .get_sg_table = msm_gem_prime_get_sg_table,
        .vmap = msm_gem_prime_vmap,
        .vunmap = msm_gem_prime_vunmap,
        .mmap = msm_gem_object_mmap,
+       .status = msm_gem_status,
        .vm_ops = &vm_ops,
 };
 
 static int msm_gem_new_impl(struct drm_device *dev,
                uint32_t size, uint32_t flags,
                struct drm_gem_object **obj)
 {
        struct msm_drm_private *priv = dev->dev_private;
        struct msm_gem_object *msm_obj;
 
-- 
2.39.2

Reply via email to