PCI devices not found when DPDK is linked as dynamic libraries
https://bugs.dpdk.org/show_bug.cgi?id=333
Bug ID: 333
Summary: PCI devices not found when DPDK is linked as dynamic
libraries
Product: DPDK
Version: 19.08
Hardware: All
OS: Linux
Status: UNCONFIRMED
Severity: critical
Priority: Normal
Component: core
Assignee: [email protected]
Reporter: [email protected]Target Milestone: ---
If DPDK is configured with RTE_SHARED_LIB=y then applications are not loading the required PCI library and therefore devices are not found.
Example is that l3fwd works if linked statically but fails if built with shared libraries.
# ./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
The string 02:00.0 should have been parsed by PCI library and that will find the device. but since library is not pulled in, the device is not found.
Signature · 2 lines
You are receiving this mail because: You are the assignee for the bug.
Quoted 31 lines · On Fri, 19 Jul 2019 20:43:04 +0000 [email protected] wrote:
https://bugs.dpdk.org/show_bug.cgi?id=333
Bug ID: 333 Summary: PCI devices not found when DPDK is linked as dynamic libraries Product: DPDK Version: 19.08 Hardware: All OS: Linux Status: UNCONFIRMED Severity: critical Priority: Normal Component: core Assignee: [email protected] Reporter: [email protected]Target Milestone: ---
If DPDK is configured with RTE_SHARED_LIB=y then applications are not loading the required PCI library and therefore devices are not found.
Example is that l3fwd works if linked statically but fails if built with shared libraries.
# ./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
Quoted 3 lines
The string 02:00.0 should have been parsed by PCI library and that will find the device. but since library is not pulled in, the device is not found.
There are two levels of problems here.
#1 All the bus drivers work by registering themselves in the bus subsystem. But with the --as-needed flag the RTE_INIT() that registers is not run on PCI (or other bus) when built as shared library. This is resolved by flag changes in mk.rteapp.mk.
#2 All the PMD drivers have the same problem. Even though they get built, their RTE_INIT does not get called either since they are not on the application link line.
#3 Similar problems with mempools.
Not sure if the real answer is to always link application with the libdpdk.so (combined group) instead of the laundry list of libraries.
Lastly, why is shared library build not tested as part of the CI infrastructure?