Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 34aec07c authored by Sebastian Ott's avatar Sebastian Ott Committed by Martin Schwidefsky
Browse files

[S390] chsc: initialization fixes



This patch fixes:
 * kfree vs. free_page usage
 * structure definition for determine_css_characteristics
 * naming convention for the chsc init function
 * deregistration of crw handlers in the cleanup path

Signed-off-by: default avatarSebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent b730f3a9
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -2,7 +2,7 @@
 *  drivers/s390/cio/chsc.c
 *   S/390 common I/O routines -- channel subsystem call
 *
 *    Copyright IBM Corp. 1999,2008
 *    Copyright IBM Corp. 1999,2010
 *    Author(s): Ingo Adlung (adlung@de.ibm.com)
 *		 Cornelia Huck (cornelia.huck@de.ibm.com)
 *		 Arnd Bergmann (arndb@de.ibm.com)
@@ -813,7 +813,7 @@ out:
	return ret;
}

int __init chsc_alloc_sei_area(void)
int __init chsc_init(void)
{
	int ret;

@@ -825,14 +825,14 @@ int __init chsc_alloc_sei_area(void)
	}
	ret = crw_register_handler(CRW_RSC_CSS, chsc_process_crw);
	if (ret)
		kfree(sei_page);
		free_page((unsigned long)sei_page);
	return ret;
}

void __init chsc_free_sei_area(void)
void __init chsc_init_cleanup(void)
{
	crw_unregister_handler(CRW_RSC_CSS);
	kfree(sei_page);
	free_page((unsigned long)sei_page);
}

int chsc_enable_facility(int operation_code)
@@ -895,7 +895,7 @@ chsc_determine_css_characteristics(void)
		struct chsc_header response;
		u32 reserved4;
		u32 general_char[510];
		u32 chsc_char[518];
		u32 chsc_char[508];
	} __attribute__ ((packed)) *scsc_area;

	scsc_area = (void *)get_zeroed_page(GFP_KERNEL | GFP_DMA);
+2 −2
Original line number Diff line number Diff line
@@ -60,8 +60,8 @@ struct chsc_ssd_info {
extern int chsc_get_ssd_info(struct subchannel_id schid,
			     struct chsc_ssd_info *ssd);
extern int chsc_determine_css_characteristics(void);
extern int chsc_alloc_sei_area(void);
extern void chsc_free_sei_area(void);
extern int chsc_init(void);
extern void chsc_init_cleanup(void);

extern int chsc_enable_facility(int);
struct channel_subsystem;
+9 −9
Original line number Diff line number Diff line
/*
 * driver for channel subsystem
 *
 * Copyright IBM Corp. 2002, 2009
 * Copyright IBM Corp. 2002, 2010
 *
 * Author(s): Arnd Bergmann (arndb@de.ibm.com)
 *	      Cornelia Huck (cornelia.huck@de.ibm.com)
@@ -863,14 +863,14 @@ static int __init css_bus_init(void)
{
	int ret, i;

	ret = chsc_init();
	if (ret)
		return ret;

	ret = chsc_determine_css_characteristics();
	if (ret == -ENOMEM)
		goto out;

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

	/* Try to enable MSS. */
	ret = chsc_enable_facility(CHSC_SDA_OC_MSS);
	if (ret)
@@ -956,9 +956,9 @@ out_unregister:
	}
	bus_unregister(&css_bus_type);
out:
	crw_unregister_handler(CRW_RSC_CSS);
	chsc_free_sei_area();
	crw_unregister_handler(CRW_RSC_SCH);
	idset_free(slow_subchannel_set);
	chsc_init_cleanup();
	pr_alert("The CSS device driver initialization failed with "
		 "errno=%d\n", ret);
	return ret;
@@ -978,9 +978,9 @@ static void __init css_bus_cleanup(void)
		device_unregister(&css->device);
	}
	bus_unregister(&css_bus_type);
	crw_unregister_handler(CRW_RSC_CSS);
	chsc_free_sei_area();
	crw_unregister_handler(CRW_RSC_SCH);
	idset_free(slow_subchannel_set);
	chsc_init_cleanup();
	isc_unregister(IO_SCH_ISC);
}