diff options
Diffstat (limited to 'drivers/s390/cio/device.c')
-rw-r--r-- | drivers/s390/cio/device.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/s390/cio/device.c b/drivers/s390/cio/device.c index 07b1a074beaf..881bdfd99140 100644 --- a/drivers/s390/cio/device.c +++ b/drivers/s390/cio/device.c | |||
@@ -1147,6 +1147,7 @@ err: | |||
1147 | static int io_subchannel_chp_event(struct subchannel *sch, | 1147 | static int io_subchannel_chp_event(struct subchannel *sch, |
1148 | struct chp_link *link, int event) | 1148 | struct chp_link *link, int event) |
1149 | { | 1149 | { |
1150 | struct ccw_device *cdev = sch_get_cdev(sch); | ||
1150 | int mask; | 1151 | int mask; |
1151 | 1152 | ||
1152 | mask = chp_ssd_get_mask(&sch->ssd_info, link); | 1153 | mask = chp_ssd_get_mask(&sch->ssd_info, link); |
@@ -1156,22 +1157,30 @@ static int io_subchannel_chp_event(struct subchannel *sch, | |||
1156 | case CHP_VARY_OFF: | 1157 | case CHP_VARY_OFF: |
1157 | sch->opm &= ~mask; | 1158 | sch->opm &= ~mask; |
1158 | sch->lpm &= ~mask; | 1159 | sch->lpm &= ~mask; |
1160 | if (cdev) | ||
1161 | cdev->private->path_gone_mask |= mask; | ||
1159 | io_subchannel_terminate_path(sch, mask); | 1162 | io_subchannel_terminate_path(sch, mask); |
1160 | break; | 1163 | break; |
1161 | case CHP_VARY_ON: | 1164 | case CHP_VARY_ON: |
1162 | sch->opm |= mask; | 1165 | sch->opm |= mask; |
1163 | sch->lpm |= mask; | 1166 | sch->lpm |= mask; |
1167 | if (cdev) | ||
1168 | cdev->private->path_new_mask |= mask; | ||
1164 | io_subchannel_verify(sch); | 1169 | io_subchannel_verify(sch); |
1165 | break; | 1170 | break; |
1166 | case CHP_OFFLINE: | 1171 | case CHP_OFFLINE: |
1167 | if (cio_update_schib(sch)) | 1172 | if (cio_update_schib(sch)) |
1168 | return -ENODEV; | 1173 | return -ENODEV; |
1174 | if (cdev) | ||
1175 | cdev->private->path_gone_mask |= mask; | ||
1169 | io_subchannel_terminate_path(sch, mask); | 1176 | io_subchannel_terminate_path(sch, mask); |
1170 | break; | 1177 | break; |
1171 | case CHP_ONLINE: | 1178 | case CHP_ONLINE: |
1172 | if (cio_update_schib(sch)) | 1179 | if (cio_update_schib(sch)) |
1173 | return -ENODEV; | 1180 | return -ENODEV; |
1174 | sch->lpm |= mask & sch->opm; | 1181 | sch->lpm |= mask & sch->opm; |
1182 | if (cdev) | ||
1183 | cdev->private->path_new_mask |= mask; | ||
1175 | io_subchannel_verify(sch); | 1184 | io_subchannel_verify(sch); |
1176 | break; | 1185 | break; |
1177 | } | 1186 | } |