dpdk.git
10 years agoring: convert to use of PMD_REGISTER_DRIVER and fix linking
Neil Horman [Mon, 21 Apr 2014 14:59:29 +0000 (10:59 -0400)]
ring: convert to use of PMD_REGISTER_DRIVER and fix linking

Convert the ring driver to use the PMD_REGISTER_DRIVER macro and fix up the
Makefile so that its linkage is only done if we are building static libraries.
This means that the test applications now have no reference to the ring library
when building DSO's and must specify its use on the command line with the -d
option.  Static linking will still initalize the driver automatically.

Note that the ring driver was also written in such a way that it violated some
general layering principles, several functions were contained in the pmd which
were being called by example from the test application in the app/test
directory.  Specifically it was calling eth_ring_pair_attach,
eth_ring_pair_create and rte_eth_ring_devinit, which should only be called
internally to the dpdk core library.  To correct this I've removed those
functions, and instead allowed them to be called indirectly at initalization
time using the vdev command line argument key nodeaction=<name>:<node>:<action>
where action is one of ATTACH or CREATE.  I've tested out the functionality of
the command line with the testpmd utility, with success, and have removed the
called functions from the test utility.  This will affect how the test utility
is invoked (the -d and --vdev option will need to be specified on the command
line now), but honestly, given the way it was coded, I think the testing of the
ring pmd was not the best example of how to code with dpdk to begin with.  I
have also left the two layer violating functions in place, so as not to break
existing applications, but added deprecation warnings to them so that apps can
migrate off them.

Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agopcap: convert to use of PMD_REGISTER_DRIVER and fix linking
Neil Horman [Mon, 21 Apr 2014 14:59:28 +0000 (10:59 -0400)]
pcap: convert to use of PMD_REGISTER_DRIVER and fix linking

Convert the pcap driver to use the PMD_REGISTER_DRIVER macro and fix up the
Makefile so that its linkage is only done if we are building static libraries.
This means that the test applications now have no reference to the pcap library
when building DSO's and must specify its use on the command line with the -d
option.  Static linking will still initalize the driver automatically.

Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agoeal: add PMD_REGISTER_DRIVER macro
Neil Horman [Mon, 21 Apr 2014 14:59:27 +0000 (10:59 -0400)]
eal: add PMD_REGISTER_DRIVER macro

Rather than have each driver have to remember to add a constructor to it to make
sure its gets registered properly, wrap that process up in a macro to make
registration a one line affair.  This also sets the stage for us to make
registration of vdev pmds and physical pmds a uniform process

Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agoivshmem: fix build
Olivier Matz [Mon, 19 May 2014 12:36:37 +0000 (14:36 +0200)]
ivshmem: fix build

Fix compilation error introduced by:
e5ac7c2ff367edd eal: don't inline string functions

The stdio.h include is missing due to its removing from rte_string_fns.h.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agomempool: add iterator function
Stephen Hemminger [Fri, 2 May 2014 23:42:54 +0000 (16:42 -0700)]
mempool: add iterator function

Add function to iterate over mempool.
Useful for diagnostic code that wants to look at mempool usage patterns.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
10 years agomemzone: add iterator function
Stephen Hemminger [Fri, 2 May 2014 23:42:55 +0000 (16:42 -0700)]
memzone: add iterator function

When doing diagnostic function, it is useful to have a ability
to iterate over all memzones.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
10 years agoeal: don't inline string functions
Stephen Hemminger [Fri, 2 May 2014 23:42:53 +0000 (16:42 -0700)]
eal: don't inline string functions

It makes no sense to inline string functions, in fact snprintf
can't be inlined because the function supports variable number of
arguments.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
[Thomas: update includes]
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
10 years agoadd FILE argument to debug functions
Stephen Hemminger [Fri, 2 May 2014 23:42:56 +0000 (16:42 -0700)]
add FILE argument to debug functions

The DPDK dump functions are useful for remote debugging of an
applications. But when application runs as a daemon, stdout
is typically routed to /dev/null.

Instead change all these functions to take a stdio FILE * handle
instead. An application can then use open_memstream() to capture
the output.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
[Thomas: fix quota_watermark example]
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agospelling fixes
Stephen Hemminger [Fri, 2 May 2014 23:42:52 +0000 (16:42 -0700)]
spelling fixes

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
10 years agomk: add "make examples" target in root makefile
Olivier Matz [Fri, 16 May 2014 08:19:01 +0000 (10:19 +0200)]
mk: add "make examples" target in root makefile

It is now possible to build all projects from the examples/ directory
using one command from root directory.

Some illustration of what is possible:

- build examples in the DPDK tree for one target

  # install the x86_64-default-linuxapp-gcc in
  # ${RTE_SDK}/x86_64-default-linuxapp-gcc directory
  user@droids:~/dpdk.org$ make install T=x86_64-default-linuxapp-gcc
  # build examples for this new installation in
  # ${RTE_SDK}/examples directory
  user@droids:~/dpdk.org$ make examples T=x86_64-default-linuxapp-gcc

- build examples outside DPDK tree for several targets

  # install all targets matching x86_64-*-linuxapp-gcc in
  # ${RTE_SDK}/x86_64-*-linuxapp-gcc directories
  user@droids:~/dpdk.org$ make install T=x86_64-*-linuxapp-gcc
  # build examples for these installations in /tmp/foobar
  user@droids:~/dpdk.org$ make examples T=x86_64-*-linuxapp-gcc O=/tmp/foobar

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agoexamples/netmap_compat: fix makefile
Olivier Matz [Fri, 16 May 2014 08:19:00 +0000 (10:19 +0200)]
examples/netmap_compat: fix makefile

It is not allowed to reference a an absolute file name in SRCS-y.
A VPATH has to be used, else the dependencies won't be checked
properly.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agoexamples/qos_sched: fix makefile
Olivier Matz [Fri, 16 May 2014 08:18:59 +0000 (10:18 +0200)]
examples/qos_sched: fix makefile

The example does not compile as the linker complains about duplicated
symbols.

Remove -lsched from LDLIBS, it is already present in rte.app.mk and
added by the DPDK framework automatically.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agoexamples: add a makefile to build all examples
Olivier Matz [Fri, 16 May 2014 08:18:58 +0000 (10:18 +0200)]
examples: add a makefile to build all examples

It is now possible to build all examples by doing the following:

  user@droids:~/dpdk.org$ cd examples
  user@droids:~/dpdk.org/examples$ make RTE_SDK=${PWD}/.. \
      RTE_TARGET=x86_64-default-linuxapp-gcc

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agoexamples: use rte.extsubdir.mk to build examples with subdirectories
Olivier Matz [Fri, 16 May 2014 08:18:57 +0000 (10:18 +0200)]
examples: use rte.extsubdir.mk to build examples with subdirectories

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agomk: introduce rte.extsubdir.mk for projects with subdirectories
Olivier Matz [Fri, 16 May 2014 08:18:56 +0000 (10:18 +0200)]
mk: introduce rte.extsubdir.mk for projects with subdirectories

This makefile can be included by a project that needs to build several
applications or libraries that are located in different directories.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agomk: add missing scripts directory in install directory
David Marchand [Fri, 9 May 2014 13:31:01 +0000 (15:31 +0200)]
mk: add missing scripts directory in install directory

Trying to install headers for an external library using DPDK exported makefile
rte.extshared.mk results in following error :

$ cd dpdk
$ make install DESTDIR=/home/marchand/myapp/staging/plop T=x86_64-default-linuxapp-gcc
$ cd ~/myapp
$ make RTE_SDK=/home/marchand/myapp/staging/plop RTE_TARGET=x86_64-default-linuxapp-gcc
  CC plop.o
  LD plop.so
  SYMLINK-FILE include/plop.h
/bin/sh:
/home/marchand/myapp/staging/plop/scripts/relpath.sh: No such file or directory
ln: `/home/marchand/myapp/build/include' and `./include' are the same file
make[1]: *** [/home/marchand/myapp/build/include/plop.h] Error 1
make: *** [all] Error 2

This comes from the fact that DPDK only installs its mk/ directory while some
makefiles require the scripts/ directory content as well.

So install missing files from scripts/.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agoapp/testpmd: add --disable-link-check option
David Marchand [Wed, 30 Apr 2014 13:30:02 +0000 (15:30 +0200)]
app/testpmd: add --disable-link-check option

When starting/stopping ports, a link status check on all available ports is
done. This can be annoying when cables are not plugged at the time.
Default behavior is untouched.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agoapp/testpmd: show mac address at initialization
Zijie Pan [Wed, 30 Apr 2014 13:29:48 +0000 (15:29 +0200)]
app/testpmd: show mac address at initialization

Display port number and MAC address at start up.
It is useful when configuring a packet generator.

Signed-off-by: Zijie Pan <zijie.pan@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agoapp/testpmd: add engine that replies to ARP and ICMP echo requests
Ivan Boule [Wed, 30 Apr 2014 13:30:11 +0000 (15:30 +0200)]
app/testpmd: add engine that replies to ARP and ICMP echo requests

Add a new specific packet processing engine in the "testpmd" application that
only replies to ARP requests and to ICMP echo requests.
For this purpose, a new "icmpecho" forwarding mode is provided that can be
dynamically selected with the following testpmd command:

    set fwd icmpecho

before starting the receipt of packets on the selected ports.

Then, the "icmpecho" engine performs the following actions on all received
packets:

- replies to a received ARP request by sending back on the RX port a ARP
  reply with a "sender hardware address" field containing the MAC address
  of the RX port,

- replies to a ICMP echo request by sending back on the RX port a ICMP echo
  reply, swapping the IP source and the IP destination address in the IP
  header,

- otherwise, simply drops the received packet.

When replying to a received packet that was encapsulated into a VLAN tunnel,
the reply is sent back with the same VLAN identifier.
By default, the testpmd configures VLAN header stripping RX option on each
port.
This option is not managed by the icmpecho engine which won't detect
packets that were encapsulated into a VLAN.
To address this issue, the VLAN header stripping option must be previously
switched off with the following testpmd command:

    vlan set strip off

When the "verbose" mode has been set with the testpmd command
"set verbose 1", the "icmpecho" engine displays informations about each
received packet.

The "icmpecho" forwarding engine can also be used to simply check port
connectivity at the hardware level (check that cables are well-plugged)
and at the software level (receipt of VLAN packets, for instance).

Signed-off-by: Ivan Boule <ivan.boule@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agoapp/testpmd: allow txpkts to be setup via command line
Cyril Chemparathy [Thu, 3 Apr 2014 17:30:14 +0000 (10:30 -0700)]
app/testpmd: allow txpkts to be setup via command line

We allow a new --txpkts command-line parameter to configure segment sizes when
in txonly or flowgen forwarding modes.

Signed-off-by: Cyril Chemparathy <cchemparathy@tilera.com>
[Thomas: add usage help]
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agoapp/testpmd: add flowgen forwarding engine
Cyril Chemparathy [Thu, 3 Apr 2014 17:30:16 +0000 (10:30 -0700)]
app/testpmd: add flowgen forwarding engine

This commit adds a multi-flow traffic generator forwarding engine.  In effect,
this forwarding mode functions very similar to the txonly mode, with the
difference that it generates multiple L4 flows.

Signed-off-by: Cyril Chemparathy <cchemparathy@tilera.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agoapp/testpmd: add macswap forwarding engine
Cyril Chemparathy [Thu, 3 Apr 2014 17:30:15 +0000 (10:30 -0700)]
app/testpmd: add macswap forwarding engine

This commit adds a new forwarding mode, in which the source and destination
MAC addresses of packets are swapped before forwarding according to the
port-topology in effect.  This has been designed for operation primarily with
--port-topology=loopback.

Signed-off-by: Cyril Chemparathy <cchemparathy@tilera.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agoapp/testpmd: list forwarding engines
Thomas Monjalon [Wed, 14 May 2014 15:24:41 +0000 (17:24 +0200)]
app/testpmd: list forwarding engines

Having a function to list forwarding engines helps to show them
in cli help and in parameters usage witout duplicating code.

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Acked-by: Ivan Boule <ivan.boule@6wind.com>
10 years agoapp/testpmd: allow command line selection of forwarding engine
Cyril Chemparathy [Thu, 3 Apr 2014 17:30:13 +0000 (10:30 -0700)]
app/testpmd: allow command line selection of forwarding engine

This commit allows testpmd forwarding mode selection through command line
parameters instead of having to set this up in interactive mode.

Signed-off-by: Cyril Chemparathy <cchemparathy@tilera.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agoapp/testpmd: add auto-start option in interactive mode
Cyril Chemparathy [Thu, 3 Apr 2014 17:30:12 +0000 (10:30 -0700)]
app/testpmd: add auto-start option in interactive mode

This patch adds support for a command-line argument --auto-start (-a).  When
running in interactive mode, this allows us to start traffic without user
intervention before dropping to the prompt.

Signed-off-by: Cyril Chemparathy <cchemparathy@tilera.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agoapp/testpmd: add loopback topology
Cyril Chemparathy [Thu, 3 Apr 2014 17:30:11 +0000 (10:30 -0700)]
app/testpmd: add loopback topology

This commits adds a new "loop" option to the --port-topology argument.  With
the loop option specified, ingress traffic is simply transmitted back on the
same interface.

Signed-off-by: Cyril Chemparathy <cchemparathy@tilera.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agoapp/testpmd: fix incompatible sign for printf arguments
Julien Cretin [Mon, 12 May 2014 15:35:11 +0000 (17:35 +0200)]
app/testpmd: fix incompatible sign for printf arguments

The socket_id member of struct rte_port is an unsigned int while the d
conversion specifier of printf expects an int.

The addr_bytes member of struct ether_addr is an array of uint8_t
while the X conversion specifier of printf expects an unsigned int.
Values of type uint8_t are promoted to type int when used in the
ellipsis notation of a function.

These minor bugs were found using TrustInSoft Analyzer.

Signed-off-by: Julien Cretin <julien.cretin@trust-in-soft.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agoapp/testpmd: fix minor signed overflow in a constant
Julien Cretin [Mon, 12 May 2014 15:35:09 +0000 (17:35 +0200)]
app/testpmd: fix minor signed overflow in a constant

The expression (192 << 24) has an undefined behavior since:
- the integer constant 192 has type int, and
- 192 x 2^24 is not representable as an int.

Suffixing 192 with U defines a behavior since:
- the integer constant 192U has type unsigned int, and
- the value of (192U << 24) is defined as
  (192 x 2^24) % (UINT_MAX + 1)

This minor bug was found using TrustInSoft Analyzer.

Signed-off-by: Julien Cretin <julien.cretin@trust-in-soft.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agomem: remove redundant check in optimize_object_size
Julien Cretin [Mon, 12 May 2014 15:35:10 +0000 (17:35 +0200)]
mem: remove redundant check in optimize_object_size

The second condition of this logical OR:
    (get_gcd(new_obj_size, nrank * nchan) != 1 ||
    get_gcd(nchan, new_obj_size) != 1)
is redundant with the first condition.

We can show that the first condition is equivalent to its disjunction
with the second condition using these two results:

- R1: For all conditions A and B, if B implies A, then (A || B) is
  equivalent to A.

- R2: (get_gcd(nchan, new_obj_size) != 1) implies
  (get_gcd(new_obj_size, nrank * nchan) != 1)

We can show R1 with the following truth table (0 is false, 1 is true):
        +-----+-----++----------+-----+-------------+
        |  A  |  B  || (A || B) |  A  | B implies A |
        +-----+-----++----------+-----+-------------+
        |  0  |  0  ||     0    |  0  |      1      |
        |  0  |  1  ||     1    |  0  |      0      |
        |  1  |  0  ||     1    |  1  |      1      |
        |  1  |  1  ||     1    |  1  |      1      |
        +-----+-----++----------+-----+-------------+
                Truth table of (A || B) and A

We can show R2 by looking at the code of optimize_object_size and
get_gcd.

We see that:
- S1: (nchan >= 1) and (nrank >= 1).
- S2: get_gcd returns 0 only when both arguments are 0.

Let:
- X be get_gcd(new_obj_size, nrank * nchan).
- Y be get_gcd(nchan, new_obj_size).

Suppose:
- H1: get_gcd returns the greatest common divisor of its arguments.
- H2: (nrank * nchan) does not exceed UINT_MAX.

We prove (Y != 1) implies (X != 1) with the following steps:
- Suppose L0: (Y != 1). We have to show (X != 1).
- By H1, Y is the greatest common divisor of nchan and new_obj_size.
  In particular, we have L1: Y divides nchan and new_obj_size.
- By H2, we have L2: nchan divides (nrank * nchan)
- By L1 and L2, we have L3: Y divides (nrank * nchan) and
  new_obj_size.
- By H1 and L3, we have L4: (Y <= X).
- By S1 and S2, we have L5: (Y != 0).
- By L0 and L5, we have L6: (Y > 1).
- By L4 and L6, we have (X > 1) and thus (X != 1), which concludes.

R2 was also tested for all values of new_obj_size, nrank, and nchan
between 0 and 2000.

This redundant condition was found using TrustInSoft Analyzer.

Signed-off-by: Julien Cretin <julien.cretin@trust-in-soft.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agomem: change default per socket memory allocation
Didier Pallard [Fri, 9 May 2014 13:30:42 +0000 (15:30 +0200)]
mem: change default per socket memory allocation

Currently, if there is more memory in hugepages than the amount
requested by dpdk application, the memory is allocated by taking as much
memory as possible from each socket, starting from first one.
For example if a system is configured with 8 GB in 2 sockets (4 GB per
socket), and dpdk is requesting only 4GB of memory, all memory will be
taken in socket 0 (that have exactly 4GB of free hugepages) even if some
cores are configured on socket 1, and there are free hugepages on socket
1...

Change this behaviour to allocate memory on all sockets where some cores
are configured, spreading the memory amongst sockets using following
ratio per socket:
N° of cores configured on the socket / Total number of configured cores
* requested memory
If this new algorithm fails, it defaults to previous behaviour.

This algorithm is used when memory amount is specified globally using
-m option. Per socket memory allocation can always be done using
--socket-mem option.

It is implemented only for Linux as BSD part looks not to be ready for NUMA.

Signed-off-by: Didier Pallard <didier.pallard@6wind.com>
Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Venky Venkatesan <venky.venkatesan@intel.com>
10 years agoring: allow to initialize without memzone
Olivier Matz [Fri, 9 May 2014 10:14:53 +0000 (12:14 +0200)]
ring: allow to initialize without memzone

Allow to initialize a ring in an already allocated memory. The rte_ring_create()
function that allocates a ring in a rte_memzone is still available and now uses
the new rte_ring_init() function in order to factorize the code.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
10 years agoring: get size in memory
Olivier Matz [Fri, 9 May 2014 10:14:52 +0000 (12:14 +0200)]
ring: get size in memory

Add a function that returns the amount of memory occupied by a rte_ring
structure and its object table. This commit prepares the next one that
will allow to allocate a ring dynamically.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
10 years agopci: remove deprecated RTE_EAL_UNBIND_PORTS option
David Marchand [Fri, 9 May 2014 13:15:59 +0000 (15:15 +0200)]
pci: remove deprecated RTE_EAL_UNBIND_PORTS option

RTE_EAL_UNBIND_PORTS was deprecated in DPDK 1.4.0 and removed in 1.6.0, but the
code was not removed.

The bind/unbind operations should not be handled by the eal.
These operations should be either done outside of dpdk or inside the PMDs
themselves as these are their problems.

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
10 years agopci: move RTE_PCI_DRV_FORCE_UNBIND handling out of #ifdef
David Marchand [Fri, 9 May 2014 13:15:58 +0000 (15:15 +0200)]
pci: move RTE_PCI_DRV_FORCE_UNBIND handling out of #ifdef

Move RTE_PCI_DRV_FORCE_UNBIND flag handling out of RTE_EAL_UNBIND_PORTS section.
This had nothing to do with RTE_EAL_UNBIND_PORTS anyway.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
10 years agopci: pci_switch_module cleanup
David Marchand [Fri, 9 May 2014 13:15:57 +0000 (15:15 +0200)]
pci: pci_switch_module cleanup

The pci_switch_module() function should only do what its name tells: unbind pci
devices and rebind them on the specified kernel driver.
Hence, it can not call pci_uio_map_resource().

Call to pci_uio_map_resource() should be moved to rte_eal_pci_probe_one_driver()
so that we can factorize code.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
10 years agopci: rework interrupt fd init and fix fd leak
David Marchand [Fri, 9 May 2014 13:15:56 +0000 (15:15 +0200)]
pci: rework interrupt fd init and fix fd leak

A fd leak happens in pci_map_resource when multiple bars are mapped.
Fix this by closing fd unconditionnally in this function and open the
intr_handle fd in pci_uio_map_resource instead.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
10 years agopci: remove virtio-uio workaround
David Marchand [Fri, 9 May 2014 13:15:55 +0000 (15:15 +0200)]
pci: remove virtio-uio workaround

virtio-uio does not need eal to map bars from uio device, so remove flag
RTE_PCI_DRV_NEED_IGB_UIO.
Then, move virtio-uio workaround out of generic eal_pci.c for linux
implementation.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
10 years agopci: align bsd implementation on linux
David Marchand [Fri, 9 May 2014 13:15:54 +0000 (15:15 +0200)]
pci: align bsd implementation on linux

bsd implementation lacks check on driver flags, fix this.
Besides, check on BAR0 is not needed and could cause trouble for devices that
have no BAR0.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
10 years agopci: fix potential mem leaks
David Marchand [Fri, 9 May 2014 13:15:53 +0000 (15:15 +0200)]
pci: fix potential mem leaks

Looking at bsd implementation, we can see that there are some potential mem
leaks in linux implementation. Fix them.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
10 years agomem: take reserved hugepages into account
Burakov, Anatoly [Wed, 16 Apr 2014 11:11:12 +0000 (11:11 +0000)]
mem: take reserved hugepages into account

Some applications reserve hugepages for later use,
but DPDK doesn't take reserved pages into account
when calculating number of available number of hugepages.

This patch adds reading from "resv_hugepages" file
in addition to "free_hugepages".

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agoversion: 1.7.0-rc0
Thomas Monjalon [Fri, 9 May 2014 17:18:02 +0000 (19:18 +0200)]
version: 1.7.0-rc0

Start development cycle for version 1.7.0.

This new development workflow introduces a new versioning scheme.
Instead of having releases r0, r1, r2, etc, there will be release
candidates. Last number has special meanings:
< 16 numbers are reserved for release candidates (RTE_VER_SUFFIX is -rc)
16 is reserved for the release (RTE_VER_SUFFIX must be unset)
> 16 numbers can be used locally (RTE_VER_SUFFIX must be set)

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
10 years agoeal: print maximum and detected lcores
Wang Sheng-Hui [Mon, 14 Apr 2014 05:37:04 +0000 (13:37 +0800)]
eal: print maximum and detected lcores

Print the maximum lcore(s) as configured, and the number of lcore(s) detected
on eal cpu init as debug info besides the not separate detected/not-detected
lcore info.

Signed-off-by: Wang Sheng-Hui <shhuiw@gmail.com>
[Thomas: add BSD part]
Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agoeal: remove useless output of undetected lcores
Didier Pallard [Wed, 30 Apr 2014 14:14:53 +0000 (16:14 +0200)]
eal: remove useless output of undetected lcores

Increasing maximum number of lcores gives a huge place to undetected
lcores in output traces. Moreover, this output does not give any
interesting information, since list of undetected lcores can be deduced
from list of detected ones.
So remove output related to undetected cores.

Signed-off-by: Didier Pallard <didier.pallard@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agoeal: remove unused config fields
David Marchand [Fri, 18 Apr 2014 12:58:08 +0000 (14:58 +0200)]
eal: remove unused config fields

There is no need for a 'magic' field in struct rte_config, as this part of the
structure is local to each process. All threads of a process are synchronised
because of the run_once atomic.
So remove this field, as it is only adding confusion when reading code that
references 'magic' field from struct rte_mem_config.

Besides, there is no reference about the 'version' field, so remove it as well.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
10 years agomk: sort config templates listing
Thomas Monjalon [Fri, 2 May 2014 13:28:02 +0000 (15:28 +0200)]
mk: sort config templates listing

The config templates can be seen with "make showconfigs", "make config" or
"make help". It's easier to read if it's sorted.

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
10 years agoversion: 1.6.0r2
Thomas Monjalon [Wed, 30 Apr 2014 11:21:17 +0000 (13:21 +0200)]
version: 1.6.0r2

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agopkg: add recipe for RPM
Thomas Monjalon [Thu, 26 Sep 2013 16:22:16 +0000 (18:22 +0200)]
pkg: add recipe for RPM

Packages can be built with:
RPM_BUILD_NCPUS=8 rpmbuild -ta dpdk-1.6.0r1.tar.gz

There are packages for runtime and development.
Once devel package is installed, it can be used like this:
make -C /usr/share/dpdk/examples/helloworld RTE_SDK=/usr/share/dpdk

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
10 years agomk: fix build ignoring other installed versions
Thomas Monjalon [Tue, 29 Apr 2014 07:57:38 +0000 (09:57 +0200)]
mk: fix build ignoring other installed versions

If some DPDK libraries are installed on the system, the linker was trying
to use them before searching in -L path.
The obscure reason is that we were prefixing -L with -Wl, to pass it
directly to the linker.
But -L is also a gcc option. And allowing gcc to process this option fixes
the issue.

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
10 years agoeal: fix usage description for bsd
Thomas Monjalon [Wed, 30 Apr 2014 15:05:45 +0000 (17:05 +0200)]
eal: fix usage description for bsd

A line was forgotten when removing blacklist option in commit
"use devargs for vdev and PCI lists with bsd" (cd25fb0863).

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agoeal: fix vdev allocation on non-0 numa socket
Maxime Leroy [Wed, 30 Apr 2014 13:15:08 +0000 (15:15 +0200)]
eal: fix vdev allocation on non-0 numa socket

vdev ethdev can not be allocated on a numa socket that is not socket 0.
The reason comes from rte_eth_dev_allocate() which uses rte_socket_id() to
identify the socket on which vdev driver data should be allocated.
However, at this initialization step, rte_socket_id() always returns 0.

Looking at rte_socket_id(), it needs rte_lcore_id() which uses the per-core
global _lcore_id variable. This variable is initialised by
eal_thread_init_master.

So eal_thread_init_master should be called before rte_eal_vdev_init().

Signed-off-by: Maxime Leroy <maxime.leroy@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agoapp/testpmd: fix crash of tx_first mode with numa
Adrien Mazarguil [Wed, 30 Apr 2014 13:16:16 +0000 (15:16 +0200)]
app/testpmd: fix crash of tx_first mode with numa

When NUMA is enabled, the mbuf pool pointer of per-core fwd_lcores structure
is not set, causing a crash when accessing to mbp for txonly burst.

Initialize fwd_lcore after allocating NUMA memory pools.

Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agoapp/testpmd: check socket id validity
Liu Xiaofeng [Tue, 15 Apr 2014 13:51:39 +0000 (15:51 +0200)]
app/testpmd: check socket id validity

Now socket id is from device's numa_node, if it is invalid, just set it to 0
as default to avoid crash which will be caused by the reference to
port_per_socket[socket_id].

Also one warning is displayed to user that port-numa-config and
ring-numa-config parameters should be used along with --numa for NUMA mode.

A check for NUMA_NO_CONFIG was also missing from init_fwd_stream().

Signed-off-by: Liu Xiaofeng <xiaofeng.liu@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agomalloc: simplify heap initialisation
David Marchand [Fri, 18 Apr 2014 12:56:18 +0000 (14:56 +0200)]
malloc: simplify heap initialisation

There should be no real need for this initialised field as the whole structure
is set to 0 in rte_config_init() by primary process, and secondary processes
wait for this to happen before anything else (looking at mem_config magic).

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
10 years agomalloc: fix race condition on numa_socket field
David Marchand [Fri, 18 Apr 2014 12:56:17 +0000 (14:56 +0200)]
malloc: fix race condition on numa_socket field

We don't really need this field as it is only used when creating the memzone
object associated to this heap.
Removing numa_socket field makes things simpler and remove race condition.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
10 years agokni: fix build with debian kernel 3.2.57-2
David Marchand [Tue, 29 Apr 2014 14:16:03 +0000 (16:16 +0200)]
kni: fix build with debian kernel 3.2.57-2

Following debian kernel headers upgrade to 3.2.57, pci capability accessors
have been backported (upstream commit 8c0d3a02c1309eb6112d2e7c8172e8ceb26ecfca,
("PCI: Add accessors for PCI Express Capability", v3.7-rc1)).

It results in the same compilation error as redhat 6.x.
However, there is no clear way to determine we are building on a debian kernel.
So, rather than determine if we are building on a distribution kernel, look at
PCI_EXP_LNKSTA2 that appeared in this upstream commit.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
10 years agonic_uio: fix build with freebsd 10
Olivier Matz [Fri, 25 Apr 2014 11:59:45 +0000 (13:59 +0200)]
nic_uio: fix build with freebsd 10

Compiling the DPDK under FreeBSD gives the following error due to a
missing include <sys/rwlock.h>.

In file included from nic_uio.c:52:
@/vm/vm_pager.h:126:2: error: implicit declaration of function 'rw_assert' is invalid in C99
      [-Werror,-Wimplicit-function-declaration]
        VM_OBJECT_ASSERT_WLOCKED(object);
        ^
@/vm/vm_object.h:226:2: note: expanded from macro 'VM_OBJECT_ASSERT_WLOCKED'
        rw_assert(&(object)->lock, RA_WLOCKED)
        ^
In file included from nic_uio.c:52:
@/vm/vm_pager.h:126:2: error: use of undeclared identifier 'RA_WLOCKED'
@/vm/vm_object.h:226:29: note: expanded from macro 'VM_OBJECT_ASSERT_WLOCKED'
        rw_assert(&(object)->lock, RA_WLOCKED)
                                   ^
In file included from nic_uio.c:52:
@/vm/vm_pager.h:143:2: error: use of undeclared identifier 'RA_WLOCKED'
        VM_OBJECT_ASSERT_WLOCKED(object);
        ^
@/vm/vm_object.h:226:29: note: expanded from macro 'VM_OBJECT_ASSERT_WLOCKED'
        rw_assert(&(object)->lock, RA_WLOCKED)
                                   ^
In file included from nic_uio.c:52:
@/vm/vm_pager.h:167:2: error: use of undeclared identifier 'RA_WLOCKED'
        VM_OBJECT_ASSERT_WLOCKED(object);
        ^
@/vm/vm_object.h:226:29: note: expanded from macro 'VM_OBJECT_ASSERT_WLOCKED'
        rw_assert(&(object)->lock, RA_WLOCKED)
                                   ^
In file included from nic_uio.c:52:
@/vm/vm_pager.h:190:2: error: use of undeclared identifier 'RA_WLOCKED'
        VM_OBJECT_ASSERT_WLOCKED(m->object);
        ^
@/vm/vm_object.h:226:29: note: expanded from macro 'VM_OBJECT_ASSERT_WLOCKED'
        rw_assert(&(object)->lock, RA_WLOCKED)
                                   ^

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
10 years agodevargs: allow to provide arguments per pci device for bsd
Olivier Matz [Fri, 25 Apr 2014 11:59:44 +0000 (13:59 +0200)]
devargs: allow to provide arguments per pci device for bsd

The bsdapp part was missing in commit 8e245de6ca7e050e282cd49ffd5e68a5b6ff62f5.

Add the ability to pass some specific initialization arguments to PCI
devices at start-up.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
10 years agodevargs: replace --use-device option by --pci-whitelist and --vdev for bsd
Olivier Matz [Fri, 25 Apr 2014 11:59:43 +0000 (13:59 +0200)]
devargs: replace --use-device option by --pci-whitelist and --vdev for bsd

The bsdapp part was missing in commit cac6d08c8bde2fdb57806c49038187cdb54219a8.

This commit splits the "--use-device" option in two new options:

- "--pci-whitelist or -w": add a PCI device in the white list
- "--vdev": instanciate a new virtual device

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
10 years agodevargs: use a comma to separate key/values for bsd
Olivier Matz [Fri, 25 Apr 2014 11:59:42 +0000 (13:59 +0200)]
devargs: use a comma to separate key/values for bsd

The bsdapp part was missing in commit a8b97e3a1db0a9366d58811411b904e4fef8160f.

This commit changes the API of --use-device command line argument.
It changes the separators from ';' to ','.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
10 years agodevargs: use devargs for vdev and PCI lists with bsd
Olivier Matz [Fri, 25 Apr 2014 11:59:41 +0000 (13:59 +0200)]
devargs: use devargs for vdev and PCI lists with bsd

The bsdapp part was missing in commit 12204589517e06230e24e0f23396222f2929bd77.

This patch removes old whitelist code and use the newly introduced
rte_devargs to get the PCI white list, the PCI black list and the list
of virtual devices.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
10 years agodevargs: build common functions for bsd
Olivier Matz [Fri, 25 Apr 2014 11:59:40 +0000 (13:59 +0200)]
devargs: build common functions for bsd

The bsd part was missing in commit bf6dea0e04afc0d1f2c8056cd4d1aecab12502d1.

This commit introduces a new API for storing device arguments given by
the user. It only adds the framework and the test.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
10 years agopci: rename device and driver lists for bsd
Olivier Matz [Fri, 25 Apr 2014 11:59:39 +0000 (13:59 +0200)]
pci: rename device and driver lists for bsd

The bsdapp part was missing in commit 5b1f4a67dd5bcfa8d5139c064ced6e37a9149419.

To avoid confusion with virtual devices, rename device_list as
pci_device_list and driver_list as pci_driver_list.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
10 years agomem: get dummy physical address in case of --no-huge with bsd
Olivier Matz [Fri, 25 Apr 2014 11:59:48 +0000 (13:59 +0200)]
mem: get dummy physical address in case of --no-huge with bsd

The bsdapp part was missing in commit 57c24af85d9eaa81549a212169605b4e2468a29f.

This commit adds a dummy rte_mem_virt2phy() to fix the compilation of
DPDK under BSD. This function is only used when the debug option
"--no-huge" is given, to get the physical address of mempools in memory.

As a result, it seems acceptable for now to implement a dummy function
to fix the compilation as the usual case (using contigmem module) works
properly.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
10 years agomem: get hugepages config for bsd
Olivier Matz [Fri, 25 Apr 2014 11:59:47 +0000 (13:59 +0200)]
mem: get hugepages config for bsd

The bsdapp part was missing in c5e9eeca5a67a8272f0fdedcd0afc9b2d22be376.

This commit allows external libraries and applications to know if
hugepages are enabled.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
10 years agomk: use the Q variable instead of @ for bsd module
Olivier Matz [Fri, 25 Apr 2014 11:59:46 +0000 (13:59 +0200)]
mk: use the Q variable instead of @ for bsd module

This allows to use V=1 to be more verbose to debug the build process
of a bsd kernel module.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agomk: fix -share option error
Neil Horman [Wed, 16 Apr 2014 13:51:44 +0000 (09:51 -0400)]
mk: fix -share option error

The shared libraries built with the current makefile set produce static
libraries rather than actual shared objects.  This is due to several missing
options that are required to correctly build shared objects using ld, as well as
a mis-specified -share option (which should be -shared). Switching to the use of
CC rather than LD and fixing the -shared option corrects these problems and
builds the DSOs correctly.

Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
10 years agoeal: do not try to load library from current directory
Pascal Mazon [Tue, 15 Apr 2014 13:50:22 +0000 (15:50 +0200)]
eal: do not try to load library from current directory

When loading a library "libfoo.so" (depending on "libbar.so", located in an
entirely different folder), with a LD_LIBRARY_PATH=/path/to/libfoo.so", it
returns an error:

 EAL: ./libfoo.so: cannot open shared object file: No such file or directory

If the first dlopen() fails (here, because it can't find all dependencies),
the code requires for a second dlopen() that looks for "./libfoo.so". It
turns on pathname matching, which does not use LD_LIBRARY_PATH. As a result,
it fails because it cannot find "./libfoo.so".

The error message matches the error of the second dlopen(), not the first's.

Do not try to look for a different library ("./"-prefixed) than the one
provided in argument. Let the dynamic library management handle it, just
provide an appropriate LD_LIBRARY_PATH.

Signed-off-by: Pascal Mazon <pascal.mazon@6wind.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
10 years agoeal: check coremask against detected lcores
David Marchand [Tue, 15 Apr 2014 13:50:42 +0000 (15:50 +0200)]
eal: check coremask against detected lcores

lcores that are set in coremask should be checked against lcores detected on
system. This way, we won't need to check them later.

Besides, if specifying an unavailable lcore, we currently panic in
eal_thread_loop() because pthread_setaffinity_np fails.
So this check will return an error with a more explicit message in
eal_parse_coremask().

"EAL: pthread_setaffinity_np failed
 PANIC in eal_thread_loop():
 cannot set affinity"

becomes :

"EAL: lcore 4 unavailable
 EAL: invalid coremask"

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
10 years agoeal: fix check of all requested CPU features
Neil Horman [Wed, 16 Apr 2014 10:50:40 +0000 (06:50 -0400)]
eal: fix check of all requested CPU features

Only the last feature was checked since commit 99f2cdf9ca10
(eal: fix %rbx corruption and simplify the code)

The return code for rte_cpu_get_flag_enabled is only checked on the termination
of the for loop that it is called inside, but should be checked for every
iteration it makes through the for loop.  This is caused by some silly missing
brackets.  Simply add them in

Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
Reported-by: Pablo De Lara Guarch <pablo.de.lara.guarch@intel.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agokni: more compatibility with RHEL 6.4/6.5
Jean-Mickael Guerin [Tue, 15 Apr 2014 13:51:23 +0000 (15:51 +0200)]
kni: more compatibility with RHEL 6.4/6.5

For RH 6.5:
- always include mdio.h to get the definitions of MDIO_EEE, ETHTOOL_GEEE
- is_link_local_ether_addr(), pcie_capability_clear_and_set_word(),  and
  ether_addr_equal() have been backported

For RH 6.4:
- same issue with ether_addr_equal()
- here ETH_GEE is defined without having the functions.

igb_ethtool.c:2441: error: implicit declaration of function ‘mmd_eee_adv_to_ethtool_adv_t’

Signed-off-by: Jean-Mickael Guerin <jean-mickael.guerin@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agokni: disable FDB operations on RHEL 6.5
Jean-Mickael Guerin [Tue, 15 Apr 2014 13:51:22 +0000 (15:51 +0200)]
kni: disable FDB operations on RHEL 6.5

On RH 6.5:
igb_main.c:2298: error: unknown field ‘ndo_fdb_add’ specified in
initializer

FDB ops are present in RH 6.5 via the extension of netdev, so add the
ifdef inside the netdev ops definition of igb.

However, FDB functions are not set for RHEL 6.5: the implementation
relies on dev_mc_add_excl API which has not been backported.

Signed-off-by: Jean-Mickael Guerin <jean-mickael.guerin@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agokni: fix build with kernel 3.15
Aaro Koskinen [Mon, 14 Apr 2014 13:50:00 +0000 (16:50 +0300)]
kni: fix build with kernel 3.15

rxhash has been renamed to hash. In 3.14 and newer, we can use
skb_set_hash().

Signed-off-by: Aaro Koskinen <aaro.koskinen@nsn.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agoivshmem: fix errors identified by hardening
Stephen Hemminger [Fri, 7 Mar 2014 18:13:41 +0000 (10:13 -0800)]
ivshmem: fix errors identified by hardening

Need to pass mode argument to open with O_CREAT.
Must check return value from ftruncate().

Signed-off-by: Stephen Hemminger <shemming@brocade.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agomk: pass CROSS_COMPILE when compiling kernel modules
Aaro Koskinen [Fri, 7 Feb 2014 16:44:18 +0000 (18:44 +0200)]
mk: pass CROSS_COMPILE when compiling kernel modules

Pass CROSS_COMPILE to the kernel build system when compiling kernel
modules. Although we export CC etc. the top level kernel Makefile will
override the environment. As a result it will end up using wrong tools
if cross-compilation is desired but CROSS_COMPILE is not set.

Signed-off-by: Aaro Koskinen <aaro.koskinen@nsn.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agovdev: allow external registration of virtual device drivers
Olivier Matz [Fri, 11 Apr 2014 07:36:53 +0000 (09:36 +0200)]
vdev: allow external registration of virtual device drivers

The registration of an external vdev driver (a .so library) is done in a
function that has the ((constructor)) attribute. This function is called
when dlopen(driver.so) is invoked.

As a result, we need to do the dlopen() before calling
rte_eal_vdev_init() that calls the initialization functions of all
registered drivers.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agovdev: new registration API
Olivier Matz [Fri, 11 Apr 2014 07:36:52 +0000 (09:36 +0200)]
vdev: new registration API

Instead of having a list of virtual device drivers in EAL code, add an
API to register drivers. Thanks to this new registration method, we can
remove the references to pmd_ring, pmd_pcap and pmd_xenvirt in EAL code.
This also enables the ability to register a virtual device driver as
a shared library.

The registration is done in an init function flaged with
__attribute__((constructor)). The new convention is to name this
function rte_pmd_xyz_init(). The per-device init function is renamed
rte_pmd_xyz_devinit().

By the way the internal PMDs are now also .so/standalone ready. Let's do
it later on. It will be required to ease maintenance.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agovdev: rename nonpci_devs as vdev
Olivier Matz [Fri, 11 Apr 2014 11:45:03 +0000 (13:45 +0200)]
vdev: rename nonpci_devs as vdev

The name "nonpci_devs" for virtual devices is ambiguous as a physical
device can also be non-PCI (ex: usb, sata, ...). A better name for this
file is "vdev" as it only deals with virtual devices.

This patch doesn't introduce any change except renaming.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agodevargs: add in doc
Thomas Monjalon [Thu, 10 Apr 2014 14:15:28 +0000 (16:15 +0200)]
devargs: add in doc

Reference the new library in doxygen.

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agotestpmd: add dump commands for debug
Olivier Matz [Sat, 1 Mar 2014 12:15:01 +0000 (13:15 +0100)]
testpmd: add dump commands for debug

Copy all the dump commands provided in app/test into app/testpmd. These
commands are useful to debug a problem when using testpmd.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agodevargs: add dump command in test application
Olivier Matz [Fri, 28 Feb 2014 17:25:43 +0000 (18:25 +0100)]
devargs: add dump command in test application

This is useful for debug purposes. Example:

echo 100 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
echo 100 > /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages
./app/test -c 0x15 -n 3 -m 64 \
  --use-dev="eth_ring0" --use-device="eth_ring1" --use-device="02:00.0"
RTE>>dump_devargs
User device white list:
  VIRTUAL eth_ring0
  VIRTUAL eth_ring1
  PCI whitelist 0000:02:00.0

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agodevargs: allow to provide arguments per pci device
Olivier Matz [Sat, 1 Mar 2014 12:14:54 +0000 (13:14 +0100)]
devargs: allow to provide arguments per pci device

Some PCI drivers may require some specific initialization arguments at
start-up.

Even if unused today, adding this feature seems coherent with virtual
devices in order to provide a full-featured rte_devargs framework. In
the future, it could be added in pmd_ixgbe or pmd_igb for instance to
enable debug of drivers or setting a specific operating mode at
start-up.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agodevargs: replace --use-device option by --pci-whitelist and --vdev
Olivier Matz [Sat, 1 Mar 2014 12:14:45 +0000 (13:14 +0100)]
devargs: replace --use-device option by --pci-whitelist and --vdev

This commit splits the "--use-device" option in two new options:

- "--pci-whitelist or -w": add a PCI device in the white list
- "--vdev": instanciate a new virtual device

Before the patch, the same option "--use-device" was used for these 2
use-cases.

By the way, we also add "--pci-blacklist" in addition to the existing
"-b" for coherency with the whitelist parameter.

Test result:

echo 100 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
echo 100 > /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages
./app/test -c 0x15 -n 3 -m 64
RTE>>eal_flags_autotest
[...]
Test OK

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agodevargs: use a comma instead of semicolon to separate key/values
Olivier Matz [Fri, 28 Feb 2014 17:25:47 +0000 (18:25 +0100)]
devargs: use a comma instead of semicolon to separate key/values

This commit changes the API of --use-device command line argument.
It changes the separators from ';' to ','. Indeed, ';' is not the best
choice as this character is also used to separate shell commands,
forcing the user to surround arguments with quotes.

This commit impacts both devargs and kvargs as each of them define
a separator in --use-device argument:

- devargs defines the separator between the device name or pci_id and
   its arguments
- kvargs defines the separator between each key/value pairs in
   arguments for drivers using the kvargs API to parse their arguments

The modification of devargs and kvargs is done in one commit to keep
the coherency of --use-device.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agodevargs: use devargs for vdev and PCI whitelist/blacklist
Olivier Matz [Sat, 1 Mar 2014 12:14:34 +0000 (13:14 +0100)]
devargs: use devargs for vdev and PCI whitelist/blacklist

Remove old whitelist code:
- remove references to rte_pmd_ring, rte_pmd_pcap and pmd_xenvirt in
  is_valid_wl_entry() as we want to be able to register external virtual
  drivers as a shared library. Moreover this code was duplicated with
  dev_types[] from eal_common_pci.c
- eal_common_whitelist.c was badly named: it was able to process PCI
  devices white list and the registration of virtual devices
- the parsing code was complex: all arguments were prepended in
  one string dev_list_str[4096], then split again

Use the newly introduced rte_devargs to get:
- the PCI white list
- the PCI black list
- the list of virtual devices

Rework the tests:
- a part of the whitelist test can be removed as it is now tested
  in app/test/test_devargs.c
- the other parts are just reworked to adapt them to the new API

This commit induce a small API modification: it is not possible to specify
several devices per "--use-device" option. This notation was anyway a bit
cryptic. Ex:
  --use-device="eth_ring0,eth_pcap0;iface=ixgbe0"
  now becomes:
  --use-device="eth_ring0" --use-device="eth_pcap0;iface=ixgbe0"

On the other hand, it is now possible to work in PCI blacklist mode and
instanciate virtual drivers, which was not possible before this patch.

Test result:

./app/test -c 0x15 -n 3 -m 64
RTE>>devargs_autotest
EAL: invalid PCI identifier <08:1>
EAL: invalid PCI identifier <00.1>
EAL: invalid PCI identifier <foo>
EAL: invalid PCI identifier <>
EAL: invalid PCI identifier <000f:0:0>
Test OK

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agodevargs: introduce API and test
Olivier Matz [Sat, 1 Mar 2014 12:14:15 +0000 (13:14 +0100)]
devargs: introduce API and test

This commit introduces a new API for storing device arguments given by
the user. It only adds the framework and the test. The modification of
EAL to use this new module is done in next commit.

The final goals:

- unify pci-blacklist, pci-whitelist, and virtual devices arguments
  in one file
- allow to register a virtual device driver from a dpdk extension
  provided as a shared library. For that we will require to remove
  references to rte_pmd_ring and rte_pmd_pcap in argument parsing code
- clarify the API of eal_common_whitelist.c, and rework its code that is
  often complex for no reason.
- support arguments for PCI devices and possibly future non-PCI devices
  (other than virtual devices) without effort.

Test result:

echo 100 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
echo 100 > /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages
./app/test -c 0x15 -n 3 -m 64
RTE>>eal_flags_autotest
[...]
Test OK

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agopci: rename device and driver lists
Olivier Matz [Fri, 28 Feb 2014 17:25:44 +0000 (18:25 +0100)]
pci: rename device and driver lists

To avoid confusion with virtual devices, rename device_list as
pci_device_list and driver_list as pci_driver_list.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agomk: use whole-archive option to keep unused symbols
Olivier Matz [Fri, 28 Feb 2014 17:25:40 +0000 (18:25 +0100)]
mk: use whole-archive option to keep unused symbols

To fully support dpdk extensions (loading of .so), all symbols provided
by dpdk libraries must be available in the binaries: before this patch,
unused functions/variables from dpdk static libraries could be stripped
by the linker because they are not used. These symbols can be used by a
dpdk extension that is loaded at runtime with the -d option.

Adding --whole-archive when generating a binary solves this issue.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agoixgbe: release software locked semaphores on initialization
Didier Pallard [Tue, 8 Apr 2014 13:29:57 +0000 (15:29 +0200)]
ixgbe: release software locked semaphores on initialization

It may happen that DPDK application gets killed while having
acquired locks on the ethernet hardware, causing these locks to
be never released. On next restart of the application, DPDK
skip those ports because it can not acquire the lock,
this may cause some ports (or even complete board if SMBI is locked)
to be inaccessible from DPDK application until reboot of the
hardware.

This patch release locks that are supposed to be locked due to
an improper exit of the application.

Signed-off-by: Didier Pallard <didier.pallard@6wind.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
10 years agoigb: release software locked semaphores on initialization
Didier Pallard [Tue, 8 Apr 2014 13:29:58 +0000 (15:29 +0200)]
igb: release software locked semaphores on initialization

It may happen that DPDK application gets killed while having
acquired locks on the ethernet hardware, causing these locks to
be never released. On next restart of the application, DPDK
skip those ports because it can not acquire the lock,
this may cause some ports (or even complete board if SMBI is locked)
to be inaccessible from DPDK application until reboot of the
hardware.

This patch release locks that are supposed to be locked due to
an improper exit of the application.

Signed-off-by: Didier Pallard <didier.pallard@6wind.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
10 years agotimer: fix TSC frequency by not reading /proc/cpuinfo
Bruce Richardson [Mon, 7 Apr 2014 12:57:28 +0000 (13:57 +0100)]
timer: fix TSC frequency by not reading /proc/cpuinfo

This reverts commit da6fd0759cbeb5fc14991a79e40105b9f6b99059.
"timer: get TSC frequency from /proc/cpuinfo"

The use of cpuinfo to determine the frequency of the TSC is not
advisable and leads to incorrect results when power management is
in use. This is because, while the TSC frequency does not change
in modern cpus with constant_tsc support, the frequency of the core,
and hence the frequency of the core reported by cpuinfo *does* change.

Depending on the current frequency of core 0 when an application is
started, the EAL can get a wildly incorrect value for the TSC freq.
Since frequency is scaled down for power saving, any incorrect value
is likely to be lower than the default, which means that any delay
loops inside the code which rely on the TSC will be shorter than
planned. This can cause issues (reported on the mailing list by a number
of people) where ports are not initialized correctly due to delays being
too short.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agoeal: fix %rbx corruption and simplify the code
Neil Horman [Tue, 25 Mar 2014 19:52:59 +0000 (15:52 -0400)]
eal: fix %rbx corruption and simplify the code

Neil Horman reported that on x86-64 the upper half of %rbx would get
clobbered when the code was compiled PIC or PIE, because the
i386-specific code to preserve %ebx was incorrectly compiled.

However, the code is really way more complex than it needs to be.  For
one thing, the CPUID instruction only needs %eax (leaf) and %ecx
(subleaf) as parameters, and since we are testing for bits, we might
as well list the bits explicitly.  Furthermore, we can use an array
rather than doing a switch statement inside a structure.

Reported-by: Neil Horman <nhorman@tuxdriver.com>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
Reviewed-by: H. Peter Anvin <hpa@linux.intel.com>
10 years agomk: fix dependencies when modifying config
Thomas Monjalon [Wed, 19 Mar 2014 11:13:45 +0000 (12:13 +0100)]
mk: fix dependencies when modifying config

If .config file is changed and .depdirs was built before,
it must be updated.
It is now done silently (-s) in checkconfig rule.
Now .depdirs is not redone if .config is older.

It has been tested by enabling PMD_PCAP after a default build.
KVARGS dependency should appear in .depdirs.

There is also a typo fix for PHONY rule.

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
10 years agoixgbe: support flow director for X540
Mauro Annarumma [Mon, 24 Mar 2014 21:17:06 +0000 (22:17 +0100)]
ixgbe: support flow director for X540

Flow director in X540 uses the same registers as in 82599.
So it just has to be enabled in the 82599 implementation.

Signed-off-by: Mauro Annarumma <mauroannarumma@hotmail.it>
Acked-by: Maxime Leroy <maxime.leroy@6wind.com>
10 years agomempool: use GCC push/pop_options
Stephen Hemminger [Fri, 7 Mar 2014 18:13:39 +0000 (10:13 -0800)]
mempool: use GCC push/pop_options

The include file should not change the GCC compile options for
the whole file being compiled, but only for the one inline function
that needs it. Using the push_options/pop_options fixes this.

Signed-off-by: Stephen Hemminger <shemming@brocade.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agohash: make arg for jhash2 const
Stephen Hemminger [Fri, 7 Mar 2014 18:13:38 +0000 (10:13 -0800)]
hash: make arg for jhash2 const

The argument to rte_jhash2() is not changed.

Signed-off-by: Stephen Hemminger <shemming@brocade.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agombuf: copy offload flags when doing attach/clone
Stephen Hemminger [Fri, 7 Mar 2014 18:13:36 +0000 (10:13 -0800)]
mbuf: copy offload flags when doing attach/clone

rte_pktmbuf_attach copies the packet meta data but does not
copy the offload flags. This means that cloned packets lose
their offload settings such as vlan tag.

Signed-off-by: Stephen Hemminger <shemming@brocade.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agovmxnet3: rename library
Thomas Monjalon [Fri, 21 Mar 2014 12:52:17 +0000 (13:52 +0100)]
vmxnet3: rename library

In order to distinguish clearly this implementation from the extension
vmxnet3-usermap, it is renamed to reflect its usage of uio framework.

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Acked-by: Thomas Graf <tgraf@redhat.com>
10 years agopci: fix igb_uio mapping for virtio_uio and vmxnet3_uio
Daniel Kan [Wed, 12 Mar 2014 20:19:59 +0000 (13:19 -0700)]
pci: fix igb_uio mapping for virtio_uio and vmxnet3_uio

Since commit 10ed994 (pci: use igb_uio mapping only when needed),
the flag RTE_PCI_DRV_NEED_IGB_UIO must be set even if RTE_EAL_UNBIND_PORTS
is disabled.
It was not the case for virtio_uio and vmxnet3_uio so the uio resources were
not mapped when RTE_EAL_UNBIND_PORTS was not defined.
Specifically, pci_uio_map_resource() was not called so
pci_dev->mem_resource was not mapped.

Signed-off-by: Daniel Kan <dan@nyansa.com>
Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agoigb_uio: don't bind vmxnet3 and virtio devices if disabled
David Marchand [Wed, 5 Mar 2014 15:16:28 +0000 (16:16 +0100)]
igb_uio: don't bind vmxnet3 and virtio devices if disabled

When not using vmxnet3-uio and virtio-uio PMDs, prevent igb_uio from binding
these devices. This way, vmxnet3 and virtio PMDs won't fail to initialize
because of a device silently bound to igb_uio.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
10 years agovirtio: rename library
Thomas Monjalon [Mon, 3 Feb 2014 17:45:14 +0000 (18:45 +0100)]
virtio: rename library

In order to distinguish clearly this implementation from the extension
virtio-net-pmd, it is renamed to reflect its usage of uio framework.

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Acked-by: Chris Wright <chrisw@redhat.com>