From db704770d6c5f5c6ed64378d5891926e0d9bb0c7 Mon Sep 17 00:00:00 2001 From: Dariusz Stojaczyk Date: Wed, 15 Nov 2017 14:59:50 +0100 Subject: [PATCH] env/dpdk: use rte_virt2iova instead of rte_virt2phys for DPDK 17.11 DPDK 17.11-rc3 switched to IOVA-centric addressing. The old API is still available, but is deprecated. Change-Id: I7b54a1e626e39368acd2190dec725dbf30c7a5de Signed-off-by: Dariusz Stojaczyk Reviewed-on: https://review.gerrithub.io/387654 Tested-by: SPDK Automated Test System Reviewed-by: Daniel Verkamp Reviewed-by: Jim Harris Reviewed-by: Ben Walker --- lib/env_dpdk/env.c | 14 ++++++++++++-- lib/iscsi/iscsi_subsystem.c | 5 +++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/lib/env_dpdk/env.c b/lib/env_dpdk/env.c index cf0ab2812..716a9ca95 100644 --- a/lib/env_dpdk/env.c +++ b/lib/env_dpdk/env.c @@ -42,12 +42,22 @@ #include #include +static uint64_t +virt_to_phys(void *vaddr) +{ +#if RTE_VERSION >= RTE_VERSION_NUM(17, 11, 0, 3) + return rte_malloc_virt2iova(vaddr); +#else + return rte_malloc_virt2phy(vaddr); +#endif +} + void * spdk_dma_malloc_socket(size_t size, size_t align, uint64_t *phys_addr, int socket_id) { void *buf = rte_malloc_socket(NULL, size, align, socket_id); if (buf && phys_addr) { - *phys_addr = rte_malloc_virt2phy(buf); + *phys_addr = virt_to_phys(buf); } return buf; } @@ -79,7 +89,7 @@ spdk_dma_realloc(void *buf, size_t size, size_t align, uint64_t *phys_addr) { void *new_buf = rte_realloc(buf, size, align); if (new_buf && phys_addr) { - *phys_addr = rte_malloc_virt2phy(new_buf); + *phys_addr = virt_to_phys(new_buf); } return new_buf; } diff --git a/lib/iscsi/iscsi_subsystem.c b/lib/iscsi/iscsi_subsystem.c index 2b4e85548..8c93b6954 100644 --- a/lib/iscsi/iscsi_subsystem.c +++ b/lib/iscsi/iscsi_subsystem.c @@ -311,7 +311,12 @@ spdk_mobj_ctor(struct rte_mempool *mp, __attribute__((unused)) void *arg, * right before the 512B aligned buffer area. */ phys_addr = (uint64_t *)m->buf - 1; + +#if RTE_VERSION >= RTE_VERSION_NUM(17, 11, 0, 3) + *phys_addr = rte_mempool_virt2iova(m) + off; +#else *phys_addr = rte_mempool_virt2phy(mp, m) + off; +#endif } #define PDU_POOL_SIZE(iscsi) (iscsi->MaxConnections * NUM_PDU_PER_CONNECTION)