From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id 2D5201396 for ; Thu, 26 Mar 2015 14:35:25 +0100 (CET) Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga103.fm.intel.com with ESMTP; 26 Mar 2015 06:35:24 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.11,471,1422950400"; d="scan'208";a="546691249" Received: from bricha3-mobl3.ger.corp.intel.com ([10.243.20.27]) by orsmga003.jf.intel.com with SMTP; 26 Mar 2015 06:35:22 -0700 Received: by (sSMTP sendmail emulation); Thu, 26 Mar 2015 13:35:21 +0025 Date: Thu, 26 Mar 2015 13:35:20 +0000 From: Bruce Richardson To: Olivier Matz Message-ID: <20150326133520.GA4944@bricha3-MOBL3> References: <1427302838-8285-1-git-send-email-olivier.matz@6wind.com> <1427302838-8285-2-git-send-email-olivier.matz@6wind.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1427302838-8285-2-git-send-email-olivier.matz@6wind.com> Organization: Intel Shannon Ltd. User-Agent: Mutt/1.5.23 (2014-03-12) Cc: dev@dpdk.org Subject: Re: [dpdk-dev] [PATCH 1/5] mbuf: fix clone support when application uses private mbuf data 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: Thu, 26 Mar 2015 13:35:25 -0000 On Wed, Mar 25, 2015 at 06:00:34PM +0100, Olivier Matz wrote: > Add a new private_size field in mbuf structure that should > be initialized at mbuf pool creation. This field contains the > size of the application private data in mbufs. > > Introduce new static inline functions rte_mbuf_from_baddr() > and rte_mbuf_to_baddr() to replace the existing macros, which > take the private size in account when attaching and detaching > mbufs. > > Signed-off-by: Olivier Matz > --- > app/test-pmd/testpmd.c | 1 + > examples/vhost/main.c | 6 ++---- > lib/librte_mbuf/rte_mbuf.c | 1 + > lib/librte_mbuf/rte_mbuf.h | 44 +++++++++++++++++++++++++++++++++++--------- > 4 files changed, 39 insertions(+), 13 deletions(-) > > diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c > index 3057791..c5a195a 100644 > --- a/app/test-pmd/testpmd.c > +++ b/app/test-pmd/testpmd.c > @@ -425,6 +425,7 @@ testpmd_mbuf_ctor(struct rte_mempool *mp, > mb->tx_offload = 0; > mb->vlan_tci = 0; > mb->hash.rss = 0; > + mb->priv_size = 0; > } > > static void > diff --git a/examples/vhost/main.c b/examples/vhost/main.c > index c3fcb80..050f3ac 100644 > --- a/examples/vhost/main.c > +++ b/examples/vhost/main.c > @@ -139,8 +139,6 @@ > /* Number of descriptors per cacheline. */ > #define DESC_PER_CACHELINE (RTE_CACHE_LINE_SIZE / sizeof(struct vring_desc)) > > -#define MBUF_EXT_MEM(mb) (RTE_MBUF_FROM_BADDR((mb)->buf_addr) != (mb)) > - > /* mask of enabled ports */ > static uint32_t enabled_port_mask = 0; > > @@ -1590,7 +1588,7 @@ txmbuf_clean_zcp(struct virtio_net *dev, struct vpool *vpool) > > for (index = 0; index < mbuf_count; index++) { > mbuf = __rte_mbuf_raw_alloc(vpool->pool); > - if (likely(MBUF_EXT_MEM(mbuf))) > + if (likely(RTE_MBUF_INDIRECT(mbuf))) > pktmbuf_detach_zcp(mbuf); > rte_ring_sp_enqueue(vpool->ring, mbuf); > > @@ -1653,7 +1651,7 @@ static void mbuf_destroy_zcp(struct vpool *vpool) > for (index = 0; index < mbuf_count; index++) { > mbuf = __rte_mbuf_raw_alloc(vpool->pool); > if (likely(mbuf != NULL)) { > - if (likely(MBUF_EXT_MEM(mbuf))) > + if (likely(RTE_MBUF_INDIRECT(mbuf))) > pktmbuf_detach_zcp(mbuf); > rte_ring_sp_enqueue(vpool->ring, (void *)mbuf); > } > diff --git a/lib/librte_mbuf/rte_mbuf.c b/lib/librte_mbuf/rte_mbuf.c > index 526b18d..e095999 100644 > --- a/lib/librte_mbuf/rte_mbuf.c > +++ b/lib/librte_mbuf/rte_mbuf.c > @@ -125,6 +125,7 @@ rte_pktmbuf_init(struct rte_mempool *mp, > m->pool = mp; > m->nb_segs = 1; > m->port = 0xff; > + m->priv_size = 0; > } > > /* do some sanity checks on a mbuf: panic if it fails */ > diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h > index 17ba791..4ced6d3 100644 > --- a/lib/librte_mbuf/rte_mbuf.h > +++ b/lib/librte_mbuf/rte_mbuf.h > @@ -268,7 +268,7 @@ struct rte_mbuf { > uint16_t data_len; /**< Amount of data in segment buffer. */ > uint32_t pkt_len; /**< Total pkt len: sum of all segments. */ > uint16_t vlan_tci; /**< VLAN Tag Control Identifier (CPU order) */ > - uint16_t reserved; > + uint16_t priv_size; /**< size of the application private data */ > union { > uint32_t rss; /**< RSS hash result if RSS enabled */ > struct { > @@ -320,15 +320,38 @@ struct rte_mbuf { Why does this new field need to go in cache line zero? New fields should go by default in cache line 1, where there is more space, unless there is a compelling reason not to. Space in cache line 0 is at a premium. /Bruce