From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 8391BA046B for ; Mon, 22 Jul 2019 09:38:34 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id C989A1B99B; Mon, 22 Jul 2019 09:38:32 +0200 (CEST) Received: from wout3-smtp.messagingengine.com (wout3-smtp.messagingengine.com [64.147.123.19]) by dpdk.org (Postfix) with ESMTP id 4C9A41B959; Mon, 22 Jul 2019 09:38:31 +0200 (CEST) Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.west.internal (Postfix) with ESMTP id 2D4C147A; Mon, 22 Jul 2019 03:38:30 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute1.internal (MEProxy); Mon, 22 Jul 2019 03:38:30 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:content-type; s=mesmtp; bh=DNpLor76bpdjhVTMGr5N96TIoyJUZLk29YvIy5AFAZY=; b=N8ehkuQMeApF VGsGrYPAHceHf1+wKMh4zadPs8QmlGDlrW5Wd4qKPHY7h4c3FfBUEWy5k8IVKxUh rQES4DLWq+5BzfsW9fWHMXEHIVVH+8Ghbwr3EIvtZovKRYKMCIVEZN4B/wHqDP8g 4emV0cdoFbXAadjOyY+lKXqroWVdqCE= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm3; bh=DNpLor76bpdjhVTMGr5N96TIoyJUZLk29YvIy5AFA ZY=; b=V+nT5QtMXkfvp3HUr0IIji2DRbAxnKtMYoFnxQ2uT6+DzqlVqZtwYGxoT 6kC47YH5wYOMx+hyILIv5yWdGkWRh6Jp/nH7gKYWwv9tFlS5/wQV4L59XJ4M56Mc 3olHU0C9lNWNRnz2/beUAaL37p+6UEd83QZoA/CPFvXYjcOizTiRREKoPeeO3+Tl g1YEIPcl6q+aqtT+eAzJXc1PDOxXeI6k3pAUUpNxtZUVHNyLXcBEgKfP5b74P/Cf 7UozQPqbdgLrroDTQwfZWRK+PComY8aPGfgs9AE+RNwqbY+1AwuukbnazzsELFhs 8eQ0QCNmY76OF3pUrf5ViO3MTHXMw== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduvddrjeefgdduvdefucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkfgjfhgggfgtsehtufertddttddvnecuhfhrohhmpefvhhhomhgr shcuofhonhhjrghlohhnuceothhhohhmrghssehmohhnjhgrlhhonhdrnhgvtheqnecuff homhgrihhnpehsthgrtghkohhvvghrfhhlohifrdgtohhmnecukfhppeejjedrudefgedr vddtfedrudekgeenucfrrghrrghmpehmrghilhhfrhhomhepthhhohhmrghssehmohhnjh grlhhonhdrnhgvthenucevlhhushhtvghrufhiiigvpedt X-ME-Proxy: Received: from xps.localnet (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id AF06880059; Mon, 22 Jul 2019 03:38:28 -0400 (EDT) From: Thomas Monjalon To: Stephen Hemminger Cc: Bruce Richardson , dev@dpdk.org, stable@dpdk.org Date: Mon, 22 Jul 2019 09:38:27 +0200 Message-ID: <4295239.Udij6XshuM@xps> In-Reply-To: <20190719135540.7d889722@hermes.lan> References: <20190715234136.3526-1-stephen@networkplumber.org> <20190716084423.GB561@bricha3-MOBL.ger.corp.intel.com> <20190719135540.7d889722@hermes.lan> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Subject: Re: [dpdk-dev] [PATCH] pci: fix missing pci bus with shared library build X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 19/07/2019 22:55, Stephen Hemminger: > On Tue, 16 Jul 2019 09:46:04 +0100 > Bruce Richardson wrote: > > > On Mon, Jul 15, 2019 at 05:19:12PM -0700, Stephen Hemminger wrote: > > > On Mon, 15 Jul 2019 16:41:36 -0700 > > > Stephen Hemminger wrote: > > > > > > > If DPDK is built as a shared library, then any application linked > > > > with rte.app.mk will not find any PCI devices. When the application > > > > is started no ethernet devices are found. > > > > > > > > This is because the link order of libraries on the command line matters. > > > > And PCI is before EAL. That causes there to be no dependency on PCI > > > > so linker ignores linking the library. > > > > Swapping the order fixes this. > > > > > > > > Fixes: c752998b5e2e ("pci: introduce library and driver") > > > > Cc: stable@dpdk.org > > > > Signed-off-by: Stephen Hemminger > > > > --- > > > > mk/rte.app.mk | 2 +- > > > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > > > > > diff --git a/mk/rte.app.mk b/mk/rte.app.mk > > > > index a277c808ed8e..470b92e4d73e 100644 > > > > --- a/mk/rte.app.mk > > > > +++ b/mk/rte.app.mk > > > > @@ -90,8 +90,8 @@ _LDLIBS-$(CONFIG_RTE_LIBRTE_STACK) += -lrte_stack > > > > _LDLIBS-$(CONFIG_RTE_DRIVER_MEMPOOL_RING) += -lrte_mempool_ring > > > > _LDLIBS-$(CONFIG_RTE_LIBRTE_OCTEONTX2_MEMPOOL) += -lrte_mempool_octeontx2 > > > > _LDLIBS-$(CONFIG_RTE_LIBRTE_RING) += -lrte_ring > > > > -_LDLIBS-$(CONFIG_RTE_LIBRTE_PCI) += -lrte_pci > > > > _LDLIBS-$(CONFIG_RTE_LIBRTE_EAL) += -lrte_eal > > > > +_LDLIBS-$(CONFIG_RTE_LIBRTE_PCI) += -lrte_pci > > > > _LDLIBS-$(CONFIG_RTE_LIBRTE_CMDLINE) += -lrte_cmdline > > > > _LDLIBS-$(CONFIG_RTE_LIBRTE_REORDER) += -lrte_reorder > > > > _LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED) += -lrte_sched > > > > > > It still happens with 19.08. Testpmd works but only because it is > > > linked with so many things. But l3fwd fails... > > > > > > # ./examples/l3fwd/build/l3fwd -n4 -l0-3 -w 02:00.0 > > > EAL: Detected 8 lcore(s) > > > EAL: Detected 1 NUMA nodes > > > EAL: failed to parse device "02:00.0" > > > EAL: Unable to parse device '02:00.0' > > > EAL: Error - exiting with code: 1 > > > Cause: Invalid EAL parameters > > > > I don't think the position of these is going to be the cause here, the more > > likely cause is that the pci bus driver - and all other drivers - are not > > linked into apps for shared library builds. You always need to pass "-d" > > parameter to load drivers at init time (or have them installed in the > > correct driver path). For example, for me with a shared library build the > > following gives a no ports error: > > > > sudo ./build/l2fwd -c F00000 -- -p 3 > > > > while this succeeds and runs fine > > > > sudo ./build/l2fwd -c F00000 -d $RTE_SDK/$RTE_TARGET/lib/librte_pmd_i40e.so -- -p 3 > > The root cause is that recent gcc won't run constructor on unused libraries. > Testing a patch to take --as-needed off of PCI library. > > See: https://stackoverflow.com/questions/11631161/force-to-link-against-unused-shared-library The constructor is run when calling dlopen, right? Note: dlopen with -d is a feature. The original idea was to be able to specify which driver we want to use. If we want an automatic dlopen, like modprobe, then we need more scripts. But I understand you are against the whole dlopen idea.