On Wed, Nov 21, 2018 at 10:35:10PM +0100, Daniel Vetter wrote: > Ever since > > commit cb6458f97b53d7f73043206c18014b3ca63ac345 > Author: Daniel Vetter <daniel.vetter@xxxxxxxx> > Date: Thu Aug 8 15:41:34 2013 +0200 > > drm: remove procfs code, take 2 > > Having the code shared between procfs and debugfs in the separate > drm_info.c file stopped making sense. Merge them. > > Noticed because Lyude asked some questions on irc about why we even > have drm_info_node and I remember this old story. > > Cc: Lyude Paul <lyude@xxxxxxxxxx> > Reviewed-by: Lyude Paul <lyude@xxxxxxxxxx> > Signed-off-by: Daniel Vetter <daniel.vetter@xxxxxxxxx> Applied for drm-misc-next. -Daniel > --- > drivers/gpu/drm/Makefile | 2 +- > drivers/gpu/drm/drm_debugfs.c | 89 +++++++++++++++++++++ > drivers/gpu/drm/drm_info.c | 137 --------------------------------- > drivers/gpu/drm/drm_internal.h | 5 -- > 4 files changed, 90 insertions(+), 143 deletions(-) > delete mode 100644 drivers/gpu/drm/drm_info.c > > diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile > index 576ba985e138..7c88f12096c5 100644 > --- a/drivers/gpu/drm/Makefile > +++ b/drivers/gpu/drm/Makefile > @@ -10,7 +10,7 @@ drm-y := drm_auth.o drm_bufs.o drm_cache.o \ > drm_scatter.o drm_pci.o \ > drm_sysfs.o drm_hashtab.o drm_mm.o \ > drm_crtc.o drm_fourcc.o drm_modes.o drm_edid.o \ > - drm_info.o drm_encoder_slave.o \ > + drm_encoder_slave.o \ > drm_trace_points.o drm_global.o drm_prime.o \ > drm_rect.o drm_vma_manager.o drm_flip_work.o \ > drm_modeset_lock.o drm_atomic.o drm_bridge.o \ > diff --git a/drivers/gpu/drm/drm_debugfs.c b/drivers/gpu/drm/drm_debugfs.c > index 373bd4c2b698..f8468eae0503 100644 > --- a/drivers/gpu/drm/drm_debugfs.c > +++ b/drivers/gpu/drm/drm_debugfs.c > @@ -32,6 +32,8 @@ > #include <drm/drm_debugfs.h> > #include <drm/drm_edid.h> > #include <drm/drm_atomic.h> > +#include <drm/drm_auth.h> > +#include <drm/drm_gem.h> > #include <drm/drmP.h> > > #include "drm_internal.h" > @@ -43,6 +45,93 @@ > * Initialization, etc. > **************************************************/ > > +static int drm_name_info(struct seq_file *m, void *data) > +{ > + struct drm_info_node *node = (struct drm_info_node *) m->private; > + struct drm_minor *minor = node->minor; > + struct drm_device *dev = minor->dev; > + struct drm_master *master; > + > + mutex_lock(&dev->master_mutex); > + master = dev->master; > + seq_printf(m, "%s", dev->driver->name); > + if (dev->dev) > + seq_printf(m, " dev=%s", dev_name(dev->dev)); > + if (master && master->unique) > + seq_printf(m, " master=%s", master->unique); > + if (dev->unique) > + seq_printf(m, " unique=%s", dev->unique); > + seq_printf(m, "\n"); > + mutex_unlock(&dev->master_mutex); > + > + return 0; > +} > + > +static int drm_clients_info(struct seq_file *m, void *data) > +{ > + struct drm_info_node *node = (struct drm_info_node *) m->private; > + struct drm_device *dev = node->minor->dev; > + struct drm_file *priv; > + kuid_t uid; > + > + seq_printf(m, > + "%20s %5s %3s master a %5s %10s\n", > + "command", > + "pid", > + "dev", > + "uid", > + "magic"); > + > + /* dev->filelist is sorted youngest first, but we want to present > + * oldest first (i.e. kernel, servers, clients), so walk backwardss. > + */ > + mutex_lock(&dev->filelist_mutex); > + list_for_each_entry_reverse(priv, &dev->filelist, lhead) { > + struct task_struct *task; > + > + rcu_read_lock(); /* locks pid_task()->comm */ > + task = pid_task(priv->pid, PIDTYPE_PID); > + uid = task ? __task_cred(task)->euid : GLOBAL_ROOT_UID; > + seq_printf(m, "%20s %5d %3d %c %c %5d %10u\n", > + task ? task->comm : "<unknown>", > + pid_vnr(priv->pid), > + priv->minor->index, > + drm_is_current_master(priv) ? 'y' : 'n', > + priv->authenticated ? 'y' : 'n', > + from_kuid_munged(seq_user_ns(m), uid), > + priv->magic); > + rcu_read_unlock(); > + } > + mutex_unlock(&dev->filelist_mutex); > + return 0; > +} > + > +static int drm_gem_one_name_info(int id, void *ptr, void *data) > +{ > + struct drm_gem_object *obj = ptr; > + struct seq_file *m = data; > + > + seq_printf(m, "%6d %8zd %7d %8d\n", > + obj->name, obj->size, > + obj->handle_count, > + kref_read(&obj->refcount)); > + return 0; > +} > + > +static int drm_gem_name_info(struct seq_file *m, void *data) > +{ > + struct drm_info_node *node = (struct drm_info_node *) m->private; > + struct drm_device *dev = node->minor->dev; > + > + seq_printf(m, " name size handles refcount\n"); > + > + mutex_lock(&dev->object_name_lock); > + idr_for_each(&dev->object_name_idr, drm_gem_one_name_info, m); > + mutex_unlock(&dev->object_name_lock); > + > + return 0; > +} > + > static const struct drm_info_list drm_debugfs_list[] = { > {"name", drm_name_info, 0}, > {"clients", drm_clients_info, 0}, > diff --git a/drivers/gpu/drm/drm_info.c b/drivers/gpu/drm/drm_info.c > deleted file mode 100644 > index 6b68e9088436..000000000000 > --- a/drivers/gpu/drm/drm_info.c > +++ /dev/null > @@ -1,137 +0,0 @@ > -/** > - * \file drm_info.c > - * DRM info file implementations > - * > - * \author Ben Gamari <bgamari@xxxxxxxxx> > - */ > - > -/* > - * Created: Sun Dec 21 13:09:50 2008 by bgamari@xxxxxxxxx > - * > - * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas. > - * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. > - * Copyright 2008 Ben Gamari <bgamari@xxxxxxxxx> > - * All Rights Reserved. > - * > - * Permission is hereby granted, free of charge, to any person obtaining a > - * copy of this software and associated documentation files (the "Software"), > - * to deal in the Software without restriction, including without limitation > - * the rights to use, copy, modify, merge, publish, distribute, sublicense, > - * and/or sell copies of the Software, and to permit persons to whom the > - * Software is furnished to do so, subject to the following conditions: > - * > - * The above copyright notice and this permission notice (including the next > - * paragraph) shall be included in all copies or substantial portions of the > - * Software. > - * > - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR > - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, > - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL > - * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR > - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, > - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR > - * OTHER DEALINGS IN THE SOFTWARE. > - */ > - > -#include <linux/seq_file.h> > -#include <drm/drmP.h> > -#include <drm/drm_gem.h> > - > -#include "drm_internal.h" > -#include "drm_legacy.h" > - > -/** > - * Called when "/proc/dri/.../name" is read. > - * > - * Prints the device name together with the bus id if available. > - */ > -int drm_name_info(struct seq_file *m, void *data) > -{ > - struct drm_info_node *node = (struct drm_info_node *) m->private; > - struct drm_minor *minor = node->minor; > - struct drm_device *dev = minor->dev; > - struct drm_master *master; > - > - mutex_lock(&dev->master_mutex); > - master = dev->master; > - seq_printf(m, "%s", dev->driver->name); > - if (dev->dev) > - seq_printf(m, " dev=%s", dev_name(dev->dev)); > - if (master && master->unique) > - seq_printf(m, " master=%s", master->unique); > - if (dev->unique) > - seq_printf(m, " unique=%s", dev->unique); > - seq_printf(m, "\n"); > - mutex_unlock(&dev->master_mutex); > - > - return 0; > -} > - > -/** > - * Called when "/proc/dri/.../clients" is read. > - * > - */ > -int drm_clients_info(struct seq_file *m, void *data) > -{ > - struct drm_info_node *node = (struct drm_info_node *) m->private; > - struct drm_device *dev = node->minor->dev; > - struct drm_file *priv; > - kuid_t uid; > - > - seq_printf(m, > - "%20s %5s %3s master a %5s %10s\n", > - "command", > - "pid", > - "dev", > - "uid", > - "magic"); > - > - /* dev->filelist is sorted youngest first, but we want to present > - * oldest first (i.e. kernel, servers, clients), so walk backwardss. > - */ > - mutex_lock(&dev->filelist_mutex); > - list_for_each_entry_reverse(priv, &dev->filelist, lhead) { > - struct task_struct *task; > - > - rcu_read_lock(); /* locks pid_task()->comm */ > - task = pid_task(priv->pid, PIDTYPE_PID); > - uid = task ? __task_cred(task)->euid : GLOBAL_ROOT_UID; > - seq_printf(m, "%20s %5d %3d %c %c %5d %10u\n", > - task ? task->comm : "<unknown>", > - pid_vnr(priv->pid), > - priv->minor->index, > - drm_is_current_master(priv) ? 'y' : 'n', > - priv->authenticated ? 'y' : 'n', > - from_kuid_munged(seq_user_ns(m), uid), > - priv->magic); > - rcu_read_unlock(); > - } > - mutex_unlock(&dev->filelist_mutex); > - return 0; > -} > - > -static int drm_gem_one_name_info(int id, void *ptr, void *data) > -{ > - struct drm_gem_object *obj = ptr; > - struct seq_file *m = data; > - > - seq_printf(m, "%6d %8zd %7d %8d\n", > - obj->name, obj->size, > - obj->handle_count, > - kref_read(&obj->refcount)); > - return 0; > -} > - > -int drm_gem_name_info(struct seq_file *m, void *data) > -{ > - struct drm_info_node *node = (struct drm_info_node *) m->private; > - struct drm_device *dev = node->minor->dev; > - > - seq_printf(m, " name size handles refcount\n"); > - > - mutex_lock(&dev->object_name_lock); > - idr_for_each(&dev->object_name_idr, drm_gem_one_name_info, m); > - mutex_unlock(&dev->object_name_lock); > - > - return 0; > -} > diff --git a/drivers/gpu/drm/drm_internal.h b/drivers/gpu/drm/drm_internal.h > index 0c4eb4a9ab31..c7a7d7ce5d1c 100644 > --- a/drivers/gpu/drm/drm_internal.h > +++ b/drivers/gpu/drm/drm_internal.h > @@ -56,11 +56,6 @@ void drm_prime_remove_buf_handle_locked(struct drm_prime_file_private *prime_fpr > struct drm_minor *drm_minor_acquire(unsigned int minor_id); > void drm_minor_release(struct drm_minor *minor); > > -/* drm_info.c */ > -int drm_name_info(struct seq_file *m, void *data); > -int drm_clients_info(struct seq_file *m, void* data); > -int drm_gem_name_info(struct seq_file *m, void *data); > - > /* drm_vblank.c */ > void drm_vblank_disable_and_save(struct drm_device *dev, unsigned int pipe); > void drm_vblank_cleanup(struct drm_device *dev); > -- > 2.19.1 > -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel