dpdk.git
7 years agonet/mlx5: fix supported packets types
Nélio Laranjeiro [Fri, 24 Feb 2017 09:16:56 +0000 (10:16 +0100)]
net/mlx5: fix supported packets types

Fixes: 0603df73a077 ("net/mlx5: fix Rx packet validation and type")
Cc: stable@dpdk.org
Signed-off-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
Acked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
7 years agonet/e1000/base: fix multicast setting in VF
Yong Wang [Tue, 21 Feb 2017 09:33:23 +0000 (04:33 -0500)]
net/e1000/base: fix multicast setting in VF

In function e1000_update_mc_addr_list_vf(), "msgbuf[0]" is used prior
to initialization at "msgbuf[0] |= E1000_VF_SET_MULTICAST_OVERFLOW".
And "msgbuf[0]" is overwritten at "msgbuf[0] = E1000_VF_SET_MULTICAST".

Fix it by moving the second line prior to the first one that mentioned
above.

Fixes: dffbaf7880a8 ("e1000: revert fix for multicast in VF")
Cc: stable@dpdk.org
Signed-off-by: Yong Wang <wang.yong19@zte.com.cn>
Acked-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
7 years agonet/bnx2x: fix transmit queue free threshold
Chas Williams [Fri, 10 Feb 2017 20:12:06 +0000 (15:12 -0500)]
net/bnx2x: fix transmit queue free threshold

The default tx_free_thresh is potentially larger than the allocated queue
which will result in TX queue cleanup never happening.  To fix this,
lower the default free threshold and ensure that the free threshold is
never greater than the maximum outstanding transmit buffers.

Fixes: 827ed2a118cc ("net/bnx2x: restructure Tx routine")
Cc: stable@dpdk.org
Signed-off-by: Chas Williams <ciwillia@brocade.com>
Acked-by: Harish Patil <harish.patil@qlogic.com>
7 years agonet/mlx5: fix startup when flow cannot be applied
Nélio Laranjeiro [Wed, 22 Feb 2017 09:57:52 +0000 (10:57 +0100)]
net/mlx5: fix startup when flow cannot be applied

When flows cannot be re-applied due to configuration modifications, the
start function should rollback the configuration done.

Fixes: 2097d0d1e2cc ("net/mlx5: support basic flow items and actions")
Cc: stable@dpdk.org
Signed-off-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
7 years agonet/mlx5: fix extended statistics
Shahaf Shuler [Tue, 21 Feb 2017 14:37:24 +0000 (16:37 +0200)]
net/mlx5: fix extended statistics

The number of extended statistics counters is queried through ETHTOOL.
ETHTOOL provides a different number when the link is up or down.
Since extended statistics query occurs at device start,
segmentation fault might happen when changing the link state before and
after the device start.

this commit address this issue, and query the number of statistics
before every call to ETHTOOL.

Fixes: a4193ae3bc4f ("net/mlx5: support extended statistics")
Cc: stable@dpdk.org
Signed-off-by: Shahaf Shuler <shahafs@mellanox.com>
Acked-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
7 years agonet/mlx5: remove unused interface name query
Shahaf Shuler [Tue, 21 Feb 2017 14:37:23 +0000 (16:37 +0200)]
net/mlx5: remove unused interface name query

Interface name is queried, however never used.

Signed-off-by: Shahaf Shuler <shahafs@mellanox.com>
Acked-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
7 years agodoc: add tap features
Pascal Mazon [Tue, 21 Feb 2017 13:14:53 +0000 (14:14 +0100)]
doc: add tap features

Signed-off-by: Pascal Mazon <pascal.mazon@6wind.com>
Acked-by: John McNamara <john.mcnamara@intel.com>
7 years agonet/i40e: fix compile error
Qi Zhang [Mon, 20 Feb 2017 18:11:56 +0000 (13:11 -0500)]
net/i40e: fix compile error

Fix the compile error when RTE_LIBRTE_I40E_RX_ALLOW_BULK_ALLOC
is disabled.

Also fake_mbuf is required to be initialized and assigned to
additional sw_ring entries for vector PMD independent from
RTE_LIBRTE_I40E_RX_ALLOW_BULK_ALLOC config option.

Fixes: 4861cde46116 ("i40e: new poll mode driver")
Cc: stable@dpdk.org
Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
7 years agonet/mlx5: fix VLAN stripping indication
Shahaf Shuler [Mon, 20 Feb 2017 11:14:32 +0000 (13:14 +0200)]
net/mlx5: fix VLAN stripping indication

The indication on vlan stripping was taken from the wrong location in the
completion entry.

Fixes: 9964b965ad69 ("net/mlx5: re-add Rx scatter support")
Cc: stable@dpdk.org
Signed-off-by: Shahaf Shuler <shahafs@mellanox.com>
Acked-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
7 years agonet/i40e: fix memory allocation for hash table
Beilei Xing [Fri, 17 Feb 2017 08:37:56 +0000 (16:37 +0800)]
net/i40e: fix memory allocation for hash table

Testpmd failed to start in another hugetlbfs mount point on
i40e, the root cause is that hash table is always allocated
on socket 0.

Issue can be reproduced by forcing testpmd to allocate memory
only from node 1:

testpmd --socket-mem=0,8192 -- -i --socket-num=1

EAL: PCI device 0000:81:00.0 on NUMA socket 1
EAL:   probe driver: 8086:1572 net_i40e
PMD: eth_i40e_dev_init(): FW 4.40 API 1.4 NVM 04.05.03 eetrack 80001cd8
RING: Cannot reserve memory
HASH: memory allocation failed
PMD: i40e_init_ethtype_filter_list(): Failed to create ethertype hash
table!
EAL: Error - exiting with code: 1
  Cause: Requested device 0000:81:00.0 cannot be used

Fix the issue by assigning socket id during hash parameter definition.

Fixes: 5c53c82c8174 ("net/i40e: store flow director filter")
Fixes: 425c3325f0b0 ("net/i40e: store tunnel filter")
Fixes: 078259773da9 ("net/i40e: store ethertype filter")
Cc: stable@dpdk.org
Reported-by: Ivan Nardi <nardi.ivan@gmail.com>
Signed-off-by: Beilei Xing <beilei.xing@intel.com>
7 years agonet/i40e: fix TC bitmap of VEB
Wenzhuo Lu [Thu, 16 Feb 2017 03:29:17 +0000 (11:29 +0800)]
net/i40e: fix TC bitmap of VEB

When setting up the VEB, default TC bitmap is used.

But after setting the default TC bitmap, it's not stored. So when we're
trying to get the enabled TCs on the VEB, it's always wrong.

Fixes: 5135f3ca49a7 ("i40e: enable DCB in VMDQ VSIs")
Cc: stable@dpdk.org
Signed-off-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
7 years agonet/i40e: remove redundant macros
Qiming Yang [Mon, 20 Feb 2017 05:48:13 +0000 (13:48 +0800)]
net/i40e: remove redundant macros

These macros are left by historical reasons and useless now.

Signed-off-by: Qiming Yang <qiming.yang@intel.com>
7 years agonet/i40e: remove redundant VLAN insert code
Qiming Yang [Mon, 20 Feb 2017 05:43:03 +0000 (13:43 +0800)]
net/i40e: remove redundant VLAN insert code

Remove useless tx_flags and related macros in VLAN insertion.

Signed-off-by: Qiming Yang <qiming.yang@intel.com>
7 years agonet/kni: add KNI PMD
Ferruh Yigit [Fri, 17 Feb 2017 13:42:38 +0000 (13:42 +0000)]
net/kni: add KNI PMD

Add KNI PMD which wraps librte_kni for ease of use.

KNI PMD can be used as any regular PMD to send / receive packets to the
Linux networking stack.

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
Reviewed-by: Yong Wang <yongwang@vmware.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Yong Wang <yongwang@vmware.com>
7 years agonet/mlx5: add out of buffer counter to extended statistic
Shahaf Shuler [Tue, 14 Feb 2017 14:31:06 +0000 (16:31 +0200)]
net/mlx5: add out of buffer counter to extended statistic

This commit adds RX out of buffer counter to xstats report.
The counter counts the number of dropped occurred due to lack of buffers
on device RX queues.

Signed-off-by: Shahaf Shuler <shahafs@mellanox.com>
Acked-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
7 years agonet/tap: fix possibly unterminated string
Keith Wiles [Fri, 17 Feb 2017 15:43:04 +0000 (09:43 -0600)]
net/tap: fix possibly unterminated string

Calling strncpy with a maximum size argument of 16 bytes on destination
array "ifr.ifr_ifrn.ifrn_name" of size 16 bytes might leave the
destination string unterminated.

Coverity issue: 1407499
Fixes: 6b38b2725cdb ("net/tap: fix multi-queue support")
Cc: stable@dpdk.org
Signed-off-by: Keith Wiles <keith.wiles@intel.com>
7 years agokni: fix build on Suse 12 SP3
Nirmoy Das [Tue, 4 Apr 2017 14:16:23 +0000 (16:16 +0200)]
kni: fix build on Suse 12 SP3

Add support for SLES12SP3, which uses kernel 4.4,
but backported features from newer kernels.

Signed-off-by: Nirmoy Das <ndas@suse.de>
Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
7 years agocfgfile: support empty value
Allain Legacy [Fri, 31 Mar 2017 13:52:03 +0000 (09:52 -0400)]
cfgfile: support empty value

This commit adds support to the cfgfile library for parsing a key=value
line that has no value string specified (e.g., "key=").  This can be used
to override a configuration attribute that has a default value or default
list of values to set it back to an undefined value to disable
functionality.

Signed-off-by: Allain Legacy <allain.legacy@windriver.com>
Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
7 years agocfgfile: fix parsing of long fields
Joseph Richard [Fri, 31 Mar 2017 13:52:02 +0000 (09:52 -0400)]
cfgfile: fix parsing of long fields

When parsing a ini file with a "key = value" line that has both "key" and
"value" sized to the maximum allowed length causes a parsing failure.  The
internal "buffer" variable should be sized at least as large as the maximum
for both fields.  This commit updates the local array to be sized to hold
the max name, max value, " = ", and the nul terminator.

Signed-off-by: Allain Legacy <allain.legacy@windriver.com>
Acked-by: Keith Wiles <keith.wiles@intel.com>
Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
7 years agocfgfile: constrain string search
Allain Legacy [Fri, 31 Mar 2017 13:52:01 +0000 (09:52 -0400)]
cfgfile: constrain string search

The call to memchr() uses the absolute length of the string buffer instead
of the actual length of the string returned by fgets().  This causes the
search to go beyond the '\n' character and find ';' characters in random
garbage on the stack.  This then causes the 'len' variable to be updated
and the subsequent search for the '=' character to potentially find one
beyond the first newline character.

Since this bug relies on ';' and '=' characters appearing in random places
in the 'buffer' variable it is intermittently reproducible at best.

Signed-off-by: Allain Legacy <allain.legacy@windriver.com>
Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
7 years agocfgfile: support configurable comment character
Allain Legacy [Fri, 31 Mar 2017 13:52:00 +0000 (09:52 -0400)]
cfgfile: support configurable comment character

The current cfgfile comment character is hardcoded to ';'.  This commit a
new API to allow the user to specify which comment character to use while
parsing the file.

This is to ease adoption by applications that have an existing
configuration file which may use a different comment character.  For
instance, an application may already have a configuration file that uses
the '#' as the comment character.

The approach of using a new API with an extensible parameters structure was
used rather than simply adding a new argument to the existing API to allow
for additional arguments to be introduced in the future.

Signed-off-by: Allain Legacy <allain.legacy@windriver.com>
Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
7 years agocfgfile: support global properties section
Allain Legacy [Fri, 31 Mar 2017 13:51:59 +0000 (09:51 -0400)]
cfgfile: support global properties section

The current implementation of the cfgfile library requires that all
key=value pairs be within [SECTION] definitions.  The ini file standard
allows for key=value pairs in an unnamed section.

   https://en.wikipedia.org/wiki/INI_file#Global_properties

This commit adds the capability of parsing key=value pairs from such an
unnamed section. The CFG_FLAG_GLOBAL_SECTION flag must be passed to the
rte_cfgfile_load() API to enable this functionality.  Any key=value pairs
found before the first section can be accessed in the section named
"GLOBAL".

Signed-off-by: Allain Legacy <allain.legacy@windriver.com>
Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
7 years agotest/cfgfile: add basic unit tests
Allain Legacy [Fri, 31 Mar 2017 13:51:58 +0000 (09:51 -0400)]
test/cfgfile: add basic unit tests

This commit adds the basic infrastructure for the cfgfile library unit
tests.  It includes success path tests for the most commonly used APIs.
More unit tests will be added later.

Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
Signed-off-by: Allain Legacy <allain.legacy@windriver.com>
7 years agodoc: fix a typo in howto guide
Yong Wang [Wed, 29 Mar 2017 08:27:35 +0000 (04:27 -0400)]
doc: fix a typo in howto guide

Fixes: 0ba3870e7559 ("doc: add guide to use virtio-user as exceptional path")
Cc: stable@dpdk.org
Signed-off-by: Yong Wang <wang.yong19@zte.com.cn>
Acked-by: John McNamara <john.mcnamara@intel.com>
7 years agodistributor: fix creation error checks
David Hunt [Tue, 4 Apr 2017 02:42:41 +0000 (03:42 +0100)]
distributor: fix creation error checks

Coverity issue 143258: not freeing distributor instance
Coverity issue 143254: not checking return code from malloc
Fixes: 775003ad2f96 ("distributor: add new burst-capable library")

Signed-off-by: David Hunt <david.hunt@intel.com>
7 years agoexamples/ip_fragmentation: fix check of packet type
Wei Dai [Tue, 14 Mar 2017 14:47:49 +0000 (22:47 +0800)]
examples/ip_fragmentation: fix check of packet type

The packet_type in mbuf is not correctly filled by ixgbe 82599 NIC.
To use the ether_type in ethernet header to check packet type is
more reliaber.

Fixes: 3c0184cc0c60 ("examples: replace some offload flags with packet type")
Fixes: ab351fe1c95c ("mbuf: remove packet type from offload flags")
Cc: stable@dpdk.org
Reported-by: Fangfang Wei <fangfangx.wei@intel.com>
Signed-off-by: Wei Dai <wei.dai@intel.com>
Tested-by: Fangfang Wei <fangfangx.wei@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
7 years agodoc: add option -d for plugins in Linux guide
Reshma Pattan [Mon, 27 Mar 2017 12:32:17 +0000 (13:32 +0100)]
doc: add option -d for plugins in Linux guide

Update the document with the available EAL command
line option to install the pmd drivers that are built
as shared libraries.

Signed-off-by: Reshma Pattan <reshma.pattan@intel.com>
Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
7 years agoeal/linux: fix build with glibc 2.25
Jerin Jacob [Mon, 3 Apr 2017 08:35:14 +0000 (14:05 +0530)]
eal/linux: fix build with glibc 2.25

glibc 2.25 is warning about if applications depend on
sys/types.h for makedev macro, it expects to be included
from <sys/sysmacros.h>

Found this error while testing with GCC 6.3.1 on archlinux.

lib/librte_eal/linuxapp/eal/eal_pci_uio.c: In function ‘pci_mknod_uio_dev’:
lib/librte_eal/linuxapp/eal/eal_pci_uio.c:134:13:
error: In the GNU C Library, "makedev" is defined
by <sys/sysmacros.h>. For historical compatibility, it is
currently defined by <sys/types.h> as well, but we plan to
remove this soon. To use "makedev", include <sys/sysmacros.h>
directly. If you did not intend to use a system-defined macro
"makedev", you should undefine it after including <sys/types.h>. [-Werror]
 dev = makedev(major, minor);
             ^~~~~~~~~~~~~~~~~

Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
7 years agonic_uio: fix device binding at boot
Bruce Richardson [Fri, 24 Mar 2017 14:30:11 +0000 (14:30 +0000)]
nic_uio: fix device binding at boot

When loading nic_uio from /boot/loader.conf as specified in the Getting
Started Guide doc, the NIC devices were not bound at boot. Unloading the
nic_uio driver and reloading it would cause them to be bound, however.

The root cause appears to be the fact that when the module is loaded at
boot, the call to find the pci device when parsing the b:d:f parameter
fails to return the device. That means that later on when the device
is probed as part of a PCI scan, no action is taken as it's not recorded
as a device to be used.

We fix this by having the b:d:f string parsed again on probe if the
initial check to see if it's an already-known device fails. In my tests,
this causes the NIC devices to be successfully bound at boot time, as
well as leaving things working as before in the case the module is loaded
post-boot.

Fixes: 764bf26873b9 ("add FreeBSD support")
Cc: stable@dpdk.org
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
7 years agovfio: fix secondary process start
Jianfeng Tan [Thu, 16 Mar 2017 16:28:44 +0000 (16:28 +0000)]
vfio: fix secondary process start

When binding with vfio-pci, secondary process cannot be started with
an error message:

    cannot find TAILQ entry for PCI device.

It's due to: struct rte_pci_addr is padded with 1 byte for alignment
by compiler. Then below comparison in commit 2f4adfad0a69
("vfio: add multiprocess support") will fail if the last byte is not
initialized.

    memcmp(&vfio_res->pci_addr, &dev->addr, sizeof(dev->addr)

And commit cdc242f260e7 ("eal/linux: support running as unprivileged user")
just triggers this bug by using a stack un-initialized variable.

The fix is to use rte_eal_compare_pci_addr() for pci addr comparison.

Fixes: 2f4adfad0a69 ("vfio: add multiprocess support")
Fixes: cdc242f260e7 ("eal/linux: support running as unprivileged user")
Cc: stable@dpdk.org
Reported-by: Pawel Rutkowski <pawelx.rutkowski@intel.com>
Signed-off-by: Jianfeng Tan <jianfeng.tan@intel.com>
Acked-by: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
7 years agovfio: fix build
Anatoly Burakov [Mon, 3 Apr 2017 12:58:05 +0000 (13:58 +0100)]
vfio: fix build

Some compilers require definition of vfio_iommu_spapr_tce_ddw_info
before its use in vfio_iommu_spapr_tce_info, so move tce_info
definition below tce_ddw_info.

Fixes: 468f42cc2645 ("vfio: fix build on old kernel")

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
7 years agoigb_uio: fix build with kernel < 3.2
Ferruh Yigit [Mon, 3 Apr 2017 16:49:01 +0000 (17:49 +0100)]
igb_uio: fix build with kernel < 3.2

Recently added "dma_zalloc_coherent()" call is causing build error
for Linux kernels < 3.2.

compile error:
lib/librte_eal/linuxapp/igb_uio/igb_uio.c:
  In function ‘igbuio_pci_probe’:
lib/librte_eal/linuxapp/igb_uio/igb_uio.c:434:2:
error: implicit declaration of function ‘dma_zalloc_coherent’
  [-Werror=implicit-function-declaration]
  map_addr = dma_zalloc_coherent(&dev->dev, 1024,
  ^

dma_zalloc_coherent() introduced with Linux kernel 3.2, with commit
Linux: 842fa69f3e0c ("include/linux/dma-mapping.h: add dma_zalloc_coherent()")
Since it does not exist for older kernels, causing a build error.

Switched to dma_alloc_coherent() API to prevent build error.

Fixes: d287e4d41be0 ("igb_uio: map dummy DMA forcing IOMMU domain attachment")

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
7 years agomempool: move stack handler as a driver
Shreyansh Jain [Fri, 31 Mar 2017 05:35:37 +0000 (11:05 +0530)]
mempool: move stack handler as a driver

Moved from lib/librte_mempool, stack mempool handler is an independent
driver.
Shared builds would now require to link in librte_mempool_stack for
"stack" mempool handler.

Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
7 years agomempool: move ring handler as a driver
Shreyansh Jain [Fri, 31 Mar 2017 05:35:36 +0000 (11:05 +0530)]
mempool: move ring handler as a driver

Moved from lib/librte_mempool, ring mempool is now an independent
driver.
Shared builds would now need to add librte_mempool_ring for:
* ring_mp_mc
* ring_sp_sc
* ring_sp_mc
* ring_mp_sc

Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
7 years agomempool: fix crash when handler not found
Shreyansh Jain [Fri, 31 Mar 2017 05:35:35 +0000 (11:05 +0530)]
mempool: fix crash when handler not found

In case the stack or ring mempool handler are compiled as shared
library and not linked in with test binary, segfault is reported.
This is because return value of rte_mempool_set_ops_byname is not
being checked in rte_mempool_ops_alloc.

This patch handles error returned from rte_mempool_set_ops_byname
when a mempool is not found.

Fixes: 449c49b93a6b ("mempool: support handler operations")

Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
7 years agomempool: fix typos
Andriy Berestovskyy [Fri, 31 Mar 2017 14:03:54 +0000 (16:03 +0200)]
mempool: fix typos

Signed-off-by: Andriy Berestovskyy <andriy.berestovskyy@caviumnetworks.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
7 years agomempool: update non-EAL thread note
Gage Eads [Thu, 30 Mar 2017 23:02:00 +0000 (18:02 -0500)]
mempool: update non-EAL thread note

Commit 30e6399892276 ("mempool: support non-EAL thread") added the
capability for non-EAL threads to use the mempool library. This commit
removes the note indicating that the mempool library cannot be used safely
by non-EAL threads, and replaces it with a more up-to-date note.

Signed-off-by: Gage Eads <gage.eads@intel.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
7 years agomk: use icc default inline limit
Ferruh Yigit [Mon, 27 Mar 2017 14:35:44 +0000 (15:35 +0100)]
mk: use icc default inline limit

ICC build time
Before this patch (bnx2x PMD enabled [1])
real    8m16.622s

After this patch (bnx2x enabled)
real    0m35.140s

[1]
bnx2x cause the build take a lot, otherwise build times are more sane
numbers.

ICC has a default inline limit and when this limit is hit it generates
a warning, and in DPDK this breaks the build.

Previous solution was to remove the inline limit, which does more
aggressive inlining and build may take too much time.

This patch keeps the default inline limits, but prevents the warning ICC
generates.

Fixes: 8acbad88c4fa ("mk: fix build with icc-15")

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
7 years agoigb_uio: use non-threaded ISR
David Su [Fri, 20 Jan 2017 23:08:19 +0000 (15:08 -0800)]
igb_uio: use non-threaded ISR

This eliminates the overhead of a task switch when an interrupt arrives.

Signed-off-by: David Su <david.w.su@intel.com>
Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
7 years agoigb_uio: map dummy DMA forcing IOMMU domain attachment
Alejandro Lucero [Wed, 18 Jan 2017 12:27:55 +0000 (12:27 +0000)]
igb_uio: map dummy DMA forcing IOMMU domain attachment

For using a DPDK app when iommu is enabled, it requires to
add iommu=pt to the kernel command line. But using igb_uio driver
makes DMAR errors because the device has not an IOMMU domain.

Since kernel 3.15, iommu=pt requires to use the internal kernel
DMA API for attaching the device to the IOMMU 1:1 mapping, aka
si_domain. Previous versions did attach the device to that
domain when intel iommu notifier was called.

This is not a problem if the driver does later some call to the
DMA API because the mapping can be done then. But DPDK apps do
not use that DMA API at all.

Doing this dma map and unmap is harmless even when iommu is not
enabled at all.

Signed-off-by: Alejandro Lucero <alejandro.lucero@netronome.com>
Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
7 years agovfio: support hotplug
Alejandro Lucero [Wed, 29 Mar 2017 09:54:50 +0000 (10:54 +0100)]
vfio: support hotplug

Current device hotplug is just supported by UIO managed devices.
This patch adds same functionality with VFIO.

It has been validated through tests using IOMMU and also with
VFIO and no-iommu mode.

Signed-off-by: Alejandro Lucero <alejandro.lucero@netronome.com>
Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
7 years agovfio: fix disabling INTx
Nikhil Rao [Tue, 28 Mar 2017 23:54:07 +0000 (05:24 +0530)]
vfio: fix disabling INTx

The flags member of irq_set should be ORed with VFIO_IRQ_SET_ACTION_MASK
and not VFIO_IRQ_SET_ACTION_UNMASK. The bug was found by code inspection.

Fixes: 5c782b3928b8 ("vfio: interrupts")
Cc: stable@dpdk.org
Signed-off-by: Nikhil Rao <nikhil.rao@intel.com>
Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
7 years agovfio: fix build on old kernel
Anatoly Burakov [Tue, 28 Mar 2017 15:53:43 +0000 (16:53 +0100)]
vfio: fix build on old kernel

Fixing compile failures for kernels without sPAPR IOMMU support.

Fixes: 0fe9830b5345 ("eal/ppc: support sPAPR IOMMU for vfio-pci")

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
7 years agokni: fix build with kernel 4.11
Ferruh Yigit [Tue, 21 Mar 2017 09:54:48 +0000 (09:54 +0000)]
kni: fix build with kernel 4.11

compile error:
.../build/build/lib/librte_eal/linuxapp/kni/kni_net.c:124:6:
error: implicit declaration of function ‘signal_pending’
[-Werror=implicit-function-declaration]
  if (signal_pending(current) || ret_val <= 0) {
      ^~~~~~~~~~~~~~

Linux 4.11 moves signal function declarations to its own header file:
Linux: 174cd4b1e5fb ("sched/headers: Prepare to move signal wakeup &
sigpending methods from <linux/sched.h> into <linux/sched/signal.h>")

Use new header file "linux/sched/signal.h" to fix the build error.

Cc: stable@dpdk.org
Reported-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
Tested-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
Tested-by: Pankaj Gupta <pagupta@redhat.com>
7 years agomk: fix dependencies to optional configs
Olivier Matz [Thu, 30 Mar 2017 12:32:28 +0000 (14:32 +0200)]
mk: fix dependencies to optional configs

In rte.lib.mk, the list of libraries passed to the link
command (LDLIBS) is generated from the DEPDIRS-xxx variables.
If a library is not compiled because it is disabled in
configuration, it should not appear in DEPDIRS-xxx.

- librte_port depends on librte_kni only if it is enabled.
- librte_table depends on librte_acl only if it is enabled.

Fixes: feb9f680cd2c ("mk: optimize directory dependencies")

Reported-by: Ferruh Yigit <ferruh.yigit@intel.com>
Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Tested-by: Ferruh Yigit <ferruh.yigit@intel.com>
7 years agonet/mlx5: implement descriptor status API
Olivier Matz [Wed, 29 Mar 2017 08:36:32 +0000 (10:36 +0200)]
net/mlx5: implement descriptor status API

Since there is no "descriptor done" flag like on Intel drivers, the
approach is different on mlx5 driver.
- for Tx, we call txq_complete() to free descriptors processed by
  the hw, then we check if the descriptor is between tail and head
- for Rx, we need to browse the cqes, managing compressed ones,
  to get the number of used descriptors.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
7 years agonet/i40e: implement descriptor status API
Olivier Matz [Wed, 29 Mar 2017 08:36:33 +0000 (10:36 +0200)]
net/i40e: implement descriptor status API

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
7 years agonet/ixgbe: implement descriptor status API
Olivier Matz [Wed, 29 Mar 2017 08:36:29 +0000 (10:36 +0200)]
net/ixgbe: implement descriptor status API

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
7 years agonet/igb: implement descriptor status API
Olivier Matz [Wed, 29 Mar 2017 08:36:30 +0000 (10:36 +0200)]
net/igb: implement descriptor status API

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
7 years agonet/e1000: implement descriptor status API
Olivier Matz [Wed, 29 Mar 2017 08:36:31 +0000 (10:36 +0200)]
net/e1000: implement descriptor status API

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
7 years agoethdev: add descriptor status API
Olivier Matz [Wed, 29 Mar 2017 08:36:28 +0000 (10:36 +0200)]
ethdev: add descriptor status API

Introduce a new API to get the status of a descriptor.

For Rx, it is almost similar to rx_descriptor_done API, except it
differentiates "used" descriptors (which are hold by the driver and not
returned to the hardware).

For Tx, it is a new API.

The descriptor_done() API, and probably the rx_queue_count() API could
be replaced by this new API as soon as it is implemented on all PMDs.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Reviewed-by: Andrew Rybchenko <arybchenko@solarflare.com>
7 years agoring: make struct and macros type agnostic
Bruce Richardson [Wed, 29 Mar 2017 15:21:30 +0000 (16:21 +0100)]
ring: make struct and macros type agnostic

Modify the enqueue and dequeue macros to support copying any type of
object by passing in the exact object type. Rather than using the "ring"
structure member of rte_ring, which is of type "array of void *", instead
have the macros take the start of the ring a a pointer value, thereby
leaving the rte_ring structure as purely a header value. This allows it
to be reused by other future ring types which can add on extra fields if
they want, or even to have the actual ring elements, of whatever type
stored separate from the ring header.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Reviewed-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
7 years agoring: create common function for updating tail index
Bruce Richardson [Wed, 29 Mar 2017 15:21:29 +0000 (16:21 +0100)]
ring: create common function for updating tail index

Both producer and consumer use the same logic for updating the tail
index so merge into a single function.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Reviewed-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
7 years agoring: separate out head index manipulation
Bruce Richardson [Wed, 29 Mar 2017 15:21:28 +0000 (16:21 +0100)]
ring: separate out head index manipulation

We can write a single common function for head manipulation for enq
and a common one for deq, allowing us to have a single worker function
for enq and deq, rather than two of each. Update all other inline
functions to use the new functions.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Reviewed-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
7 years agoring: reduce scope of local variables
Bruce Richardson [Wed, 29 Mar 2017 15:21:27 +0000 (16:21 +0100)]
ring: reduce scope of local variables

The local variable i is only used for loop control so define it in
the enqueue and dequeue blocks directly, rather than at the function
level.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Reviewed-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
7 years agoexamples/quota_watermark: use ring space for watermarks
Bruce Richardson [Wed, 29 Mar 2017 15:21:26 +0000 (16:21 +0100)]
examples/quota_watermark: use ring space for watermarks

Now that the enqueue function returns the amount of space in the ring,
we can use that to replace the old watermark functionality. Update the
example app to do so, and re-enable it in the examples Makefile.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Reviewed-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
7 years agoring: return remaining entry count when dequeuing
Bruce Richardson [Wed, 29 Mar 2017 15:21:25 +0000 (16:21 +0100)]
ring: return remaining entry count when dequeuing

Add an extra parameter to the ring dequeue burst/bulk functions so that
those functions can optionally return the amount of remaining objs in the
ring. This information can be used by applications in a number of ways,
for instance, with single-consumer queues, it provides a max
dequeue size which is guaranteed to work.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Reviewed-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
7 years agoring: return free space when enqueuing
Bruce Richardson [Wed, 29 Mar 2017 15:21:24 +0000 (16:21 +0100)]
ring: return free space when enqueuing

Add an extra parameter to the ring enqueue burst/bulk functions so that
those functions can optionally return the amount of free space in the
ring. This information can be used by applications in a number of ways,
for instance, with single-producer queues, it provides a max
enqueue size which is guaranteed to work. It can also be used to
implement watermark functionality in apps, replacing the older
functionality with a more flexible version, which enables apps to
implement multiple watermark thresholds, rather than just one.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Reviewed-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
7 years agoring: make bulk and burst return values consistent
Bruce Richardson [Wed, 29 Mar 2017 15:21:23 +0000 (16:21 +0100)]
ring: make bulk and burst return values consistent

The bulk fns for rings returns 0 for all elements enqueued and negative
for no space. Change that to make them consistent with the burst functions
in returning the number of elements enqueued/dequeued, i.e. 0 or N.
This change also allows the return value from enq/deq to be used directly
without a branch for error checking.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Reviewed-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
7 years agoring: remove watermark support
Bruce Richardson [Wed, 29 Mar 2017 15:21:22 +0000 (16:21 +0100)]
ring: remove watermark support

Remove the watermark support. A future commit will add support for having
enqueue functions return the amount of free space in the ring, which will
allow applications to implement their own watermark checks, while also
being more useful to the app.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Reviewed-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
7 years agoring: remove the yield when waiting for tail update
Bruce Richardson [Wed, 29 Mar 2017 15:21:21 +0000 (16:21 +0100)]
ring: remove the yield when waiting for tail update

There was a compile time setting to enable a ring to yield when
it entered a loop in mp or mc rings waiting for the tail pointer update.
Build time settings are not recommended for enabling/disabling features,
and since this was off by default, remove it completely. If needed, a
runtime enabled equivalent can be used.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Reviewed-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
7 years agoring: remove debug setting
Bruce Richardson [Wed, 29 Mar 2017 15:21:20 +0000 (16:21 +0100)]
ring: remove debug setting

The debug option only provided statistics to the user, most of
which could be tracked by the application itself. Remove this as a
compile time option, and feature, simplifying the code.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Reviewed-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
7 years agoring: eliminate duplication of size and mask fields
Bruce Richardson [Wed, 29 Mar 2017 15:21:19 +0000 (16:21 +0100)]
ring: eliminate duplication of size and mask fields

The size and mask fields are duplicated in both the producer and
consumer data structures. Move them out of that into the top level
structure so they are not duplicated.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Reviewed-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
7 years agoring: create common structure for prod and cons metadata
Bruce Richardson [Wed, 29 Mar 2017 15:21:18 +0000 (16:21 +0100)]
ring: create common structure for prod and cons metadata

create a common structure to hold the metadata for the producer and
the consumer, since both need essentially the same information - the
head and tail values, the ring size and mask.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Reviewed-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
7 years agoring: remove split cacheline build setting
Bruce Richardson [Wed, 29 Mar 2017 15:21:17 +0000 (16:21 +0100)]
ring: remove split cacheline build setting

Users compiling DPDK should not need to know or care about the arrangement
of cachelines in the rte_ring structure.  Therefore just remove the build
option and set the structures to be always split. On platforms with 64B
cachelines, for improved performance use 128B rather than 64B alignment
since it stops the producer and consumer data being on adjacent cachelines.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Reviewed-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
7 years agomaintainers: add to distributor lib maintainers
David Hunt [Mon, 20 Mar 2017 10:08:42 +0000 (10:08 +0000)]
maintainers: add to distributor lib maintainers

Signed-off-by: David Hunt <david.hunt@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
7 years agodoc: update distributor app guide for new burst API
David Hunt [Mon, 20 Mar 2017 10:08:41 +0000 (10:08 +0000)]
doc: update distributor app guide for new burst API

Changes in the thread layout described, with an updated diagram.

Signed-off-by: David Hunt <david.hunt@intel.com>
Acked-by: John McNamara <john.mcnamara@intel.com>
7 years agodoc: update distributor lib guide for new burst API
David Hunt [Mon, 20 Mar 2017 10:08:40 +0000 (10:08 +0000)]
doc: update distributor lib guide for new burst API

Signed-off-by: David Hunt <david.hunt@intel.com>
Acked-by: John McNamara <john.mcnamara@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
7 years agoexamples/distributor: give Rx thread a core
David Hunt [Mon, 20 Mar 2017 10:08:39 +0000 (10:08 +0000)]
examples/distributor: give Rx thread a core

Now that we're printing out a page of stats every second to the console,
we should give the stats it's own core so that we don't interfere with
the performance of the Rx core.

Signed-off-by: David Hunt <david.hunt@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
7 years agoexamples/distributor: tweak for performance
David Hunt [Mon, 20 Mar 2017 10:08:38 +0000 (10:08 +0000)]
examples/distributor: tweak for performance

This patch tunes Rx, Tx, and rte_distributor_process() burst sizes to
maximize performance.
It also addresses some checkpatch issues.
The result is approximately 10% performance increase.

Signed-off-by: David Hunt <david.hunt@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
7 years agoexamples/distributor: add dedicated core
David Hunt [Mon, 20 Mar 2017 10:08:37 +0000 (10:08 +0000)]
examples/distributor: add dedicated core

Give the distribution functionality it's own core for performance,
otherwise it's limited by the Rx core.

Signed-off-by: David Hunt <david.hunt@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
7 years agoexamples/distributor: wait for ports to come up
David Hunt [Mon, 20 Mar 2017 10:08:36 +0000 (10:08 +0000)]
examples/distributor: wait for ports to come up

On some machines, ports take several seconds to come up. This
patch causes the app to wait.

Signed-off-by: David Hunt <david.hunt@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
7 years agoexamples/distributor: allow for extra stats
David Hunt [Mon, 20 Mar 2017 10:08:35 +0000 (10:08 +0000)]
examples/distributor: allow for extra stats

This will allow us to see what's going on at various stages
throughout the sample app, with per-second visibility

Signed-off-by: David Hunt <david.hunt@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
7 years agotest/distributor: add performance test for burst mode
David Hunt [Mon, 20 Mar 2017 10:08:34 +0000 (10:08 +0000)]
test/distributor: add performance test for burst mode

Signed-off-by: David Hunt <david.hunt@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
7 years agotest/distributor: test single and burst API
David Hunt [Mon, 20 Mar 2017 10:08:33 +0000 (10:08 +0000)]
test/distributor: test single and burst API

Signed-off-by: David Hunt <david.hunt@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
7 years agodistributor: add symbol versioning
David Hunt [Mon, 20 Mar 2017 10:08:32 +0000 (10:08 +0000)]
distributor: add symbol versioning

Signed-off-by: David Hunt <david.hunt@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
7 years agodistributor: switch over to new API
David Hunt [Mon, 20 Mar 2017 10:08:30 +0000 (10:08 +0000)]
distributor: switch over to new API

This is the main switch over between the legacy API and the new
burst API. We rename all the functions in rte_distributor.c to remove
the _v1705, and we add in _v20 in the rte_distributor_v20.c

We also rename the rte_distributor_next.h as rte_distributor.h, as
this is now the public header.

At the same time, we need the autotests and sample app to compile
properly, hence those changes are in this patch also.

Signed-off-by: David Hunt <david.hunt@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
7 years agotest/distributor: add extra parameters
David Hunt [Mon, 20 Mar 2017 10:08:29 +0000 (10:08 +0000)]
test/distributor: add extra parameters

In the next few patches, we'll want to test old and new API,
so here we're allowing different parameters to be passed to
the tests, instead of just a distributor struct.

Signed-off-by: David Hunt <david.hunt@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
7 years agodistributor: add SIMD flow matching
David Hunt [Mon, 20 Mar 2017 10:08:28 +0000 (10:08 +0000)]
distributor: add SIMD flow matching

Add an optimised version of the in-flight flow matching algorithm
using SIMD instructions. This should give up to 1.5x over the scalar
versions performance.

Falls back to scalar version if SSE4.2 not available

Signed-off-by: David Hunt <david.hunt@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
7 years agodistributor: add new burst-capable library
David Hunt [Mon, 20 Mar 2017 10:08:27 +0000 (10:08 +0000)]
distributor: add new burst-capable library

This patch includes the code for new burst-capable distributor library.

It also includes the rte_distributor_next.h file which will
be used as the public header once we add in the symbol versioning
for v20 and v1705 APIs, at which stage we will rename it to
rte_distributor.h.

The new distributor code contains a very similar API to the legacy code,
but now sends bursts of up to 8 mbufs to each worker. Flow ID's are
reduced to 15 bits for an optimal flow matching algorithm.

Signed-off-by: David Hunt <david.hunt@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
7 years agodistributor: create private header file
David Hunt [Mon, 20 Mar 2017 10:08:26 +0000 (10:08 +0000)]
distributor: create private header file

We'll be adding internal implementation definitions in here
that are common to both burst and legacy APIs.

Signed-off-by: David Hunt <david.hunt@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
7 years agodistributor: rename legacy files
David Hunt [Mon, 20 Mar 2017 10:08:25 +0000 (10:08 +0000)]
distributor: rename legacy files

Move files out of the way so that we can replace with new
versions of the distributor library. Files are named in
such a way as to match the symbol versioning that we will
apply for backward ABI compatibility.

Signed-off-by: David Hunt <david.hunt@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
7 years agocrypto/scheduler: fix include of local headers
Bruce Richardson [Tue, 28 Mar 2017 10:58:16 +0000 (11:58 +0100)]
crypto/scheduler: fix include of local headers

When a C file for a library/driver is including the public header files for
that library, those need to be included as local includes using quotes
rather than angle-brackets. Without doing so, parallel builds can fail, as
the compiler will only look for those headers in the global include folder
rather than locally, and the build system does not enforce that the headers
for a lib are installed before the rest of the lib is compiled.

Fixes: 097ab0bac017 ("crypto/scheduler: add API")
Fixes: 503e9c5afb38 ("crypto/scheduler: register as vdev driver")
Fixes: 31439ee72b2c ("crypto/scheduler: add API implementations")
Cc: stable@dpdk.org
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
7 years agonet/xenvirt: fix missing dependency on cmdline lib
Bruce Richardson [Tue, 28 Mar 2017 09:23:33 +0000 (10:23 +0100)]
net/xenvirt: fix missing dependency on cmdline lib

Xenvirt driver uses the cmdline lib for parsing ether addresses so add it
as a dependency to fix builds.

Fixes: feb9f680cd2c ("mk: optimize directory dependencies")

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
7 years agodrivers/crypto: use ring size function
Bruce Richardson [Mon, 27 Mar 2017 14:54:40 +0000 (15:54 +0100)]
drivers/crypto: use ring size function

Rather than reading the size directly from the ring structure, use the
dedicated ring function for that purpose.
Previous commits to do this only did so for the null crypto driver which
was the only one compiled in by default, but all other drivers need to be
similarly updated.

Fixes: b11c78a2e0c6 ("crypto/null: use ring size function")

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
7 years agoeal/bsd: query the cpu count only once
Bruce Richardson [Thu, 23 Mar 2017 15:09:58 +0000 (15:09 +0000)]
eal/bsd: query the cpu count only once

Rather than querying the number of CPUs on the system multiple times, and
printing out the number each time, just query the value from sysctl once
and store it for future reuse.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
7 years agodevtools: make log checking script BSD-compatible
Bruce Richardson [Thu, 23 Mar 2017 15:09:26 +0000 (15:09 +0000)]
devtools: make log checking script BSD-compatible

The -e flag to readlink doesn't exist on FreeBSD so change it to -f instead
which is present on both BSD and Linux. Error reported is:

  readlink: illegal option -- e
  usage: readlink [-fn] [file ...]
  usage: dirname string [...]
  ./devtools/check-git-log.sh: /git-log-fixes.sh: not found

Fixes: 814c8822ef7b ("scripts: check cc stable mailing list in commit")

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
7 years agomk: optimize directory dependencies
Olivier Matz [Fri, 24 Mar 2017 13:21:31 +0000 (14:21 +0100)]
mk: optimize directory dependencies

Before this patch, the management of dependencies between directories
had several issues:

- the generation of .depdirs, done at configuration is slow: it can take
  more than one minute on some slow targets (usually ~10s on a standard
  PC without -j).

- for instance, it is possible to express a dependency like:
  - app/foo depends on lib/librte_foo
  - and lib/librte_foo depends on app/bar
  But this won't work because the directories are traversed with a
  depth-first algorithm, so we have to choose between doing 'app' before
  or after 'lib'.

- the script depdirs-rule.sh is too complex.

- we cannot use "make -d" for debug, because the output of make is used for
  the generation of .depdirs.

This patch moves the DEPDIRS-* variables in the upper Makefile, making
the dependencies much easier to calculate. A DEPDIRS variable is still
used to process library dependencies in LDLIBS.

After this commit, "make config" is almost immediate.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Tested-by: Robin Jarry <robin.jarry@6wind.com>
Tested-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
7 years agonet/vhost: free consumed Tx buffers on demand
Billy McFall [Fri, 24 Mar 2017 18:55:55 +0000 (14:55 -0400)]
net/vhost: free consumed Tx buffers on demand

Add support to the vHostdriver for the new API to force free consumed
buffers on Tx ring. vHost does not cache the mbufs so there is no work
to do.

Signed-off-by: Billy McFall <bmcfall@redhat.com>
Acked-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Acked-by: Keith Wiles <keith.wiles@intel.com>
7 years agonet/igb: free consumed Tx buffers on demand
Billy McFall [Fri, 24 Mar 2017 18:55:54 +0000 (14:55 -0400)]
net/igb: free consumed Tx buffers on demand

Add support to the e1000 igb driver for the new API to force free
consumed buffers on Tx ring. This API is independent of the tx_rs_thresh
setting. With this API, buffers should be free even if tx_rs_thresh is
not met.

e1000 igb driver does not implement a tx_rs_thresh to free mbufs, it
frees a slot in the ring as needed. However, it could be implemented at
some future date.

Signed-off-by: Billy McFall <bmcfall@redhat.com>
Acked-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
Acked-by: Keith Wiles <keith.wiles@intel.com>
7 years agoethdev: add API to free consumed buffers in Tx ring
Billy McFall [Fri, 24 Mar 2017 18:55:53 +0000 (14:55 -0400)]
ethdev: add API to free consumed buffers in Tx ring

Add a new API to force free consumed buffers on Tx ring. API will return
the number of packets freed (0-n) or error code if feature not supported
(-ENOTSUP) or input invalid (-ENODEV).

Signed-off-by: Billy McFall <bmcfall@redhat.com>
Acked-by: Keith Wiles <keith.wiles@intel.com>
7 years agoeal: add info about various init error codes
Aaron Conole [Wed, 22 Mar 2017 20:19:40 +0000 (16:19 -0400)]
eal: add info about various init error codes

The rte_eal_init function will now pass failure reason hints to the
application.  To help app developers decipher this, add some brief
information about what the codes are indicating.

Signed-off-by: Aaron Conole <aconole@redhat.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
7 years agoeal: do not panic on bus probe/scan failure
Aaron Conole [Wed, 22 Mar 2017 20:19:39 +0000 (16:19 -0400)]
eal: do not panic on bus probe/scan failure

For now, exit the init.  It's likely that even aborting the initialization
is premature in this case, as it may be possible to proceed even if one
bus or another is not available.

Signed-off-by: Aaron Conole <aconole@redhat.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
7 years agoeal: do not panic on vdev init failure
Aaron Conole [Wed, 22 Mar 2017 20:19:38 +0000 (16:19 -0400)]
eal: do not panic on vdev init failure

Even if one vdev should fail, there's no need to prevent further
processing.  Log the error, and reflect it to the higher levels to
decide.

Seems like it's possible to continue.  At least, the error is reflected
properly in the logs.  A user could then go and correct or investigate
the situation.

Signed-off-by: Aaron Conole <aconole@redhat.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
7 years agoeal: do not panic on PCI failures
Aaron Conole [Wed, 22 Mar 2017 20:19:37 +0000 (16:19 -0400)]
eal: do not panic on PCI failures

Some devices may be inaccessible for a variety of reasons, or the
PCI-bus may be unavailable causing the whole thing to fail.  Still,
better to continue attempts at probes.

Since PCI isn't neccessarily required, it may be possible to simply log
the error and continue on letting the user check the logs and restart
the application when things have failed.

This will usually be an issue because of permissions.  However, it could
also be caused by OOM.  In either case, errno will contain the
underlying cause.

For linux, it is safe to re-init the system here, so allow the
application to take corrective action and reinit.

For BSD, this is not the case, for other reasons, including hugepage
allocation has already happened, and needs to be properly uninitialized.

Signed-off-by: Aaron Conole <aconole@redhat.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
7 years agoeal: do not panic if plugins fail to init
Aaron Conole [Wed, 22 Mar 2017 20:19:36 +0000 (16:19 -0400)]
eal: do not panic if plugins fail to init

Plugins are useful and important.  However, it seems crazy to abort
everything just because they don't initialize properly.

Signed-off-by: Aaron Conole <aconole@redhat.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
7 years agoeal: do not panic on interrupt thread init
Aaron Conole [Wed, 22 Mar 2017 20:19:35 +0000 (16:19 -0400)]
eal: do not panic on interrupt thread init

There could be some confusion as to why the call failed - this change
will always reflect the value of the error in rte_error.

When initializing the interrupt thread, there are a number of possible
reasons for failure - some of which are correctable by the application.
Do not panic() needlessly, and give the application a change to reflect
this information to the user.

Signed-off-by: Aaron Conole <aconole@redhat.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
7 years agoeal: do not panic on timer init failure
Aaron Conole [Wed, 22 Mar 2017 20:19:34 +0000 (16:19 -0400)]
eal: do not panic on timer init failure

After code inspection, there is no way for eal_timer_init() to fail.  It
simply returns 0 in all cases.  As such, this test could either go-away
or stay here as 'future-proofing'.

Signed-off-by: Aaron Conole <aconole@redhat.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
7 years agoeal: do not panic on a number of conditions
Aaron Conole [Wed, 22 Mar 2017 20:19:33 +0000 (16:19 -0400)]
eal: do not panic on a number of conditions

When log initialization fails, it's generally because the fopencookie
failed.  While this is rare in practice, it could happen, and it is
likely because of memory pressure.  So, flag the error, and allow the
user to retry.

Memory init can only fail when access to hugepages (either as primary or
secondary process) fails (and that is usually permissions).  Since the
manner of failure is not reversible, we cannot allow retry.

There are some theoretical racy conditions in the system that _could_
cause early tailq init to fail;  however, no need to panic the
application.  While it can't continue using DPDK, it could make better
alerts to the user.

rte_eal_alarm_init() call uses the linux timerfd framework to create a
poll()-able timer using standard posix file operations.  This could fail
for a few reasons given in the man-pages, but many could be
corrected by the user application.  No need to panic.

Signed-off-by: Aaron Conole <aconole@redhat.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
7 years agoeal: set errno when exiting for already initialized
Aaron Conole [Wed, 22 Mar 2017 20:19:32 +0000 (16:19 -0400)]
eal: set errno when exiting for already initialized

Signed-off-by: Aaron Conole <aconole@redhat.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>