The mempool object 'mp' resides inside "struct dpdk_mp", that has more metadata fields used to manage the mempools, share them etc.
Netdev-doca will not need this metadata handling. Keep the 'mp' as a separated field in netdev_dpdk_common as a pre-step towards it. Usage is a bit optimized as the access has one less indirect dereference. Signed-off-by: Eli Britstein <[email protected]> --- lib/netdev-dpdk-private.h | 2 +- lib/netdev-dpdk.c | 30 ++++++++++++++++-------------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/lib/netdev-dpdk-private.h b/lib/netdev-dpdk-private.h index 79aa2292a..083ddacb3 100644 --- a/lib/netdev-dpdk-private.h +++ b/lib/netdev-dpdk-private.h @@ -123,7 +123,7 @@ struct netdev_dpdk_common { PADDED_MEMBERS_CACHELINE_MARKER(CACHE_LINE_SIZE, cacheline1, struct ovs_mutex mutex OVS_ACQ_AFTER(NETDEV_DPDK_GLOBAL_MUTEX); - struct dpdk_mp *dpdk_mp; + struct rte_mempool *mp; ); PADDED_MEMBERS(CACHE_LINE_SIZE, diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index 02b346561..2562eb4b4 100644 --- a/lib/netdev-dpdk.c +++ b/lib/netdev-dpdk.c @@ -418,6 +418,7 @@ enum dpdk_rx_steer_flags { struct netdev_dpdk { struct netdev_dpdk_common common; + struct dpdk_mp *dpdk_mp; enum dpdk_dev_type type; int buf_size; @@ -845,7 +846,7 @@ netdev_dpdk_mempool_configure(struct netdev_dpdk *dev) /* Check for any pre-existing dpdk_mp for the device before accessing * the associated mempool. */ - if (dev->common.dpdk_mp != NULL) { + if (dev->dpdk_mp != NULL) { /* A new MTU was requested, decrement the reference count for the * devices current dpdk_mp. This is required even if a pointer to * same dpdk_mp is returned by dpdk_mp_get. The refcount for dmp @@ -853,9 +854,10 @@ netdev_dpdk_mempool_configure(struct netdev_dpdk *dev) * must be decremented to keep an accurate refcount for the * dpdk_mp. */ - dpdk_mp_put(dev->common.dpdk_mp); + dpdk_mp_put(dev->dpdk_mp); } - dev->common.dpdk_mp = dmp; + dev->dpdk_mp = dmp; + dev->common.mp = dmp->mp; dev->common.mtu = dev->common.requested_mtu; dev->common.socket_id = dev->common.requested_socket_id; dev->common.max_packet_len = MTU_TO_FRAME_LEN(dev->common.mtu); @@ -1096,7 +1098,7 @@ dpdk_eth_dev_port_config(struct netdev_dpdk_common *common, diag = rte_eth_rx_queue_setup(common->port_id, i, common->rxq_size, common->socket_id, NULL, - common->dpdk_mp->mp); + common->mp); if (diag) { VLOG_INFO("Interface %s unable to setup rxq(%d): %s", common->up.name, i, rte_strerror(-diag)); @@ -1328,7 +1330,7 @@ dpdk_eth_dev_init(struct netdev_dpdk *dev) memset(&dev->common.link, 0, sizeof dev->common.link); } - mbp_priv = rte_mempool_get_priv(dev->common.dpdk_mp->mp); + mbp_priv = rte_mempool_get_priv(dev->common.mp); dev->buf_size = mbp_priv->mbuf_data_room_size - RTE_PKTMBUF_HEADROOM; atomic_store(&dev->common.started, true); @@ -1590,7 +1592,8 @@ common_destruct(struct netdev_dpdk *dev) OVS_EXCLUDED(dev->common.mutex) { rte_free(dev->common.tx_q); - dpdk_mp_put(dev->common.dpdk_mp); + dpdk_mp_put(dev->dpdk_mp); + dev->common.mp = NULL; ovs_list_remove(&dev->common.list_node); free(ovsrcu_get_protected(struct ingress_policer *, @@ -2811,7 +2814,7 @@ netdev_dpdk_vhost_rxq_recv(struct netdev_rxq *rxq, return EAGAIN; } - nb_rx = rte_vhost_dequeue_burst(vid, qid, dev->common.dpdk_mp->mp, + nb_rx = rte_vhost_dequeue_burst(vid, qid, dev->common.mp, (struct rte_mbuf **) batch->packets, NETDEV_MAX_BURST); if (!nb_rx) { @@ -3121,8 +3124,7 @@ dpdk_copy_batch_to_mbuf(struct netdev_dpdk_common *common, } else { struct dp_packet *pktcopy; - pktcopy = dpdk_copy_dp_packet_to_mbuf( - common->dpdk_mp->mp, packet); + pktcopy = dpdk_copy_dp_packet_to_mbuf(common->mp, packet); if (pktcopy) { dp_packet_batch_refill(batch, pktcopy, i); } @@ -4654,11 +4656,11 @@ netdev_dpdk_get_mempool_info(struct unixctl_conn *conn, ovs_mutex_lock(&dev->common.mutex); ovs_mutex_lock(&dpdk_mp_mutex); - if (dev->common.dpdk_mp) { - rte_mempool_dump(stream, dev->common.dpdk_mp->mp); + if (dev->common.mp) { + rte_mempool_dump(stream, dev->common.mp); fprintf(stream, " count: avail (%u), in use (%u)\n", - rte_mempool_avail_count(dev->common.dpdk_mp->mp), - rte_mempool_in_use_count(dev->common.dpdk_mp->mp)); + rte_mempool_avail_count(dev->common.mp), + rte_mempool_in_use_count(dev->common.mp)); } else { error = "Not allocated"; } @@ -4783,7 +4785,7 @@ new_device(int vid) if (dev->common.requested_n_txq < qp_num || dev->common.requested_n_rxq < qp_num || dev->common.requested_socket_id != newnode - || dev->common.dpdk_mp == NULL) { + || dev->common.mp == NULL) { dev->common.requested_socket_id = newnode; dev->common.requested_n_rxq = qp_num; dev->common.requested_n_txq = qp_num; -- 2.34.1 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
