Go to file
Nélio Laranjeiro 7ba5320baa net/mlx5: fix link status behavior
This behavior is mixed between what should be handled by the application
and what is under PMD responsibility.

According to DPDK API:
- link_update() should only query the link status [1]
- link_set_{up,down}() should only set the link to the according status [1]
- dev_{start,stop}() should enable/disable traffic reception/emission [2]

On this PMD, the link status is retrieved from the net device associated
owned by the Linux Kernel, it does not means that even when this interface
is down, the PMD cannot send/receive traffic from the NIC those two
information are unrelated, until the physical port is active and has a
link, the PMD can receive/send traffic on the wire.

According to DPDK API, calling the rte_eth_dev_start() even when the Linux
interface link is down is then possible and allowed, as the traffic will
flow between the DPDK application and the Physical port.

This also means that a synchronization between the Linux interface and the
DPDK application remains under the DPDK application responsibility.

To handle such synchronization the application should behave as the
following scheme, to start:

 rte_eth_get_link(port_id, &link);
 if (link.link_status == ETH_DOWN)
	rte_eth_dev_set_link_up(port_id);
 rte_eth_dev_start(port_id);

Taking in account the possible returned values for each function.

and to stop:

 rte_eth_dev_stop(port_id);
 rte_eth_dev_set_link_down(port_id);

The application should also set the LSC interrupt callbacks to catch and
behave accordingly when the administrator set the Linux device down/up.
The same callbacks are called when the link on the medium falls/raise.

[1] https://dpdk.org/browse/dpdk/tree/lib/librte_ether/rte_ethdev_core.h
[2] https://dpdk.org/browse/dpdk/tree/lib/librte_ether/rte_ethdev.h#n1677

Fixes: c7bf62255e ("net/mlx5: fix handling link status event")
Fixes: e313ef4c2f ("net/mlx5: fix link state on device start")
Cc: stable@dpdk.org

Signed-off-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
Acked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
Acked-by: Yongseok Koh <yskoh@mellanox.com>
2018-03-30 14:08:44 +02:00
app app/procinfo: fix strncpy usage in args parsing 2018-03-28 00:35:37 +02:00
buildtools buildtools: output build failure reason to stderr 2018-02-08 22:25:37 +01:00
config build: add meson cross-compilation config for dpaaX 2018-03-15 18:01:01 +01:00
devtools compat: relicense some files 2018-02-06 23:13:47 +01:00
doc net/tap: allow user MAC to be passed as args 2018-03-30 14:08:43 +02:00
drivers net/mlx5: fix link status behavior 2018-03-30 14:08:44 +02:00
examples examples/exception_path: limit core count to 64 2018-03-28 00:35:37 +02:00
kernel kni: fix build on RHEL 7.5 2018-03-28 00:15:08 +02:00
lib ethdev: add link status get/set helper functions 2018-03-30 14:08:43 +02:00
license license: introduce SPDX identifiers 2018-01-04 22:41:38 +01:00
mk mk: fix kernel modules build dependency 2018-03-30 13:01:17 +02:00
pkg version: 18.02.0 2018-02-14 19:11:02 +01:00
test meter: add configuration profile 2018-02-19 22:28:05 +01:00
usertools usertools: support AVP device 2018-03-28 00:49:53 +02:00
.gitattributes improve git diff 2016-11-13 15:25:12 +01:00
.gitignore devtools: add tags and cscope index generation 2017-04-30 12:57:04 +02:00
GNUmakefile move kernel modules directories 2018-03-21 23:04:21 +01:00
MAINTAINERS move kernel modules directories 2018-03-21 23:04:21 +01:00
Makefile license: use SPDX tag in root makefile 2018-01-04 22:41:38 +01:00
meson_options.txt test: build app with meson as dpdk-test 2018-01-30 21:58:59 +01:00
meson.build move kernel modules directories 2018-03-21 23:04:21 +01:00
README license: introduce SPDX identifiers 2018-01-04 22:41:38 +01:00

DPDK is a set of libraries and drivers for fast packet processing.
It supports many processor architectures and both FreeBSD and Linux.

The DPDK uses the Open Source BSD-3-Clause license for the core libraries
and drivers. The kernel components are GPL-2.0 licensed.

Please check the doc directory for release notes,
API documentation, and sample application information.

For questions and usage discussions, subscribe to: users@dpdk.org
Report bugs and issues to the development mailing list: dev@dpdk.org