rx = &priv->rx[qid];
        rx->xsk_pool = NULL;
-       if (xdp_rxq_info_is_reg(&rx->xsk_rxq))
-               xdp_rxq_info_unreg(&rx->xsk_rxq);
+       if (xdp_rxq_info_is_reg(&rx->xdp_rxq))
+               xdp_rxq_info_unreg_mem_model(&rx->xdp_rxq);
 
        if (!priv->tx)
                return;
 static int gve_reg_xsk_pool(struct gve_priv *priv, struct net_device *dev,
                            struct xsk_buff_pool *pool, u16 qid)
 {
-       struct napi_struct *napi;
        struct gve_rx_ring *rx;
        u16 tx_qid;
        int err;
 
        rx = &priv->rx[qid];
-       napi = &priv->ntfy_blocks[rx->ntfy_id].napi;
-       err = xdp_rxq_info_reg(&rx->xsk_rxq, dev, qid, napi->napi_id);
-       if (err)
-               return err;
-
-       err = xdp_rxq_info_reg_mem_model(&rx->xsk_rxq,
+       err = xdp_rxq_info_reg_mem_model(&rx->xdp_rxq,
                                         MEM_TYPE_XSK_BUFF_POOL, pool);
        if (err) {
                gve_unreg_xsk_pool(priv, qid);
                return 0;
 
        for (i = 0; i < priv->rx_cfg.num_queues; i++) {
+               struct xsk_buff_pool *xsk_pool;
+
                rx = &priv->rx[i];
                napi = &priv->ntfy_blocks[rx->ntfy_id].napi;
 
                                       napi->napi_id);
                if (err)
                        goto err;
-               if (gve_is_qpl(priv))
+
+               xsk_pool = xsk_get_pool_from_qid(dev, i);
+               if (xsk_pool)
+                       err = gve_reg_xsk_pool(priv, dev, xsk_pool, i);
+               else if (gve_is_qpl(priv))
                        err = xdp_rxq_info_reg_mem_model(&rx->xdp_rxq,
                                                         MEM_TYPE_PAGE_SHARED,
                                                         NULL);
                                                         rx->dqo.page_pool);
                if (err)
                        goto err;
-               rx->xsk_pool = xsk_get_pool_from_qid(dev, i);
-               if (!rx->xsk_pool)
-                       continue;
-
-               err = gve_reg_xsk_pool(priv, dev, rx->xsk_pool, i);
-               if (err)
-                       goto err;
        }
        return 0;