lkml.org 
[lkml]   [2019]   [Dec]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.9 07/42] scsi: csiostor: Don't enable IRQs too early
    Date
    From: Dan Carpenter <dan.carpenter@oracle.com>

    [ Upstream commit d6c9b31ac3064fbedf8961f120a4c117daa59932 ]

    These are called with IRQs disabled from csio_mgmt_tmo_handler() so we
    can't call spin_unlock_irq() or it will enable IRQs prematurely.

    Fixes: a3667aaed569 ("[SCSI] csiostor: Chelsio FCoE offload driver")
    Link: https://lore.kernel.org/r/20191019085913.GA14245@mwanda
    Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/scsi/csiostor/csio_lnode.c | 15 +++++++++------
    1 file changed, 9 insertions(+), 6 deletions(-)

    diff --git a/drivers/scsi/csiostor/csio_lnode.c b/drivers/scsi/csiostor/csio_lnode.c
    index be5ee2d378155..957767d383610 100644
    --- a/drivers/scsi/csiostor/csio_lnode.c
    +++ b/drivers/scsi/csiostor/csio_lnode.c
    @@ -301,6 +301,7 @@ csio_ln_fdmi_rhba_cbfn(struct csio_hw *hw, struct csio_ioreq *fdmi_req)
    struct fc_fdmi_port_name *port_name;
    uint8_t buf[64];
    uint8_t *fc4_type;
    + unsigned long flags;

    if (fdmi_req->wr_status != FW_SUCCESS) {
    csio_ln_dbg(ln, "WR error:%x in processing fdmi rhba cmd\n",
    @@ -377,13 +378,13 @@ csio_ln_fdmi_rhba_cbfn(struct csio_hw *hw, struct csio_ioreq *fdmi_req)
    len = (uint32_t)(pld - (uint8_t *)cmd);

    /* Submit FDMI RPA request */
    - spin_lock_irq(&hw->lock);
    + spin_lock_irqsave(&hw->lock, flags);
    if (csio_ln_mgmt_submit_req(fdmi_req, csio_ln_fdmi_done,
    FCOE_CT, &fdmi_req->dma_buf, len)) {
    CSIO_INC_STATS(ln, n_fdmi_err);
    csio_ln_dbg(ln, "Failed to issue fdmi rpa req\n");
    }
    - spin_unlock_irq(&hw->lock);
    + spin_unlock_irqrestore(&hw->lock, flags);
    }

    /*
    @@ -404,6 +405,7 @@ csio_ln_fdmi_dprt_cbfn(struct csio_hw *hw, struct csio_ioreq *fdmi_req)
    struct fc_fdmi_rpl *reg_pl;
    struct fs_fdmi_attrs *attrib_blk;
    uint8_t buf[64];
    + unsigned long flags;

    if (fdmi_req->wr_status != FW_SUCCESS) {
    csio_ln_dbg(ln, "WR error:%x in processing fdmi dprt cmd\n",
    @@ -483,13 +485,13 @@ csio_ln_fdmi_dprt_cbfn(struct csio_hw *hw, struct csio_ioreq *fdmi_req)
    attrib_blk->numattrs = htonl(numattrs);

    /* Submit FDMI RHBA request */
    - spin_lock_irq(&hw->lock);
    + spin_lock_irqsave(&hw->lock, flags);
    if (csio_ln_mgmt_submit_req(fdmi_req, csio_ln_fdmi_rhba_cbfn,
    FCOE_CT, &fdmi_req->dma_buf, len)) {
    CSIO_INC_STATS(ln, n_fdmi_err);
    csio_ln_dbg(ln, "Failed to issue fdmi rhba req\n");
    }
    - spin_unlock_irq(&hw->lock);
    + spin_unlock_irqrestore(&hw->lock, flags);
    }

    /*
    @@ -504,6 +506,7 @@ csio_ln_fdmi_dhba_cbfn(struct csio_hw *hw, struct csio_ioreq *fdmi_req)
    void *cmd;
    struct fc_fdmi_port_name *port_name;
    uint32_t len;
    + unsigned long flags;

    if (fdmi_req->wr_status != FW_SUCCESS) {
    csio_ln_dbg(ln, "WR error:%x in processing fdmi dhba cmd\n",
    @@ -534,13 +537,13 @@ csio_ln_fdmi_dhba_cbfn(struct csio_hw *hw, struct csio_ioreq *fdmi_req)
    len += sizeof(*port_name);

    /* Submit FDMI request */
    - spin_lock_irq(&hw->lock);
    + spin_lock_irqsave(&hw->lock, flags);
    if (csio_ln_mgmt_submit_req(fdmi_req, csio_ln_fdmi_dprt_cbfn,
    FCOE_CT, &fdmi_req->dma_buf, len)) {
    CSIO_INC_STATS(ln, n_fdmi_err);
    csio_ln_dbg(ln, "Failed to issue fdmi dprt req\n");
    }
    - spin_unlock_irq(&hw->lock);
    + spin_unlock_irqrestore(&hw->lock, flags);
    }

    /**
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-12-11 16:36    [W:6.795 / U:0.512 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site