X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fs390%2Fcio%2Fcss.c;h=ed8507e7997bbbbd1abdf414123c87c6f8630a3b;hb=2c66a62d2d9e2315e6e748b96643f7f141c4d017;hp=ffad52007cfca0bfd7638fddff1602c2e408ce33;hpb=86090fcac5e27b630656fe3d963a6b80e26dac44;p=linux-2.6.git diff --git a/drivers/s390/cio/css.c b/drivers/s390/cio/css.c index ffad52007..ed8507e79 100644 --- a/drivers/s390/cio/css.c +++ b/drivers/s390/cio/css.c @@ -1,7 +1,7 @@ /* * drivers/s390/cio/css.c * driver for channel subsystem - * $Revision: 1.73 $ + * $Revision: 1.74 $ * * Copyright (C) 2002 IBM Deutschland Entwicklung GmbH, * IBM Corporation @@ -218,12 +218,21 @@ css_evaluate_subchannel(int irq, int slow) * We don't notify the driver since we have to throw the device * away in any case. */ - device_unregister(&sch->dev); - /* Reset intparm to zeroes. */ - sch->schib.pmcw.intparm = 0; - cio_modify(sch); - put_device(&sch->dev); - ret = css_probe_device(irq); + if (!disc) { + device_unregister(&sch->dev); + /* Reset intparm to zeroes. */ + sch->schib.pmcw.intparm = 0; + cio_modify(sch); + put_device(&sch->dev); + ret = css_probe_device(irq); + } else { + /* + * We can't immediately deregister the disconnected + * device since it might block. + */ + device_trigger_reprobe(sch); + ret = 0; + } break; case CIO_OPER: if (disc)