diff options
author | Peter Oberparleiter <peter.oberparleiter@de.ibm.com> | 2009-09-11 04:28:16 -0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2009-09-11 04:29:36 -0400 |
commit | 1da73bc80bdfc9588192a6e6f5a72f8138f7378d (patch) | |
tree | 80ae0739bcbb47b4afbcba93402d1432cf87afc4 /drivers/s390/cio | |
parent | 62733e5a5a480a893e56fa6133ae90904d857bc4 (diff) |
[S390] cio: consolidate subchannel intparm reset
Ensure that the hardware interruption parameter for a subchannel is
reset when the associated subchannel data structure is freed.
Signed-off-by: Peter Oberparleiter <peter.oberparleiter@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'drivers/s390/cio')
-rw-r--r-- | drivers/s390/cio/css.c | 3 | ||||
-rw-r--r-- | drivers/s390/cio/device.c | 10 |
2 files changed, 3 insertions, 10 deletions
diff --git a/drivers/s390/cio/css.c b/drivers/s390/cio/css.c index 85d43c6bcb66..40d4b3093b71 100644 --- a/drivers/s390/cio/css.c +++ b/drivers/s390/cio/css.c | |||
@@ -170,6 +170,9 @@ css_subchannel_release(struct device *dev) | |||
170 | 170 | ||
171 | sch = to_subchannel(dev); | 171 | sch = to_subchannel(dev); |
172 | if (!cio_is_console(sch->schid)) { | 172 | if (!cio_is_console(sch->schid)) { |
173 | /* Reset intparm to zeroes. */ | ||
174 | sch->config.intparm = 0; | ||
175 | cio_commit_config(sch); | ||
173 | kfree(sch->lock); | 176 | kfree(sch->lock); |
174 | kfree(sch); | 177 | kfree(sch); |
175 | } | 178 | } |
diff --git a/drivers/s390/cio/device.c b/drivers/s390/cio/device.c index d593bc76afe3..b6240227ecba 100644 --- a/drivers/s390/cio/device.c +++ b/drivers/s390/cio/device.c | |||
@@ -1024,9 +1024,6 @@ static void ccw_device_call_sch_unregister(struct work_struct *work) | |||
1024 | return; | 1024 | return; |
1025 | sch = to_subchannel(cdev->dev.parent); | 1025 | sch = to_subchannel(cdev->dev.parent); |
1026 | css_sch_device_unregister(sch); | 1026 | css_sch_device_unregister(sch); |
1027 | /* Reset intparm to zeroes. */ | ||
1028 | sch->config.intparm = 0; | ||
1029 | cio_commit_config(sch); | ||
1030 | /* Release cdev reference for workqueue processing.*/ | 1027 | /* Release cdev reference for workqueue processing.*/ |
1031 | put_device(&cdev->dev); | 1028 | put_device(&cdev->dev); |
1032 | /* Release subchannel reference for local processing. */ | 1029 | /* Release subchannel reference for local processing. */ |
@@ -1210,9 +1207,6 @@ static void io_subchannel_do_unreg(struct work_struct *work) | |||
1210 | 1207 | ||
1211 | sch = container_of(work, struct subchannel, work); | 1208 | sch = container_of(work, struct subchannel, work); |
1212 | css_sch_device_unregister(sch); | 1209 | css_sch_device_unregister(sch); |
1213 | /* Reset intparm to zeroes. */ | ||
1214 | sch->config.intparm = 0; | ||
1215 | cio_commit_config(sch); | ||
1216 | put_device(&sch->dev); | 1210 | put_device(&sch->dev); |
1217 | } | 1211 | } |
1218 | 1212 | ||
@@ -1688,10 +1682,6 @@ static int io_subchannel_sch_event(struct subchannel *sch, int slow) | |||
1688 | spin_unlock_irqrestore(sch->lock, flags); | 1682 | spin_unlock_irqrestore(sch->lock, flags); |
1689 | css_sch_device_unregister(sch); | 1683 | css_sch_device_unregister(sch); |
1690 | spin_lock_irqsave(sch->lock, flags); | 1684 | spin_lock_irqsave(sch->lock, flags); |
1691 | |||
1692 | /* Reset intparm to zeroes. */ | ||
1693 | sch->config.intparm = 0; | ||
1694 | cio_commit_config(sch); | ||
1695 | break; | 1685 | break; |
1696 | case REPROBE: | 1686 | case REPROBE: |
1697 | ccw_device_trigger_reprobe(cdev); | 1687 | ccw_device_trigger_reprobe(cdev); |