]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
cxgb4/chtls/cxgbit: Keeping the max ofld immediate data size same in cxgb4 and ulds
authorAyush Sawal <ayush.sawal@chelsio.com>
Mon, 15 Feb 2021 11:42:26 +0000 (17:12 +0530)
committerAndrea Righi <andrea.righi@canonical.com>
Mon, 15 Mar 2021 14:08:59 +0000 (15:08 +0100)
[ Upstream commit 2355a6773a2cb0d2dce13432dde78497f1d6617b ]

The Max imm data size in cxgb4 is not similar to the max imm data size
in the chtls. This caused an mismatch in output of is_ofld_imm() of
cxgb4 and chtls. So fixed this by keeping the max wreq size of imm data
same in both chtls and cxgb4 as MAX_IMM_OFLD_TX_DATA_WR_LEN.

As cxgb4's max imm. data value for ofld packets is changed to
MAX_IMM_OFLD_TX_DATA_WR_LEN. Using the same in cxgbit also.

Fixes: 36bedb3f2e5b8 ("crypto: chtls - Inline TLS record Tx")
Signed-off-by: Ayush Sawal <ayush.sawal@chelsio.com>
Acked-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Andrea Righi <andrea.righi@canonical.com>
drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h
drivers/net/ethernet/chelsio/cxgb4/sge.c
drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_cm.h
drivers/target/iscsi/cxgbit/cxgbit_target.c

index 1b49f2fa9b18525b5d79343c28d87e7f21d3c75f..34546f5312eee59f1453262aab41624d12f27992 100644 (file)
@@ -46,6 +46,9 @@
 #define MAX_ULD_QSETS 16
 #define MAX_ULD_NPORTS 4
 
+/* ulp_mem_io + ulptx_idata + payload + padding */
+#define MAX_IMM_ULPTX_WR_LEN (32 + 8 + 256 + 8)
+
 /* CPL message priority levels */
 enum {
        CPL_PRIORITY_DATA     = 0,  /* data messages */
index 196652a114c5fb7f581f2b67bbca5d4606a3b151..3334c9e2152ab054cd7581d2be16189fd9a5eb9e 100644 (file)
@@ -2842,17 +2842,22 @@ int t4_mgmt_tx(struct adapter *adap, struct sk_buff *skb)
  *     @skb: the packet
  *
  *     Returns true if a packet can be sent as an offload WR with immediate
- *     data.  We currently use the same limit as for Ethernet packets.
+ *     data.
+ *     FW_OFLD_TX_DATA_WR limits the payload to 255 bytes due to 8-bit field.
+ *      However, FW_ULPTX_WR commands have a 256 byte immediate only
+ *      payload limit.
  */
 static inline int is_ofld_imm(const struct sk_buff *skb)
 {
        struct work_request_hdr *req = (struct work_request_hdr *)skb->data;
        unsigned long opcode = FW_WR_OP_G(ntohl(req->wr_hi));
 
-       if (opcode == FW_CRYPTO_LOOKASIDE_WR)
+       if (unlikely(opcode == FW_ULPTX_WR))
+               return skb->len <= MAX_IMM_ULPTX_WR_LEN;
+       else if (opcode == FW_CRYPTO_LOOKASIDE_WR)
                return skb->len <= SGE_MAX_WR_LEN;
        else
-               return skb->len <= MAX_IMM_TX_PKT_LEN;
+               return skb->len <= MAX_IMM_OFLD_TX_DATA_WR_LEN;
 }
 
 /**
index 47ba81e42f5d048a89f961c5583b391819f3613a..b1161bdeda4dc7ef349f353be316a964a54330bd 100644 (file)
@@ -50,9 +50,6 @@
 #define MIN_RCV_WND (24 * 1024U)
 #define LOOPBACK(x)     (((x) & htonl(0xff000000)) == htonl(0x7f000000))
 
-/* ulp_mem_io + ulptx_idata + payload + padding */
-#define MAX_IMM_ULPTX_WR_LEN (32 + 8 + 256 + 8)
-
 /* for TX: a skb must have a headroom of at least TX_HEADER_LEN bytes */
 #define TX_HEADER_LEN \
        (sizeof(struct fw_ofld_tx_data_wr) + sizeof(struct sge_opaque_hdr))
index 9b3eb2e8c92ad9e4a5233f8b88caab5ef757b9d3..b926e1d6c7b8e540f2078bc491cd7e0fc6bfe457 100644 (file)
@@ -86,8 +86,7 @@ static int cxgbit_is_ofld_imm(const struct sk_buff *skb)
        if (likely(cxgbit_skcb_flags(skb) & SKCBF_TX_ISO))
                length += sizeof(struct cpl_tx_data_iso);
 
-#define MAX_IMM_TX_PKT_LEN     256
-       return length <= MAX_IMM_TX_PKT_LEN;
+       return length <= MAX_IMM_OFLD_TX_DATA_WR_LEN;
 }
 
 /*