@@ -130,7 +130,6 @@ struct sfc_port {
unsigned int nb_mcast_addrs;
uint8_t *mcast_addrs;
- rte_spinlock_t mac_stats_lock;
uint64_t *mac_stats_buf;
unsigned int mac_stats_nb_supported;
efsys_mem_t mac_stats_dma_mem;
@@ -613,7 +613,7 @@ sfc_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
uint64_t *mac_stats;
int ret;
- rte_spinlock_lock(&port->mac_stats_lock);
+ sfc_adapter_lock(sa);
ret = sfc_port_update_mac_stats(sa);
if (ret != 0)
@@ -686,7 +686,7 @@ sfc_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
}
unlock:
- rte_spinlock_unlock(&port->mac_stats_lock);
+ sfc_adapter_unlock(sa);
SFC_ASSERT(ret >= 0);
return -ret;
}
@@ -698,12 +698,15 @@ sfc_stats_reset(struct rte_eth_dev *dev)
struct sfc_port *port = &sa->port;
int rc;
+ sfc_adapter_lock(sa);
+
if (sa->state != SFC_ADAPTER_STARTED) {
/*
* The operation cannot be done if port is not started; it
* will be scheduled to be done during the next port start
*/
port->mac_stats_reset_pending = B_TRUE;
+ sfc_adapter_unlock(sa);
return 0;
}
@@ -711,6 +714,8 @@ sfc_stats_reset(struct rte_eth_dev *dev)
if (rc != 0)
sfc_err(sa, "failed to reset statistics (rc = %d)", rc);
+ sfc_adapter_unlock(sa);
+
SFC_ASSERT(rc >= 0);
return -rc;
}
@@ -726,7 +731,7 @@ sfc_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
unsigned int i;
int nstats = 0;
- rte_spinlock_lock(&port->mac_stats_lock);
+ sfc_adapter_lock(sa);
rc = sfc_port_update_mac_stats(sa);
if (rc != 0) {
@@ -748,7 +753,7 @@ sfc_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
}
unlock:
- rte_spinlock_unlock(&port->mac_stats_lock);
+ sfc_adapter_unlock(sa);
return nstats;
}
@@ -789,7 +794,7 @@ sfc_xstats_get_by_id(struct rte_eth_dev *dev, const uint64_t *ids,
int ret;
int rc;
- rte_spinlock_lock(&port->mac_stats_lock);
+ sfc_adapter_lock(sa);
if (unlikely(values == NULL) ||
unlikely(ids == NULL && n < port->mac_stats_nb_supported)) {
@@ -819,7 +824,7 @@ sfc_xstats_get_by_id(struct rte_eth_dev *dev, const uint64_t *ids,
ret = nb_written;
unlock:
- rte_spinlock_unlock(&port->mac_stats_lock);
+ sfc_adapter_unlock(sa);
return ret;
}
@@ -835,9 +840,14 @@ sfc_xstats_get_names_by_id(struct rte_eth_dev *dev,
unsigned int nb_written = 0;
unsigned int i;
+ sfc_adapter_lock(sa);
+
if (unlikely(xstats_names == NULL) ||
- unlikely((ids == NULL) && (size < port->mac_stats_nb_supported)))
- return port->mac_stats_nb_supported;
+ unlikely((ids == NULL) && (size < port->mac_stats_nb_supported))) {
+ nb_supported = port->mac_stats_nb_supported;
+ sfc_adapter_unlock(sa);
+ return nb_supported;
+ }
for (i = 0; (i < EFX_MAC_NSTATS) && (nb_written < size); ++i) {
if (!EFX_MAC_STAT_SUPPORTED(port->mac_stats_mask, i))
@@ -853,6 +863,8 @@ sfc_xstats_get_names_by_id(struct rte_eth_dev *dev,
++nb_supported;
}
+ sfc_adapter_unlock(sa);
+
return nb_written;
}
@@ -43,7 +43,7 @@ sfc_port_update_mac_stats(struct sfc_adapter *sa)
unsigned int nb_attempts = 0;
int rc;
- SFC_ASSERT(rte_spinlock_is_locked(&port->mac_stats_lock));
+ SFC_ASSERT(sfc_adapter_is_locked(sa));
if (sa->state != SFC_ADAPTER_STARTED)
return EINVAL;
@@ -103,14 +103,13 @@ sfc_port_reset_sw_stats(struct sfc_adapter *sa)
int
sfc_port_reset_mac_stats(struct sfc_adapter *sa)
{
- struct sfc_port *port = &sa->port;
int rc;
- rte_spinlock_lock(&port->mac_stats_lock);
+ SFC_ASSERT(sfc_adapter_is_locked(sa));
+
rc = efx_mac_stats_clear(sa->nic);
if (rc == 0)
sfc_port_reset_sw_stats(sa);
- rte_spinlock_unlock(&port->mac_stats_lock);
return rc;
}
@@ -416,8 +415,6 @@ sfc_port_attach(struct sfc_adapter *sa)
goto fail_mcast_addr_list_buf_alloc;
}
- rte_spinlock_init(&port->mac_stats_lock);
-
rc = ENOMEM;
port->mac_stats_buf = rte_calloc_socket("mac_stats_buf", EFX_MAC_NSTATS,
sizeof(uint64_t), 0,