I thought some more about this, and looked over some things and found a
few other problems. The changes for those also fixed this problem
(though I'm keeping the original patch because these changes won't work
in 2.6.24 and the original patch will). You might want to use these
patches, too, otherwise you may get short serial stalls on
transmission. Though that's actually unlikely because the serial buffer
is a lot bigger than IPMI messages.
-corey
David Jenkins wrote:
Corey,
Did you mean uartdrv_console_write() (and not uart_console_write())?
If so, I found a call to uart_write_wakeup() at the end of
uartdrv_console_write() and put
if (port->info->flags & UIF_INITIALIZED)
in front of it. That is working. My board will now reboot without
getting an oops. I did some quick ipmi tests (kernel finds IPMI
device, query manufacturer and product id) and those still work as
well. I will be doing more complete testing later.
So it looks good. Thanks very much for the help.
David
From: Corey Minyard <[EMAIL PROTECTED]>
Serial: clear tasklet init flag when done
A serial direct connection may create it's own tasklet, so we need to
clear the tasklet setup flag when we shutdown the port so that if a
serial direct driver grabs the port sets a tasklet, and releases it,
the tasklet will get re-initialized if the port is re-opened.
Signed-off-by: Corey Minyard <[EMAIL PROTECTED]>
---
Index: linux-2.6.23/drivers/serial/serial_core.c
===================================================================
--- linux-2.6.23.orig/drivers/serial/serial_core.c
+++ linux-2.6.23/drivers/serial/serial_core.c
@@ -253,8 +253,10 @@ static void uart_shutdown(struct uart_st
/*
* kill off our tasklet
*/
- if (info->flags & UIF_TASKLET_SETUP)
+ if (info->flags & UIF_TASKLET_SETUP) {
+ info->flags &= ~UIF_TASKLET_SETUP;
tasklet_kill(&info->tlet);
+ }
/*
* Free the transmit buffer page.
From: Corey Minyard <[EMAIL PROTECTED]>
IPMI: serial set tasklet flag
The tasklets will not work properly unless the flag is set. So
set the flag, and clear it on shutdown.
Signed-off-by: Corey Minyard <[EMAIL PROTECTED]>
Index: linux-2.6.23/drivers/char/ipmi/ipmi_serial.c
===================================================================
--- linux-2.6.23.orig/drivers/char/ipmi/ipmi_serial.c
+++ linux-2.6.23/drivers/char/ipmi/ipmi_serial.c
@@ -1874,6 +1874,7 @@ static void ipmi_serial_setup_one(const
info->uinfo.direct = &info->direct;
tasklet_init(&info->uinfo.tlet, ipmi_serial_tx_ready,
(unsigned long) info);
+ info->uinfo.flags |= UIF_TASKLET_SETUP;
mutex_lock(&list_lock);
/* Check for dups. */
@@ -2094,9 +2095,9 @@ static void ipmi_serial_cleanup_one(stru
}
if (to_clean->port) {
- to_clean->port->ops->shutdown(to_clean->port);
+ to_clean->uinfo.flags &= ~UIF_TASKLET_SETUP;
tasklet_kill(&to_clean->uinfo.tlet);
-
+ to_clean->port->ops->shutdown(to_clean->port);
to_clean->port->info = to_clean->orig_port_info;
uart_put_direct_port(to_clean->port, 0);
}
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Openipmi-developer mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openipmi-developer