mirror of https://gitee.com/openkylin/linux.git
drm: Merge drm_info.c into drm_debugfs.c
Ever since
commit cb6458f97b
Author: Daniel Vetter <daniel.vetter@ffwll.ch>
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@redhat.com>
Reviewed-by: Lyude Paul <lyude@redhat.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20181121213510.31260-1-daniel.vetter@ffwll.ch
This commit is contained in:
parent
42843dc2d5
commit
c6fdea6e1a
|
@ -10,7 +10,7 @@ drm-y := drm_auth.o drm_bufs.o drm_cache.o \
|
||||||
drm_scatter.o drm_pci.o \
|
drm_scatter.o drm_pci.o \
|
||||||
drm_sysfs.o drm_hashtab.o drm_mm.o \
|
drm_sysfs.o drm_hashtab.o drm_mm.o \
|
||||||
drm_crtc.o drm_fourcc.o drm_modes.o drm_edid.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_trace_points.o drm_global.o drm_prime.o \
|
||||||
drm_rect.o drm_vma_manager.o drm_flip_work.o \
|
drm_rect.o drm_vma_manager.o drm_flip_work.o \
|
||||||
drm_modeset_lock.o drm_atomic.o drm_bridge.o \
|
drm_modeset_lock.o drm_atomic.o drm_bridge.o \
|
||||||
|
|
|
@ -32,6 +32,8 @@
|
||||||
#include <drm/drm_debugfs.h>
|
#include <drm/drm_debugfs.h>
|
||||||
#include <drm/drm_edid.h>
|
#include <drm/drm_edid.h>
|
||||||
#include <drm/drm_atomic.h>
|
#include <drm/drm_atomic.h>
|
||||||
|
#include <drm/drm_auth.h>
|
||||||
|
#include <drm/drm_gem.h>
|
||||||
#include <drm/drmP.h>
|
#include <drm/drmP.h>
|
||||||
|
|
||||||
#include "drm_internal.h"
|
#include "drm_internal.h"
|
||||||
|
@ -43,6 +45,93 @@
|
||||||
* Initialization, etc.
|
* 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[] = {
|
static const struct drm_info_list drm_debugfs_list[] = {
|
||||||
{"name", drm_name_info, 0},
|
{"name", drm_name_info, 0},
|
||||||
{"clients", drm_clients_info, 0},
|
{"clients", drm_clients_info, 0},
|
||||||
|
|
|
@ -1,137 +0,0 @@
|
||||||
/**
|
|
||||||
* \file drm_info.c
|
|
||||||
* DRM info file implementations
|
|
||||||
*
|
|
||||||
* \author Ben Gamari <bgamari@gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Created: Sun Dec 21 13:09:50 2008 by bgamari@gmail.com
|
|
||||||
*
|
|
||||||
* Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
|
|
||||||
* Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
|
|
||||||
* Copyright 2008 Ben Gamari <bgamari@gmail.com>
|
|
||||||
* 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;
|
|
||||||
}
|
|
|
@ -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);
|
struct drm_minor *drm_minor_acquire(unsigned int minor_id);
|
||||||
void drm_minor_release(struct drm_minor *minor);
|
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 */
|
/* drm_vblank.c */
|
||||||
void drm_vblank_disable_and_save(struct drm_device *dev, unsigned int pipe);
|
void drm_vblank_disable_and_save(struct drm_device *dev, unsigned int pipe);
|
||||||
void drm_vblank_cleanup(struct drm_device *dev);
|
void drm_vblank_cleanup(struct drm_device *dev);
|
||||||
|
|
Loading…
Reference in New Issue