sa->dp_rx->get_dev_info(dev_info);
        if (sa->dp_tx->get_dev_info != NULL)
                sa->dp_tx->get_dev_info(dev_info);
+
+       dev_info->dev_capa = RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP;
 }
 
 static const uint32_t *
        if (sa->state != SFC_ADAPTER_STARTED)
                goto fail_not_started;
 
+       if (sa->rxq_info[rx_queue_id].rxq == NULL)
+               goto fail_not_setup;
+
        rc = sfc_rx_qstart(sa, rx_queue_id);
        if (rc != 0)
                goto fail_rx_qstart;
        return 0;
 
 fail_rx_qstart:
+fail_not_setup:
 fail_not_started:
        sfc_adapter_unlock(sa);
        SFC_ASSERT(rc > 0);
 
 
        rxq_info = &sa->rxq_info[sw_index];
        rxq = rxq_info->rxq;
+       SFC_ASSERT(rxq != NULL);
        SFC_ASSERT(rxq->state == SFC_RXQ_INITIALIZED);
 
        evq = rxq->evq;
        rxq_info = &sa->rxq_info[sw_index];
        rxq = rxq_info->rxq;
 
-       if (rxq->state == SFC_RXQ_INITIALIZED)
+       if (rxq == NULL || rxq->state == SFC_RXQ_INITIALIZED)
                return;
        SFC_ASSERT(rxq->state & SFC_RXQ_STARTED);
 
                goto fail_rss_config;
 
        for (sw_index = 0; sw_index < sa->rxq_count; ++sw_index) {
-               if ((!sa->rxq_info[sw_index].deferred_start ||
+               if (sa->rxq_info[sw_index].rxq != NULL &&
+                   (!sa->rxq_info[sw_index].deferred_start ||
                     sa->rxq_info[sw_index].deferred_started)) {
                        rc = sfc_rx_qstart(sa, sw_index);
                        if (rc != 0)