diff options
Diffstat (limited to 'drivers/char/n_tty.c')
-rw-r--r-- | drivers/char/n_tty.c | 29 |
1 files changed, 5 insertions, 24 deletions
diff --git a/drivers/char/n_tty.c b/drivers/char/n_tty.c index f6f0e4ec2b51..94a5d5020abc 100644 --- a/drivers/char/n_tty.c +++ b/drivers/char/n_tty.c | |||
@@ -73,24 +73,6 @@ | |||
73 | #define ECHO_OP_SET_CANON_COL 0x81 | 73 | #define ECHO_OP_SET_CANON_COL 0x81 |
74 | #define ECHO_OP_ERASE_TAB 0x82 | 74 | #define ECHO_OP_ERASE_TAB 0x82 |
75 | 75 | ||
76 | static inline unsigned char *alloc_buf(void) | ||
77 | { | ||
78 | gfp_t prio = in_interrupt() ? GFP_ATOMIC : GFP_KERNEL; | ||
79 | |||
80 | if (PAGE_SIZE != N_TTY_BUF_SIZE) | ||
81 | return kmalloc(N_TTY_BUF_SIZE, prio); | ||
82 | else | ||
83 | return (unsigned char *)__get_free_page(prio); | ||
84 | } | ||
85 | |||
86 | static inline void free_buf(unsigned char *buf) | ||
87 | { | ||
88 | if (PAGE_SIZE != N_TTY_BUF_SIZE) | ||
89 | kfree(buf); | ||
90 | else | ||
91 | free_page((unsigned long) buf); | ||
92 | } | ||
93 | |||
94 | static inline int tty_put_user(struct tty_struct *tty, unsigned char x, | 76 | static inline int tty_put_user(struct tty_struct *tty, unsigned char x, |
95 | unsigned char __user *ptr) | 77 | unsigned char __user *ptr) |
96 | { | 78 | { |
@@ -1558,11 +1540,11 @@ static void n_tty_close(struct tty_struct *tty) | |||
1558 | { | 1540 | { |
1559 | n_tty_flush_buffer(tty); | 1541 | n_tty_flush_buffer(tty); |
1560 | if (tty->read_buf) { | 1542 | if (tty->read_buf) { |
1561 | free_buf(tty->read_buf); | 1543 | kfree(tty->read_buf); |
1562 | tty->read_buf = NULL; | 1544 | tty->read_buf = NULL; |
1563 | } | 1545 | } |
1564 | if (tty->echo_buf) { | 1546 | if (tty->echo_buf) { |
1565 | free_buf(tty->echo_buf); | 1547 | kfree(tty->echo_buf); |
1566 | tty->echo_buf = NULL; | 1548 | tty->echo_buf = NULL; |
1567 | } | 1549 | } |
1568 | } | 1550 | } |
@@ -1584,17 +1566,16 @@ static int n_tty_open(struct tty_struct *tty) | |||
1584 | 1566 | ||
1585 | /* These are ugly. Currently a malloc failure here can panic */ | 1567 | /* These are ugly. Currently a malloc failure here can panic */ |
1586 | if (!tty->read_buf) { | 1568 | if (!tty->read_buf) { |
1587 | tty->read_buf = alloc_buf(); | 1569 | tty->read_buf = kzalloc(N_TTY_BUF_SIZE, GFP_KERNEL); |
1588 | if (!tty->read_buf) | 1570 | if (!tty->read_buf) |
1589 | return -ENOMEM; | 1571 | return -ENOMEM; |
1590 | } | 1572 | } |
1591 | if (!tty->echo_buf) { | 1573 | if (!tty->echo_buf) { |
1592 | tty->echo_buf = alloc_buf(); | 1574 | tty->echo_buf = kzalloc(N_TTY_BUF_SIZE, GFP_KERNEL); |
1575 | |||
1593 | if (!tty->echo_buf) | 1576 | if (!tty->echo_buf) |
1594 | return -ENOMEM; | 1577 | return -ENOMEM; |
1595 | } | 1578 | } |
1596 | memset(tty->read_buf, 0, N_TTY_BUF_SIZE); | ||
1597 | memset(tty->echo_buf, 0, N_TTY_BUF_SIZE); | ||
1598 | reset_buffer_flags(tty); | 1579 | reset_buffer_flags(tty); |
1599 | tty->column = 0; | 1580 | tty->column = 0; |
1600 | n_tty_set_termios(tty, NULL); | 1581 | n_tty_set_termios(tty, NULL); |