projects
/
openwrt
/
staging
/
blogic.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
a20852d
)
[S390] hvc_iucv: do not call iucv_unregister if iucv_register failed
author
Hendrik Brueckner
<
[email protected]
>
Mon, 25 Oct 2010 14:10:22 +0000
(16:10 +0200)
committer
Martin Schwidefsky
<
[email protected]
>
Mon, 25 Oct 2010 14:10:17 +0000
(16:10 +0200)
If the iucv_register() functions fails, the error recovery calls
iucv_unregister() which might cause the following stack backtrace:
(<
0000000000100ab2
> show_trace+0xee/0x144)
<
00000000004f1842
> panic+0xb6/0x248
<
00000000001010a6
> die+0x15a/0x16c
<
000000000011d936
> do_no_context+0xa6/0xe4
<
00000000004f84dc
> do_protection_exception+0x2e8/0x3a4
<
0000000000113afc
> pgm_exit+0x0/0x14
<
00000000004e786e
> iucv_unregister+0x5a/0x17c
(<
00000000004e785e
> iucv_unregister+0x4a/0x17c)
<
000000000076de74
> hvc_iucv_init+0x228/0x5dc
<
00000000001000c2
> do_one_initcall+0x3e/0x19c
<
00000000007524a2
> kernel_init+0x28e/0x404
<
0000000000105dd6
> kernel_thread_starter+0x6/0xc
<
0000000000105dd0
> kernel_thread_starter+0x0/0xc
Remove the call to iucv_unregister() and remove the goto label
as unregistering is the last step in the hvc_iucv initialization.
If iucv_register() fails, simply clean up hvc terminals and free
resources.
Signed-off-by: Hendrik Brueckner <
[email protected]
>
Signed-off-by: Martin Schwidefsky <
[email protected]
>
drivers/char/hvc_iucv.c
patch
|
blob
|
history
diff --git
a/drivers/char/hvc_iucv.c
b/drivers/char/hvc_iucv.c
index 7b01bc609de3497cb0a17c4748d28a57e936e498..c3425bb3a1f6fe2348330d8336c76fd3b60d4b90 100644
(file)
--- a/
drivers/char/hvc_iucv.c
+++ b/
drivers/char/hvc_iucv.c
@@
-1303,13
+1303,11
@@
static int __init hvc_iucv_init(void)
if (rc) {
pr_err("Registering IUCV handlers failed with error code=%d\n",
rc);
- goto out_error_
iucv
;
+ goto out_error_
hvc
;
}
return 0;
-out_error_iucv:
- iucv_unregister(&hvc_iucv_handler, 0);
out_error_hvc:
for (i = 0; i < hvc_iucv_devices; i++)
if (hvc_iucv_table[i])