This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "".
The branch, master has been updated via 0c2a88257d645890774053261c37290653694cd3 (commit) via 33f893d4700da16dc554931a03809076b42435db (commit) via 31b91f77e9de4b027eaaa9d4c1fa7cec7bac02e9 (commit) via f56bfbfbc5660de3b0c31d31ab5fc907c63e7649 (commit) via d36f4571f48632f377b9b58f2efd3e0553f0d002 (commit) from e0f627ebce7760a9c6f225285bea9aa6673bc330 (commit)
Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below.
- Log ----------------------------------------------------------------- commit 0c2a88257d645890774053261c37290653694cd3 Author: Matias Elo matias.elo@nokia.com Date: Fri Aug 9 13:16:26 2019 +0300
linux-gen: dpdk: clean up unnecessary pool_alloc() function
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-by: Petri Savolainen petri.savolainen@nokia.com
diff --git a/platform/linux-generic/pktio/dpdk.c b/platform/linux-generic/pktio/dpdk.c index 41154dc6f..77e42b094 100644 --- a/platform/linux-generic/pktio/dpdk.c +++ b/platform/linux-generic/pktio/dpdk.c @@ -149,8 +149,6 @@ static int disable_pktio; /** !0 this pktio disabled, 0 enabled */
static int dpdk_pktio_init(void);
-static int pool_alloc(struct rte_mempool *mp); - static int lookup_opt(const char *opt_name, const char *drv_name, int *val) { const char *base = "pktio_dpdk"; @@ -338,6 +336,8 @@ static struct rte_mempool *mbuf_pool_create(const char *name, goto fail; }
+ mp->pool_data = pool_entry->pool_hdl; + if (rte_mempool_set_ops_byname(mp, "odp_pool", pool_entry)) { ODP_ERR("Failed setting mempool operations\n"); goto fail; @@ -349,11 +349,6 @@ static struct rte_mempool *mbuf_pool_create(const char *name, RTE_MBUF_PRIV_ALIGN); rte_pktmbuf_pool_init(mp, &mbp_priv);
- if (pool_alloc(mp)) { - ODP_ERR("Failed allocating mempool\n"); - goto fail; - } - num = rte_mempool_populate_iova(mp, (char *)pool_entry->base_addr, RTE_BAD_IOVA, pool_entry->shm_size, NULL, NULL); @@ -423,13 +418,8 @@ static int pool_dequeue_bulk(struct rte_mempool *mp, void **obj_table, return 0; }
-static int pool_alloc(struct rte_mempool *mp) +static int pool_alloc(struct rte_mempool *mp ODP_UNUSED) { - pool_t *pool_entry = (pool_t *)mp->pool_config; - - mp->pool_data = pool_entry->pool_hdl; - mp->flags |= MEMPOOL_F_POOL_CREATED; - return 0; }
commit 33f893d4700da16dc554931a03809076b42435db Author: Matias Elo matias.elo@nokia.com Date: Fri Aug 9 13:12:44 2019 +0300
linux-gen: dpdk: allow memory channel spread
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-by: Petri Savolainen petri.savolainen@nokia.com
diff --git a/platform/linux-generic/pktio/dpdk.c b/platform/linux-generic/pktio/dpdk.c index aa2b159de..41154dc6f 100644 --- a/platform/linux-generic/pktio/dpdk.c +++ b/platform/linux-generic/pktio/dpdk.c @@ -319,8 +319,7 @@ static struct rte_mempool *mbuf_pool_create(const char *name, goto fail; }
- total_size = rte_mempool_calc_obj_size(elt_size, MEMPOOL_F_NO_SPREAD, - &sz); + total_size = rte_mempool_calc_obj_size(elt_size, 0, &sz); if (total_size != pool_entry->block_size) { ODP_ERR("DPDK pool block size not matching to ODP pool: " "%" PRIu32 "/%" PRIu32 "\n", total_size, @@ -333,7 +332,7 @@ static struct rte_mempool *mbuf_pool_create(const char *name, mp = rte_mempool_create_empty(name, num + pool_entry->skipped_blocks, elt_size, cache_size(num), sizeof(struct rte_pktmbuf_pool_private), - rte_socket_id(), MEMPOOL_F_NO_SPREAD); + rte_socket_id(), 0); if (mp == NULL) { ODP_ERR("Failed to create empty DPDK packet pool\n"); goto fail; @@ -515,8 +514,7 @@ uint32_t _odp_dpdk_pool_obj_size(pool_t *pool, uint32_t block_size) }
block_size += sizeof(struct rte_mbuf); - total_size = rte_mempool_calc_obj_size(block_size, MEMPOOL_F_NO_SPREAD, - &sz); + total_size = rte_mempool_calc_obj_size(block_size, 0, &sz); pool->dpdk_elt_size = sz.elt_size; pool->block_offset = sz.header_size + sizeof(struct rte_mbuf);
commit 31b91f77e9de4b027eaaa9d4c1fa7cec7bac02e9 Author: Matias Elo matias.elo@nokia.com Date: Fri Aug 9 13:12:21 2019 +0300
linux-gen: dpdk: set zero-copy pool mbuf private size correctly
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-by: Petri Savolainen petri.savolainen@nokia.com
diff --git a/platform/linux-generic/pktio/dpdk.c b/platform/linux-generic/pktio/dpdk.c index 76647798e..aa2b159de 100644 --- a/platform/linux-generic/pktio/dpdk.c +++ b/platform/linux-generic/pktio/dpdk.c @@ -263,26 +263,29 @@ static void pktmbuf_init(struct rte_mempool *mp, void *opaque_arg ODP_UNUSED, void *_m, unsigned i ODP_UNUSED) { struct rte_mbuf *m = _m; - uint32_t mbuf_size, buf_len; + uint32_t mbuf_size, buf_len, priv_size; odp_packet_hdr_t *pkt_hdr; void *buf_addr;
pkt_hdr = pkt_hdr_from_mbuf(m); buf_addr = pkt_hdr->buf_hdr.base_data - RTE_PKTMBUF_HEADROOM;
+ priv_size = rte_pktmbuf_priv_size(mp); mbuf_size = sizeof(struct rte_mbuf); buf_len = rte_pktmbuf_data_room_size(mp);
+ /* odp_packet_hdr_t stored in private data so don't zero */ memset(m, 0, mbuf_size); - m->priv_size = 0; + m->priv_size = priv_size; m->buf_addr = buf_addr; + m->buf_iova = rte_mem_virt2iova(buf_addr); + if (odp_unlikely(m->buf_iova == 0)) + ODP_ABORT("Bad IO virtual address\n"); + m->buf_len = (uint16_t)buf_len; m->data_off = RTE_PKTMBUF_HEADROOM;
- if (odp_unlikely(m->buf_iova == RTE_BAD_IOVA || m->buf_iova == 0)) - ODP_ABORT("Failed to map virt addr to iova\n"); - /* Init some constant fields */ m->pool = mp; m->nb_segs = 1; @@ -341,8 +344,10 @@ static struct rte_mempool *mbuf_pool_create(const char *name, goto fail; }
- mbp_priv.mbuf_data_room_size = pool_entry->seg_len; - mbp_priv.mbuf_priv_size = 0; + mbp_priv.mbuf_data_room_size = pool_entry->headroom + + pool_entry->seg_len; + mbp_priv.mbuf_priv_size = RTE_ALIGN(sizeof(odp_packet_hdr_t), + RTE_MBUF_PRIV_ALIGN); rte_pktmbuf_pool_init(mp, &mbp_priv);
if (pool_alloc(mp)) {
commit f56bfbfbc5660de3b0c31d31ab5fc907c63e7649 Author: Matias Elo matias.elo@nokia.com Date: Fri Aug 9 11:48:05 2019 +0300
linux-gen: dpdk: remove unnecessary zero-copy block size round up
The blocks size is already rounded up by rte_mempool_calc_obj_size().
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-by: Petri Savolainen petri.savolainen@nokia.com
diff --git a/platform/linux-generic/odp_pool.c b/platform/linux-generic/odp_pool.c index 6fc2e0d91..f021d903d 100644 --- a/platform/linux-generic/odp_pool.c +++ b/platform/linux-generic/odp_pool.c @@ -560,11 +560,27 @@ static odp_pool_t pool_create(const char *name, odp_pool_param_t *params, strcpy(&uarea_name[name_len], postfix);
pool->params = *params; + pool->block_offset = 0;
if (params->type == ODP_POOL_PACKET) { + uint32_t dpdk_obj_size; + hdr_size = ROUNDUP_CACHE_LINE(sizeof(odp_packet_hdr_t)); - block_size = ROUNDUP_CACHE_LINE(hdr_size + align + headroom + - seg_len + tailroom); + block_size = hdr_size + align + headroom + seg_len + tailroom; + /* Calculate extra space required for storing DPDK objects and + * mbuf headers. NOP if no DPDK pktio used or zero-copy mode is + * disabled. */ + dpdk_obj_size = _odp_dpdk_pool_obj_size(pool, block_size); + if (!dpdk_obj_size) { + ODP_ERR("Calculating DPDK mempool obj size failed\n"); + return ODP_POOL_INVALID; + } + if (dpdk_obj_size != block_size) { + shmflags |= ODP_SHM_HP; + block_size = dpdk_obj_size; + } else { + block_size = ROUNDUP_CACHE_LINE(block_size); + } } else { /* Header size is rounded up to cache line size, so the * following data can be cache line aligned without extra @@ -579,22 +595,6 @@ static odp_pool_t pool_create(const char *name, odp_pool_param_t *params, block_size = ROUNDUP_CACHE_LINE(hdr_size + align_pad + seg_len); }
- /* Calculate extra space required for storing DPDK objects and mbuf - * headers. NOP if zero-copy is disabled. */ - pool->block_offset = 0; - if (params->type == ODP_POOL_PACKET) { - uint32_t dpdk_obj_size; - - dpdk_obj_size = _odp_dpdk_pool_obj_size(pool, block_size); - if (!dpdk_obj_size) { - ODP_ERR("Calculating DPDK mempool obj size failed\n"); - return ODP_POOL_INVALID; - } - if (dpdk_obj_size != block_size) - shmflags |= ODP_SHM_HP; - block_size = dpdk_obj_size; - } - /* Allocate extra memory for skipping packet buffers which cross huge * page boundaries. */ if (params->type == ODP_POOL_PACKET) {
commit d36f4571f48632f377b9b58f2efd3e0553f0d002 Author: Matias Elo matias.elo@nokia.com Date: Fri Aug 9 10:45:42 2019 +0300
linux-gen: dpdk: add functions for rte_mbuf / odp_packet_hdr_t conversions
Clean up code by adding inline functions for rte_mbuf /odp_packet_hdr_t type conversions.
Signed-off-by: Matias Elo matias.elo@nokia.com Reviewed-by: Petri Savolainen petri.savolainen@nokia.com
diff --git a/platform/linux-generic/pktio/dpdk.c b/platform/linux-generic/pktio/dpdk.c index ef729c100..76647798e 100644 --- a/platform/linux-generic/pktio/dpdk.c +++ b/platform/linux-generic/pktio/dpdk.c @@ -79,8 +79,6 @@ ODP_STATIC_ASSERT(CONFIG_PACKET_HEADROOM == RTE_PKTMBUF_HEADROOM, #define DPDK_MBUF_BUF_SIZE RTE_MBUF_DEFAULT_BUF_SIZE #define DPDK_MEMPOOL_CACHE_SIZE 64
-#define MBUF_OFFSET (ROUNDUP_CACHE_LINE(sizeof(struct rte_mbuf))) - ODP_STATIC_ASSERT((DPDK_NB_MBUF % DPDK_MEMPOOL_CACHE_SIZE == 0) && (DPDK_MEMPOOL_CACHE_SIZE <= RTE_MEMPOOL_CACHE_MAX_SIZE) && (DPDK_MEMPOOL_CACHE_SIZE <= DPDK_MBUF_BUF_SIZE * 10 / 15) @@ -132,6 +130,16 @@ typedef struct ODP_ALIGNED_CACHE { ODP_STATIC_ASSERT(PKTIO_PRIVATE_SIZE >= sizeof(pkt_dpdk_t), "PKTIO_PRIVATE_SIZE too small");
+static inline struct rte_mbuf *mbuf_from_pkt_hdr(odp_packet_hdr_t *pkt_hdr) +{ + return ((struct rte_mbuf *)pkt_hdr) - 1; +} + +static inline odp_packet_hdr_t *pkt_hdr_from_mbuf(struct rte_mbuf *mbuf) +{ + return (odp_packet_hdr_t *)(mbuf + 1); +} + static inline pkt_dpdk_t *pkt_priv(pktio_entry_t *pktio_entry) { return (pkt_dpdk_t *)(uintptr_t)(pktio_entry->s.pkt_priv); @@ -259,7 +267,7 @@ static void pktmbuf_init(struct rte_mempool *mp, void *opaque_arg ODP_UNUSED, odp_packet_hdr_t *pkt_hdr; void *buf_addr;
- pkt_hdr = (odp_packet_hdr_t *)(uintptr_t)((uint8_t *)m + MBUF_OFFSET); + pkt_hdr = pkt_hdr_from_mbuf(m); buf_addr = pkt_hdr->buf_hdr.base_data - RTE_PKTMBUF_HEADROOM;
mbuf_size = sizeof(struct rte_mbuf); @@ -373,8 +381,9 @@ static int pool_enqueue(struct rte_mempool *mp, return 0;
for (i = 0; i < num; i++) { - odp_packet_hdr_t *pkt_hdr = (odp_packet_hdr_t *)(uintptr_t) - ((uint8_t *)obj_table[i] + MBUF_OFFSET); + struct rte_mbuf *mbuf = (struct rte_mbuf *)obj_table[i]; + odp_packet_hdr_t *pkt_hdr = pkt_hdr_from_mbuf(mbuf); + pkt_tbl[i] = packet_handle(pkt_hdr); }
@@ -404,8 +413,7 @@ static int pool_dequeue_bulk(struct rte_mempool *mp, void **obj_table, for (i = 0; i < pkts; i++) { odp_packet_hdr_t *pkt_hdr = packet_hdr(packet_tbl[i]);
- obj_table[i] = (struct rte_mbuf *)(uintptr_t) - ((uint8_t *)pkt_hdr - MBUF_OFFSET); + obj_table[i] = mbuf_from_pkt_hdr(pkt_hdr); }
return 0; @@ -501,12 +509,11 @@ uint32_t _odp_dpdk_pool_obj_size(pool_t *pool, uint32_t block_size) odp_global_rw->dpdk_initialized = 1; }
- block_size += MBUF_OFFSET; + block_size += sizeof(struct rte_mbuf); total_size = rte_mempool_calc_obj_size(block_size, MEMPOOL_F_NO_SPREAD, &sz); - pool->dpdk_elt_size = sz.elt_size; - pool->block_offset = sz.header_size + MBUF_OFFSET; + pool->block_offset = sz.header_size + sizeof(struct rte_mbuf);
return total_size; } @@ -786,8 +793,7 @@ fail:
static inline void prefetch_pkt(struct rte_mbuf *mbuf) { - odp_packet_hdr_t *pkt_hdr = (odp_packet_hdr_t *)(uintptr_t) - ((uint8_t *)mbuf + MBUF_OFFSET); + odp_packet_hdr_t *pkt_hdr = pkt_hdr_from_mbuf(mbuf); void *data = rte_pktmbuf_mtod(mbuf, char *);
odp_prefetch(pkt_hdr); @@ -837,8 +843,7 @@ static inline int mbuf_to_pkt_zero(pktio_entry_t *pktio_entry, data = rte_pktmbuf_mtod(mbuf, char *); pkt_len = rte_pktmbuf_pkt_len(mbuf);
- pkt_hdr = (odp_packet_hdr_t *)(uintptr_t)((uint8_t *)mbuf + - MBUF_OFFSET); + pkt_hdr = pkt_hdr_from_mbuf(mbuf);
if (pktio_cls_enabled(pktio_entry)) { packet_parse_reset(&parsed_hdr); @@ -904,8 +909,7 @@ static inline int pkt_to_mbuf_zero(pktio_entry_t *pktio_entry, for (i = 0; i < num; i++) { odp_packet_t pkt = pkt_table[i]; odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt); - struct rte_mbuf *mbuf = (struct rte_mbuf *)(uintptr_t) - ((uint8_t *)pkt_hdr - MBUF_OFFSET); + struct rte_mbuf *mbuf = mbuf_from_pkt_hdr(pkt_hdr); uint16_t pkt_len = odp_packet_len(pkt);
if (odp_unlikely(pkt_len > pkt_dpdk->mtu))
-----------------------------------------------------------------------
Summary of changes: platform/linux-generic/odp_pool.c | 36 ++++++++--------- platform/linux-generic/pktio/dpdk.c | 79 ++++++++++++++++++------------------- 2 files changed, 56 insertions(+), 59 deletions(-)
hooks/post-receive