aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/be2iscsi/be_main.c
diff options
context:
space:
mode:
authorJayamohan Kallickal <jayamohank@gmail.com>2013-09-28 18:35:42 -0400
committerJames Bottomley <JBottomley@Parallels.com>2013-10-25 04:58:05 -0400
commit8f09a3b97804924bf7787161e4ad5c273d12b11e (patch)
tree11f63a2ea14d44ac4395962f1630b5fd5857c303 /drivers/scsi/be2iscsi/be_main.c
parent7331613ec0cd1847a67eb268a7b9675f79388350 (diff)
[SCSI] be2iscsi: Fix locking mechanism in Unsol Path
The default pdu is a common resource and needs to be protected while manipulating it. Signed-off-by: Minh Tran <minhduc.tran@emulex.com> Signed-off-by: John Soni Jose <sony.john-n@emulex.com> Signed-off-by: Jayamohan Kallickal <jayamohan.kallickal@emulex.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/scsi/be2iscsi/be_main.c')
-rw-r--r--drivers/scsi/be2iscsi/be_main.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/scsi/be2iscsi/be_main.c b/drivers/scsi/be2iscsi/be_main.c
index 5ba575f0051b..991858262b72 100644
--- a/drivers/scsi/be2iscsi/be_main.c
+++ b/drivers/scsi/be2iscsi/be_main.c
@@ -2072,8 +2072,10 @@ static unsigned int beiscsi_process_cq(struct be_eq_obj *pbe_eq)
2072 "BM_%d : Received %s[%d] on CID : %d\n", 2072 "BM_%d : Received %s[%d] on CID : %d\n",
2073 cqe_desc[code], code, cid); 2073 cqe_desc[code], code, cid);
2074 2074
2075 spin_lock_bh(&phba->async_pdu_lock);
2075 hwi_process_default_pdu_ring(beiscsi_conn, phba, 2076 hwi_process_default_pdu_ring(beiscsi_conn, phba,
2076 (struct i_t_dpdu_cqe *)sol); 2077 (struct i_t_dpdu_cqe *)sol);
2078 spin_unlock_bh(&phba->async_pdu_lock);
2077 break; 2079 break;
2078 case UNSOL_DATA_NOTIFY: 2080 case UNSOL_DATA_NOTIFY:
2079 beiscsi_log(phba, KERN_INFO, 2081 beiscsi_log(phba, KERN_INFO,
@@ -2081,8 +2083,10 @@ static unsigned int beiscsi_process_cq(struct be_eq_obj *pbe_eq)
2081 "BM_%d : Received %s[%d] on CID : %d\n", 2083 "BM_%d : Received %s[%d] on CID : %d\n",
2082 cqe_desc[code], code, cid); 2084 cqe_desc[code], code, cid);
2083 2085
2086 spin_lock_bh(&phba->async_pdu_lock);
2084 hwi_process_default_pdu_ring(beiscsi_conn, phba, 2087 hwi_process_default_pdu_ring(beiscsi_conn, phba,
2085 (struct i_t_dpdu_cqe *)sol); 2088 (struct i_t_dpdu_cqe *)sol);
2089 spin_unlock_bh(&phba->async_pdu_lock);
2086 break; 2090 break;
2087 case CXN_INVALIDATE_INDEX_NOTIFY: 2091 case CXN_INVALIDATE_INDEX_NOTIFY:
2088 case CMD_INVALIDATED_NOTIFY: 2092 case CMD_INVALIDATED_NOTIFY:
@@ -2110,8 +2114,10 @@ static unsigned int beiscsi_process_cq(struct be_eq_obj *pbe_eq)
2110 BEISCSI_LOG_IO | BEISCSI_LOG_CONFIG, 2114 BEISCSI_LOG_IO | BEISCSI_LOG_CONFIG,
2111 "BM_%d : Dropping %s[%d] on DPDU ring on CID : %d\n", 2115 "BM_%d : Dropping %s[%d] on DPDU ring on CID : %d\n",
2112 cqe_desc[code], code, cid); 2116 cqe_desc[code], code, cid);
2117 spin_lock_bh(&phba->async_pdu_lock);
2113 hwi_flush_default_pdu_buffer(phba, beiscsi_conn, 2118 hwi_flush_default_pdu_buffer(phba, beiscsi_conn,
2114 (struct i_t_dpdu_cqe *) sol); 2119 (struct i_t_dpdu_cqe *) sol);
2120 spin_unlock_bh(&phba->async_pdu_lock);
2115 break; 2121 break;
2116 case CXN_KILLED_PDU_SIZE_EXCEEDS_DSL: 2122 case CXN_KILLED_PDU_SIZE_EXCEEDS_DSL:
2117 case CXN_KILLED_BURST_LEN_MISMATCH: 2123 case CXN_KILLED_BURST_LEN_MISMATCH:
@@ -5010,6 +5016,7 @@ static int beiscsi_dev_probe(struct pci_dev *pcidev,
5010 spin_lock_init(&phba->io_sgl_lock); 5016 spin_lock_init(&phba->io_sgl_lock);
5011 spin_lock_init(&phba->mgmt_sgl_lock); 5017 spin_lock_init(&phba->mgmt_sgl_lock);
5012 spin_lock_init(&phba->isr_lock); 5018 spin_lock_init(&phba->isr_lock);
5019 spin_lock_init(&phba->async_pdu_lock);
5013 ret = mgmt_get_fw_config(&phba->ctrl, phba); 5020 ret = mgmt_get_fw_config(&phba->ctrl, phba);
5014 if (ret != 0) { 5021 if (ret != 0) {
5015 beiscsi_log(phba, KERN_ERR, BEISCSI_LOG_INIT, 5022 beiscsi_log(phba, KERN_ERR, BEISCSI_LOG_INIT,