]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: fec: fec_enet_rx_queue(): factor out VLAN handling into separate function fec_en...
authorMarc Kleine-Budde <mkl@pengutronix.de>
Wed, 18 Jun 2025 12:00:11 +0000 (14:00 +0200)
committerJakub Kicinski <kuba@kernel.org>
Thu, 19 Jun 2025 22:27:54 +0000 (15:27 -0700)
In order to clean up of the VLAN handling, factor out the VLAN
handling into separate function fec_enet_rx_vlan().

Reviewed-by: Frank Li <Frank.Li@nxp.com>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Link: https://patch.msgid.link/20250618-fec-cleanups-v4-11-c16f9a1af124@pengutronix.de
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/freescale/fec_main.c

index 6797aa1ed639f31f42d47d8dc9f41cb52b3e5f7b..63dac42720453a8b8a847bdd1eec76ac072030bf 100644 (file)
@@ -1706,6 +1706,22 @@ xdp_err:
        return ret;
 }
 
+static void fec_enet_rx_vlan(const struct net_device *ndev, struct sk_buff *skb)
+{
+       if (ndev->features & NETIF_F_HW_VLAN_CTAG_RX) {
+               const struct vlan_ethhdr *vlan_header = skb_vlan_eth_hdr(skb);
+               const u16 vlan_tag = ntohs(vlan_header->h_vlan_TCI);
+
+               /* Push and remove the vlan tag */
+
+               memmove(skb->data + VLAN_HLEN, skb->data, ETH_ALEN * 2);
+               skb_pull(skb, VLAN_HLEN);
+               __vlan_hwaccel_put_tag(skb,
+                                      htons(ETH_P_8021Q),
+                                      vlan_tag);
+       }
+}
+
 /* During a receive, the bd_rx.cur points to the current incoming buffer.
  * When we update through the ring, if the next incoming buffer has
  * not been given to the system, we just set the empty indicator,
@@ -1852,19 +1868,9 @@ fec_enet_rx_queue(struct net_device *ndev, u16 queue_id, int budget)
                        ebdp = (struct bufdesc_ex *)bdp;
 
                /* If this is a VLAN packet remove the VLAN Tag */
-               if ((ndev->features & NETIF_F_HW_VLAN_CTAG_RX) &&
-                   fep->bufdesc_ex &&
-                   (ebdp->cbd_esc & cpu_to_fec32(BD_ENET_RX_VLAN))) {
-                       /* Push and remove the vlan tag */
-                       struct vlan_ethhdr *vlan_header = skb_vlan_eth_hdr(skb);
-                       u16 vlan_tag = ntohs(vlan_header->h_vlan_TCI);
-
-                       memmove(skb->data + VLAN_HLEN, skb->data, ETH_ALEN * 2);
-                       skb_pull(skb, VLAN_HLEN);
-                       __vlan_hwaccel_put_tag(skb,
-                                              htons(ETH_P_8021Q),
-                                              vlan_tag);
-               }
+               if (fep->bufdesc_ex &&
+                   (ebdp->cbd_esc & cpu_to_fec32(BD_ENET_RX_VLAN)))
+                       fec_enet_rx_vlan(ndev, skb);
 
                skb->protocol = eth_type_trans(skb, ndev);