mirror of https://gitee.com/openkylin/linux.git
qed: LL2 flush isles when connection is closed
Driver should free all pending isles once it gets a FLUSH cqe from FW.
Part of iSCSI out of order flow.
Fixes: 1d6cff4fca
("qed: Add iSCSI out of order packet handling")
Signed-off-by: Ariel Elior <Ariel.Elior@cavium.com>
Signed-off-by: Michal Kalderon <Michal.Kalderon@cavium.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
5a4931ae01
commit
f9bcd60274
|
@ -591,6 +591,27 @@ static void qed_ll2_rxq_flush(struct qed_hwfn *p_hwfn, u8 connection_handle)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
qed_ll2_lb_rxq_handler_slowpath(struct qed_hwfn *p_hwfn,
|
||||||
|
struct core_rx_slow_path_cqe *p_cqe)
|
||||||
|
{
|
||||||
|
struct ooo_opaque *iscsi_ooo;
|
||||||
|
u32 cid;
|
||||||
|
|
||||||
|
if (p_cqe->ramrod_cmd_id != CORE_RAMROD_RX_QUEUE_FLUSH)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
iscsi_ooo = (struct ooo_opaque *)&p_cqe->opaque_data;
|
||||||
|
if (iscsi_ooo->ooo_opcode != TCP_EVENT_DELETE_ISLES)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
/* Need to make a flush */
|
||||||
|
cid = le32_to_cpu(iscsi_ooo->cid);
|
||||||
|
qed_ooo_release_connection_isles(p_hwfn, p_hwfn->p_ooo_info, cid);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
static int qed_ll2_lb_rxq_handler(struct qed_hwfn *p_hwfn,
|
static int qed_ll2_lb_rxq_handler(struct qed_hwfn *p_hwfn,
|
||||||
struct qed_ll2_info *p_ll2_conn)
|
struct qed_ll2_info *p_ll2_conn)
|
||||||
{
|
{
|
||||||
|
@ -617,6 +638,11 @@ static int qed_ll2_lb_rxq_handler(struct qed_hwfn *p_hwfn,
|
||||||
cq_old_idx = qed_chain_get_cons_idx(&p_rx->rcq_chain);
|
cq_old_idx = qed_chain_get_cons_idx(&p_rx->rcq_chain);
|
||||||
cqe_type = cqe->rx_cqe_sp.type;
|
cqe_type = cqe->rx_cqe_sp.type;
|
||||||
|
|
||||||
|
if (cqe_type == CORE_RX_CQE_TYPE_SLOW_PATH)
|
||||||
|
if (qed_ll2_lb_rxq_handler_slowpath(p_hwfn,
|
||||||
|
&cqe->rx_cqe_sp))
|
||||||
|
continue;
|
||||||
|
|
||||||
if (cqe_type != CORE_RX_CQE_TYPE_REGULAR) {
|
if (cqe_type != CORE_RX_CQE_TYPE_REGULAR) {
|
||||||
DP_NOTICE(p_hwfn,
|
DP_NOTICE(p_hwfn,
|
||||||
"Got a non-regular LB LL2 completion [type 0x%02x]\n",
|
"Got a non-regular LB LL2 completion [type 0x%02x]\n",
|
||||||
|
|
Loading…
Reference in New Issue