Updating the vring descriptor index should be done before notifying host;
Remove 2 duplicated store memory barriers in both Rx and Tx path because there is
store memory barrier in vq_update_avail_idx function;
Notify the host only if packets actually transmitted(nb_tx > 0).
The DPDK driver only has to deal with the case of running on PCI
and with SMP. In this case, the code can use the weaker barriers
instead of using hard (fence) barriers. This will help performance.
The rationale is explained in Linux kernel virtio_ring.h.
To make it clearer that this is a virtio thing and not some generic
barrier, prefix the barrier calls with virtio_.
Add missing (and needed) barrier between updating ring data
structure and notifying host.
Panu Matilainen [Thu, 19 Feb 2015 11:21:10 +0000 (13:21 +0200)]
i40e: fix build with gcc 5
Eliminate ambiguity in the condition which trips up a "logical not
is only applied to the left..." warning from gcc 5, causing build
failure with -Werror. Besides non-ambiguous, the condition is
far more obvious this way.
Signed-off-by: Panu Matilainen <pmatilai@redhat.com> Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
When the vector pmd was receiving a mix of packets of various sizes,
some of which were split across multiple mbufs, there was an issue
with reassembly of the jumbo frames. This was due to a skipped increment
when using "continue" in a while loop. Changing the loop to a "for"
loop fixes this problem, by ensuring the increment is always performed.
Reported-by: Prashant Upadhyaya <praupadhyaya@gmail.com> Reported-by: Martin Weiser <martin.weiser@allegro-packets.com> Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> Tested-by: Martin Weiser <martin.weiser@allegro-packets.com>
Olivier Matz [Wed, 4 Feb 2015 09:49:25 +0000 (10:49 +0100)]
cmdline: fix check in port list parsing
The argument ressize contains the size of the result buffer which
should be large enough to store the parsed result of a token. In
this case, it should be larger or equal to sizeof(cmdline_portlist_t)
(4 bytes), not PORTLIST_TOKEN_SIZE which is the max size of the token
string.
This is not a critical, it fixes cases where the total length of the
parsed instruction is greater than the maximum.
Daniel Mrzyglod [Thu, 13 Nov 2014 12:01:31 +0000 (12:01 +0000)]
mk: support x32 ABI
x32 ABI provides benefits of x86-64 while using 32-bit pointers and
avoiding overhead of 64-bit pointers.
Test report: http://dpdk.org/ml/archives/dev/2015-February/012599.html
Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com> Signed-off-by: Daniel Mrzyglod <danielx.t.mrzyglod@intel.com> Tested-by: Haifeng Tang <haifengx.tang@intel.com> Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Tomasz Kulasek [Fri, 13 Feb 2015 10:38:16 +0000 (11:38 +0100)]
bond: fix symbol export
rte_eth_bond_8023ad_setup and rte_eth_bond_8023ad_conf_get entries need
to be exported to be used by test application for shared libraries
compilation.
Signed-off-by: Tomasz Kulasek <tomaszx.kulasek@intel.com> Acked-by: Declan Doherty <declan.doherty@intel.com>
Tomasz Kulasek [Fri, 13 Feb 2015 10:38:15 +0000 (11:38 +0100)]
app/test: link with ring pmd when needed
This patch links test application against librte_pmd_ring.so for shared
libraries. It's required as long as librte_pmd_ring provides some additional
routines used for testing purposes and must be "hard-linked".
Signed-off-by: Tomasz Kulasek <tomaszx.kulasek@intel.com> Acked-by: Declan Doherty <declan.doherty@intel.com>
Tomasz Kulasek [Fri, 13 Feb 2015 10:38:14 +0000 (11:38 +0100)]
app/test: unit tests for bonding mode 4
This patch adds unit tests for mode 4. It is split into separate
file to avoid problems with other modes that does not need to
look into packets payload.
This patch includes also a modification of maximum number of ports
used in their tests for bonding modes 0-3 from 16 to 6.
Jia Yu [Fri, 7 Nov 2014 17:31:51 +0000 (09:31 -0800)]
ethdev: return status of stats read
rte_eth_stats_get is to get physical device statistics. Without
return status, caller does not know whether function fails or not
(i.e. invalid port_id, driver has no stats_get callback). Caller
cannot differiente normal 0 stats or error case. This fix adds
a return status to the function.
Jia Yu [Fri, 7 Nov 2014 17:31:50 +0000 (09:31 -0800)]
ethdev: update link status after start
Since LSR interrupt is disabled by pmd drivers, link status in rte_eth_device is always down.
Bond slave_configure() enables LSR interrupt on devices to get notification if link status
changes. However, the LSC interrupt at device start time is still lost.
In this fix, call link_update to read link status from hardware
register at device start time.
This new app makes use of the librte_reorder library.
It requires at least 3 lcores for RX, Workers (1 or more) and TX threads.
Communication between RX-Workers and Workers-TX is done by using rings.
The flow of mbufs is the following:
* RX thread gets mbufs from driver, set sequence number and enqueue
them in ring.
* Workers dequeue mbufs from ring, do some 'work' and enqueue mbufs in
ring.
* TX dequeue mbufs from ring, inserts them in reorder buffer, drains
mbufs from reorder and sends them to the driver.
David Marchand [Fri, 13 Feb 2015 15:03:14 +0000 (16:03 +0100)]
devargs: remove limit on parameters length
As far as I know, there is no reason why we should have a limit on the length of
parameters that can be given for a device.
Remove this limit by using dynamic allocations.
Signed-off-by: David Marchand <david.marchand@6wind.com> Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Jeff Shaw [Wed, 4 Feb 2015 08:33:53 +0000 (16:33 +0800)]
fm10k: add PF and VF interrupt handling
1. Add functions to enable PF/VF interrupt.
2. Add function to process error message passed from interrupt.
2. Add 2 interrupt handling functions, one for PF and one for VF.
2. Enable interrupt after completing initialization of NIC.
Signed-off-by: Jeff Shaw <jeffrey.b.shaw@intel.com> Signed-off-by: Chen Jing D(Mark) <jing.d.chen@intel.com>
Jeff Shaw [Wed, 4 Feb 2015 08:26:16 +0000 (16:26 +0800)]
fm10k: add VF support
fm10k pmd driver will support both PF and VF device with single
copy of code. The reason is NIC maps registers with same
function in PF and VF to same PCI I/O address. Then, PF/VF drivers
use same address to access registers belonging to it, HW will
translate the request to correct units.
For some functionalities that are unique to PF, driver will check
current driver type and behave correctly.
Signed-off-by: Jeff Shaw <jeffrey.b.shaw@intel.com> Signed-off-by: Chen Jing D(Mark) <jing.d.chen@intel.com>
Jeff Shaw [Wed, 4 Feb 2015 08:20:06 +0000 (16:20 +0800)]
fm10k: add scatter receive
1. Add fm10k_recv_scattered_pkts function to receive jumbo frame
and multi-segment packets.
2. Configure correct receive function in rx_init and dev_init.
Signed-off-by: Jeff Shaw <jeffrey.b.shaw@intel.com> Signed-off-by: Chen Jing D(Mark) <jing.d.chen@intel.com>
Jeff Shaw [Wed, 4 Feb 2015 08:04:02 +0000 (16:04 +0800)]
fm10k: add receive and tranmit
1. Add fm10k_recv_pkts and fm10k_xmit_pkts functions.
2. Link app function pointer to actual fm10k recv/xmit
functions.
3. Change Makefile to compile new file fm10k_rxtx.c
Signed-off-by: Jeff Shaw <jeffrey.b.shaw@intel.com> Signed-off-by: Chen Jing D(Mark) <jing.d.chen@intel.com>
Jeff Shaw [Wed, 4 Feb 2015 07:47:01 +0000 (15:47 +0800)]
fm10k: add dev start/stop
1. Add function to initialize RX queues.
2. Add function to initialize TX queues.
3. Add fm10k_dev_start, fm10k_dev_stop and fm10k_dev_close
functions.
4. Add function to close mailbox service.
Signed-off-by: Jeff Shaw <jeffrey.b.shaw@intel.com> Signed-off-by: Chen Jing D(Mark) <jing.d.chen@intel.com>
Jeff Shaw [Tue, 3 Feb 2015 11:07:01 +0000 (19:07 +0800)]
fm10k: add Rx/Tx single queue start/stop
1. Add 4 functions fm10k_dev_rx_queue_start,
fm10k_dev_rx_queue_stop, fm10k_dev_tx_queue_start,
and fm10k_dev_tx_queue_stop.
2. verify Rx packet buffer alignment is valid.
Hardware requires specific alignment for Rx packet buffers. At
least one of the following two conditions must be satisfied.
1) Address is 512B aligned
2) Address is 8B aligned and buffer does not cross 4K boundary.
Alignment is checked by the driver when the Rx queue is reset. It
is assumed that if an entire descriptor ring can be filled with
buffers containing valid alignment, then all buffers in that mempool
have valid address alignment. It is the responsibility of the user
to ensure all buffers have valid alignment, as it is the user who
creates the mempool.
It is assumed the buffer needs only to store a maximum size Ethernet
frame.
Signed-off-by: Jeff Shaw <jeffrey.b.shaw@intel.com> Signed-off-by: Chen Jing D(Mark) <jing.d.chen@intel.com>
Jeff Shaw [Wed, 4 Feb 2015 10:48:49 +0000 (18:48 +0800)]
fm10k: register PF driver
1. Add init function to scan and initialize fm10k PF device.
2. Add implementation to register fm10k pmd PF driver.
3. Add 3 functions fm10k_dev_configure, fm10k_stats_get and
fm10k_stats_get.
4. Add fm10k.h to define macros and basic data structure.
5. Add fm10k_logs.h to control log message output.
6. Change config/common_bsdapp and config/common_linuxapp, add
macros to control fm10k pmd driver compile for linux and bsd.
7. Add Makefile.
8. Change lib/Makefile to add fm10k driver into compile list.
9. Change mk/rte.app.mk to add fm10k lib into link.
10. Add ABI version of librte_pmd_fm10k
Signed-off-by: Jeff Shaw <jeffrey.b.shaw@intel.com> Signed-off-by: Chen Jing D(Mark) <jing.d.chen@intel.com> Signed-off-by: Michael Qiu <michael.qiu@intel.com>
Jeff Shaw [Tue, 3 Feb 2015 07:57:59 +0000 (15:57 +0800)]
fm10k: add base driver
Base driver is developed and maintained by Intel ND team, includes
basic functional service to Intel Ethernet Switch FM10000 Series
of silicons.
Any suggestion on bug fix and improvement within this directory is
welcome, but need this team to change and update.
Olivier Matz [Fri, 13 Feb 2015 09:22:50 +0000 (10:22 +0100)]
i40e: fix offloading of outer checksum for IPIP tunnel
When offloading the checksums of ipip tunnels, m->l2_len is set to 0
as there is no tunnel or inner l2 header. Since this is a valid value
remove the test.
By the way, also remove the same test with l3_len because at this
point, it is expected that the software provides proper values in the
mbuf. It should avoid a test in dataplane processing and therefore
slightly increase performance.
Signed-off-by: Olivier Matz <olivier.matz@6wind.com> Acked-by: Jijiang Liu <jijiang.liu@intel.com>
Olivier Matz [Fri, 13 Feb 2015 09:22:49 +0000 (10:22 +0100)]
app/testpmd: fix TSO when using outer checksum offloads
The l4_len has also to be copied in mbuf in case we are offloading outer
IP checksum. Currently, TSO + outer checksum is not supported by any
driver but it will soon be supported by i40e.
Reported-by: Jijiang Liu <jijiang.liu@intel.com> Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Jijiang Liu [Fri, 13 Feb 2015 09:22:47 +0000 (10:22 +0100)]
i40e: advertise outer IPv4 checksum capability
Advertise the DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM flag in the PMD
features. It means that the i40e PMD supports the offload of outer IP
checksum when transmitting tunneling packet.
Signed-off-by: Jijiang Liu <jijiang.liu@intel.com> Acked-by: Olivier Matz <olivier.matz@6wind.com>
Jijiang Liu [Fri, 13 Feb 2015 09:22:46 +0000 (10:22 +0100)]
ethdev: add outer IP checksum capability flag
If the flag is advertised by a PMD, the NIC supports the outer IP
checksum TX offload of tunneling packets, therefore an application can
set the PKT_TX_OUTER_IP_CKSUM flag in mbufs when transmitting on this
port.
Signed-off-by: Jijiang Liu <jijiang.liu@intel.com> Acked-by: Olivier Matz <olivier.matz@6wind.com>
Olivier Matz [Fri, 13 Feb 2015 09:22:40 +0000 (10:22 +0100)]
app/testpmd: rename vxlan in outer-ip in csum commands
The tx_checksum command concerns outer IP checksum, not VxLAN checksum.
Actually there is no checkum in VxLAN header, there is one checksum in
outer IP header, and one checksum in outer UDP header. This option only
controls the outer IP checksum.
Signed-off-by: Olivier Matz <olivier.matz@6wind.com> Acked-by: Jijiang Liu <jijiang.liu@intel.com>
Olivier Matz [Fri, 13 Feb 2015 09:22:39 +0000 (10:22 +0100)]
app/testpmd: add csum parse-tunnel command
Add a new command related to csum forward engine:
csum parse-tunnel (on|off) (tx_port_id)
If enabled, the tunnel packets received by the csum forward engine are
parsed and seen as "outer-headers/inner-headers/data".
If disabled, the parsing of the csum forward engine stops at the first
l4 layer. A tunnel packet is seens as "headers/data" (inner headers are
included in payload).
Note: the port argument is the tx_port. It's more coherent compared
to all other testpmd csum flags.
Signed-off-by: Olivier Matz <olivier.matz@6wind.com> Acked-by: Jijiang Liu <jijiang.liu@intel.com>
Olivier Matz [Fri, 13 Feb 2015 09:22:37 +0000 (10:22 +0100)]
app/testpmd: rename Tx checksum command
Replace the "tx_checksum" command by "csum". It has several
advantages:
- it's more coherent with the forward engine name
- it's shorter
- the next commit will introduce a command that is related to
the csum forward engine, but about rx side.
Olivier Matz [Fri, 13 Feb 2015 09:22:36 +0000 (10:22 +0100)]
mbuf: remove UDP tunnel flag
Since previous commit, the flag PKT_TX_UDP_TUNNEL_PKT is not used by any PMD,
remove it from mbuf API and from csumonly (testpmd). In csumonly, the
PKT_TX_OUTER_IP_CKSUM flag is already set for vxlan checksum, providing
enough information to the underlying driver.
Signed-off-by: Olivier Matz <olivier.matz@6wind.com> Acked-by: Jijiang Liu <jijiang.liu@intel.com>
Olivier Matz [Fri, 13 Feb 2015 09:22:35 +0000 (10:22 +0100)]
i40e: remove the use of UDP tunnel flag
The definition of the flag PKT_TX_UDP_TUNNEL_PKT in rte_mbuf.h was:
TX packet is an UDP tunneled packet. It must be specified when using
outer checksum offload (PKT_TX_OUTER_IP_CKSUM)
This flag was used to tell the NIC that the offload type is UDP
(I40E_TXD_CTX_UDP_TUNNELING flag). In the datasheet, it says it's
required to specify the tunnel type in the register. However, some tests
(see [1]) showed that it also works without this flag.
Moreover, it is not explained how the hardware use this
information. From a network perspective, this information is useless for
calculating the outer IP checksum as it does not depend on the payload.
Having this flag in the API would force the application to specify the
tunnel type for something that looks only useful for this PMD. It will
limit the number of possible tunnel types (we would need a flag for each
tunnel type) and therefore prevent to support outer IP checksum for
proprietary tunnels.
Finally, if a hardware advertises "I support outer IP checksum", it must
be supported for any payload types.
This has been validated by [2], knowing that the ipip test case was fixed
after this test report [3].
Olivier Matz [Fri, 13 Feb 2015 09:22:34 +0000 (10:22 +0100)]
i40e: enable Tx checksum only for offloaded packets
From i40e datasheet:
The IP header type and its offload. In case of tunneling, the IIPT
relates to the inner IP header. See also EIPT field for the outer
(External) IP header offload.
00 - non IP packet or packet type is not defined by software
01 - IPv6 packet
10 - IPv4 packet with no IP checksum offload
11 - IPv4 packet with IP checksum offload
Therefore it is not needed to fill the IIPT field if no offload is
requested (we can keep the value to 00). For instance, the linux driver
code does not set it when (skb->ip_summed != CHECKSUM_PARTIAL). We can
do the same in the dpdk driver.
The function i40e_txd_enable_checksum() that fills the offload registers
can only be called for packets requiring an offload.
Signed-off-by: Olivier Matz <olivier.matz@6wind.com> Acked-by: Jijiang Liu <jijiang.liu@intel.com>
Cunming Liang [Thu, 5 Feb 2015 08:45:18 +0000 (16:45 +0800)]
ixgbe: fix link issue in loopback mode
In loopback mode, it's expected force link up even when there's no cable connect.
But in codes, setup_sfp() rewrites the related register.
It causes in the case 'multispeed_fiber', it can't link up without cable connect.
Signed-off-by: Cunming Liang <cunming.liang@intel.com> Acked-by: Patrick Lu <patrick.lu@intel.com>
Pablo de Lara [Thu, 12 Feb 2015 14:56:38 +0000 (14:56 +0000)]
app/testpmd: use default Rx/Tx port configuration
Function to get rx/tx port configuration from the PMDs
was added in previous release to simplify the port configuration
in all sample apps, but testpmd was not modified.
This patch makes testpmd get the default rx/tx port configuration,
but still uses the parameters passed by the command line.
Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com> Acked-by: John McNamara <john.mcnamara@intel.com>
Pablo de Lara [Tue, 10 Feb 2015 14:53:17 +0000 (14:53 +0000)]
app/testpmd: force user to stop forwarding when changing port/core list
Testpmd has the capability of changing the forwarding cores and ports in runtime.
If these are changed when forwarding, two issues may be encountered:
- If "show config fwd" is used, changes made in the core list are applied.
Therefore, trying to stop forwarding may hang testpmd,
since it could be waiting for cores to stop that are not actually running anything
- If the port list is changed, when stopping forwarding,
it may miss the stats of some of the ports that were actually being used.
Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com> Acked-by: Helin Zhang <helin.zhang@intel.com>
I will be a volunteer of reviewing the following files:
lib/librte_pmd_virtio/
doc/guides/prog_guide/poll_mode_drv_emulated_virtio_nic.rst
lib/librte_vhost/
doc/guides/prog_guide/vhost_lib.rst
examples/vhost/
doc/guides/sample_app_ug/vhost.rst
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com> Acked-by: Helin Zhang <helin.zhang@intel.com> Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com> Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
maintainers: claim metering, sched and packet framework
As original author of these DPDK components, I am volunteering to maintain
them going forward:
- Traffic Metering
- Hierarchical Scheduler
- Packet Framework
- Configuration File
Pablo de Lara [Wed, 4 Feb 2015 10:17:44 +0000 (10:17 +0000)]
maintainers: claim responsibility for testpmd
Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com> Acked-by: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com> Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Panu Matilainen [Wed, 4 Feb 2015 08:22:50 +0000 (10:22 +0200)]
mk: add DT_SONAME to shared libraries
This is all-important now that the libraries are versioned: DT_SONAME
presence instructs the runtime dynamic linker to load the shared object
by the versioned name in DT_SONAME instead of the the unversioned symlink
name used during build.
Signed-off-by: Panu Matilainen <pmatilai@redhat.com> Acked-by: Neil Horman <nhorman@tuxdriver.com>
Neil Horman [Mon, 2 Feb 2015 17:40:21 +0000 (12:40 -0500)]
mk: add library version extension
To differentiate libraries that break ABI, we add a library version number
suffix to the library, which must be incremented when a given libraries ABI is
broken. This patch enforces that addition, sets the initial abi soname
extension to 1 for each library and creates a symlink to the base SONAME so that
the test applications will link properly.
Signed-off-by: Neil Horman <nhorman@tuxdriver.com> Acked-by: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>