32937a1c2d7e3945e5ac6f3dee517302f5d1e220
[deb_dpdk.git] / debian / patches / nicvf-0005-net-thunderx-wait-to-complete-during-link-update.patch
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
5
6 Some DPDK applications/examples check link status on their
7 start. NICVF does not wait for the link, so those apps fail.
8
9 Wait up to 9 seconds for the link as other PMDs do in order
10 to fix those apps/examples.
11
12 Signed-off-by: Andriy Berestovskyy <andriy.berestovskyy@caviumnetworks.com>
13 Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
14 ---
15  drivers/net/thunderx/nicvf_ethdev.c | 21 +++++++++++++++++----
16  1 file changed, 17 insertions(+), 4 deletions(-)
17
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
23
24 --- a/drivers/net/thunderx/nicvf_ethdev.c
25 +++ b/drivers/net/thunderx/nicvf_ethdev.c
26 @@ -145,16 +145,29 @@
27   * Return 0 means link status changed, -1 means not changed
28   */
29  static int
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)
33  {
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);
38 +       int i;
39  
40         PMD_INIT_FUNC_TRACE();
41  
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)
50 +                               break;
51 +                       rte_delay_ms(CHECK_INTERVAL);
52 +               }
53 +       } else {
54 +               memset(&link, 0, sizeof(link));
55 +               nicvf_set_eth_link_status(nic, &link);
56 +       }
57         return nicvf_atomic_write_link_status(dev, &link);
58  }
59