aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBreno Leitao <leitao@linux.vnet.ibm.com>2010-02-25 13:31:50 -0500
committerGreg Kroah-Hartman <gregkh@suse.de>2010-03-02 17:43:24 -0500
commit137ee2f5d173a0e859e35bfb900261418eb88ace (patch)
treeb568beec3835a1a6f2c5ed2592aa39f721092ea8
parent54862ee005943d0fdb13d4e54220f234676e05f5 (diff)
jsm: fixing error if the driver fails to load
Currently if the driver fails to register on port, the kernel crashes with the following stack: cpu 0x1: Vector: 300 (Data Access) at [c0000000e0303090] pc: c00000000039aa74: .__mutex_lock_slowpath+0x44/0x10c lr: c00000000039aa58: .__mutex_lock_slowpath+0x28/0x10c [c0000000e03033c0] c00000000026b074 .uart_remove_one_port+0xbc/0x16c [c0000000e0303460] d0000000000e0554 .jsm_remove_uart_port+0x8c/0x10c [jsm] [c0000000e03034f0] d0000000000dc034 .jsm_remove_one+0x34/0x108 [jsm] [c0000000e0303590] c0000000001f4aa0 .pci_device_remove+0x48/0x74 ... This patch just fixes the code flow to abort the load when an error is detected. Signed-off-by: Breno Leitao <leitao@linux.vnet.ibm.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--drivers/serial/jsm/jsm_tty.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/serial/jsm/jsm_tty.c b/drivers/serial/jsm/jsm_tty.c
index cd95e215550d..5673ca9dfdc8 100644
--- a/drivers/serial/jsm/jsm_tty.c
+++ b/drivers/serial/jsm/jsm_tty.c
@@ -432,7 +432,7 @@ int __devinit jsm_tty_init(struct jsm_board *brd)
432 432
433int jsm_uart_port_init(struct jsm_board *brd) 433int jsm_uart_port_init(struct jsm_board *brd)
434{ 434{
435 int i; 435 int i, rc;
436 unsigned int line; 436 unsigned int line;
437 struct jsm_channel *ch; 437 struct jsm_channel *ch;
438 438
@@ -467,8 +467,11 @@ int jsm_uart_port_init(struct jsm_board *brd)
467 } else 467 } else
468 set_bit(line, linemap); 468 set_bit(line, linemap);
469 brd->channels[i]->uart_port.line = line; 469 brd->channels[i]->uart_port.line = line;
470 if (uart_add_one_port (&jsm_uart_driver, &brd->channels[i]->uart_port)) 470 rc = uart_add_one_port (&jsm_uart_driver, &brd->channels[i]->uart_port);
471 printk(KERN_INFO "jsm: add device failed\n"); 471 if (rc){
472 printk(KERN_INFO "jsm: Port %d failed. Aborting...\n", i);
473 return rc;
474 }
472 else 475 else
473 printk(KERN_INFO "jsm: Port %d added\n", i); 476 printk(KERN_INFO "jsm: Port %d added\n", i);
474 } 477 }