From: Jin-young Jeon Date: Mon, 22 May 2017 08:34:05 +0000 (+0900) Subject: drm/tgm: add pid information on gem_info X-Git-Tag: submit/tizen/20170710.052339~14 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=23ebe60e24553798c6cc8b5c8e506d228c198448;p=profile%2Fwearable%2Fplatform%2Fkernel%2Flinux-3.18-exynos7270.git drm/tgm: add pid information on gem_info This patch is from product kernel. Change-Id: Id408cab17ca339bb2d8c8af1193a7905f2a34869 Signed-off-by: Jin-young Jeon Signed-off-by: Inki Dae --- diff --git a/drivers/gpu/drm/tgm/tbm_gem.c b/drivers/gpu/drm/tgm/tbm_gem.c index 9aa6a3ce914..0804821b1d9 100644 --- a/drivers/gpu/drm/tgm/tbm_gem.c +++ b/drivers/gpu/drm/tgm/tbm_gem.c @@ -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); diff --git a/drivers/gpu/drm/tgm/tbm_gem.h b/drivers/gpu/drm/tgm/tbm_gem.h index f63258c6894..aecaef92f2d 100644 --- a/drivers/gpu/drm/tgm/tbm_gem.h +++ b/drivers/gpu/drm/tgm/tbm_gem.h @@ -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, diff --git a/drivers/gpu/drm/tgm/tgm_drv.c b/drivers/gpu/drm/tgm/tgm_drv.c index 719342b712c..2053b00cb47 100644 --- a/drivers/gpu/drm/tgm/tgm_drv.c +++ b/drivers/gpu/drm/tgm/tgm_drv.c @@ -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; diff --git a/drivers/gpu/drm/tgm/tgm_drv.h b/drivers/gpu/drm/tgm/tgm_drv.h index 753433f259f..5af11712b57 100644 --- a/drivers/gpu/drm/tgm/tgm_drv.h +++ b/drivers/gpu/drm/tgm/tgm_drv.h @@ -29,6 +29,7 @@ struct tgm_drv_private { }; struct tgm_drv_file_private { + pid_t pid; pid_t tgid; };