if (rxr->xdp_prog)
                        bpf_prog_put(rxr->xdp_prog);
 
+               if (xdp_rxq_info_is_reg(&rxr->xdp_rxq))
+                       xdp_rxq_info_unreg(&rxr->xdp_rxq);
+
                kfree(rxr->rx_tpa);
                rxr->rx_tpa = NULL;
 
 
                ring = &rxr->rx_ring_struct;
 
+               rc = xdp_rxq_info_reg(&rxr->xdp_rxq, bp->dev, i);
+               if (rc < 0)
+                       return rc;
+
                rc = bnxt_alloc_ring(bp, ring);
                if (rc)
                        return rc;
        bp->cp_ring_mask = bp->cp_bit - 1;
 }
 
+/* Changing allocation mode of RX rings.
+ * TODO: Update when extending xdp_rxq_info to support allocation modes.
+ */
 int bnxt_set_rx_skb_mode(struct bnxt *bp, bool page_mode)
 {
        if (page_mode) {
 
 #include <net/devlink.h>
 #include <net/dst_metadata.h>
 #include <net/switchdev.h>
+#include <net/xdp.h>
 
 struct tx_bd {
        __le32 tx_bd_len_flags_type;
 
        struct bnxt_ring_struct rx_ring_struct;
        struct bnxt_ring_struct rx_agg_ring_struct;
+       struct xdp_rxq_info     xdp_rxq;
 };
 
 struct bnxt_cp_ring_info {