Commit 4434a38c authored by Cornelia Huck's avatar Cornelia Huck Committed by Martin Schwidefsky
Browse files

[S390] cio: Reorganize initialization.



- Localize more of the init calls in init_channel_subsystem().
- Print a warning if init_channel_subsystem() failed.

Signed-off-by: default avatarCornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent 303fa9e3
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -990,8 +990,7 @@ out:
	return ret;
}

static int __init
chsc_alloc_sei_area(void)
int __init chsc_alloc_sei_area(void)
{
	sei_page = (void *)get_zeroed_page(GFP_KERNEL | GFP_DMA);
	if (!sei_page)
@@ -1000,6 +999,11 @@ chsc_alloc_sei_area(void)
	return (sei_page ? 0 : -ENOMEM);
}

void __init chsc_free_sei_area(void)
{
	kfree(sei_page);
}

int __init
chsc_enable_facility(int operation_code)
{
@@ -1051,8 +1055,6 @@ chsc_enable_facility(int operation_code)
	return ret;
}

subsys_initcall(chsc_alloc_sei_area);

struct css_general_char css_general_characteristics;
struct css_chsc_char css_chsc_characteristics;

+2 −0
Original line number Diff line number Diff line
@@ -79,6 +79,8 @@ extern int chsc_get_ssd_info(struct subchannel_id schid,
			     struct chsc_ssd_info *ssd);
extern int chsc_determine_css_characteristics(void);
extern int css_characteristics_avail;
extern int chsc_alloc_sei_area(void);
extern void chsc_free_sei_area(void);

extern int chsc_enable_facility(int);
struct channel_subsystem;
+16 −3
Original line number Diff line number Diff line
@@ -377,8 +377,6 @@ static int __init slow_subchannel_init(void)
	return 0;
}

subsys_initcall(slow_subchannel_init);

static void css_slow_path_func(struct work_struct *unused)
{
	struct subchannel_id schid;
@@ -641,9 +639,20 @@ init_channel_subsystem (void)
{
	int ret, i;

	if (chsc_determine_css_characteristics() == 0)
	ret = chsc_determine_css_characteristics();
	if (ret == -ENOMEM)
		goto out; /* No need to continue. */
	if (ret == 0)
		css_characteristics_avail = 1;

	ret = chsc_alloc_sei_area();
	if (ret)
		goto out;

	ret = slow_subchannel_init();
	if (ret)
		goto out;

	if ((ret = bus_register(&css_bus_type)))
		goto out;

@@ -709,6 +718,10 @@ out_unregister:
out_bus:
	bus_unregister(&css_bus_type);
out:
	chsc_free_sei_area();
	kfree(slow_subchannel_set);
	printk(KERN_WARNING"cio: failed to initialize css driver (%d)!\n",
	       ret);
	return ret;
}