net/ena: lock dynamic usages of admin queue
[dpdk.git] / drivers / net / ena / ena_ethdev.c
index c3fd3a4..97e3833 100644 (file)
@@ -141,22 +141,6 @@ static const struct ena_stats ena_stats_rx_strings[] = {
 #define        ENA_TX_OFFLOAD_NOTSUP_MASK      \
        (PKT_TX_OFFLOAD_MASK ^ ENA_TX_OFFLOAD_MASK)
 
-int ena_logtype_init;
-int ena_logtype_driver;
-
-#ifdef RTE_LIBRTE_ENA_DEBUG_RX
-int ena_logtype_rx;
-#endif
-#ifdef RTE_LIBRTE_ENA_DEBUG_TX
-int ena_logtype_tx;
-#endif
-#ifdef RTE_LIBRTE_ENA_DEBUG_TX_FREE
-int ena_logtype_tx_free;
-#endif
-#ifdef RTE_LIBRTE_ENA_COM_DEBUG
-int ena_logtype_com;
-#endif
-
 static const struct rte_pci_id pci_id_ena_map[] = {
        { RTE_PCI_DEVICE(PCI_VENDOR_ID_AMAZON, PCI_DEVICE_ID_ENA_VF) },
        { RTE_PCI_DEVICE(PCI_VENDOR_ID_AMAZON, PCI_DEVICE_ID_ENA_LLQ_VF) },
@@ -586,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;
@@ -615,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;
@@ -970,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;
@@ -1637,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);
        }
 }
@@ -1756,7 +1747,7 @@ static int eth_ena_dev_init(struct rte_eth_dev *eth_dev)
        int rc;
        static int adapters_found;
        bool disable_meta_caching;
-       bool wd_state;
+       bool wd_state = false;
 
        eth_dev->dev_ops = &ena_dev_ops;
        eth_dev->rx_pkt_burst = &eth_ena_recv_pkts;
@@ -1892,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);
@@ -2849,40 +2842,20 @@ RTE_PMD_REGISTER_PCI(net_ena, rte_ena_pmd);
 RTE_PMD_REGISTER_PCI_TABLE(net_ena, pci_id_ena_map);
 RTE_PMD_REGISTER_KMOD_DEP(net_ena, "* igb_uio | uio_pci_generic | vfio-pci");
 RTE_PMD_REGISTER_PARAM_STRING(net_ena, ENA_DEVARG_LARGE_LLQ_HDR "=<0|1>");
-
-RTE_INIT(ena_init_log)
-{
-       ena_logtype_init = rte_log_register("pmd.net.ena.init");
-       if (ena_logtype_init >= 0)
-               rte_log_set_level(ena_logtype_init, RTE_LOG_NOTICE);
-       ena_logtype_driver = rte_log_register("pmd.net.ena.driver");
-       if (ena_logtype_driver >= 0)
-               rte_log_set_level(ena_logtype_driver, RTE_LOG_NOTICE);
-
+RTE_LOG_REGISTER(ena_logtype_init, pmd.net.ena.init, NOTICE);
+RTE_LOG_REGISTER(ena_logtype_driver, pmd.net.ena.driver, NOTICE);
 #ifdef RTE_LIBRTE_ENA_DEBUG_RX
-       ena_logtype_rx = rte_log_register("pmd.net.ena.rx");
-       if (ena_logtype_rx >= 0)
-               rte_log_set_level(ena_logtype_rx, RTE_LOG_NOTICE);
+RTE_LOG_REGISTER(ena_logtype_rx, pmd.net.ena.rx, NOTICE);
 #endif
-
 #ifdef RTE_LIBRTE_ENA_DEBUG_TX
-       ena_logtype_tx = rte_log_register("pmd.net.ena.tx");
-       if (ena_logtype_tx >= 0)
-               rte_log_set_level(ena_logtype_tx, RTE_LOG_NOTICE);
+RTE_LOG_REGISTER(ena_logtype_tx, pmd.net.ena.tx, NOTICE);
 #endif
-
 #ifdef RTE_LIBRTE_ENA_DEBUG_TX_FREE
-       ena_logtype_tx_free = rte_log_register("pmd.net.ena.tx_free");
-       if (ena_logtype_tx_free >= 0)
-               rte_log_set_level(ena_logtype_tx_free, RTE_LOG_NOTICE);
+RTE_LOG_REGISTER(ena_logtype_tx_free, pmd.net.ena.tx_free, NOTICE);
 #endif
-
 #ifdef RTE_LIBRTE_ENA_COM_DEBUG
-       ena_logtype_com = rte_log_register("pmd.net.ena.com");
-       if (ena_logtype_com >= 0)
-               rte_log_set_level(ena_logtype_com, RTE_LOG_NOTICE);
+RTE_LOG_REGISTER(ena_logtype_com, pmd.net.ena.com, NOTICE);
 #endif
-}
 
 /******************************************************************************
  ******************************** AENQ Handlers *******************************
@@ -2903,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,