From: Cornelia Huck If we receive path not operational indications (pnom in pmcw nonzero), we switch off those paths. To catch them becoming available again, we have to recalculate the lpm from the pmcw each time we start path verification. Signed-off-by: Cornelia Huck Signed-off-by: Martin Schwidefsky Signed-off-by: Andrew Morton --- drivers/s390/cio/device_pgid.c | 15 +++++++++++++++ 1 files changed, 15 insertions(+) diff -puN drivers/s390/cio/device_pgid.c~s390-re-activated-path-detection drivers/s390/cio/device_pgid.c --- devel/drivers/s390/cio/device_pgid.c~s390-re-activated-path-detection 2005-12-09 23:47:32.000000000 -0800 +++ devel-akpm/drivers/s390/cio/device_pgid.c 2005-12-09 23:47:32.000000000 -0800 @@ -22,6 +22,7 @@ #include "cio_debug.h" #include "css.h" #include "device.h" +#include "ioasm.h" /* * Start Sense Path Group ID helper function. Used in ccw_device_recog @@ -364,8 +365,22 @@ ccw_device_verify_irq(struct ccw_device void ccw_device_verify_start(struct ccw_device *cdev) { + struct subchannel *sch = to_subchannel(cdev->dev.parent); + cdev->private->flags.pgid_single = 0; cdev->private->iretry = 5; + /* + * Update sch->lpm with current values to catch paths becoming + * available again. + */ + if (stsch(sch->irq, &sch->schib)) { + ccw_device_verify_done(cdev, -ENODEV); + return; + } + sch->lpm = sch->schib.pmcw.pim & + sch->schib.pmcw.pam & + sch->schib.pmcw.pom & + sch->opm; __ccw_device_verify_start(cdev); } _