@@ -587,12 +587,21 @@ static netdev_tx_t bnxt_start_xmit(struct sk_buff *skb, struct net_device *dev)
587
587
588
588
txbd1 -> tx_bd_hsize_lflags = lflags ;
589
589
if (skb_is_gso (skb )) {
590
+ bool udp_gso = !!(skb_shinfo (skb )-> gso_type & SKB_GSO_UDP_L4 );
590
591
u32 hdr_len ;
591
592
592
- if (skb -> encapsulation )
593
- hdr_len = skb_inner_tcp_all_headers (skb );
594
- else
593
+ if (skb -> encapsulation ) {
594
+ if (udp_gso )
595
+ hdr_len = skb_inner_transport_offset (skb ) +
596
+ sizeof (struct udphdr );
597
+ else
598
+ hdr_len = skb_inner_tcp_all_headers (skb );
599
+ } else if (udp_gso ) {
600
+ hdr_len = skb_transport_offset (skb ) +
601
+ sizeof (struct udphdr );
602
+ } else {
595
603
hdr_len = skb_tcp_all_headers (skb );
604
+ }
596
605
597
606
txbd1 -> tx_bd_hsize_lflags |= cpu_to_le32 (TX_BD_FLAGS_LSO |
598
607
TX_BD_FLAGS_T_IPID |
@@ -8345,6 +8354,8 @@ static int __bnxt_hwrm_func_qcaps(struct bnxt *bp)
8345
8354
flags_ext2 = le32_to_cpu (resp -> flags_ext2 );
8346
8355
if (flags_ext2 & FUNC_QCAPS_RESP_FLAGS_EXT2_RX_ALL_PKTS_TIMESTAMPS_SUPPORTED )
8347
8356
bp -> fw_cap |= BNXT_FW_CAP_RX_ALL_PKT_TS ;
8357
+ if (flags_ext2 & FUNC_QCAPS_RESP_FLAGS_EXT2_UDP_GSO_SUPPORTED )
8358
+ bp -> flags |= BNXT_FLAG_UDP_GSO_CAP ;
8348
8359
8349
8360
bp -> tx_push_thresh = 0 ;
8350
8361
if ((flags & FUNC_QCAPS_RESP_FLAGS_PUSH_MODE_SUPPORTED ) &&
@@ -14351,6 +14362,8 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
14351
14362
NETIF_F_GSO_UDP_TUNNEL_CSUM | NETIF_F_GSO_GRE_CSUM |
14352
14363
NETIF_F_GSO_PARTIAL | NETIF_F_RXHASH |
14353
14364
NETIF_F_RXCSUM | NETIF_F_GRO ;
14365
+ if (bp -> flags & BNXT_FLAG_UDP_GSO_CAP )
14366
+ dev -> hw_features |= NETIF_F_GSO_UDP_L4 ;
14354
14367
14355
14368
if (BNXT_SUPPORTS_TPA (bp ))
14356
14369
dev -> hw_features |= NETIF_F_LRO ;
@@ -14361,6 +14374,8 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
14361
14374
NETIF_F_GSO_UDP_TUNNEL | NETIF_F_GSO_GRE |
14362
14375
NETIF_F_GSO_UDP_TUNNEL_CSUM | NETIF_F_GSO_GRE_CSUM |
14363
14376
NETIF_F_GSO_IPXIP4 | NETIF_F_GSO_PARTIAL ;
14377
+ if (bp -> flags & BNXT_FLAG_UDP_GSO_CAP )
14378
+ dev -> hw_enc_features |= NETIF_F_GSO_UDP_L4 ;
14364
14379
if (bp -> flags & BNXT_FLAG_CHIP_P7 )
14365
14380
dev -> udp_tunnel_nic_info = & bnxt_udp_tunnels_p7 ;
14366
14381
else
0 commit comments