.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
---|
1 | 2 | /* |
---|
2 | 3 | * 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. |
---|
7 | 4 | */ |
---|
8 | 5 | |
---|
9 | 6 | #include <linux/module.h> |
---|
.. | .. |
---|
878 | 875 | return 0; |
---|
879 | 876 | |
---|
880 | 877 | 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; |
---|
883 | 879 | 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 | + } |
---|
885 | 884 | } else if (caps & DCB_CAP_DCBX_VER_CEE) { |
---|
886 | 885 | iscsi_dcb_app.selector = DCB_APP_IDTYPE_PORTNUM; |
---|
887 | 886 | |
---|
.. | .. |
---|
935 | 934 | goto out; |
---|
936 | 935 | csk->mtu = ndev->mtu; |
---|
937 | 936 | 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; |
---|
940 | 939 | step = cdev->lldi.ntxq / |
---|
941 | 940 | cdev->lldi.nchan; |
---|
942 | 941 | csk->txq_idx = cxgb4_port_idx(ndev) * step; |
---|
.. | .. |
---|
971 | 970 | port_id = cxgb4_port_idx(ndev); |
---|
972 | 971 | csk->mtu = dst_mtu(dst); |
---|
973 | 972 | 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; |
---|
976 | 975 | step = cdev->lldi.ntxq / |
---|
977 | 976 | cdev->lldi.nports; |
---|
978 | 977 | csk->txq_idx = (port_id * step) + |
---|
.. | .. |
---|
1361 | 1360 | cxgbit_sock_reset_wr_list(csk); |
---|
1362 | 1361 | spin_lock_init(&csk->lock); |
---|
1363 | 1362 | init_waitqueue_head(&csk->waitq); |
---|
1364 | | - init_waitqueue_head(&csk->ack_waitq); |
---|
1365 | 1363 | csk->lock_owner = false; |
---|
1366 | 1364 | |
---|
1367 | 1365 | if (cxgbit_alloc_csk_skb(csk)) { |
---|
.. | .. |
---|
1486 | 1484 | return flowclen16; |
---|
1487 | 1485 | } |
---|
1488 | 1486 | |
---|
| 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 | + |
---|
1489 | 1507 | int cxgbit_setup_conn_digest(struct cxgbit_sock *csk) |
---|
1490 | 1508 | { |
---|
1491 | 1509 | struct sk_buff *skb; |
---|
.. | .. |
---|
1511 | 1529 | (dcrc ? ULP_CRC_DATA : 0)) << 4); |
---|
1512 | 1530 | set_wr_txq(skb, CPL_PRIORITY_CONTROL, csk->ctrlq_idx); |
---|
1513 | 1531 | |
---|
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; |
---|
1518 | 1534 | |
---|
1519 | 1535 | ret = cxgbit_wait_for_reply(csk->com.cdev, |
---|
1520 | 1536 | &csk->com.wr_wait, |
---|
.. | .. |
---|
1546 | 1562 | req->val = cpu_to_be64(pg_idx << 8); |
---|
1547 | 1563 | set_wr_txq(skb, CPL_PRIORITY_CONTROL, csk->ctrlq_idx); |
---|
1548 | 1564 | |
---|
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; |
---|
1553 | 1567 | |
---|
1554 | 1568 | ret = cxgbit_wait_for_reply(csk->com.cdev, |
---|
1555 | 1569 | &csk->com.wr_wait, |
---|
.. | .. |
---|
1872 | 1886 | if (csk->snd_una != snd_una) { |
---|
1873 | 1887 | csk->snd_una = snd_una; |
---|
1874 | 1888 | dst_confirm(csk->dst); |
---|
1875 | | - wake_up(&csk->ack_waitq); |
---|
1876 | 1889 | } |
---|
1877 | 1890 | } |
---|
1878 | 1891 | |
---|