lkml.org 
[lkml]   [2014]   [May]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.14 21/83] s390/chsc: fix SEI usage on old FW levels
    Date
    3.14-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Sebastian Ott <sebott@linux.vnet.ibm.com>

    commit 06cd7a874ec6e09d151aeb1fa8600e14f1ff89f6 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>

    ---
    drivers/s390/cio/chsc.c | 22 +++++++++++++++++-----
    1 file changed, 17 insertions(+), 5 deletions(-)

    --- a/drivers/s390/cio/chsc.c
    +++ b/drivers/s390/cio/chsc.c
    @@ -541,18 +541,27 @@ static void chsc_process_sei_nt0(struct

    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_informati
    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;
    + }
    }

    /*



    \
     
     \ /
      Last update: 2014-05-11 23:21    [W:4.315 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site