On Tue, Aug 12, 2014 at 10:43 AM, Daniele Di Proietto <ddiproie...@vmware.com> wrote: > With this commit we move our DPDK support to 1.7.0. > DPDK binaries (starting with dpdk 1.7.0) should be linked with --whole-archive > to include pmd drivers > I updated INSTALL.DPDK file and pushed patch to master.
> Signed-off-by: Daniele Di Proietto <ddiproie...@vmware.com> > --- > INSTALL.DPDK | 12 ++++++------ > acinclude.m4 | 13 ++++++++++++- > lib/netdev-dpdk.c | 12 ++++-------- > tests/ovs_client/ovs_client.c | 4 ++-- > 4 files changed, 24 insertions(+), 17 deletions(-) > > diff --git a/INSTALL.DPDK b/INSTALL.DPDK > index c74fa5c..3d062e5 100644 > --- a/INSTALL.DPDK > +++ b/INSTALL.DPDK > @@ -14,12 +14,12 @@ and "make". > Building and Installing: > ------------------------ > > -Recommended to use DPDK 1.6. > +Recommended to use DPDK 1.7. > > DPDK: > -Set dir i.g.: export DPDK_DIR=/usr/src/dpdk-1.6.0r2 > +Set dir i.g.: export DPDK_DIR=/usr/src/dpdk-1.7.0 > cd $DPDK_DIR > -update config/defconfig_x86_64-default-linuxapp-gcc so that dpdk generate > single lib file. > +update config/common_linuxapp so that dpdk generate single lib file. > CONFIG_RTE_BUILD_COMBINE_LIBS=y > > make install T=x86_64-default-linuxapp-gcc > @@ -32,7 +32,7 @@ DPDK kernel requirement. > OVS: > cd $(OVS_DIR)/openvswitch > ./boot.sh > -export DPDK_BUILD=/usr/src/dpdk-1.6.0r2/x86_64-default-linuxapp-gcc > +export DPDK_BUILD=/usr/src/dpdk-1.7.0/x86_64-default-linuxapp-gcc > ./configure --with-dpdk=$DPDK_BUILD > make > > @@ -50,8 +50,8 @@ First setup DPDK devices: > e.g. modprobe uio > - insert igb_uio.ko > e.g. insmod DPDK/x86_64-default-linuxapp-gcc/kmod/igb_uio.ko > - - Bind network device to ibg_uio. > - e.g. DPDK/tools/pci_unbind.py --bind=igb_uio eth1 > + - Bind network device to igb_uio. > + e.g. DPDK/tools/dpdk_nic_bind.py --bind=igb_uio eth1 > Alternate binding method: > Find target Ethernet devices > lspci -nn|grep Ethernet > diff --git a/acinclude.m4 b/acinclude.m4 > index aa9ffcd..e6a6a88 100644 > --- a/acinclude.m4 > +++ b/acinclude.m4 > @@ -170,6 +170,7 @@ AC_DEFUN([OVS_CHECK_DPDK], [ > > DPDK_INCLUDE=$RTE_SDK/include > DPDK_LIB_DIR=$RTE_SDK/lib > + DPDK_LIB=-lintel_dpdk > > LDFLAGS="$LDFLAGS -L$DPDK_LIB_DIR" > CFLAGS="$CFLAGS -I$DPDK_INCLUDE" > @@ -184,7 +185,7 @@ AC_DEFUN([OVS_CHECK_DPDK], [ > found=false > save_LIBS=$LIBS > for extras in "" "-ldl"; do > - LIBS="-lintel_dpdk $extras $save_LIBS" > + LIBS="$DPDK_LIB $extras $save_LIBS" > AC_LINK_IFELSE( > [AC_LANG_PROGRAM([#include <rte_config.h> > #include <rte_eal.h>], > @@ -199,6 +200,16 @@ AC_DEFUN([OVS_CHECK_DPDK], [ > AC_MSG_ERROR([cannot link with dpdk]) > fi > > + # DPDK 1.7.0 pmd drivers are not linked unless --whole-archive is used. > + # > + # This happens because the rest of the DPDK code doesn't use any symbol > in > + # the pmd driver objects, and the drivers register themselves using an > + # __attribute__((constructor)) function. > + # > + # These options are specified inside a single -Wl directive to prevent > + # autotools from reordering them. > + > vswitchd_ovs_vswitchd_LDFLAGS=-Wl,--whole-archive,$DPDK_LIB,--no-whole-archive > + AC_SUBST([vswitchd_ovs_vswitchd_LDFLAGS]) > AC_DEFINE([DPDK_NETDEV], [1], [System uses the DPDK module.]) > else > RTE_SDK= > diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c > index 6ee9803..f2202b4 100644 > --- a/lib/netdev-dpdk.c > +++ b/lib/netdev-dpdk.c > @@ -1199,12 +1199,6 @@ dpdk_class_init(void) > { > int result; > > - result = rte_pmd_init_all(); > - if (result) { > - VLOG_ERR("Cannot init PMD"); > - return -result; > - } > - > result = rte_eal_pci_probe(); > if (result) { > VLOG_ERR("Cannot probe PCI"); > @@ -1253,7 +1247,9 @@ dpdk_ring_create(const char dev_name[], unsigned int > port_no, > return ENOMEM; > } > > - err = rte_eth_from_rings(&ivshmem->cring_rx, 1, &ivshmem->cring_tx, 1, > SOCKET0); > + err = rte_eth_from_rings(dev_name, &ivshmem->cring_rx, 1, > + &ivshmem->cring_tx, 1, SOCKET0); > + > if (err < 0) { > rte_free(ivshmem); > return ENODEV; > @@ -1400,7 +1396,7 @@ dpdk_init(int argc, char **argv) > ovs_abort(result, "Cannot init EAL\n"); > } > > - rte_memzone_dump(); > + rte_memzone_dump(stdout); > rte_eal_init_ret = 0; > > if (argc > result) { > diff --git a/tests/ovs_client/ovs_client.c b/tests/ovs_client/ovs_client.c > index bfc425e..6387624 100644 > --- a/tests/ovs_client/ovs_client.c > +++ b/tests/ovs_client/ovs_client.c > @@ -72,7 +72,7 @@ get_rx_queue_name(unsigned id) > */ > static char buffer[sizeof(MP_CLIENT_RXQ_NAME) + 2]; > > - rte_snprintf(buffer, sizeof(buffer) - 1, MP_CLIENT_RXQ_NAME, id); > + snprintf(buffer, sizeof(buffer) - 1, MP_CLIENT_RXQ_NAME, id); > return buffer; > } > > @@ -87,7 +87,7 @@ get_tx_queue_name(unsigned id) > */ > static char buffer[sizeof(MP_CLIENT_TXQ_NAME) + 2]; > > - rte_snprintf(buffer, sizeof(buffer) - 1, MP_CLIENT_TXQ_NAME, id); > + snprintf(buffer, sizeof(buffer) - 1, MP_CLIENT_TXQ_NAME, id); > return buffer; > } > > -- > 2.0.1 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev