From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jerin Jacob Subject: Re: [PATCH 2/2] net/thunderx: wait to complete during link update Date: Mon, 3 Apr 2017 20:25:59 +0530 Message-ID: <20170403145518.ahzma7cjalosxomx@localhost.localdomain> References: <1490968669-9161-1-git-send-email-Andriy.Berestovskyy@caviumnetworks.com> <1490968669-9161-2-git-send-email-Andriy.Berestovskyy@caviumnetworks.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: Maciej Czekaj , dev@dpdk.org To: Andriy Berestovskyy Return-path: Received: from NAM01-SN1-obe.outbound.protection.outlook.com (mail-sn1nam01on0040.outbound.protection.outlook.com [104.47.32.40]) by dpdk.org (Postfix) with ESMTP id 4FBC12BBE for ; Mon, 3 Apr 2017 16:56:23 +0200 (CEST) Content-Disposition: inline In-Reply-To: <1490968669-9161-2-git-send-email-Andriy.Berestovskyy@caviumnetworks.com> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On Fri, Mar 31, 2017 at 03:57:49PM +0200, Andriy Berestovskyy wrote: > Some DPDK applications/examples check link status on their > start. NICVF does not wait for the link, so those apps fail. > > Wait up to 9 seconds for the link as other PMDs do in order > to fix those apps/examples. > > Signed-off-by: Andriy Berestovskyy Acked-by: Jerin Jacob > --- > drivers/net/thunderx/nicvf_ethdev.c | 21 +++++++++++++++++---- > 1 file changed, 17 insertions(+), 4 deletions(-) > > diff --git a/drivers/net/thunderx/nicvf_ethdev.c b/drivers/net/thunderx/nicvf_ethdev.c > index 984c218..2fe653a 100644 > --- a/drivers/net/thunderx/nicvf_ethdev.c > +++ b/drivers/net/thunderx/nicvf_ethdev.c > @@ -145,16 +145,29 @@ nicvf_periodic_alarm_stop(void (fn)(void *), void *arg) > * Return 0 means link status changed, -1 means not changed > */ > static int > -nicvf_dev_link_update(struct rte_eth_dev *dev, > - int wait_to_complete __rte_unused) > +nicvf_dev_link_update(struct rte_eth_dev *dev, int wait_to_complete) > { > +#define CHECK_INTERVAL 100 /* 100ms */ > +#define MAX_CHECK_TIME 90 /* 9s (90 * 100ms) in total */ > struct rte_eth_link link; > struct nicvf *nic = nicvf_pmd_priv(dev); > + int i; > > PMD_INIT_FUNC_TRACE(); > > - memset(&link, 0, sizeof(link)); > - nicvf_set_eth_link_status(nic, &link); > + if (wait_to_complete) { > + /* rte_eth_link_get() might need to wait up to 9 seconds */ > + for (i = 0; i < MAX_CHECK_TIME; i++) { > + memset(&link, 0, sizeof(link)); > + nicvf_set_eth_link_status(nic, &link); > + if (link.link_status) > + break; > + rte_delay_ms(CHECK_INTERVAL); > + } > + } else { > + memset(&link, 0, sizeof(link)); > + nicvf_set_eth_link_status(nic, &link); > + } > return nicvf_atomic_write_link_status(dev, &link); > } > > -- > 2.7.4 >