The 03/20/2017 17:29, Hemant Agrawal wrote:
> DPDK 16.07 introduced the support for mempool offload support.
> rte_pktmbuf_pool_create is the recommended method for creating pktmbuf
> pools. Buffer pools created with rte_mempool_create may not get offloaded
> to the underlying offloaded mempools.
>
> This patch, changes the rte_mempool_create to use helper wrapper
> "rte_pktmbuf_pool_create" provided by dpdk, so that it can leverage
> offloaded mempools.
>
> Signed-off-by: Hemant Agrawal <hemant.agra...@nxp.com>
> ---
> branch-2.6 and master are different, so different patches are submitted.
>
>  lib/netdev-dpdk.c | 19 +++++++++----------
>  1 file changed, 9 insertions(+), 10 deletions(-)
>
> diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
> index ddc651b..5d0d762 100644
> --- a/lib/netdev-dpdk.c
> +++ b/lib/netdev-dpdk.c
> @@ -466,7 +466,6 @@ ovs_rte_pktmbuf_init(struct rte_mempool *mp,
>  static struct dpdk_mp *
>  dpdk_mp_create(int socket_id, int mtu)
>  {
> -    struct rte_pktmbuf_pool_private mbp_priv;
>      struct dpdk_mp *dmp;
>      unsigned mp_size;
>      char *mp_name;
> @@ -478,9 +477,6 @@ dpdk_mp_create(int socket_id, int mtu)
>      dmp->socket_id = socket_id;
>      dmp->mtu = mtu;
>      dmp->refcount = 1;
> -    mbp_priv.mbuf_data_room_size = MBUF_SIZE(mtu) - sizeof(struct dp_packet);
> -    mbp_priv.mbuf_priv_size = sizeof(struct dp_packet)
> -                              - sizeof(struct rte_mbuf);
>      /* XXX: this is a really rough method of provisioning memory.
>       * It's impossible to determine what the exact memory requirements are
>       * when the number of ports and rxqs that utilize a particular mempool 
> can
> @@ -496,18 +492,21 @@ dpdk_mp_create(int socket_id, int mtu)
>          mp_name = xasprintf("ovs_mp_%d_%d_%u", dmp->mtu, dmp->socket_id,
>                              mp_size);
>
> -        dmp->mp = rte_mempool_create(mp_name, mp_size, MBUF_SIZE(mtu),
> -                                     MP_CACHE_SZ,
> -                                     sizeof(struct rte_pktmbuf_pool_private),
> -                                     rte_pktmbuf_pool_init, &mbp_priv,
> -                                     ovs_rte_pktmbuf_init, NULL,
> -                                     socket_id, 0);
> +        dmp->mp = rte_pktmbuf_pool_create(mp_name, mp_size,
> +                                          MP_CACHE_SZ,
> +                                          sizeof (struct dp_packet)
> +                                                 - sizeof (struct rte_mbuf),
> +                                          MBUF_SIZE(mtu)
> +                                                 - sizeof(struct dp_packet),
> +                                          socket_id);
>          if (dmp->mp) {
>              VLOG_DBG("Allocated \"%s\" mempool with %u mbufs",
>                       mp_name, mp_size);
>          }
>          free(mp_name);
>          if (dmp->mp) {
> +            /* pktmbuf only prepare the rte_mbuf, prepare the ovs bufs */
> +            rte_mempool_obj_iter(dmp->mp, ovs_rte_pktmbuf_init, NULL);

I think you should remove rte_pktmbuf_init() in ovs_rte_pktmbuf_init() as it is 
already called in rte_pktmbuf_pool_create().

>              return dmp;
>          }
>      } while (rte_errno == ENOMEM && (mp_size /= 2) >= MIN_NB_MBUF);
> --
> 1.9.1
>
> _______________________________________________
> dev mailing list
> d...@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev

--
IMPORTANT NOTICE: The contents of this email and any attachments are 
confidential and may also be privileged. If you are not the intended recipient, 
please notify the sender immediately and do not disclose the contents to any 
other person, use it for any purpose, or store or copy the information in any 
medium. Thank you.
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to