diff options
author | Sebastian Ott <sebott@linux.vnet.ibm.com> | 2013-04-13 13:01:50 +0200 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2013-04-17 14:07:32 +0200 |
commit | 863fc8492734822b95671780db803cd9a4b7d923 (patch) | |
tree | badeeb42bc2f1d047849882aecd37fffef91ca20 /drivers/s390/cio/css.c | |
parent | s390/cio: split subchannel registration (diff) | |
download | linux-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.c | 23 |
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; } |