From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wi0-f181.google.com (mail-wi0-f181.google.com [209.85.212.181]) by dpdk.org (Postfix) with ESMTP id 2C66A7E6A for ; Mon, 20 Apr 2015 17:41:52 +0200 (CEST) Received: by widdi4 with SMTP id di4so96747616wid.0 for ; Mon, 20 Apr 2015 08:41:52 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=qXI1xENsESWsDaKe4HGnN95NIzdxZFclcgMoErEOe34=; b=RUIdzoNGBr/0wvqdgrFrfUDRXReK5nUvEcMuaSg0YMVeloUSDr3bnWAt7Jb5jTvwUE i3c62l4qvF7t28VoYbIoBkLdz8u7GameL01ZIwjNXxT61ZVmAimpdItSwdhtVynH7WbQ MWs1OzRqKTD/TDNlPVUUbMPrwn3970ulAb2y3BPSRa8pD03gOYmDw9t6z8mrAEA9MmZ/ swfSINMDIoHaBvtfkN9lVg+aCzQHTSwSaelvHeV4N2yBnxA/MRLpIE1THBFg4201XYb0 uBRxM3X0M48NxLjBQFlDMem+r/ZdDnI+mHMFxPY1LVTuS5fgKKiKdcmlVXHedhkPG7U3 yc3A== X-Gm-Message-State: ALoCoQk8AjIrO9jojtW2lApcslZNmi0vDU8c4X39SsBg/eIaWGhKylqffxbD9Ku4iI+i5/Ap7913 X-Received: by 10.180.230.226 with SMTP id tb2mr26139737wic.64.1429544512063; Mon, 20 Apr 2015 08:41:52 -0700 (PDT) Received: from glumotte.dev.6wind.com (6wind.net2.nerim.net. [213.41.180.237]) by mx.google.com with ESMTPSA id fm8sm11258951wib.9.2015.04.20.08.41.51 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 20 Apr 2015 08:41:51 -0700 (PDT) From: Olivier Matz To: dev@dpdk.org Date: Mon, 20 Apr 2015 17:41:30 +0200 Message-Id: <1429544496-22532-7-git-send-email-olivier.matz@6wind.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1429544496-22532-1-git-send-email-olivier.matz@6wind.com> References: <1427829784-12323-2-git-send-email-zer0@droids-corp.org> <1429544496-22532-1-git-send-email-olivier.matz@6wind.com> Subject: [dpdk-dev] [PATCH v4 06/12] mbuf: introduce a new helper to create a mbuf pool X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Apr 2015 15:41:52 -0000 Add a new wrapper to rte_mempool_create() to simplify the creation of a packet mbuf pool. This wrapper can be used if there is no specific mempool flags, and no specific mbuf or pool constructor function, which is most of the use cases. Signed-off-by: Olivier Matz --- doc/guides/rel_notes/updating_apps.rst | 4 ++++ lib/librte_mbuf/rte_mbuf.c | 21 ++++++++++++++++++ lib/librte_mbuf/rte_mbuf.h | 40 ++++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+) diff --git a/doc/guides/rel_notes/updating_apps.rst b/doc/guides/rel_notes/updating_apps.rst index f513615..f4dd196 100644 --- a/doc/guides/rel_notes/updating_apps.rst +++ b/doc/guides/rel_notes/updating_apps.rst @@ -16,6 +16,10 @@ DPDK 2.0 to DPDK 2.1 rte_pktmbuf_pool_private structure and pass it to rte_pktmbuf_pool_init(). +* A simpler helper rte_pktmbuf_pool_create() can be used to create a + packet mbuf pool. The old way using rte_mempool_create() is still + supported though and is still used for more specific cases. + DPDK 1.7 to DPDK 1.8 -------------------- diff --git a/lib/librte_mbuf/rte_mbuf.c b/lib/librte_mbuf/rte_mbuf.c index d7f0380..b013607 100644 --- a/lib/librte_mbuf/rte_mbuf.c +++ b/lib/librte_mbuf/rte_mbuf.c @@ -143,6 +143,27 @@ rte_pktmbuf_init(struct rte_mempool *mp, m->port = 0xff; } +/* helper to create a mbuf pool */ +struct rte_mempool * +rte_pktmbuf_pool_create(const char *name, unsigned n, + unsigned cache_size, uint16_t priv_size, uint16_t data_room_size, + int socket_id) +{ + struct rte_pktmbuf_pool_private mbp_priv; + unsigned elt_size; + + + elt_size = sizeof(struct rte_mbuf) + (unsigned)priv_size + + (unsigned)data_room_size; + mbp_priv.mbuf_data_room_size = data_room_size; + mbp_priv.mbuf_priv_size = priv_size; + + return rte_mempool_create(name, n, elt_size, + cache_size, sizeof(struct rte_pktmbuf_pool_private), + rte_pktmbuf_pool_init, &mbp_priv, rte_pktmbuf_init, NULL, + socket_id, 0); +} + /* do some sanity checks on a mbuf: panic if it fails */ void rte_mbuf_sanity_check(const struct rte_mbuf *m, int is_header) diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h index a4146fa..42db8e3 100644 --- a/lib/librte_mbuf/rte_mbuf.h +++ b/lib/librte_mbuf/rte_mbuf.h @@ -642,6 +642,46 @@ void rte_pktmbuf_init(struct rte_mempool *mp, void *opaque_arg, void rte_pktmbuf_pool_init(struct rte_mempool *mp, void *opaque_arg); /** + * Create a mbuf pool. + * + * This function creates and initializes a packet mbuf pool. It is + * a wrapper to rte_mempool_create() with the proper packet constructor + * and mempool constructor. + * + * @param name + * The name of the mbuf pool. + * @param n + * The number of elements in the mbuf pool. The optimum size (in terms + * of memory usage) for a mempool is when n is a power of two minus one: + * n = (2^q - 1). + * @param cache_size + * Size of the per-core object cache. See rte_mempool_create() for + * details. + * @param priv_size + * Size of application private are between the rte_mbuf structure + * and the data buffer. + * @param data_room_size + * Size of data buffer in each mbuf, including RTE_PKTMBUF_HEADROOM. + * @param socket_id + * The socket identifier where the memory should be allocated. The + * value can be *SOCKET_ID_ANY* if there is no NUMA constraint for the + * reserved zone. + * @return + * The pointer to the new allocated mempool, on success. NULL on error + * with rte_errno set appropriately. Possible rte_errno values include: + * - E_RTE_NO_CONFIG - function could not get pointer to rte_config structure + * - E_RTE_SECONDARY - function was called from a secondary process instance + * - EINVAL - cache size provided is too large + * - ENOSPC - the maximum number of memzones has already been allocated + * - EEXIST - a memzone with the same name already exists + * - ENOMEM - no appropriate memory area found in which to create memzone + */ +struct rte_mempool * +rte_pktmbuf_pool_create(const char *name, unsigned n, + unsigned cache_size, uint16_t priv_size, uint16_t data_room_size, + int socket_id); + +/** * Get the data room size of mbufs stored in a pktmbuf_pool * * The data room size is the amount of data that can be stored in a -- 2.1.4