scsi: csiostor: Don't enable IRQs too early
Subsystems (2)
PATCH 1/1 scsi: csiostor: Don't enable IRQs too early
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")
Signed-off-by Dan Carpenter <[email protected]>
--- drivers/scsi/csiostor/csio_lnode.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-)
drivers/scsi/csiostor/csio_lnode.c +9 -6
@@ -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",
@@ -385,13 +386,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); }/*
@@ -412,6 +413,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",
@@ -491,13 +493,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); }/*
@@ -512,6 +514,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",
@@ -542,13 +545,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); }/**
Signature · 1 line
2.20.1
Martin K. Petersen
AppliedDan,
Quoted 2 lines
These are called with IRQs disabled from
csio_mgmt_tmo_handler()so we can't callspin_unlock_irq()or it will enable IRQs prematurely.
Applied to 5.5/scsi-queue, thanks!
Signature · 1 line
Martin K. Petersen Oracle Linux Engineering