diff options
author | Ingo Molnar <mingo@kernel.org> | 2014-05-22 04:28:56 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2014-05-22 04:28:56 -0400 |
commit | 65c2ce70046c779974af8b5dfc25a0df489089b5 (patch) | |
tree | b16f152eb62b71cf5a1edc51da865b357c989922 /drivers/s390 | |
parent | 842514849a616e9b61acad65771c7afe01e651f9 (diff) | |
parent | 4b660a7f5c8099d88d1a43d8ae138965112592c7 (diff) |
Merge tag 'v3.15-rc6' into sched/core, to pick up the latest fixes
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'drivers/s390')
-rw-r--r-- | drivers/s390/cio/chsc.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/drivers/s390/cio/chsc.c b/drivers/s390/cio/chsc.c index 9f0ea6cb6922..e3bf885f4a6c 100644 --- a/drivers/s390/cio/chsc.c +++ b/drivers/s390/cio/chsc.c | |||
@@ -541,18 +541,27 @@ static void chsc_process_sei_nt0(struct chsc_sei_nt0_area *sei_area) | |||
541 | 541 | ||
542 | static void chsc_process_event_information(struct chsc_sei *sei, u64 ntsm) | 542 | static void chsc_process_event_information(struct chsc_sei *sei, u64 ntsm) |
543 | { | 543 | { |
544 | do { | 544 | static int ntsm_unsupported; |
545 | |||
546 | while (true) { | ||
545 | memset(sei, 0, sizeof(*sei)); | 547 | memset(sei, 0, sizeof(*sei)); |
546 | sei->request.length = 0x0010; | 548 | sei->request.length = 0x0010; |
547 | sei->request.code = 0x000e; | 549 | sei->request.code = 0x000e; |
548 | sei->ntsm = ntsm; | 550 | if (!ntsm_unsupported) |
551 | sei->ntsm = ntsm; | ||
549 | 552 | ||
550 | if (chsc(sei)) | 553 | if (chsc(sei)) |
551 | break; | 554 | break; |
552 | 555 | ||
553 | if (sei->response.code != 0x0001) { | 556 | if (sei->response.code != 0x0001) { |
554 | CIO_CRW_EVENT(2, "chsc: sei failed (rc=%04x)\n", | 557 | CIO_CRW_EVENT(2, "chsc: sei failed (rc=%04x, ntsm=%llx)\n", |
555 | sei->response.code); | 558 | sei->response.code, sei->ntsm); |
559 | |||
560 | if (sei->response.code == 3 && sei->ntsm) { | ||
561 | /* Fallback for old firmware. */ | ||
562 | ntsm_unsupported = 1; | ||
563 | continue; | ||
564 | } | ||
556 | break; | 565 | break; |
557 | } | 566 | } |
558 | 567 | ||
@@ -568,7 +577,10 @@ static void chsc_process_event_information(struct chsc_sei *sei, u64 ntsm) | |||
568 | CIO_CRW_EVENT(2, "chsc: unhandled nt: %d\n", sei->nt); | 577 | CIO_CRW_EVENT(2, "chsc: unhandled nt: %d\n", sei->nt); |
569 | break; | 578 | break; |
570 | } | 579 | } |
571 | } while (sei->u.nt0_area.flags & 0x80); | 580 | |
581 | if (!(sei->u.nt0_area.flags & 0x80)) | ||
582 | break; | ||
583 | } | ||
572 | } | 584 | } |
573 | 585 | ||
574 | /* | 586 | /* |