return xdp_act;
 }
 
-static struct sk_buff *dpaa2_eth_copybreak(struct dpaa2_eth_channel *ch,
-                                          const struct dpaa2_fd *fd,
-                                          void *fd_vaddr)
+struct sk_buff *dpaa2_eth_alloc_skb(struct dpaa2_eth_priv *priv,
+                                   struct dpaa2_eth_channel *ch,
+                                   const struct dpaa2_fd *fd, u32 fd_length,
+                                   void *fd_vaddr)
 {
        u16 fd_offset = dpaa2_fd_get_offset(fd);
-       struct dpaa2_eth_priv *priv = ch->priv;
-       u32 fd_length = dpaa2_fd_get_len(fd);
        struct sk_buff *skb = NULL;
        unsigned int skb_len;
 
-       if (fd_length > priv->rx_copybreak)
-               return NULL;
-
        skb_len = fd_length + dpaa2_eth_needed_headroom(NULL);
 
        skb = napi_alloc_skb(&ch->napi, skb_len);
        return skb;
 }
 
+static struct sk_buff *dpaa2_eth_copybreak(struct dpaa2_eth_channel *ch,
+                                          const struct dpaa2_fd *fd,
+                                          void *fd_vaddr)
+{
+       struct dpaa2_eth_priv *priv = ch->priv;
+       u32 fd_length = dpaa2_fd_get_len(fd);
+
+       if (fd_length > priv->rx_copybreak)
+               return NULL;
+
+       return dpaa2_eth_alloc_skb(priv, ch, fd, fd_length, fd_vaddr);
+}
+
 /* Main Rx frame processing routine */
 static void dpaa2_eth_rx(struct dpaa2_eth_priv *priv,
                         struct dpaa2_eth_channel *ch,
 
 
 struct dpaa2_eth_bp *dpaa2_eth_allocate_dpbp(struct dpaa2_eth_priv *priv);
 void dpaa2_eth_free_dpbp(struct dpaa2_eth_priv *priv, struct dpaa2_eth_bp *bp);
+
+struct sk_buff *dpaa2_eth_alloc_skb(struct dpaa2_eth_priv *priv,
+                                   struct dpaa2_eth_channel *ch,
+                                   const struct dpaa2_fd *fd, u32 fd_length,
+                                   void *fd_vaddr);
 #endif /* __DPAA2_H */