dpdk.git
9 years agoeal: indent files
David Marchand [Mon, 22 Sep 2014 08:38:01 +0000 (10:38 +0200)]
eal: indent files

Indent files modified in previous commit.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
9 years agoeal: rework long options parsing
David Marchand [Mon, 22 Sep 2014 08:38:00 +0000 (10:38 +0200)]
eal: rework long options parsing

Identify all options through the getopt_long return value.
This way, we only need a big switch/case.

Indentation is broken to ease commit review (fixed in next commit).

Suggested-by: Neil Horman <nhorman@tuxdriver.com>
Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
9 years agoeal: merge bsd and linux common options parsing
David Marchand [Mon, 22 Sep 2014 08:37:59 +0000 (10:37 +0200)]
eal: merge bsd and linux common options parsing

All common options are now in a single file.
Common usage() has been moved as well.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
9 years agoeal: fix checkpatch issues before moving code
David Marchand [Mon, 22 Sep 2014 08:37:58 +0000 (10:37 +0200)]
eal: fix checkpatch issues before moving code

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
9 years agoeal: remove duplicate handling of white/black list
David Marchand [Mon, 22 Sep 2014 08:37:57 +0000 (10:37 +0200)]
eal: remove duplicate handling of white/black list

We can handle both short and long options for those in the same case.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
9 years agoeal: factorise unsupported option handling
David Marchand [Mon, 22 Sep 2014 08:37:56 +0000 (10:37 +0200)]
eal: factorise unsupported option handling

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
9 years agoeal: remove unused --use-device option
David Marchand [Mon, 22 Sep 2014 08:37:55 +0000 (10:37 +0200)]
eal: remove unused --use-device option

Following commit cac6d08c8bde and 4bf3fe634a4
(replace --use-device option by --pci-whitelist and --vdev),
this option is not available anymore.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
9 years agoeal: set log level from command line
David Marchand [Wed, 17 Sep 2014 13:46:52 +0000 (15:46 +0200)]
eal: set log level from command line

Add a --log-level option to set the default eal log level.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
9 years agoe1000: add a message when forcing scatter mode
David Marchand [Wed, 17 Sep 2014 13:46:51 +0000 (15:46 +0200)]
e1000: add a message when forcing scatter mode

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
9 years agoe1000: always log init messages
David Marchand [Wed, 17 Sep 2014 13:46:50 +0000 (15:46 +0200)]
e1000: always log init messages

'init' messages should always be logged and filtered at runtime by rte_log.
All the more so as these messages are not in the datapath.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
9 years agoe1000: clean log messages
David Marchand [Wed, 17 Sep 2014 13:46:49 +0000 (15:46 +0200)]
e1000: clean log messages

- remove leading \n in some messages,
- remove trailing \n in some messages,
- split multi lines messages,
- introduce PMD_INIT_FUNC_TRACE macro and use it instead of
  PMD_INIT_LOG(DEBUG, "some_func")

Signed-off-by: David Marchand <david.marchand@6wind.com>
Reviewed-by: Jay Rolette <rolette@infiniteio.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
9 years agoe1000: indent logs sections
David Marchand [Wed, 17 Sep 2014 13:46:48 +0000 (15:46 +0200)]
e1000: indent logs sections

Prepare for next commit, indent sections where log messages will be modified so
that next patch is only about \n.

Signed-off-by: David Marchand <david.marchand@6wind.com>
9 years agoe1000/base: add a raw log macro
David Marchand [Wed, 17 Sep 2014 13:46:47 +0000 (15:46 +0200)]
e1000/base: add a raw log macro

Since base driver always add a trailing \n, add a PMD_DRV_LOG_RAW macro that
will not add one.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
9 years agoe1000: use the right debug macro
David Marchand [Wed, 17 Sep 2014 13:46:46 +0000 (15:46 +0200)]
e1000: use the right debug macro

- We should not use DEBUGOUT* / DEBUGFUNC macros in pmd.
These macros come as compat wrappers for base driver.
- We should avoid calling RTE_LOG directly as pmd provides a wrapper for logs.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Reviewed-by: Jay Rolette <rolette@infiniteio.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
9 years agoi40e: add log messages when rx bulk mode is not usable
David Marchand [Wed, 17 Sep 2014 13:46:45 +0000 (15:46 +0200)]
i40e: add log messages when rx bulk mode is not usable

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
9 years agoi40e: always log init messages
David Marchand [Wed, 17 Sep 2014 13:46:44 +0000 (15:46 +0200)]
i40e: always log init messages

'init' messages should always be logged and filtered at runtime by rte_log.
All the more so as these messages are not in the datapath.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
9 years agoi40e: clean log messages
David Marchand [Wed, 17 Sep 2014 13:46:43 +0000 (15:46 +0200)]
i40e: clean log messages

- remove leading \n in some messages,
- remove trailing \n in some messages,
- split multi lines messages.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Reviewed-by: Jay Rolette <rolette@infiniteio.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
9 years agoi40e: indent logs sections
David Marchand [Wed, 17 Sep 2014 13:46:42 +0000 (15:46 +0200)]
i40e: indent logs sections

Prepare for next commit, indent sections where log messages will be modified so
that next patch is only about \n.

Signed-off-by: David Marchand <david.marchand@6wind.com>
9 years agoi40e/base: add a raw log macro
David Marchand [Wed, 17 Sep 2014 13:46:41 +0000 (15:46 +0200)]
i40e/base: add a raw log macro

Since base driver always add a trailing \n, add a PMD_DRV_LOG_RAW macro that
will not add one.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
9 years agoi40e: use the right debug macro
David Marchand [Wed, 17 Sep 2014 13:46:40 +0000 (15:46 +0200)]
i40e: use the right debug macro

- Don't use DEBUGFUNC macro in pmd.
- Don't use printf for logs.
- We should avoid calling RTE_LOG directly as pmd provides a wrapper for logs.
- Replace some PMD_INIT_LOG(DEBUG, "some_func") with PMD_INIT_FUNC_TRACE().

Signed-off-by: David Marchand <david.marchand@6wind.com>
Reviewed-by: Jay Rolette <rolette@infiniteio.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
9 years agoixgbe: add log messages when rx bulk mode is not usable
David Marchand [Wed, 17 Sep 2014 13:46:39 +0000 (15:46 +0200)]
ixgbe: add log messages when rx bulk mode is not usable

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
9 years agoixgbe: add a message when forcing scatter mode
David Marchand [Wed, 17 Sep 2014 13:46:38 +0000 (15:46 +0200)]
ixgbe: add a message when forcing scatter mode

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
9 years agoixgbe: always log init messages
David Marchand [Wed, 17 Sep 2014 13:46:37 +0000 (15:46 +0200)]
ixgbe: always log init messages

'init' messages should always be logged and filtered at runtime by rte_log.
All the more so as these messages are not in the datapath.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
9 years agoixgbe: clean log messages
David Marchand [Wed, 17 Sep 2014 13:46:36 +0000 (15:46 +0200)]
ixgbe: clean log messages

- remove leading \n in some messages,
- remove trailing \n in some messages,
- split multi lines messages.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Reviewed-by: Jay Rolette <rolette@infiniteio.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
9 years agoixgbe: indent logs sections
David Marchand [Wed, 17 Sep 2014 13:46:35 +0000 (15:46 +0200)]
ixgbe: indent logs sections

Prepare for next commit, indent sections where log messages will be modified so
that next patch is only about \n.

Signed-off-by: David Marchand <david.marchand@6wind.com>
[Thomas: fix also some missing whitespaces]
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
9 years agoixgbe/base: add a raw log macro
David Marchand [Wed, 17 Sep 2014 13:46:34 +0000 (15:46 +0200)]
ixgbe/base: add a raw log macro

Since base driver always add a trailing \n, add a PMD_DRV_LOG_RAW macro that
will not add one.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
9 years agoixgbe: use the right debug macro
David Marchand [Wed, 17 Sep 2014 13:46:33 +0000 (15:46 +0200)]
ixgbe: use the right debug macro

- We should not use DEBUGOUT*/DEBUGFUNC macros in pmd code.
These macros come as compat wrappers for base driver.
- We should avoid calling RTE_LOG directly as pmd provides a wrapper for logs.
- Replace some PMD_INIT_LOG(DEBUG, "some_func") with PMD_INIT_FUNC_TRACE().

Signed-off-by: David Marchand <david.marchand@6wind.com>
Reviewed-by: Jay Rolette <rolette@infiniteio.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
9 years agolog: add function to retrieve log level
Matthew Hall [Sun, 14 Sep 2014 08:34:46 +0000 (01:34 -0700)]
log: add function to retrieve log level

It is helpful when you want outside code to cooperate with and respect
log levels set in DPDK. Then you can avoid using duplicate incompatible
log code in the DPDK and non-DPDK parts of the app.

Signed-off-by: Matthew Hall <mhall@mhcomputing.net>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
[Thomas: add void to fix function signature]

9 years agoixgbe: fix build with gcc 4.4
Bruce Richardson [Thu, 18 Sep 2014 10:55:52 +0000 (11:55 +0100)]
ixgbe: fix build with gcc 4.4

The refcnt field is contained within an anonymous union within the mbuf
data structure, and gcc 4.4 gives an error about an unknown field unless
the initialiser for the field is contained within extra braces.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
9 years agoixgbe: improve slow-path perf with vector scattered Rx
Bruce Richardson [Thu, 11 Sep 2014 13:15:47 +0000 (14:15 +0100)]
ixgbe: improve slow-path perf with vector scattered Rx

Provide a wrapper routine to enable receive of scattered packets with a
vector driver. This improves the performance of the slow-path RX.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
9 years agoixgbe: fix perf regression due to moved pool ptr
Bruce Richardson [Mon, 15 Sep 2014 16:20:13 +0000 (17:20 +0100)]
ixgbe: fix perf regression due to moved pool ptr

Adjust the fast-path code to fix the regression caused by the pool
pointer moving to the second cache line. This change adjusts the
prefetching and also the way in which the mbufs are freed back to the
mempool.
Note: slow-path e.g. path supporting jumbo frames, is still slower, but
is dealt with by a later commit

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
9 years agoixgbe: rework vector pmd following mbuf changes
Bruce Richardson [Thu, 11 Sep 2014 13:15:43 +0000 (14:15 +0100)]
ixgbe: rework vector pmd following mbuf changes

The vector PMD expects fields to be in a specific order so that it can
do vector operations on multiple fields at a time. Following mbuf
rework, adjust driver to take account of the new layout and re-enable it
in the config.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
9 years agombuf: move l2_len and l3_len to second cache line
Bruce Richardson [Thu, 11 Sep 2014 13:15:45 +0000 (14:15 +0100)]
mbuf: move l2_len and l3_len to second cache line

The l2_len and l3_len fields are used for TX offloads and so should be
put on the second cache line, along with the other fields only used on
TX.

The l2 and l3 lengths can be accessed as a single uint16_t for
performance, as well as individually.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
9 years agombuf: split mbuf across two cache lines.
Bruce Richardson [Thu, 11 Sep 2014 13:15:44 +0000 (14:15 +0100)]
mbuf: split mbuf across two cache lines.

This change splits the mbuf in two to move the pool and next pointers to
the second cache line. This frees up 16 bytes in first cache line.

The reason for this change is that we believe that there is no possible
way that we can ever fit all the fields we need to fit into a 64-byte
mbuf, and so we need to start looking at a 128-byte mbuf instead. Examples
of new fields that need to fit in, include -
* 32-bits more for filter information for support for the new filters in
  the i40e driver (and possibly other future drivers)
* an additional 2-4 bytes for storing info on a second vlan tag to allow
  drivers to support double Vlan/QinQ
* 4-bytes for storing a sequence number to enable out of order packet
  processing and subsequent packet reordering
as well as potentially a number of other fields or splitting out fields
that are superimposed over each other right now, e.g. for the qos scheduler.
We also want to allow space for use by other non-Intel NIC drivers that may
be open-sourced to dpdk.org in the future too, where they support fields
and offloads that currently supported hardware doesn't.

If we accept the fact of a 2-cache-line mbuf, then the issue becomes
how to rework things so that we spread our fields over the two
cache lines while causing the lowest slow-down possible. The general
approach that we are looking to take is to focus the first cache
line on fields that are updated on RX , so that receive only deals
with one cache line. The second cache line can be used for application
data and information that will only be used on the TX leg. This would
allow us to work on the first cache line in RX as now, and have the
second cache line being prefetched in the background so that it is
available when necessary. Hardware prefetches should help us out
here. We also may move rarely used, or slow-path RX fields e.g. such
as those for chained mbufs with jumbo frames, to the second
cache line, depending upon the performance impact and bytes savings
achieved.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
9 years agombuf: add named points inside the structure
Bruce Richardson [Thu, 11 Sep 2014 13:15:42 +0000 (14:15 +0100)]
mbuf: add named points inside the structure

Add markers or "labels" at given points inside the mbuf which can be
used instead of individual fields to identify the start of logical
sections inside the mbuf.

The use of typedefs and dummy fields was chosen over using unions
because of a couple reasons:
* unions cause an extra level of indentation (more likely two levels as
  a union containing a struct for multiple fields would be needed). This
  makes the lines longer than they need to be and increases the need for
  wrapping. [This was the main reason]
* with markers, you can apply multiple markers at the same point if
  wanted.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
9 years agombuf: move metadata macros to rte_port library
Bruce Richardson [Thu, 11 Sep 2014 13:15:41 +0000 (14:15 +0100)]
mbuf: move metadata macros to rte_port library

The metadata macros are only used by libs and apps using the rte_port
packet framework library, so move them to a header file there.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
9 years agombuf: use macros only to access metadata
Bruce Richardson [Thu, 11 Sep 2014 13:15:40 +0000 (14:15 +0100)]
mbuf: use macros only to access metadata

Removed the explicit zero-sized metadata definition at the end of the
mbuf data structure. Updated the metadata macros to take account of this
change so that all existing code which uses those macros still works.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
9 years agombuf: minor changes for readability
Bruce Richardson [Thu, 11 Sep 2014 13:15:39 +0000 (14:15 +0100)]
mbuf: minor changes for readability

* Ensure comments line up correctly
* Simplify the #ifdefs around the refcnt fields to make them clearer

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
9 years agombuf: introduce a flag to indicate a control mbuf
Bruce Richardson [Thu, 11 Sep 2014 13:15:38 +0000 (14:15 +0100)]
mbuf: introduce a flag to indicate a control mbuf

Since the flags field is now 64-bits, we can allow one bit to be used to
indicate a control i.e. non-packet mbuf. Dedicate the high bit (bit 63)
for this purpose and add in a utility macro to test if a given mbuf has
the bit set or not.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
9 years agombuf: expand ol_flags field to 64-bits
Bruce Richardson [Thu, 11 Sep 2014 13:15:37 +0000 (14:15 +0100)]
mbuf: expand ol_flags field to 64-bits

The offload flags field (ol_flags) was 16-bits and had no further room
for expansion. This patch increases the field size to 64-bits, using up
the remaining reserved space in the single-cache-line mbuf.

NOTE: none of the values for existing flags have been changed, i.e. no
new numbers have been explicitly reserved between existing flag
definitions.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
9 years agombuf: reorder fields by time of use
Bruce Richardson [Thu, 11 Sep 2014 13:15:36 +0000 (14:15 +0100)]
mbuf: reorder fields by time of use

*  Reorder the fields in the mbuf so that we have fields that are used
together side-by-side in the structure. This means that we have a
contiguous block of 8-bytes in the mbuf which are used to reset an mbuf
of descriptor rearm, and a block of 16-bytes of data (excluding flags)
which are set on RX from the received packet descriptor.
* Use dummy fields as appropriate to ensure alignment or to reserve gaps
for later field additions.
* Place most items which are not used by fast-path RX separately at the end
of the structure so they can later be moved to a separate cache line.
[The l2/l3 length fields are not moved at this stage as doing so will
cause overflow to the next cache line].

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
9 years agombuf: replace data pointer by an offset
Olivier Matz [Thu, 11 Sep 2014 13:15:35 +0000 (14:15 +0100)]
mbuf: replace data pointer by an offset

The mbuf structure already contains a pointer to the beginning of the
buffer (m->buf_addr). It is not needed to use 8 bytes again to store
another pointer to the beginning of the data.

Using a 16 bits unsigned integer is enough as we know that a mbuf is
never longer than 64KB. We gain 6 bytes in the structure thanks to
this modification.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
* Updated to apply to latest on mainline.
* Disabled vector PMD in config as it relies heavily on the mbuf layout
  This will be re-enabled in a subsequent commit once vPMD has been
  reworked to take account of mbuf changes.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
9 years agombuf: flatten struct vlan_macip
Bruce Richardson [Tue, 9 Sep 2014 14:40:56 +0000 (15:40 +0100)]
mbuf: flatten struct vlan_macip

The vlan_macip structure combined a vlan tag id with l2 and l3 headers
lengths for tracking offloads. However, this structure was only used as
a unit by the e1000 and ixgbe drivers, not generally.

This patch removes the structure from the mbuf header and places the
fields into the mbuf structure directly at the required point, without
any net effect on the structure layout. This allows us to treat the vlan
tags and header length fields as separate for future mbuf changes. The
drivers which were written to use the combined structure still do so,
using a driver-local definition of it.

Reduce perf regression caused by splitting vlan_macip field. This is
done by providing a single uint16_t value to allow writing/clearing
the l2 and l3 lengths together. There is still a small perf hit to the
slow path TX due to the reads from vlan_tci and l2/l3 lengths being
separated. (<5% in my tests with testpmd with no extra params).
Unfortunately, this cannot be eliminated, without restoring the vlan
tags and l2/l3 lengths as a combined 32-bit field. This would prevent
us from ever looking to move those fields about and is an artificial tie
that applies only for performance in igb and ixgbe drivers. Therefore,
this patch keeps the vlan_tci field separate from the lengths as the
best solution going forward.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
9 years agombuf: rename in_port to just port
Bruce Richardson [Thu, 28 Aug 2014 15:42:38 +0000 (16:42 +0100)]
mbuf: rename in_port to just port

In some cases we may want to tag a packet for a particular destination
or output port, so rename the "in_port" field in the mbuf to just "port"
so that it can be re-used for this purpose if an application needs it.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
9 years agombuf: remove the rte_pktmbuf structure
Olivier Matz [Thu, 28 Aug 2014 15:42:37 +0000 (16:42 +0100)]
mbuf: remove the rte_pktmbuf structure

The rte_pktmbuf structure was initially included in the rte_mbuf
structure. This was needed when there was 2 types of mbuf (ctrl and
packet). As the control mbuf has been removed, we can merge the
rte_pktmbuf into the rte_mbuf structure.

Advantages of doing this:
  - the access to mbuf fields is easier (ex: m->data instead of m->pkt.data)
  - make the structure more consistent: for instance, there was no reason
    to have the ol_flags field in rte_mbuf
  - it will allow a deeper reorganization of the rte_mbuf structure in the
    next commits, allowing to gain several bytes in it

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
[Bruce: updated for latest code and new example apps]
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
9 years agombuf: remove rte_ctrlmbuf
Olivier Matz [Thu, 28 Aug 2014 15:42:36 +0000 (16:42 +0100)]
mbuf: remove rte_ctrlmbuf

The initial role of rte_ctrlmbuf is to carry generic messages (data
pointer + data length) but it's not used by the DPDK or it applications.
Keeping it implies:
  - loosing 1 byte in the rte_mbuf structure
  - having some dead code rte_mbuf.[ch]

This patch removes this feature. Thanks to it, it is now possible to
simplify the rte_mbuf structure by merging the rte_pktmbuf structure
in it. This is done in next commit.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
* Updated patch to HEAD.
* Modified patch to retain the old function names for ctrl mbufs as
  macros. This helps with app compatibility, and allows the concept
  of a control mbuf to be reintroduced via a single-bit flag in
  a future change.
* Updated the packet framework ip_pipeline example application to
  work following this change.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
9 years agombuf: rename RTE_MBUF_SCATTER_GATHER into RTE_MBUF_REFCNT
Olivier Matz [Thu, 28 Aug 2014 15:42:35 +0000 (16:42 +0100)]
mbuf: rename RTE_MBUF_SCATTER_GATHER into RTE_MBUF_REFCNT

It seems that RTE_MBUF_SCATTER_GATHER is not the proper name for the
feature it provides. "Scatter gather" means that data is stored using
several buffers. RTE_MBUF_REFCNT seems to be a better name for that
feature as it provides a reference counter for mbufs.

The macro RTE_MBUF_SCATTER_GATHER is poisoned to ensure this
modification is seen by drivers or applications using it.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
9 years agoixgbe: keep only non-zero initializer in mbuf definition
Bruce Richardson [Thu, 28 Aug 2014 15:42:34 +0000 (16:42 +0100)]
ixgbe: keep only non-zero initializer in mbuf definition

Since all unspecified fields in an initializer are assumed to be zero we
can simplify the empty mbuf definition in the vector driver to only use
the fields that are non-zero, i.e. just nb_segs = 1. This makes things
shorter and means that the structure doesn't need as many updates for
other fields being renamed or moved.

The variable itself is never modified and only used by a single function
so it can be made const and local to the using function.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
9 years agoversion: 1.8.0-rc0
Thomas Monjalon [Wed, 16 Jul 2014 07:44:50 +0000 (09:44 +0200)]
version: 1.8.0-rc0

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
9 years agoversion: 1.7.1
Thomas Monjalon [Wed, 3 Sep 2014 11:15:45 +0000 (13:15 +0200)]
version: 1.7.1

RPM can be built for a default machine now.

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
9 years agoigb_uio: fix build on RHEL 6.3
Guillaume Gaudonville [Wed, 3 Sep 2014 08:18:23 +0000 (10:18 +0200)]
igb_uio: fix build on RHEL 6.3

- pci_num_vf() is already defined in RHEL 6
- pci_intx_mask_supported is already defined in RHEL 6.3
- pci_check_and_mask_intx is already defined in RHEL 6.3

Signed-off-by: Guillaume Gaudonville <guillaume.gaudonville@6wind.com>
Signed-off-by: David Marchand <david.marchand@6wind.com>
Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
9 years agoversion: 1.7.1-rc1
Thomas Monjalon [Wed, 3 Sep 2014 01:57:46 +0000 (03:57 +0200)]
version: 1.7.1-rc1

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
9 years agoigb_uio: revert MSI IRQ mode
Thomas Monjalon [Wed, 3 Sep 2014 01:44:39 +0000 (03:44 +0200)]
igb_uio: revert MSI IRQ mode

This reverts commit 399a3f0db8b0c58
"fix IRQ mode handling"
and part of commit 4a5c221f9d9bf641
"fix compability on old kernel"

MSI implementation is using irq_to_desc which is not exported before
kernel 3.4 and commit 3911ff30.
Let's revert it for release 1.7.1, waiting for another solution.

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
9 years agoacl: fix build and runtime for default target
Konstantin Ananyev [Mon, 1 Sep 2014 15:28:44 +0000 (16:28 +0100)]
acl: fix build and runtime for default target

Make ACL library to build/work on 'default' architecture:
- make rte_acl_classify_scalar really scalar
 (make sure it wouldn't use sse4 instrincts through resolve_priority()).
- Provide two versions of rte_acl_classify code path:
  rte_acl_classify_sse() - could be build and used only on systems with sse4.2
  and upper, return -ENOTSUP on lower arch.
  rte_acl_classify_scalar() - a slower version, but could be build and used
  on all systems.
- Addition of a new function rte_acl_classify_alg.  This function lets you
  specify an enum value to override the acl contexts default algorithm when doing
  a classification.  This allows an application to specify a classification
  algorithm without needing to publicize each method. I know there was concern
  over keeping those methods public, but we don't have a static ABI at the moment,
  so this seems to me a reasonable thing to do, as it gives us less of an ABI
  surface to worry about.
- keep common code shared between these two codepaths.

Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
9 years agoapp/testpmd: fix crash in txonly mode and with tx_first
Adrien Mazarguil [Mon, 1 Sep 2014 10:31:11 +0000 (12:31 +0200)]
app/testpmd: fix crash in txonly mode and with tx_first

This crash was believed fixed by commit 5886ae07d211e4b5e49806dd183812,
but the actual issue is that the core ID provided to rte_lcore_to_socket_id()
is wrong. It must be looked up in fwd_lcores_cpuids[].

Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
Signed-off-by: David Marchand <david.marchand@6wind.com>
9 years agokni: fix build with kernel 3.17
Aaro Koskinen [Mon, 18 Aug 2014 12:44:59 +0000 (15:44 +0300)]
kni: fix build with kernel 3.17

Since Linux commit "set name_assign_type in alloc_netdev" (c835a677331495),
the function alloc_netdev takes a new parameter (name_assign_type)
whose default value is NET_NAME_UNKNOWN.

Signed-off-by: Aaro Koskinen <aaro.koskinen@nsn.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
9 years agoeal: fix memory leak in hugepage error cases
Zhangkun [Tue, 19 Aug 2014 03:51:11 +0000 (11:51 +0800)]
eal: fix memory leak in hugepage error cases

The sysfs directory for hugepages parsing was not closed properly in some
error cases.

Signed-off-by: Zhangkun <zhangk.zhangkun@huawei.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
9 years agovmxnet3: fix crash on stop
Stephen Hemminger [Tue, 26 Aug 2014 00:41:02 +0000 (17:41 -0700)]
vmxnet3: fix crash on stop

The cmd_ring_release can be called twice if queue has already
been released. This cause crash on shutdown.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
9 years agoeal: remove unused macros
David Marchand [Tue, 26 Aug 2014 14:11:02 +0000 (16:11 +0200)]
eal: remove unused macros

Clean both linux and bsd implementations from unused macros.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
9 years agofix unix permissions for source files
David Marchand [Tue, 26 Aug 2014 14:10:41 +0000 (16:10 +0200)]
fix unix permissions for source files

No need for that 'x bit' on source files.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
9 years agoixgbe: make vector stores unaligned
Bruce Richardson [Wed, 27 Aug 2014 15:51:17 +0000 (16:51 +0100)]
ixgbe: make vector stores unaligned

When writing to the mbuf array for receiving packets, do not assume
16-byte alignment by using aligned stores. If the pointers are only
8-byte aligned, the program will crash due to incorrect alignment.
Changing "store" to "storeu" fixes this.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
9 years agoapp/test: only build what has been selected in config
David Marchand [Mon, 18 Aug 2014 11:29:25 +0000 (13:29 +0200)]
app/test: only build what has been selected in config

Avoid building tests if their counterparts are not selected in config.
This has the nice side effect of fixing build errors when disabling parts of
the dpdk.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
9 years agoapp/test: no more builtin commands
David Marchand [Mon, 18 Aug 2014 11:29:24 +0000 (13:29 +0200)]
app/test: no more builtin commands

The builtin commands list is now empty, we can remove it.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
9 years agoapp/test: convert all tests to register system
David Marchand [Mon, 18 Aug 2014 11:29:23 +0000 (13:29 +0200)]
app/test: convert all tests to register system

Remove all tests from the builtin commands list and use the dynamic commands
list register macro.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
9 years agoapp/test: introduce dynamic commands list
David Marchand [Mon, 18 Aug 2014 11:29:22 +0000 (13:29 +0200)]
app/test: introduce dynamic commands list

This patch adds a way to dynamically add a test without modifying commands.c.
Move all current tests in a builtin_commands[] list, next patch will convert
them to this new system.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
9 years agoapp/test: remove pm_autotest
David Marchand [Mon, 18 Aug 2014 11:29:21 +0000 (13:29 +0200)]
app/test: remove pm_autotest

This test is not linked to any code, remove it.
It may be some leftover from 24f42575dfe2226f126546d0ca501cba9fbd6373.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
9 years agoapp/test: use accessor to set refcnt field
David Marchand [Mon, 18 Aug 2014 11:29:20 +0000 (13:29 +0200)]
app/test: use accessor to set refcnt field

refcnt field can not be accessed directly as it depends on the RTE_MBUF_REFCNT
build option.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
9 years agoapp: simplify makefiles
David Marchand [Mon, 18 Aug 2014 11:29:19 +0000 (13:29 +0200)]
app: simplify makefiles

No need to test some build option multiple times in a Makefile.
Besides, such option is needed by the associated app, so move it at the
top of the Makefile.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
9 years agoexamples/vhost: support jumbo frame
Ouyang Changchun [Fri, 15 Aug 2014 04:58:01 +0000 (12:58 +0800)]
examples/vhost: support jumbo frame

This patch support mergeable RX feature and thus support jumbo frame RX and TX
in user space vhost(as virtio backend).

On RX, it secures enough room from vring to accommodate one complete scattered
packet which is received by PMD from physical port, and then copy data from
mbuf to vring buffer, possibly across a few vring entries and descriptors.

On TX, it gets a jumbo frame, possibly described by a few vring descriptors which
are chained together with the flags of 'NEXT', and then copy them into one scattered
packet and TX it to physical port through PMD.

Signed-off-by: Changchun Ouyang <changchun.ouyang@intel.com>
Acked-by: Huawei Xie <huawei.xie@intel.com>
9 years agovirtio: mergeable buffers
Ouyang Changchun [Thu, 14 Aug 2014 08:54:35 +0000 (16:54 +0800)]
virtio: mergeable buffers

This patch supports mergeable buffer feature in DPDK based virtio PMD,
which can receive jumbo frame with larger size, like 3K, 4K or even 9K.

Signed-off-by: Changchun Ouyang <changchun.ouyang@intel.com>
Acked-by: Huawei Xie <huawei.xie@intel.com>
Tested-by: Jingguo Fu <jingguox.fu@intel.com>
9 years agoi40evf: queue start and stop
Chen Jing D(Mark) [Thu, 14 Aug 2014 07:35:03 +0000 (15:35 +0800)]
i40evf: queue start and stop

Add per-queue RX/TX start/stop function.
Support fields start_rx_per_q and start_tx_per_q.
In the meanwhile, change dev_start/stop to call per-queue RX/TX functions.

Signed-off-by: Chen Jing D(Mark) <jing.d.chen@intel.com>
Reviewed-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
Reviewed-by: Changchun Ouyang <changchun.ouyang@intel.com>
Reviewed-by: Huawei Xie <huawei.xie@intel.com>
[Thomas: fix typo]

9 years agoi40e: queue start and stop
Chen Jing D(Mark) [Thu, 14 Aug 2014 07:35:01 +0000 (15:35 +0800)]
i40e: queue start and stop

Add functions to start/stop specific RX/TX queue.
Support fields start_rx_per_q and start_tx_per_q.
In the meanwhile, change dev_start/stop functions to call per-queue functions.

Signed-off-by: Chen Jing D(Mark) <jing.d.chen@intel.com>
Reviewed-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
Reviewed-by: Changchun Ouyang <changchun.ouyang@intel.com>
Reviewed-by: Huawei Xie <huawei.xie@intel.com>
[Thomas: reword comments and merge 2 patches]

9 years agotestpmd: queue start and stop
Chen Jing D(Mark) [Thu, 14 Aug 2014 07:35:00 +0000 (15:35 +0800)]
testpmd: queue start and stop

The API provides functions to start/stop specific RX/TX queues (see 0748be2).
This change adds command in testpmd to start/stop specific RX/TX queues.

Signed-off-by: Chen Jing D(Mark) <jing.d.chen@intel.com>
Reviewed-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
Reviewed-by: Changchun Ouyang <changchun.ouyang@intel.com>
Reviewed-by: Huawei Xie <huawei.xie@intel.com>
9 years agoi40e: enable multicast for promiscuous mode
Ding Heng [Fri, 15 Aug 2014 01:47:32 +0000 (09:47 +0800)]
i40e: enable multicast for promiscuous mode

IPv6 will run NDP with multicast packets, but multicast packets will be
filtered by i40e driver by default. So we need to enable multicast when
promiscuous mode is on, or IPv6 will fail.

Signed-off-by: Ding Heng <hengx.ding@intel.com>
Reviewed-by: Helin Zhang <helin.zhang@intel.com>
9 years agoi40e: support autoneg or force link speed
Cunming Liang [Thu, 31 Jul 2014 20:44:07 +0000 (04:44 +0800)]
i40e: support autoneg or force link speed

- i40e force link up/down
- i40e autoneg/force speed

Signed-off-by: Cunming Liang <cunming.liang@intel.com>
Acked-by: Helin Zhang <helin.zhang@intel.com>
Acked-by: Chen Jing D(Mark) <jing.d.chen@intel.com>
Tested-by: Xu HuilongX <huilongx.xu@intel.com>
9 years agoi40e: support xen domain0
Helin Zhang [Thu, 14 Aug 2014 06:12:53 +0000 (14:12 +0800)]
i40e: support xen domain0

i40e was failing to run in XEN domain0, as the physical
memory for adminq DMA should be allocated and translated
in a different way for XEN domain0. So
rte_memzone_reserve_bounded() should be used for DMA
memory allocation, and rte_mem_phy2mch() should be used
for DMA memory address translation to support running
i40e PMD in XEN domain0.

Signed-off-by: Helin Zhang <helin.zhang@intel.com>
Tested-by: Zhaochen Zhan <zhaochen.zhan@intel.com>
Acked-by: Jijiang Liu <jijiang.liu@intel.com>
9 years agokni: fix build on Ubuntu 12.04
Pawel Wodkowski [Wed, 20 Aug 2014 09:42:53 +0000 (10:42 +0100)]
kni: fix build on Ubuntu 12.04

On Ubuntu 12.04.4 file '/proc/version_signature' contains
'Ubuntu 3.11.0-15.25~precise1-generic 3.11.10'. This introduce compilation
error since '~precise1' will not be discarded. This patch discards
everything after '~' inclusively.

Signed-off-by: Pawel Wodkowski <pawelx.wodkowski@intel.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
9 years agoixgbe: require only sse3 intrinsics
Neil Horman [Fri, 1 Aug 2014 16:48:57 +0000 (12:48 -0400)]
ixgbe: require only sse3 intrinsics

ixgbe was failing to build in the default configuration because it required
sse4.2 intrinsics, and the default config doesn't support more than sse3.
Modify the pmd so that only sse3 intrinsics are pulled in and used.

Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
CC: Konstantin Ananyev <konstantin.ananyev@intel.com>
CC: Thomas Monjalon <thomas.monjalon@6wind.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
9 years agopcap: fix Rx crash
Pablo de Lara [Tue, 5 Aug 2014 10:18:20 +0000 (11:18 +0100)]
pcap: fix Rx crash

Normally, bufs[i] stores the mbuf pointer, the index of buf[i]
is the loop count i, but if header.len > buf_size, DPDK will
free the mbuf, but the loop count i still increases, so some
of the items in bufs[] might be NULL pointer, causing a potential
DPDK core. Using num_rx as the index for bufs[] solves the problem.

Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Tested-by: Jiajia SunX <sunx.jiajia@intel.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
9 years agokni: fix missing backslash in Makefile
Julien Cretin [Fri, 1 Aug 2014 16:56:01 +0000 (18:56 +0200)]
kni: fix missing backslash in Makefile

With GNU Make 3.81 on Ubuntu 14.04, I get:
lib/librte_eal/linuxapp/kni/Makefile:49: *** unterminated call to function `shell': missing `)'.  Stop.

Signed-off-by: Julien Cretin <julien.cretin@trust-in-soft.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
9 years agoexamples/l3fwd: improve grouping by destination port
Konstantin Ananyev [Tue, 22 Jul 2014 16:04:47 +0000 (17:04 +0100)]
examples/l3fwd: improve grouping by destination port

Latest changes introduced a small degradation for the corner case
when each input packet is destined to the different port.
For the test-case when 1 core manages 4 ports and packet stream looks like:
IPV4_DSTPORT0, IPV4_DSTPORT1, IPV4_DSTPORT3, IPV4_DSTPORT4, IPV4_DSTPORT0, ...
non-optimised code path outperforms optimised one by 2-3%.
These changes supposed to close that gap.
From my testing: now for the case described above optimised code path
produces same numbers as non-optimised one.
For other test-cases numbers remain about the same.

Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
9 years agoether: fix local address check
Thomas Monjalon [Fri, 1 Aug 2014 15:53:51 +0000 (17:53 +0200)]
ether: fix local address check

cppcheck reports show that is_local_admin_ether_addr() was broken:
Expression '(X & 0x2) == 0x1' is always false

Reported-by: David Binderman <dcb314@hotmail.com>
Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
9 years agobond: fix unit tests
Declan Doherty [Mon, 21 Jul 2014 14:52:17 +0000 (15:52 +0100)]
bond: fix unit tests

- Fix bonding unit test suite which was failing due to a change
  in pmd configuration behaviour introduced in commit
  a130f531187249a88 (add link state interrupt flag)
- Added fixes to allow the ability to re-run test suite from test
  application without restarting application

Signed-off-by: Declan Doherty <declan.doherty@intel.com>
Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
9 years agoapp/test: new assert macros and test suite runner
Declan Doherty [Mon, 21 Jul 2014 14:52:16 +0000 (15:52 +0100)]
app/test: new assert macros and test suite runner

- Adding common test assertion macros for unit testing
- Structs for encapsulating unit tests / test suites data.
- test suite runner method

Signed-off-by: Declan Doherty <declan.doherty@intel.com>
Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
9 years agovmxnet3: initialize receive mode for broadcast
Stephen Hemminger [Fri, 25 Jul 2014 17:50:37 +0000 (10:50 -0700)]
vmxnet3: initialize receive mode for broadcast

The driver must listen to broadcast packets, like other devices.
Otherwise protocols like ARP won't work!

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
9 years agovirtio: fix build with debug
Ouyang Changchun [Thu, 24 Jul 2014 04:57:45 +0000 (12:57 +0800)]
virtio: fix build with debug

Fix 2 compilation issues in virtio PMD when dump option is enabled.

These errors were introduced by commits
    f37cdfde46a30 (remove unused virtqueue name)
and ce65e697c67ba (simplify the hardware structure).

Signed-off-by: Changchun Ouyang <changchun.ouyang@intel.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
9 years agokni: fix build on Ubuntu 14.04
Patrice Buriez [Thu, 24 Jul 2014 14:28:51 +0000 (15:28 +0100)]
kni: fix build on Ubuntu 14.04

Recent Ubuntu kernel 3.13.0-30.54, although based on Linux kernel 3.13.11,
already provides skb_set_hash() inline function, slightly different than
the one provided by lib/librte_eal/linuxapp/kni/ethtool/igb/kcompat.h

Ubuntu kernel 3.13.0-30.54 provides:
    * i40e/i40evf: i40e implementation for skb_set_hash
    - https://bugs.launchpad.net/bugs/1328037
    - http://changelogs.ubuntu.com/changelogs/pool/main/l/linux/linux_3.13.0-30.54/changelog

As a result, the implementation provided by kcompat.h must be skipped.
It is not appropriate to test whether LINUX_VERSION_CODE >= KERNEL_VERSION(3,13,11)
because previous Ubuntu kernel 3.13.0-29.53, already based on 3.13.11, needs to
get the implementation provided by kcompat.h

So the full Ubuntu kernel version numbering scheme must be tested:
<base kernel version>-<ABI number>.<upload number>-<flavour>
See "What does a specific Ubuntu kernel version number mean?"
and "How can we determine the version of the running kernel?"
at: https://wiki.ubuntu.com/Kernel/FAQ

Unlike RHEL_RELEASE_CODE, there is no such UBUNTU_RELEASE_CODE available out of
the box, so it needs to be crafted from the Makefile
Similarly, UBUNTU_KERNEL_CODE is generated with ABI and upload numbers.

`lsb_release -si` is first used to check whether we are running Ubuntu
`lsb_release -sr` provides release number 14.04, then converted to integer 1404
/proc/version_signature is parsed to get base kernel version, ABI and upload
numbers, and flavour is dropped

UBUNTU_KERNEL_CODE is indirectly defined using the UBUNTU_KERNEL_VERSION macro,
which in turn is defined in kcompat.h
This makes a single place to define the Ubuntu kernel version numbering scheme,
which is slightly different than the usual "shift by 8" scheme: ABI numbers can
be big (see: https://wiki.ubuntu.com/Kernel/Dev/TopicBranches), so 16-bits have
been reserved for them.

Finally, the implementaion of skb_set_hash is skipped in kcompat.h if we are
running Ubuntu 14.04 with an Ubuntu kernel >= 3.13.0-30.54

Signed-off-by: Patrice Buriez <patrice.buriez@intel.com>
[Thomas: simpler form, use tr instead of subst]
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
9 years agoigb_uio: handle no IRQ fallback
Stephen Hemminger [Fri, 25 Jul 2014 17:37:54 +0000 (10:37 -0700)]
igb_uio: handle no IRQ fallback

Fix a couple of issues with my earlier igb_uio stuff:
1. With MSI (like MSI-X) actual IRQ number is not known until
   after the pci_enable_msi() is done.
2. If INTX fails, fall back to running without IRQ.
   This allows usermode PCI to recover and run without out IRQ
   for cases where PCI INTX support is broken (aka VMWare).

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
9 years agoigb_uio: fix compability on old kernel
Stephen Hemminger [Fri, 25 Jul 2014 17:36:27 +0000 (10:36 -0700)]
igb_uio: fix compability on old kernel

Add more compatibility wrappers, and split out all the wrapper
code to a separate file. Builds on Debian Squeeze (2.6.32) which
is oldest version of kernel current DPDK supports.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
9 years agoigb_uio: fix build with kernel older than 2.6.34
Thomas Monjalon [Wed, 23 Jul 2014 08:06:32 +0000 (10:06 +0200)]
igb_uio: fix build with kernel older than 2.6.34

There was a missing brace in commit 819fc2fe2ad99
(dont wrap pci_num_vf function needlessly).

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
9 years agoacl: make tailq fully local
Anatoly Burakov [Fri, 20 Jun 2014 15:42:25 +0000 (16:42 +0100)]
acl: make tailq fully local

Since the data structures such as rings are shared in their entirety,
those TAILQ pointers are shared as well. Meaning that, after a
successful rte_ring creation, the tailq_next pointer of the last
ring in the TAILQ will be updated with a pointer to a ring which may
not be present in the address space of another process (i.e. a ring
that may be host-local or guest-local, and not shared over IVSHMEM).
Any successive ring create/lookup on the other side of IVSHMEM will
result in trying to dereference an invalid pointer.

This patchset fixes this problem by creating a default tailq entry
that may be used by any data structure that chooses to use TAILQs.
This default TAILQ entry will consist of a tailq_next/tailq_prev
pointers, and an opaque pointer to arbitrary data. All TAILQ
pointers from data structures themselves will be removed and
replaced by those generic TAILQ entries, thus fixing the problem
of potentially exposing local address space to shared structures.

Technically, only rte_ring structure require modification, because
IVSHMEM is only using memzones (which aren't in TAILQs) and rings,
but for consistency's sake other TAILQ-based data structures were
adapted as well.

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
9 years agolpm: make tailq fully local
Anatoly Burakov [Fri, 20 Jun 2014 15:42:23 +0000 (16:42 +0100)]
lpm: make tailq fully local

Since the data structures such as rings are shared in their entirety,
those TAILQ pointers are shared as well. Meaning that, after a
successful rte_ring creation, the tailq_next pointer of the last
ring in the TAILQ will be updated with a pointer to a ring which may
not be present in the address space of another process (i.e. a ring
that may be host-local or guest-local, and not shared over IVSHMEM).
Any successive ring create/lookup on the other side of IVSHMEM will
result in trying to dereference an invalid pointer.

This patchset fixes this problem by creating a default tailq entry
that may be used by any data structure that chooses to use TAILQs.
This default TAILQ entry will consist of a tailq_next/tailq_prev
pointers, and an opaque pointer to arbitrary data. All TAILQ
pointers from data structures themselves will be removed and
replaced by those generic TAILQ entries, thus fixing the problem
of potentially exposing local address space to shared structures.

Technically, only rte_ring structure require modification, because
IVSHMEM is only using memzones (which aren't in TAILQs) and rings,
but for consistency's sake other TAILQ-based data structures were
adapted as well.

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
9 years agohash: make tailq fully local
Anatoly Burakov [Fri, 20 Jun 2014 15:42:20 +0000 (16:42 +0100)]
hash: make tailq fully local

Since the data structures such as rings are shared in their entirety,
those TAILQ pointers are shared as well. Meaning that, after a
successful rte_ring creation, the tailq_next pointer of the last
ring in the TAILQ will be updated with a pointer to a ring which may
not be present in the address space of another process (i.e. a ring
that may be host-local or guest-local, and not shared over IVSHMEM).
Any successive ring create/lookup on the other side of IVSHMEM will
result in trying to dereference an invalid pointer.

This patchset fixes this problem by creating a default tailq entry
that may be used by any data structure that chooses to use TAILQs.
This default TAILQ entry will consist of a tailq_next/tailq_prev
pointers, and an opaque pointer to arbitrary data. All TAILQ
pointers from data structures themselves will be removed and
replaced by those generic TAILQ entries, thus fixing the problem
of potentially exposing local address space to shared structures.

Technically, only rte_ring structure require modification, because
IVSHMEM is only using memzones (which aren't in TAILQs) and rings,
but for consistency's sake other TAILQ-based data structures were
adapted as well.

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
9 years agomempool: make tailq fully local
Anatoly Burakov [Fri, 20 Jun 2014 15:42:22 +0000 (16:42 +0100)]
mempool: make tailq fully local

Since the data structures such as rings are shared in their entirety,
those TAILQ pointers are shared as well. Meaning that, after a
successful rte_ring creation, the tailq_next pointer of the last
ring in the TAILQ will be updated with a pointer to a ring which may
not be present in the address space of another process (i.e. a ring
that may be host-local or guest-local, and not shared over IVSHMEM).
Any successive ring create/lookup on the other side of IVSHMEM will
result in trying to dereference an invalid pointer.

This patchset fixes this problem by creating a default tailq entry
that may be used by any data structure that chooses to use TAILQs.
This default TAILQ entry will consist of a tailq_next/tailq_prev
pointers, and an opaque pointer to arbitrary data. All TAILQ
pointers from data structures themselves will be removed and
replaced by those generic TAILQ entries, thus fixing the problem
of potentially exposing local address space to shared structures.

Technically, only rte_ring structure require modification, because
IVSHMEM is only using memzones (which aren't in TAILQs) and rings,
but for consistency's sake other TAILQ-based data structures were
adapted as well.

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
9 years agoring: make tailq fully local
Anatoly Burakov [Fri, 20 Jun 2014 15:42:19 +0000 (16:42 +0100)]
ring: make tailq fully local

Since the data structures such as rings are shared in their entirety,
those TAILQ pointers are shared as well. Meaning that, after a
successful rte_ring creation, the tailq_next pointer of the last
ring in the TAILQ will be updated with a pointer to a ring which may
not be present in the address space of another process (i.e. a ring
that may be host-local or guest-local, and not shared over IVSHMEM).
Any successive ring create/lookup on the other side of IVSHMEM will
result in trying to dereference an invalid pointer.

This patchset fixes this problem by creating a default tailq entry
that may be used by any data structure that chooses to use TAILQs.
This default TAILQ entry will consist of a tailq_next/tailq_prev
pointers, and an opaque pointer to arbitrary data. All TAILQ
pointers from data structures themselves will be removed and
replaced by those generic TAILQ entries, thus fixing the problem
of potentially exposing local address space to shared structures.

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
9 years agotailq: change rte_dummy to rte_tailq_entry
Anatoly Burakov [Fri, 20 Jun 2014 15:42:18 +0000 (16:42 +0100)]
tailq: change rte_dummy to rte_tailq_entry

Rename structure and add a data pointer.

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
9 years agoeal: use --base-virtaddr for mapping rte_config as well
Anatoly Burakov [Fri, 20 Jun 2014 15:42:17 +0000 (16:42 +0100)]
eal: use --base-virtaddr for mapping rte_config as well

Use --base-virtaddr to set the address of rte_config file along with
start address of the hugepages. Since the user would likely expect
the hugepages to be starting at the specified address, the specified
address will likely be rounded to either 2M or 1G. So, in order to
not waste space, we subtract the length of the config (and align it
on page boundary) from the base virtual address and map the config
just before the hugepages.

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
9 years agoeal: map shared config into exact same address as primary process
Anatoly Burakov [Fri, 20 Jun 2014 15:42:16 +0000 (16:42 +0100)]
eal: map shared config into exact same address as primary process

Shared config is shared across primary and secondary processes.
However,when using rte_malloc, the malloc elements keep references to
the heap inside themselves. This heap reference might not be referencing
a local heap because the heap reference points to the heap of whatever
process has allocated that malloc element. Therefore, there can be
situations when malloc elements in a given heap actually reference
different addresses for the same heap - depending on which process has
allocated the element. This can lead to segmentation faults when dealing
with malloc elements allocated on the same heap by different processes.

To fix this problem, heaps will now have the same addresses across
processes. In order to achieve that, a new field in a shared mem_config
(a structure that holds the heaps, and which is shared across processes)
was added to keep the address of where this config is mapped in the
primary process.

Secondary process will now map the config in two stages - first, it'll
map it into an arbitrary address and read the address the primary
process has allocated for the shared config. Then, the config is
unmapped and re-mapped using the address previously read.

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
9 years agoring: simplify unit tests
Pablo de Lara [Wed, 9 Jul 2014 14:35:36 +0000 (15:35 +0100)]
ring: simplify unit tests

As this unit test does not create devices anymore,
and uses devices created by EAL option --vdev,
there were unnecesary tests that were repeated,
so they have been removed.

So now there are three tests:

1 - Test two devices that share a ring, one device
    with just one RX queue and the other with one
    TX queue.

2 - Test a device connected to itself (loopback) by
    a ring, with both RX and TX queue.

3 - Test two devices that share a ring, but both devices
    with RX and TX queue, so they can send packets to themselves
    and to the other device.

Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
9 years agoring: remove extra devices creation with --vdev option
Pablo de Lara [Wed, 9 Jul 2014 14:35:35 +0000 (15:35 +0100)]
ring: remove extra devices creation with --vdev option

When passing extra arguments in EAL option --vdev, to create
ring ethdevs, API was creating three ethdevs, even if there
was just one argument, such as CREATE.

Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>