Calculate the aligned total size required for queue rings, ensuring that
the size is a power of two for proper memory allocation.

Signed-off-by: Hernan Vargas <hernan.var...@intel.com>
---
 drivers/baseband/acc/acc_common.h | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/baseband/acc/acc_common.h 
b/drivers/baseband/acc/acc_common.h
index 5c5cccf4c9c6..49fdf495613c 100644
--- a/drivers/baseband/acc/acc_common.h
+++ b/drivers/baseband/acc/acc_common.h
@@ -804,19 +804,20 @@ alloc_sw_rings_min_mem(struct rte_bbdev *dev, struct 
acc_device *d,
        int i = 0;
        uint32_t q_sw_ring_size = ACC_MAX_QUEUE_DEPTH * get_desc_len();
        uint32_t dev_sw_ring_size = q_sw_ring_size * num_queues;
-       /* Free first in case this is a reconfiguration */
+       uint32_t alignment = q_sw_ring_size * rte_align32pow2(num_queues);
+       /* Free first in case this is dev_sw_ring_size, q_sw_ring_size, 
socket); reconfiguration */
        rte_free(d->sw_rings_base);
 
        /* Find an aligned block of memory to store sw rings */
        while (i < ACC_SW_RING_MEM_ALLOC_ATTEMPTS) {
                /*
                 * sw_ring allocated memory is guaranteed to be aligned to
-                * q_sw_ring_size at the condition that the requested size is
+                * alignment at the condition that the requested size is
                 * less than the page size
                 */
                sw_rings_base = rte_zmalloc_socket(
                                dev->device->driver->name,
-                               dev_sw_ring_size, q_sw_ring_size, socket);
+                               dev_sw_ring_size, alignment, socket);
 
                if (sw_rings_base == NULL) {
                        rte_acc_log(ERR,
-- 
2.37.1

Reply via email to