if (ixgbe_init_rss_key(adapter))
                return -ENOMEM;
 
+       adapter->af_xdp_zc_qps = bitmap_zalloc(MAX_XDP_QUEUES, GFP_KERNEL);
+       if (!adapter->af_xdp_zc_qps)
+               return -ENOMEM;
+
        /* Set MAC specific capability flags and exceptions */
        switch (hw->mac.type) {
        case ixgbe_mac_82598EB:
        kfree(adapter->jump_tables[0]);
        kfree(adapter->mac_table);
        kfree(adapter->rss_key);
+       bitmap_free(adapter->af_xdp_zc_qps);
 err_ioremap:
        disable_dev = !test_and_set_bit(__IXGBE_DISABLED, &adapter->state);
        free_netdev(netdev);
 
        kfree(adapter->mac_table);
        kfree(adapter->rss_key);
+       bitmap_free(adapter->af_xdp_zc_qps);
        disable_dev = !test_and_set_bit(__IXGBE_DISABLED, &adapter->state);
        free_netdev(netdev);
 
 
        int qid = ring->ring_idx;
 
        if (!adapter->xsk_umems || !adapter->xsk_umems[qid] ||
-           qid >= adapter->num_xsk_umems || !xdp_on)
+           qid >= adapter->num_xsk_umems || !xdp_on ||
+           !test_bit(qid, adapter->af_xdp_zc_qps))
                return NULL;
 
        return adapter->xsk_umems[qid];
        if (if_running)
                ixgbe_txrx_ring_disable(adapter, qid);
 
+       set_bit(qid, adapter->af_xdp_zc_qps);
        err = ixgbe_add_xsk_umem(adapter, umem, qid);
        if (err)
                return err;
        if (if_running)
                ixgbe_txrx_ring_disable(adapter, qid);
 
+       clear_bit(qid, adapter->af_xdp_zc_qps);
        ixgbe_xsk_umem_dma_unmap(adapter, adapter->xsk_umems[qid]);
        ixgbe_remove_xsk_umem(adapter, qid);