96fd7ce58f
The tty code should be in its own subdirectory and not in the char driver with all of the cruft that is currently there. Based on work done by Arnd Bergmann <arnd@arndb.de> Acked-by: Arnd Bergmann <arnd@arndb.de> Cc: Jiri Slaby <jslaby@suse.cz> Cc: Alan Cox <alan@lxorguk.ukuu.org.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
48 lines
1000 B
C
48 lines
1000 B
C
/*
|
|
* drivers/char/tty_lock.c
|
|
*/
|
|
#include <linux/tty.h>
|
|
#include <linux/module.h>
|
|
#include <linux/kallsyms.h>
|
|
#include <linux/semaphore.h>
|
|
#include <linux/sched.h>
|
|
|
|
/*
|
|
* The 'big tty mutex'
|
|
*
|
|
* This mutex is taken and released by tty_lock() and tty_unlock(),
|
|
* replacing the older big kernel lock.
|
|
* It can no longer be taken recursively, and does not get
|
|
* released implicitly while sleeping.
|
|
*
|
|
* Don't use in new code.
|
|
*/
|
|
static DEFINE_MUTEX(big_tty_mutex);
|
|
struct task_struct *__big_tty_mutex_owner;
|
|
EXPORT_SYMBOL_GPL(__big_tty_mutex_owner);
|
|
|
|
/*
|
|
* Getting the big tty mutex.
|
|
*/
|
|
void __lockfunc tty_lock(void)
|
|
{
|
|
struct task_struct *task = current;
|
|
|
|
WARN_ON(__big_tty_mutex_owner == task);
|
|
|
|
mutex_lock(&big_tty_mutex);
|
|
__big_tty_mutex_owner = task;
|
|
}
|
|
EXPORT_SYMBOL(tty_lock);
|
|
|
|
void __lockfunc tty_unlock(void)
|
|
{
|
|
struct task_struct *task = current;
|
|
|
|
WARN_ON(__big_tty_mutex_owner != task);
|
|
__big_tty_mutex_owner = NULL;
|
|
|
|
mutex_unlock(&big_tty_mutex);
|
|
}
|
|
EXPORT_SYMBOL(tty_unlock);
|