drm/tgm: add pid information on gem_info 67/136967/4
authorJin-young Jeon <jy0.jeon@samsung.com>
Mon, 22 May 2017 08:34:05 +0000 (17:34 +0900)
committerInki Dae <inki.dae@samsung.com>
Tue, 4 Jul 2017 02:20:39 +0000 (02:20 +0000)
This patch is from product kernel.

Change-Id: Id408cab17ca339bb2d8c8af1193a7905f2a34869
Signed-off-by: Jin-young Jeon <jy0.jeon@samsung.com>
Signed-off-by: Inki Dae <inki.dae@samsung.com>
drivers/gpu/drm/tgm/tbm_gem.c
drivers/gpu/drm/tgm/tbm_gem.h
drivers/gpu/drm/tgm/tgm_drv.c
drivers/gpu/drm/tgm/tgm_drv.h

index 9aa6a3ce914a6aeef5cc93c091ffc2ab37e1ffdb..0804821b1d945bb5a31fd92837730c400e18b6f5 100644 (file)
@@ -127,6 +127,25 @@ void tbm_fini_buf(struct drm_device *dev,
        buffer = NULL;
 }
 
+static void tbm_gem_register_pid(struct drm_file *file_priv)
+{
+       struct tgm_drv_file_private *driver_priv = file_priv->driver_priv;
+
+       if (!driver_priv->pid && !driver_priv->tgid) {
+               driver_priv->pid = task_pid_nr(current);
+               driver_priv->tgid = task_tgid_nr(current);
+       } else {
+               if (driver_priv->pid != task_pid_nr(current))
+                       DRM_DEBUG_KMS("wrong pid: %ld, %ld\n",
+                                       (unsigned long)driver_priv->pid,
+                                       (unsigned long)task_pid_nr(current));
+               if (driver_priv->tgid != task_tgid_nr(current))
+                       DRM_DEBUG_KMS("wrong tgid: %ld, %ld\n",
+                                       (unsigned long)driver_priv->tgid,
+                                       (unsigned long)task_tgid_nr(current));
+       }
+}
+
 struct tbm_gem_object *tbm_gem_create_obj(struct drm_device *dev,
                                                unsigned int flags,
                                                unsigned long size)
@@ -248,6 +267,8 @@ int tbm_gem_create_ioctl(struct drm_device *dev, void *data,
                return ret;
        }
 
+       tbm_gem_register_pid(file_priv);
+
 #ifdef GEM_DEBUG_LOG
        gem_save_info(GEM_CREATE, obj);
 #endif
@@ -402,6 +423,22 @@ int tbm_gem_get_ioctl(struct drm_device *dev, void *data,
        return 0;
 }
 
+int tbm_gem_prime_fd_to_handle(struct drm_device *dev,
+               struct drm_file *file_priv, int prime_fd, uint32_t *handle)
+{
+       int ret;
+
+       ret = drm_gem_prime_fd_to_handle(dev, file_priv, prime_fd, handle);
+       if (ret < 0)
+               goto out;
+
+       tbm_gem_register_pid(file_priv);
+
+out:
+       return ret;
+}
+
+
 int tbm_gem_cpu_prep_ioctl(struct drm_device *dev, void *data,
                                  struct drm_file *file)
 {
@@ -696,6 +733,8 @@ static int tbm_gem_dumb_destroy(struct drm_file *file_priv,
         */
        ret = drm_gem_handle_delete(file_priv, handle);
 
+       tbm_gem_register_pid(file_priv);
+
        DRM_INFO("%s:h[%d]ret[%d]\n", __func__, handle, ret);
 
        return ret;
@@ -705,7 +744,6 @@ static int tbm_gem_one_info(int id, void *ptr, void *data)
 {
        struct drm_gem_object *obj = (struct drm_gem_object *)ptr;
        struct tbm_gem_info_data *gem_info_data = data;
-       struct pid *pid = gem_info_data->filp->pid;
        struct tgm_drv_file_private *file_priv =
                        gem_info_data->filp->driver_priv;
        struct tbm_gem_object *tbm_gem_obj;
@@ -724,7 +762,7 @@ static int tbm_gem_one_info(int id, void *ptr, void *data)
        seq_printf(gem_info_data->m,
                        "%5d\t%5d\t%4d\t%4d\t\t%4d\t0x%08lx\t0x%x\t%4d\t%4d\t\t"
                        "%4d\t\t0x%p\t%6d\n",
-                               pid_nr(pid),
+                               file_priv->pid,
                                file_priv->tgid,
                                id,
                                atomic_read(&obj->refcount.refcount) - 1,
@@ -784,7 +822,7 @@ int tbm_gem_init(struct drm_device *drm_dev)
        drm_drv->dumb_map_offset = tbm_gem_dumb_map_offset;
        drm_drv->dumb_destroy = tbm_gem_dumb_destroy;
        drm_drv->prime_handle_to_fd = drm_gem_prime_handle_to_fd,
-       drm_drv->prime_fd_to_handle = drm_gem_prime_fd_to_handle,
+       drm_drv->prime_fd_to_handle = tbm_gem_prime_fd_to_handle,
 #ifdef CONFIG_DRM_DMA_SYNC
        tbm_priv->gem_fence_context = fence_context_alloc(1);
        atomic_set(&tbm_priv->gem_fence_seqno, 0);
index f63258c689428ccf171fde3b3596abfd2748a0e4..aecaef92f2d4c5e7dd59f2ebc371f0e9c94478d6 100644 (file)
@@ -57,6 +57,8 @@ int tbm_gem_get_ioctl(struct drm_device *dev, void *data,
                                      struct drm_file *file_priv);
 int tbm_gem_info(struct seq_file *m, void *data);
 int tbm_gem_init(struct drm_device *drm_dev);
+int tbm_gem_prime_fd_to_handle(struct drm_device *dev,
+               struct drm_file *file_priv, int prime_fd, uint32_t *handle);
 int tbm_gem_cpu_prep_ioctl(struct drm_device *dev, void *data,
                                  struct drm_file *file);
 int tbm_gem_cpu_fini_ioctl(struct drm_device *dev, void *data,
index 719342b712cab2ed18449519afcc508969357b6d..2053b00cb472bb20c20af5122ff84d9c23413968 100644 (file)
@@ -92,7 +92,6 @@ static int tgm_drv_open(struct drm_device *dev, struct drm_file *file)
        if (!file_priv)
                return -ENOMEM;
 
-       file_priv->tgid = task_tgid_nr(current);
        file->driver_priv = file_priv;
 
        return 0;
index 753433f259f269e9ac56ca743d64d02ccd18b7fe..5af11712b575ce1a5d8f0f20ed34ef2d2753b9ea 100644 (file)
@@ -29,6 +29,7 @@ struct tgm_drv_private {
 };
 
 struct tgm_drv_file_private {
+       pid_t pid;
        pid_t tgid;
 };