aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/cio/css.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/s390/cio/css.c')
-rw-r--r--drivers/s390/cio/css.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/drivers/s390/cio/css.c b/drivers/s390/cio/css.c
index ac5ceb933896..1c27a5a06b49 100644
--- a/drivers/s390/cio/css.c
+++ b/drivers/s390/cio/css.c
@@ -377,8 +377,6 @@ static int __init slow_subchannel_init(void)
377 return 0; 377 return 0;
378} 378}
379 379
380subsys_initcall(slow_subchannel_init);
381
382static void css_slow_path_func(struct work_struct *unused) 380static void css_slow_path_func(struct work_struct *unused)
383{ 381{
384 struct subchannel_id schid; 382 struct subchannel_id schid;
@@ -641,9 +639,20 @@ init_channel_subsystem (void)
641{ 639{
642 int ret, i; 640 int ret, i;
643 641
644 if (chsc_determine_css_characteristics() == 0) 642 ret = chsc_determine_css_characteristics();
643 if (ret == -ENOMEM)
644 goto out; /* No need to continue. */
645 if (ret == 0)
645 css_characteristics_avail = 1; 646 css_characteristics_avail = 1;
646 647
648 ret = chsc_alloc_sei_area();
649 if (ret)
650 goto out;
651
652 ret = slow_subchannel_init();
653 if (ret)
654 goto out;
655
647 if ((ret = bus_register(&css_bus_type))) 656 if ((ret = bus_register(&css_bus_type)))
648 goto out; 657 goto out;
649 658
@@ -709,6 +718,10 @@ out_unregister:
709out_bus: 718out_bus:
710 bus_unregister(&css_bus_type); 719 bus_unregister(&css_bus_type);
711out: 720out:
721 chsc_free_sei_area();
722 kfree(slow_subchannel_set);
723 printk(KERN_WARNING"cio: failed to initialize css driver (%d)!\n",
724 ret);
712 return ret; 725 return ret;
713} 726}
714 727