1 // SPDX-License-Identifier: GPL-2.0-only
3 * QLogic FCoE Offload Driver
4 * Copyright (c) 2016-2018 Cavium Inc.
6 #include <linux/spinlock.h>
7 #include <linux/vmalloc.h>
9 #include <scsi/scsi_tcq.h>
11 void qedf_cmd_timer_set(struct qedf_ctx
*qedf
, struct qedf_ioreq
*io_req
,
12 unsigned int timer_msec
)
14 queue_delayed_work(qedf
->timer_work_queue
, &io_req
->timeout_work
,
15 msecs_to_jiffies(timer_msec
));
18 static void qedf_cmd_timeout(struct work_struct
*work
)
21 struct qedf_ioreq
*io_req
=
22 container_of(work
, struct qedf_ioreq
, timeout_work
.work
);
23 struct qedf_ctx
*qedf
;
24 struct qedf_rport
*fcport
;
26 fcport
= io_req
->fcport
;
27 if (io_req
->fcport
== NULL
) {
28 QEDF_INFO(NULL
, QEDF_LOG_IO
, "fcport is NULL.\n");
34 switch (io_req
->cmd_type
) {
37 QEDF_INFO(NULL
, QEDF_LOG_IO
,
38 "qedf is NULL for ABTS xid=0x%x.\n",
43 QEDF_ERR((&qedf
->dbg_ctx
), "ABTS timeout, xid=0x%x.\n",
45 /* Cleanup timed out ABTS */
46 qedf_initiate_cleanup(io_req
, true);
47 complete(&io_req
->abts_done
);
50 * Need to call kref_put for reference taken when initiate_abts
51 * was called since abts_compl won't be called now that we've
52 * cleaned up the task.
54 kref_put(&io_req
->refcount
, qedf_release_cmd
);
56 /* Clear in abort bit now that we're done with the command */
57 clear_bit(QEDF_CMD_IN_ABORT
, &io_req
->flags
);
60 * Now that the original I/O and the ABTS are complete see
61 * if we need to reconnect to the target.
63 qedf_restart_rport(fcport
);
67 QEDF_INFO(NULL
, QEDF_LOG_IO
,
68 "qedf is NULL for ELS xid=0x%x.\n",
72 /* ELS request no longer outstanding since it timed out */
73 clear_bit(QEDF_CMD_OUTSTANDING
, &io_req
->flags
);
75 kref_get(&io_req
->refcount
);
77 * Don't attempt to clean an ELS timeout as any subseqeunt
78 * ABTS or cleanup requests just hang. For now just free
79 * the resources of the original I/O and the RRQ
81 QEDF_ERR(&(qedf
->dbg_ctx
), "ELS timeout, xid=0x%x.\n",
83 qedf_initiate_cleanup(io_req
, true);
84 io_req
->event
= QEDF_IOREQ_EV_ELS_TMO
;
85 /* Call callback function to complete command */
86 if (io_req
->cb_func
&& io_req
->cb_arg
) {
87 io_req
->cb_func(io_req
->cb_arg
);
88 io_req
->cb_arg
= NULL
;
90 kref_put(&io_req
->refcount
, qedf_release_cmd
);
92 case QEDF_SEQ_CLEANUP
:
93 QEDF_ERR(&(qedf
->dbg_ctx
), "Sequence cleanup timeout, "
94 "xid=0x%x.\n", io_req
->xid
);
95 qedf_initiate_cleanup(io_req
, true);
96 io_req
->event
= QEDF_IOREQ_EV_ELS_TMO
;
97 qedf_process_seq_cleanup_compl(qedf
, NULL
, io_req
);
100 QEDF_INFO(&qedf
->dbg_ctx
, QEDF_LOG_IO
,
101 "Hit default case, xid=0x%x.\n", io_req
->xid
);
106 void qedf_cmd_mgr_free(struct qedf_cmd_mgr
*cmgr
)
108 struct io_bdt
*bdt_info
;
109 struct qedf_ctx
*qedf
= cmgr
->qedf
;
112 u16 max_xid
= (FCOE_PARAMS_NUM_TASKS
- 1);
115 struct qedf_ioreq
*io_req
;
117 num_ios
= max_xid
- min_xid
+ 1;
119 /* Free fcoe_bdt_ctx structures */
120 if (!cmgr
->io_bdt_pool
) {
121 QEDF_ERR(&qedf
->dbg_ctx
, "io_bdt_pool is NULL.\n");
125 bd_tbl_sz
= QEDF_MAX_BDS_PER_CMD
* sizeof(struct scsi_sge
);
126 for (i
= 0; i
< num_ios
; i
++) {
127 bdt_info
= cmgr
->io_bdt_pool
[i
];
128 if (bdt_info
->bd_tbl
) {
129 dma_free_coherent(&qedf
->pdev
->dev
, bd_tbl_sz
,
130 bdt_info
->bd_tbl
, bdt_info
->bd_tbl_dma
);
131 bdt_info
->bd_tbl
= NULL
;
135 /* Destroy io_bdt pool */
136 for (i
= 0; i
< num_ios
; i
++) {
137 kfree(cmgr
->io_bdt_pool
[i
]);
138 cmgr
->io_bdt_pool
[i
] = NULL
;
141 kfree(cmgr
->io_bdt_pool
);
142 cmgr
->io_bdt_pool
= NULL
;
146 for (i
= 0; i
< num_ios
; i
++) {
147 io_req
= &cmgr
->cmds
[i
];
148 kfree(io_req
->sgl_task_params
);
149 kfree(io_req
->task_params
);
150 /* Make sure we free per command sense buffer */
151 if (io_req
->sense_buffer
)
152 dma_free_coherent(&qedf
->pdev
->dev
,
153 QEDF_SCSI_SENSE_BUFFERSIZE
, io_req
->sense_buffer
,
154 io_req
->sense_buffer_dma
);
155 cancel_delayed_work_sync(&io_req
->rrq_work
);
158 /* Free command manager itself */
162 static void qedf_handle_rrq(struct work_struct
*work
)
164 struct qedf_ioreq
*io_req
=
165 container_of(work
, struct qedf_ioreq
, rrq_work
.work
);
167 atomic_set(&io_req
->state
, QEDFC_CMD_ST_RRQ_ACTIVE
);
168 qedf_send_rrq(io_req
);
172 struct qedf_cmd_mgr
*qedf_cmd_mgr_alloc(struct qedf_ctx
*qedf
)
174 struct qedf_cmd_mgr
*cmgr
;
175 struct io_bdt
*bdt_info
;
176 struct qedf_ioreq
*io_req
;
181 u16 max_xid
= (FCOE_PARAMS_NUM_TASKS
- 1);
183 /* Make sure num_queues is already set before calling this function */
184 if (!qedf
->num_queues
) {
185 QEDF_ERR(&(qedf
->dbg_ctx
), "num_queues is not set.\n");
189 if (max_xid
<= min_xid
|| max_xid
== FC_XID_UNKNOWN
) {
190 QEDF_WARN(&(qedf
->dbg_ctx
), "Invalid min_xid 0x%x and "
191 "max_xid 0x%x.\n", min_xid
, max_xid
);
195 QEDF_INFO(&(qedf
->dbg_ctx
), QEDF_LOG_DISC
, "min xid 0x%x, max xid "
196 "0x%x.\n", min_xid
, max_xid
);
198 num_ios
= max_xid
- min_xid
+ 1;
200 cmgr
= vzalloc(sizeof(struct qedf_cmd_mgr
));
202 QEDF_WARN(&(qedf
->dbg_ctx
), "Failed to alloc cmd mgr.\n");
207 spin_lock_init(&cmgr
->lock
);
210 * Initialize I/O request fields.
214 for (i
= 0; i
< num_ios
; i
++) {
215 io_req
= &cmgr
->cmds
[i
];
216 INIT_DELAYED_WORK(&io_req
->timeout_work
, qedf_cmd_timeout
);
220 INIT_DELAYED_WORK(&io_req
->rrq_work
, qedf_handle_rrq
);
222 /* Allocate DMA memory to hold sense buffer */
223 io_req
->sense_buffer
= dma_alloc_coherent(&qedf
->pdev
->dev
,
224 QEDF_SCSI_SENSE_BUFFERSIZE
, &io_req
->sense_buffer_dma
,
226 if (!io_req
->sense_buffer
) {
227 QEDF_ERR(&qedf
->dbg_ctx
,
228 "Failed to alloc sense buffer.\n");
232 /* Allocate task parameters to pass to f/w init funcions */
233 io_req
->task_params
= kzalloc(sizeof(*io_req
->task_params
),
235 if (!io_req
->task_params
) {
236 QEDF_ERR(&(qedf
->dbg_ctx
),
237 "Failed to allocate task_params for xid=0x%x\n",
243 * Allocate scatter/gather list info to pass to f/w init
246 io_req
->sgl_task_params
= kzalloc(
247 sizeof(struct scsi_sgl_task_params
), GFP_KERNEL
);
248 if (!io_req
->sgl_task_params
) {
249 QEDF_ERR(&(qedf
->dbg_ctx
),
250 "Failed to allocate sgl_task_params for xid=0x%x\n",
256 /* Allocate pool of io_bdts - one for each qedf_ioreq */
257 cmgr
->io_bdt_pool
= kmalloc_array(num_ios
, sizeof(struct io_bdt
*),
260 if (!cmgr
->io_bdt_pool
) {
261 QEDF_WARN(&(qedf
->dbg_ctx
), "Failed to alloc io_bdt_pool.\n");
265 for (i
= 0; i
< num_ios
; i
++) {
266 cmgr
->io_bdt_pool
[i
] = kmalloc(sizeof(struct io_bdt
),
268 if (!cmgr
->io_bdt_pool
[i
]) {
269 QEDF_WARN(&(qedf
->dbg_ctx
),
270 "Failed to alloc io_bdt_pool[%d].\n", i
);
275 for (i
= 0; i
< num_ios
; i
++) {
276 bdt_info
= cmgr
->io_bdt_pool
[i
];
277 bdt_info
->bd_tbl
= dma_alloc_coherent(&qedf
->pdev
->dev
,
278 QEDF_MAX_BDS_PER_CMD
* sizeof(struct scsi_sge
),
279 &bdt_info
->bd_tbl_dma
, GFP_KERNEL
);
280 if (!bdt_info
->bd_tbl
) {
281 QEDF_WARN(&(qedf
->dbg_ctx
),
282 "Failed to alloc bdt_tbl[%d].\n", i
);
286 atomic_set(&cmgr
->free_list_cnt
, num_ios
);
287 QEDF_INFO(&(qedf
->dbg_ctx
), QEDF_LOG_IO
,
288 "cmgr->free_list_cnt=%d.\n",
289 atomic_read(&cmgr
->free_list_cnt
));
294 qedf_cmd_mgr_free(cmgr
);
298 struct qedf_ioreq
*qedf_alloc_cmd(struct qedf_rport
*fcport
, u8 cmd_type
)
300 struct qedf_ctx
*qedf
= fcport
->qedf
;
301 struct qedf_cmd_mgr
*cmd_mgr
= qedf
->cmd_mgr
;
302 struct qedf_ioreq
*io_req
= NULL
;
303 struct io_bdt
*bd_tbl
;
309 free_sqes
= atomic_read(&fcport
->free_sqes
);
312 QEDF_INFO(&(qedf
->dbg_ctx
), QEDF_LOG_IO
,
313 "Returning NULL, free_sqes=%d.\n",
318 /* Limit the number of outstanding R/W tasks */
319 if ((atomic_read(&fcport
->num_active_ios
) >=
320 NUM_RW_TASKS_PER_CONNECTION
)) {
321 QEDF_INFO(&(qedf
->dbg_ctx
), QEDF_LOG_IO
,
322 "Returning NULL, num_active_ios=%d.\n",
323 atomic_read(&fcport
->num_active_ios
));
327 /* Limit global TIDs certain tasks */
328 if (atomic_read(&cmd_mgr
->free_list_cnt
) <= GBL_RSVD_TASKS
) {
329 QEDF_INFO(&(qedf
->dbg_ctx
), QEDF_LOG_IO
,
330 "Returning NULL, free_list_cnt=%d.\n",
331 atomic_read(&cmd_mgr
->free_list_cnt
));
335 spin_lock_irqsave(&cmd_mgr
->lock
, flags
);
336 for (i
= 0; i
< FCOE_PARAMS_NUM_TASKS
; i
++) {
337 io_req
= &cmd_mgr
->cmds
[cmd_mgr
->idx
];
339 if (cmd_mgr
->idx
== FCOE_PARAMS_NUM_TASKS
)
342 /* Check to make sure command was previously freed */
347 if (i
== FCOE_PARAMS_NUM_TASKS
) {
348 spin_unlock_irqrestore(&cmd_mgr
->lock
, flags
);
352 if (test_bit(QEDF_CMD_DIRTY
, &io_req
->flags
))
353 QEDF_ERR(&qedf
->dbg_ctx
,
354 "io_req found to be dirty ox_id = 0x%x.\n",
357 /* Clear any flags now that we've reallocated the xid */
360 spin_unlock_irqrestore(&cmd_mgr
->lock
, flags
);
362 atomic_inc(&fcport
->num_active_ios
);
363 atomic_dec(&fcport
->free_sqes
);
365 atomic_dec(&cmd_mgr
->free_list_cnt
);
367 io_req
->cmd_mgr
= cmd_mgr
;
368 io_req
->fcport
= fcport
;
370 /* Clear any stale sc_cmd back pointer */
371 io_req
->sc_cmd
= NULL
;
374 /* Hold the io_req against deletion */
375 kref_init(&io_req
->refcount
); /* ID: 001 */
376 atomic_set(&io_req
->state
, QEDFC_CMD_ST_IO_ACTIVE
);
378 /* Bind io_bdt for this io_req */
379 /* Have a static link between io_req and io_bdt_pool */
380 bd_tbl
= io_req
->bd_tbl
= cmd_mgr
->io_bdt_pool
[xid
];
381 if (bd_tbl
== NULL
) {
382 QEDF_ERR(&(qedf
->dbg_ctx
), "bd_tbl is NULL, xid=%x.\n", xid
);
383 kref_put(&io_req
->refcount
, qedf_release_cmd
);
386 bd_tbl
->io_req
= io_req
;
387 io_req
->cmd_type
= cmd_type
;
388 io_req
->tm_flags
= 0;
390 /* Reset sequence offset data */
391 io_req
->rx_buf_off
= 0;
392 io_req
->tx_buf_off
= 0;
393 io_req
->rx_id
= 0xffff; /* No OX_ID */
398 /* Record failure for stats and return NULL to caller */
399 qedf
->alloc_failures
++;
403 static void qedf_free_mp_resc(struct qedf_ioreq
*io_req
)
405 struct qedf_mp_req
*mp_req
= &(io_req
->mp_req
);
406 struct qedf_ctx
*qedf
= io_req
->fcport
->qedf
;
407 uint64_t sz
= sizeof(struct scsi_sge
);
410 if (mp_req
->mp_req_bd
) {
411 dma_free_coherent(&qedf
->pdev
->dev
, sz
,
412 mp_req
->mp_req_bd
, mp_req
->mp_req_bd_dma
);
413 mp_req
->mp_req_bd
= NULL
;
415 if (mp_req
->mp_resp_bd
) {
416 dma_free_coherent(&qedf
->pdev
->dev
, sz
,
417 mp_req
->mp_resp_bd
, mp_req
->mp_resp_bd_dma
);
418 mp_req
->mp_resp_bd
= NULL
;
420 if (mp_req
->req_buf
) {
421 dma_free_coherent(&qedf
->pdev
->dev
, QEDF_PAGE_SIZE
,
422 mp_req
->req_buf
, mp_req
->req_buf_dma
);
423 mp_req
->req_buf
= NULL
;
425 if (mp_req
->resp_buf
) {
426 dma_free_coherent(&qedf
->pdev
->dev
, QEDF_PAGE_SIZE
,
427 mp_req
->resp_buf
, mp_req
->resp_buf_dma
);
428 mp_req
->resp_buf
= NULL
;
432 void qedf_release_cmd(struct kref
*ref
)
434 struct qedf_ioreq
*io_req
=
435 container_of(ref
, struct qedf_ioreq
, refcount
);
436 struct qedf_cmd_mgr
*cmd_mgr
= io_req
->cmd_mgr
;
437 struct qedf_rport
*fcport
= io_req
->fcport
;
440 if (io_req
->cmd_type
== QEDF_SCSI_CMD
) {
441 QEDF_WARN(&fcport
->qedf
->dbg_ctx
,
442 "Cmd released called without scsi_done called, io_req %p xid=0x%x.\n",
443 io_req
, io_req
->xid
);
444 WARN_ON(io_req
->sc_cmd
);
447 if (io_req
->cmd_type
== QEDF_ELS
||
448 io_req
->cmd_type
== QEDF_TASK_MGMT_CMD
)
449 qedf_free_mp_resc(io_req
);
451 atomic_inc(&cmd_mgr
->free_list_cnt
);
452 atomic_dec(&fcport
->num_active_ios
);
453 atomic_set(&io_req
->state
, QEDF_CMD_ST_INACTIVE
);
454 if (atomic_read(&fcport
->num_active_ios
) < 0) {
455 QEDF_WARN(&(fcport
->qedf
->dbg_ctx
), "active_ios < 0.\n");
459 /* Increment task retry identifier now that the request is released */
460 io_req
->task_retry_identifier
++;
461 io_req
->fcport
= NULL
;
463 clear_bit(QEDF_CMD_DIRTY
, &io_req
->flags
);
465 spin_lock_irqsave(&cmd_mgr
->lock
, flags
);
466 io_req
->fcport
= NULL
;
468 spin_unlock_irqrestore(&cmd_mgr
->lock
, flags
);
471 static int qedf_map_sg(struct qedf_ioreq
*io_req
)
473 struct scsi_cmnd
*sc
= io_req
->sc_cmd
;
474 struct Scsi_Host
*host
= sc
->device
->host
;
475 struct fc_lport
*lport
= shost_priv(host
);
476 struct qedf_ctx
*qedf
= lport_priv(lport
);
477 struct scsi_sge
*bd
= io_req
->bd_tbl
->bd_tbl
;
478 struct scatterlist
*sg
;
486 sg_count
= dma_map_sg(&qedf
->pdev
->dev
, scsi_sglist(sc
),
487 scsi_sg_count(sc
), sc
->sc_data_direction
);
488 sg
= scsi_sglist(sc
);
490 io_req
->sge_type
= QEDF_IOREQ_UNKNOWN_SGE
;
492 if (sg_count
<= 8 || io_req
->io_req_flags
== QEDF_READ
)
493 io_req
->sge_type
= QEDF_IOREQ_FAST_SGE
;
495 scsi_for_each_sg(sc
, sg
, sg_count
, i
) {
496 sg_len
= (u32
)sg_dma_len(sg
);
497 addr
= (u64
)sg_dma_address(sg
);
500 * Intermediate s/g element so check if start address
501 * is page aligned. Only required for writes and only if the
502 * number of scatter/gather elements is 8 or more.
504 if (io_req
->sge_type
== QEDF_IOREQ_UNKNOWN_SGE
&& (i
) &&
505 (i
!= (sg_count
- 1)) && sg_len
< QEDF_PAGE_SIZE
)
506 io_req
->sge_type
= QEDF_IOREQ_SLOW_SGE
;
508 bd
[bd_count
].sge_addr
.lo
= cpu_to_le32(U64_LO(addr
));
509 bd
[bd_count
].sge_addr
.hi
= cpu_to_le32(U64_HI(addr
));
510 bd
[bd_count
].sge_len
= cpu_to_le32(sg_len
);
513 byte_count
+= sg_len
;
516 /* To catch a case where FAST and SLOW nothing is set, set FAST */
517 if (io_req
->sge_type
== QEDF_IOREQ_UNKNOWN_SGE
)
518 io_req
->sge_type
= QEDF_IOREQ_FAST_SGE
;
520 if (byte_count
!= scsi_bufflen(sc
))
521 QEDF_ERR(&(qedf
->dbg_ctx
), "byte_count = %d != "
522 "scsi_bufflen = %d, task_id = 0x%x.\n", byte_count
,
523 scsi_bufflen(sc
), io_req
->xid
);
528 static int qedf_build_bd_list_from_sg(struct qedf_ioreq
*io_req
)
530 struct scsi_cmnd
*sc
= io_req
->sc_cmd
;
531 struct scsi_sge
*bd
= io_req
->bd_tbl
->bd_tbl
;
534 if (scsi_sg_count(sc
)) {
535 bd_count
= qedf_map_sg(io_req
);
540 bd
[0].sge_addr
.lo
= bd
[0].sge_addr
.hi
= 0;
543 io_req
->bd_tbl
->bd_valid
= bd_count
;
548 static void qedf_build_fcp_cmnd(struct qedf_ioreq
*io_req
,
549 struct fcp_cmnd
*fcp_cmnd
)
551 struct scsi_cmnd
*sc_cmd
= io_req
->sc_cmd
;
553 /* fcp_cmnd is 32 bytes */
554 memset(fcp_cmnd
, 0, FCP_CMND_LEN
);
556 /* 8 bytes: SCSI LUN info */
557 if (io_req
->cmd_type
== QEDF_TASK_MGMT_CMD
)
558 int_to_scsilun(io_req
->tm_lun
,
559 (struct scsi_lun
*)&fcp_cmnd
->fc_lun
);
561 int_to_scsilun(sc_cmd
->device
->lun
,
562 (struct scsi_lun
*)&fcp_cmnd
->fc_lun
);
564 /* 4 bytes: flag info */
565 fcp_cmnd
->fc_pri_ta
= 0;
566 fcp_cmnd
->fc_tm_flags
= io_req
->tm_flags
;
567 fcp_cmnd
->fc_flags
= io_req
->io_req_flags
;
568 fcp_cmnd
->fc_cmdref
= 0;
570 /* Populate data direction */
571 if (io_req
->cmd_type
== QEDF_TASK_MGMT_CMD
) {
572 fcp_cmnd
->fc_flags
|= FCP_CFL_RDDATA
;
574 if (sc_cmd
->sc_data_direction
== DMA_TO_DEVICE
)
575 fcp_cmnd
->fc_flags
|= FCP_CFL_WRDATA
;
576 else if (sc_cmd
->sc_data_direction
== DMA_FROM_DEVICE
)
577 fcp_cmnd
->fc_flags
|= FCP_CFL_RDDATA
;
580 fcp_cmnd
->fc_pri_ta
= FCP_PTA_SIMPLE
;
582 /* 16 bytes: CDB information */
583 if (io_req
->cmd_type
!= QEDF_TASK_MGMT_CMD
)
584 memcpy(fcp_cmnd
->fc_cdb
, sc_cmd
->cmnd
, sc_cmd
->cmd_len
);
586 /* 4 bytes: FCP data length */
587 fcp_cmnd
->fc_dl
= htonl(io_req
->data_xfer_len
);
590 static void qedf_init_task(struct qedf_rport
*fcport
, struct fc_lport
*lport
,
591 struct qedf_ioreq
*io_req
, struct fcoe_task_context
*task_ctx
,
592 struct fcoe_wqe
*sqe
)
594 enum fcoe_task_type task_type
;
595 struct scsi_cmnd
*sc_cmd
= io_req
->sc_cmd
;
596 struct io_bdt
*bd_tbl
= io_req
->bd_tbl
;
600 struct qedf_ctx
*qedf
= fcport
->qedf
;
601 uint16_t cq_idx
= smp_processor_id() % qedf
->num_queues
;
602 struct regpair sense_data_buffer_phys_addr
;
607 /* Note init_initiator_rw_fcoe_task memsets the task context */
608 io_req
->task
= task_ctx
;
609 memset(task_ctx
, 0, sizeof(struct fcoe_task_context
));
610 memset(io_req
->task_params
, 0, sizeof(struct fcoe_task_params
));
611 memset(io_req
->sgl_task_params
, 0, sizeof(struct scsi_sgl_task_params
));
613 /* Set task type bassed on DMA directio of command */
614 if (io_req
->cmd_type
== QEDF_TASK_MGMT_CMD
) {
615 task_type
= FCOE_TASK_TYPE_READ_INITIATOR
;
617 if (sc_cmd
->sc_data_direction
== DMA_TO_DEVICE
) {
618 task_type
= FCOE_TASK_TYPE_WRITE_INITIATOR
;
619 tx_io_size
= io_req
->data_xfer_len
;
621 task_type
= FCOE_TASK_TYPE_READ_INITIATOR
;
622 rx_io_size
= io_req
->data_xfer_len
;
626 /* Setup the fields for fcoe_task_params */
627 io_req
->task_params
->context
= task_ctx
;
628 io_req
->task_params
->sqe
= sqe
;
629 io_req
->task_params
->task_type
= task_type
;
630 io_req
->task_params
->tx_io_size
= tx_io_size
;
631 io_req
->task_params
->rx_io_size
= rx_io_size
;
632 io_req
->task_params
->conn_cid
= fcport
->fw_cid
;
633 io_req
->task_params
->itid
= io_req
->xid
;
634 io_req
->task_params
->cq_rss_number
= cq_idx
;
635 io_req
->task_params
->is_tape_device
= fcport
->dev_type
;
637 /* Fill in information for scatter/gather list */
638 if (io_req
->cmd_type
!= QEDF_TASK_MGMT_CMD
) {
639 bd_count
= bd_tbl
->bd_valid
;
640 io_req
->sgl_task_params
->sgl
= bd_tbl
->bd_tbl
;
641 io_req
->sgl_task_params
->sgl_phys_addr
.lo
=
642 U64_LO(bd_tbl
->bd_tbl_dma
);
643 io_req
->sgl_task_params
->sgl_phys_addr
.hi
=
644 U64_HI(bd_tbl
->bd_tbl_dma
);
645 io_req
->sgl_task_params
->num_sges
= bd_count
;
646 io_req
->sgl_task_params
->total_buffer_size
=
647 scsi_bufflen(io_req
->sc_cmd
);
648 if (io_req
->sge_type
== QEDF_IOREQ_SLOW_SGE
)
649 io_req
->sgl_task_params
->small_mid_sge
= 1;
651 io_req
->sgl_task_params
->small_mid_sge
= 0;
654 /* Fill in physical address of sense buffer */
655 sense_data_buffer_phys_addr
.lo
= U64_LO(io_req
->sense_buffer_dma
);
656 sense_data_buffer_phys_addr
.hi
= U64_HI(io_req
->sense_buffer_dma
);
658 /* fill FCP_CMND IU */
659 qedf_build_fcp_cmnd(io_req
, (struct fcp_cmnd
*)tmp_fcp_cmnd
);
661 /* Swap fcp_cmnd since FC is big endian */
662 cnt
= sizeof(struct fcp_cmnd
) / sizeof(u32
);
663 for (i
= 0; i
< cnt
; i
++) {
664 tmp_fcp_cmnd
[i
] = cpu_to_be32(tmp_fcp_cmnd
[i
]);
666 memcpy(fcp_cmnd
, tmp_fcp_cmnd
, sizeof(struct fcp_cmnd
));
668 init_initiator_rw_fcoe_task(io_req
->task_params
,
669 io_req
->sgl_task_params
,
670 sense_data_buffer_phys_addr
,
671 io_req
->task_retry_identifier
, fcp_cmnd
);
673 /* Increment SGL type counters */
674 if (io_req
->sge_type
== QEDF_IOREQ_SLOW_SGE
)
675 qedf
->slow_sge_ios
++;
677 qedf
->fast_sge_ios
++;
680 void qedf_init_mp_task(struct qedf_ioreq
*io_req
,
681 struct fcoe_task_context
*task_ctx
, struct fcoe_wqe
*sqe
)
683 struct qedf_mp_req
*mp_req
= &(io_req
->mp_req
);
684 struct qedf_rport
*fcport
= io_req
->fcport
;
685 struct qedf_ctx
*qedf
= io_req
->fcport
->qedf
;
686 struct fc_frame_header
*fc_hdr
;
687 struct fcoe_tx_mid_path_params task_fc_hdr
;
688 struct scsi_sgl_task_params tx_sgl_task_params
;
689 struct scsi_sgl_task_params rx_sgl_task_params
;
691 QEDF_INFO(&(qedf
->dbg_ctx
), QEDF_LOG_DISC
,
692 "Initializing MP task for cmd_type=%d\n",
695 qedf
->control_requests
++;
697 memset(&tx_sgl_task_params
, 0, sizeof(struct scsi_sgl_task_params
));
698 memset(&rx_sgl_task_params
, 0, sizeof(struct scsi_sgl_task_params
));
699 memset(task_ctx
, 0, sizeof(struct fcoe_task_context
));
700 memset(&task_fc_hdr
, 0, sizeof(struct fcoe_tx_mid_path_params
));
702 /* Setup the task from io_req for easy reference */
703 io_req
->task
= task_ctx
;
705 /* Setup the fields for fcoe_task_params */
706 io_req
->task_params
->context
= task_ctx
;
707 io_req
->task_params
->sqe
= sqe
;
708 io_req
->task_params
->task_type
= FCOE_TASK_TYPE_MIDPATH
;
709 io_req
->task_params
->tx_io_size
= io_req
->data_xfer_len
;
710 /* rx_io_size tells the f/w how large a response buffer we have */
711 io_req
->task_params
->rx_io_size
= PAGE_SIZE
;
712 io_req
->task_params
->conn_cid
= fcport
->fw_cid
;
713 io_req
->task_params
->itid
= io_req
->xid
;
714 /* Return middle path commands on CQ 0 */
715 io_req
->task_params
->cq_rss_number
= 0;
716 io_req
->task_params
->is_tape_device
= fcport
->dev_type
;
718 fc_hdr
= &(mp_req
->req_fc_hdr
);
719 /* Set OX_ID and RX_ID based on driver task id */
720 fc_hdr
->fh_ox_id
= io_req
->xid
;
721 fc_hdr
->fh_rx_id
= htons(0xffff);
723 /* Set up FC header information */
724 task_fc_hdr
.parameter
= fc_hdr
->fh_parm_offset
;
725 task_fc_hdr
.r_ctl
= fc_hdr
->fh_r_ctl
;
726 task_fc_hdr
.type
= fc_hdr
->fh_type
;
727 task_fc_hdr
.cs_ctl
= fc_hdr
->fh_cs_ctl
;
728 task_fc_hdr
.df_ctl
= fc_hdr
->fh_df_ctl
;
729 task_fc_hdr
.rx_id
= fc_hdr
->fh_rx_id
;
730 task_fc_hdr
.ox_id
= fc_hdr
->fh_ox_id
;
732 /* Set up s/g list parameters for request buffer */
733 tx_sgl_task_params
.sgl
= mp_req
->mp_req_bd
;
734 tx_sgl_task_params
.sgl_phys_addr
.lo
= U64_LO(mp_req
->mp_req_bd_dma
);
735 tx_sgl_task_params
.sgl_phys_addr
.hi
= U64_HI(mp_req
->mp_req_bd_dma
);
736 tx_sgl_task_params
.num_sges
= 1;
737 /* Set PAGE_SIZE for now since sg element is that size ??? */
738 tx_sgl_task_params
.total_buffer_size
= io_req
->data_xfer_len
;
739 tx_sgl_task_params
.small_mid_sge
= 0;
741 /* Set up s/g list parameters for request buffer */
742 rx_sgl_task_params
.sgl
= mp_req
->mp_resp_bd
;
743 rx_sgl_task_params
.sgl_phys_addr
.lo
= U64_LO(mp_req
->mp_resp_bd_dma
);
744 rx_sgl_task_params
.sgl_phys_addr
.hi
= U64_HI(mp_req
->mp_resp_bd_dma
);
745 rx_sgl_task_params
.num_sges
= 1;
746 /* Set PAGE_SIZE for now since sg element is that size ??? */
747 rx_sgl_task_params
.total_buffer_size
= PAGE_SIZE
;
748 rx_sgl_task_params
.small_mid_sge
= 0;
752 * Last arg is 0 as previous code did not set that we wanted the
753 * fc header information.
755 init_initiator_midpath_unsolicited_fcoe_task(io_req
->task_params
,
758 &rx_sgl_task_params
, 0);
761 /* Presumed that fcport->rport_lock is held */
762 u16
qedf_get_sqe_idx(struct qedf_rport
*fcport
)
764 uint16_t total_sqe
= (fcport
->sq_mem_size
)/(sizeof(struct fcoe_wqe
));
767 rval
= fcport
->sq_prod_idx
;
769 /* Adjust ring index */
770 fcport
->sq_prod_idx
++;
771 fcport
->fw_sq_prod_idx
++;
772 if (fcport
->sq_prod_idx
== total_sqe
)
773 fcport
->sq_prod_idx
= 0;
778 void qedf_ring_doorbell(struct qedf_rport
*fcport
)
780 struct fcoe_db_data dbell
= { 0 };
784 dbell
.params
|= DB_DEST_XCM
<< FCOE_DB_DATA_DEST_SHIFT
;
785 dbell
.params
|= DB_AGG_CMD_SET
<< FCOE_DB_DATA_AGG_CMD_SHIFT
;
786 dbell
.params
|= DQ_XCM_FCOE_SQ_PROD_CMD
<<
787 FCOE_DB_DATA_AGG_VAL_SEL_SHIFT
;
789 dbell
.sq_prod
= fcport
->fw_sq_prod_idx
;
790 /* wmb makes sure that the BDs data is updated before updating the
791 * producer, otherwise FW may read old data from the BDs.
795 writel(*(u32
*)&dbell
, fcport
->p_doorbell
);
797 * Fence required to flush the write combined buffer, since another
798 * CPU may write to the same doorbell address and data may be lost
799 * due to relaxed order nature of write combined bar.
804 static void qedf_trace_io(struct qedf_rport
*fcport
, struct qedf_ioreq
*io_req
,
807 struct qedf_ctx
*qedf
= fcport
->qedf
;
808 struct qedf_io_log
*io_log
;
809 struct scsi_cmnd
*sc_cmd
= io_req
->sc_cmd
;
812 spin_lock_irqsave(&qedf
->io_trace_lock
, flags
);
814 io_log
= &qedf
->io_trace_buf
[qedf
->io_trace_idx
];
815 io_log
->direction
= direction
;
816 io_log
->task_id
= io_req
->xid
;
817 io_log
->port_id
= fcport
->rdata
->ids
.port_id
;
818 io_log
->lun
= sc_cmd
->device
->lun
;
819 io_log
->op
= sc_cmd
->cmnd
[0];
820 io_log
->lba
[0] = sc_cmd
->cmnd
[2];
821 io_log
->lba
[1] = sc_cmd
->cmnd
[3];
822 io_log
->lba
[2] = sc_cmd
->cmnd
[4];
823 io_log
->lba
[3] = sc_cmd
->cmnd
[5];
824 io_log
->bufflen
= scsi_bufflen(sc_cmd
);
825 io_log
->sg_count
= scsi_sg_count(sc_cmd
);
826 io_log
->result
= sc_cmd
->result
;
827 io_log
->jiffies
= jiffies
;
828 io_log
->refcount
= kref_read(&io_req
->refcount
);
830 if (direction
== QEDF_IO_TRACE_REQ
) {
831 /* For requests we only care abot the submission CPU */
832 io_log
->req_cpu
= io_req
->cpu
;
835 } else if (direction
== QEDF_IO_TRACE_RSP
) {
836 io_log
->req_cpu
= io_req
->cpu
;
837 io_log
->int_cpu
= io_req
->int_cpu
;
838 io_log
->rsp_cpu
= smp_processor_id();
841 io_log
->sge_type
= io_req
->sge_type
;
843 qedf
->io_trace_idx
++;
844 if (qedf
->io_trace_idx
== QEDF_IO_TRACE_SIZE
)
845 qedf
->io_trace_idx
= 0;
847 spin_unlock_irqrestore(&qedf
->io_trace_lock
, flags
);
850 int qedf_post_io_req(struct qedf_rport
*fcport
, struct qedf_ioreq
*io_req
)
852 struct scsi_cmnd
*sc_cmd
= io_req
->sc_cmd
;
853 struct Scsi_Host
*host
= sc_cmd
->device
->host
;
854 struct fc_lport
*lport
= shost_priv(host
);
855 struct qedf_ctx
*qedf
= lport_priv(lport
);
856 struct fcoe_task_context
*task_ctx
;
858 struct fcoe_wqe
*sqe
;
861 /* Initialize rest of io_req fileds */
862 io_req
->data_xfer_len
= scsi_bufflen(sc_cmd
);
863 qedf_priv(sc_cmd
)->io_req
= io_req
;
864 io_req
->sge_type
= QEDF_IOREQ_FAST_SGE
; /* Assume fast SGL by default */
866 /* Record which cpu this request is associated with */
867 io_req
->cpu
= smp_processor_id();
869 if (sc_cmd
->sc_data_direction
== DMA_FROM_DEVICE
) {
870 io_req
->io_req_flags
= QEDF_READ
;
871 qedf
->input_requests
++;
872 } else if (sc_cmd
->sc_data_direction
== DMA_TO_DEVICE
) {
873 io_req
->io_req_flags
= QEDF_WRITE
;
874 qedf
->output_requests
++;
876 io_req
->io_req_flags
= 0;
877 qedf
->control_requests
++;
882 /* Build buffer descriptor list for firmware from sg list */
883 if (qedf_build_bd_list_from_sg(io_req
)) {
884 QEDF_ERR(&(qedf
->dbg_ctx
), "BD list creation failed.\n");
885 /* Release cmd will release io_req, but sc_cmd is assigned */
886 io_req
->sc_cmd
= NULL
;
887 kref_put(&io_req
->refcount
, qedf_release_cmd
);
891 if (!test_bit(QEDF_RPORT_SESSION_READY
, &fcport
->flags
) ||
892 test_bit(QEDF_RPORT_UPLOADING_CONNECTION
, &fcport
->flags
)) {
893 QEDF_ERR(&(qedf
->dbg_ctx
), "Session not offloaded yet.\n");
894 /* Release cmd will release io_req, but sc_cmd is assigned */
895 io_req
->sc_cmd
= NULL
;
896 kref_put(&io_req
->refcount
, qedf_release_cmd
);
900 /* Record LUN number for later use if we need them */
901 io_req
->lun
= (int)sc_cmd
->device
->lun
;
903 /* Obtain free SQE */
904 sqe_idx
= qedf_get_sqe_idx(fcport
);
905 sqe
= &fcport
->sq
[sqe_idx
];
906 memset(sqe
, 0, sizeof(struct fcoe_wqe
));
908 /* Get the task context */
909 task_ctx
= qedf_get_task_mem(&qedf
->tasks
, xid
);
911 QEDF_WARN(&(qedf
->dbg_ctx
), "task_ctx is NULL, xid=%d.\n",
913 /* Release cmd will release io_req, but sc_cmd is assigned */
914 io_req
->sc_cmd
= NULL
;
915 kref_put(&io_req
->refcount
, qedf_release_cmd
);
919 qedf_init_task(fcport
, lport
, io_req
, task_ctx
, sqe
);
922 qedf_ring_doorbell(fcport
);
924 /* Set that command is with the firmware now */
925 set_bit(QEDF_CMD_OUTSTANDING
, &io_req
->flags
);
927 if (qedf_io_tracing
&& io_req
->sc_cmd
)
928 qedf_trace_io(fcport
, io_req
, QEDF_IO_TRACE_REQ
);
934 qedf_queuecommand(struct Scsi_Host
*host
, struct scsi_cmnd
*sc_cmd
)
936 struct fc_lport
*lport
= shost_priv(host
);
937 struct qedf_ctx
*qedf
= lport_priv(lport
);
938 struct fc_rport
*rport
= starget_to_rport(scsi_target(sc_cmd
->device
));
939 struct fc_rport_libfc_priv
*rp
= rport
->dd_data
;
940 struct qedf_rport
*fcport
;
941 struct qedf_ioreq
*io_req
;
944 unsigned long flags
= 0;
947 num_sgs
= scsi_sg_count(sc_cmd
);
948 if (scsi_sg_count(sc_cmd
) > QEDF_MAX_BDS_PER_CMD
) {
949 QEDF_ERR(&qedf
->dbg_ctx
,
950 "Number of SG elements %d exceeds what hardware limitation of %d.\n",
951 num_sgs
, QEDF_MAX_BDS_PER_CMD
);
952 sc_cmd
->result
= DID_ERROR
;
957 if (test_bit(QEDF_UNLOADING
, &qedf
->flags
) ||
958 test_bit(QEDF_DBG_STOP_IO
, &qedf
->flags
)) {
959 QEDF_INFO(&qedf
->dbg_ctx
, QEDF_LOG_IO
,
960 "Returning DNC as unloading or stop io, flags 0x%lx.\n",
962 sc_cmd
->result
= DID_NO_CONNECT
<< 16;
967 if (!qedf
->pdev
->msix_enabled
) {
968 QEDF_INFO(&(qedf
->dbg_ctx
), QEDF_LOG_IO
,
969 "Completing sc_cmd=%p DID_NO_CONNECT as MSI-X is not enabled.\n",
971 sc_cmd
->result
= DID_NO_CONNECT
<< 16;
976 rval
= fc_remote_port_chkready(rport
);
978 QEDF_INFO(&qedf
->dbg_ctx
, QEDF_LOG_IO
,
979 "fc_remote_port_chkready failed=0x%x for port_id=0x%06x.\n",
980 rval
, rport
->port_id
);
981 sc_cmd
->result
= rval
;
986 /* Retry command if we are doing a qed drain operation */
987 if (test_bit(QEDF_DRAIN_ACTIVE
, &qedf
->flags
)) {
988 QEDF_INFO(&qedf
->dbg_ctx
, QEDF_LOG_IO
, "Drain active.\n");
989 rc
= SCSI_MLQUEUE_HOST_BUSY
;
993 if (lport
->state
!= LPORT_ST_READY
||
994 atomic_read(&qedf
->link_state
) != QEDF_LINK_UP
) {
995 QEDF_INFO(&qedf
->dbg_ctx
, QEDF_LOG_IO
, "Link down.\n");
996 rc
= SCSI_MLQUEUE_HOST_BUSY
;
1000 /* rport and tgt are allocated together, so tgt should be non-NULL */
1001 fcport
= (struct qedf_rport
*)&rp
[1];
1003 if (!test_bit(QEDF_RPORT_SESSION_READY
, &fcport
->flags
) ||
1004 test_bit(QEDF_RPORT_UPLOADING_CONNECTION
, &fcport
->flags
)) {
1006 * Session is not offloaded yet. Let SCSI-ml retry
1009 rc
= SCSI_MLQUEUE_TARGET_BUSY
;
1013 atomic_inc(&fcport
->ios_to_queue
);
1015 if (fcport
->retry_delay_timestamp
) {
1016 /* Take fcport->rport_lock for resetting the delay_timestamp */
1017 spin_lock_irqsave(&fcport
->rport_lock
, flags
);
1018 if (time_after(jiffies
, fcport
->retry_delay_timestamp
)) {
1019 fcport
->retry_delay_timestamp
= 0;
1021 spin_unlock_irqrestore(&fcport
->rport_lock
, flags
);
1022 /* If retry_delay timer is active, flow off the ML */
1023 rc
= SCSI_MLQUEUE_TARGET_BUSY
;
1024 atomic_dec(&fcport
->ios_to_queue
);
1027 spin_unlock_irqrestore(&fcport
->rport_lock
, flags
);
1030 io_req
= qedf_alloc_cmd(fcport
, QEDF_SCSI_CMD
);
1032 rc
= SCSI_MLQUEUE_HOST_BUSY
;
1033 atomic_dec(&fcport
->ios_to_queue
);
1037 io_req
->sc_cmd
= sc_cmd
;
1039 /* Take fcport->rport_lock for posting to fcport send queue */
1040 spin_lock_irqsave(&fcport
->rport_lock
, flags
);
1041 if (qedf_post_io_req(fcport
, io_req
)) {
1042 QEDF_WARN(&(qedf
->dbg_ctx
), "Unable to post io_req\n");
1043 /* Return SQE to pool */
1044 atomic_inc(&fcport
->free_sqes
);
1045 rc
= SCSI_MLQUEUE_HOST_BUSY
;
1047 spin_unlock_irqrestore(&fcport
->rport_lock
, flags
);
1048 atomic_dec(&fcport
->ios_to_queue
);
1054 static void qedf_parse_fcp_rsp(struct qedf_ioreq
*io_req
,
1055 struct fcoe_cqe_rsp_info
*fcp_rsp
)
1057 struct scsi_cmnd
*sc_cmd
= io_req
->sc_cmd
;
1058 struct qedf_ctx
*qedf
= io_req
->fcport
->qedf
;
1059 u8 rsp_flags
= fcp_rsp
->rsp_flags
.flags
;
1060 int fcp_sns_len
= 0;
1061 int fcp_rsp_len
= 0;
1062 uint8_t *rsp_info
, *sense_data
;
1064 io_req
->fcp_status
= FC_GOOD
;
1065 io_req
->fcp_resid
= 0;
1066 if (rsp_flags
& (FCOE_FCP_RSP_FLAGS_FCP_RESID_OVER
|
1067 FCOE_FCP_RSP_FLAGS_FCP_RESID_UNDER
))
1068 io_req
->fcp_resid
= fcp_rsp
->fcp_resid
;
1070 io_req
->scsi_comp_flags
= rsp_flags
;
1071 io_req
->cdb_status
= fcp_rsp
->scsi_status_code
;
1074 FCOE_FCP_RSP_FLAGS_FCP_RSP_LEN_VALID
)
1075 fcp_rsp_len
= fcp_rsp
->fcp_rsp_len
;
1078 FCOE_FCP_RSP_FLAGS_FCP_SNS_LEN_VALID
)
1079 fcp_sns_len
= fcp_rsp
->fcp_sns_len
;
1081 io_req
->fcp_rsp_len
= fcp_rsp_len
;
1082 io_req
->fcp_sns_len
= fcp_sns_len
;
1083 rsp_info
= sense_data
= io_req
->sense_buffer
;
1085 /* fetch fcp_rsp_code */
1086 if ((fcp_rsp_len
== 4) || (fcp_rsp_len
== 8)) {
1087 /* Only for task management function */
1088 io_req
->fcp_rsp_code
= rsp_info
[3];
1089 QEDF_INFO(&(qedf
->dbg_ctx
), QEDF_LOG_IO
,
1090 "fcp_rsp_code = %d\n", io_req
->fcp_rsp_code
);
1091 /* Adjust sense-data location. */
1092 sense_data
+= fcp_rsp_len
;
1095 if (fcp_sns_len
> SCSI_SENSE_BUFFERSIZE
) {
1096 QEDF_INFO(&(qedf
->dbg_ctx
), QEDF_LOG_IO
,
1097 "Truncating sense buffer\n");
1098 fcp_sns_len
= SCSI_SENSE_BUFFERSIZE
;
1101 /* The sense buffer can be NULL for TMF commands */
1102 if (sc_cmd
&& sc_cmd
->sense_buffer
) {
1103 memset(sc_cmd
->sense_buffer
, 0, SCSI_SENSE_BUFFERSIZE
);
1105 memcpy(sc_cmd
->sense_buffer
, sense_data
,
1110 static void qedf_unmap_sg_list(struct qedf_ctx
*qedf
, struct qedf_ioreq
*io_req
)
1112 struct scsi_cmnd
*sc
= io_req
->sc_cmd
;
1114 if (io_req
->bd_tbl
->bd_valid
&& sc
&& scsi_sg_count(sc
)) {
1115 dma_unmap_sg(&qedf
->pdev
->dev
, scsi_sglist(sc
),
1116 scsi_sg_count(sc
), sc
->sc_data_direction
);
1117 io_req
->bd_tbl
->bd_valid
= 0;
1121 void qedf_scsi_completion(struct qedf_ctx
*qedf
, struct fcoe_cqe
*cqe
,
1122 struct qedf_ioreq
*io_req
)
1124 struct scsi_cmnd
*sc_cmd
;
1125 struct fcoe_cqe_rsp_info
*fcp_rsp
;
1126 struct qedf_rport
*fcport
;
1128 u16 scope
, qualifier
= 0;
1129 u8 fw_residual_flag
= 0;
1130 unsigned long flags
= 0;
1138 if (!test_bit(QEDF_CMD_OUTSTANDING
, &io_req
->flags
) ||
1139 test_bit(QEDF_CMD_IN_CLEANUP
, &io_req
->flags
) ||
1140 test_bit(QEDF_CMD_IN_ABORT
, &io_req
->flags
)) {
1141 QEDF_ERR(&qedf
->dbg_ctx
,
1142 "io_req xid=0x%x already in cleanup or abort processing or already completed.\n",
1147 sc_cmd
= io_req
->sc_cmd
;
1148 fcp_rsp
= &cqe
->cqe_info
.rsp_info
;
1151 QEDF_WARN(&(qedf
->dbg_ctx
), "sc_cmd is NULL!\n");
1155 if (!qedf_priv(sc_cmd
)->io_req
) {
1156 QEDF_WARN(&(qedf
->dbg_ctx
),
1157 "io_req is NULL, returned in another context.\n");
1161 if (!sc_cmd
->device
) {
1162 QEDF_ERR(&qedf
->dbg_ctx
,
1163 "Device for sc_cmd %p is NULL.\n", sc_cmd
);
1167 if (!scsi_cmd_to_rq(sc_cmd
)->q
) {
1168 QEDF_WARN(&(qedf
->dbg_ctx
), "request->q is NULL so request "
1169 "is not valid, sc_cmd=%p.\n", sc_cmd
);
1173 fcport
= io_req
->fcport
;
1176 * When flush is active, let the cmds be completed from the cleanup
1179 if (test_bit(QEDF_RPORT_IN_TARGET_RESET
, &fcport
->flags
) ||
1180 (test_bit(QEDF_RPORT_IN_LUN_RESET
, &fcport
->flags
) &&
1181 sc_cmd
->device
->lun
== (u64
)fcport
->lun_reset_lun
)) {
1182 QEDF_INFO(&qedf
->dbg_ctx
, QEDF_LOG_IO
,
1183 "Dropping good completion xid=0x%x as fcport is flushing",
1188 qedf_parse_fcp_rsp(io_req
, fcp_rsp
);
1190 qedf_unmap_sg_list(qedf
, io_req
);
1192 /* Check for FCP transport error */
1193 if (io_req
->fcp_rsp_len
> 3 && io_req
->fcp_rsp_code
) {
1194 QEDF_ERR(&(qedf
->dbg_ctx
),
1195 "FCP I/O protocol failure xid=0x%x fcp_rsp_len=%d "
1196 "fcp_rsp_code=%d.\n", io_req
->xid
, io_req
->fcp_rsp_len
,
1197 io_req
->fcp_rsp_code
);
1198 sc_cmd
->result
= DID_BUS_BUSY
<< 16;
1202 fw_residual_flag
= GET_FIELD(cqe
->cqe_info
.rsp_info
.fw_error_flags
,
1203 FCOE_CQE_RSP_INFO_FW_UNDERRUN
);
1204 if (fw_residual_flag
) {
1205 QEDF_ERR(&qedf
->dbg_ctx
,
1206 "Firmware detected underrun: xid=0x%x fcp_rsp.flags=0x%02x fcp_resid=%d fw_residual=0x%x lba=%02x%02x%02x%02x.\n",
1207 io_req
->xid
, fcp_rsp
->rsp_flags
.flags
,
1209 cqe
->cqe_info
.rsp_info
.fw_residual
, sc_cmd
->cmnd
[2],
1210 sc_cmd
->cmnd
[3], sc_cmd
->cmnd
[4], sc_cmd
->cmnd
[5]);
1212 if (io_req
->cdb_status
== 0)
1213 sc_cmd
->result
= (DID_ERROR
<< 16) | io_req
->cdb_status
;
1215 sc_cmd
->result
= (DID_OK
<< 16) | io_req
->cdb_status
;
1218 * Set resid to the whole buffer length so we won't try to resue
1219 * any previously data.
1221 scsi_set_resid(sc_cmd
, scsi_bufflen(sc_cmd
));
1225 switch (io_req
->fcp_status
) {
1227 if (io_req
->cdb_status
== 0) {
1228 /* Good I/O completion */
1229 sc_cmd
->result
= DID_OK
<< 16;
1231 refcount
= kref_read(&io_req
->refcount
);
1232 QEDF_INFO(&(qedf
->dbg_ctx
), QEDF_LOG_IO
,
1233 "%d:0:%d:%lld xid=0x%0x op=0x%02x "
1234 "lba=%02x%02x%02x%02x cdb_status=%d "
1235 "fcp_resid=0x%x refcount=%d.\n",
1236 qedf
->lport
->host
->host_no
, sc_cmd
->device
->id
,
1237 sc_cmd
->device
->lun
, io_req
->xid
,
1238 sc_cmd
->cmnd
[0], sc_cmd
->cmnd
[2], sc_cmd
->cmnd
[3],
1239 sc_cmd
->cmnd
[4], sc_cmd
->cmnd
[5],
1240 io_req
->cdb_status
, io_req
->fcp_resid
,
1242 sc_cmd
->result
= (DID_OK
<< 16) | io_req
->cdb_status
;
1244 if (io_req
->cdb_status
== SAM_STAT_TASK_SET_FULL
||
1245 io_req
->cdb_status
== SAM_STAT_BUSY
) {
1247 * Check whether we need to set retry_delay at
1248 * all based on retry_delay module parameter
1249 * and the status qualifier.
1253 scope
= fcp_rsp
->retry_delay_timer
& 0xC000;
1255 qualifier
= fcp_rsp
->retry_delay_timer
& 0x3FFF;
1257 if (qedf_retry_delay
)
1260 if (io_req
->cdb_status
==
1261 SAM_STAT_TASK_SET_FULL
)
1262 qedf
->task_set_fulls
++;
1267 if (io_req
->fcp_resid
)
1268 scsi_set_resid(sc_cmd
, io_req
->fcp_resid
);
1270 if (chk_scope
== 1) {
1271 if ((scope
== 1 || scope
== 2) &&
1272 (qualifier
> 0 && qualifier
<= 0x3FEF)) {
1273 /* Check we don't go over the max */
1274 if (qualifier
> QEDF_RETRY_DELAY_MAX
) {
1275 qualifier
= QEDF_RETRY_DELAY_MAX
;
1276 QEDF_INFO(&qedf
->dbg_ctx
, QEDF_LOG_IO
,
1278 (fcp_rsp
->retry_delay_timer
&
1281 QEDF_INFO(&qedf
->dbg_ctx
, QEDF_LOG_IO
,
1282 "Scope = %d and qualifier = %d",
1284 /* Take fcport->rport_lock to
1285 * update the retry_delay_timestamp
1287 spin_lock_irqsave(&fcport
->rport_lock
, flags
);
1288 fcport
->retry_delay_timestamp
=
1289 jiffies
+ (qualifier
* HZ
/ 10);
1290 spin_unlock_irqrestore(&fcport
->rport_lock
,
1294 QEDF_INFO(&qedf
->dbg_ctx
, QEDF_LOG_IO
,
1295 "combination of scope = %d and qualifier = %d is not handled in qedf.\n",
1301 QEDF_INFO(&(qedf
->dbg_ctx
), QEDF_LOG_IO
, "fcp_status=%d.\n",
1302 io_req
->fcp_status
);
1307 if (qedf_io_tracing
)
1308 qedf_trace_io(fcport
, io_req
, QEDF_IO_TRACE_RSP
);
1311 * We wait till the end of the function to clear the
1312 * outstanding bit in case we need to send an abort
1314 clear_bit(QEDF_CMD_OUTSTANDING
, &io_req
->flags
);
1316 io_req
->sc_cmd
= NULL
;
1317 qedf_priv(sc_cmd
)->io_req
= NULL
;
1319 kref_put(&io_req
->refcount
, qedf_release_cmd
);
1322 /* Return a SCSI command in some other context besides a normal completion */
1323 void qedf_scsi_done(struct qedf_ctx
*qedf
, struct qedf_ioreq
*io_req
,
1326 struct scsi_cmnd
*sc_cmd
;
1330 QEDF_INFO(&qedf
->dbg_ctx
, QEDF_LOG_IO
, "io_req is NULL\n");
1334 if (test_and_set_bit(QEDF_CMD_ERR_SCSI_DONE
, &io_req
->flags
)) {
1335 QEDF_INFO(&qedf
->dbg_ctx
, QEDF_LOG_IO
,
1336 "io_req:%p scsi_done handling already done\n",
1342 * We will be done with this command after this call so clear the
1345 clear_bit(QEDF_CMD_OUTSTANDING
, &io_req
->flags
);
1347 sc_cmd
= io_req
->sc_cmd
;
1350 QEDF_WARN(&(qedf
->dbg_ctx
), "sc_cmd is NULL!\n");
1354 if (!virt_addr_valid(sc_cmd
)) {
1355 QEDF_ERR(&qedf
->dbg_ctx
, "sc_cmd=%p is not valid.", sc_cmd
);
1359 if (!qedf_priv(sc_cmd
)->io_req
) {
1360 QEDF_WARN(&(qedf
->dbg_ctx
),
1361 "io_req is NULL, returned in another context.\n");
1365 if (!sc_cmd
->device
) {
1366 QEDF_ERR(&qedf
->dbg_ctx
, "Device for sc_cmd %p is NULL.\n",
1371 if (!virt_addr_valid(sc_cmd
->device
)) {
1372 QEDF_ERR(&qedf
->dbg_ctx
,
1373 "Device pointer for sc_cmd %p is bad.\n", sc_cmd
);
1377 if (!sc_cmd
->sense_buffer
) {
1378 QEDF_ERR(&qedf
->dbg_ctx
,
1379 "sc_cmd->sense_buffer for sc_cmd %p is NULL.\n",
1384 if (!virt_addr_valid(sc_cmd
->sense_buffer
)) {
1385 QEDF_ERR(&qedf
->dbg_ctx
,
1386 "sc_cmd->sense_buffer for sc_cmd %p is bad.\n",
1391 qedf_unmap_sg_list(qedf
, io_req
);
1393 sc_cmd
->result
= result
<< 16;
1394 refcount
= kref_read(&io_req
->refcount
);
1395 QEDF_INFO(&(qedf
->dbg_ctx
), QEDF_LOG_IO
, "%d:0:%d:%lld: Completing "
1396 "sc_cmd=%p result=0x%08x op=0x%02x lba=0x%02x%02x%02x%02x, "
1397 "allowed=%d retries=%d refcount=%d.\n",
1398 qedf
->lport
->host
->host_no
, sc_cmd
->device
->id
,
1399 sc_cmd
->device
->lun
, sc_cmd
, sc_cmd
->result
, sc_cmd
->cmnd
[0],
1400 sc_cmd
->cmnd
[2], sc_cmd
->cmnd
[3], sc_cmd
->cmnd
[4],
1401 sc_cmd
->cmnd
[5], sc_cmd
->allowed
, sc_cmd
->retries
,
1405 * Set resid to the whole buffer length so we won't try to resue any
1406 * previously read data
1408 scsi_set_resid(sc_cmd
, scsi_bufflen(sc_cmd
));
1410 if (qedf_io_tracing
)
1411 qedf_trace_io(io_req
->fcport
, io_req
, QEDF_IO_TRACE_RSP
);
1413 io_req
->sc_cmd
= NULL
;
1414 qedf_priv(sc_cmd
)->io_req
= NULL
;
1416 kref_put(&io_req
->refcount
, qedf_release_cmd
);
1421 * Clear the io_req->sc_cmd backpointer so we don't try to process
1424 io_req
->sc_cmd
= NULL
;
1425 kref_put(&io_req
->refcount
, qedf_release_cmd
); /* ID: 001 */
1429 * Handle warning type CQE completions. This is mainly used for REC timer
1432 void qedf_process_warning_compl(struct qedf_ctx
*qedf
, struct fcoe_cqe
*cqe
,
1433 struct qedf_ioreq
*io_req
)
1436 struct qedf_rport
*fcport
= io_req
->fcport
;
1437 u64 err_warn_bit_map
;
1441 QEDF_INFO(&qedf
->dbg_ctx
, QEDF_LOG_IO
,
1442 "cqe is NULL for io_req %p xid=0x%x\n",
1443 io_req
, io_req
->xid
);
1447 QEDF_ERR(&(io_req
->fcport
->qedf
->dbg_ctx
), "Warning CQE, "
1448 "xid=0x%x\n", io_req
->xid
);
1449 QEDF_ERR(&(io_req
->fcport
->qedf
->dbg_ctx
),
1450 "err_warn_bitmap=%08x:%08x\n",
1451 le32_to_cpu(cqe
->cqe_info
.err_info
.err_warn_bitmap_hi
),
1452 le32_to_cpu(cqe
->cqe_info
.err_info
.err_warn_bitmap_lo
));
1453 QEDF_ERR(&(io_req
->fcport
->qedf
->dbg_ctx
), "tx_buff_off=%08x, "
1454 "rx_buff_off=%08x, rx_id=%04x\n",
1455 le32_to_cpu(cqe
->cqe_info
.err_info
.tx_buf_off
),
1456 le32_to_cpu(cqe
->cqe_info
.err_info
.rx_buf_off
),
1457 le32_to_cpu(cqe
->cqe_info
.err_info
.rx_id
));
1459 /* Normalize the error bitmap value to an just an unsigned int */
1460 err_warn_bit_map
= (u64
)
1461 ((u64
)cqe
->cqe_info
.err_info
.err_warn_bitmap_hi
<< 32) |
1462 (u64
)cqe
->cqe_info
.err_info
.err_warn_bitmap_lo
;
1463 for (i
= 0; i
< 64; i
++) {
1464 if (err_warn_bit_map
& (u64
)((u64
)1 << i
)) {
1470 /* Check if REC TOV expired if this is a tape device */
1471 if (fcport
->dev_type
== QEDF_RPORT_TYPE_TAPE
) {
1473 FCOE_WARNING_CODE_REC_TOV_TIMER_EXPIRATION
) {
1474 QEDF_ERR(&(qedf
->dbg_ctx
), "REC timer expired.\n");
1475 if (!test_bit(QEDF_CMD_SRR_SENT
, &io_req
->flags
)) {
1476 io_req
->rx_buf_off
=
1477 cqe
->cqe_info
.err_info
.rx_buf_off
;
1478 io_req
->tx_buf_off
=
1479 cqe
->cqe_info
.err_info
.tx_buf_off
;
1480 io_req
->rx_id
= cqe
->cqe_info
.err_info
.rx_id
;
1481 rval
= qedf_send_rec(io_req
);
1483 * We only want to abort the io_req if we
1484 * can't queue the REC command as we want to
1485 * keep the exchange open for recovery.
1495 init_completion(&io_req
->abts_done
);
1496 rval
= qedf_initiate_abts(io_req
, true);
1498 QEDF_ERR(&(qedf
->dbg_ctx
), "Failed to queue ABTS.\n");
1501 /* Cleanup a command when we receive an error detection completion */
1502 void qedf_process_error_detect(struct qedf_ctx
*qedf
, struct fcoe_cqe
*cqe
,
1503 struct qedf_ioreq
*io_req
)
1507 if (io_req
== NULL
) {
1508 QEDF_INFO(NULL
, QEDF_LOG_IO
, "io_req is NULL.\n");
1512 if (io_req
->fcport
== NULL
) {
1513 QEDF_INFO(NULL
, QEDF_LOG_IO
, "fcport is NULL.\n");
1518 QEDF_INFO(&qedf
->dbg_ctx
, QEDF_LOG_IO
,
1519 "cqe is NULL for io_req %p\n", io_req
);
1523 QEDF_ERR(&(io_req
->fcport
->qedf
->dbg_ctx
), "Error detection CQE, "
1524 "xid=0x%x\n", io_req
->xid
);
1525 QEDF_ERR(&(io_req
->fcport
->qedf
->dbg_ctx
),
1526 "err_warn_bitmap=%08x:%08x\n",
1527 le32_to_cpu(cqe
->cqe_info
.err_info
.err_warn_bitmap_hi
),
1528 le32_to_cpu(cqe
->cqe_info
.err_info
.err_warn_bitmap_lo
));
1529 QEDF_ERR(&(io_req
->fcport
->qedf
->dbg_ctx
), "tx_buff_off=%08x, "
1530 "rx_buff_off=%08x, rx_id=%04x\n",
1531 le32_to_cpu(cqe
->cqe_info
.err_info
.tx_buf_off
),
1532 le32_to_cpu(cqe
->cqe_info
.err_info
.rx_buf_off
),
1533 le32_to_cpu(cqe
->cqe_info
.err_info
.rx_id
));
1535 /* When flush is active, let the cmds be flushed out from the cleanup context */
1536 if (test_bit(QEDF_RPORT_IN_TARGET_RESET
, &io_req
->fcport
->flags
) ||
1537 (test_bit(QEDF_RPORT_IN_LUN_RESET
, &io_req
->fcport
->flags
) &&
1538 io_req
->sc_cmd
->device
->lun
== (u64
)io_req
->fcport
->lun_reset_lun
)) {
1539 QEDF_ERR(&qedf
->dbg_ctx
,
1540 "Dropping EQE for xid=0x%x as fcport is flushing",
1545 if (qedf
->stop_io_on_error
) {
1546 qedf_stop_all_io(qedf
);
1550 init_completion(&io_req
->abts_done
);
1551 rval
= qedf_initiate_abts(io_req
, true);
1553 QEDF_ERR(&(qedf
->dbg_ctx
), "Failed to queue ABTS.\n");
1556 static void qedf_flush_els_req(struct qedf_ctx
*qedf
,
1557 struct qedf_ioreq
*els_req
)
1559 QEDF_INFO(&(qedf
->dbg_ctx
), QEDF_LOG_IO
,
1560 "Flushing ELS request xid=0x%x refcount=%d.\n", els_req
->xid
,
1561 kref_read(&els_req
->refcount
));
1564 * Need to distinguish this from a timeout when calling the
1567 els_req
->event
= QEDF_IOREQ_EV_ELS_FLUSH
;
1569 clear_bit(QEDF_CMD_OUTSTANDING
, &els_req
->flags
);
1571 /* Cancel the timer */
1572 cancel_delayed_work_sync(&els_req
->timeout_work
);
1574 /* Call callback function to complete command */
1575 if (els_req
->cb_func
&& els_req
->cb_arg
) {
1576 els_req
->cb_func(els_req
->cb_arg
);
1577 els_req
->cb_arg
= NULL
;
1580 /* Release kref for original initiate_els */
1581 kref_put(&els_req
->refcount
, qedf_release_cmd
);
1584 /* A value of -1 for lun is a wild card that means flush all
1585 * active SCSI I/Os for the target.
1587 void qedf_flush_active_ios(struct qedf_rport
*fcport
, u64 lun
)
1589 struct qedf_ioreq
*io_req
;
1590 struct qedf_ctx
*qedf
;
1591 struct qedf_cmd_mgr
*cmd_mgr
;
1593 unsigned long flags
;
1599 QEDF_ERR(NULL
, "fcport is NULL\n");
1603 /* Check that fcport is still offloaded */
1604 if (!test_bit(QEDF_RPORT_SESSION_READY
, &fcport
->flags
)) {
1605 QEDF_ERR(NULL
, "fcport is no longer offloaded.\n");
1609 qedf
= fcport
->qedf
;
1612 QEDF_ERR(NULL
, "qedf is NULL.\n");
1616 /* Only wait for all commands to be queued in the Upload context */
1617 if (test_bit(QEDF_RPORT_UPLOADING_CONNECTION
, &fcport
->flags
) &&
1619 while (atomic_read(&fcport
->ios_to_queue
)) {
1620 QEDF_INFO(&qedf
->dbg_ctx
, QEDF_LOG_IO
,
1621 "Waiting for %d I/Os to be queued\n",
1622 atomic_read(&fcport
->ios_to_queue
));
1623 if (wait_cnt
== 0) {
1625 "%d IOs request could not be queued\n",
1626 atomic_read(&fcport
->ios_to_queue
));
1633 cmd_mgr
= qedf
->cmd_mgr
;
1635 QEDF_INFO(&qedf
->dbg_ctx
, QEDF_LOG_IO
,
1636 "Flush active i/o's num=0x%x fcport=0x%p port_id=0x%06x scsi_id=%d.\n",
1637 atomic_read(&fcport
->num_active_ios
), fcport
,
1638 fcport
->rdata
->ids
.port_id
, fcport
->rport
->scsi_target_id
);
1639 QEDF_INFO(&qedf
->dbg_ctx
, QEDF_LOG_IO
, "Locking flush mutex.\n");
1641 mutex_lock(&qedf
->flush_mutex
);
1643 set_bit(QEDF_RPORT_IN_TARGET_RESET
, &fcport
->flags
);
1645 set_bit(QEDF_RPORT_IN_LUN_RESET
, &fcport
->flags
);
1646 fcport
->lun_reset_lun
= lun
;
1649 for (i
= 0; i
< FCOE_PARAMS_NUM_TASKS
; i
++) {
1650 io_req
= &cmd_mgr
->cmds
[i
];
1654 if (!io_req
->fcport
)
1657 spin_lock_irqsave(&cmd_mgr
->lock
, flags
);
1659 if (io_req
->alloc
) {
1660 if (!test_bit(QEDF_CMD_OUTSTANDING
, &io_req
->flags
)) {
1661 if (io_req
->cmd_type
== QEDF_SCSI_CMD
)
1662 QEDF_ERR(&qedf
->dbg_ctx
,
1663 "Allocated but not queued, xid=0x%x\n",
1666 spin_unlock_irqrestore(&cmd_mgr
->lock
, flags
);
1668 spin_unlock_irqrestore(&cmd_mgr
->lock
, flags
);
1672 if (io_req
->fcport
!= fcport
)
1675 /* In case of ABTS, CMD_OUTSTANDING is cleared on ABTS response,
1676 * but RRQ is still pending.
1677 * Workaround: Within qedf_send_rrq, we check if the fcport is
1678 * NULL, and we drop the ref on the io_req to clean it up.
1680 if (!test_bit(QEDF_CMD_OUTSTANDING
, &io_req
->flags
)) {
1681 refcount
= kref_read(&io_req
->refcount
);
1682 QEDF_INFO(&qedf
->dbg_ctx
, QEDF_LOG_IO
,
1683 "Not outstanding, xid=0x%x, cmd_type=%d refcount=%d.\n",
1684 io_req
->xid
, io_req
->cmd_type
, refcount
);
1685 /* If RRQ work has been queue, try to cancel it and
1688 if (atomic_read(&io_req
->state
) ==
1689 QEDFC_CMD_ST_RRQ_WAIT
) {
1690 if (cancel_delayed_work_sync
1691 (&io_req
->rrq_work
)) {
1692 QEDF_INFO(&qedf
->dbg_ctx
, QEDF_LOG_IO
,
1693 "Putting reference for pending RRQ work xid=0x%x.\n",
1696 kref_put(&io_req
->refcount
,
1703 /* Only consider flushing ELS during target reset */
1704 if (io_req
->cmd_type
== QEDF_ELS
&&
1706 rc
= kref_get_unless_zero(&io_req
->refcount
);
1708 QEDF_ERR(&(qedf
->dbg_ctx
),
1709 "Could not get kref for ELS io_req=0x%p xid=0x%x.\n",
1710 io_req
, io_req
->xid
);
1713 qedf_initiate_cleanup(io_req
, false);
1715 qedf_flush_els_req(qedf
, io_req
);
1718 * Release the kref and go back to the top of the
1724 if (io_req
->cmd_type
== QEDF_ABTS
) {
1726 rc
= kref_get_unless_zero(&io_req
->refcount
);
1728 QEDF_ERR(&(qedf
->dbg_ctx
),
1729 "Could not get kref for abort io_req=0x%p xid=0x%x.\n",
1730 io_req
, io_req
->xid
);
1733 if (lun
!= -1 && io_req
->lun
!= lun
)
1736 QEDF_INFO(&qedf
->dbg_ctx
, QEDF_LOG_IO
,
1737 "Flushing abort xid=0x%x.\n", io_req
->xid
);
1739 if (cancel_delayed_work_sync(&io_req
->rrq_work
)) {
1740 QEDF_INFO(&qedf
->dbg_ctx
, QEDF_LOG_IO
,
1741 "Putting ref for cancelled RRQ work xid=0x%x.\n",
1743 kref_put(&io_req
->refcount
, qedf_release_cmd
);
1746 if (cancel_delayed_work_sync(&io_req
->timeout_work
)) {
1747 QEDF_INFO(&qedf
->dbg_ctx
, QEDF_LOG_IO
,
1748 "Putting ref for cancelled tmo work xid=0x%x.\n",
1750 qedf_initiate_cleanup(io_req
, true);
1751 /* Notify eh_abort handler that ABTS is
1754 complete(&io_req
->abts_done
);
1755 clear_bit(QEDF_CMD_IN_ABORT
, &io_req
->flags
);
1757 kref_put(&io_req
->refcount
, qedf_release_cmd
);
1763 if (!io_req
->sc_cmd
)
1765 if (!io_req
->sc_cmd
->device
) {
1766 QEDF_INFO(&qedf
->dbg_ctx
, QEDF_LOG_IO
,
1767 "Device backpointer NULL for sc_cmd=%p.\n",
1769 /* Put reference for non-existent scsi_cmnd */
1770 io_req
->sc_cmd
= NULL
;
1771 qedf_initiate_cleanup(io_req
, false);
1772 kref_put(&io_req
->refcount
, qedf_release_cmd
);
1777 * Use kref_get_unless_zero in the unlikely case the command
1778 * we're about to flush was completed in the normal SCSI path
1780 rc
= kref_get_unless_zero(&io_req
->refcount
);
1782 QEDF_ERR(&(qedf
->dbg_ctx
), "Could not get kref for "
1783 "io_req=0x%p xid=0x%x\n", io_req
, io_req
->xid
);
1787 QEDF_INFO(&(qedf
->dbg_ctx
), QEDF_LOG_IO
,
1788 "Cleanup xid=0x%x.\n", io_req
->xid
);
1791 /* Cleanup task and return I/O mid-layer */
1792 qedf_initiate_cleanup(io_req
, true);
1795 kref_put(&io_req
->refcount
, qedf_release_cmd
); /* ID: 004 */
1799 QEDF_INFO(&qedf
->dbg_ctx
, QEDF_LOG_IO
,
1800 "Flushed 0x%x I/Os, active=0x%x.\n",
1801 flush_cnt
, atomic_read(&fcport
->num_active_ios
));
1802 /* Only wait for all commands to complete in the Upload context */
1803 if (test_bit(QEDF_RPORT_UPLOADING_CONNECTION
, &fcport
->flags
) &&
1805 while (atomic_read(&fcport
->num_active_ios
)) {
1806 QEDF_INFO(&qedf
->dbg_ctx
, QEDF_LOG_IO
,
1807 "Flushed 0x%x I/Os, active=0x%x cnt=%d.\n",
1809 atomic_read(&fcport
->num_active_ios
),
1811 if (wait_cnt
== 0) {
1812 QEDF_ERR(&qedf
->dbg_ctx
,
1813 "Flushed %d I/Os, active=%d.\n",
1815 atomic_read(&fcport
->num_active_ios
));
1816 for (i
= 0; i
< FCOE_PARAMS_NUM_TASKS
; i
++) {
1817 io_req
= &cmd_mgr
->cmds
[i
];
1818 if (io_req
->fcport
&&
1819 io_req
->fcport
== fcport
) {
1821 kref_read(&io_req
->refcount
);
1822 set_bit(QEDF_CMD_DIRTY
,
1824 QEDF_ERR(&qedf
->dbg_ctx
,
1825 "Outstanding io_req =%p xid=0x%x flags=0x%lx, sc_cmd=%p refcount=%d cmd_type=%d.\n",
1826 io_req
, io_req
->xid
,
1841 clear_bit(QEDF_RPORT_IN_LUN_RESET
, &fcport
->flags
);
1842 clear_bit(QEDF_RPORT_IN_TARGET_RESET
, &fcport
->flags
);
1843 QEDF_INFO(&qedf
->dbg_ctx
, QEDF_LOG_IO
, "Unlocking flush mutex.\n");
1844 mutex_unlock(&qedf
->flush_mutex
);
1848 * Initiate a ABTS middle path command. Note that we don't have to initialize
1849 * the task context for an ABTS task.
1851 int qedf_initiate_abts(struct qedf_ioreq
*io_req
, bool return_scsi_cmd_on_abts
)
1853 struct fc_lport
*lport
;
1854 struct qedf_rport
*fcport
= io_req
->fcport
;
1855 struct fc_rport_priv
*rdata
;
1856 struct qedf_ctx
*qedf
;
1859 unsigned long flags
;
1860 struct fcoe_wqe
*sqe
;
1864 /* Sanity check qedf_rport before dereferencing any pointers */
1865 if (!test_bit(QEDF_RPORT_SESSION_READY
, &fcport
->flags
)) {
1866 QEDF_ERR(NULL
, "tgt not offloaded\n");
1871 qedf
= fcport
->qedf
;
1872 rdata
= fcport
->rdata
;
1874 if (!rdata
|| !kref_get_unless_zero(&rdata
->kref
)) {
1875 QEDF_ERR(&qedf
->dbg_ctx
, "stale rport\n");
1880 lport
= qedf
->lport
;
1882 if (lport
->state
!= LPORT_ST_READY
|| !(lport
->link_up
)) {
1883 QEDF_ERR(&(qedf
->dbg_ctx
), "link is not ready\n");
1885 goto drop_rdata_kref
;
1888 if (atomic_read(&qedf
->link_down_tmo_valid
) > 0) {
1889 QEDF_ERR(&(qedf
->dbg_ctx
), "link_down_tmo active.\n");
1891 goto drop_rdata_kref
;
1894 /* Ensure room on SQ */
1895 if (!atomic_read(&fcport
->free_sqes
)) {
1896 QEDF_ERR(&(qedf
->dbg_ctx
), "No SQ entries available\n");
1898 goto drop_rdata_kref
;
1901 if (test_bit(QEDF_RPORT_UPLOADING_CONNECTION
, &fcport
->flags
)) {
1902 QEDF_ERR(&qedf
->dbg_ctx
, "fcport is uploading.\n");
1904 goto drop_rdata_kref
;
1907 spin_lock_irqsave(&fcport
->rport_lock
, flags
);
1908 if (!test_bit(QEDF_CMD_OUTSTANDING
, &io_req
->flags
) ||
1909 test_bit(QEDF_CMD_IN_CLEANUP
, &io_req
->flags
) ||
1910 test_bit(QEDF_CMD_IN_ABORT
, &io_req
->flags
)) {
1911 QEDF_ERR(&qedf
->dbg_ctx
,
1912 "io_req xid=0x%x sc_cmd=%p already in cleanup or abort processing or already completed.\n",
1913 io_req
->xid
, io_req
->sc_cmd
);
1915 spin_unlock_irqrestore(&fcport
->rport_lock
, flags
);
1916 goto drop_rdata_kref
;
1919 /* Set the command type to abort */
1920 io_req
->cmd_type
= QEDF_ABTS
;
1921 spin_unlock_irqrestore(&fcport
->rport_lock
, flags
);
1923 kref_get(&io_req
->refcount
);
1926 qedf
->control_requests
++;
1927 qedf
->packet_aborts
++;
1929 io_req
->return_scsi_cmd_on_abts
= return_scsi_cmd_on_abts
;
1931 set_bit(QEDF_CMD_IN_ABORT
, &io_req
->flags
);
1932 refcount
= kref_read(&io_req
->refcount
);
1933 QEDF_INFO(&qedf
->dbg_ctx
, QEDF_LOG_SCSI_TM
,
1934 "ABTS io_req xid = 0x%x refcount=%d\n",
1937 qedf_cmd_timer_set(qedf
, io_req
, QEDF_ABORT_TIMEOUT
);
1939 spin_lock_irqsave(&fcport
->rport_lock
, flags
);
1941 sqe_idx
= qedf_get_sqe_idx(fcport
);
1942 sqe
= &fcport
->sq
[sqe_idx
];
1943 memset(sqe
, 0, sizeof(struct fcoe_wqe
));
1944 io_req
->task_params
->sqe
= sqe
;
1946 init_initiator_abort_fcoe_task(io_req
->task_params
);
1947 qedf_ring_doorbell(fcport
);
1949 spin_unlock_irqrestore(&fcport
->rport_lock
, flags
);
1952 kref_put(&rdata
->kref
, fc_rport_destroy
);
1957 void qedf_process_abts_compl(struct qedf_ctx
*qedf
, struct fcoe_cqe
*cqe
,
1958 struct qedf_ioreq
*io_req
)
1962 struct qedf_rport
*fcport
= io_req
->fcport
;
1964 QEDF_INFO(&(qedf
->dbg_ctx
), QEDF_LOG_SCSI_TM
, "Entered with xid = "
1965 "0x%x cmd_type = %d\n", io_req
->xid
, io_req
->cmd_type
);
1967 r_ctl
= cqe
->cqe_info
.abts_info
.r_ctl
;
1969 /* This was added at a point when we were scheduling abts_compl &
1970 * cleanup_compl on different CPUs and there was a possibility of
1971 * the io_req to be freed from the other context before we got here.
1974 QEDF_INFO(&qedf
->dbg_ctx
, QEDF_LOG_IO
,
1975 "Dropping ABTS completion xid=0x%x as fcport is NULL",
1981 * When flush is active, let the cmds be completed from the cleanup
1984 if (test_bit(QEDF_RPORT_IN_TARGET_RESET
, &fcport
->flags
) ||
1985 test_bit(QEDF_RPORT_IN_LUN_RESET
, &fcport
->flags
)) {
1986 QEDF_INFO(&qedf
->dbg_ctx
, QEDF_LOG_IO
,
1987 "Dropping ABTS completion xid=0x%x as fcport is flushing",
1992 if (!cancel_delayed_work(&io_req
->timeout_work
)) {
1993 QEDF_ERR(&qedf
->dbg_ctx
,
1994 "Wasn't able to cancel abts timeout work.\n");
1998 case FC_RCTL_BA_ACC
:
1999 QEDF_INFO(&(qedf
->dbg_ctx
), QEDF_LOG_SCSI_TM
,
2000 "ABTS response - ACC Send RRQ after R_A_TOV\n");
2001 io_req
->event
= QEDF_IOREQ_EV_ABORT_SUCCESS
;
2002 rc
= kref_get_unless_zero(&io_req
->refcount
); /* ID: 003 */
2004 QEDF_INFO(&qedf
->dbg_ctx
, QEDF_LOG_SCSI_TM
,
2005 "kref is already zero so ABTS was already completed or flushed xid=0x%x.\n",
2010 * Dont release this cmd yet. It will be relesed
2011 * after we get RRQ response
2013 queue_delayed_work(qedf
->dpc_wq
, &io_req
->rrq_work
,
2014 msecs_to_jiffies(qedf
->lport
->r_a_tov
));
2015 atomic_set(&io_req
->state
, QEDFC_CMD_ST_RRQ_WAIT
);
2017 /* For error cases let the cleanup return the command */
2018 case FC_RCTL_BA_RJT
:
2019 QEDF_INFO(&(qedf
->dbg_ctx
), QEDF_LOG_SCSI_TM
,
2020 "ABTS response - RJT\n");
2021 io_req
->event
= QEDF_IOREQ_EV_ABORT_FAILED
;
2024 QEDF_ERR(&(qedf
->dbg_ctx
), "Unknown ABTS response\n");
2028 clear_bit(QEDF_CMD_IN_ABORT
, &io_req
->flags
);
2030 if (io_req
->sc_cmd
) {
2031 if (!io_req
->return_scsi_cmd_on_abts
)
2032 QEDF_INFO(&qedf
->dbg_ctx
, QEDF_LOG_SCSI_TM
,
2033 "Not call scsi_done for xid=0x%x.\n",
2035 if (io_req
->return_scsi_cmd_on_abts
)
2036 qedf_scsi_done(qedf
, io_req
, DID_ERROR
);
2039 /* Notify eh_abort handler that ABTS is complete */
2040 complete(&io_req
->abts_done
);
2042 kref_put(&io_req
->refcount
, qedf_release_cmd
);
2045 int qedf_init_mp_req(struct qedf_ioreq
*io_req
)
2047 struct qedf_mp_req
*mp_req
;
2048 struct scsi_sge
*mp_req_bd
;
2049 struct scsi_sge
*mp_resp_bd
;
2050 struct qedf_ctx
*qedf
= io_req
->fcport
->qedf
;
2054 QEDF_INFO(&(qedf
->dbg_ctx
), QEDF_LOG_MP_REQ
, "Entered.\n");
2056 mp_req
= (struct qedf_mp_req
*)&(io_req
->mp_req
);
2057 memset(mp_req
, 0, sizeof(struct qedf_mp_req
));
2059 if (io_req
->cmd_type
!= QEDF_ELS
) {
2060 mp_req
->req_len
= sizeof(struct fcp_cmnd
);
2061 io_req
->data_xfer_len
= mp_req
->req_len
;
2063 mp_req
->req_len
= io_req
->data_xfer_len
;
2065 mp_req
->req_buf
= dma_alloc_coherent(&qedf
->pdev
->dev
, QEDF_PAGE_SIZE
,
2066 &mp_req
->req_buf_dma
, GFP_KERNEL
);
2067 if (!mp_req
->req_buf
) {
2068 QEDF_ERR(&(qedf
->dbg_ctx
), "Unable to alloc MP req buffer\n");
2069 qedf_free_mp_resc(io_req
);
2073 mp_req
->resp_buf
= dma_alloc_coherent(&qedf
->pdev
->dev
,
2074 QEDF_PAGE_SIZE
, &mp_req
->resp_buf_dma
, GFP_KERNEL
);
2075 if (!mp_req
->resp_buf
) {
2076 QEDF_ERR(&(qedf
->dbg_ctx
), "Unable to alloc TM resp "
2078 qedf_free_mp_resc(io_req
);
2082 /* Allocate and map mp_req_bd and mp_resp_bd */
2083 sz
= sizeof(struct scsi_sge
);
2084 mp_req
->mp_req_bd
= dma_alloc_coherent(&qedf
->pdev
->dev
, sz
,
2085 &mp_req
->mp_req_bd_dma
, GFP_KERNEL
);
2086 if (!mp_req
->mp_req_bd
) {
2087 QEDF_ERR(&(qedf
->dbg_ctx
), "Unable to alloc MP req bd\n");
2088 qedf_free_mp_resc(io_req
);
2092 mp_req
->mp_resp_bd
= dma_alloc_coherent(&qedf
->pdev
->dev
, sz
,
2093 &mp_req
->mp_resp_bd_dma
, GFP_KERNEL
);
2094 if (!mp_req
->mp_resp_bd
) {
2095 QEDF_ERR(&(qedf
->dbg_ctx
), "Unable to alloc MP resp bd\n");
2096 qedf_free_mp_resc(io_req
);
2101 addr
= mp_req
->req_buf_dma
;
2102 mp_req_bd
= mp_req
->mp_req_bd
;
2103 mp_req_bd
->sge_addr
.lo
= U64_LO(addr
);
2104 mp_req_bd
->sge_addr
.hi
= U64_HI(addr
);
2105 mp_req_bd
->sge_len
= QEDF_PAGE_SIZE
;
2108 * MP buffer is either a task mgmt command or an ELS.
2109 * So the assumption is that it consumes a single bd
2110 * entry in the bd table
2112 mp_resp_bd
= mp_req
->mp_resp_bd
;
2113 addr
= mp_req
->resp_buf_dma
;
2114 mp_resp_bd
->sge_addr
.lo
= U64_LO(addr
);
2115 mp_resp_bd
->sge_addr
.hi
= U64_HI(addr
);
2116 mp_resp_bd
->sge_len
= QEDF_PAGE_SIZE
;
2122 * Last ditch effort to clear the port if it's stuck. Used only after a
2123 * cleanup task times out.
2125 static void qedf_drain_request(struct qedf_ctx
*qedf
)
2127 if (test_bit(QEDF_DRAIN_ACTIVE
, &qedf
->flags
)) {
2128 QEDF_ERR(&(qedf
->dbg_ctx
), "MCP drain already active.\n");
2132 /* Set bit to return all queuecommand requests as busy */
2133 set_bit(QEDF_DRAIN_ACTIVE
, &qedf
->flags
);
2135 /* Call qed drain request for function. Should be synchronous */
2136 qed_ops
->common
->drain(qedf
->cdev
);
2138 /* Settle time for CQEs to be returned */
2141 /* Unplug and continue */
2142 clear_bit(QEDF_DRAIN_ACTIVE
, &qedf
->flags
);
2146 * Returns SUCCESS if the cleanup task does not timeout, otherwise return
2149 int qedf_initiate_cleanup(struct qedf_ioreq
*io_req
,
2150 bool return_scsi_cmd_on_abts
)
2152 struct qedf_rport
*fcport
;
2153 struct qedf_ctx
*qedf
;
2156 unsigned long flags
;
2157 struct fcoe_wqe
*sqe
;
2161 fcport
= io_req
->fcport
;
2163 QEDF_ERR(NULL
, "fcport is NULL.\n");
2167 /* Sanity check qedf_rport before dereferencing any pointers */
2168 if (!test_bit(QEDF_RPORT_SESSION_READY
, &fcport
->flags
)) {
2169 QEDF_ERR(NULL
, "tgt not offloaded\n");
2173 qedf
= fcport
->qedf
;
2175 QEDF_ERR(NULL
, "qedf is NULL.\n");
2179 if (io_req
->cmd_type
== QEDF_ELS
) {
2183 if (!test_bit(QEDF_CMD_OUTSTANDING
, &io_req
->flags
) ||
2184 test_and_set_bit(QEDF_CMD_IN_CLEANUP
, &io_req
->flags
)) {
2185 QEDF_ERR(&(qedf
->dbg_ctx
), "io_req xid=0x%x already in "
2186 "cleanup processing or already completed.\n",
2190 set_bit(QEDF_CMD_IN_CLEANUP
, &io_req
->flags
);
2193 /* Ensure room on SQ */
2194 if (!atomic_read(&fcport
->free_sqes
)) {
2195 QEDF_ERR(&(qedf
->dbg_ctx
), "No SQ entries available\n");
2196 /* Need to make sure we clear the flag since it was set */
2197 clear_bit(QEDF_CMD_IN_CLEANUP
, &io_req
->flags
);
2201 if (io_req
->cmd_type
== QEDF_CLEANUP
) {
2202 QEDF_ERR(&qedf
->dbg_ctx
,
2203 "io_req=0x%x is already a cleanup command cmd_type=%d.\n",
2204 io_req
->xid
, io_req
->cmd_type
);
2205 clear_bit(QEDF_CMD_IN_CLEANUP
, &io_req
->flags
);
2209 refcount
= kref_read(&io_req
->refcount
);
2211 QEDF_INFO(&qedf
->dbg_ctx
, QEDF_LOG_IO
,
2212 "Entered xid=0x%x sc_cmd=%p cmd_type=%d flags=0x%lx refcount=%d fcport=%p port_id=0x%06x\n",
2213 io_req
->xid
, io_req
->sc_cmd
, io_req
->cmd_type
, io_req
->flags
,
2214 refcount
, fcport
, fcport
->rdata
->ids
.port_id
);
2216 /* Cleanup cmds re-use the same TID as the original I/O */
2217 spin_lock_irqsave(&fcport
->rport_lock
, flags
);
2218 io_req
->cmd_type
= QEDF_CLEANUP
;
2219 spin_unlock_irqrestore(&fcport
->rport_lock
, flags
);
2220 io_req
->return_scsi_cmd_on_abts
= return_scsi_cmd_on_abts
;
2222 init_completion(&io_req
->cleanup_done
);
2224 spin_lock_irqsave(&fcport
->rport_lock
, flags
);
2226 sqe_idx
= qedf_get_sqe_idx(fcport
);
2227 sqe
= &fcport
->sq
[sqe_idx
];
2228 memset(sqe
, 0, sizeof(struct fcoe_wqe
));
2229 io_req
->task_params
->sqe
= sqe
;
2231 init_initiator_cleanup_fcoe_task(io_req
->task_params
);
2232 qedf_ring_doorbell(fcport
);
2234 spin_unlock_irqrestore(&fcport
->rport_lock
, flags
);
2236 tmo
= wait_for_completion_timeout(&io_req
->cleanup_done
,
2237 QEDF_CLEANUP_TIMEOUT
* HZ
);
2242 QEDF_ERR(&(qedf
->dbg_ctx
), "Cleanup command timeout, "
2243 "xid=%x.\n", io_req
->xid
);
2244 clear_bit(QEDF_CMD_IN_CLEANUP
, &io_req
->flags
);
2245 /* Issue a drain request if cleanup task times out */
2246 QEDF_ERR(&(qedf
->dbg_ctx
), "Issuing MCP drain request.\n");
2247 qedf_drain_request(qedf
);
2250 /* If it TASK MGMT handle it, reference will be decreased
2251 * in qedf_execute_tmf
2253 if (io_req
->tm_flags
== FCP_TMF_LUN_RESET
||
2254 io_req
->tm_flags
== FCP_TMF_TGT_RESET
) {
2255 clear_bit(QEDF_CMD_OUTSTANDING
, &io_req
->flags
);
2256 io_req
->sc_cmd
= NULL
;
2257 kref_put(&io_req
->refcount
, qedf_release_cmd
);
2258 complete(&io_req
->tm_done
);
2261 if (io_req
->sc_cmd
) {
2262 if (!io_req
->return_scsi_cmd_on_abts
)
2263 QEDF_INFO(&qedf
->dbg_ctx
, QEDF_LOG_SCSI_TM
,
2264 "Not call scsi_done for xid=0x%x.\n",
2266 if (io_req
->return_scsi_cmd_on_abts
)
2267 qedf_scsi_done(qedf
, io_req
, DID_ERROR
);
2271 io_req
->event
= QEDF_IOREQ_EV_CLEANUP_SUCCESS
;
2273 io_req
->event
= QEDF_IOREQ_EV_CLEANUP_FAILED
;
2278 void qedf_process_cleanup_compl(struct qedf_ctx
*qedf
, struct fcoe_cqe
*cqe
,
2279 struct qedf_ioreq
*io_req
)
2281 QEDF_INFO(&(qedf
->dbg_ctx
), QEDF_LOG_IO
, "Entered xid = 0x%x\n",
2284 clear_bit(QEDF_CMD_IN_CLEANUP
, &io_req
->flags
);
2286 /* Complete so we can finish cleaning up the I/O */
2287 complete(&io_req
->cleanup_done
);
2290 static int qedf_execute_tmf(struct qedf_rport
*fcport
, u64 tm_lun
,
2293 struct qedf_ioreq
*io_req
;
2294 struct fcoe_task_context
*task
;
2295 struct qedf_ctx
*qedf
= fcport
->qedf
;
2296 struct fc_lport
*lport
= qedf
->lport
;
2300 unsigned long flags
;
2301 struct fcoe_wqe
*sqe
;
2304 if (!test_bit(QEDF_RPORT_SESSION_READY
, &fcport
->flags
)) {
2305 QEDF_ERR(&(qedf
->dbg_ctx
), "fcport not offloaded\n");
2310 io_req
= qedf_alloc_cmd(fcport
, QEDF_TASK_MGMT_CMD
);
2312 QEDF_ERR(&(qedf
->dbg_ctx
), "Failed TMF");
2317 if (tm_flags
== FCP_TMF_LUN_RESET
)
2319 else if (tm_flags
== FCP_TMF_TGT_RESET
)
2320 qedf
->target_resets
++;
2322 /* Initialize rest of io_req fields */
2323 io_req
->sc_cmd
= NULL
;
2324 io_req
->fcport
= fcport
;
2325 io_req
->cmd_type
= QEDF_TASK_MGMT_CMD
;
2328 io_req
->io_req_flags
= QEDF_READ
;
2329 io_req
->data_xfer_len
= 0;
2330 io_req
->tm_flags
= tm_flags
;
2332 /* Default is to return a SCSI command when an error occurs */
2333 io_req
->return_scsi_cmd_on_abts
= false;
2334 io_req
->tm_lun
= tm_lun
;
2336 /* Obtain exchange id */
2339 QEDF_INFO(&(qedf
->dbg_ctx
), QEDF_LOG_SCSI_TM
, "TMF io_req xid = "
2342 /* Initialize task context for this IO request */
2343 task
= qedf_get_task_mem(&qedf
->tasks
, xid
);
2345 init_completion(&io_req
->tm_done
);
2347 spin_lock_irqsave(&fcport
->rport_lock
, flags
);
2349 /* Record which cpu this request is associated with */
2350 io_req
->cpu
= smp_processor_id();
2352 sqe_idx
= qedf_get_sqe_idx(fcport
);
2353 sqe
= &fcport
->sq
[sqe_idx
];
2354 memset(sqe
, 0, sizeof(struct fcoe_wqe
));
2356 qedf_init_task(fcport
, lport
, io_req
, task
, sqe
);
2357 qedf_ring_doorbell(fcport
);
2359 spin_unlock_irqrestore(&fcport
->rport_lock
, flags
);
2361 set_bit(QEDF_CMD_OUTSTANDING
, &io_req
->flags
);
2362 tmo
= wait_for_completion_timeout(&io_req
->tm_done
,
2363 QEDF_TM_TIMEOUT
* HZ
);
2367 QEDF_ERR(&(qedf
->dbg_ctx
), "wait for tm_cmpl timeout!\n");
2368 /* Clear outstanding bit since command timed out */
2369 clear_bit(QEDF_CMD_OUTSTANDING
, &io_req
->flags
);
2370 io_req
->sc_cmd
= NULL
;
2372 /* Check TMF response code */
2373 if (io_req
->fcp_rsp_code
== 0)
2379 * Double check that fcport has not gone into an uploading state before
2380 * executing the command flush for the LUN/target.
2382 if (test_bit(QEDF_RPORT_UPLOADING_CONNECTION
, &fcport
->flags
)) {
2383 QEDF_ERR(&qedf
->dbg_ctx
,
2384 "fcport is uploading, not executing flush.\n");
2387 /* We do not need this io_req any more */
2388 kref_put(&io_req
->refcount
, qedf_release_cmd
);
2391 if (tm_flags
== FCP_TMF_LUN_RESET
)
2392 qedf_flush_active_ios(fcport
, tm_lun
);
2394 qedf_flush_active_ios(fcport
, -1);
2397 if (rc
!= SUCCESS
) {
2398 QEDF_ERR(&(qedf
->dbg_ctx
), "task mgmt command failed...\n");
2401 QEDF_ERR(&(qedf
->dbg_ctx
), "task mgmt command success...\n");
2407 int qedf_initiate_tmf(struct fc_rport
*rport
, u64 lun
, u8 tm_flags
)
2409 struct fc_rport_libfc_priv
*rp
= rport
->dd_data
;
2410 struct qedf_rport
*fcport
= (struct qedf_rport
*)&rp
[1];
2411 struct qedf_ctx
*qedf
= fcport
->qedf
;
2412 struct fc_lport
*lport
= rp
->local_port
;
2414 struct fc_rport_priv
*rdata
= fcport
->rdata
;
2417 "tm_flags 0x%x target_id = 0x%x lun=%llu\n",
2418 tm_flags
, rport
->scsi_target_id
, lun
);
2420 if (!rdata
|| !kref_get_unless_zero(&rdata
->kref
)) {
2421 QEDF_ERR(NULL
, "stale rport\n");
2425 QEDF_ERR(NULL
, "portid=%06x tm_flags =%s\n", rdata
->ids
.port_id
,
2426 (tm_flags
== FCP_TMF_TGT_RESET
) ? "TARGET RESET" :
2429 rc
= fc_block_rport(rport
);
2434 QEDF_ERR(NULL
, "qedf is NULL.\n");
2439 if (test_bit(QEDF_RPORT_UPLOADING_CONNECTION
, &fcport
->flags
)) {
2440 QEDF_ERR(&qedf
->dbg_ctx
, "Connection is getting uploaded.\n");
2445 if (test_bit(QEDF_UNLOADING
, &qedf
->flags
) ||
2446 test_bit(QEDF_DBG_STOP_IO
, &qedf
->flags
)) {
2451 if (lport
->state
!= LPORT_ST_READY
|| !(lport
->link_up
)) {
2452 QEDF_ERR(&(qedf
->dbg_ctx
), "link is not ready\n");
2457 if (test_bit(QEDF_RPORT_UPLOADING_CONNECTION
, &fcport
->flags
)) {
2459 QEDF_ERR(&qedf
->dbg_ctx
, "fcport %p is uploading.\n",
2462 QEDF_ERR(&qedf
->dbg_ctx
,
2463 "fcport %p port_id=%06x is uploading.\n",
2464 fcport
, fcport
->rdata
->ids
.port_id
);
2469 rc
= qedf_execute_tmf(fcport
, lun
, tm_flags
);
2472 kref_put(&rdata
->kref
, fc_rport_destroy
);
2476 void qedf_process_tmf_compl(struct qedf_ctx
*qedf
, struct fcoe_cqe
*cqe
,
2477 struct qedf_ioreq
*io_req
)
2479 struct fcoe_cqe_rsp_info
*fcp_rsp
;
2481 clear_bit(QEDF_CMD_OUTSTANDING
, &io_req
->flags
);
2483 fcp_rsp
= &cqe
->cqe_info
.rsp_info
;
2484 qedf_parse_fcp_rsp(io_req
, fcp_rsp
);
2486 complete(&io_req
->tm_done
);
2489 void qedf_process_unsol_compl(struct qedf_ctx
*qedf
, uint16_t que_idx
,
2490 struct fcoe_cqe
*cqe
)
2492 unsigned long flags
;
2493 uint16_t pktlen
= cqe
->cqe_info
.unsolic_info
.pkt_len
;
2494 u32 payload_len
, crc
;
2495 struct fc_frame_header
*fh
;
2496 struct fc_frame
*fp
;
2497 struct qedf_io_work
*io_work
;
2500 struct scsi_bd
*p_bd_info
;
2502 p_bd_info
= &cqe
->cqe_info
.unsolic_info
.bd_info
;
2503 QEDF_INFO(&(qedf
->dbg_ctx
), QEDF_LOG_UNSOL
,
2504 "address.hi=%x, address.lo=%x, opaque_data.hi=%x, opaque_data.lo=%x, bdq_prod_idx=%u, len=%u\n",
2505 le32_to_cpu(p_bd_info
->address
.hi
),
2506 le32_to_cpu(p_bd_info
->address
.lo
),
2507 le32_to_cpu(p_bd_info
->opaque
.fcoe_opaque
.hi
),
2508 le32_to_cpu(p_bd_info
->opaque
.fcoe_opaque
.lo
),
2509 qedf
->bdq_prod_idx
, pktlen
);
2511 bdq_idx
= le32_to_cpu(p_bd_info
->opaque
.fcoe_opaque
.lo
);
2512 if (bdq_idx
>= QEDF_BDQ_SIZE
) {
2513 QEDF_ERR(&(qedf
->dbg_ctx
), "bdq_idx is out of range %d.\n",
2515 goto increment_prod
;
2518 bdq_addr
= qedf
->bdq
[bdq_idx
].buf_addr
;
2520 QEDF_ERR(&(qedf
->dbg_ctx
), "bdq_addr is NULL, dropping "
2521 "unsolicited packet.\n");
2522 goto increment_prod
;
2525 if (qedf_dump_frames
) {
2526 QEDF_INFO(&(qedf
->dbg_ctx
), QEDF_LOG_UNSOL
,
2527 "BDQ frame is at addr=%p.\n", bdq_addr
);
2528 print_hex_dump(KERN_WARNING
, "bdq ", DUMP_PREFIX_OFFSET
, 16, 1,
2529 (void *)bdq_addr
, pktlen
, false);
2532 /* Allocate frame */
2533 payload_len
= pktlen
- sizeof(struct fc_frame_header
);
2534 fp
= fc_frame_alloc(qedf
->lport
, payload_len
);
2536 QEDF_ERR(&(qedf
->dbg_ctx
), "Could not allocate fp.\n");
2537 goto increment_prod
;
2540 /* Copy data from BDQ buffer into fc_frame struct */
2541 fh
= (struct fc_frame_header
*)fc_frame_header_get(fp
);
2542 memcpy(fh
, (void *)bdq_addr
, pktlen
);
2544 QEDF_WARN(&qedf
->dbg_ctx
,
2545 "Processing Unsolicated frame, src=%06x dest=%06x r_ctl=0x%x type=0x%x cmd=%02x\n",
2546 ntoh24(fh
->fh_s_id
), ntoh24(fh
->fh_d_id
), fh
->fh_r_ctl
,
2547 fh
->fh_type
, fc_frame_payload_op(fp
));
2549 /* Initialize the frame so libfc sees it as a valid frame */
2550 crc
= fcoe_fc_crc(fp
);
2552 fr_dev(fp
) = qedf
->lport
;
2553 fr_sof(fp
) = FC_SOF_I3
;
2554 fr_eof(fp
) = FC_EOF_T
;
2555 fr_crc(fp
) = cpu_to_le32(~crc
);
2558 * We need to return the frame back up to libfc in a non-atomic
2561 io_work
= mempool_alloc(qedf
->io_mempool
, GFP_ATOMIC
);
2563 QEDF_WARN(&(qedf
->dbg_ctx
), "Could not allocate "
2564 "work for I/O completion.\n");
2566 goto increment_prod
;
2568 memset(io_work
, 0, sizeof(struct qedf_io_work
));
2570 INIT_WORK(&io_work
->work
, qedf_fp_io_handler
);
2572 /* Copy contents of CQE for deferred processing */
2573 memcpy(&io_work
->cqe
, cqe
, sizeof(struct fcoe_cqe
));
2575 io_work
->qedf
= qedf
;
2578 queue_work_on(smp_processor_id(), qedf_io_wq
, &io_work
->work
);
2580 spin_lock_irqsave(&qedf
->hba_lock
, flags
);
2582 /* Increment producer to let f/w know we've handled the frame */
2583 qedf
->bdq_prod_idx
++;
2585 /* Producer index wraps at uint16_t boundary */
2586 if (qedf
->bdq_prod_idx
== 0xffff)
2587 qedf
->bdq_prod_idx
= 0;
2589 writew(qedf
->bdq_prod_idx
, qedf
->bdq_primary_prod
);
2590 readw(qedf
->bdq_primary_prod
);
2591 writew(qedf
->bdq_prod_idx
, qedf
->bdq_secondary_prod
);
2592 readw(qedf
->bdq_secondary_prod
);
2594 spin_unlock_irqrestore(&qedf
->hba_lock
, flags
);