Skip to content

Commit

Permalink
[SPARC64] sunhv: Fix locking in sunhv_start_tx()
Browse files Browse the repository at this point in the history
Caller takes the lock already.

Also, fixup the poll loop in sunhv_break_ctl().  Just
like in console write, we udelay(2) and use a loop
limit of 1000000 iterations.

Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
David S. Miller committed Mar 20, 2006
1 parent 11fc04e commit 843dfb4
Showing 1 changed file with 2 additions and 6 deletions.
8 changes: 2 additions & 6 deletions drivers/serial/sunhv.c
Original file line number Diff line number Diff line change
Expand Up @@ -210,9 +210,6 @@ static void sunhv_stop_tx(struct uart_port *port)
static void sunhv_start_tx(struct uart_port *port)
{
struct circ_buf *xmit = &port->info->xmit;
unsigned long flags;

spin_lock_irqsave(&port->lock, flags);

while (!uart_circ_empty(xmit)) {
long status = hypervisor_con_putchar(xmit->buf[xmit->tail]);
Expand All @@ -223,8 +220,6 @@ static void sunhv_start_tx(struct uart_port *port)
xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
port->icount.tx++;
}

spin_unlock_irqrestore(&port->lock, flags);
}

/* port->lock is not held. */
Expand Down Expand Up @@ -259,14 +254,15 @@ static void sunhv_break_ctl(struct uart_port *port, int break_state)
{
if (break_state) {
unsigned long flags;
int limit = 10000;
int limit = 1000000;

spin_lock_irqsave(&port->lock, flags);

while (limit-- > 0) {
long status = hypervisor_con_putchar(CON_BREAK);
if (status == HV_EOK)
break;
udelay(2);
}

spin_unlock_irqrestore(&port->lock, flags);
Expand Down

0 comments on commit 843dfb4

Please sign in to comment.