Lines Matching refs:ldata

128 static inline size_t read_cnt(struct n_tty_data *ldata)  in read_cnt()  argument
130 return ldata->read_head - ldata->read_tail; in read_cnt()
133 static inline u8 read_buf(struct n_tty_data *ldata, size_t i) in read_buf() argument
135 return ldata->read_buf[MASK(i)]; in read_buf()
138 static inline u8 *read_buf_addr(struct n_tty_data *ldata, size_t i) in read_buf_addr() argument
140 return &ldata->read_buf[MASK(i)]; in read_buf_addr()
143 static inline u8 echo_buf(struct n_tty_data *ldata, size_t i) in echo_buf() argument
146 return ldata->echo_buf[MASK(i)]; in echo_buf()
149 static inline u8 *echo_buf_addr(struct n_tty_data *ldata, size_t i) in echo_buf_addr() argument
151 return &ldata->echo_buf[MASK(i)]; in echo_buf_addr()
164 struct n_tty_data *ldata = tty->disc_data; in tty_copy() local
166 void *from = read_buf_addr(ldata, tail); in tty_copy()
174 from = ldata->read_buf; in tty_copy()
195 struct n_tty_data *ldata = tty->disc_data; in n_tty_kick_worker() local
198 if (unlikely(READ_ONCE(ldata->no_room))) { in n_tty_kick_worker()
199 WRITE_ONCE(ldata->no_room, 0); in n_tty_kick_worker()
215 const struct n_tty_data *ldata = tty->disc_data; in chars_in_buffer() local
216 size_t head = ldata->icanon ? ldata->canon_head : ldata->commit_head; in chars_in_buffer()
218 return head - ldata->read_tail; in chars_in_buffer()
236 struct n_tty_data *ldata = tty->disc_data; in n_tty_check_throttle() local
243 if (ldata->icanon && ldata->canon_head == ldata->read_tail) in n_tty_check_throttle()
248 if (N_TTY_BUF_SIZE - read_cnt(ldata) >= TTY_THRESHOLD_THROTTLE) in n_tty_check_throttle()
295 static inline void put_tty_queue(u8 c, struct n_tty_data *ldata) in put_tty_queue() argument
297 *read_buf_addr(ldata, ldata->read_head) = c; in put_tty_queue()
298 ldata->read_head++; in put_tty_queue()
312 static void reset_buffer_flags(struct n_tty_data *ldata) in reset_buffer_flags() argument
314 ldata->read_head = ldata->canon_head = ldata->read_tail = 0; in reset_buffer_flags()
315 ldata->commit_head = 0; in reset_buffer_flags()
316 ldata->line_start = 0; in reset_buffer_flags()
318 ldata->erasing = 0; in reset_buffer_flags()
319 bitmap_zero(ldata->read_flags, N_TTY_BUF_SIZE); in reset_buffer_flags()
320 ldata->push = 0; in reset_buffer_flags()
322 ldata->lookahead_count = 0; in reset_buffer_flags()
404 struct n_tty_data *ldata = tty->disc_data; in do_output_char() local
413 ldata->column = 0; in do_output_char()
417 ldata->canon_column = ldata->column = 0; in do_output_char()
421 ldata->canon_column = ldata->column; in do_output_char()
424 if (O_ONOCR(tty) && ldata->column == 0) in do_output_char()
429 ldata->canon_column = ldata->column = 0; in do_output_char()
432 ldata->canon_column = ldata->column = 0; in do_output_char()
435 spaces = 8 - (ldata->column & 7); in do_output_char()
439 ldata->column += spaces; in do_output_char()
443 ldata->column += spaces; in do_output_char()
446 if (ldata->column > 0) in do_output_char()
447 ldata->column--; in do_output_char()
454 ldata->column++; in do_output_char()
478 struct n_tty_data *ldata = tty->disc_data; in process_output() local
480 guard(mutex)(&ldata->output_lock); in process_output()
509 struct n_tty_data *ldata = tty->disc_data; in process_output_block() local
513 guard(mutex)(&ldata->output_lock); in process_output_block()
528 ldata->column = 0; in process_output_block()
531 ldata->canon_column = ldata->column; in process_output_block()
534 if (O_ONOCR(tty) && ldata->column == 0) in process_output_block()
538 ldata->canon_column = ldata->column = 0; in process_output_block()
543 if (ldata->column > 0) in process_output_block()
544 ldata->column--; in process_output_block()
551 ldata->column++; in process_output_block()
563 struct n_tty_data *ldata = tty->disc_data; in n_tty_process_echo_ops() local
570 if (MASK(ldata->echo_commit) == MASK(*tail + 1)) in n_tty_process_echo_ops()
577 op = echo_buf(ldata, *tail + 1); in n_tty_process_echo_ops()
583 if (MASK(ldata->echo_commit) == MASK(*tail + 2)) in n_tty_process_echo_ops()
586 num_chars = echo_buf(ldata, *tail + 2); in n_tty_process_echo_ops()
596 num_chars += ldata->canon_column; in n_tty_process_echo_ops()
605 if (ldata->column > 0) in n_tty_process_echo_ops()
606 ldata->column--; in n_tty_process_echo_ops()
612 ldata->canon_column = ldata->column; in n_tty_process_echo_ops()
617 if (ldata->column > 0) in n_tty_process_echo_ops()
618 ldata->column--; in n_tty_process_echo_ops()
628 ldata->column++; in n_tty_process_echo_ops()
645 ldata->column += 2; in n_tty_process_echo_ops()
678 struct n_tty_data *ldata = tty->disc_data; in __process_echoes() local
685 tail = ldata->echo_tail; in __process_echoes()
686 while (MASK(ldata->echo_commit) != MASK(tail)) { in __process_echoes()
687 c = echo_buf(ldata, tail); in __process_echoes()
714 while (ldata->echo_commit > tail && in __process_echoes()
715 ldata->echo_commit - tail >= ECHO_DISCARD_WATERMARK) { in __process_echoes()
716 if (echo_buf(ldata, tail) == ECHO_OP_START) { in __process_echoes()
717 if (echo_buf(ldata, tail + 1) == ECHO_OP_ERASE_TAB) in __process_echoes()
726 ldata->echo_tail = tail; in __process_echoes()
732 struct n_tty_data *ldata = tty->disc_data; in commit_echoes() local
736 scoped_guard(mutex, &ldata->output_lock) { in commit_echoes()
737 head = ldata->echo_head; in commit_echoes()
738 ldata->echo_mark = head; in commit_echoes()
739 old = ldata->echo_commit - ldata->echo_tail; in commit_echoes()
745 nr = head - ldata->echo_tail; in commit_echoes()
749 ldata->echo_commit = head; in commit_echoes()
759 struct n_tty_data *ldata = tty->disc_data; in process_echoes() local
762 if (ldata->echo_mark == ldata->echo_tail) in process_echoes()
765 scoped_guard(mutex, &ldata->output_lock) { in process_echoes()
766 ldata->echo_commit = ldata->echo_mark; in process_echoes()
777 struct n_tty_data *ldata = tty->disc_data; in flush_echoes() local
780 ldata->echo_commit == ldata->echo_head) in flush_echoes()
783 guard(mutex)(&ldata->output_lock); in flush_echoes()
784 ldata->echo_commit = ldata->echo_head; in flush_echoes()
795 static inline void add_echo_byte(u8 c, struct n_tty_data *ldata) in add_echo_byte() argument
797 *echo_buf_addr(ldata, ldata->echo_head) = c; in add_echo_byte()
799 ldata->echo_head++; in add_echo_byte()
808 static void echo_move_back_col(struct n_tty_data *ldata) in echo_move_back_col() argument
810 add_echo_byte(ECHO_OP_START, ldata); in echo_move_back_col()
811 add_echo_byte(ECHO_OP_MOVE_BACK_COL, ldata); in echo_move_back_col()
821 static void echo_set_canon_col(struct n_tty_data *ldata) in echo_set_canon_col() argument
823 add_echo_byte(ECHO_OP_START, ldata); in echo_set_canon_col()
824 add_echo_byte(ECHO_OP_SET_CANON_COL, ldata); in echo_set_canon_col()
841 struct n_tty_data *ldata) in echo_erase_tab() argument
843 add_echo_byte(ECHO_OP_START, ldata); in echo_erase_tab()
844 add_echo_byte(ECHO_OP_ERASE_TAB, ldata); in echo_erase_tab()
853 add_echo_byte(num_chars, ldata); in echo_erase_tab()
866 static void echo_char_raw(u8 c, struct n_tty_data *ldata) in echo_char_raw() argument
869 add_echo_byte(ECHO_OP_START, ldata); in echo_char_raw()
870 add_echo_byte(ECHO_OP_START, ldata); in echo_char_raw()
872 add_echo_byte(c, ldata); in echo_char_raw()
889 struct n_tty_data *ldata = tty->disc_data; in echo_char() local
892 add_echo_byte(ECHO_OP_START, ldata); in echo_char()
893 add_echo_byte(ECHO_OP_START, ldata); in echo_char()
896 add_echo_byte(ECHO_OP_START, ldata); in echo_char()
897 add_echo_byte(c, ldata); in echo_char()
905 static inline void finish_erasing(struct n_tty_data *ldata) in finish_erasing() argument
907 if (ldata->erasing) { in finish_erasing()
908 echo_char_raw('/', ldata); in finish_erasing()
909 ldata->erasing = 0; in finish_erasing()
927 struct n_tty_data *ldata = tty->disc_data; in eraser() local
933 if (ldata->read_head == ldata->canon_head) { in eraser()
943 ldata->read_head = ldata->canon_head; in eraser()
947 ldata->read_head = ldata->canon_head; in eraser()
948 finish_erasing(ldata); in eraser()
952 echo_char_raw('\n', ldata); in eraser()
959 while (MASK(ldata->read_head) != MASK(ldata->canon_head)) { in eraser()
960 head = ldata->read_head; in eraser()
965 c = read_buf(ldata, head); in eraser()
967 MASK(head) != MASK(ldata->canon_head)); in eraser()
980 cnt = ldata->read_head - head; in eraser()
981 ldata->read_head = head; in eraser()
984 if (!ldata->erasing) { in eraser()
985 echo_char_raw('\\', ldata); in eraser()
986 ldata->erasing = 1; in eraser()
992 echo_char_raw(read_buf(ldata, head), ldata); in eraser()
993 echo_move_back_col(ldata); in eraser()
1000 size_t tail = ldata->read_head; in eraser()
1009 while (MASK(tail) != MASK(ldata->canon_head)) { in eraser()
1011 c = read_buf(ldata, tail); in eraser()
1022 echo_erase_tab(num_chars, after_tab, ldata); in eraser()
1025 echo_char_raw('\b', ldata); in eraser()
1026 echo_char_raw(' ', ldata); in eraser()
1027 echo_char_raw('\b', ldata); in eraser()
1030 echo_char_raw('\b', ldata); in eraser()
1031 echo_char_raw(' ', ldata); in eraser()
1032 echo_char_raw('\b', ldata); in eraser()
1039 if (ldata->read_head == ldata->canon_head && L_ECHO(tty)) in eraser()
1040 finish_erasing(ldata); in eraser()
1069 struct n_tty_data *ldata = tty->disc_data; in isig() local
1083 scoped_guard(mutex, &ldata->output_lock) { in isig()
1084 ldata->echo_head = ldata->echo_tail = 0; in isig()
1085 ldata->echo_mark = ldata->echo_commit = 0; in isig()
1115 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_break() local
1124 put_tty_queue('\377', ldata); in n_tty_receive_break()
1125 put_tty_queue('\0', ldata); in n_tty_receive_break()
1127 put_tty_queue('\0', ldata); in n_tty_receive_break()
1142 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_overrun() local
1144 ldata->num_overrun++; in n_tty_receive_overrun()
1145 if (time_is_before_jiffies(ldata->overrun_time + HZ)) { in n_tty_receive_overrun()
1146 tty_warn(tty, "%u input overrun(s)\n", ldata->num_overrun); in n_tty_receive_overrun()
1147 ldata->overrun_time = jiffies; in n_tty_receive_overrun()
1148 ldata->num_overrun = 0; in n_tty_receive_overrun()
1166 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_parity_error() local
1172 put_tty_queue('\377', ldata); in n_tty_receive_parity_error()
1173 put_tty_queue('\0', ldata); in n_tty_receive_parity_error()
1174 put_tty_queue(c, ldata); in n_tty_receive_parity_error()
1176 put_tty_queue('\0', ldata); in n_tty_receive_parity_error()
1178 put_tty_queue(c, ldata); in n_tty_receive_parity_error()
1236 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_handle_newline() local
1238 set_bit(MASK(ldata->read_head), ldata->read_flags); in n_tty_receive_handle_newline()
1239 put_tty_queue(c, ldata); in n_tty_receive_handle_newline()
1240 smp_store_release(&ldata->canon_head, ldata->read_head); in n_tty_receive_handle_newline()
1247 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_char_canon() local
1258 ldata->lnext = 1; in n_tty_receive_char_canon()
1260 finish_erasing(ldata); in n_tty_receive_char_canon()
1262 echo_char_raw('^', ldata); in n_tty_receive_char_canon()
1263 echo_char_raw('\b', ldata); in n_tty_receive_char_canon()
1272 size_t tail = ldata->canon_head; in n_tty_receive_char_canon()
1274 finish_erasing(ldata); in n_tty_receive_char_canon()
1276 echo_char_raw('\n', ldata); in n_tty_receive_char_canon()
1277 while (MASK(tail) != MASK(ldata->read_head)) { in n_tty_receive_char_canon()
1278 echo_char(read_buf(ldata, tail), tty); in n_tty_receive_char_canon()
1288 echo_char_raw('\n', ldata); in n_tty_receive_char_canon()
1310 if (ldata->canon_head == ldata->read_head) in n_tty_receive_char_canon()
1311 echo_set_canon_col(ldata); in n_tty_receive_char_canon()
1320 put_tty_queue(c, ldata); in n_tty_receive_char_canon()
1333 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_char_special() local
1364 if (ldata->icanon && n_tty_receive_char_canon(tty, c)) in n_tty_receive_char_special()
1368 finish_erasing(ldata); in n_tty_receive_char_special()
1370 echo_char_raw('\n', ldata); in n_tty_receive_char_special()
1373 if (ldata->canon_head == ldata->read_head) in n_tty_receive_char_special()
1374 echo_set_canon_col(ldata); in n_tty_receive_char_special()
1382 put_tty_queue(c, ldata); in n_tty_receive_char_special()
1384 put_tty_queue(c, ldata); in n_tty_receive_char_special()
1401 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_char() local
1408 finish_erasing(ldata); in n_tty_receive_char()
1410 if (ldata->canon_head == ldata->read_head) in n_tty_receive_char()
1411 echo_set_canon_col(ldata); in n_tty_receive_char()
1417 put_tty_queue(c, ldata); in n_tty_receive_char()
1418 put_tty_queue(c, ldata); in n_tty_receive_char()
1463 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_char_lnext() local
1465 ldata->lnext = 0; in n_tty_receive_char_lnext()
1480 struct n_tty_data *ldata = tty->disc_data; in n_tty_lookahead_flow_ctrl() local
1483 ldata->lookahead_count += count; in n_tty_lookahead_flow_ctrl()
1501 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_buf_real_raw() local
1505 size_t head = MASK(ldata->read_head); in n_tty_receive_buf_real_raw()
1508 memcpy(read_buf_addr(ldata, head), cp, n); in n_tty_receive_buf_real_raw()
1510 ldata->read_head += n; in n_tty_receive_buf_real_raw()
1520 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_buf_raw() local
1527 put_tty_queue(*cp++, ldata); in n_tty_receive_buf_raw()
1551 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_buf_standard() local
1560 if (ldata->lnext) { in n_tty_receive_buf_standard()
1575 put_tty_queue(c, ldata); in n_tty_receive_buf_standard()
1579 if (test_bit(c, ldata->char_map)) in n_tty_receive_buf_standard()
1589 struct n_tty_data *ldata = tty->disc_data; in __receive_buf() local
1591 size_t la_count = min(ldata->lookahead_count, count); in __receive_buf()
1593 if (ldata->real_raw) in __receive_buf()
1595 else if (ldata->raw || (L_EXTPROC(tty) && !preops)) in __receive_buf()
1623 ldata->lookahead_count -= la_count; in __receive_buf()
1625 if (ldata->icanon && !L_EXTPROC(tty)) in __receive_buf()
1629 smp_store_release(&ldata->commit_head, ldata->read_head); in __receive_buf()
1631 if (read_cnt(ldata)) { in __receive_buf()
1674 struct n_tty_data *ldata = tty->disc_data; in n_tty_receive_buf_common() local
1694 size_t tail = smp_load_acquire(&ldata->read_tail); in n_tty_receive_buf_common()
1696 room = N_TTY_BUF_SIZE - (ldata->read_head - tail); in n_tty_receive_buf_common()
1701 overflow = ldata->icanon && ldata->canon_head == tail; in n_tty_receive_buf_common()
1703 ldata->read_head--; in n_tty_receive_buf_common()
1705 WRITE_ONCE(ldata->no_room, flow && !room); in n_tty_receive_buf_common()
1736 if (unlikely(ldata->no_room)) { in n_tty_receive_buf_common()
1776 struct n_tty_data *ldata = tty->disc_data; in n_tty_set_termios() local
1779 bitmap_zero(ldata->read_flags, N_TTY_BUF_SIZE); in n_tty_set_termios()
1780 ldata->line_start = ldata->read_tail; in n_tty_set_termios()
1781 if (!L_ICANON(tty) || !read_cnt(ldata)) { in n_tty_set_termios()
1782 ldata->canon_head = ldata->read_tail; in n_tty_set_termios()
1783 ldata->push = 0; in n_tty_set_termios()
1785 set_bit(MASK(ldata->read_head - 1), ldata->read_flags); in n_tty_set_termios()
1786 ldata->canon_head = ldata->read_head; in n_tty_set_termios()
1787 ldata->push = 1; in n_tty_set_termios()
1789 ldata->commit_head = ldata->read_head; in n_tty_set_termios()
1790 ldata->erasing = 0; in n_tty_set_termios()
1791 ldata->lnext = 0; in n_tty_set_termios()
1794 ldata->icanon = (L_ICANON(tty) != 0); in n_tty_set_termios()
1800 bitmap_zero(ldata->char_map, 256); in n_tty_set_termios()
1803 set_bit('\r', ldata->char_map); in n_tty_set_termios()
1805 set_bit('\n', ldata->char_map); in n_tty_set_termios()
1808 set_bit(ERASE_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1809 set_bit(KILL_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1810 set_bit(EOF_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1811 set_bit('\n', ldata->char_map); in n_tty_set_termios()
1812 set_bit(EOL_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1814 set_bit(WERASE_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1815 set_bit(LNEXT_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1816 set_bit(EOL2_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1819 ldata->char_map); in n_tty_set_termios()
1823 set_bit(START_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1824 set_bit(STOP_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1827 set_bit(INTR_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1828 set_bit(QUIT_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1829 set_bit(SUSP_CHAR(tty), ldata->char_map); in n_tty_set_termios()
1831 clear_bit(__DISABLED_CHAR, ldata->char_map); in n_tty_set_termios()
1832 ldata->raw = 0; in n_tty_set_termios()
1833 ldata->real_raw = 0; in n_tty_set_termios()
1835 ldata->raw = 1; in n_tty_set_termios()
1839 ldata->real_raw = 1; in n_tty_set_termios()
1841 ldata->real_raw = 0; in n_tty_set_termios()
1867 struct n_tty_data *ldata = tty->disc_data; in n_tty_close() local
1873 vfree(ldata); in n_tty_close()
1887 struct n_tty_data *ldata; in n_tty_open() local
1890 ldata = vzalloc(sizeof(*ldata)); in n_tty_open()
1891 if (!ldata) in n_tty_open()
1894 ldata->overrun_time = jiffies; in n_tty_open()
1895 mutex_init(&ldata->atomic_read_lock); in n_tty_open()
1896 mutex_init(&ldata->output_lock); in n_tty_open()
1898 tty->disc_data = ldata; in n_tty_open()
1909 const struct n_tty_data *ldata = tty->disc_data; in input_available_p() local
1912 if (ldata->icanon && !L_EXTPROC(tty)) in input_available_p()
1913 return ldata->canon_head != ldata->read_tail; in input_available_p()
1915 return ldata->commit_head - ldata->read_tail >= amt; in input_available_p()
1940 struct n_tty_data *ldata = tty->disc_data; in copy_from_read_buf() local
1943 size_t head = smp_load_acquire(&ldata->commit_head); in copy_from_read_buf()
1944 size_t tail = MASK(ldata->read_tail); in copy_from_read_buf()
1946 n = min3(head - ldata->read_tail, N_TTY_BUF_SIZE - tail, *nr); in copy_from_read_buf()
1950 u8 *from = read_buf_addr(ldata, tail); in copy_from_read_buf()
1955 smp_store_release(&ldata->read_tail, ldata->read_tail + n); in copy_from_read_buf()
1958 if (L_EXTPROC(tty) && ldata->icanon && is_eof && in copy_from_read_buf()
1959 head == ldata->read_tail) in copy_from_read_buf()
1966 return head != ldata->read_tail; in copy_from_read_buf()
1994 struct n_tty_data *ldata = tty->disc_data; in canon_copy_from_read_buf() local
2004 canon_head = smp_load_acquire(&ldata->canon_head); in canon_copy_from_read_buf()
2005 n = min(*nr, canon_head - ldata->read_tail); in canon_copy_from_read_buf()
2007 tail = MASK(ldata->read_tail); in canon_copy_from_read_buf()
2010 eol = find_next_bit(ldata->read_flags, size, tail); in canon_copy_from_read_buf()
2014 eol = find_first_bit(ldata->read_flags, more); in canon_copy_from_read_buf()
2024 if (!found || read_buf(ldata, eol) != __DISABLED_CHAR) in canon_copy_from_read_buf()
2032 clear_bit(eol, ldata->read_flags); in canon_copy_from_read_buf()
2033 smp_store_release(&ldata->read_tail, ldata->read_tail + c); in canon_copy_from_read_buf()
2036 if (!ldata->push) in canon_copy_from_read_buf()
2037 ldata->line_start = ldata->read_tail; in canon_copy_from_read_buf()
2039 ldata->push = 0; in canon_copy_from_read_buf()
2045 return ldata->read_tail != canon_head; in canon_copy_from_read_buf()
2053 static void canon_skip_eof(struct n_tty_data *ldata) in canon_skip_eof() argument
2057 canon_head = smp_load_acquire(&ldata->canon_head); in canon_skip_eof()
2058 tail = ldata->read_tail; in canon_skip_eof()
2066 if (!test_bit(tail, ldata->read_flags)) in canon_skip_eof()
2068 if (read_buf(ldata, tail) != __DISABLED_CHAR) in canon_skip_eof()
2072 clear_bit(tail, ldata->read_flags); in canon_skip_eof()
2073 smp_store_release(&ldata->read_tail, ldata->read_tail + 1); in canon_skip_eof()
2110 struct n_tty_data *ldata = tty->disc_data; in n_tty_continue_cookie() local
2113 if (ldata->icanon && !L_EXTPROC(tty)) { in n_tty_continue_cookie()
2119 canon_skip_eof(ldata); in n_tty_continue_cookie()
2131 mutex_unlock(&ldata->atomic_read_lock); in n_tty_continue_cookie()
2187 struct n_tty_data *ldata = tty->disc_data; in n_tty_read() local
2208 if (!mutex_trylock(&ldata->atomic_read_lock)) in n_tty_read()
2211 if (mutex_lock_interruptible(&ldata->atomic_read_lock)) in n_tty_read()
2219 if (!ldata->icanon) { in n_tty_read()
2230 old_tail = ldata->read_tail; in n_tty_read()
2263 if (ldata->icanon && !L_EXTPROC(tty)) { in n_tty_read()
2284 if (old_tail != ldata->read_tail) { in n_tty_read()
2295 mutex_unlock(&ldata->atomic_read_lock); in n_tty_read()
2384 struct n_tty_data *ldata = tty->disc_data; in n_tty_write() local
2387 scoped_guard(mutex, &ldata->output_lock) in n_tty_write()
2460 static unsigned long inq_canon(struct n_tty_data *ldata) in inq_canon() argument
2464 if (ldata->canon_head == ldata->read_tail) in inq_canon()
2466 head = ldata->canon_head; in inq_canon()
2467 tail = ldata->read_tail; in inq_canon()
2471 if (test_bit(MASK(tail), ldata->read_flags) && in inq_canon()
2472 read_buf(ldata, tail) == __DISABLED_CHAR) in inq_canon()
2482 struct n_tty_data *ldata = tty->disc_data; in n_tty_ioctl() local
2491 num = inq_canon(ldata); in n_tty_ioctl()
2493 num = read_cnt(ldata); in n_tty_ioctl()