summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichal Krawczyk <mk@semihalf.com>2019-06-04 12:59:36 +0200
committerFerruh Yigit <ferruh.yigit@intel.com>2019-06-13 23:54:30 +0900
commit4217cb0b7d2c5385f06f531af7f14b860927aba7 (patch)
tree9d8b58d5d5a4c44df1de36ffd92a8546cbd4f2a2
parent33f9630fc23dd550c0b2bca85f6c2b1aecc4a4ff (diff)
downloaddpdk-4217cb0b7d2c5385f06f531af7f14b860927aba7.zip
dpdk-4217cb0b7d2c5385f06f531af7f14b860927aba7.tar.gz
dpdk-4217cb0b7d2c5385f06f531af7f14b860927aba7.tar.xz
net/ena: fix assigning NUMA node to IO queue
Previous solution was using memzones in invalid way in hope to assign IO queue to the appropriate NUMA zone. The right way is to use socket_id from the rx/tx queue setup function and then pass it to the IO queue. Fixes: 3d3edc265fc8 ("net/ena: make coherent memory allocation NUMA-aware") Cc: stable@dpdk.org Signed-off-by: Michal Krawczyk <mk@semihalf.com> Reviewed-by: David Marchand <david.marchand@redhat.com>
-rw-r--r--drivers/net/ena/ena_ethdev.c25
-rw-r--r--drivers/net/ena/ena_ethdev.h2
2 files changed, 7 insertions, 20 deletions
diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c
index a42ec8c..f583340 100644
--- a/drivers/net/ena/ena_ethdev.c
+++ b/drivers/net/ena/ena_ethdev.c
@@ -40,7 +40,6 @@
#include <rte_dev.h>
#include <rte_errno.h>
#include <rte_version.h>
-#include <rte_eal_memconfig.h>
#include <rte_net.h>
#include "ena_ethdev.h"
@@ -272,22 +271,6 @@ static const struct eth_dev_ops ena_dev_ops = {
.reta_query = ena_rss_reta_query,
};
-#define NUMA_NO_NODE SOCKET_ID_ANY
-
-static inline int ena_cpu_to_node(int cpu)
-{
- struct rte_config *config = rte_eal_get_configuration();
- struct rte_fbarray *arr = &config->mem_config->memzones;
- const struct rte_memzone *mz;
-
- if (unlikely(cpu >= RTE_MAX_MEMZONE))
- return NUMA_NO_NODE;
-
- mz = rte_fbarray_get(arr, cpu);
-
- return mz->socket_id;
-}
-
static inline void ena_rx_mbuf_prepare(struct rte_mbuf *mbuf,
struct ena_com_rx_ctx *ena_rx_ctx)
{
@@ -1116,7 +1099,7 @@ static int ena_create_io_queue(struct ena_ring *ring)
}
ctx.qid = ena_qid;
ctx.msix_vector = -1; /* interrupts not used */
- ctx.numa_node = ena_cpu_to_node(ring->id);
+ ctx.numa_node = ring->numa_socket_id;
rc = ena_com_create_io_queue(ena_dev, &ctx);
if (rc) {
@@ -1213,7 +1196,7 @@ static int ena_queue_start(struct ena_ring *ring)
static int ena_tx_queue_setup(struct rte_eth_dev *dev,
uint16_t queue_idx,
uint16_t nb_desc,
- __rte_unused unsigned int socket_id,
+ unsigned int socket_id,
const struct rte_eth_txconf *tx_conf)
{
struct ena_ring *txq = NULL;
@@ -1250,6 +1233,7 @@ static int ena_tx_queue_setup(struct rte_eth_dev *dev,
txq->next_to_clean = 0;
txq->next_to_use = 0;
txq->ring_size = nb_desc;
+ txq->numa_socket_id = socket_id;
txq->tx_buffer_info = rte_zmalloc("txq->tx_buffer_info",
sizeof(struct ena_tx_buffer) *
@@ -1297,7 +1281,7 @@ static int ena_tx_queue_setup(struct rte_eth_dev *dev,
static int ena_rx_queue_setup(struct rte_eth_dev *dev,
uint16_t queue_idx,
uint16_t nb_desc,
- __rte_unused unsigned int socket_id,
+ unsigned int socket_id,
__rte_unused const struct rte_eth_rxconf *rx_conf,
struct rte_mempool *mp)
{
@@ -1334,6 +1318,7 @@ static int ena_rx_queue_setup(struct rte_eth_dev *dev,
rxq->next_to_clean = 0;
rxq->next_to_use = 0;
rxq->ring_size = nb_desc;
+ rxq->numa_socket_id = socket_id;
rxq->mb_pool = mp;
rxq->rx_buffer_info = rte_zmalloc("rxq->buffer_info",
diff --git a/drivers/net/ena/ena_ethdev.h b/drivers/net/ena/ena_ethdev.h
index dcc8690..9067e90 100644
--- a/drivers/net/ena/ena_ethdev.h
+++ b/drivers/net/ena/ena_ethdev.h
@@ -143,6 +143,8 @@ struct ena_ring {
struct ena_stats_rx rx_stats;
struct ena_stats_tx tx_stats;
};
+
+ unsigned int numa_socket_id;
} __rte_cache_aligned;
enum ena_adapter_state {