aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/kernel
diff options
context:
space:
mode:
authorMichael Holzheu <holzheu@linux.vnet.ibm.com>2013-01-21 12:35:15 -0500
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2013-02-14 09:55:05 -0500
commit0894b3ae776a60c6bad994e1d8f809ceb59904da (patch)
treec59763b4aa4959cca69fb584d4f32feffd240419 /arch/s390/kernel
parent9a17e972529e07d6e2531e6b6712bf29687df8a6 (diff)
s390/ipl: Implement diag308 loop for zfcpdump
When a zfcpdump is triggered and a second dump on the same CEC is already in progress for another LPAR, diagnose 308 returns with an error code until the first dump is finished. Currently the second Linux stops with a disabled wait PSW in that case. This is improved now by by triggering diag 308 in a loop until it works. Signed-off-by: Michael Holzheu <holzheu@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390/kernel')
-rw-r--r--arch/s390/kernel/ipl.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c
index 6ffcd3203215..d8a6a385d048 100644
--- a/arch/s390/kernel/ipl.c
+++ b/arch/s390/kernel/ipl.c
@@ -1414,6 +1414,16 @@ static struct kobj_attribute dump_type_attr =
1414 1414
1415static struct kset *dump_kset; 1415static struct kset *dump_kset;
1416 1416
1417static void diag308_dump(void *dump_block)
1418{
1419 diag308(DIAG308_SET, dump_block);
1420 while (1) {
1421 if (diag308(DIAG308_DUMP, NULL) != 0x302)
1422 break;
1423 udelay_simple(USEC_PER_SEC);
1424 }
1425}
1426
1417static void __dump_run(void *unused) 1427static void __dump_run(void *unused)
1418{ 1428{
1419 struct ccw_dev_id devid; 1429 struct ccw_dev_id devid;
@@ -1432,12 +1442,10 @@ static void __dump_run(void *unused)
1432 __cpcmd(buf, NULL, 0, NULL); 1442 __cpcmd(buf, NULL, 0, NULL);
1433 break; 1443 break;
1434 case DUMP_METHOD_CCW_DIAG: 1444 case DUMP_METHOD_CCW_DIAG:
1435 diag308(DIAG308_SET, dump_block_ccw); 1445 diag308_dump(dump_block_ccw);
1436 diag308(DIAG308_DUMP, NULL);
1437 break; 1446 break;
1438 case DUMP_METHOD_FCP_DIAG: 1447 case DUMP_METHOD_FCP_DIAG:
1439 diag308(DIAG308_SET, dump_block_fcp); 1448 diag308_dump(dump_block_fcp);
1440 diag308(DIAG308_DUMP, NULL);
1441 break; 1449 break;
1442 default: 1450 default:
1443 break; 1451 break;