diff options
Diffstat (limited to 'drivers/s390/cio/device_pgid.c')
-rw-r--r-- | drivers/s390/cio/device_pgid.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/s390/cio/device_pgid.c b/drivers/s390/cio/device_pgid.c index 0adac8a67331..757b2706d5a9 100644 --- a/drivers/s390/cio/device_pgid.c +++ b/drivers/s390/cio/device_pgid.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include "cio_debug.h" | 22 | #include "cio_debug.h" |
23 | #include "css.h" | 23 | #include "css.h" |
24 | #include "device.h" | 24 | #include "device.h" |
25 | #include "ioasm.h" | ||
25 | 26 | ||
26 | /* | 27 | /* |
27 | * Start Sense Path Group ID helper function. Used in ccw_device_recog | 28 | * Start Sense Path Group ID helper function. Used in ccw_device_recog |
@@ -364,8 +365,22 @@ ccw_device_verify_irq(struct ccw_device *cdev, enum dev_event dev_event) | |||
364 | void | 365 | void |
365 | ccw_device_verify_start(struct ccw_device *cdev) | 366 | ccw_device_verify_start(struct ccw_device *cdev) |
366 | { | 367 | { |
368 | struct subchannel *sch = to_subchannel(cdev->dev.parent); | ||
369 | |||
367 | cdev->private->flags.pgid_single = 0; | 370 | cdev->private->flags.pgid_single = 0; |
368 | cdev->private->iretry = 5; | 371 | cdev->private->iretry = 5; |
372 | /* | ||
373 | * Update sch->lpm with current values to catch paths becoming | ||
374 | * available again. | ||
375 | */ | ||
376 | if (stsch(sch->irq, &sch->schib)) { | ||
377 | ccw_device_verify_done(cdev, -ENODEV); | ||
378 | return; | ||
379 | } | ||
380 | sch->lpm = sch->schib.pmcw.pim & | ||
381 | sch->schib.pmcw.pam & | ||
382 | sch->schib.pmcw.pom & | ||
383 | sch->opm; | ||
369 | __ccw_device_verify_start(cdev); | 384 | __ccw_device_verify_start(cdev); |
370 | } | 385 | } |
371 | 386 | ||