bnxt_en: Fix XDP RX path
[platform/kernel/linux-starfive.git] / drivers / net / ethernet / broadcom / bnxt / bnxt_xdp.c
index 1847f19..2ceeaa8 100644 (file)
@@ -222,7 +222,8 @@ void bnxt_xdp_buff_frags_free(struct bnxt_rx_ring_info *rxr,
  * false   - packet should be passed to the stack.
  */
 bool bnxt_rx_xdp(struct bnxt *bp, struct bnxt_rx_ring_info *rxr, u16 cons,
-                struct xdp_buff xdp, struct page *page, unsigned int *len, u8 *event)
+                struct xdp_buff xdp, struct page *page, u8 **data_ptr,
+                unsigned int *len, u8 *event)
 {
        struct bpf_prog *xdp_prog = READ_ONCE(rxr->xdp_prog);
        struct bnxt_tx_ring_info *txr;
@@ -255,8 +256,10 @@ bool bnxt_rx_xdp(struct bnxt *bp, struct bnxt_rx_ring_info *rxr, u16 cons,
                *event &= ~BNXT_RX_EVENT;
 
        *len = xdp.data_end - xdp.data;
-       if (orig_data != xdp.data)
+       if (orig_data != xdp.data) {
                offset = xdp.data - xdp.data_hard_start;
+               *data_ptr = xdp.data_hard_start + offset;
+       }
 
        switch (act) {
        case XDP_PASS: