Convert dma_pool::inuse and hinic_os_dep::dma_alloc_cnt to RTE_ATOMIC(uint32_t) and replace rte_atomic32_*() with the rte_atomic_*_explicit() equivalents. The matching local variable and log format change from int/%d to uint32_t/%u.
Signed-off-by: Stephen Hemminger <[email protected]> --- drivers/net/hinic/base/hinic_compat.h | 2 +- drivers/net/hinic/base/hinic_pmd_hwdev.c | 24 ++++++++++++++---------- drivers/net/hinic/base/hinic_pmd_hwdev.h | 4 ++-- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/drivers/net/hinic/base/hinic_compat.h b/drivers/net/hinic/base/hinic_compat.h index d3994c50e9..b0e42fa9bc 100644 --- a/drivers/net/hinic/base/hinic_compat.h +++ b/drivers/net/hinic/base/hinic_compat.h @@ -15,7 +15,7 @@ #include <rte_memzone.h> #include <rte_memcpy.h> #include <rte_malloc.h> -#include <rte_atomic.h> +#include <rte_stdatomic.h> #include <rte_spinlock.h> #include <rte_cycles.h> #include <rte_log.h> diff --git a/drivers/net/hinic/base/hinic_pmd_hwdev.c b/drivers/net/hinic/base/hinic_pmd_hwdev.c index 818698dcb3..9a1b126632 100644 --- a/drivers/net/hinic/base/hinic_pmd_hwdev.c +++ b/drivers/net/hinic/base/hinic_pmd_hwdev.c @@ -116,7 +116,8 @@ static void *hinic_dma_mem_zalloc(struct hinic_hwdev *hwdev, size_t size, dma_addr_t *dma_handle, unsigned int align, unsigned int socket_id) { - int rc, alloc_cnt; + int rc; + uint32_t alloc_cnt; const struct rte_memzone *mz; char z_name[RTE_MEMZONE_NAMESIZE]; hash_sig_t sig; @@ -125,8 +126,9 @@ static void *hinic_dma_mem_zalloc(struct hinic_hwdev *hwdev, size_t size, if (dma_handle == NULL || 0 == size) return NULL; - alloc_cnt = rte_atomic32_add_return(&hwdev->os_dep.dma_alloc_cnt, 1); - snprintf(z_name, sizeof(z_name), "%s_%d", + alloc_cnt = rte_atomic_fetch_add_explicit(&hwdev->os_dep.dma_alloc_cnt, + 1, rte_memory_order_relaxed); + snprintf(z_name, sizeof(z_name), "%s_%u", hwdev->pcidev_hdl->name, alloc_cnt); mz = rte_memzone_reserve_aligned(z_name, size, socket_id, @@ -282,7 +284,6 @@ struct dma_pool *dma_pool_create(const char *name, void *dev, if (!pool) return NULL; - rte_atomic32_set(&pool->inuse, 0); pool->elem_size = size; pool->align = align; pool->boundary = boundary; @@ -294,12 +295,15 @@ struct dma_pool *dma_pool_create(const char *name, void *dev, void dma_pool_destroy(struct dma_pool *pool) { + uint32_t inuse; + if (!pool) return; - if (rte_atomic32_read(&pool->inuse) != 0) { - PMD_DRV_LOG(ERR, "Leak memory, dma_pool: %s, inuse_count: %d", - pool->name, rte_atomic32_read(&pool->inuse)); + inuse = rte_atomic_load_explicit(&pool->inuse, rte_memory_order_relaxed); + if (inuse != 0) { + PMD_DRV_LOG(ERR, "Leak memory, dma_pool: %s, inuse_count: %u", + pool->name, inuse); } rte_free(pool); @@ -312,14 +316,14 @@ void *dma_pool_alloc(struct pci_pool *pool, dma_addr_t *dma_addr) buf = hinic_dma_mem_zalloc(pool->hwdev, pool->elem_size, dma_addr, (u32)pool->align, SOCKET_ID_ANY); if (buf) - rte_atomic32_inc(&pool->inuse); + rte_atomic_fetch_add_explicit(&pool->inuse, 1, rte_memory_order_relaxed); return buf; } void dma_pool_free(struct pci_pool *pool, void *vaddr, dma_addr_t dma) { - rte_atomic32_dec(&pool->inuse); + rte_atomic_fetch_sub_explicit(&pool->inuse, 1, rte_memory_order_relaxed); hinic_dma_mem_free(pool->hwdev, pool->elem_size, vaddr, dma); } @@ -329,7 +333,7 @@ int hinic_osdep_init(struct hinic_hwdev *hwdev) struct rte_hash_parameters dh_params = { 0 }; struct rte_hash *paddr_hash = NULL; - rte_atomic32_set(&hwdev->os_dep.dma_alloc_cnt, 0); + hwdev->os_dep.dma_alloc_cnt = 0; rte_spinlock_init(&hwdev->os_dep.dma_hash_lock); dh_params.name = hwdev->pcidev_hdl->name; diff --git a/drivers/net/hinic/base/hinic_pmd_hwdev.h b/drivers/net/hinic/base/hinic_pmd_hwdev.h index d6896b3f13..ad30ddd72e 100644 --- a/drivers/net/hinic/base/hinic_pmd_hwdev.h +++ b/drivers/net/hinic/base/hinic_pmd_hwdev.h @@ -18,7 +18,7 @@ /* dma pool */ struct dma_pool { - rte_atomic32_t inuse; + RTE_ATOMIC(uint32_t) inuse; size_t elem_size; size_t align; size_t boundary; @@ -402,7 +402,7 @@ struct hinic_hilink_link_info { /* dma os dependency implementation */ struct hinic_os_dep { /* kernel dma alloc api */ - rte_atomic32_t dma_alloc_cnt; + RTE_ATOMIC(uint32_t) dma_alloc_cnt; rte_spinlock_t dma_hash_lock; struct rte_hash *dma_addr_hash; }; -- 2.53.0

