793 Commits

Author SHA1 Message Date
Vlastimil Kosar
87d33b6f64 eal/arm: add cpu cycle operations for ARMv7
ARM architecture doesn't have a suitable source of CPU cycles. This
patch uses clock_gettime instead. The implementation should be improved
in the future.

Signed-off-by: Vlastimil Kosar <kosar@rehivetech.com>
Signed-off-by: Jan Viktorin <viktorin@rehivetech.com>
Acked-by: David Marchand <david.marchand@6wind.com>
2015-11-18 22:38:05 +01:00
Vlastimil Kosar
de966ccdcd eal/arm: add byte order operations for ARM
This patch adds architecture specific byte order operations
for ARM. The architecture supports both big and little endian.
It requires RTE_FORCE_INTRINSICS=y.

Signed-off-by: Vlastimil Kosar <kosar@rehivetech.com>
Signed-off-by: Jan Viktorin <viktorin@rehivetech.com>
Acked-by: David Marchand <david.marchand@6wind.com>
2015-11-18 22:38:05 +01:00
Daniel Mrzyglod
b6fd85cd65 eal: add helpers for time conversions
Add common functions and structures to handle time, and cycle counts
which will be used for PTP processing.

Signed-off-by: Daniel Mrzyglod <danielx.t.mrzyglod@intel.com>
Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Reviewed-by: John McNamara <john.mcnamara@intel.com>
2015-11-13 17:44:34 +01:00
Stephen Hemminger
719dbebceb xen: allow determining DOM0 at runtime
Add memory infrastructure for runtime Xen DOM0 support.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Jijiang Liu <jijiang.liu@intel.com>
2015-11-13 11:34:53 +01:00
Stephen Hemminger
5a1940f080 ethdev: mark deprecated statistics with attribute
Use deprecated attribute to highlight any use of fields that
are marked as going away in the rte_ether device statistics.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
2015-11-12 23:05:36 +01:00
Panu Matilainen
9f8eb1d9ca eal: support driver loading from directory
Add support for directories as arguments to -d for loading all drivers
from a given directory. Additionally a default driver directory can be
set in build-time configuration, in which case it will be always be used
when EAL is initialized.

This simplifies usage in shared library configuration significantly over
manually loading individual drivers with -d, and allows distros to
establish a drop-in driver directory for seamless integration
with 3rd party drivers etc.

Suggested-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Suggested-by: David Marchand <david.marchand@6wind.com>
Signed-off-by: Panu Matilainen <pmatilai@redhat.com>
Acked-by: David Marchand <david.marchand@6wind.com>
2015-11-12 16:56:45 +01:00
Panu Matilainen
fa9cdc6f84 eal: move plugin loading from linuxapp to common
There's no good reason to limit plugins to Linux, make it available
on FreeBSD too. Refactor the plugin code from Linux EAL to common
helper functions, also check for and fail on errors during initialization.

Signed-off-by: Panu Matilainen <pmatilai@redhat.com>
Acked-by: David Marchand <david.marchand@6wind.com>
2015-11-12 16:53:22 +01:00
Thomas Monjalon
c4d404d7c1 version: 2.2.0-rc1
Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
2015-11-05 00:48:18 +01:00
David Hunt
761f5a5680 igb_uio: fix build with kernel 4.3
Fix to take this change into account: https://lkml.org/lkml/2015/7/9/101
Has been applied to Kernel 4.3.0-rc6

Linux: 4a7cc831 ("genirq/MSI: Move msi_list from struct pci_dev to struct device")

Signed-off-by: David Hunt <david.hunt@intel.com>
Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
2015-11-05 00:02:52 +01:00
Chas Williams
13634d32ea bnx2x: fix probing driver for VF devices
Signed-off-by: Chas Williams <3chas3@gmail.com>
Acked-by: Harish Patil <harish.patil@qlogic.com>
2015-11-04 23:35:29 +01:00
Tiwei Bie
bb7c5ab2e8 eal: do not reset getopt lib
Someone may need to call rte_eal_init() with a fake argc/argv array
in the middle of using getopt() to parse its own unrelated argc/argv
parameters. So getopt lib shouldn't be reset by rte_eal_init().

Now eal will always save optind, optarg and optopt (and optreset on
FreeBSD) at the beginning, initialize optind (and optreset on FreeBSD)
to 1 before calling getopt_long(), then restore all values after.

Suggested-by: Don Provan <dprovan@bivio.net>
Suggested-by: Bruce Richardson <bruce.richardson@intel.com>
Signed-off-by: Tiwei Bie <btw@mail.ustc.edu.cn>
Reviewed-by: Don Provan <dprovan@bivio.net>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: David Marchand <david.marchand@6wind.com>
2015-11-04 23:18:18 +01:00
Bruce Richardson
620b794e38 eal/bsd: fix build
The i40e driver was using a #define value for the max number of rxtx interrupts
supported. This value was defined only for linux, giving an error when compiling
on FreeBSD.

  CC i40e_ethdev.o
/usr/home/bruce/dpdk.org/drivers/net/i40e/i40e_ethdev.c:3885:9: fatal error: use of undeclared
        identifier 'RTE_MAX_RXTX_INTR_VEC_ID'

Copying the necessary #define into the FreeBSD EAL header fixes the compile
error.

Fixes: d37641029ada ("eal/linux: add interrupt vectors")

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
2015-11-04 18:24:07 +01:00
Cunming Liang
d283059b7c eal: query multi-vector interrupt capability
VFIO allows multiple MSI-X vector, others doesn't, but maybe will
allow it in the future.
Device drivers need to be aware of the capability.
It's better to avoid condition check on interrupt type (VFIO) everywhere,
instead a capability api is more flexible for the condition change.

Signed-off-by: Cunming Liang <cunming.liang@intel.com>
Acked-by: David Marchand <david.marchand@6wind.com>
2015-11-04 15:27:41 +01:00
Cunming Liang
7eeed91448 eal/linux: forbid enabling zero interrupt vector
The patch adds condition check to avoid enable nothing.
In disable state, both max_intr and nb_efd are zero.

Signed-off-by: Cunming Liang <cunming.liang@intel.com>
Acked-by: David Marchand <david.marchand@6wind.com>
2015-11-04 15:27:41 +01:00
Cunming Liang
b13bfab4cd eal: reserve VFIO vector zero for misc interrupt
During VFIO_DEVICE_SET_IRQS, the previous order is
{Q0_fd, ... Qn_fd, misc_fd}.
The vector number of misc is indeterminable which is
ugly to some NIC (e.g. i40e, fm10k).
The patch adjusts the order in {misc_fd, Q0_fd, ... Qn_fd},
always reserve the first vector to misc interrupt.

Signed-off-by: Cunming Liang <cunming.liang@intel.com>
Acked-by: David Marchand <david.marchand@6wind.com>
2015-11-04 14:20:36 +01:00
Thomas Monjalon
e6e6440d33 doc: fix doxygen syntax of some comments
Some comments have a wrong space between /** and <.
Seen with
	git grep '\*\* <'

Reported-by: David Marchand <david.marchand@6wind.com>
Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
2015-11-04 11:56:37 +01:00
Pablo de Lara
00c1464382 kni: fix igb build with kernel 4.2
Kernel 4.2 has introduced two new parameters in ndo_bridge_getlink,
which breaks DPDK compilation.

Linux: 7d4f8d87 ("switchdev: ad VLAN support for ports bridge-getlink")

This patch adds the necessary checks to fix it.

Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
2015-11-04 02:34:27 +01:00
Pablo de Lara
492d31ac02 kni: rename macro for igb nlflags
Rename HAVE_NDO_BRIDGE_GETLINK_FILTER_MASK macro for
a more meaningful HAVE_NDO_BRIDGE_GETLINK_NLFLAGS,
as the macro is used to know if igb_ndo_bridge_getlink
function has nlflags parameter.

Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
2015-11-04 02:32:22 +01:00
Dex Chen
72a7a2b246 kni: allow per-net instances
There is a global variable 'device_in_use' which is used to make sure
only one instance is using /dev/kni device. If you were using LXC, you
will find there is only one instance of KNI example could be run even
different namespaces were created.

In order to have /dev/kni used simultaneously in different namespaces,
making all of global variables as per network namespace variables.

With regard to single kernel thread mode, there will be one kernel
thread for each of network namespace.

Signed-off-by: Dex Chen <dex.chen@ruckuswireless.com>
Acked-by: Helin Zhang <helin.zhang@intel.com>
2015-11-04 02:32:19 +01:00
Shesha Sreenivasamurthy
9e21671599 eal: add option to delete hugepage backing files
When an application using huge-pages crash or exists, the hugetlbfs
backing files are not cleaned up. This is a patch to clean those files.
There are multi-process DPDK applications that may be benefited by those
backing files. Therefore, I have made that configurable so that the
application that does not need those backing files can remove them, thus
not changing the current default behavior. The application itself can
clean it up, however the rationale behind DPDK cleaning it up is, DPDK
created it and therefore, it is better it unlinks it.

Signed-off-by: Shesha Sreenivasamurthy <shesha@cisco.com>
Acked-by: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
2015-11-04 02:00:28 +01:00
Bernard Iremonger
8fb9e2bbf9 drivers: copy fake PCI device info to ethdev data
Initialise dev_flags, driver, kdrv, drv_name and numa_node fields
in eth_dev data.

for the following vdevs:
null
ring
pcap
af_packet
xenvirt
mpipe
bonding

Signed-off-by: Bernard Iremonger <bernard.iremonger@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
2015-11-03 18:39:42 +01:00
Ravi Kerur
67b6d3039e eal: set name to threads
This patch adds support for pthread_setname_np on Linux and
pthread_set_name_np on FreeBSD.

Signed-off-by: Ravi Kerur <rkerur@gmail.com>
Acked-by: Stephen Hemminger <stephen@networkplumber.org>
[Thomas: add name in tep_termination example]
2015-11-03 15:32:34 +01:00
Helin Zhang
92fbf2cbdf i40e: support X722 and its A0 hardware
In order to provide users early access of X722 and its A0 hardware,
new device IDs are added, and also compilation with those support
in base driver is enabled.

Signed-off-by: Helin Zhang <helin.zhang@intel.com>
Acked-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
2015-11-03 11:11:19 +01:00
Nelio Laranjeiro
67624fc054 eal: allow external interrupt handler
Add RTE_INTR_HANDLE_EXT handler type for PMDs that do not support VFIO or
UIO.  Those are expected to manage the file descriptor themselves.

Signed-off-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
Acked-by: David Marchand <david.marchand@6wind.com>
2015-11-01 11:23:45 +01:00
Michael Qiu
6bbf8c8f4d fm10k: support Boulder Rapid device
Boulder Rapid is Intel new NIC within fm10k family.
This patch make DPDK driver support this new NIC.

Signed-off-by: Michael Qiu <michael.qiu@intel.com>
Acked-by: Jing Chen <jing.d.chen@intel.com>
Acked-by: Shaopeng He <shaopeng.he@intel.com>
2015-10-29 23:47:44 +01:00
Wenzhuo Lu
f11596cb94 e1000: add new i218 devices
Add the new e1000 devices to the DPDK PCI device list.

Signed-off-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
2015-10-27 16:23:20 +01:00
Rich Lane
4fce65a6be eal: default to using all cores
This is a useful default for simple applications where the assignment
of lcores to CPUs doesn't matter. It's also useful for more complex
applications that automatically assign tasks to cores based on the
NUMA topology.

Signed-off-by: Rich Lane <rich.lane@bigswitch.com>
2015-10-26 20:36:26 +01:00
Panu Matilainen
19bfa4ddb1 eal: make the -n argument optional
Obtaining the correct value of memory channels, especially from a
running system, can be anything from difficult to plain impossible.
Since the value is merely an optimization and does not affect functionality
otherwise, its pointless to force such a guess on users initially, such
things belong to performance tuning phase.

Signed-off-by: Panu Matilainen <pmatilai@redhat.com>
Acked-by: David Marchand <david.marchand@6wind.com>
2015-10-26 17:50:27 +01:00
Zhe Tao
faefe2296d eal: fix memory leak in stack dump
Free the memory allocated by the backtrace_symbols
to prevent the memory leak.

Signed-off-by: Zhe Tao <zhe.tao@intel.com>
2015-10-25 23:38:42 +01:00
Ferruh Yigit
d1392d26f3 igb_uio: remove unnecessary function to get device
Return value of igbuio_get_uio_pci_dev() is already kept in priv
variable.

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
2015-10-25 18:45:39 +01:00
Christoph Gysin
7499ef45c3 eal: fix C++ build
'virtual' is a keyword and can't be used if the code is to compile with
C++ compilers.

If rte_devargs.h was included in C++ code, compilation with clang++
failed with an error. g++ did not fail, but only because of a bug
that treats it as an anonymous struct with a decl-specifier which it
ignores.

This simply renames the member to 'virt'.

Reported-by: Ming Zhao <mzhao@luminatewireless.com>
Signed-off-by: Christoph Gysin <christoph.gysin@gmail.com>
Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
Acked-by: David Marchand <david.marchand@6wind.com>
2015-10-22 17:50:51 +02:00
Wen-Chi Yang
d08d304508 eal/linux: make alarm not affected by system time jump
Due to eal_alarm_callback() and rte_eal_alarm_set() use gettimeofday()
to get the current time, and gettimeofday() is affected by jumps.

For example, set up a rte_alarm which will be triggerd next second (
current time + 1 second) by rte_eal_alarm_set(). And the callback
function of this rte_alarm sets up another rte_alarm which will be
triggered next second (current time + 2 second).
Once we change the system time when the callback function is triggered,
it is possible that rte alarm functionalities work out of expectation.

Replace gettimeofday() with clock_gettime(CLOCK_MONOTONIC_RAW, &now)
could avoid this phenomenon.

Signed-off-by: Wen-Chi Yang <wolkayang@gmail.com>
Acked-by: Stephen Hemminger <stephen@networkplumber.org>
2015-10-21 17:01:24 +02:00
David Marchand
fd6949c55c eal: fix io permission for virtio interrupt handler
For virtio-net pmd, the interrupt management thread must be created after
this driver has initialised so that iopl() has been properly called and
its effects are inherited by all eal children threads.

Before this change, changing link status on a virtio-net device would
trigger a segfault in the interrupt thread :

$ mkdir -p /mnt/huge
$ echo 256 > /proc/sys/vm/nr_hugepages
$ mount -t hugetlbfs none /mnt/huge
$ lspci |grep Ethernet
00:03.0 Ethernet controller: Red Hat, Inc Virtio network device
$ modprobe uio
$ insmod ./x86_64-native-linuxapp-gcc/kmod/igb_uio.ko
$ echo 0000:00:03.0 > /sys/bus/pci/devices/0000\:00\:03.0/driver/unbind
$ echo 1af4 1000 > /sys/bus/pci/drivers/igb_uio/new_id
$ ./x86_64-native-linuxapp-gcc/app/testpmd -c 0x6 -n 3 -w 0000:00:03.0 -- -i --txqflags=0xf01 --total-num-mbufs 2048
[snip]
EAL: PCI device 0000:00:03.0 on NUMA socket -1
EAL:   probe driver: 1af4:1000 rte_virtio_pmd
Interactive-mode selected
Configuring Port 0 (socket 0)
Port 0: DE:AD:DE:01:02:03
Checking link statuses...
Port 0 Link Up - speed 10000 Mbps - full-duplex
Done
testpmd>

Then, from qemu monitor:
(qemu) set_link virtio-net-pci.0 off

testpmd> Segmentation fault

Fixes: 565b85dcd9f4 ("eal: set iopl only when needed")

Reported-by: Stephen Hemminger <shemming@brocade.com>
Suggested-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Signed-off-by: David Marchand <david.marchand@6wind.com>
2015-10-20 23:20:42 +02:00
Jingjing Wu
21c12fb2d0 eal: add new i40e device id
Signed-off-by: Jingjing Wu <jingjing.wu@intel.com>
Acked-by: Helin Zhang <helin.zhang@intel.com>
Tested-by: Huilong Xu <huilongx.xu@intel.com>
2015-10-02 01:35:23 +02:00
Robert Sanford
79db649c4b eal/linux: fix epoll timeout
Function rte_epoll_wait should return when underlying call
to epoll_wait times out.

Signed-off-by: Robert Sanford <rsanford@akamai.com>
Acked-by: Cunming Liang <cunming.liang@intel.com>
2015-09-08 09:57:53 +02:00
Thomas Monjalon
a831272ed4 version: 2.2.0-rc0
Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
2015-09-04 15:57:02 +02:00
Thomas Monjalon
e32bbdb218 eal: remove deprecated function
The function rte_eal_pci_close_one() was renamed rte_eal_pci_detach().

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Acked-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
Acked-by: David Marchand <david.marchand@6wind.com>
2015-09-03 19:22:48 +02:00
Thomas Monjalon
ab351fe1c9 mbuf: remove packet type from offload flags
The extended unified packet type is now part of the standard ABI.
As mbuf struct is changed, the mbuf library version is incremented.

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Acked-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
2015-09-03 19:22:48 +02:00
Thomas Monjalon
d8c4ae2755 ethdev: remove Rx interrupt switch
The Rx interrupt feature is now part of the standard ABI.
Because of changes in rte_intr_handle and struct rte_eth_conf,
the eal and ethdev library versions are incremented.

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Acked-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
2015-09-03 19:22:48 +02:00
Thomas Monjalon
7173acefc7 version: 2.1.0
Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
2015-08-17 19:35:37 +02:00
Joongi Kim
621389bbbe eal: fix C++ app build
* Forward declaration of enum in C++ requires explicit underlying
   type definitions.

 * This fixes the issue at:
   http://dpdk.org/ml/archives/dev/2015-April/017065.html

include/generic/rte_cpuflags.h:50:6:
error: use of enum ‘rte_cpu_flag_t’ without previous declaration
 enum rte_cpu_flag_t;

include/generic/rte_cpuflags.h:55:6:
error: use of enum ‘cpu_register_t’ without previous declaration
 enum cpu_register_t;

Signed-off-by: Joongi Kim <joongi@an.kaist.ac.kr>
[Thomas: fix extended to ppc and tile]
2015-08-17 17:50:22 +02:00
Thomas Monjalon
1b7e102356 version: 2.1.0-rc4
Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
2015-08-11 00:35:04 +02:00
Sergio Gonzalez Monroy
cd10c42eb5 mem: fix ivshmem freeing
There is no sync between host and guest to allow removal of memzones,
and freeing them result in undefined behavior.

In the guest, we identify IVSHMEM memsegs/memzones by having
ioremap_addr != 0. In the host, nothing is done to the memzone, meaning
ioremap_addr == 0.

As a solution, mark memzones being added to IVSHMEM in the host, by
setting ioremap_addr, then return an error whenever we try to free an
IVSHMEM memzone.

Fixes: ff909fe21f0 ("mem: introduce memzone freeing")

Signed-off-by: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
2015-08-09 19:45:25 +02:00
Sergio Gonzalez Monroy
d1668c9762 mem: fix ivshmem in malloc heap
After the changes introduced by Dynamic Memzones, all the memsegs were
added to the malloc heap during init.

Those changes did not account for IVSHMEM memsegs which should not be
added to the malloc heap as part of available memory.

Fixes: fafcc11985a2 ("mem: rework memzone to be allocated by malloc")

Signed-off-by: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
2015-08-09 19:35:50 +02:00
Thomas Monjalon
5667c8dfaa eal/ppc: fix build
Byte ordering macros were used without including the needed header.

Fixes: ce10b21bf624 ("eal/ppc: fix cpu cycle count for little endian")

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Acked-by: Chao Zhu <chaozhu@linux.vnet.ibm.com>
2015-08-05 14:47:53 +02:00
Thomas Monjalon
1c9d836159 pci: fix bsd build with gcc
GCC 4.8 raises this error:
lib/librte_eal/bsdapp/eal/eal_pci.c:453:15: error: cast discards
'__attribute__((const))' qualifier from pointer target type
   .pi_data = *(u_int32_t *)buf,
               ^

Note: this assignment seems useless because pi_data is filled
with memset later.

Fixes: 632b2d1deeed ("eal: provide functions to access PCI config")

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
2015-08-04 17:08:06 +02:00
Thomas Monjalon
40cf5f884a version: 2.1.0-rc3
Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
2015-08-04 00:12:18 +02:00
Nikita Kozlov
36080ff96b config: add KNI kmod option
This option permit to build librte_kni.so without building rte_kni.ko
so you can build a sdk without building kernel drivers.

Signed-off-by: Nikita Kozlov <nikita@elyzion.net>
2015-08-03 19:22:42 +02:00
Cunming Liang
81f8d2317d eal/linux: fix socket value for undetermined numa node
The patch sets zero as the default value of pci device numa_node
if the socket could not be determined.
It provides the same default value as FreeBSD which has no NUMA support,
and makes the return value of rte_eth_dev_socket_id() be consistent
with the API description.

Signed-off-by: Cunming Liang <cunming.liang@intel.com>
2015-08-03 19:22:42 +02:00
Stephen Hemminger
c07f42ec0b pci: cleanup scan loop
Do some cleanup of pci scan loop.
  * check errors first
  * don't initialize variables where not necessary
  * cuddle else (follow existing style)
  * chop off conditional after return

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
2015-08-03 18:03:06 +02:00