aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390
diff options
context:
space:
mode:
authorCornelia Huck <cohuck@de.ibm.com>2006-01-06 03:19:13 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2006-01-06 11:33:49 -0500
commit6810a2bce3aa6573faa9920487274f166fe95c6e (patch)
tree96426b1a7b63fa1f1f40762d27c946ef0013357a /drivers/s390
parent089545f0c71bab6511395c2a060d7f81a99bad58 (diff)
[PATCH] s390: re-activated path detection
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 <cohuck@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/s390')
-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