1 From 0cca56708d781b42561e382fcbcb1f1647b932b9 Mon Sep 17 00:00:00 2001
2 From: Andriy Berestovskyy <andriy.berestovskyy@caviumnetworks.com>
3 Date: Fri, 31 Mar 2017 15:57:49 +0200
4 Subject: [PATCH] net/thunderx: wait to complete during link update
6 Some DPDK applications/examples check link status on their
7 start. NICVF does not wait for the link, so those apps fail.
9 Wait up to 9 seconds for the link as other PMDs do in order
10 to fix those apps/examples.
12 Signed-off-by: Andriy Berestovskyy <andriy.berestovskyy@caviumnetworks.com>
13 Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
15 drivers/net/thunderx/nicvf_ethdev.c | 21 +++++++++++++++++----
16 1 file changed, 17 insertions(+), 4 deletions(-)
18 Origin: http://dpdk.org/browse/dpdk/commit/?id=0cca56708d781b42561e382fcbcb1f1647b932b9
19 Original-Author: Andriy Berestovskyy <andriy.berestovskyy@caviumnetworks.com>
20 Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/dpdk/+bug/1691659
21 Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
22 Last-Update: 2017-05-18
24 --- a/drivers/net/thunderx/nicvf_ethdev.c
25 +++ b/drivers/net/thunderx/nicvf_ethdev.c
27 * Return 0 means link status changed, -1 means not changed
30 -nicvf_dev_link_update(struct rte_eth_dev *dev,
31 - int wait_to_complete __rte_unused)
32 +nicvf_dev_link_update(struct rte_eth_dev *dev, int wait_to_complete)
34 +#define CHECK_INTERVAL 100 /* 100ms */
35 +#define MAX_CHECK_TIME 90 /* 9s (90 * 100ms) in total */
36 struct rte_eth_link link;
37 struct nicvf *nic = nicvf_pmd_priv(dev);
40 PMD_INIT_FUNC_TRACE();
42 - memset(&link, 0, sizeof(link));
43 - nicvf_set_eth_link_status(nic, &link);
44 + if (wait_to_complete) {
45 + /* rte_eth_link_get() might need to wait up to 9 seconds */
46 + for (i = 0; i < MAX_CHECK_TIME; i++) {
47 + memset(&link, 0, sizeof(link));
48 + nicvf_set_eth_link_status(nic, &link);
49 + if (link.link_status)
51 + rte_delay_ms(CHECK_INTERVAL);
54 + memset(&link, 0, sizeof(link));
55 + nicvf_set_eth_link_status(nic, &link);
57 return nicvf_atomic_write_link_status(dev, &link);