lkml.org 
[lkml]   [2018]   [Apr]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 71/74] s390/cio: update chpid descriptor after resource accessibility event
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

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

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

    commit af2e460ade0b0180d0f3812ca4f4f59cc9597f3e upstream.

    Channel path descriptors have been seen as something stable (as
    long as the chpid is configured). Recent tests have shown that the
    descriptor can also be altered when the link state of a channel path
    changes. Thus it is necessary to update the descriptor during
    handling of resource accessibility events.

    Cc: <stable@vger.kernel.org>
    Signed-off-by: Sebastian Ott <sebott@linux.ibm.com>
    Reviewed-by: Peter Oberparleiter <oberpar@linux.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 | 14 +++++++++++---
    1 file changed, 11 insertions(+), 3 deletions(-)

    --- a/drivers/s390/cio/chsc.c
    +++ b/drivers/s390/cio/chsc.c
    @@ -451,6 +451,7 @@ static void chsc_process_sei_link_incide

    static void chsc_process_sei_res_acc(struct chsc_sei_nt0_area *sei_area)
    {
    + struct channel_path *chp;
    struct chp_link link;
    struct chp_id chpid;
    int status;
    @@ -463,10 +464,17 @@ static void chsc_process_sei_res_acc(str
    chpid.id = sei_area->rsid;
    /* allocate a new channel path structure, if needed */
    status = chp_get_status(chpid);
    - if (status < 0)
    - chp_new(chpid);
    - else if (!status)
    + if (!status)
    return;
    +
    + if (status < 0) {
    + chp_new(chpid);
    + } else {
    + chp = chpid_to_chp(chpid);
    + mutex_lock(&chp->lock);
    + chp_update_desc(chp);
    + mutex_unlock(&chp->lock);
    + }
    memset(&link, 0, sizeof(struct chp_link));
    link.chpid = chpid;
    if ((sei_area->vf & 0xc0) != 0) {

    \
     
     \ /
      Last update: 2018-04-27 17:01    [W:3.671 / U:0.292 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site