The assertion of return value from the open() function is done against
0, while it is a correct value - open() returns -1 in case of an error.
It causes problems while trying to run as a daemon, in which case, this
call to open() will return 0 as a valid descriptor.
Fixes: b94e5c9406 ("eal/arm: add CPU flags for ARMv7")
Fixes: 97523f822b ("eal/arm: add CPU flags for ARMv8")
Fixes: 9ae1553856 ("eal/ppc: cpu flag checks for IBM Power")
Cc: stable@dpdk.org
Signed-off-by: Lukasz Majczak <lma@semihalf.com>
Acked-by: Jan Viktorin <viktorin@rehivetech.com>
Acked-by: Chao Zhu <chaozhu@linux.vnet.ibm.com>
When compiled on Ubuntu with extra warnings enabled, the rte_strerror()
function triggered a warning about an unused return value from
strerror_r(). Rather than always have this warning disabled, we fix this,
and in the process do some cleanup of the code so as to reduce the
complexity of the fix, e.g. not having the #ifdef macros inside the
snprintf call.
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Harry van Haaren <harry.van.haaren@intel.com>
Due to the uint32_t accesses in the hash computation, keys that aren't
aligned to a uint32_t boundary or multiples of uint32_t in length, may
see accesses beyond the end of the key. This may cross a page boundary.
Signed-off-by: Chas Williams <chas3@att.com>
Acked-by: Luca Boccassi <bluca@debian.org>
Acked-by: John McNamara <john.mcnamara@intel.com>
The inner L2 length returned by rte_net_get_ptype() is not
properly initialized. If the caller does not zero the header
lengths structure, the inner_l2 field will be undefined.
Fix it by initializing inner_l2 to 0 when parsing a inner layer.
Fixes: 2c15c5377d ("net: support NVGRE in software packet type parser")
Cc: stable@dpdk.org
Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
There is no reason to prevent ring from being larger than 0x0FFFFFFF.
Increase the maximum size to 0x7FFFFFFF, which is the maximum possible
without changing the code and the structure definition (size is stored
on a uint32_t).
Link: http://dpdk.org/ml/archives/dev/2017-September/074701.html
Suggested-by: Venkatesh Nuthula <venki497@gmail.com>
Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Reviewed-by: Anatoly Burakov <anatoly.burakov@intel.com>
When DPDK is compiled on Ubuntu with extra warnings turned on, there is a
warning about the return value from write() being unchecked. Rather than
having builds disable the warning, which may mask other cases we do care
about, we can add a dummy use of the return value in the code to silence it
in this instance.
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Harry van Haaren <harry.van.haaren@intel.com>
The ethdev ABI has been broken in release 17.08 without being bumped.
Fixes: c33ade1227 ("doc: notify ethdev callback process API change")
Cc: stable@dpdk.org
Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
Reviewed-by: Zhiyong Yang <zhiyong.yang@intel.com>
Any log messages during bus initialization maybe lost because
the bus registration constructor is called before the logging constructor.
Fixes: a97725791e ("bus: introduce bus abstraction")
Cc: stable@dpdk.org
Signed-off-by: Stephen Hemminger <sthemmin@microsoft.com>
It is a reminder that the constructors without priority
get the lowest priority.
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
The patch simplifies DPDK applications analysis for developers which use
Intel® VTune Amplifier.
The empty cycles are such iterations that yielded no RX packets. As far as
DPDK is running in poll mode, wasting cycles is equal to wasting CPU time.
Tracing such iterations can identify that device is underutilized. Tracing
empty cycles becomes even more critical if a system uses a lot of Ethernet
ports.
The patch gives possibility to analyze empty cycles without changing
application code. All needs to be done is just to reconfigure and rebuild
the DPDK itself with CONFIG_RTE_ETHDEV_PROFILE_ITT_WASTED_RX_ITERATIONS
enbled. The important thing here is that this does not affect DPDK code.
The profiling code is not being compiled if user does not specify config
flag.
The patch provides common way to inject RX queues profiling and VTune
specific implementation.
Signed-off-by: Ilia Kurakin <ilia.kurakin@intel.com>
Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
Some compilers detect this error:
error: ‘ids[0]’ may be used uninitialized in this function
ret = rte_service_map_lcore_set(i, ids[lcore_iter], 1);
It can be reproduced very easily on Fedora 21 with
gcc-4.9.2-6.fc21.x86_64.
Fixes: 21698354c8 ("service: introduce service cores concept")
Cc: stable@dpdk.org
Signed-off-by: Yi Yang <yi.y.yang@intel.com>
Acked-by: Harry van Haaren <harry.van.haaren@intel.com>
rte_cfgfile_section_num_entries_by_index() is added to get the number of
entries of a section when multiple sections of the same name are
present.
Signed-off-by: Guduri Prathyusha <gprathyusha@caviumnetworks.com>
Reviewed-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
lcore_states store the state of the lcore. Fixing the invalid
dereference of lcore_states with service number
Unit test case service_lcore_start_stop fails with the above fix.
Service core was stopped without stopping the service.
This commit fixes the test by adding negative and positive cases of
stopping the service lcore before and after stopping the service
respectively
Fixes: 21698354c8 ("service: introduce service cores concept")
Fixes: f038a81e1c ("service: add unit tests")
Signed-off-by: Guduri Prathyusha <gprathyusha@caviumnetworks.com>
Reviewed-by: Harry van Haaren <harry.van.haaren@intel.com>
This commit adds a section to the service register function
to make it clear that registering a service, must not configure
service-cores (eg: adding lcores or changing mappings).
Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
Acked-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
This commit adds a new flag that the component (or "backend")
can use to indicate readyness. The service function callback
will not be called until the component sets itself as ready.
The use-case behind adding this feature is eg: a service that
requires configuration before it can start. Any service that
emulates an ethdev will have rte_eth_dev_configure() called,
and only after that the service will know how many queues/etc
to allocate. Once that configuration is complete, the service
marks itself as ready using rte_service_component_runstate_set().
This feature request results from prototyping services, and
requiring a flag in each service to note "internal" readyness.
Instead that logic is now lifted to the service library.
The unit tests have been updated to test the component runstate.
Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
Acked-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
This aligns with the service stats, which are currently
also reset on read. A generic statistics API would be
helpful for the service library in future.
Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
Acked-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
This commit ensures that after an lcore is added, that
it is in the WAIT state. Previously, adding an lcore did
not ensure that the core was ready for being relaunch, which
would cause errors during lcore_start(). Now that the lcore is
ensured to be in WAIT state by the lcore_add() function, this
is no longer an issue.
Fixes: 21698354c8 ("service: introduce service cores concept")
Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
Acked-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
Previously to this commit, the return value of the following
functions was the mask value, instead of a neat 0 or 1.
This commit fixes this using the "!!" trick, to force the
number to 1 instead of the bitmask value itself, bringing
the return value in line with the function documentation.
Fixes: 21698354c8 ("service: introduce service cores concept")
Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
Acked-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
Services can be registered and unregistered, and "holes" can
appear in the contiguous array of services if a service is
unregistered. As a result, we must never iterate to the
number of services (as counted by rte_service_count), instead
scanning the service array and checking if the service is valid.
After this commit, the rte_service_count variable is only used
for its intended purpose; tracking the number of services that
are present.
Fixes: 21698354c8 ("service: introduce service cores concept")
Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
Acked-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
This commit fixes an issue in the service runner function,
where the atomic value was not cleared on exiting the service
function. This resulted in future attempts to run the service
to appear like the function was running, however it was in
reality deadlocked.
This commit refactors the atomic handling to be more readable,
by splitting the implementation code into a new static inline
function. The remaining flow control of atomics in the existing
function is refactored for readability.
Fixes: 21698354c8 ("service: introduce service cores concept")
Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
Acked-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
This commit reworks the service_get_by_name() function to
accept an integer, and removes the service_get_by_id() function.
All functions now accept an integer argument representing the
service, so it is no longer required to expose the service_spec
pointers to the application.
Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
Acked-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
This commit reworks the unregister API to accept an integer.
Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
Acked-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
This commit reworks the statistics functions to use integer ids
for services instead of pointers. Passing UINT32_MAX to the dump
function prints all info, similar to passing NULL previously.
Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
Acked-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
This commit reworks the API to move from two separate start
and stop functions, to a "runstate" API which allows setting
the runstate. The is_running API is replaced with an function
to query the runstate. The runstate functions take a id value
for service. Unit tests and the eventdev sw pmd are updated.
Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
Acked-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
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: e996506a1c ("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: b1b3d9f905 ("eventdev: make vdev init and uninit functions optional")
Fixes: 9a8269d569 ("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: e996506a1c ("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: 9a8269d569 ("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: 3054036f05 ("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: b171fad1ff ("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: 7e8b266501 ("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: 7e8b266501 ("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: 02823c1db0 ("devargs: parse bus policies")
Signed-off-by: Gaetan Rivet <gaetan.rivet@6wind.com>