net/ena: lock dynamic usages of admin queue
[dpdk.git] / drivers / net / ena / ena_ethdev.c
index da8c8ad..97e3833 100644 (file)
@@ -570,7 +570,9 @@ static int ena_rss_reta_update(struct rte_eth_dev *dev,
                }
        }
 
+       rte_spinlock_lock(&adapter->admin_lock);
        rc = ena_com_indirect_table_set(ena_dev);
+       rte_spinlock_unlock(&adapter->admin_lock);
        if (unlikely(rc && rc != ENA_COM_UNSUPPORTED)) {
                PMD_DRV_LOG(ERR, "Cannot flush the indirect table\n");
                return rc;
@@ -599,7 +601,9 @@ static int ena_rss_reta_query(struct rte_eth_dev *dev,
            (reta_size > RTE_RETA_GROUP_SIZE && ((reta_conf + 1) == NULL)))
                return -EINVAL;
 
+       rte_spinlock_lock(&adapter->admin_lock);
        rc = ena_com_indirect_table_get(ena_dev, indirect_table);
+       rte_spinlock_unlock(&adapter->admin_lock);
        if (unlikely(rc && rc != ENA_COM_UNSUPPORTED)) {
                PMD_DRV_LOG(ERR, "cannot get indirect table\n");
                return -ENOTSUP;
@@ -954,7 +958,10 @@ static int ena_stats_get(struct rte_eth_dev *dev,
                return -ENOTSUP;
 
        memset(&ena_stats, 0, sizeof(ena_stats));
+
+       rte_spinlock_lock(&adapter->admin_lock);
        rc = ena_com_get_dev_basic_stats(ena_dev, &ena_stats);
+       rte_spinlock_unlock(&adapter->admin_lock);
        if (unlikely(rc)) {
                PMD_DRV_LOG(ERR, "Could not retrieve statistics from ENA\n");
                return rc;
@@ -1621,7 +1628,7 @@ static void ena_timer_wd_callback(__rte_unused struct rte_timer *timer,
 
        if (unlikely(adapter->trigger_reset)) {
                PMD_DRV_LOG(ERR, "Trigger reset is on\n");
-               _rte_eth_dev_callback_process(dev, RTE_ETH_EVENT_INTR_RESET,
+               rte_eth_dev_callback_process(dev, RTE_ETH_EVENT_INTR_RESET,
                        NULL);
        }
 }
@@ -1876,6 +1883,8 @@ static int eth_ena_dev_init(struct rte_eth_dev *eth_dev)
                goto err_delete_debug_area;
        }
 
+       rte_spinlock_init(&adapter->admin_lock);
+
        rte_intr_callback_register(intr_handle,
                                   ena_interrupt_handler_rte,
                                   adapter);
@@ -2867,7 +2876,7 @@ static void ena_update_on_link_change(void *adapter_data,
        adapter->link_status = status;
 
        ena_link_update(eth_dev, 0);
-       _rte_eth_dev_callback_process(eth_dev, RTE_ETH_EVENT_INTR_LSC, NULL);
+       rte_eth_dev_callback_process(eth_dev, RTE_ETH_EVENT_INTR_LSC, NULL);
 }
 
 static void ena_notification(void *data,