mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
tty: moxa: Fix modem op locking
This is overkill and mostly not needed Signed-off-by: Alan Cox <alan@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
f9b412a8c9
commit
8482bcd585
1 changed files with 10 additions and 15 deletions
|
@ -139,7 +139,7 @@ struct moxa_port {
|
||||||
int cflag;
|
int cflag;
|
||||||
unsigned long statusflags;
|
unsigned long statusflags;
|
||||||
|
|
||||||
u8 DCDState;
|
u8 DCDState; /* Protected by the port lock */
|
||||||
u8 lineCtrl;
|
u8 lineCtrl;
|
||||||
u8 lowChkFlag;
|
u8 lowChkFlag;
|
||||||
};
|
};
|
||||||
|
@ -1141,9 +1141,9 @@ static int moxa_carrier_raised(struct tty_port *port)
|
||||||
struct moxa_port *ch = container_of(port, struct moxa_port, port);
|
struct moxa_port *ch = container_of(port, struct moxa_port, port);
|
||||||
int dcd;
|
int dcd;
|
||||||
|
|
||||||
spin_lock_bh(&moxa_lock);
|
spin_lock_irq(&port->lock);
|
||||||
dcd = ch->DCDState;
|
dcd = ch->DCDState;
|
||||||
spin_unlock_bh(&moxa_lock);
|
spin_unlock_irq(&port->lock);
|
||||||
return dcd;
|
return dcd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1267,16 +1267,9 @@ static int moxa_chars_in_buffer(struct tty_struct *tty)
|
||||||
|
|
||||||
static int moxa_tiocmget(struct tty_struct *tty, struct file *file)
|
static int moxa_tiocmget(struct tty_struct *tty, struct file *file)
|
||||||
{
|
{
|
||||||
struct moxa_port *ch;
|
struct moxa_port *ch = tty->driver_data;
|
||||||
int flag = 0, dtr, rts;
|
int flag = 0, dtr, rts;
|
||||||
|
|
||||||
mutex_lock(&moxa_openlock);
|
|
||||||
ch = tty->driver_data;
|
|
||||||
if (!ch) {
|
|
||||||
mutex_unlock(&moxa_openlock);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
MoxaPortGetLineOut(ch, &dtr, &rts);
|
MoxaPortGetLineOut(ch, &dtr, &rts);
|
||||||
if (dtr)
|
if (dtr)
|
||||||
flag |= TIOCM_DTR;
|
flag |= TIOCM_DTR;
|
||||||
|
@ -1289,7 +1282,6 @@ static int moxa_tiocmget(struct tty_struct *tty, struct file *file)
|
||||||
flag |= TIOCM_DSR;
|
flag |= TIOCM_DSR;
|
||||||
if (dtr & 4)
|
if (dtr & 4)
|
||||||
flag |= TIOCM_CD;
|
flag |= TIOCM_CD;
|
||||||
mutex_unlock(&moxa_openlock);
|
|
||||||
return flag;
|
return flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1368,15 +1360,20 @@ static void moxa_hangup(struct tty_struct *tty)
|
||||||
static void moxa_new_dcdstate(struct moxa_port *p, u8 dcd)
|
static void moxa_new_dcdstate(struct moxa_port *p, u8 dcd)
|
||||||
{
|
{
|
||||||
struct tty_struct *tty;
|
struct tty_struct *tty;
|
||||||
|
unsigned long flags;
|
||||||
dcd = !!dcd;
|
dcd = !!dcd;
|
||||||
|
|
||||||
|
spin_lock_irqsave(&p->port.lock, flags);
|
||||||
if (dcd != p->DCDState) {
|
if (dcd != p->DCDState) {
|
||||||
|
p->DCDState = dcd;
|
||||||
|
spin_unlock_irqrestore(&p->port.lock, flags);
|
||||||
tty = tty_port_tty_get(&p->port);
|
tty = tty_port_tty_get(&p->port);
|
||||||
if (tty && C_CLOCAL(tty) && !dcd)
|
if (tty && C_CLOCAL(tty) && !dcd)
|
||||||
tty_hangup(tty);
|
tty_hangup(tty);
|
||||||
tty_kref_put(tty);
|
tty_kref_put(tty);
|
||||||
}
|
}
|
||||||
p->DCDState = dcd;
|
else
|
||||||
|
spin_unlock_irqrestore(&p->port.lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int moxa_poll_port(struct moxa_port *p, unsigned int handle,
|
static int moxa_poll_port(struct moxa_port *p, unsigned int handle,
|
||||||
|
@ -1878,9 +1875,7 @@ static int MoxaPortLineStatus(struct moxa_port *port)
|
||||||
val &= 0x0B;
|
val &= 0x0B;
|
||||||
if (val & 8)
|
if (val & 8)
|
||||||
val |= 4;
|
val |= 4;
|
||||||
spin_lock_bh(&moxa_lock);
|
|
||||||
moxa_new_dcdstate(port, val & 8);
|
moxa_new_dcdstate(port, val & 8);
|
||||||
spin_unlock_bh(&moxa_lock);
|
|
||||||
val &= 7;
|
val &= 7;
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue