Sending this to the list instead of just to Corey (forgot to reply-all).
Corey,
Here is the mutex-lock patch for serial_core.c
--- linux-2.6.18-ipmi/drivers/serial/serial_core.c 2007-04-05 17:28:
15.000000000 -0500
+++ linux-2.6.18/drivers/serial/serial_core.c 2007-04-04 17:06:
00.000000000 -0500
@@ -2307,8 +2307,8 @@ uart_register_ldrv(struct uart_driver *d
snprintf(l->name, sizeof(l->name), "%s%d", drv->dev_name, port->line);
printk(KERN_INFO
- "Registering UART %s with the serial layered driver\n",
- l->name);
+ "Registering UART %s with the serial layered driver\n",
+ l->name);
l->ldrv = NULL;
l->drv = drv;
l->port = port;
@@ -2318,14 +2318,10 @@ uart_register_ldrv(struct uart_driver *d
if (strcmp(w->name, l->name) == 0) {
struct uart_state *state = ldrv_info_to_state(l);
int count;
- mutex_lock(&state->mutex);
l->ldrv = w->ldrv;
l->port->ldrv = w->ldrv;
count = uart_users(state);
- mutex_unlock(&state->mutex);
w->info = l;
- if (count == 0)
- uart_ldrv_open(drv, l->port);
}
}
}
@@ -2651,6 +2647,21 @@ int uart_add_one_port(struct uart_driver
mutex_unlock(&state->mutex);
mutex_unlock(&port_mutex);
+#ifdef CONFIG_UART_LDRVS
+ {
+ struct uart_ldrv_wait *w;
+
+ list_for_each_entry(w, &ldrv_wait_list, link) {
+ if (w->info != NULL) {
+ struct uart_state *state = ldrv_info_to_state(w->info);
+ if (uart_users(state) == 0) {
+ uart_ldrv_open(drv, w->info->port);
+ }
+ }
+ }
+ }
+#endif
+
return ret;
}
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Openipmi-developer mailing list
Openipmi-developer@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openipmi-developer