summaryrefslogtreecommitdiffstats
path: root/drivers/s390/cio/css.c
diff options
context:
space:
mode:
authorSebastian Ott <sebott@linux.vnet.ibm.com>2013-04-13 13:01:50 +0200
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2013-04-17 14:07:32 +0200
commit863fc8492734822b95671780db803cd9a4b7d923 (patch)
treebadeeb42bc2f1d047849882aecd37fffef91ca20 /drivers/s390/cio/css.c
parents390/cio: split subchannel registration (diff)
downloadlinux-863fc8492734822b95671780db803cd9a4b7d923.tar.xz
linux-863fc8492734822b95671780db803cd9a4b7d923.zip
s390/cio: get rid of static console subchannel
Remove the static console subchannel (and friends) and use dynamic allocation for these structures. With this change the console subchanel is treated (mostly) like any other subchannel and we can remove some special cases. Reviewed-by: Peter Oberparleiter <oberpar@linux.vnet.ibm.com> Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'drivers/s390/cio/css.c')
-rw-r--r--drivers/s390/cio/css.c23
1 files changed, 9 insertions, 14 deletions
diff --git a/drivers/s390/cio/css.c b/drivers/s390/cio/css.c
index 8a1294b1cbaf..fb0e64f1845a 100644
--- a/drivers/s390/cio/css.c
+++ b/drivers/s390/cio/css.c
@@ -139,19 +139,15 @@ static void css_sch_todo(struct work_struct *work);
static void css_subchannel_release(struct device *dev)
{
- struct subchannel *sch;
+ struct subchannel *sch = to_subchannel(dev);
- sch = to_subchannel(dev);
- if (!cio_is_console(sch->schid)) {
- /* Reset intparm to zeroes. */
- sch->config.intparm = 0;
- cio_commit_config(sch);
- kfree(sch->lock);
- kfree(sch);
- }
+ sch->config.intparm = 0;
+ cio_commit_config(sch);
+ kfree(sch->lock);
+ kfree(sch);
}
-static struct subchannel *css_alloc_subchannel(struct subchannel_id schid)
+struct subchannel *css_alloc_subchannel(struct subchannel_id schid)
{
struct subchannel *sch;
int ret;
@@ -326,10 +322,9 @@ int css_probe_device(struct subchannel_id schid)
return PTR_ERR(sch);
}
ret = css_register_subchannel(sch);
- if (ret) {
- if (!cio_is_console(schid))
- put_device(&sch->dev);
- }
+ if (ret)
+ put_device(&sch->dev);
+
return ret;
}