return obj;
}
+static void v3d_gem_register_pid(struct drm_file *file)
+{
+ struct v3d_file_priv *v3d_priv = file->driver_priv;
+ struct drm_v3d_file_private *pid_priv;
+
+ if (!v3d_priv)
+ return;
+
+ pid_priv = &v3d_priv->priv;
+
+ if (!pid_priv->pid && !pid_priv->tgid) {
+ pid_priv->pid = task_pid_nr(current);
+ pid_priv->tgid = task_tgid_nr(current);
+ } else {
+ if (pid_priv->pid != task_pid_nr(current))
+ DRM_DEBUG_KMS("wrong pid: %ld, %ld\n",
+ (unsigned long)pid_priv->pid,
+ (unsigned long)task_pid_nr(current));
+ if (pid_priv->tgid != task_tgid_nr(current))
+ DRM_DEBUG_KMS("wrong tgid: %ld, %ld\n",
+ (unsigned long)pid_priv->tgid,
+ (unsigned long)task_tgid_nr(current));
+ }
+}
+
+int v3d_drm_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)
+ return ret;
+
+ v3d_gem_register_pid(file_priv);
+
+ return ret;
+}
+
int v3d_create_bo_ioctl(struct drm_device *dev, void *data,
struct drm_file *file_priv)
{
args->offset = bo->node.start << PAGE_SHIFT;
ret = drm_gem_handle_create(file_priv, &bo->base.base, &args->handle);
+ if (!ret)
+ v3d_gem_register_pid(file_priv);
+
drm_gem_object_put(&bo->base.base);
return ret;