@@ -4708,7 +4708,7 @@ void bnxt_set_ring_params(struct bnxt *bp)
47084708/* Changing allocation mode of RX rings.
47094709 * TODO: Update when extending xdp_rxq_info to support allocation modes.
47104710 */
4711- int bnxt_set_rx_skb_mode (struct bnxt * bp , bool page_mode )
4711+ static void __bnxt_set_rx_skb_mode (struct bnxt * bp , bool page_mode )
47124712{
47134713 struct net_device * dev = bp -> dev ;
47144714
@@ -4729,15 +4729,30 @@ int bnxt_set_rx_skb_mode(struct bnxt *bp, bool page_mode)
47294729 bp -> rx_skb_func = bnxt_rx_page_skb ;
47304730 }
47314731 bp -> rx_dir = DMA_BIDIRECTIONAL ;
4732- /* Disable LRO or GRO_HW */
4733- netdev_update_features (dev );
47344732 } else {
47354733 dev -> max_mtu = bp -> max_mtu ;
47364734 bp -> flags &= ~BNXT_FLAG_RX_PAGE_MODE ;
47374735 bp -> rx_dir = DMA_FROM_DEVICE ;
47384736 bp -> rx_skb_func = bnxt_rx_skb ;
47394737 }
4740- return 0 ;
4738+ }
4739+
4740+ void bnxt_set_rx_skb_mode (struct bnxt * bp , bool page_mode )
4741+ {
4742+ __bnxt_set_rx_skb_mode (bp , page_mode );
4743+
4744+ if (!page_mode ) {
4745+ int rx , tx ;
4746+
4747+ bnxt_get_max_rings (bp , & rx , & tx , true);
4748+ if (rx > 1 ) {
4749+ bp -> flags &= ~BNXT_FLAG_NO_AGG_RINGS ;
4750+ bp -> dev -> hw_features |= NETIF_F_LRO ;
4751+ }
4752+ }
4753+
4754+ /* Update LRO and GRO_HW availability */
4755+ netdev_update_features (bp -> dev );
47414756}
47424757
47434758static void bnxt_free_vnic_attributes (struct bnxt * bp )
@@ -16259,7 +16274,7 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
1625916274 if (bp -> max_fltr < BNXT_MAX_FLTR )
1626016275 bp -> max_fltr = BNXT_MAX_FLTR ;
1626116276 bnxt_init_l2_fltr_tbl (bp );
16262- bnxt_set_rx_skb_mode (bp , false);
16277+ __bnxt_set_rx_skb_mode (bp , false);
1626316278 bnxt_set_tpa_flags (bp );
1626416279 bnxt_set_ring_params (bp );
1626516280 bnxt_rdma_aux_device_init (bp );
0 commit comments