net/af_xdp: fix umem frame size and headroom

The previous frame size calculation incorrectly used
mb_pool->private_data_size and didn't include mb_pool->header_size.
Instead of performing a manual calculation, use the
rte_mempool_calc_obj_size API to determine the frame size.

The previous frame headroom calculation also incorrectly used
mb_pool->private_data_size and didn't include mb_pool->header_size or
the mbuf priv size. Fix this.

Fixes: d8a210774e1d ("net/af_xdp: support unaligned umem chunks")
Cc: stable@dpdk.org

Signed-off-by: Ciara Loftus <ciara.loftus@intel.com>
Reviewed-by: Xiaolong Ye <xiaolong.ye@intel.com>
This commit is contained in:
Ciara Loftus 2020-02-13 08:49:12 +00:00 committed by Ferruh Yigit
parent 2df00d562d
commit b79ae90c78

View File

@ -33,6 +33,7 @@
#include <rte_log.h>
#include <rte_memory.h>
#include <rte_memzone.h>
#include <rte_mempool.h>
#include <rte_mbuf.h>
#include <rte_malloc.h>
#include <rte_ring.h>
@ -754,11 +755,13 @@ xsk_umem_info *xdp_umem_configure(struct pmd_internals *internals __rte_unused,
void *base_addr = NULL;
struct rte_mempool *mb_pool = rxq->mb_pool;
usr_config.frame_size = rte_pktmbuf_data_room_size(mb_pool) +
ETH_AF_XDP_MBUF_OVERHEAD +
mb_pool->private_data_size;
usr_config.frame_headroom = ETH_AF_XDP_DATA_HEADROOM +
mb_pool->private_data_size;
usr_config.frame_size = rte_mempool_calc_obj_size(mb_pool->elt_size,
mb_pool->flags,
NULL);
usr_config.frame_headroom = mb_pool->header_size +
sizeof(struct rte_mbuf) +
rte_pktmbuf_priv_size(mb_pool) +
RTE_PKTMBUF_HEADROOM;
umem = rte_zmalloc_socket("umem", sizeof(*umem), 0, rte_socket_id());
if (umem == NULL) {