ch_ktls: Update cheksum information

Checksum update was missing in the WR.

Fixes: 429765a149 ("chcr: handle partial end part of a record")
Signed-off-by: Rohit Maheshwari <rohitm@chelsio.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Rohit Maheshwari 2020-11-09 16:21:33 +05:30 committed by Jakub Kicinski
parent b1b5cb1803
commit 86716b51d1

View File

@ -959,6 +959,7 @@ chcr_ktls_write_tcp_options(struct chcr_ktls_info *tx_info, struct sk_buff *skb,
struct iphdr *ip; struct iphdr *ip;
int credits; int credits;
u8 buf[150]; u8 buf[150];
u64 cntrl1;
void *pos; void *pos;
iplen = skb_network_header_len(skb); iplen = skb_network_header_len(skb);
@ -997,22 +998,28 @@ chcr_ktls_write_tcp_options(struct chcr_ktls_info *tx_info, struct sk_buff *skb,
TXPKT_PF_V(tx_info->adap->pf)); TXPKT_PF_V(tx_info->adap->pf));
cpl->pack = 0; cpl->pack = 0;
cpl->len = htons(pktlen); cpl->len = htons(pktlen);
/* checksum offload */
cpl->ctrl1 = 0;
pos = cpl + 1;
memcpy(buf, skb->data, pktlen); memcpy(buf, skb->data, pktlen);
if (tx_info->ip_family == AF_INET) { if (tx_info->ip_family == AF_INET) {
/* we need to correct ip header len */ /* we need to correct ip header len */
ip = (struct iphdr *)(buf + maclen); ip = (struct iphdr *)(buf + maclen);
ip->tot_len = htons(pktlen - maclen); ip->tot_len = htons(pktlen - maclen);
cntrl1 = TXPKT_CSUM_TYPE_V(TX_CSUM_TCPIP);
#if IS_ENABLED(CONFIG_IPV6) #if IS_ENABLED(CONFIG_IPV6)
} else { } else {
ip6 = (struct ipv6hdr *)(buf + maclen); ip6 = (struct ipv6hdr *)(buf + maclen);
ip6->payload_len = htons(pktlen - maclen - iplen); ip6->payload_len = htons(pktlen - maclen - iplen);
cntrl1 = TXPKT_CSUM_TYPE_V(TX_CSUM_TCPIP6);
#endif #endif
} }
cntrl1 |= T6_TXPKT_ETHHDR_LEN_V(maclen - ETH_HLEN) |
TXPKT_IPHDR_LEN_V(iplen);
/* checksum offload */
cpl->ctrl1 = cpu_to_be64(cntrl1);
pos = cpl + 1;
/* now take care of the tcp header, if fin is not set then clear push /* now take care of the tcp header, if fin is not set then clear push
* bit as well, and if fin is set, it will be sent at the last so we * bit as well, and if fin is set, it will be sent at the last so we
* need to update the tcp sequence number as per the last packet. * need to update the tcp sequence number as per the last packet.