|
@@ -242,28 +242,10 @@ s390_subchannel_remove_chpid(struct device *dev, void *data)
|
|
|
if (sch->vpm == mask)
|
|
|
goto out_unreg;
|
|
|
|
|
|
- if ((sch->schib.scsw.actl & (SCSW_ACTL_CLEAR_PEND |
|
|
|
- SCSW_ACTL_HALT_PEND |
|
|
|
- SCSW_ACTL_START_PEND |
|
|
|
- SCSW_ACTL_RESUME_PEND)) &&
|
|
|
- (sch->schib.pmcw.lpum == mask)) {
|
|
|
- int cc = cio_cancel(sch);
|
|
|
-
|
|
|
- if (cc == -ENODEV)
|
|
|
- goto out_unreg;
|
|
|
-
|
|
|
- if (cc == -EINVAL) {
|
|
|
- cc = cio_clear(sch);
|
|
|
- if (cc == -ENODEV)
|
|
|
- goto out_unreg;
|
|
|
- /* Call handler. */
|
|
|
- if (sch->driver && sch->driver->termination)
|
|
|
- sch->driver->termination(&sch->dev);
|
|
|
- goto out_unlock;
|
|
|
- }
|
|
|
- } else if ((sch->schib.scsw.actl & SCSW_ACTL_DEVACT) &&
|
|
|
- (sch->schib.scsw.actl & SCSW_ACTL_SCHACT) &&
|
|
|
- (sch->schib.pmcw.lpum == mask)) {
|
|
|
+ if ((sch->schib.scsw.actl & SCSW_ACTL_DEVACT) &&
|
|
|
+ (sch->schib.scsw.actl & SCSW_ACTL_SCHACT) &&
|
|
|
+ (sch->schib.pmcw.lpum == mask) &&
|
|
|
+ (sch->vpm == 0)) {
|
|
|
int cc;
|
|
|
|
|
|
cc = cio_clear(sch);
|