Index: linux-5.4.154/drivers/net/ethernet/mediatek/mtk_eth_soc.c
===================================================================
--- linux-5.4.154.orig/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ linux-5.4.154/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -1403,7 +1403,7 @@ static int mtk_poll_rx(struct napi_struc
 			goto release_desc;

 		/* alloc new buffer */
-		new_data = napi_alloc_frag(ring->frag_size);
+		new_data = kmalloc(ring->frag_size, GFP_ATOMIC);
 		if (unlikely(!new_data)) {
 			netdev->stats.rx_dropped++;
 			goto release_desc;
@@ -1414,7 +1414,7 @@ static int mtk_poll_rx(struct napi_struc
 					  ring->buf_size,
 					  DMA_FROM_DEVICE);
 		if (unlikely(dma_mapping_error(eth->dev, dma_addr))) {
-			skb_free_frag(new_data);
+			kfree(new_data);
 			netdev->stats.rx_dropped++;
 			goto release_desc;
 		}
@@ -1423,9 +1423,9 @@ static int mtk_poll_rx(struct napi_struc
 				 ring->buf_size, DMA_FROM_DEVICE);

 		/* receive data */
-		skb = build_skb(data, ring->frag_size);
+		skb = build_skb(data, 0);
 		if (unlikely(!skb)) {
-			skb_free_frag(data);
+			kfree(data);
 			netdev->stats.rx_dropped++;
 			goto skip_rx;
 		}
@@ -1866,7 +1866,7 @@ 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);
+		ring->data[i] = kmalloc(ring->frag_size, GFP_ATOMIC);
 		if (!ring->data[i])
 			return -ENOMEM;
 	}
@@ -1953,7 +1953,7 @@ static void mtk_rx_clean(struct mtk_eth
 					 ring->dma[i].rxd1,
 					 ring->buf_size,
 					 DMA_FROM_DEVICE);
-			skb_free_frag(ring->data[i]);
+			kfree(ring->data[i]);
 		}
 		kfree(ring->data);
 		ring->data = NULL;
