hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/drivers/scsi/qedi/qedi_fw.c
....@@ -1,10 +1,7 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * QLogic iSCSI Offload Driver
34 * Copyright (c) 2016 Cavium Inc.
4
- *
5
- * This software is available under the terms of the GNU General Public License
6
- * (GPL) Version 2, available from the file COPYING in the main directory of
7
- * this source tree.
85 */
96
107 #include <linux/blkdev.h>
....@@ -76,7 +73,6 @@
7673 spin_unlock(&qedi_conn->list_lock);
7774
7875 cmd->state = RESPONSE_RECEIVED;
79
- qedi_clear_task_idx(qedi, cmd->task_id);
8076 __iscsi_complete_pdu(conn, (struct iscsi_hdr *)resp_hdr, NULL, 0);
8177
8278 spin_unlock(&session->back_lock);
....@@ -141,7 +137,6 @@
141137 spin_unlock(&qedi_conn->list_lock);
142138
143139 cmd->state = RESPONSE_RECEIVED;
144
- qedi_clear_task_idx(qedi, cmd->task_id);
145140
146141 __iscsi_complete_pdu(conn, (struct iscsi_hdr *)resp_hdr_ptr,
147142 qedi_conn->gen_pdu.resp_buf,
....@@ -159,23 +154,14 @@
159154 struct iscsi_conn *conn = qedi_conn->cls_conn->dd_data;
160155 struct iscsi_session *session = conn->session;
161156 struct iscsi_tm_rsp *resp_hdr_ptr;
162
- struct iscsi_cls_session *cls_sess;
163157 int rval = 0;
164158
165159 set_bit(QEDI_CONN_FW_CLEANUP, &qedi_conn->flags);
166160 resp_hdr_ptr = (struct iscsi_tm_rsp *)qedi_cmd->tmf_resp_buf;
167
- cls_sess = iscsi_conn_to_session(qedi_conn->cls_conn);
168161
169
- iscsi_block_session(session->cls_session);
170162 rval = qedi_cleanup_all_io(qedi, qedi_conn, qedi_cmd->task, true);
171
- if (rval) {
172
- qedi_clear_task_idx(qedi, qedi_cmd->task_id);
173
- iscsi_unblock_session(session->cls_session);
163
+ if (rval)
174164 goto exit_tmf_resp;
175
- }
176
-
177
- iscsi_unblock_session(session->cls_session);
178
- qedi_clear_task_idx(qedi, qedi_cmd->task_id);
179165
180166 spin_lock(&session->back_lock);
181167 __iscsi_complete_pdu(conn, (struct iscsi_hdr *)resp_hdr_ptr, NULL, 0);
....@@ -250,8 +236,6 @@
250236 goto unblock_sess;
251237 }
252238
253
- qedi_clear_task_idx(qedi, qedi_cmd->task_id);
254
-
255239 __iscsi_complete_pdu(conn, (struct iscsi_hdr *)resp_hdr_ptr, NULL, 0);
256240 kfree(resp_hdr_ptr);
257241
....@@ -319,7 +303,6 @@
319303 "Freeing tid=0x%x for cid=0x%x\n",
320304 cmd->task_id, qedi_conn->iscsi_conn_id);
321305 cmd->state = RESPONSE_RECEIVED;
322
- qedi_clear_task_idx(qedi, cmd->task_id);
323306 }
324307
325308 static void qedi_get_rq_bdq_buf(struct qedi_ctx *qedi,
....@@ -365,7 +348,6 @@
365348 struct iscsi_cqe_unsolicited *cqe,
366349 int count)
367350 {
368
- u16 tmp;
369351 u16 idx = 0;
370352 struct scsi_bd *pbl;
371353
....@@ -394,10 +376,10 @@
394376 qedi->bdq_prod_idx += count;
395377
396378 writew(qedi->bdq_prod_idx, qedi->bdq_primary_prod);
397
- tmp = readw(qedi->bdq_primary_prod);
379
+ readw(qedi->bdq_primary_prod);
398380
399381 writew(qedi->bdq_prod_idx, qedi->bdq_secondary_prod);
400
- tmp = readw(qedi->bdq_secondary_prod);
382
+ readw(qedi->bdq_secondary_prod);
401383 }
402384
403385 static void qedi_unsol_pdu_adjust_bdq(struct qedi_ctx *qedi,
....@@ -474,7 +456,6 @@
474456 }
475457
476458 spin_unlock(&qedi_conn->list_lock);
477
- qedi_clear_task_idx(qedi, cmd->task_id);
478459 }
479460
480461 done:
....@@ -624,13 +605,6 @@
624605 goto error;
625606 }
626607
627
- if (!sc_cmd->request->special) {
628
- QEDI_WARN(&qedi->dbg_ctx,
629
- "request->special is NULL so request not valid, sc_cmd=%p.\n",
630
- sc_cmd);
631
- goto error;
632
- }
633
-
634608 if (!sc_cmd->request->q) {
635609 QEDI_WARN(&qedi->dbg_ctx,
636610 "request->q is NULL so request is not valid, sc_cmd=%p.\n",
....@@ -686,7 +660,6 @@
686660 if (qedi_io_tracing)
687661 qedi_trace_io(qedi, task, cmd->task_id, QEDI_IO_TRACE_RSP);
688662
689
- qedi_clear_task_idx(qedi, cmd->task_id);
690663 __iscsi_complete_pdu(conn, (struct iscsi_hdr *)hdr,
691664 conn->data, datalen);
692665 error:
....@@ -743,7 +716,6 @@
743716 cqe->itid, cmd->task_id);
744717
745718 cmd->state = RESPONSE_RECEIVED;
746
- qedi_clear_task_idx(qedi, cmd->task_id);
747719
748720 spin_lock_bh(&session->back_lock);
749721 __iscsi_put_task(task);
....@@ -761,7 +733,6 @@
761733 itt_t protoitt = 0;
762734 int found = 0;
763735 struct qedi_cmd *qedi_cmd = NULL;
764
- u32 rtid = 0;
765736 u32 iscsi_cid;
766737 struct qedi_conn *qedi_conn;
767738 struct qedi_cmd *dbg_cmd;
....@@ -792,7 +763,6 @@
792763 found = 1;
793764 mtask = qedi_cmd->task;
794765 tmf_hdr = (struct iscsi_tm *)mtask->hdr;
795
- rtid = work->rtid;
796766
797767 list_del_init(&work->list);
798768 kfree(work);
....@@ -834,8 +804,6 @@
834804 if (qedi_cmd->state == CLEANUP_WAIT_FAILED)
835805 qedi_cmd->state = CLEANUP_RECV;
836806
837
- qedi_clear_task_idx(qedi_conn->qedi, rtid);
838
-
839807 spin_lock(&qedi_conn->list_lock);
840808 if (likely(dbg_cmd->io_cmd_in_list)) {
841809 dbg_cmd->io_cmd_in_list = false;
....@@ -869,7 +837,6 @@
869837 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_TID,
870838 "Freeing tid=0x%x for cid=0x%x\n",
871839 cqe->itid, qedi_conn->iscsi_conn_id);
872
- qedi_clear_task_idx(qedi_conn->qedi, cqe->itid);
873840
874841 } else {
875842 qedi_get_proto_itt(qedi, cqe->itid, &ptmp_itt);
....@@ -1003,7 +970,6 @@
1003970 * others they are two different assembly operations.
1004971 */
1005972 wmb();
1006
- mmiowb();
1007973 QEDI_INFO(&qedi_conn->qedi->dbg_ctx, QEDI_LOG_MP_REQ,
1008974 "prod_idx=0x%x, fw_prod_idx=0x%x, cid=0x%x\n",
1009975 qedi_conn->ep->sq_prod_idx, qedi_conn->ep->fw_sq_prod_idx,
....@@ -1281,7 +1247,8 @@
12811247 rval = wait_event_interruptible_timeout(qedi_conn->wait_queue,
12821248 ((qedi_conn->cmd_cleanup_req ==
12831249 qedi_conn->cmd_cleanup_cmpl) ||
1284
- qedi_conn->ep),
1250
+ test_bit(QEDI_IN_RECOVERY,
1251
+ &qedi->flags)),
12851252 5 * HZ);
12861253 if (rval) {
12871254 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_SCSI_TM,
....@@ -1306,7 +1273,9 @@
13061273 /* Enable IOs for all other sessions except current.*/
13071274 if (!wait_event_interruptible_timeout(qedi_conn->wait_queue,
13081275 (qedi_conn->cmd_cleanup_req ==
1309
- qedi_conn->cmd_cleanup_cmpl),
1276
+ qedi_conn->cmd_cleanup_cmpl) ||
1277
+ test_bit(QEDI_IN_RECOVERY,
1278
+ &qedi->flags),
13101279 5 * HZ)) {
13111280 iscsi_host_for_each_session(qedi->shost,
13121281 qedi_mark_device_available);
....@@ -1386,7 +1355,6 @@
13861355 struct qedi_conn *qedi_conn = qedi_cmd->conn;
13871356 struct qedi_ctx *qedi = qedi_conn->qedi;
13881357 struct iscsi_conn *conn = qedi_conn->cls_conn->dd_data;
1389
- struct iscsi_cls_session *cls_sess;
13901358 struct qedi_work_map *list_work = NULL;
13911359 struct iscsi_task *mtask;
13921360 struct qedi_cmd *cmd;
....@@ -1397,7 +1365,6 @@
13971365
13981366 mtask = qedi_cmd->task;
13991367 tmf_hdr = (struct iscsi_tm *)mtask->hdr;
1400
- cls_sess = iscsi_conn_to_session(qedi_conn->cls_conn);
14011368 set_bit(QEDI_CONN_FW_CLEANUP, &qedi_conn->flags);
14021369
14031370 ctask = iscsi_itt_to_task(conn, tmf_hdr->rtt);