aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/cio/device.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/s390/cio/device.c')
-rw-r--r--drivers/s390/cio/device.c9
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:
1147static int io_subchannel_chp_event(struct subchannel *sch, 1147static 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 }