Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 70ffa16e authored by Jonathan Corbet's avatar Jonathan Corbet
Browse files

drm: cdev lock_kernel() pushdown



Signed-off-by: default avatarJonathan Corbet <corbet@lwn.net>
parent abedd296
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@
#include "drmP.h"
#include "drm_sarea.h"
#include <linux/poll.h>
#include <linux/smp_lock.h>

static int drm_open_helper(struct inode *inode, struct file *filp,
			   struct drm_device * dev);
@@ -174,12 +175,14 @@ int drm_stub_open(struct inode *inode, struct file *filp)

	DRM_DEBUG("\n");

	/* BKL pushdown: note that nothing else serializes idr_find() */
	lock_kernel();
	minor = idr_find(&drm_minors_idr, minor_id);
	if (!minor)
		return -ENODEV;
		goto out;

	if (!(dev = minor->dev))
		return -ENODEV;
		goto out;

	old_fops = filp->f_op;
	filp->f_op = fops_get(&dev->driver->fops);
@@ -189,6 +192,8 @@ int drm_stub_open(struct inode *inode, struct file *filp)
	}
	fops_put(old_fops);

out:
	unlock_kernel();
	return err;
}