From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Monjalon Subject: Re: [BUG] ixgbe vector cannot compile without bulk alloc Date: Thu, 29 Jan 2015 23:18:01 +0100 Message-ID: <9179246.fLSLRuqZit@xps13> References: <5418900.qsIIdEyxOF@xps13> <20141201171854.GH4856@bricha3-MOBL3> <1953153.vMxMoL6Atb@xps13> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Cc: dev-VfR2kkLFssw@public.gmane.org To: Bruce Richardson Return-path: In-Reply-To: <1953153.vMxMoL6Atb@xps13> List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces-VfR2kkLFssw@public.gmane.org Sender: "dev" 2014-12-01 18:22, Thomas Monjalon: > 2014-12-01 17:18, Bruce Richardson: > > On Mon, Dec 01, 2014 at 06:10:18PM +0100, Thomas Monjalon wrote: > > > These 2 configuration options are incompatible: > > > =09CONFIG_RTE_LIBRTE_IXGBE_RX_ALLOW_BULK_ALLOC=3Dn > > > =09CONFIG_RTE_IXGBE_INC_VECTOR=3Dy > > > Building this config gives this error: > > > =09lib/librte_pmd_ixgbe/ixgbe_rxtx_vec.c:69:24: > > > =09error: =E2=80=98struct igb_rx_queue=E2=80=99 has no member nam= ed =E2=80=98fake_mbuf=E2=80=99 > > >=20 > > > I'd like a confirmation that it will be always incompatible. > > > Thanks > >=20 > > Hi Thomas, > >=20 > > I don't think these options should always be incompatible, though a= s you point > > out you do need to turn on bulk alloc support in order to use the v= ector PMD. > > Why do you ask? There are no immediate plans to remove the dependen= cy on our end. So you confirm that the ixgbe vpmd really needs Rx bulk alloc and this = kind of patch cannot work at all (I don't know the design of vpmd): --- a/lib/librte_pmd_ixgbe/ixgbe_rxtx.c +++ b/lib/librte_pmd_ixgbe/ixgbe_rxtx.c @@ -2119,12 +2119,12 @@ ixgbe_reset_rx_queue(struct igb_rx_queue *rxq) rxq->rx_ring[i] =3D zeroed_desc; } =20 -#ifdef RTE_LIBRTE_IXGBE_RX_ALLOW_BULK_ALLOC /* * initialize extra software ring entries. Space for these extr= a * entries is always allocated */ memset(&rxq->fake_mbuf, 0x0, sizeof(rxq->fake_mbuf)); +#ifdef RTE_LIBRTE_IXGBE_RX_ALLOW_BULK_ALLOC for (i =3D 0; i < RTE_PMD_IXGBE_RX_MAX_BURST; ++i) { rxq->sw_ring[rxq->nb_rx_desc + i].mbuf =3D &rxq->fake_m= buf; } --- a/lib/librte_pmd_ixgbe/ixgbe_rxtx.h +++ b/lib/librte_pmd_ixgbe/ixgbe_rxtx.h @@ -127,9 +127,9 @@ struct igb_rx_queue { uint8_t crc_len; /**< 0 if CRC stripped, 4 otherwi= se. */ uint8_t drop_en; /**< If not 0, set SRRCTL.Drop_En= . */ uint8_t rx_deferred_start; /**< not in global dev s= tart. */ -#ifdef RTE_LIBRTE_IXGBE_RX_ALLOW_BULK_ALLOC /** need to alloc dummy mbuf, for wraparound when scanning hw r= ing */ struct rte_mbuf fake_mbuf; +#ifdef RTE_LIBRTE_IXGBE_RX_ALLOW_BULK_ALLOC /** hold packets to return to application */ struct rte_mbuf *rx_stage[RTE_PMD_IXGBE_RX_MAX_BURST*2]; #endif > I think the compilation shouldn't fail without a proper message. > In order to distinguish a real compilation error from an incompatibil= ity, > we should add a warning in the makefile. > Ideally, the build system should handle dependencies. But waiting thi= s ideal > time, a warning would be graceful. Do you agree that something like this would be OK? --- a/lib/librte_pmd_ixgbe/Makefile +++ b/lib/librte_pmd_ixgbe/Makefile @@ -114,4 +114,8 @@ DEPDIRS-$(CONFIG_RTE_LIBRTE_IXGBE_PMD) +=3D lib/lib= rte_eal lib/librte_ether DEPDIRS-$(CONFIG_RTE_LIBRTE_IXGBE_PMD) +=3D lib/librte_mempool lib/lib= rte_mbuf DEPDIRS-$(CONFIG_RTE_LIBRTE_IXGBE_PMD) +=3D lib/librte_net lib/librte_= malloc =20 +ifeq ($(CONFIG_RTE_IXGBE_INC_VECTOR)$(CONFIG_RTE_LIBRTE_IXGBE_RX_ALLOW= _BULK_ALLOC),yn) +$(error The ixgbe vpmd depends on Rx bulk alloc) +endif + include $(RTE_SDK)/mk/rte.lib.mk Thanks --=20 Thomas