diff options
-rw-r--r-- | drivers/scsi/qla2xxx/qla_isr.c | 78 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_nvme.c | 2 |
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 | ||
1840 | static void | 1840 | static void qla24xx_nvme_iocb_entry(scsi_qla_host_t *vha, struct req_que *req, |
1841 | qla24xx_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 | ||
283 | static int qla2x00_start_nvme_mq(srb_t *sp) | 283 | static 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; |