dpdk.git
7 years agoapp/test: fix ring size
Jerin Jacob [Mon, 18 Jul 2016 05:55:54 +0000 (11:25 +0530)]
app/test: fix ring size

rte_ring_create expects the size of the ring to
be a power of 2. REFCNT_RING_SIZE value is not
power of 2 in-case if RTE_MAX_LCORE == 96.
Fix it by aligning the size to next power of 2 value.

Fixes: af75078f ("first public release")

Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
7 years agoring: guarantee dequeue ordering before tail update
Juhamatti Kuusisaari [Fri, 15 Jul 2016 04:39:51 +0000 (07:39 +0300)]
ring: guarantee dequeue ordering before tail update

Consumer queue dequeuing must be guaranteed to be done fully before
the tail is updated. This is not guaranteed with a read barrier,
changed to a write barrier just before tail update which in practice
guarantees correct order of reads and writes.

Signed-off-by: Juhamatti Kuusisaari <juhamatti.kuusisaari@coriant.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
7 years agomempool: fix missing registration of free function
Zoltan Kiss [Wed, 20 Jul 2016 17:14:00 +0000 (18:14 +0100)]
mempool: fix missing registration of free function

The new mempool handler interface forgets to register the free() function
of the ops. Introduced in this patch:

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

Signed-off-by: Zoltan Kiss <zoltan.kiss@schaman.hu>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
7 years agomempool: adjust name size in related data types
Zoltan Kiss [Wed, 20 Jul 2016 17:16:38 +0000 (18:16 +0100)]
mempool: adjust name size in related data types

A recent patch brought up an issue about the size of the 'name' fields:

85cf0079 mem: avoid memzone/mempool/ring name truncation

These relations should be observed:

1. Each ring creates a memzone with a prefixed name:
RTE_RING_NAMESIZE <= RTE_MEMZONE_NAMESIZE - strlen(RTE_RING_MZ_PREFIX)

2. There are some mempool handlers which create a ring with a prefixed
name:
RTE_MEMPOOL_NAMESIZE <= RTE_RING_NAMESIZE - strlen(RTE_MEMPOOL_MZ_PREFIX)

3. A mempool can create up to RTE_MAX_MEMZONE pre and postfixed memzones:
sprintf(postfix, "_%d", RTE_MAX_MEMZONE)
RTE_MEMPOOL_NAMESIZE <= RTE_MEMZONE_NAMESIZE -
strlen(RTE_MEMPOOL_MZ_PREFIX) - strlen(postfix)

Setting all of them to 32 hides this restriction from the application.
This patch decreases the mempool and ring string size to accommodate for
these prefixes, but it doesn't apply the 3rd constraint. Applications
relying on these constants need to be recompiled, otherwise they'll run
into ENAMETOOLONG issues.
The size of the arrays are kept 32 for ABI compatibility, it can be
decreased next time the ABI changes.

Signed-off-by: Zoltan Kiss <zoltan.kiss@schaman.hu>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
7 years agomem: allow full length name
Zoltan Kiss [Wed, 20 Jul 2016 17:16:39 +0000 (18:16 +0100)]
mem: allow full length name

(strlen(name) == sizeof(mz->name) - 1) is a valid case, change the
condition to reflect that.
Move it earlier to avoid lookup with invalid name.
Change errno to ENAMETOOLONG.

Fixes: 85cf0079 ("mem: avoid memzone/mempool/ring name truncation")

Signed-off-by: Zoltan Kiss <zoltan.kiss@schaman.hu>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
7 years agoeal/ppc: fix memory barrier for IBM POWER
Chao Zhu [Fri, 15 Jul 2016 02:30:19 +0000 (10:30 +0800)]
eal/ppc: fix memory barrier for IBM POWER

On weak memory order architecture like POWER, rte_smp_wmb/rte_smp_rmb
need to use CPU instructions, not compiler barrier. This patch fixes
this. Also, to improve performance on PPC64, use light weight sync
instruction instead of sync instruction.

Signed-off-by: Chao Zhu <chaozhu@linux.vnet.ibm.com>
7 years agomk: fix FreeBSD build
Sergio Gonzalez Monroy [Tue, 19 Jul 2016 13:40:37 +0000 (14:40 +0100)]
mk: fix FreeBSD build

The sed syntax of '0,/regexp/' is GNU specific and fails with
non GNU sed in FreeBSD.

To solve the issue we can use awk instead to remove duplicates.

The awk script basically keeps the last config value, while
maintaining order and comments from original config file.

Fixes: b2063f104db7 ("mk: filter duplicate configuration entries")

Signed-off-by: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
Acked-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
7 years agomk: fix static link with glibc < 2.17
Thomas Monjalon [Mon, 18 Jul 2016 09:33:52 +0000 (11:33 +0200)]
mk: fix static link with glibc < 2.17

There is an error when linking static EAL library with an application:

eal_alarm.c:(.text+0xd7): undefined reference to `clock_gettime'
eal_alarm.c:(.text+0x20f): undefined reference to `clock_gettime'
eal_timer.c:(.text+0x108): undefined reference to `clock_gettime'
eal_timer.c:(.text+0x146): undefined reference to `clock_gettime'

The function clock_gettime() is in librt for old glibc.

Fixes: 281948b4753e ("mk: fix missing librt dependencies")

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Tested-by: Yongjie Gu <yongjiex.gu@intel.com>
7 years agoversion: 16.07-rc3
Thomas Monjalon [Sat, 16 Jul 2016 14:48:06 +0000 (16:48 +0200)]
version: 16.07-rc3

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
7 years agomaintainers: claim responsibility for KNI
Ferruh Yigit [Thu, 7 Jul 2016 11:00:29 +0000 (12:00 +0100)]
maintainers: claim responsibility for KNI

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
Acked-by: Helin Zhang <helin.zhang@intel.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
7 years agodoc: fix mailing list address typo
Jeff Shaw [Wed, 13 Jul 2016 11:51:02 +0000 (04:51 -0700)]
doc: fix mailing list address typo

The correct mailing list dev@dpdk.org, not dev@dpkg.org.

Signed-off-by: Jeff Shaw <jeffrey.b.shaw@intel.com>
Reviewed-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
Acked-by: John McNamara <john.mcnamara@intel.com>
7 years agodoc: fix consumer/producer mixup in ring guide
Shreyansh Jain [Tue, 12 Jul 2016 09:44:43 +0000 (15:14 +0530)]
doc: fix consumer/producer mixup in ring guide

Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
Acked-by: John McNamara <john.mcnamara@intel.com>
7 years agodoc: fix grammatical syntax in EAL guide
Shreyansh Jain [Tue, 12 Jul 2016 09:28:26 +0000 (14:58 +0530)]
doc: fix grammatical syntax in EAL guide

Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
Acked-by: John McNamara <john.mcnamara@intel.com>
7 years agodoc: add pdump shared library version to release notes
Reshma Pattan [Wed, 6 Jul 2016 15:57:40 +0000 (16:57 +0100)]
doc: add pdump shared library version to release notes

Added missing librte_pdump shared library version to release notes.

Signed-off-by: Reshma Pattan <reshma.pattan@intel.com>
Acked-by: John McNamara <john.mcnamara@intel.com>
7 years agodoc: add pcap dependency note to pdump guide
Reshma Pattan [Wed, 6 Jul 2016 15:57:39 +0000 (16:57 +0100)]
doc: add pcap dependency note to pdump guide

Added a missing note about dependencies on libpcap and
CONFIG_RTE_LIBRTE_PMD_PCAP flag that pdump tool has.

Signed-off-by: Reshma Pattan <reshma.pattan@intel.com>
Acked-by: John McNamara <john.mcnamara@intel.com>
7 years agodoc: fix default socket path names in pdump guide
Reshma Pattan [Wed, 13 Jul 2016 16:29:10 +0000 (17:29 +0100)]
doc: fix default socket path names in pdump guide

Fixed default socket path name "/var/run" to "/var/run/.dpdk" and
"$HOME" to "~/.dpdk".

Fixes: 278f945402c5 ("pdump: add new library for packet capture")

Signed-off-by: Reshma Pattan <reshma.pattan@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
7 years agoapp/pdump: add command line options for socket paths
Reshma Pattan [Wed, 13 Jul 2016 16:29:09 +0000 (17:29 +0100)]
app/pdump: add command line options for socket paths

Since users of the pdump library and tool can chose to have their own
server and client paths, it is must for the pdump tool to use the same
server socket path that was used by primary application while
initializing packet capture framework by rte_pdump_init() or
rte_pdump_set_socket_dir() APIs.

To pass the socket path info to pdump tool a new optional command
line options "server-socket-path" and "client-socket-path" are added.

"client-socket-path" is also added, if the users want to have client
sockets in their own defined paths.

Updated pdump tool guide with the new changes.

Fixes: caa7028276b8 ("app/pdump: add tool for packet capturing")

Signed-off-by: Reshma Pattan <reshma.pattan@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
7 years agopdump: fix error handlings
Reshma Pattan [Wed, 13 Jul 2016 16:29:08 +0000 (17:29 +0100)]
pdump: fix error handlings

The changes include
1)If mkdir fails for user passed socket paths log error and return.

2)At some places return value was set to errno and that non-negative number
was returned, but the intention was to return negative value.
So now rte_errno was set to errno and returning the actual negative value
that the APIs has returned.

Fixes: 278f945402c5 ("pdump: add new library for packet capture")

Signed-off-by: Reshma Pattan <reshma.pattan@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
7 years agoip_frag: fix doxygen formatting
Hiroyuki Mikita [Wed, 6 Jul 2016 20:48:45 +0000 (05:48 +0900)]
ip_frag: fix doxygen formatting

This commit fixes some functions missing in API documentation.

Signed-off-by: Hiroyuki Mikita <h.mikita89@gmail.com>
7 years agoexamples/ipsec-secgw: fix inbound crash
Sergio Gonzalez Monroy [Tue, 12 Jul 2016 12:49:35 +0000 (13:49 +0100)]
examples/ipsec-secgw: fix inbound crash

When sending Inbound non IPSec traffic that matches an Inbound Security
Policy set to Protect, the code will check that the SPI of the packet
and the associated Security Association match.

That check should only be done for IPSec packets and results in SEGFAULT
when done on non IPSec packets.

Fixes: 906257e965b7 ("examples/ipsec-secgw: support IPv6")

Signed-off-by: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
7 years agoexamples/l2fwd-crypto: improve random key generator
Piotr Azarewicz [Wed, 25 May 2016 13:34:52 +0000 (15:34 +0200)]
examples/l2fwd-crypto: improve random key generator

This patch improve generate_random_key() function by replacing rand()
function with reading from /dev/urandom.

CID 120136 : Calling risky function (DC.WEAK_CRYPTO)
dont_call: rand should not be used for security related applications, as
linear congruential algorithms are too easy to break

Coverity issue: 120136

Signed-off-by: Piotr Azarewicz <piotrx.t.azarewicz@intel.com>
Acked-by: Declan Doherty <declan.doherty@intel.com>
7 years agoexamples/distributor: fix Rx thread logic for zero packet
Reshma Pattan [Thu, 14 Jul 2016 15:48:45 +0000 (16:48 +0100)]
examples/distributor: fix Rx thread logic for zero packet

Zero packets can be returned by rte_eth_rx_burst() and
rte_distributor_returned_pkts() inside lcore_rx(), so
for zero packet scenario instead of proceeding to
next operations we should continue to the next iteration of the
loop to avoid unnecessary processing overhead which is causing
rx packets to be dropped and hence distributor failing to forward the
packets.

Fixes: 07db4a97 ("examples/distributor: new sample app")

Signed-off-by: Reshma Pattan <reshma.pattan@intel.com>
Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
7 years agoapp/testpmd: remove redundant timer update
Reshma Pattan [Fri, 15 Jul 2016 09:19:10 +0000 (10:19 +0100)]
app/testpmd: remove redundant timer update

Inside flush_fwd_rx_queues removed redundant prev_tsc update with cur_tsc,
as prev_tsc value is always updated with rte_rdtsc() in for loop.

Coverity issue: 127797
Fixes: f487715f36f5 ("app/testpmd: add timeout in Rx queue flushing")

Signed-off-by: Reshma Pattan <reshma.pattan@intel.com>
Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
7 years agonet/enic: fix crash on error interrupt
Nelson Escobar [Thu, 14 Jul 2016 01:09:17 +0000 (18:09 -0700)]
net/enic: fix crash on error interrupt

When enic's interrupt handler is called indicating an error, it scans
through the receive queues (RQs) on the adapter looking for errors.
But since the inclusion of rx scatter, some of the RQs may not be in
use, and you shouldn't check them for errors.

Fixes: 856d7ba7ed22 ("net/enic: support scattered Rx")

Signed-off-by: Nelson Escobar <neescoba@cisco.com>
Reviewed-by: John Daley <johndale@cisco.com>
7 years agonet/enic: fix calculation of truncated packets
Nelson Escobar [Wed, 13 Jul 2016 16:52:34 +0000 (09:52 -0700)]
net/enic: fix calculation of truncated packets

The calculation of truncated packets didn't take into account packet
errors due to the adapter not having buffers, causing both the
ipackets, and imissed counts to be wrong if such errors occurred.  In
order to properly calculate the number of packets truncated, we need
to subtract the count of errors due to no buffers.

Fixes: c44d9f01adf3 ("net/enic: count truncated packets")

Signed-off-by: Nelson Escobar <neescoba@cisco.com>
7 years agonet/enic: fix queue stop and start
John Daley [Tue, 12 Jul 2016 19:24:47 +0000 (12:24 -0700)]
net/enic: fix queue stop and start

The exported device start and stop functions where not setting the queue
states to RTE_ETH_QUEUE_STATE_STARTED and RTE_ETH_QUEUE_STATE_STOPPED.
After starting the device, the RTE queue stop function would not call
the enic queue stop function since queue was already marked as stopped.

Put queue state updates in the lower level queue start/stop functions
which are called by both device and queue start/stop functions.

Fixes: fefed3d1e62c ("enic: new driver")

Reviewed-by: Nelson Escobar <neescoba@cisco.com>
Signed-off-by: John Daley <johndale@cisco.com>
7 years agonet/enic: fix crash when changing number of queues
John Daley [Sun, 10 Jul 2016 21:15:30 +0000 (14:15 -0700)]
net/enic: fix crash when changing number of queues

The check that all Tx and Rx queues were set up was not
adequate when reconfiguring with a different number of
queues. Only the number of completion queues (CQs) was
being used to make the determination, but the CQ array
is shared between the underlying Rx and Tx queues.

Check that the internal Rx, Tx and CQs are all set up
before completing port configuration.

Fixes: fefed3d1e62c ("enic: new driver")

Signed-off-by: John Daley <johndale@cisco.com>
Reviewed-by: Nelson Escobar <neescoba@cisco.com>
7 years agonet/enic: increment filter failure counter
John Daley [Fri, 8 Jul 2016 22:22:01 +0000 (15:22 -0700)]
net/enic: increment filter failure counter

One instance of a filter add failure was not incrementing the
the fail counter.

Fixes: 4c2c7bf41f5a ("net/enic: fix negative array index write")

Signed-off-by: John Daley <johndale@cisco.com>
7 years agonet/enic: decrement Tx mbuf reference count before recycling
John Daley [Mon, 11 Jul 2016 19:45:01 +0000 (12:45 -0700)]
net/enic: decrement Tx mbuf reference count before recycling

In the burst Tx cleanup function, the reference count in mbufs
returned to the pool should to be decremented before they are
returned. Decrementing is not done by rte_mempool_put_bulk()
so it must be done separately using __rte_pktmbuf_prefree_seg().

Also when returning unsent buffers when the device is stopped
use rte_mbuf_free_seg() instead of rte_mempool_put() so that
reference counts are properly decremented.

Fixes: 36935afbc53c ("net/enic: refactor Tx mbuf recycling")

Reviewed-by: Nelson Escobar <neescoba@cisco.com>
Signed-off-by: John Daley <johndale@cisco.com>
7 years agonet/enic: remove internal driver version
John Daley [Fri, 15 Jul 2016 19:34:53 +0000 (12:34 -0700)]
net/enic: remove internal driver version

The enic PMD code has diverged from code that was once
shared with the enic kernel mode driver for performance
reasons. It is confusing and misleading to print the
internal version number. Remove it.

Fixes: fefed3d1e62c ("enic: new driver")

Signed-off-by: John Daley <johndale@cisco.com>
7 years agonet/mlx5: work around gcc error
Olga Shern [Wed, 13 Jul 2016 14:33:22 +0000 (16:33 +0200)]
net/mlx5: work around gcc error

RHEL 7.1's GCC for POWER8 reports the following error in one rte_memcpy()
macro call by mlx5:

 error: array subscript is above array bounds [-Werror=array-bounds]

It appears to be a GCC bug which can be worked around by making parentheses
more explicit.

Signed-off-by: Olga Shern <olgas@mellanox.com>
Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
7 years agonet/fm10k: fix FTAG mode with multiple queues
Xiao Wang [Fri, 15 Jul 2016 10:38:40 +0000 (18:38 +0800)]
net/fm10k: fix FTAG mode with multiple queues

In multi-queue + FTAG use case, we need to turn tx_ftag_en on for all
the Tx queues.

Fixes: 7958b1310d5e ("fm10k: enable FTAG based forwarding")

Reported-by: Ricky Li <ricky.li@intel.com>
Signed-off-by: Xiao Wang <xiao.w.wang@intel.com>
7 years agonet/i40e: revert VLAN filtering fix
Jingjing Wu [Wed, 13 Jul 2016 10:27:50 +0000 (18:27 +0800)]
net/i40e: revert VLAN filtering fix

This reverts commit 4761f57d58c6f52543738dbe299f846d62d75895.
Introducing VLAN table by adding VLAN adminq command will cause NIC's
throughput drop obviously. It's a hardware issue.
With this revert, VLAN filtering can only work when promiscuous mode
is disabled.

Reverts: 4761f57d58c6 ("net/i40e: fix VLAN filtering in promiscuous mode")

Reported-by: Jeff Shaw <jeffrey.b.shaw@intel.com>
Signed-off-by: Jingjing Wu <jingjing.wu@intel.com>
Acked-by : Jing Chen <jing.d.chen@intel.com>

7 years agonet/virtio-user: fix build with gcc 6
Maxime Coquelin [Tue, 12 Jul 2016 09:30:25 +0000 (11:30 +0200)]
net/virtio-user: fix build with gcc 6

The error is reported using test build script:

$ scripts/test-build.sh x86_64-native-linuxapp-gcc
...
drivers/net/virtio/virtio_user_ethdev.c:345:2: error:
  this ‘if’ clause does not guard... [-Werror=misleading-indentation]
  if (rte_kvargs_count(kvlist, VIRTIO_USER_ARG_PATH) == 1)
    ^~

Fixes: 404bd6bfe360 ("net/virtio-user: fix return value not checked")

Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
7 years agovhost: fix crash when exceeding file descriptors
Patrik Andersson [Wed, 6 Jul 2016 12:24:58 +0000 (14:24 +0200)]
vhost: fix crash when exceeding file descriptors

Protect against DPDK crash when allocation of listen fd >= 1023.
For events on fd:s >1023, the current implementation will trigger
an abort due to access outside of allocated bit mask.

Corrections would include:

  * Match fdset_add() signature in fd_man.c to fd_man.h
  * Handling of return codes from fdset_add()
  * Addition of check of fd number in fdset_add_fd()

The rationale behind the suggested code change is that,
fdset_event_dispatch() could attempt access outside of the FD_SET
bitmask if there is an event on a file descriptor that in turn
looks up a virtio file descriptor with a value > 1023.
Such an attempt will lead to an abort() and a restart of any
vswitch using DPDK.

A discussion topic exist in the ovs-discuss mailing list that can
provide a little more background:
http://openvswitch.org/pipermail/discuss/2016-February/020243.html

Fixes: 8f972312 ("vhost: support vhost-user")

Signed-off-by: Patrik Andersson <patrik.r.andersson@ericsson.com>
Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
7 years agovhost: check ring descriptor address
Ilya Maximets [Fri, 15 Jul 2016 11:15:05 +0000 (14:15 +0300)]
vhost: check ring descriptor address

In current implementation vhost will crash with segmentation fault
if malicious or buggy virtio application breaks addresses of descriptors.

Before commit 0823c1cb0a73 ("vhost: workaround stale vring base")
this crash was reproducible even with normal DPDK application that tries
to change number of virtqueues dynamically inside VM.

Fix that by checking addresses of descriptors before using.

Signed-off-by: Ilya Maximets <i.maximets@samsung.com>
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
7 years agovhost: fix used descriptors number of mergeable enqueue
Ilya Maximets [Fri, 15 Jul 2016 11:15:04 +0000 (14:15 +0300)]
vhost: fix used descriptors number of mergeable enqueue

Return value on error changed from '-1' to '0' because it returns
unsigned value and it means number of used descriptors.

Also fixed updating of 'last_used_idx' by using actual number of
used descriptors.

Fixes: 623bc47054d0 ("vhost: do sanity check for ring descriptor length")

Signed-off-by: Ilya Maximets <i.maximets@samsung.com>
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
7 years agovfio: fix coding style
Yong Wang [Thu, 7 Jul 2016 22:26:37 +0000 (15:26 -0700)]
vfio: fix coding style

Signed-off-by: Yong Wang <yongwang@vmware.com>
7 years agovfio: fix PCI resource mapping
Yong Wang [Fri, 15 Jul 2016 00:15:10 +0000 (17:15 -0700)]
vfio: fix PCI resource mapping

The offset of the 2nd mmap() when mapping the region after msix_bar
needs to take region address into consideration as mmap() takes
address that is resource-relative instead of bar-relative.  This is
exposed when binding vmxnet3 to vfio-pci.

Fixes: 90a1633b2347 ("eal/linux: allow to map BARs with MSI-X tables")

Signed-off-by: Yong Wang <yongwang@vmware.com>
Signed-off-by: Ronghua Zhang <rzhang@vmware.com>
Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
7 years agomempool: fix empty structure definition
Adrien Mazarguil [Wed, 13 Jul 2016 12:30:41 +0000 (14:30 +0200)]
mempool: fix empty structure definition

This commit addresses the following warning reported by clang, which
happens by default, as long as CONFIG_RTE_LIBRTE_MEMPOOL_DEBUG is disabled:

 warning: empty struct has size 0 in C, size 1 in C++

C and C++ must use the same size for objects to avoid corruption during run
time.

Fixes: 97e7e685bfcd ("mempool: add structure for object trailers")

Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
7 years agospinlock: move constructor out of x86 header file
Damjan Marion [Thu, 14 Jul 2016 13:27:29 +0000 (15:27 +0200)]
spinlock: move constructor out of x86 header file

Having constructor function in the header file is generally
a bad idea, as it will eventually be implanted to 3rd party
library.

In this case it causes linking issues with 3rd party libraries
when an application is not linked to dpdk, due to missing
symbol called by constructor.

Fixes: ba7468997ea6 ("spinlock: add HTM lock elision for x86")

Signed-off-by: Damjan Marion <damarion@cisco.com>
Reviewed-by: Jan Viktorin <viktorin@rehivetech.com>
Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
7 years agoapp/test: filter out unavailable tests
Thomas Monjalon [Wed, 13 Jul 2016 16:41:12 +0000 (18:41 +0200)]
app/test: filter out unavailable tests

Some tests can fail to run because they are not compiled.
It has been more visible recently when the PCI test became disabled
in the default configuration because of dependency on libarchive:
    PCI autotest:    Fail [Not found]

The autotest script catch them and do not count them as an error anymore:
    PCI autotest:    Skipped [Not Available]

The commands dump_ring and dump_mempool are removed from the autotest list
because they are some internal commands but not some registered tests.
Thus they cannot be parsed as available test commands.

Suggested-by: David Marchand <david.marchand@6wind.com>
Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
7 years agoapp/test: rework command registration
Thomas Monjalon [Wed, 13 Jul 2016 12:38:13 +0000 (14:38 +0200)]
app/test: rework command registration

The tests are registered with their command name by adding a structure
to a list. The structure of each test was declared in each test file
and passed to the register macro.
This rework generate the structure inside the register macro.

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Reviewed-by: Jan Viktorin <viktorin@rehivetech.com>
7 years agomk: fix default rule of test subdirectory
Thomas Monjalon [Tue, 12 Jul 2016 10:11:06 +0000 (12:11 +0200)]
mk: fix default rule of test subdirectory

When using "make -C app/test" (with RTE_SDK/RTE_TARGET adjusted)
without specifying the rule (all), the build is not done.
Indeed the default rule is not "all" anymore since there are some
rules added for external resources link.

It is fixed by adding a reference to "all" at the top of the file
which makes it the default rule.

Note that make app/test_sub (without environment variable) is preffered.

Fixes: ab64f5df8004 ("app/test: support resources externally linked")

Reported-by: Reshma Pattan <reshma.pattan@intel.com>
Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Acked-by: Reshma Pattan <reshma.pattan@intel.com>
7 years agomk: fix dependency on toolchain libraries
Thomas Monjalon [Tue, 12 Jul 2016 13:00:13 +0000 (15:00 +0200)]
mk: fix dependency on toolchain libraries

The -l options specifying libraries to link with are in LDLIBS.
But it can happen to have some libraries in other variables.
In case of a low level dependency specified in some environments
via EXTRA_LDFLAGS, there can be an unresolved issue due to a
wrong linking order. Indeed the libraries must be specified from
the higher level (dependency consumers) to the lower level (dependencies).

It is fixed by moving LDLIBS before LDFLAGS variables in the link
command line.

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Tested-by: Raslan Darawsheh <rasland@mellanox.com>
7 years agomk: clean up application linker flags
Thomas Monjalon [Tue, 12 Jul 2016 12:25:35 +0000 (14:25 +0200)]
mk: clean up application linker flags

Make some cleaning before fixing the link dependency ordering
in the next commit.

- Move flags for creating a map file in the variable MAPFLAGS.
- Make only one call to linkerprefix macro.
- Group linker flags on the same line.

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
7 years agoscripts: remove old build option
Thomas Monjalon [Mon, 11 Jul 2016 21:33:43 +0000 (23:33 +0200)]
scripts: remove old build option

The config option CONFIG_RTE_PCI_CONFIG does not exist anymore.

Fixes: 7d619406f31d ("pci: remove deprecated specific config")

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
7 years agoscripts: fix libnuma dependency in build test
Thomas Monjalon [Mon, 11 Jul 2016 21:26:01 +0000 (23:26 +0200)]
scripts: fix libnuma dependency in build test

The option CONFIG_RTE_LIBRTE_VHOST_NUMA depends on availability of
libnuma in the system.
The configuration option DPDK_DEP_NUMA can be set if available for
the DPDK_TARGET being built.

Fixes: cd31ca579c0d ("scripts: add build tests")

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
7 years agoscripts: print failed directory when testing build
Thomas Monjalon [Fri, 15 Jul 2016 13:49:57 +0000 (15:49 +0200)]
scripts: print failed directory when testing build

The script test-build.sh can be used to test building several
targets with different configurations. The directory name reflects
the target and the customized configuration.
When there is a failure, it is convenient to print this build
directory to quickly know which case is failing without scrolling
the build log history.

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
7 years agoversion: 16.07-rc2
Thomas Monjalon [Mon, 11 Jul 2016 19:47:34 +0000 (21:47 +0200)]
version: 16.07-rc2

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
7 years agomempool: fix creation with Xen dom0
Olivier Matz [Mon, 11 Jul 2016 10:20:28 +0000 (12:20 +0200)]
mempool: fix creation with Xen dom0

Restore the use of 2M hugepages when using Xen Dom0 that was
dropped during mempool rework.

Fixes: c042ba20674a ("mempool: rework support of Xen dom0")

Reported-by: Huilong Xu <huilongx.xu@intel.com>
Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
7 years agombuf: set errno on pool creation error
Olivier Matz [Mon, 11 Jul 2016 10:20:26 +0000 (12:20 +0200)]
mbuf: set errno on pool creation error

In rte_pktmbuf_pool_create(), the rte_errno variable was not always
set on failure.

Fixes: 152ca517900b ("mbuf: use default mempool handler from config")

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
7 years agoxen: fix retrieval of physical address
Olivier Matz [Mon, 11 Jul 2016 10:20:27 +0000 (12:20 +0200)]
xen: fix retrieval of physical address

When using Xen Dom0, it looks that /proc/self/pagemap returns 0.
This breaks the creation of mbufs pool.

We can workaround this in rte_mem_virt2phy() by browsing the dpdk memory
segments. This only works for dpdk memory, but it's enough to fix the
mempool creation.

Fixes: c042ba20674a ("mempool: rework support of Xen dom0")
Fixes: 3097de6e6bfb ("mem: get physical address of any pointer")

Reported-by: Huilong Xu <huilongx.xu@intel.com>
Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
7 years agoxen: fix build as shared library
Thomas Monjalon [Mon, 11 Jul 2016 16:52:56 +0000 (18:52 +0200)]
xen: fix build as shared library

When building as shared library, the compiler complains for
undefined reference to `rte_xen_mem_phy2mch'

The symbol rte_xen_mem_phy2mch was introduced in DPDK 2.2
and has been called in mempool recently via rte_mem_phy2mch.

Fixes: c042ba20674a ("mempool: rework support of Xen dom0")

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
7 years agoxen: fix build
Olivier Matz [Mon, 11 Jul 2016 10:20:25 +0000 (12:20 +0200)]
xen: fix build

Fix the compilation with CONFIG_RTE_LIBRTE_XEN_DOM0=y, by correcting the
typo in variable names.

Fixes: 8dab48370129 ("xen: return machine address without knowing memseg id")

Reported-by: Huilong Xu <huilongx.xu@intel.com>
Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
7 years agonet/ena: remove unneeded PCI macro
David Marchand [Mon, 11 Jul 2016 14:40:45 +0000 (16:40 +0200)]
net/ena: remove unneeded PCI macro

I suppose this is a remnant of rte_pci_dev_ids.h, just remove this.

Signed-off-by: David Marchand <david.marchand@6wind.com>
7 years agonet/bnxt: move PCI device ids to the driver
David Marchand [Mon, 11 Jul 2016 14:40:44 +0000 (16:40 +0200)]
net/bnxt: move PCI device ids to the driver

Moved defines since the driver had no such information.
Used RTE_PCI_DEVICE in place of RTE_PCI_DEV_ID_DECL* stuff.

Signed-off-by: David Marchand <david.marchand@6wind.com>
7 years agonet/bnx2x: move PCI device ids to the driver
David Marchand [Mon, 11 Jul 2016 14:40:43 +0000 (16:40 +0200)]
net/bnx2x: move PCI device ids to the driver

Reused defines from the driver and moved broadcom vendor id macro.
Used RTE_PCI_DEVICE in place of RTE_PCI_DEV_ID_DECL* stuff.

Signed-off-by: David Marchand <david.marchand@6wind.com>
7 years agonet/enic: move PCI device ids to the driver
David Marchand [Mon, 11 Jul 2016 14:40:42 +0000 (16:40 +0200)]
net/enic: move PCI device ids to the driver

Moved cisco vendor id since the driver had no such information.
Used RTE_PCI_DEVICE in place of RTE_PCI_DEV_ID_DECL* stuff.

Signed-off-by: David Marchand <david.marchand@6wind.com>
7 years agonet/vmxnet3: move PCI device ids to the driver
David Marchand [Mon, 11 Jul 2016 14:40:41 +0000 (16:40 +0200)]
net/vmxnet3: move PCI device ids to the driver

Moved vmware device ids macro since the driver had no such information.
Used RTE_PCI_DEVICE in place of RTE_PCI_DEV_ID_DECL* stuff.

Signed-off-by: David Marchand <david.marchand@6wind.com>
7 years agonet/virtio: move PCI device ids to the driver
David Marchand [Mon, 11 Jul 2016 14:40:40 +0000 (16:40 +0200)]
net/virtio: move PCI device ids to the driver

Reused defines from the driver.
Used RTE_PCI_DEVICE in place of RTE_PCI_DEV_ID_DECL* stuff.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
7 years agonet/fm10k: move PCI device ids to the driver
David Marchand [Mon, 11 Jul 2016 14:40:39 +0000 (16:40 +0200)]
net/fm10k: move PCI device ids to the driver

Reused defines from the driver.
Used RTE_PCI_DEVICE in place of RTE_PCI_DEV_ID_DECL* stuff.

Signed-off-by: David Marchand <david.marchand@6wind.com>
7 years agonet/i40e: move PCI device ids to the driver
David Marchand [Mon, 11 Jul 2016 14:40:38 +0000 (16:40 +0200)]
net/i40e: move PCI device ids to the driver

Reused defines from the driver.
Used RTE_PCI_DEVICE in place of RTE_PCI_DEV_ID_DECL* stuff.

Signed-off-by: David Marchand <david.marchand@6wind.com>
7 years agonet/e1000: move em PCI device ids to the driver
David Marchand [Mon, 11 Jul 2016 14:40:37 +0000 (16:40 +0200)]
net/e1000: move em PCI device ids to the driver

Reused defines from the driver and added a Intel vendor id macro for use by
igb later.
Used RTE_PCI_DEVICE in place of RTE_PCI_DEV_ID_DECL* stuff.

igb/igbvf is left as is, waiting for kni/ethtool cleanup.

Signed-off-by: David Marchand <david.marchand@6wind.com>
7 years agoeal: remove PCI device ids header from doxygen
David Marchand [Mon, 11 Jul 2016 14:40:36 +0000 (16:40 +0200)]
eal: remove PCI device ids header from doxygen

This file is going to disappear, remove the doxygen parts that reference
various drivers and remove it from the doxygen index.

Signed-off-by: David Marchand <david.marchand@6wind.com>
7 years agoexamples/ip_pipeline: add config diagram generator
Jasvinder Singh [Tue, 28 Jun 2016 16:22:25 +0000 (17:22 +0100)]
examples/ip_pipeline: add config diagram generator

This commit adds Python script for generating diagram of the application
configuration file. This script requires graphviz package to be installed
on the machine. The input config file is translated to an output file in
DOT syntax, which is then used to create the image file using graphviz.

To run the script, following command is used;

./diagram-generator.py -f <input configuration file>

Some optional arguments are as follows:
  -h, --help            show this help message and exit

Signed-off-by: Jasvinder Singh <jasvinder.singh@intel.com>
Signed-off-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
Acked-by: John McNamara <john.mcnamara@intel.com>
7 years agoexamples/vm_power_manager: remove dependency on internal header
Marvin Liu [Mon, 4 Jul 2016 08:57:59 +0000 (16:57 +0800)]
examples/vm_power_manager: remove dependency on internal header

Macro CHANNEL_CMDS_MAX_CPUS stand for the maximum number of cores
controlled by virtual channels. This macro only be used in the example,
so remove it from library to example header file.

Signed-off-by: Marvin Liu <yong.liu@intel.com>
7 years agoexamples/bond: check thread termination
Piotr Azarewicz [Wed, 29 Jun 2016 13:15:38 +0000 (15:15 +0200)]
examples/bond: check thread termination

The example is calling rte_eal_wait_lcore without checking return value.
Now it is fixed by checking the value and print proper message.

Coverity issue: 37789, 37790
Fixes: cc7e8ae84faa ("examples/bond: add example application for link bonding mode 6")

Signed-off-by: Piotr Azarewicz <piotrx.t.azarewicz@intel.com>
Acked-by: Declan Doherty <declan.doherty@intel.com>
7 years agoexamples/tep_term: fix port id check
Beilei Xing [Tue, 5 Jul 2016 06:15:40 +0000 (14:15 +0800)]
examples/tep_term: fix port id check

Coverity reported lots of out-of-bounds in function
vxlan_link, these issues should happen when index
port_id evaluates to 2, cause size of arrays is
2 in structure.
Fix this issue by modifying judgement condition, make
sure port_id is less than 2.

Coverity issue: 107121, 107122, 107123, 107124, 107125
Fixes: 4abe471ed6fc ("examples/tep_term: implement VXLAN processing")

Signed-off-by: Beilei Xing <beilei.xing@intel.com>
7 years agoexamples/l3fwd: update usage and documentation
Beilei Xing [Mon, 27 Jun 2016 14:26:48 +0000 (22:26 +0800)]
examples/l3fwd: update usage and documentation

Update l3fwd example usage and documentation with missing options.

Signed-off-by: Beilei Xing <beilei.xing@intel.com>
Acked-by: John McNamara <john.mcnamara@intel.com>
7 years agoexamples/l2fwd-crypto: fix stats array length
Slawomir Mrozowicz [Thu, 30 Jun 2016 09:05:34 +0000 (11:05 +0200)]
examples/l2fwd-crypto: fix stats array length

crypto_statistics array was not big enough for storing
all the possible crypto device statistics, as its size was
RTE_MAX_ETHPORTS, but should be RTE_CRYPTO_MAX_DEVS, leading
this to a potential out-of-bounds issue.

Coverity issue: 120145
Fixes: 387259bd6c67 ("examples/l2fwd-crypto: add sample application")

Signed-off-by: Slawomir Mrozowicz <slawomirx.mrozowicz@intel.com>
Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Acked-by: Declan Doherty <declan.doherty@intel.com>
7 years agoexamples/l2fwd-crypto: flush buffers
Pablo de Lara [Wed, 6 Jul 2016 09:38:50 +0000 (10:38 +0100)]
examples/l2fwd-crypto: flush buffers

Crypto operations are enqueued in the crypto devices
when the crypto device buffers are full (MAX_PKT_BURST),
in order to be more efficient.

The problem is that operations might be stuck in those buffers,
if they never get full, and therefore, those operations
will never be performed.

Therefore, it is necessary to have a buffer flush mechanism,
similar to the one used for flush the TX buffers, so eventually,
all packets received are ciphered and sent out.

Fixes: 387259bd6c67 ("examples/l2fwd-crypto: add sample application")

Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
7 years agoapp/test: fix hexdump length for crypto
Pablo de Lara [Sun, 10 Jul 2016 16:16:12 +0000 (17:16 +0100)]
app/test: fix hexdump length for crypto

Plaintexts and ciphertexts are dumped when debugging is enabled,
using TEST_HEXDUMP. For Snow3G and KASUMI, their lengths are in bits,
but TEST_HEXDUMP uses bytes, so lenghts are passed in bytes now.

Fixes: 47df73a1a62f ("app/test: use hexdump if debug log is enabled")

Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Signed-off-by: Deepak Kumar Jain <deepak.k.jain@intel.com>
7 years agoapp/testpmd: fix comment of RSS setup
Ilya Maximets [Tue, 5 Jul 2016 07:20:26 +0000 (10:20 +0300)]
app/testpmd: fix comment of RSS setup

Since commit f2bb7ae1d204, behavior of rss_fwd_config_setup() changed
and description of this function is wrong now.

Also, there is a type mismatch in a loop.

Fixes: f2bb7ae1d204 ("app/testpmd: handle all Rx queues in RSS setup")

Signed-off-by: Ilya Maximets <i.maximets@samsung.com>
7 years agoapp/testpmd: add timeout in Rx queue flushing
Reshma Pattan [Fri, 1 Jul 2016 10:28:16 +0000 (11:28 +0100)]
app/testpmd: add timeout in Rx queue flushing

Testpmd can stuck inside do while loop of the flush_fwd_rx_queues()
function. As non-zero packets are returned always by rte_eth_rx_burst()
function when compiled with no optimizations and if input line rate is
high. "do while" loop must exit at one stage to proceed further to
enable packet forwarding and forward the packets. So timer is set to
exit the do while loop after 1 second.

Fixes: af75078f ("first public release")

Signed-off-by: Reshma Pattan <reshma.pattan@intel.com>
Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
7 years agoapp/testpmd: remove ixgbe check for bypass
Wenzhuo Lu [Mon, 11 Jul 2016 08:29:18 +0000 (16:29 +0800)]
app/testpmd: remove ixgbe check for bypass

In testpmd code, device id is used directly to check if bypass
is supported. But APP should not know the details of HW, the NIC
specific info should not be exposed here.
As every bypass API does know if it's supported, no need to check
that at first. So, this patch removes the *bypass_is_supported*.

Suggested-by: Jingjing Wu <jingjing.wu@intel.com>
Signed-off-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
7 years agonet/bonding: fix exported symbol versioning
Christian Ehrhardt [Mon, 11 Jul 2016 11:27:01 +0000 (13:27 +0200)]
net/bonding: fix exported symbol versioning

The older versions of rte_eth_bond_8023ad_conf_get and
rte_eth_bond_8023ad_setup were available in the old way since 2.0 - at
least according to the map file.

But versioning in the code was set to 16.04.
That breaks compatibility checks for 2.0 on that library.

For example with the dpdk abi checker:
http://people.canonical.com/~paelzer/compat_report.html

To fix, version the old symbols on the 2.0 version as they were
initially added to the map file.

See http://people.canonical.com/~paelzer/compat_report.html

Fixes: dc40f17a ("net/bonding: allow external state machine in mode 4")

Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
7 years agomk: filter duplicate configuration entries
Christian Ehrhardt [Wed, 6 Jul 2016 09:13:06 +0000 (11:13 +0200)]
mk: filter duplicate configuration entries

Due to the hierarchy and the demand to keep the base config showing all
options, some config keys end up multiple times in the .config file.

Due to the way the actual config is sourced only the last entry is
important. That can confuse people changing values in .config which
are then ignored.

A suggested solution was to filter for duplicates at the end of the
actual config step which is implemented here.

Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
7 years agovfio: rework initialization to be extendable
Jan Viktorin [Mon, 4 Jul 2016 15:16:51 +0000 (17:16 +0200)]
vfio: rework initialization to be extendable

We can now just OR the vfio_enabled sequentially and so adding new VFIO
subsystems (vfio_platform) is possible.

Signed-off-by: Jan Viktorin <viktorin@rehivetech.com>
7 years agovfio: initialize out of the PCI subsystem
Jan Viktorin [Mon, 4 Jul 2016 15:16:50 +0000 (17:16 +0200)]
vfio: initialize out of the PCI subsystem

The VFIO does not depend on the PCI anymore so it can be initialized out of
the PCI subsystem.

Signed-off-by: Jan Viktorin <viktorin@rehivetech.com>
7 years agovfio: generalize process synchronization
Jan Viktorin [Mon, 4 Jul 2016 15:16:49 +0000 (17:16 +0200)]
vfio: generalize process synchronization

The module eal_pci_vfio_mp_sync is quite generic so it shouldn't contain the
"pci" string in its name. The internal functions don't need the pci_* prefix.

Signed-off-by: Jan Viktorin <viktorin@rehivetech.com>
7 years agovfio: make mode types private
Jan Viktorin [Mon, 4 Jul 2016 15:16:48 +0000 (17:16 +0200)]
vfio: make mode types private

There is no more reason to expose those definitions as nobody uses them.

Signed-off-by: Jan Viktorin <viktorin@rehivetech.com>
7 years agovfio: fix typo in doc for device setup
Jan Viktorin [Mon, 4 Jul 2016 15:16:47 +0000 (17:16 +0200)]
vfio: fix typo in doc for device setup

Suggested-by: Anatoly Burakov <anatoly.burakov@intel.com>
Signed-off-by: Jan Viktorin <viktorin@rehivetech.com>
Acked-by: John McNamara <john.mcnamara@intel.com>
7 years agovfio: move global config out of PCI files
Jan Viktorin [Mon, 4 Jul 2016 15:16:46 +0000 (17:16 +0200)]
vfio: move global config out of PCI files

The vfio_cfg is a module-global variable and so together with this
variable, it is necessary to move functions:

* pci_vfio_get_group_fd
  - renamed to vfio_get_group_fd
  - pci_* version removed (no other call in EAL)

* pci_vfio_setup_device
  - renamed as vfio_setup_device

* pci_vfio_enable
  - renamed as vfio_enable
  - generalized to check for a specific vfio driver presence
  - pci_* specialization preserved as a wrapper

* pci_vfio_is_enabled
  - renamed as vfio_is_enabled
  - generalized to check for a specific vfio driver presence
    to preserve the semantics of VFIO + PCI
  - pci_* specialization preserved as a wrapper

* clear_current_group
  - private function, just moved

To stop GCC complaining about "defined but not used", the private
function pci_vfio_get_group_no has been removed entirely.

Signed-off-by: Jan Viktorin <viktorin@rehivetech.com>
7 years agovfio: extract setup logic out of resource mapping
Jan Viktorin [Mon, 4 Jul 2016 15:16:45 +0000 (17:16 +0200)]
vfio: extract setup logic out of resource mapping

The setup logic access the global vfio_cfg variable that will be moved in the
following commits. We need to separate all accesses to this variable to a
general code.

Signed-off-by: Jan Viktorin <viktorin@rehivetech.com>
7 years agovfio: generalize non PCI-specific functions
Jan Viktorin [Mon, 4 Jul 2016 15:16:40 +0000 (17:16 +0200)]
vfio: generalize non PCI-specific functions

The pci_vfio_set_iommu_type is not PCI-specific and it is a private function
of the eal_pci_vfio.c. We just rename the function and make it available even
for non-PCI devices.

The pci_vfio_has_supported_extensions is not PCI-specific and it is a private
function of the eal_pci_vfio.c. We just rename the function and make it
available even for non-PCI devices.

The pci_vfio_get_container_fd is not PCI-specific. Move the implementation to
the eal_vfio.c as vfio_get_container_fd. No other code seems to call this
function.

Generalize the pci_vfio_get_group_no to not be PCI-specific. Move the general
implementation to the eal_vfio.c as vfio_get_group_no and leave the original
pci_vfio_get_group_no being a wrapper around this to preserve compilation
issues. The pci_vfio_get_group_no function will be removed later.

Signed-off-by: Jan Viktorin <viktorin@rehivetech.com>
7 years agovfio: move common code out of PCI file
Jan Viktorin [Mon, 4 Jul 2016 15:16:39 +0000 (17:16 +0200)]
vfio: move common code out of PCI file

We make the iommu_types public temporarily here until the depending stuff is
refactored. The iommu_types and dma_map functions will be changed to be private
inside the eal_vfio module later.

Signed-off-by: Jan Viktorin <viktorin@rehivetech.com>
7 years agovfio: move definitions from PCI to VFIO header
Jan Viktorin [Mon, 4 Jul 2016 15:16:37 +0000 (17:16 +0200)]
vfio: move definitions from PCI to VFIO header

The common VFIO definitions should be separated from the PCI-specific parts.

Signed-off-by: Jan Viktorin <viktorin@rehivetech.com>
7 years agovfio: fix private include to be local
Jan Viktorin [Mon, 4 Jul 2016 15:16:36 +0000 (17:16 +0200)]
vfio: fix private include to be local

Signed-off-by: Jan Viktorin <viktorin@rehivetech.com>
7 years agonet/virtio: fix 32-bit build with gcc 6
Ferruh Yigit [Thu, 7 Jul 2016 13:49:08 +0000 (14:49 +0100)]
net/virtio: fix 32-bit build with gcc 6

This is for target i686-native-linuxapp-gcc and gcc6,

Compilation error is:

In file included from
  include/rte_mempool.h:77:0, from
  drivers/net/virtio/virtio_rxtx_simple.c:
In function `virtio_xmit_pkts_simple':
  include/rte_memcpy.h:551:2: error:
    array subscript is above array bounds
      rte_mov16((uint8_t *)dst + 1 * 16, (const uint8_t *)src + 1 * 16);
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Call stack is as following:

virtio_xmit_pkts_simple
  virtio_xmit_cleanup
    rte_mempool_put_bulk
      rte_mempool_generic_put
        __mempool_generic_put
  rte_memcpy

The array used as source buffer in virtio_xmit_cleanup (free) is a
pointer array with 32 elements, in 32bit this makes 128 bytes.

in rte_memcpy() implementation, there a code piece as following:
if (size > 256) {
    rte_move128(...);
    rte_move128(...); <--- [1]
    ....
}

The compiler traces the array all through the call stack and knows the
size of array is 128 and generates a warning on above [1] which tries to
access beyond byte 128.
But unfortunately it ignores the "(size > 256)" check.

Giving a hint to compiler that variable "size" is related to the size of
the source buffer fixes compiler warning.

Fixes: 863bfb474493 ("mempool: optimize copy in cache")

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
7 years agonet/vhost: fix queue state not reset on destroy
Rich Lane [Fri, 1 Jul 2016 16:31:12 +0000 (09:31 -0700)]
net/vhost: fix queue state not reset on destroy

Fixes a bug where rte_eth_vhost_get_queue_event would not return enabled
queues after a guest application restart.

Fixes: ee584e9710b9 ("vhost: add driver on top of the library")

Signed-off-by: Rich Lane <rich.lane@bigswitch.com>
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
7 years agoexamples/vhost: print error logs on failure
Jianfeng Tan [Fri, 1 Jul 2016 08:50:31 +0000 (08:50 +0000)]
examples/vhost: print error logs on failure

When the specified cores and memory lie on different NUMA socket with
physical NIC, vhost fails to set up Rx queue, and exits without any
hints. This could leads to confusion of users.

This patch fixes it by adding some error messages when calling ether
APIs returns errors.

Suggested-by: Yulong Pei <yulong.pei@intel.com>
Signed-off-by: Jianfeng Tan <jianfeng.tan@intel.com>
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
7 years agonet/virtio: fix null pointer dereference
Jianfeng Tan [Tue, 5 Jul 2016 11:42:59 +0000 (11:42 +0000)]
net/virtio: fix null pointer dereference

There is a logic bug in this code, that could lead to null pointer
dereference when cvq is NULL. Fix this problem by changing logic
&& to logic ||.

   >> CID 127480:  Null pointer dereferences  (FORWARD_NULL)
   >> Dereferencing null pointer "cvq".
    if (!cvq && !cvq->vq) {
            ...
        }

Coverity issue: 127480
Fixes: 01ad44fd374f ("net/virtio: split Rx/Tx queue")

Signed-off-by: Jianfeng Tan <jianfeng.tan@intel.com>
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
7 years agodoc: explain virtio Rx/Tx functions
Zhihong Wang [Fri, 1 Jul 2016 03:28:01 +0000 (23:28 -0400)]
doc: explain virtio Rx/Tx functions

This patch explains current virtio PMD Rx/Tx callbacks, to help understand
what's the difference, and how to enable the right ones.

Signed-off-by: Zhihong Wang <zhihong.wang@intel.com>
Acked-by: John McNamara <john.mcnamara@intel.com>
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
7 years agonet/virtio-user: fix string unterminated
Jianfeng Tan [Wed, 29 Jun 2016 09:05:36 +0000 (09:05 +0000)]
net/virtio-user: fix string unterminated

When use strcpy() to copy string with length exceeding the last
parameter of strcpy(), it may lead to the destination string
unterminated.

We replaced strncpy with snprintf to make sure it's NULL terminated.

Coverity issue: 127476
Fixes: ce2eabdd43ec ("net/virtio-user: add virtual device")

Signed-off-by: Jianfeng Tan <jianfeng.tan@intel.com>
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
7 years agonet/virtio-user: fix resource leaks
Jianfeng Tan [Wed, 29 Jun 2016 09:05:35 +0000 (09:05 +0000)]
net/virtio-user: fix resource leaks

The return value by rte_kvargs_parse is not free(d), which leads
to memory leak.

Coverity issue: 127482
Fixes: ce2eabdd43ec ("net/virtio-user: add virtual device")

Signed-off-by: Jianfeng Tan <jianfeng.tan@intel.com>
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
7 years agonet/virtio-user: fix string overflow
Jianfeng Tan [Wed, 29 Jun 2016 09:05:34 +0000 (09:05 +0000)]
net/virtio-user: fix string overflow

When parsing /proc/self/maps to get hugepage information, the string
was being copied with strcpy(), which could, theoretically but in fact
not possiblly, overflow the destination buffer. Anyway, to avoid the
false alarm, we replaced strncpy with snprintf for safely copying the
strings.

Coverity issue: 127484
Fixes: 6a84c37e3975 ("net/virtio-user: add vhost-user adapter layer")

Signed-off-by: Jianfeng Tan <jianfeng.tan@intel.com>
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
7 years agonet/virtio-user: fix return value not checked
Jianfeng Tan [Wed, 29 Jun 2016 09:05:33 +0000 (09:05 +0000)]
net/virtio-user: fix return value not checked

When return values of function calls are not checked, Coverity will
report errors like:

    if (rte_kvargs_count(kvlist, VIRTIO_USER_ARG_PATH) == 1)
    >>>     CID 127477:    (CHECKED_RETURN)
    >>>     Calling "rte_kvargs_process" without checking return value
            (as is done elsewhere 25 out of 30 times).
          rte_kvargs_process(kvlist, VIRTIO_USER_ARG_PATH,
             &get_string_arg, &path);

Coverity issue: 127477, 127478
Fixes: ce2eabdd43ec ("net/virtio-user: add virtual device")
Fixes: 6a84c37e3975 ("net/virtio-user: add vhost-user adapter layer")

Signed-off-by: Jianfeng Tan <jianfeng.tan@intel.com>
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
7 years agonet/virtio-user: fix build on Suse 11
Jianfeng Tan [Wed, 29 Jun 2016 03:23:03 +0000 (03:23 +0000)]
net/virtio-user: fix build on Suse 11

On some older systems, such as SUSE 11, the compiling error shows
as:
   .../dpdk/drivers/net/virtio/virtio_user/virtio_user_dev.c:67:22:
         error: ‘O_CLOEXEC’ undeclared (first use in this function)

The fix is to use EFD_CLOEXEC, which is defined in sys/eventfd.h,
instead of O_CLOEXEC which needs _GNU_SOURCE defined on some old
systems.

Fixes: 37a7eb2ae816 ("net/virtio-user: add device emulation layer")

Signed-off-by: Jianfeng Tan <jianfeng.tan@intel.com>
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
7 years agonet/virtio-user: fix missing default config value
Jianfeng Tan [Wed, 29 Jun 2016 03:20:06 +0000 (03:20 +0000)]
net/virtio-user: fix missing default config value

With current config structure, all configuration parameters put into
common_base with a default value, and overwritten in environment file
if required, CONFIG_RTE_VIRTIO_USER is missing in common_base.

This fix is simple, by adding CONFIG_RTE_VIRTIO_USER=n as the default
macro value.

Fixes: ce2eabdd43ec ("net/virtio-user: add virtual device")

Reported-by: Ferruh Yigit <ferruh.yigit@intel.com>
Signed-off-by: Jianfeng Tan <jianfeng.tan@intel.com>
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>