diff options
author | Cornelia Huck <cornelia.huck@de.ibm.com> | 2006-07-12 18:40:19 +0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2006-07-12 18:40:19 +0400 |
commit | 7e560814de1972e1bfc780616841d7a0032ca467 (patch) | |
tree | f8d544454b54a0167f757cc945a3e29165f211f8 /drivers/s390/s390mach.c | |
parent | 5c898ba9d4b6c14fdd367b96e3641c2508b4a4a9 (diff) | |
download | linux-7e560814de1972e1bfc780616841d7a0032ca467.tar.xz |
[S390] path grouping and path verifications fixes.
1. Multipath devices for which SetPGID is not supported are not handled well.
Use NOP ccws for path verification (sans path grouping) when SetPGID is not
supported.
2. Check for PGIDs already set with SensePGID on _all_ paths (not just the
first one) and try to find a common one. Moan if no common PGID can be
found (and use NOP verification). If no PGIDs have been set, use the css
global PGID (as before). (Rationale: SetPGID will get a command reject if
the PGID it tries to set does not match the already set PGID.)
3. Immediately before reboot, issue RESET CHANNEL PATH (rcp) on all chpids. This
will remove the old PGIDs. rcp will generate solicited CRWs which can be
savely ignored by the machine check handler (all other actions create
unsolicited CRWs).
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'drivers/s390/s390mach.c')
-rw-r--r-- | drivers/s390/s390mach.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/s390/s390mach.c b/drivers/s390/s390mach.c index ffb3677e354f..5399c5d99b81 100644 --- a/drivers/s390/s390mach.c +++ b/drivers/s390/s390mach.c @@ -111,6 +111,16 @@ repeat: break; case CRW_RSC_CPATH: pr_debug("source is channel path %02X\n", crw[0].rsid); + /* + * Check for solicited machine checks. These are + * created by reset channel path and need not be + * reported to the common I/O layer. + */ + if (crw[chain].slct) { + DBG(KERN_INFO"solicited machine check for " + "channel path %02X\n", crw[0].rsid); + break; + } switch (crw[0].erc) { case CRW_ERC_IPARM: /* Path has come. */ ret = chp_process_crw(crw[0].rsid, 1); |