aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/cio/device_pgid.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/s390/cio/device_pgid.c')
-rw-r--r--drivers/s390/cio/device_pgid.c15
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)
364void 365void
365ccw_device_verify_start(struct ccw_device *cdev) 366ccw_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