mirror of
https://github.com/hardkernel/linux.git
synced 2026-03-24 19:40:21 +09:00
s390/chsc: fix SEI usage on old FW levels
commit 06cd7a874e upstream.
Using a notification type mask for the store event information chsc
is unsupported on some firmware levels. Retry SEI with that mask set
to zero (which is the old way of requesting only channel subsystem
related events).
Reported-and-tested-by: Stefan Haberland <stefan.haberland@de.ibm.com>
Reviewed-by: Peter Oberparleiter <oberpar@linux.vnet.ibm.com>
Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
6ae6e5072b
commit
8ba2a0e064
@@ -541,18 +541,27 @@ static void chsc_process_sei_nt0(struct chsc_sei_nt0_area *sei_area)
|
||||
|
||||
static void chsc_process_event_information(struct chsc_sei *sei, u64 ntsm)
|
||||
{
|
||||
do {
|
||||
static int ntsm_unsupported;
|
||||
|
||||
while (true) {
|
||||
memset(sei, 0, sizeof(*sei));
|
||||
sei->request.length = 0x0010;
|
||||
sei->request.code = 0x000e;
|
||||
sei->ntsm = ntsm;
|
||||
if (!ntsm_unsupported)
|
||||
sei->ntsm = ntsm;
|
||||
|
||||
if (chsc(sei))
|
||||
break;
|
||||
|
||||
if (sei->response.code != 0x0001) {
|
||||
CIO_CRW_EVENT(2, "chsc: sei failed (rc=%04x)\n",
|
||||
sei->response.code);
|
||||
CIO_CRW_EVENT(2, "chsc: sei failed (rc=%04x, ntsm=%llx)\n",
|
||||
sei->response.code, sei->ntsm);
|
||||
|
||||
if (sei->response.code == 3 && sei->ntsm) {
|
||||
/* Fallback for old firmware. */
|
||||
ntsm_unsupported = 1;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -568,7 +577,10 @@ static void chsc_process_event_information(struct chsc_sei *sei, u64 ntsm)
|
||||
CIO_CRW_EVENT(2, "chsc: unhandled nt: %d\n", sei->nt);
|
||||
break;
|
||||
}
|
||||
} while (sei->u.nt0_area.flags & 0x80);
|
||||
|
||||
if (!(sei->u.nt0_area.flags & 0x80))
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user