staging: dgrp: remove use of real_raw and read_cnt in dgrp_input
dgrp_input used real_raw and read_cnt from struct tty_struct. Those members have gone away. Rework the code to not use them. Reported-by: Fengguang Wu <fengguang.wu@intel.com> Signed-off-by: Bill Pemberton <wfp5p@virginia.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
a1c25f2b98
commit
e3224111b3
|
@ -151,20 +151,15 @@ static void dgrp_read_data_block(struct ch_struct *ch, u8 *flipbuf,
|
||||||
* Copys the rbuf to the flipbuf and sends to line discipline.
|
* Copys the rbuf to the flipbuf and sends to line discipline.
|
||||||
* Sends input buffer data to the line discipline.
|
* Sends input buffer data to the line discipline.
|
||||||
*
|
*
|
||||||
* There are several modes to consider here:
|
|
||||||
* rawreadok, tty->real_raw, and IF_PARMRK
|
|
||||||
*/
|
*/
|
||||||
static void dgrp_input(struct ch_struct *ch)
|
static void dgrp_input(struct ch_struct *ch)
|
||||||
{
|
{
|
||||||
struct nd_struct *nd;
|
struct nd_struct *nd;
|
||||||
struct tty_struct *tty;
|
struct tty_struct *tty;
|
||||||
int remain;
|
|
||||||
int data_len;
|
int data_len;
|
||||||
int len;
|
int len;
|
||||||
int flip_len;
|
|
||||||
int tty_count;
|
int tty_count;
|
||||||
ulong lock_flags;
|
ulong lock_flags;
|
||||||
struct tty_ldisc *ld;
|
|
||||||
u8 *myflipbuf;
|
u8 *myflipbuf;
|
||||||
u8 *myflipflagbuf;
|
u8 *myflipflagbuf;
|
||||||
|
|
||||||
|
@ -212,37 +207,11 @@ static void dgrp_input(struct ch_struct *ch)
|
||||||
|
|
||||||
spin_unlock_irqrestore(&nd->nd_lock, lock_flags);
|
spin_unlock_irqrestore(&nd->nd_lock, lock_flags);
|
||||||
|
|
||||||
/* Decide how much data we can send into the tty layer */
|
|
||||||
if (dgrp_rawreadok && tty->real_raw)
|
|
||||||
flip_len = MYFLIPLEN;
|
|
||||||
else
|
|
||||||
flip_len = TTY_FLIPBUF_SIZE;
|
|
||||||
|
|
||||||
/* data_len should be the number of chars that we read in */
|
/* data_len should be the number of chars that we read in */
|
||||||
data_len = (ch->ch_rin - ch->ch_rout) & RBUF_MASK;
|
data_len = (ch->ch_rin - ch->ch_rout) & RBUF_MASK;
|
||||||
remain = data_len;
|
|
||||||
|
|
||||||
/* len is the amount of data we are going to transfer here */
|
/* len is the amount of data we are going to transfer here */
|
||||||
len = min(data_len, flip_len);
|
len = tty_buffer_request_room(tty, data_len);
|
||||||
|
|
||||||
/* take into consideration length of ldisc */
|
|
||||||
len = min(len, (N_TTY_BUF_SIZE - 1) - tty->read_cnt);
|
|
||||||
|
|
||||||
ld = tty_ldisc_ref(tty);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If we were unable to get a reference to the ld,
|
|
||||||
* don't flush our buffer, and act like the ld doesn't
|
|
||||||
* have any space to put the data right now.
|
|
||||||
*/
|
|
||||||
if (!ld) {
|
|
||||||
len = 0;
|
|
||||||
} else if (!ld->ops->receive_buf) {
|
|
||||||
spin_lock_irqsave(&nd->nd_lock, lock_flags);
|
|
||||||
ch->ch_rout = ch->ch_rin;
|
|
||||||
spin_unlock_irqrestore(&nd->nd_lock, lock_flags);
|
|
||||||
len = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Check DPA flow control */
|
/* Check DPA flow control */
|
||||||
if ((nd->nd_dpa_debug) &&
|
if ((nd->nd_dpa_debug) &&
|
||||||
|
@ -254,42 +223,22 @@ static void dgrp_input(struct ch_struct *ch)
|
||||||
|
|
||||||
dgrp_read_data_block(ch, myflipbuf, len);
|
dgrp_read_data_block(ch, myflipbuf, len);
|
||||||
|
|
||||||
/*
|
if (I_PARMRK(tty) || I_BRKINT(tty) || I_INPCK(tty))
|
||||||
* In high performance mode, we don't have to update
|
parity_scan(ch, myflipbuf, myflipflagbuf, &len);
|
||||||
* flag_buf or any of the counts or pointers into flip buf.
|
else
|
||||||
*/
|
memset(myflipflagbuf, TTY_NORMAL, len);
|
||||||
if (!dgrp_rawreadok || !tty->real_raw) {
|
|
||||||
if (I_PARMRK(tty) || I_BRKINT(tty) || I_INPCK(tty))
|
|
||||||
parity_scan(ch, myflipbuf, myflipflagbuf, &len);
|
|
||||||
else
|
|
||||||
memset(myflipflagbuf, TTY_NORMAL, len);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((nd->nd_dpa_debug) &&
|
if ((nd->nd_dpa_debug) &&
|
||||||
(nd->nd_dpa_port == PORT_NUM(MINOR(tty_devnum(tty)))))
|
(nd->nd_dpa_port == PORT_NUM(MINOR(tty_devnum(tty)))))
|
||||||
dgrp_dpa_data(nd, 1, myflipbuf, len);
|
dgrp_dpa_data(nd, 1, myflipbuf, len);
|
||||||
|
|
||||||
/*
|
tty_insert_flip_string_flags(tty, myflipbuf,
|
||||||
* If we're doing raw reads, jam it right into the
|
myflipflagbuf, len);
|
||||||
* line disc bypassing the flip buffers.
|
tty_flip_buffer_push(tty);
|
||||||
*/
|
|
||||||
if (dgrp_rawreadok && tty->real_raw)
|
|
||||||
ld->ops->receive_buf(tty, myflipbuf, NULL, len);
|
|
||||||
else {
|
|
||||||
len = tty_buffer_request_room(tty, len);
|
|
||||||
tty_insert_flip_string_flags(tty, myflipbuf,
|
|
||||||
myflipflagbuf, len);
|
|
||||||
|
|
||||||
/* Tell the tty layer its okay to "eat" the data now */
|
|
||||||
tty_flip_buffer_push(tty);
|
|
||||||
}
|
|
||||||
|
|
||||||
ch->ch_rxcount += len;
|
ch->ch_rxcount += len;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ld)
|
|
||||||
tty_ldisc_deref(ld);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Wake up any sleepers (maybe dgrp close) that might be waiting
|
* Wake up any sleepers (maybe dgrp close) that might be waiting
|
||||||
* for a channel flag state change.
|
* for a channel flag state change.
|
||||||
|
|
Loading…
Reference in New Issue