-----Original Message-----
From: Pascal Mazon <pascal.ma...@6wind.com>
Date: Monday, February 26, 2018 at 12:01 AM
To: "dev@dpdk.org" <dev@dpdk.org>, "Mody, Rasesh"
<rasesh.m...@cavium.com>, Harish Patil <harish.pa...@cavium.com>, "Shaikh,
Shahed" <shahed.sha...@cavium.com>
Cc: "pascal.ma...@6wind.com" <pascal.ma...@6wind.com>, "sta...@dpdk.org"
<sta...@dpdk.org>
Subject: [PATCH v2] net/qede: fix alloc from socket 0

>In case osal_dma_alloc_coherent() or osal_dma_alloc_coherent_aligned() are
>called from a management thread, core_id turn out to be LCORE_ID_ANY, and
>the resulting socket for alloc will be socket 0.
>
>This is not desirable when using a NIC from socket 1 which might very
>likely be configured to use memory from that socket only.
>In that case, allocation will fail.
>
>To address this, use master lcore instead when called from mgmt thread.
>The associated socket should have memory available.
>
>Fixes: ec94dbc57362 ("qede: add base driver")
>Cc: sta...@dpdk.org
>
>Signed-off-by: Pascal Mazon <pascal.ma...@6wind.com>
>Acked-by: Harish Patil <harish.pa...@cavium.com>
>---
>
>v2:
>  - Add similar change in osal_dma_alloc_coherent_aligned()
>
> drivers/net/qede/base/bcm_osal.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
>diff --git a/drivers/net/qede/base/bcm_osal.c
>b/drivers/net/qede/base/bcm_osal.c
>index fe42f3256400..91017b89aa26 100644
>--- a/drivers/net/qede/base/bcm_osal.c
>+++ b/drivers/net/qede/base/bcm_osal.c
>@@ -133,7 +133,7 @@ void *osal_dma_alloc_coherent(struct ecore_dev *p_dev,
>       snprintf(mz_name, sizeof(mz_name) - 1, "%lx",
>                                       (unsigned long)rte_get_timer_cycles());
>       if (core_id == (unsigned int)LCORE_ID_ANY)
>-              core_id = 0;
>+              core_id = rte_get_master_lcore();
>       socket_id = rte_lcore_to_socket_id(core_id);
>       mz = rte_memzone_reserve_aligned(mz_name, size,
>                                        socket_id, 0, RTE_CACHE_LINE_SIZE);
>@@ -172,7 +172,7 @@ void *osal_dma_alloc_coherent_aligned(struct
>ecore_dev *p_dev,
>       snprintf(mz_name, sizeof(mz_name) - 1, "%lx",
>                                       (unsigned long)rte_get_timer_cycles());
>       if (core_id == (unsigned int)LCORE_ID_ANY)
>-              core_id = 0;
>+              core_id = rte_get_master_lcore();
>       socket_id = rte_lcore_to_socket_id(core_id);
>       mz = rte_memzone_reserve_aligned(mz_name, size, socket_id, 0, align);
>       if (!mz) {
>-- 
>2.16.1.72.g5be1f00a9
>
Acked-by: Harish Patil <harish.pa...@cavium.com>

>

Reply via email to