Commit d171e519 authored by Jes Sorensen's avatar Jes Sorensen Committed by Tony Luck

[IA64-SGI] sn_console.c minor cleanup

Fix printk level and remove unnecessary CONFIG_SMP|CONFIG_PREEMPT tests
as this is taken care through the spinlock macros anyway.
Signed-off-by: default avatarJes Sorensen <jes@sgi.com>
Signed-off-by: default avatarPat Gefre <pfg@sgi.com>
Signed-off-by: default avatarTony Luck <tony.luck@intel.com>
parent f9e505a9
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* driver for that. * driver for that.
* *
* *
* Copyright (c) 2004-2005 Silicon Graphics, Inc. All Rights Reserved. * Copyright (c) 2004-2006 Silicon Graphics, Inc. All Rights Reserved.
* *
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
* under the terms of version 2 of the GNU General Public License * under the terms of version 2 of the GNU General Public License
...@@ -829,8 +829,8 @@ static int __init sn_sal_module_init(void) ...@@ -829,8 +829,8 @@ static int __init sn_sal_module_init(void)
misc.name = DEVICE_NAME_DYNAMIC; misc.name = DEVICE_NAME_DYNAMIC;
retval = misc_register(&misc); retval = misc_register(&misc);
if (retval != 0) { if (retval != 0) {
printk printk(KERN_WARNING "Failed to register console "
("Failed to register console device using misc_register.\n"); "device using misc_register.\n");
return -ENODEV; return -ENODEV;
} }
sal_console_uart.major = MISC_MAJOR; sal_console_uart.major = MISC_MAJOR;
...@@ -942,88 +942,75 @@ sn_sal_console_write(struct console *co, const char *s, unsigned count) ...@@ -942,88 +942,75 @@ sn_sal_console_write(struct console *co, const char *s, unsigned count)
{ {
unsigned long flags = 0; unsigned long flags = 0;
struct sn_cons_port *port = &sal_console_port; struct sn_cons_port *port = &sal_console_port;
#if defined(CONFIG_SMP) || defined(CONFIG_PREEMPT)
static int stole_lock = 0; static int stole_lock = 0;
#endif
BUG_ON(!port->sc_is_asynch); BUG_ON(!port->sc_is_asynch);
/* We can't look at the xmit buffer if we're not registered with serial core /* We can't look at the xmit buffer if we're not registered with serial core
* yet. So only do the fancy recovery after registering * yet. So only do the fancy recovery after registering
*/ */
if (port->sc_port.info) { if (!port->sc_port.info) {
/* Not yet registered with serial core - simple case */
/* somebody really wants this output, might be an puts_raw_fixed(port->sc_ops->sal_puts_raw, s, count);
* oops, kdb, panic, etc. make sure they get it. */ return;
#if defined(CONFIG_SMP) || defined(CONFIG_PREEMPT) }
if (spin_is_locked(&port->sc_port.lock)) {
int lhead = port->sc_port.info->xmit.head;
int ltail = port->sc_port.info->xmit.tail;
int counter, got_lock = 0;
/* /* somebody really wants this output, might be an
* We attempt to determine if someone has died with the * oops, kdb, panic, etc. make sure they get it. */
* lock. We wait ~20 secs after the head and tail ptrs if (spin_is_locked(&port->sc_port.lock)) {
* stop moving and assume the lock holder is not functional int lhead = port->sc_port.info->xmit.head;
* and plow ahead. If the lock is freed within the time out int ltail = port->sc_port.info->xmit.tail;
* period we re-get the lock and go ahead normally. We also int counter, got_lock = 0;
* remember if we have plowed ahead so that we don't have
* to wait out the time out period again - the asumption /*
* is that we will time out again. * We attempt to determine if someone has died with the
*/ * lock. We wait ~20 secs after the head and tail ptrs
* stop moving and assume the lock holder is not functional
* and plow ahead. If the lock is freed within the time out
* period we re-get the lock and go ahead normally. We also
* remember if we have plowed ahead so that we don't have
* to wait out the time out period again - the asumption
* is that we will time out again.
*/
for (counter = 0; counter < 150; mdelay(125), counter++) { for (counter = 0; counter < 150; mdelay(125), counter++) {
if (!spin_is_locked(&port->sc_port.lock) if (!spin_is_locked(&port->sc_port.lock)
|| stole_lock) { || stole_lock) {
if (!stole_lock) { if (!stole_lock) {
spin_lock_irqsave(&port-> spin_lock_irqsave(&port->sc_port.lock,
sc_port.lock, flags);
flags); got_lock = 1;
got_lock = 1;
}
break;
} else {
/* still locked */
if ((lhead !=
port->sc_port.info->xmit.head)
|| (ltail !=
port->sc_port.info->xmit.
tail)) {
lhead =
port->sc_port.info->xmit.
head;
ltail =
port->sc_port.info->xmit.
tail;
counter = 0;
}
} }
} break;
/* flush anything in the serial core xmit buffer, raw */
sn_transmit_chars(port, 1);
if (got_lock) {
spin_unlock_irqrestore(&port->sc_port.lock,
flags);
stole_lock = 0;
} else { } else {
/* fell thru */ /* still locked */
stole_lock = 1; if ((lhead != port->sc_port.info->xmit.head)
|| (ltail !=
port->sc_port.info->xmit.tail)) {
lhead =
port->sc_port.info->xmit.head;
ltail =
port->sc_port.info->xmit.tail;
counter = 0;
}
} }
puts_raw_fixed(port->sc_ops->sal_puts_raw, s, count); }
} else { /* flush anything in the serial core xmit buffer, raw */
stole_lock = 0; sn_transmit_chars(port, 1);
#endif if (got_lock) {
spin_lock_irqsave(&port->sc_port.lock, flags);
sn_transmit_chars(port, 1);
spin_unlock_irqrestore(&port->sc_port.lock, flags); spin_unlock_irqrestore(&port->sc_port.lock, flags);
stole_lock = 0;
puts_raw_fixed(port->sc_ops->sal_puts_raw, s, count); } else {
#if defined(CONFIG_SMP) || defined(CONFIG_PREEMPT) /* fell thru */
stole_lock = 1;
} }
#endif puts_raw_fixed(port->sc_ops->sal_puts_raw, s, count);
} } else {
else { stole_lock = 0;
/* Not yet registered with serial core - simple case */ spin_lock_irqsave(&port->sc_port.lock, flags);
sn_transmit_chars(port, 1);
spin_unlock_irqrestore(&port->sc_port.lock, flags);
puts_raw_fixed(port->sc_ops->sal_puts_raw, s, count); puts_raw_fixed(port->sc_ops->sal_puts_raw, s, count);
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment