On Wed, Jul 10, 2013 at 02:12:10PM +0200, Daniel Vetter wrote: > We not only have debugfs files to do pretty much the equivalent of > lsof, we also have an ioctl. Not that compared to lsof this dumps a > wee bit more information, but we can still get at that from debugfs > easily. > > I've dug around in mesa, libdrm and ddx histories and the only users > seem to be drm/tests/dristat.c and drm/tests/getclients.c. The later > is a testcase for the ioctl itself since up to > > commit b018fcdaa5e8b4eabb8cffda687d00004a3c4785 > Author: Eric Anholt <eric@xxxxxxxxxx> > Date: Thu Nov 22 18:46:54 2007 +1000 > > drm: Make DRM_IOCTL_GET_CLIENT return EINVAL when it can't find client #idx > > there was actually no way at all for userspace to enumerate all > clients since the kernel just wouldn't tell it when to stop. Which > completely broke it's only user, dristat -c. > > So obviously that ioctl wasn't much use for debugging. Hence I don't > see any point in keeping support for a tool which was pretty obviously > never really used, and while we have good replacements in the form of > equivalent debugfs files. > > Still, to keep dristat -c from looping forever again stop it early by > returning an unconditional -EINVAL. Also add a comment in the code > about why. > > Cc: Eric Anholt <eric@xxxxxxxxxx> > Signed-off-by: Daniel Vetter <daniel.vetter@xxxxxxxx> libva for the rescue (or not)! Thanks to a patch floating by on libva I've noticed that libva's dri loader used the GET_CLIENT ioctl to *drumroll* check whether it's authenticated. I can't even grasp that part, but in any case this patch here just died in it's current form :( I'll figure out whether there's some fun way to keep the hollowed-out ioclt without breaking existing userspace, but probably not worth the fuzz. -Daniel > --- > drivers/gpu/drm/drm_ioctl.c | 27 ++++----------------------- > 1 file changed, 4 insertions(+), 23 deletions(-) > > diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c > index 0acf080..5159fa0 100644 > --- a/drivers/gpu/drm/drm_ioctl.c > +++ b/drivers/gpu/drm/drm_ioctl.c > @@ -216,29 +216,10 @@ int drm_getmap(struct drm_device *dev, void *data, > int drm_getclient(struct drm_device *dev, void *data, > struct drm_file *file_priv) > { > - struct drm_client *client = data; > - struct drm_file *pt; > - int idx; > - int i; > - > - idx = client->idx; > - i = 0; > - > - mutex_lock(&dev->struct_mutex); > - list_for_each_entry(pt, &dev->filelist, lhead) { > - if (i++ >= idx) { > - client->auth = pt->authenticated; > - client->pid = pid_vnr(pt->pid); > - client->uid = from_kuid_munged(current_user_ns(), pt->uid); > - client->magic = pt->magic; > - client->iocs = pt->ioctl_count; > - mutex_unlock(&dev->struct_mutex); > - > - return 0; > - } > - } > - mutex_unlock(&dev->struct_mutex); > - > + /* Hollowed-out getclient ioctl to keep some dead old drm tests/tools > + * not breaking completely. Userspace tools stop enumerating one they > + * get -EINVAL, hence this is the return value we need to hand back for > + * no clients tracked. */ > return -EINVAL; > } > > -- > 1.8.3.2 > -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel