This commit reworks the service register function to accept
an extra parameter. The parameter is a uint32_t *, which when
provided will be set to the integer service_id that the newly
registered service is represented by.
This is useful for services that wish to validate settings at
a later point in time - they need to know their own service id.
This commit updates the eventdev sw pmd, as well as unit tests
to use the new register API.
Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
Acked-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
This commit updates the APIs exposed to map service cores and
services. The previous APIs required a pointer to a service,
and used two separate functions for enable and disable. The
new API uses an integer ID for the service and has a parameter
for map or unmap. Unit tests are updated and passing, and the
map file is updated to the new function names.
Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
Acked-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
This commit adds a macro to easily validate a service ID, and then
lookup the service pointer, or return a user-specified error code.
This macro will be heavily used in the following patches as it will
be ID based instead of pointer-based.
The probe_capability function is reworked to use an integer ID instead
of a pointer. Rework the service_get_name() function is updated to use
IDs. Unit tests are updated to keep things compiling after each commit.
Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
Acked-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
This new API returns the number of services that are running on a specific
service core. It allows an application to decide which service core to run
a new service on.
Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
Acked-by: Harry van Haaren <harry.van.haaren@intel.com>
This patch adds a new eth_dev layer API function rte_eth_dev_reset(),
which a DPDK application can call to reset a NIC and keep its port id
afterwards. It means that all software resources allocated in the ethdev
layer are kept, and software & hardware resources of the NIC within the
NIC's PMD are reset to a state simular to that obtained by calling the
PCI dev_uninit() and then dev_init(). This effective sequence of
dev_uninit() and dev_init() is packed into a single API function
rte_eth_dev_reset().
Please see the comments before the declaration of rte_eht_dev_reset()
in lib/librte_ether/rte_ethdev.h to get more details on why this
function is needed, what it does, when it should be called
and what an application should do after calling this function.
See also detailed explanations in the programmer's guide.
Signed-off-by: Wei Dai <wei.dai@intel.com>
Reviewed-by: Remy Horton <remy.horton@intel.com>
While almost all libraries have the library name match the directory name,
some libraries and drivers do not. For those that don't, some have the
version filename use the libname, e.g. null_crypto, others have it use the
directory name, e.g. ether. Using the library name seems the better
standard to follow, so rename rte_ether_version.map to
rte_ethdev_version.map.
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
The filenames of the linker map files for DPDK libraries, all follow a
standard format: rte_<libname>_version.map. The ip_frag version, however,
was missing an underscore in the name, so was non-standard. By changing
this, we no longer need the build system to explicitly be given the name of
the mapfile, as it can determine it from the directory/library name.
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
The names of rte_gro_ctx_create() and rte_gro_ctx_destroy() in
rte_gro_version.map are incorrect. This patch is to fix this issue.
Fixes: e996506a1c07 ("lib/gro: add Generic Receive Offload API framework")
Cc: stable@dpdk.org
Signed-off-by: Jiayu Hu <jiayu.hu@intel.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
Bumping the library version to reflect the ABI change, where
rte_event_pmd_pci_probe(), rte_event_pmd_pci_remove(),
rte_event_pmd_vdev_init(), rte_event_pmd_vdev_uninit()
functions removed from the library.
Fixes: b1b3d9f90502 ("eventdev: make vdev init and uninit functions optional")
Fixes: 9a8269d56942 ("eventdev: make PCI probe and remove functions optional")
Reported-by: Thomas Monjalon <thomas@monjalon.net>
Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
The GRO header file depends on stdint and mbuf.
Spotted with devtools/check-includes.sh
Fixes: e996506a1c07 ("lib/gro: add Generic Receive Offload API framework")
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Acked-by: John McNamara <john.mcnamara@intel.com>
The PCI helper file depends on some EAL definitions.
Spotted with devtools/check-includes.sh:
error: implicit declaration of function ‘rte_eal_process_type’
error: ‘RTE_PROC_PRIMARY’ undeclared
error: implicit declaration of function ‘rte_socket_id’
There was also this error because the inline keyword was missing:
error: ‘rte_event_pmd_pci_probe’ defined but not used
Fixes: 9a8269d56942 ("eventdev: make PCI probe and remove functions optional")
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Acked-by: John McNamara <john.mcnamara@intel.com>
snprintf returns the length it would have written had the given length
been enough, *terminating null byte excluded*.
It will however limit the length of its writing to given length minus
one, and always put a terminating null-byte at the end of the string.
This must be taken into account when calculating the total length of the
device declaration string.
Fixes: 3054036f054a ("eal: fix possible crash in hotplug")
Signed-off-by: Gaetan Rivet <gaetan.rivet@6wind.com>
Each dirty page logging operation should be atomic. But it's not
atomic in current implementation. So it's possible that some dirty
pages can't be logged successfully when different threads try to
log different pages into the same byte of the log buffer concurrently.
This patch fixes this issue.
Fixes: b171fad1ffa5 ("vhost: log used vring changes")
Cc: stable@dpdk.org
Reported-by: Xiao Wang <xiao.w.wang@intel.com>
Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
If rte_eal_devargs_parse fails, the rte_devargs has not yet been inserted
in the global list. When jumping to err_devarg, the removal fails and it
is not properly freed.
Free the allocated rte_devargs if its removal failed.
Coverity issue: 158658
Fixes: 7e8b26650146 ("eal: fix hotplug add / remove")
Signed-off-by: Gaetan Rivet <gaetan.rivet@6wind.com>
If devargs is NULL, building the full_dev_name will segfault
when using strlen on it.
Coverity issue: 158630
Fixes: 7e8b26650146 ("eal: fix hotplug add / remove")
Signed-off-by: Gaetan Rivet <gaetan.rivet@6wind.com>
Do not fail upon detecting a set bus configuration when adding an
rte_devargs. i.e. adding a blacklisted PCI device while the bus is
configured in whitelist mode.
This failure condition has been introduced when the bus policies
were implemented. This implementation however was meant to strictly
follow the existing API. This check was not and should not be performed
until the current API has been properly deprecated.
The same kind of check is already done when parsing EAL options.
Fixes: 02823c1db0bc ("devargs: parse bus policies")
Signed-off-by: Gaetan Rivet <gaetan.rivet@6wind.com>
When the EAL parses the common options given to the application,
not all subsystems are available. Some device drivers are registered
afterward upon dynamic plugin loading.
Devices using those drivers are thus unable to be parsed by any drivers
and are rejected.
Store the device options first and keep them for later processing.
Parse these right before initializing the buses, the drivers must have
been stabilized at this point.
Signed-off-by: Gaetan Rivet <gaetan.rivet@6wind.com>
Tested-by: Dirk-Holger Lenz <dirk.lenz@ng4t.com>
Printing the number of scanned devices should be a debug log,
not an error.
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
This trivial patch removes wrong comments about
the return value of the rte_eth_copy_pci_info() method.
The method return value type is void.
Signed-off-by: Rami Rosen <rami.rosen@intel.com>
This commit fixes shifts to an integer (1 << shift) which
is assumed to be a 32-bit integer. In this case, the shift is
variable and expected to be valid for 64-bit integers. Given that
the expectation to work with 64 bits exists, we must ensure that
the (1 << shift) one in that formula is actually a uin64_t.
The UINT64_C() macro portably adds the correct suffix to a constant,
informing the compiler that the value is to be assigned 64 bits.
The issue would only manifests when there were greater than 31
services registered.
Fixes: 21698354c832 ("service: introduce service cores concept")
Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
When calling rte_pktmbuf_alloc_bulk, if there are
not enough objects in the mempool, it returns
a negative value, which should be reflected
in the Doxygen comments.
Fixes: 9ec201f5d6e7 ("mbuf: provide bulk allocation")
Cc: stable@dpdk.org
Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
The code eth_dev->intr_handle = &dev->intr_handle; has duplicate code
in the function rte_eth_copy_pci_info(), remove it here.
Signed-off-by: Zhiyong Yang <zhiyong.yang@intel.com>
Acked-by: Gaetan Rivet <gaetan.rivet@6wind.com>
The name of a device is copied in a provided buffer within
rte_eth_dev_detach(). The current sizeof is done on a pointer instead of
the intended array usually pointed to.
The name field of an rte_device is not assured however to point an
rte_devargs name field. The almost correct length to base this copy over
is thus RTE_DEV_NAME_MAX_LEN.
Almost correct, because unfortunately this function does not allow the
user to pass down a size parameter for the buffer it is meant to write.
This API should be fixed, it is broken by design.
Fixes: a1e7c17555e8 ("ethdev: use device name from device structure")
Cc: stable@dpdk.org
Signed-off-by: Gaetan Rivet <gaetan.rivet@6wind.com>
If the device is a vdev, the parsing for PCI will fail with -EFAULT,
and will not try to check for a vdev.
Checking against error values returned by rte_eal_hotplug_add is
inelegant and prone to mistakes. Additionally, the failed PCI probe
prints a useless error that would throw off unsuspecting users:
ERROR: failed to parse device "pci:net_ring0"
This error is printed when attempting to probe a virtual device first
with the PCI bus (here, a net_ring0 device).
Use the relevant functions to infer the intended bus. The limitation to
PCI or vdev device is kept for strict API compatibility. Thus the PCI
probe attempt is avoided and the right function is directly called.
Fixes: 1c35f666df07 ("dev: fix attach proceeding with vdev on PCI success")
Signed-off-by: Gaetan Rivet <gaetan.rivet@6wind.com>
The corrupted code checks only RAW flow item type special case for
returning its size but doesn't deal with any other flow item type
and returns 0 for all the others.
This bug leaves the flow descriptor empty for non RAW types.
The fix takes the correct size to any regular types from appropriate
array.
The same issue, with a similar fix, is in flow action size method
which deals only with RSS special type.
This bug was already present in the original code taken from testpmd.
Fixes: 18da437b5f63 ("ethdev: add flow rule copy function")
Signed-off-by: Matan Azrad <matan@mellanox.com>
Acked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
This capability is not bound to which driver is handling the device, but
whether the bus is able to unplug it.
This check is already performed in rte_eal_dev_detach, there is no need
to do it in the ethdev layer.
Signed-off-by: Gaetan Rivet <gaetan.rivet@6wind.com>
Acked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
The device state should be handled by the ethdev layer when possible.
Applications should not have to do it.
Not setting the state to UNUSED will make the port_id of the device
valid for all ethdev API functions, usually resulting in segfault.
Fixes: 284c908cc588 ("app/testpmd: request device removal interrupt")
Cc: stable@dpdk.org
Signed-off-by: Gaetan Rivet <gaetan.rivet@6wind.com>
Tested-by: Shachar Beiser <shacharbe@mellanox.com>
Acked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
When rte_eal_hotplug_add() successfully probes a PCI device,
the return value is zero.
The check afterward only returns on error different from -EINVAL.
It should return also on success, as there is no need to
attempt probing the device with vdev.
Fixes: 0bba9e605048 ("eal: use new hotplug API in attach")
Cc: stable@dpdk.org
Signed-off-by: Gaetan Rivet <gaetan.rivet@6wind.com>
This function wasn't provided in the original commit.
Fixes: 4f0981e6ec6c ("eal: deprecate log functions")
Cc: stable@dpdk.org
Signed-off-by: Chas Williams <ciwillia@brocade.com>
Use built-in data types for unsupported poly64/128 types
for GCC version lower than 4.9.0
Fixes: 3c4b4024c225 ("arch/arm: add vcopyq_laneq_u32 for old gcc")
Cc: stable@dpdk.org
Signed-off-by: Herbert Guan <herbert.guan@arm.com>
When try to get GRO types, expression "1 << i" with type "int" may
overflow. This patch is to fix this issue.
Coverity issue: 158664
Fixes: e996506a1c07 ("lib/gro: add Generic Receive Offload API framework")
Signed-off-by: Jiayu Hu <jiayu.hu@intel.com>
Disable multiple NUMA warnings on non-NUMA systems.
"EAL: eal_parse_sysfs_value(): cannot open sysfs value
/sys/bus/pci/devices/0000:00:00.0/numa_node
EAL: numa_node is invalid or not present. Set it 0 as default
EAL: cannot open /proc/self/numa_maps, consider that all memory is
in socket_id 0"
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Tested-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
The function rte_cryptodev_create_vdev is an alias
for rte_vdev_init() which is scheduled to move out of the
rte_eal library. Lets deprecate this function to be able to
remove it from the cryptodev library in 17.11.
Signed-off-by: Jan Blunck <jblunck@infradead.org>
Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Acked-by: Declan Doherty <declan.doherty@intel.com>
Acked-by: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
When calling rte_crypto_op_bulk_alloc, the function may
return either a 0, if not enough objects are available
in the mempool or the number of operations requested,
it there are enough available. However, the Doxygen comments
were not matching these two cases.
Fixes: c0f87eb5252b ("cryptodev: change burst API to be crypto op oriented")
Cc: stable@dpdk.org
Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Acked-by: Fiona Trahe <fiona.trahe@intel.com>
When calling rte_cryptodev_sym_session_init(),
if there was an error, it returned -1, instead
of returning the specific error code, which can
be valuable for the application for error handling.
Fixes: b3bbd9e5f265 ("cryptodev: support device independent sessions")
Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Acked-by: Akhil Goyal <akhil.goyal@nxp.com>
Acked-by: Fiona Trahe <fiona.trahe@intel.com>
Commit 8a04cb612589 ("pci: set default numa node for broken systems")
added logic to default to NUMA node 0 when sysfs numa_node information
was wrong or not available.
Unfortunately there are many devices with wrong NUMA node information
that DPDK does not care about but still show warnings for them.
Instead, only check for invalid NUMA node information for devices
managed by the DPDK.
Signed-off-by: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
Set UIO info device file operations open and release. Call pci reset
function inside open and release to clear device state at start and end.
Copied this behaviour from vfio_pci kernel module code. With this patch,
it is not mandatory to issue FLR by PMD's during init and close.
Bus master enable and disable are added in open and release respectively
to take care of device DMA.
Signed-off-by: Shijith Thotton <shijith.thotton@caviumnetworks.com>
Reviewed-by: Jianfeng Tan <jianfeng.tan@intel.com>
Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
Acked-by: Gregory Etelson <gregory@weka.io>
Support for dynamic tokens was added in order to implement the flow command
in testpmd, for which static tokens were not versatile enough due to the
large number of possible parameter combinations.
However, due to its reliance on a temporary array to store dynamic tokens,
this interface suffers from various limitations that need to be addressed
in order to implement more commands in the future:
- The maximum number of dynamic tokens is determined at compilation time
(CMDLINE_PARSE_DYNAMIC_TOKENS). The larger this value, the more stack
space is wasted (one pointer per potential token, i.e. 1kB of stack space
on 64-bit architectures with the default value).
- This temporary array is actually a cache in which entries already present
are not regenerated. This behavior is not documented, which makes dynamic
tokens practically unusable by applications as they do not know which
token is current.
- The cache does not really reduce the number of function calls needed to
retrieve tokens, it was mainly deemed useful to provide context about
other tokens to the generator callback.
- Like testpmd, most users will likely use repeated pointers to a fixed
token header structure (cmdline_token_hdr_t), with internal context-aware
callbacks that do not need to look at other entries; knowing the index of
the current token is enough.
Getting rid of the temporary array and properly documenting usage of the
token generator callback greatly simplifies this interface.
Fixes: 4fffc05a2b2c ("cmdline: support dynamic tokens")
Fixes: 19c90af6285c ("app/testpmd: add flow command")
Cc: stable@dpdk.org
Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
To avoid redundant calls to the token-generating function and provide it
with helpful context, a temporary fixed-size array allocated on the stack
of cmdline_parse() and cmdline_complete() keeps the address of preceding
tokens for the command instance being processed (cmdline_parse_inst_t).
Like the static tokens array in cmdline_parse_inst_t, it must be
NULL-terminated, however this is not properly enforced as it is initialized
once at the beginning of each function and a NULL terminator is never
appended once replaced with generated tokens.
When several commands rely on dynamic tokens, subsequent ones inherit an
already initialized array whose tokens are not regenerated, which causes
various issues such as mixed and repeated tokens from the first command.
Enforcing NULL termination of the dynamic tokens array and reinitializing
its first entry at each iteration solves these issues. Doing so is also
less expensive than a full memset() at each iteration.
Fixes: 4fffc05a2b2c ("cmdline: support dynamic tokens")
Cc: stable@dpdk.org
Signed-off-by: Bernard Iremonger <bernard.iremonger@intel.com>
Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
Crypto operation status RTE_CRYPTO_OP_STATUS_ENQUEUED is removed
from rte_crypto.h as it is not needed for crypto operation processing.
This status value is redundant to RTE_CRYPTO_OP_STATUS_NOT_PROCESSED value
and it was not intended to be part of public API.
Signed-off-by: Kirill Rybalchenko <kirill.rybalchenko@intel.com>
Acked-by: Declan Doherty <declan.doherty@intel.com>