]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: fec: improve fec_enet_rx_queue()
authorWei Fang <wei.fang@nxp.com>
Thu, 5 Feb 2026 08:57:32 +0000 (16:57 +0800)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 10 Feb 2026 09:58:19 +0000 (10:58 +0100)
This patch has made the following adjustments to fec_enet_rx_queue().

1. The function parameters are modified to maintain the same style as
subsequently added XDP-related interfaces.

2. Some variables are initialized at the time of declaration, and the
order of local variables is updated to follow the reverse xmas tree
style.

3. Replace variable cbd_bufaddr with dma.

Signed-off-by: Wei Fang <wei.fang@nxp.com>
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Link: https://patch.msgid.link/20260205085742.2685134-6-wei.fang@nxp.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/ethernet/freescale/fec_main.c

index 851608d04084455bebdb7980f0e1e431e5ee1926..7bc2eac01e6e6d2fb9671c270683390643108b8f 100644 (file)
@@ -1840,26 +1840,25 @@ static struct sk_buff *fec_build_skb(struct fec_enet_private *fep,
  * not been given to the system, we just set the empty indicator,
  * effectively tossing the packet.
  */
-static int
-fec_enet_rx_queue(struct net_device *ndev, u16 queue_id, int budget)
+static int fec_enet_rx_queue(struct fec_enet_private *fep,
+                            u16 queue, int budget)
 {
-       struct fec_enet_private *fep = netdev_priv(ndev);
-       struct fec_enet_priv_rx_q *rxq;
-       struct bufdesc *bdp;
-       unsigned short status;
-       struct  sk_buff *skb;
-       ushort  pkt_len;
-       int     pkt_received = 0;
-       int     index = 0;
-       bool    need_swap = fep->quirks & FEC_QUIRK_SWAP_FRAME;
        u32 data_start = FEC_ENET_XDP_HEADROOM + fep->rx_shift;
+       struct fec_enet_priv_rx_q *rxq = fep->rx_queue[queue];
        struct bpf_prog *xdp_prog = READ_ONCE(fep->xdp_prog);
+       bool need_swap = fep->quirks & FEC_QUIRK_SWAP_FRAME;
        u32 ret, xdp_result = FEC_ENET_XDP_PASS;
+       struct net_device *ndev = fep->netdev;
+       struct bufdesc *bdp = rxq->bd.cur;
        u32 sub_len = 4 + fep->rx_shift;
        int cpu = smp_processor_id();
+       int pkt_received = 0;
+       u16 status, pkt_len;
+       struct sk_buff *skb;
        struct xdp_buff xdp;
        struct page *page;
-       __fec32 cbd_bufaddr;
+       dma_addr_t dma;
+       int index;
 
 #if defined(CONFIG_COLDFIRE) && !defined(CONFIG_COLDFIRE_COHERENT_DMA)
        /*
@@ -1868,12 +1867,10 @@ fec_enet_rx_queue(struct net_device *ndev, u16 queue_id, int budget)
         */
        flush_cache_all();
 #endif
-       rxq = fep->rx_queue[queue_id];
 
        /* First, grab all of the stats for the incoming packet.
         * These get messed up if we get called due to a busy condition.
         */
-       bdp = rxq->bd.cur;
        xdp_init_buff(&xdp, PAGE_SIZE << fep->pagepool_order, &rxq->xdp_rxq);
 
        while (!((status = fec16_to_cpu(bdp->cbd_sc)) & BD_ENET_RX_EMPTY)) {
@@ -1882,7 +1879,7 @@ fec_enet_rx_queue(struct net_device *ndev, u16 queue_id, int budget)
                        break;
                pkt_received++;
 
-               writel(FEC_ENET_RXF_GET(queue_id), fep->hwp + FEC_IEVENT);
+               writel(FEC_ENET_RXF_GET(queue), fep->hwp + FEC_IEVENT);
 
                /* Check for errors. */
                status ^= BD_ENET_RX_LAST;
@@ -1896,15 +1893,13 @@ fec_enet_rx_queue(struct net_device *ndev, u16 queue_id, int budget)
 
                index = fec_enet_get_bd_index(bdp, &rxq->bd);
                page = rxq->rx_buf[index];
-               cbd_bufaddr = bdp->cbd_bufaddr;
+               dma = fec32_to_cpu(bdp->cbd_bufaddr);
                if (fec_enet_update_cbd(rxq, bdp, index)) {
                        ndev->stats.rx_dropped++;
                        goto rx_processing_done;
                }
 
-               dma_sync_single_for_cpu(&fep->pdev->dev,
-                                       fec32_to_cpu(cbd_bufaddr),
-                                       pkt_len,
+               dma_sync_single_for_cpu(&fep->pdev->dev, dma, pkt_len,
                                        DMA_FROM_DEVICE);
                prefetch(page_address(page));
 
@@ -1980,7 +1975,7 @@ static int fec_enet_rx(struct net_device *ndev, int budget)
 
        /* Make sure that AVB queues are processed first. */
        for (i = fep->num_rx_queues - 1; i >= 0; i--)
-               done += fec_enet_rx_queue(ndev, i, budget - done);
+               done += fec_enet_rx_queue(fep, i, budget - done);
 
        return done;
 }