aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/scsi/qla2xxx/qla_isr.c78
-rw-r--r--drivers/scsi/qla2xxx/qla_nvme.c2
2 files changed, 29 insertions, 51 deletions
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
index bc2c7ded6949..5fbb8f4b4dc7 100644
--- a/drivers/scsi/qla2xxx/qla_isr.c
+++ b/drivers/scsi/qla2xxx/qla_isr.c
@@ -1837,31 +1837,23 @@ qla24xx_tm_iocb_entry(scsi_qla_host_t *vha, struct req_que *req, void *tsk)
1837 sp->done(sp, 0); 1837 sp->done(sp, 0);
1838} 1838}
1839 1839
1840static void 1840static void qla24xx_nvme_iocb_entry(scsi_qla_host_t *vha, struct req_que *req,
1841qla24xx_nvme_iocb_entry(scsi_qla_host_t *vha, struct req_que *req, void *tsk) 1841 void *tsk, srb_t *sp)
1842{ 1842{
1843 const char func[] = "NVME-IOCB";
1844 fc_port_t *fcport; 1843 fc_port_t *fcport;
1845 srb_t *sp;
1846 struct srb_iocb *iocb; 1844 struct srb_iocb *iocb;
1847 struct sts_entry_24xx *sts = (struct sts_entry_24xx *)tsk; 1845 struct sts_entry_24xx *sts = (struct sts_entry_24xx *)tsk;
1848 uint16_t state_flags; 1846 uint16_t state_flags;
1849 struct nvmefc_fcp_req *fd; 1847 struct nvmefc_fcp_req *fd;
1850 uint16_t ret = 0; 1848 uint16_t ret = 0;
1851 struct srb_iocb *nvme;
1852
1853 sp = qla2x00_get_sp_from_handle(vha, func, req, tsk);
1854 if (!sp)
1855 return;
1856 1849
1857 iocb = &sp->u.iocb_cmd; 1850 iocb = &sp->u.iocb_cmd;
1858 fcport = sp->fcport; 1851 fcport = sp->fcport;
1859 iocb->u.nvme.comp_status = le16_to_cpu(sts->comp_status); 1852 iocb->u.nvme.comp_status = le16_to_cpu(sts->comp_status);
1860 state_flags = le16_to_cpu(sts->state_flags); 1853 state_flags = le16_to_cpu(sts->state_flags);
1861 fd = iocb->u.nvme.desc; 1854 fd = iocb->u.nvme.desc;
1862 nvme = &sp->u.iocb_cmd;
1863 1855
1864 if (unlikely(nvme->u.nvme.aen_op)) 1856 if (unlikely(iocb->u.nvme.aen_op))
1865 atomic_dec(&sp->vha->hw->nvme_active_aen_cnt); 1857 atomic_dec(&sp->vha->hw->nvme_active_aen_cnt);
1866 1858
1867 /* 1859 /*
@@ -1895,45 +1887,30 @@ qla24xx_nvme_iocb_entry(scsi_qla_host_t *vha, struct req_que *req, void *tsk)
1895 fd->transferred_length = fd->payload_length - 1887 fd->transferred_length = fd->payload_length -
1896 le32_to_cpu(sts->residual_len); 1888 le32_to_cpu(sts->residual_len);
1897 1889
1898 /* 1890 switch (le16_to_cpu(sts->comp_status)) {
1899 * If transport error then Failure (HBA rejects request) 1891 case CS_COMPLETE:
1900 * otherwise transport will handle. 1892 ret = QLA_SUCCESS;
1901 */ 1893 break;
1902 if (sts->entry_status) { 1894 case CS_ABORTED:
1903 ql_log(ql_log_warn, fcport->vha, 0x5038, 1895 case CS_RESET:
1904 "NVME-%s error - hdl=%x entry-status(%x).\n", 1896 case CS_PORT_UNAVAILABLE:
1905 sp->name, sp->handle, sts->entry_status); 1897 case CS_PORT_LOGGED_OUT:
1898 case CS_PORT_BUSY:
1899 ql_log(ql_log_warn, fcport->vha, 0x5060,
1900 "NVME-%s ERR Handling - hdl=%x completion status(%x) resid=%x ox_id=%x\n",
1901 sp->name, sp->handle, sts->comp_status,
1902 le32_to_cpu(sts->residual_len), sts->ox_id);
1903 fd->transferred_length = 0;
1904 iocb->u.nvme.rsp_pyld_len = 0;
1905 ret = QLA_ABORTED;
1906 break;
1907 default:
1908 ql_log(ql_log_warn, fcport->vha, 0x5060,
1909 "NVME-%s error - hdl=%x completion status(%x) resid=%x ox_id=%x\n",
1910 sp->name, sp->handle, sts->comp_status,
1911 le32_to_cpu(sts->residual_len), sts->ox_id);
1906 ret = QLA_FUNCTION_FAILED; 1912 ret = QLA_FUNCTION_FAILED;
1907 } else { 1913 break;
1908 switch (le16_to_cpu(sts->comp_status)) {
1909 case CS_COMPLETE:
1910 ret = QLA_SUCCESS;
1911 break;
1912
1913 case CS_RESET:
1914 case CS_PORT_UNAVAILABLE:
1915 fcport->nvme_flag |= NVME_FLAG_RESETTING;
1916 /* fall through */
1917 case CS_ABORTED:
1918 case CS_PORT_LOGGED_OUT:
1919 case CS_PORT_BUSY:
1920 ql_log(ql_log_warn, fcport->vha, 0x5060,
1921 "NVME-%s ERR Handling - hdl=%x completion status(%x) resid=%x ox_id=%x\n",
1922 sp->name, sp->handle, sts->comp_status,
1923 le32_to_cpu(sts->residual_len), sts->ox_id);
1924 fd->transferred_length = 0;
1925 iocb->u.nvme.rsp_pyld_len = 0;
1926 ret = QLA_ABORTED;
1927 break;
1928
1929 default:
1930 ql_log(ql_log_warn, fcport->vha, 0x5060,
1931 "NVME-%s error - hdl=%x completion status(%x) resid=%x ox_id=%x\n",
1932 sp->name, sp->handle, sts->comp_status,
1933 le32_to_cpu(sts->residual_len), sts->ox_id);
1934 ret = QLA_FUNCTION_FAILED;
1935 break;
1936 }
1937 } 1914 }
1938 sp->done(sp, ret); 1915 sp->done(sp, ret);
1939} 1916}
@@ -2461,7 +2438,8 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt)
2461 2438
2462 /* NVME completion. */ 2439 /* NVME completion. */
2463 if (sp->type == SRB_NVME_CMD) { 2440 if (sp->type == SRB_NVME_CMD) {
2464 qla24xx_nvme_iocb_entry(vha, req, pkt); 2441 req->outstanding_cmds[handle] = NULL;
2442 qla24xx_nvme_iocb_entry(vha, req, pkt, sp);
2465 return; 2443 return;
2466 } 2444 }
2467 2445
diff --git a/drivers/scsi/qla2xxx/qla_nvme.c b/drivers/scsi/qla2xxx/qla_nvme.c
index 57275bc9fe14..c5a963c2c86e 100644
--- a/drivers/scsi/qla2xxx/qla_nvme.c
+++ b/drivers/scsi/qla2xxx/qla_nvme.c
@@ -280,7 +280,7 @@ static void qla_nvme_poll(struct nvme_fc_local_port *lport, void *hw_queue_handl
280 spin_unlock_irqrestore(&qpair->qp_lock, flags); 280 spin_unlock_irqrestore(&qpair->qp_lock, flags);
281} 281}
282 282
283static int qla2x00_start_nvme_mq(srb_t *sp) 283static inline int qla2x00_start_nvme_mq(srb_t *sp)
284{ 284{
285 unsigned long flags; 285 unsigned long flags;
286 uint32_t *clr_ptr; 286 uint32_t *clr_ptr;