]> Git Repo - J-linux.git/commitdiff
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
authorJakub Kicinski <[email protected]>
Thu, 9 Jun 2022 23:38:15 +0000 (16:38 -0700)
committerJakub Kicinski <[email protected]>
Thu, 9 Jun 2022 23:38:15 +0000 (16:38 -0700)
No conflicts.

Signed-off-by: Jakub Kicinski <[email protected]>
1  2 
drivers/net/ethernet/mediatek/mtk_eth_soc.c

index 9d7700984e9b506d4f9c5ec2011fda307bd6c9cf,59c9a10f83ba5c758c41d1ec007091ca987dad45..6beb3d4873a372df716d56d2037fd45561b8f6a7
@@@ -899,6 -899,17 +899,17 @@@ static bool mtk_rx_get_desc(struct mtk_
        return true;
  }
  
+ static void *mtk_max_lro_buf_alloc(gfp_t gfp_mask)
+ {
+       unsigned int size = mtk_max_frag_size(MTK_MAX_LRO_RX_LENGTH);
+       unsigned long data;
+       data = __get_free_pages(gfp_mask | __GFP_COMP | __GFP_NOWARN,
+                               get_order(size));
+       return (void *)data;
+ }
  /* the qdma core needs scratch memory to be setup */
  static int mtk_init_fq_dma(struct mtk_eth *eth)
  {
@@@ -1433,8 -1444,8 +1444,8 @@@ static int mtk_poll_rx(struct napi_stru
        int done = 0, bytes = 0;
  
        while (done < budget) {
 +              unsigned int pktlen, *rxdcsum;
                struct net_device *netdev;
 -              unsigned int pktlen;
                dma_addr_t dma_addr;
                u32 hash, reason;
                int mac = 0;
                        goto release_desc;
  
                /* alloc new buffer */
-               new_data = napi_alloc_frag(ring->frag_size);
+               if (ring->frag_size <= PAGE_SIZE)
+                       new_data = napi_alloc_frag(ring->frag_size);
+               else
+                       new_data = mtk_max_lro_buf_alloc(GFP_ATOMIC);
                if (unlikely(!new_data)) {
                        netdev->stats.rx_dropped++;
                        goto release_desc;
                pktlen = RX_DMA_GET_PLEN0(trxd.rxd2);
                skb->dev = netdev;
                skb_put(skb, pktlen);
 -              if (trxd.rxd4 & eth->soc->txrx.rx_dma_l4_valid)
 +
 +              if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
 +                      rxdcsum = &trxd.rxd3;
 +              else
 +                      rxdcsum = &trxd.rxd4;
 +
 +              if (*rxdcsum & eth->soc->txrx.rx_dma_l4_valid)
                        skb->ip_summed = CHECKSUM_UNNECESSARY;
                else
                        skb_checksum_none_assert(skb);
@@@ -1920,7 -1928,10 +1934,10 @@@ static int mtk_rx_alloc(struct mtk_eth 
                return -ENOMEM;
  
        for (i = 0; i < rx_dma_size; i++) {
-               ring->data[i] = netdev_alloc_frag(ring->frag_size);
+               if (ring->frag_size <= PAGE_SIZE)
+                       ring->data[i] = netdev_alloc_frag(ring->frag_size);
+               else
+                       ring->data[i] = mtk_max_lro_buf_alloc(GFP_KERNEL);
                if (!ring->data[i])
                        return -ENOMEM;
        }
@@@ -3750,7 -3761,6 +3767,7 @@@ static const struct mtk_soc_data mt7986
                .txd_size = sizeof(struct mtk_tx_dma_v2),
                .rxd_size = sizeof(struct mtk_rx_dma_v2),
                .rx_irq_done_mask = MTK_RX_DONE_INT_V2,
 +              .rx_dma_l4_valid = RX_DMA_L4_VALID_V2,
                .dma_max_len = MTK_TX_DMA_BUF_LEN_V2,
                .dma_len_offset = 8,
        },
This page took 0.09305 seconds and 4 git commands to generate.