hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/drivers/target/iscsi/cxgbit/cxgbit_cm.c
....@@ -1,9 +1,6 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * Copyright (c) 2016 Chelsio Communications, Inc.
3
- *
4
- * This program is free software; you can redistribute it and/or modify
5
- * it under the terms of the GNU General Public License version 2 as
6
- * published by the Free Software Foundation.
74 */
85
96 #include <linux/module.h>
....@@ -878,10 +875,12 @@
878875 return 0;
879876
880877 if (caps & DCB_CAP_DCBX_VER_IEEE) {
881
- iscsi_dcb_app.selector = IEEE_8021QAZ_APP_SEL_ANY;
882
-
878
+ iscsi_dcb_app.selector = IEEE_8021QAZ_APP_SEL_STREAM;
883879 ret = dcb_ieee_getapp_mask(ndev, &iscsi_dcb_app);
884
-
880
+ if (!ret) {
881
+ iscsi_dcb_app.selector = IEEE_8021QAZ_APP_SEL_ANY;
882
+ ret = dcb_ieee_getapp_mask(ndev, &iscsi_dcb_app);
883
+ }
885884 } else if (caps & DCB_CAP_DCBX_VER_CEE) {
886885 iscsi_dcb_app.selector = DCB_APP_IDTYPE_PORTNUM;
887886
....@@ -935,8 +934,8 @@
935934 goto out;
936935 csk->mtu = ndev->mtu;
937936 csk->tx_chan = cxgb4_port_chan(ndev);
938
- csk->smac_idx = cxgb4_tp_smt_idx(cdev->lldi.adapter_type,
939
- cxgb4_port_viid(ndev));
937
+ csk->smac_idx =
938
+ ((struct port_info *)netdev_priv(ndev))->smt_idx;
940939 step = cdev->lldi.ntxq /
941940 cdev->lldi.nchan;
942941 csk->txq_idx = cxgb4_port_idx(ndev) * step;
....@@ -971,8 +970,8 @@
971970 port_id = cxgb4_port_idx(ndev);
972971 csk->mtu = dst_mtu(dst);
973972 csk->tx_chan = cxgb4_port_chan(ndev);
974
- csk->smac_idx = cxgb4_tp_smt_idx(cdev->lldi.adapter_type,
975
- cxgb4_port_viid(ndev));
973
+ csk->smac_idx =
974
+ ((struct port_info *)netdev_priv(ndev))->smt_idx;
976975 step = cdev->lldi.ntxq /
977976 cdev->lldi.nports;
978977 csk->txq_idx = (port_id * step) +
....@@ -1361,7 +1360,6 @@
13611360 cxgbit_sock_reset_wr_list(csk);
13621361 spin_lock_init(&csk->lock);
13631362 init_waitqueue_head(&csk->waitq);
1364
- init_waitqueue_head(&csk->ack_waitq);
13651363 csk->lock_owner = false;
13661364
13671365 if (cxgbit_alloc_csk_skb(csk)) {
....@@ -1486,6 +1484,26 @@
14861484 return flowclen16;
14871485 }
14881486
1487
+static int
1488
+cxgbit_send_tcb_skb(struct cxgbit_sock *csk, struct sk_buff *skb)
1489
+{
1490
+ spin_lock_bh(&csk->lock);
1491
+ if (unlikely(csk->com.state != CSK_STATE_ESTABLISHED)) {
1492
+ spin_unlock_bh(&csk->lock);
1493
+ pr_err("%s: csk 0x%p, tid %u, state %u\n",
1494
+ __func__, csk, csk->tid, csk->com.state);
1495
+ __kfree_skb(skb);
1496
+ return -1;
1497
+ }
1498
+
1499
+ cxgbit_get_csk(csk);
1500
+ cxgbit_init_wr_wait(&csk->com.wr_wait);
1501
+ cxgbit_ofld_send(csk->com.cdev, skb);
1502
+ spin_unlock_bh(&csk->lock);
1503
+
1504
+ return 0;
1505
+}
1506
+
14891507 int cxgbit_setup_conn_digest(struct cxgbit_sock *csk)
14901508 {
14911509 struct sk_buff *skb;
....@@ -1511,10 +1529,8 @@
15111529 (dcrc ? ULP_CRC_DATA : 0)) << 4);
15121530 set_wr_txq(skb, CPL_PRIORITY_CONTROL, csk->ctrlq_idx);
15131531
1514
- cxgbit_get_csk(csk);
1515
- cxgbit_init_wr_wait(&csk->com.wr_wait);
1516
-
1517
- cxgbit_ofld_send(csk->com.cdev, skb);
1532
+ if (cxgbit_send_tcb_skb(csk, skb))
1533
+ return -1;
15181534
15191535 ret = cxgbit_wait_for_reply(csk->com.cdev,
15201536 &csk->com.wr_wait,
....@@ -1546,10 +1562,8 @@
15461562 req->val = cpu_to_be64(pg_idx << 8);
15471563 set_wr_txq(skb, CPL_PRIORITY_CONTROL, csk->ctrlq_idx);
15481564
1549
- cxgbit_get_csk(csk);
1550
- cxgbit_init_wr_wait(&csk->com.wr_wait);
1551
-
1552
- cxgbit_ofld_send(csk->com.cdev, skb);
1565
+ if (cxgbit_send_tcb_skb(csk, skb))
1566
+ return -1;
15531567
15541568 ret = cxgbit_wait_for_reply(csk->com.cdev,
15551569 &csk->com.wr_wait,
....@@ -1872,7 +1886,6 @@
18721886 if (csk->snd_una != snd_una) {
18731887 csk->snd_una = snd_una;
18741888 dst_confirm(csk->dst);
1875
- wake_up(&csk->ack_waitq);
18761889 }
18771890 }
18781891