n_tty: clean up old code to follow coding style and (mostly) checkpatch
Signed-off-by: Alan Cox <alan@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
db1acaa632
Коммит
4edf1827ea
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* n_tty.c --- implements the N_TTY line discipline.
|
||||
*
|
||||
*
|
||||
* This code used to be in tty_io.c, but things are getting hairy
|
||||
* enough that it made sense to split things off. (The N_TTY
|
||||
* processing has changed so much that it's hardly recognizable,
|
||||
|
@ -8,19 +8,19 @@
|
|||
*
|
||||
* Note that the open routine for N_TTY is guaranteed never to return
|
||||
* an error. This is because Linux will fall back to setting a line
|
||||
* to N_TTY if it can not switch to any other line discipline.
|
||||
* to N_TTY if it can not switch to any other line discipline.
|
||||
*
|
||||
* Written by Theodore Ts'o, Copyright 1994.
|
||||
*
|
||||
*
|
||||
* This file also contains code originally written by Linus Torvalds,
|
||||
* Copyright 1991, 1992, 1993, and by Julian Cowley, Copyright 1994.
|
||||
*
|
||||
*
|
||||
* This file may be redistributed under the terms of the GNU General Public
|
||||
* License.
|
||||
*
|
||||
* Reduced memory usage for older ARM systems - Russell King.
|
||||
*
|
||||
* 2000/01/20 Fixed SMP locking on put_tty_queue using bits of
|
||||
* 2000/01/20 Fixed SMP locking on put_tty_queue using bits of
|
||||
* the patch by Andrew J. Kroll <ag784@freenet.buffalo.edu>
|
||||
* who actually finally proved there really was a race.
|
||||
*
|
||||
|
@ -144,11 +144,11 @@ static void put_tty_queue(unsigned char c, struct tty_struct *tty)
|
|||
* Can sleep, may be called under the atomic_read_lock mutex but
|
||||
* this is not guaranteed.
|
||||
*/
|
||||
|
||||
static void check_unthrottle(struct tty_struct * tty)
|
||||
|
||||
static void check_unthrottle(struct tty_struct *tty)
|
||||
{
|
||||
if (tty->count &&
|
||||
test_and_clear_bit(TTY_THROTTLED, &tty->flags) &&
|
||||
test_and_clear_bit(TTY_THROTTLED, &tty->flags) &&
|
||||
tty->driver->unthrottle)
|
||||
tty->driver->unthrottle(tty);
|
||||
}
|
||||
|
@ -157,7 +157,7 @@ static void check_unthrottle(struct tty_struct * tty)
|
|||
* reset_buffer_flags - reset buffer state
|
||||
* @tty: terminal to reset
|
||||
*
|
||||
* Reset the read buffer counters, clear the flags,
|
||||
* Reset the read buffer counters, clear the flags,
|
||||
* and make sure the driver is unthrottled. Called
|
||||
* from n_tty_open() and n_tty_flush_buffer().
|
||||
*/
|
||||
|
@ -186,12 +186,12 @@ static void reset_buffer_flags(struct tty_struct *tty)
|
|||
* FIXME: tty->ctrl_status is not spinlocked and relies on
|
||||
* lock_kernel() still.
|
||||
*/
|
||||
|
||||
static void n_tty_flush_buffer(struct tty_struct * tty)
|
||||
|
||||
static void n_tty_flush_buffer(struct tty_struct *tty)
|
||||
{
|
||||
/* clear everything and unthrottle the driver */
|
||||
reset_buffer_flags(tty);
|
||||
|
||||
|
||||
if (!tty->link)
|
||||
return;
|
||||
|
||||
|
@ -206,9 +206,9 @@ static void n_tty_flush_buffer(struct tty_struct * tty)
|
|||
* @tty: tty device
|
||||
*
|
||||
* Report the number of characters buffered to be delivered to user
|
||||
* at this instant in time.
|
||||
* at this instant in time.
|
||||
*/
|
||||
|
||||
|
||||
static ssize_t n_tty_chars_in_buffer(struct tty_struct *tty)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
@ -234,7 +234,7 @@ static ssize_t n_tty_chars_in_buffer(struct tty_struct *tty)
|
|||
* character. We use this to correctly compute the on screen size
|
||||
* of the character when printing
|
||||
*/
|
||||
|
||||
|
||||
static inline int is_utf8_continuation(unsigned char c)
|
||||
{
|
||||
return (c & 0xc0) == 0x80;
|
||||
|
@ -247,7 +247,7 @@ static inline int is_utf8_continuation(unsigned char c)
|
|||
* Returns true if the utf8 character 'c' is a multibyte continuation
|
||||
* character and the terminal is in unicode mode.
|
||||
*/
|
||||
|
||||
|
||||
static inline int is_continuation(unsigned char c, struct tty_struct *tty)
|
||||
{
|
||||
return I_IUTF8(tty) && is_utf8_continuation(c);
|
||||
|
@ -266,7 +266,7 @@ static inline int is_continuation(unsigned char c, struct tty_struct *tty)
|
|||
* Called from both the receive and transmit sides and can be called
|
||||
* re-entrantly. Relies on lock_kernel() still.
|
||||
*/
|
||||
|
||||
|
||||
static int opost(unsigned char c, struct tty_struct *tty)
|
||||
{
|
||||
int space, spaces;
|
||||
|
@ -339,9 +339,9 @@ static int opost(unsigned char c, struct tty_struct *tty)
|
|||
*
|
||||
* Called from write_chan under the tty layer write lock.
|
||||
*/
|
||||
|
||||
static ssize_t opost_block(struct tty_struct * tty,
|
||||
const unsigned char * buf, unsigned int nr)
|
||||
|
||||
static ssize_t opost_block(struct tty_struct *tty,
|
||||
const unsigned char *buf, unsigned int nr)
|
||||
{
|
||||
int space;
|
||||
int i;
|
||||
|
@ -386,7 +386,7 @@ static ssize_t opost_block(struct tty_struct * tty,
|
|||
break_out:
|
||||
if (tty->driver->flush_chars)
|
||||
tty->driver->flush_chars(tty);
|
||||
i = tty->driver->write(tty, buf, i);
|
||||
i = tty->driver->write(tty, buf, i);
|
||||
return i;
|
||||
}
|
||||
|
||||
|
@ -398,7 +398,7 @@ break_out:
|
|||
*
|
||||
* Queue a byte to the driver layer for output
|
||||
*/
|
||||
|
||||
|
||||
static inline void put_char(unsigned char c, struct tty_struct *tty)
|
||||
{
|
||||
tty->driver->put_char(tty, c);
|
||||
|
@ -409,7 +409,7 @@ static inline void put_char(unsigned char c, struct tty_struct *tty)
|
|||
* @c: unicode byte to echo
|
||||
* @tty: terminal device
|
||||
*
|
||||
* Echo user input back onto the screen. This must be called only when
|
||||
* Echo user input back onto the screen. This must be called only when
|
||||
* L_ECHO(tty) is true. Called from the driver receive_buf path.
|
||||
*/
|
||||
|
||||
|
@ -441,7 +441,7 @@ static inline void finish_erasing(struct tty_struct *tty)
|
|||
* present in the stream from the driver layer. Handles the complexities
|
||||
* of UTF-8 multibyte symbols.
|
||||
*/
|
||||
|
||||
|
||||
static void eraser(unsigned char c, struct tty_struct *tty)
|
||||
{
|
||||
enum { ERASE, WERASE, KILL } kill_type;
|
||||
|
@ -541,7 +541,7 @@ static void eraser(unsigned char c, struct tty_struct *tty)
|
|||
|
||||
/* should never happen */
|
||||
if (tty->column > 0x80000000)
|
||||
tty->column = 0;
|
||||
tty->column = 0;
|
||||
|
||||
/* Now backup to that column. */
|
||||
while (tty->column > col) {
|
||||
|
@ -585,7 +585,7 @@ static void eraser(unsigned char c, struct tty_struct *tty)
|
|||
* settings and character used. Called from the driver receive_buf
|
||||
* path so serialized.
|
||||
*/
|
||||
|
||||
|
||||
static inline void isig(int sig, struct tty_struct *tty, int flush)
|
||||
{
|
||||
if (tty->pgrp)
|
||||
|
@ -606,7 +606,7 @@ static inline void isig(int sig, struct tty_struct *tty, int flush)
|
|||
*
|
||||
* Called from the receive_buf path so single threaded.
|
||||
*/
|
||||
|
||||
|
||||
static inline void n_tty_receive_break(struct tty_struct *tty)
|
||||
{
|
||||
if (I_IGNBRK(tty))
|
||||
|
@ -635,7 +635,7 @@ static inline void n_tty_receive_break(struct tty_struct *tty)
|
|||
* need locking as num_overrun and overrun_time are function
|
||||
* private.
|
||||
*/
|
||||
|
||||
|
||||
static inline void n_tty_receive_overrun(struct tty_struct *tty)
|
||||
{
|
||||
char buf[64];
|
||||
|
@ -662,9 +662,8 @@ static inline void n_tty_receive_overrun(struct tty_struct *tty)
|
|||
static inline void n_tty_receive_parity_error(struct tty_struct *tty,
|
||||
unsigned char c)
|
||||
{
|
||||
if (I_IGNPAR(tty)) {
|
||||
if (I_IGNPAR(tty))
|
||||
return;
|
||||
}
|
||||
if (I_PARMRK(tty)) {
|
||||
put_tty_queue('\377', tty);
|
||||
put_tty_queue('\0', tty);
|
||||
|
@ -682,7 +681,7 @@ static inline void n_tty_receive_parity_error(struct tty_struct *tty,
|
|||
* @c: character
|
||||
*
|
||||
* Process an individual character of input received from the driver.
|
||||
* This is serialized with respect to itself by the rules for the
|
||||
* This is serialized with respect to itself by the rules for the
|
||||
* driver above.
|
||||
*/
|
||||
|
||||
|
@ -694,7 +693,7 @@ static inline void n_tty_receive_char(struct tty_struct *tty, unsigned char c)
|
|||
put_tty_queue(c, tty);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (I_ISTRIP(tty))
|
||||
c &= 0x7f;
|
||||
if (I_IUCLC(tty) && L_IEXTEN(tty))
|
||||
|
@ -739,7 +738,7 @@ static inline void n_tty_receive_char(struct tty_struct *tty, unsigned char c)
|
|||
put_tty_queue(c, tty);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (c == '\r') {
|
||||
if (I_IGNCR(tty))
|
||||
return;
|
||||
|
@ -825,8 +824,8 @@ send_signal:
|
|||
goto handle_newline;
|
||||
}
|
||||
if (c == EOF_CHAR(tty)) {
|
||||
if (tty->canon_head != tty->read_head)
|
||||
set_bit(TTY_PUSH, &tty->flags);
|
||||
if (tty->canon_head != tty->read_head)
|
||||
set_bit(TTY_PUSH, &tty->flags);
|
||||
c = __DISABLED_CHAR;
|
||||
goto handle_newline;
|
||||
}
|
||||
|
@ -850,7 +849,7 @@ send_signal:
|
|||
if (I_PARMRK(tty) && c == (unsigned char) '\377')
|
||||
put_tty_queue(c, tty);
|
||||
|
||||
handle_newline:
|
||||
handle_newline:
|
||||
spin_lock_irqsave(&tty->read_lock, flags);
|
||||
set_bit(tty->read_head, tty->read_flags);
|
||||
put_tty_queue_nolock(c, tty);
|
||||
|
@ -863,7 +862,7 @@ send_signal:
|
|||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
finish_erasing(tty);
|
||||
if (L_ECHO(tty)) {
|
||||
if (tty->read_cnt >= N_TTY_BUF_SIZE-1) {
|
||||
|
@ -884,7 +883,7 @@ send_signal:
|
|||
put_tty_queue(c, tty);
|
||||
|
||||
put_tty_queue(c, tty);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
@ -898,12 +897,10 @@ send_signal:
|
|||
|
||||
static void n_tty_write_wakeup(struct tty_struct *tty)
|
||||
{
|
||||
if (tty->fasync)
|
||||
{
|
||||
set_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
|
||||
if (tty->fasync) {
|
||||
set_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
|
||||
kill_fasync(&tty->fasync, SIGIO, POLL_OUT);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -918,7 +915,7 @@ static void n_tty_write_wakeup(struct tty_struct *tty)
|
|||
* not from interrupt context. The driver is responsible for making
|
||||
* calls one at a time and in order (or using flush_to_ldisc)
|
||||
*/
|
||||
|
||||
|
||||
static void n_tty_receive_buf(struct tty_struct *tty, const unsigned char *cp,
|
||||
char *fp, int count)
|
||||
{
|
||||
|
@ -950,7 +947,7 @@ static void n_tty_receive_buf(struct tty_struct *tty, const unsigned char *cp,
|
|||
tty->read_cnt += i;
|
||||
spin_unlock_irqrestore(&tty->read_lock, cpuflags);
|
||||
} else {
|
||||
for (i=count, p = cp, f = fp; i; i--, p++) {
|
||||
for (i = count, p = cp, f = fp; i; i--, p++) {
|
||||
if (f)
|
||||
flags = *f++;
|
||||
switch (flags) {
|
||||
|
@ -968,7 +965,7 @@ static void n_tty_receive_buf(struct tty_struct *tty, const unsigned char *cp,
|
|||
n_tty_receive_overrun(tty);
|
||||
break;
|
||||
default:
|
||||
printk("%s: unknown flag %d\n",
|
||||
printk(KERN_ERR "%s: unknown flag %d\n",
|
||||
tty_name(tty, buf), flags);
|
||||
break;
|
||||
}
|
||||
|
@ -1001,7 +998,7 @@ static void n_tty_receive_buf(struct tty_struct *tty, const unsigned char *cp,
|
|||
int is_ignored(int sig)
|
||||
{
|
||||
return (sigismember(¤t->blocked, sig) ||
|
||||
current->sighand->action[sig-1].sa.sa_handler == SIG_IGN);
|
||||
current->sighand->action[sig-1].sa.sa_handler == SIG_IGN);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1011,16 +1008,16 @@ int is_ignored(int sig)
|
|||
*
|
||||
* Called by the tty layer when the user changes termios flags so
|
||||
* that the line discipline can plan ahead. This function cannot sleep
|
||||
* and is protected from re-entry by the tty layer. The user is
|
||||
* and is protected from re-entry by the tty layer. The user is
|
||||
* guaranteed that this function will not be re-entered or in progress
|
||||
* when the ldisc is closed.
|
||||
*/
|
||||
|
||||
static void n_tty_set_termios(struct tty_struct *tty, struct ktermios * old)
|
||||
|
||||
static void n_tty_set_termios(struct tty_struct *tty, struct ktermios *old)
|
||||
{
|
||||
if (!tty)
|
||||
return;
|
||||
|
||||
|
||||
tty->icanon = (L_ICANON(tty) != 0);
|
||||
if (test_bit(TTY_HW_COOK_IN, &tty->flags)) {
|
||||
tty->raw = 1;
|
||||
|
@ -1085,12 +1082,12 @@ static void n_tty_set_termios(struct tty_struct *tty, struct ktermios * old)
|
|||
* n_tty_close - close the ldisc for this tty
|
||||
* @tty: device
|
||||
*
|
||||
* Called from the terminal layer when this line discipline is
|
||||
* being shut down, either because of a close or becsuse of a
|
||||
* Called from the terminal layer when this line discipline is
|
||||
* being shut down, either because of a close or becsuse of a
|
||||
* discipline change. The function will not be called while other
|
||||
* ldisc methods are in progress.
|
||||
*/
|
||||
|
||||
|
||||
static void n_tty_close(struct tty_struct *tty)
|
||||
{
|
||||
n_tty_flush_buffer(tty);
|
||||
|
@ -1104,7 +1101,7 @@ static void n_tty_close(struct tty_struct *tty)
|
|||
* n_tty_open - open an ldisc
|
||||
* @tty: terminal to open
|
||||
*
|
||||
* Called when this line discipline is being attached to the
|
||||
* Called when this line discipline is being attached to the
|
||||
* terminal device. Can sleep. Called serialized so that no
|
||||
* other events will occur in parallel. No further open will occur
|
||||
* until a close.
|
||||
|
@ -1157,7 +1154,7 @@ static inline int input_available_p(struct tty_struct *tty, int amt)
|
|||
* Called under the tty->atomic_read_lock sem
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
static int copy_from_read_buf(struct tty_struct *tty,
|
||||
unsigned char __user **b,
|
||||
size_t *nr)
|
||||
|
@ -1186,7 +1183,8 @@ static int copy_from_read_buf(struct tty_struct *tty,
|
|||
return retval;
|
||||
}
|
||||
|
||||
extern ssize_t redirected_tty_write(struct file *,const char *,size_t,loff_t *);
|
||||
extern ssize_t redirected_tty_write(struct file *, const char *,
|
||||
size_t, loff_t *);
|
||||
|
||||
/**
|
||||
* job_control - check job control
|
||||
|
@ -1194,10 +1192,10 @@ extern ssize_t redirected_tty_write(struct file *,const char *,size_t,loff_t *);
|
|||
* @file: file handle
|
||||
*
|
||||
* Perform job control management checks on this file/tty descriptor
|
||||
* and if appropriate send any needed signals and return a negative
|
||||
* and if appropriate send any needed signals and return a negative
|
||||
* error code if action should be taken.
|
||||
*/
|
||||
|
||||
|
||||
static int job_control(struct tty_struct *tty, struct file *file)
|
||||
{
|
||||
/* Job control check -- must be done at start and after
|
||||
|
@ -1208,7 +1206,7 @@ static int job_control(struct tty_struct *tty, struct file *file)
|
|||
if (file->f_op->write != redirected_tty_write &&
|
||||
current->signal->tty == tty) {
|
||||
if (!tty->pgrp)
|
||||
printk("read_chan: no tty->pgrp!\n");
|
||||
printk(KERN_ERR "read_chan: no tty->pgrp!\n");
|
||||
else if (task_pgrp(current) != tty->pgrp) {
|
||||
if (is_ignored(SIGTTIN) ||
|
||||
is_current_pgrp_orphaned())
|
||||
|
@ -1220,7 +1218,7 @@ static int job_control(struct tty_struct *tty, struct file *file)
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* read_chan - read function for tty
|
||||
|
@ -1236,7 +1234,7 @@ static int job_control(struct tty_struct *tty, struct file *file)
|
|||
*
|
||||
* This code must be sure never to sleep through a hangup.
|
||||
*/
|
||||
|
||||
|
||||
static ssize_t read_chan(struct tty_struct *tty, struct file *file,
|
||||
unsigned char __user *buf, size_t nr)
|
||||
{
|
||||
|
@ -1252,14 +1250,14 @@ static ssize_t read_chan(struct tty_struct *tty, struct file *file,
|
|||
do_it_again:
|
||||
|
||||
if (!tty->read_buf) {
|
||||
printk("n_tty_read_chan: called with read_buf == NULL?!?\n");
|
||||
printk(KERN_ERR "n_tty_read_chan: read_buf == NULL?!?\n");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
c = job_control(tty, file);
|
||||
if(c < 0)
|
||||
if (c < 0)
|
||||
return c;
|
||||
|
||||
|
||||
minimum = time = 0;
|
||||
timeout = MAX_SCHEDULE_TIMEOUT;
|
||||
if (!tty->icanon) {
|
||||
|
@ -1287,8 +1285,7 @@ do_it_again:
|
|||
if (file->f_flags & O_NONBLOCK) {
|
||||
if (!mutex_trylock(&tty->atomic_read_lock))
|
||||
return -EAGAIN;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
if (mutex_lock_interruptible(&tty->atomic_read_lock))
|
||||
return -ERESTARTSYS;
|
||||
}
|
||||
|
@ -1314,11 +1311,11 @@ do_it_again:
|
|||
so that any interrupt will set the state back to
|
||||
TASK_RUNNING. */
|
||||
set_current_state(TASK_INTERRUPTIBLE);
|
||||
|
||||
|
||||
if (((minimum - (b - buf)) < tty->minimum_to_wake) &&
|
||||
((minimum - (b - buf)) >= 1))
|
||||
tty->minimum_to_wake = (minimum - (b - buf));
|
||||
|
||||
|
||||
if (!input_available_p(tty, 0)) {
|
||||
if (test_bit(TTY_OTHER_CLOSED, &tty->flags)) {
|
||||
retval = -EIO;
|
||||
|
@ -1355,7 +1352,7 @@ do_it_again:
|
|||
if (tty->icanon) {
|
||||
/* N.B. avoid overrun if nr == 0 */
|
||||
while (nr && tty->read_cnt) {
|
||||
int eol;
|
||||
int eol;
|
||||
|
||||
eol = test_and_clear_bit(tty->read_tail,
|
||||
tty->read_flags);
|
||||
|
@ -1427,7 +1424,7 @@ do_it_again:
|
|||
if (size) {
|
||||
retval = size;
|
||||
if (nr)
|
||||
clear_bit(TTY_PUSH, &tty->flags);
|
||||
clear_bit(TTY_PUSH, &tty->flags);
|
||||
} else if (test_and_clear_bit(TTY_PUSH, &tty->flags))
|
||||
goto do_it_again;
|
||||
|
||||
|
@ -1450,9 +1447,9 @@ do_it_again:
|
|||
*
|
||||
* This code must be sure never to sleep through a hangup.
|
||||
*/
|
||||
|
||||
static ssize_t write_chan(struct tty_struct * tty, struct file * file,
|
||||
const unsigned char * buf, size_t nr)
|
||||
|
||||
static ssize_t write_chan(struct tty_struct *tty, struct file *file,
|
||||
const unsigned char *buf, size_t nr)
|
||||
{
|
||||
const unsigned char *b = buf;
|
||||
DECLARE_WAITQUEUE(wait, current);
|
||||
|
@ -1542,8 +1539,9 @@ break_out:
|
|||
* recompute the new limits. Possibly set_termios should issue
|
||||
* a read wakeup to fix this bug.
|
||||
*/
|
||||
|
||||
static unsigned int normal_poll(struct tty_struct * tty, struct file * file, poll_table *wait)
|
||||
|
||||
static unsigned int normal_poll(struct tty_struct *tty, struct file *file,
|
||||
poll_table *wait)
|
||||
{
|
||||
unsigned int mask = 0;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче