[dpdk-dev] examples/flow_filtering: add delay during updating link status
Checks
Commit Message
Add up to 9s delay for getting link status to make sure NIC updates
link status successfully, just like other applications such as
testpmd and l2fwd.
Signed-off-by: Beilei Xing <beilei.xing@intel.com>
---
examples/flow_filtering/main.c | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
Comments
Hi Beilei,
PSB
> -----Original Message-----
> From: Beilei Xing [mailto:beilei.xing@intel.com]
> Sent: Wednesday, January 24, 2018 9:53 AM
> To: Ori Kam <orika@mellanox.com>
> Cc: dev@dpdk.org
> Subject: [PATCH] examples/flow_filtering: add delay during updating link
> status
>
> Add up to 9s delay for getting link status to make sure NIC updates link status
> successfully, just like other applications such as testpmd and l2fwd.
>
> Signed-off-by: Beilei Xing <beilei.xing@intel.com>
> ---
> examples/flow_filtering/main.c | 12 +++++++++++-
> 1 file changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/examples/flow_filtering/main.c b/examples/flow_filtering/main.c
> index 4a07b63..1788f24 100644
> --- a/examples/flow_filtering/main.c
> +++ b/examples/flow_filtering/main.c
> @@ -55,6 +55,7 @@
> #include <rte_mbuf.h>
> #include <rte_net.h>
> #include <rte_flow.h>
> +#include <rte_cycles.h>
>
> static volatile bool force_quit;
>
> @@ -119,13 +120,22 @@ main_loop(void)
> rte_eth_dev_close(port_id);
> }
>
> +#define CHECK_INTERVAL 1000 /* 100ms */
This define is not used.
> +#define MAX_REPEAT_TIME 90 /* 9s (90 * 100ms) in total */
> +
> static void
> assert_link_status(void)
> {
> struct rte_eth_link link;
> + uint8_t rep_cnt = MAX_REPEAT_TIME;
>
> memset(&link, 0, sizeof(link));
> - rte_eth_link_get(port_id, &link);
> + do {
> + rte_eth_link_get(port_id, &link);
> + if (link.link_status == ETH_LINK_UP)
> + break;
> + } while (--rep_cnt);
I think you are missing the rte_delay_ms(CHECK_INTERVAL);
Currently the code will work for 90 iterations but we can't grantee the duration.
> +
> if (link.link_status == ETH_LINK_DOWN)
> rte_exit(EXIT_FAILURE, ":: error: link is still down\n"); }
> --
> 2.5.5
Regards,
Ori
> -----Original Message-----
> From: Ori Kam [mailto:orika@mellanox.com]
> Sent: Wednesday, January 24, 2018 4:17 PM
> To: Xing, Beilei <beilei.xing@intel.com>
> Cc: dev@dpdk.org
> Subject: RE: [PATCH] examples/flow_filtering: add delay during updating link
> status
>
> Hi Beilei,
>
> PSB
>
> > -----Original Message-----
> > From: Beilei Xing [mailto:beilei.xing@intel.com]
> > Sent: Wednesday, January 24, 2018 9:53 AM
> > To: Ori Kam <orika@mellanox.com>
> > Cc: dev@dpdk.org
> > Subject: [PATCH] examples/flow_filtering: add delay during updating
> > link status
> >
> > Add up to 9s delay for getting link status to make sure NIC updates
> > link status successfully, just like other applications such as testpmd and
> l2fwd.
> >
> > Signed-off-by: Beilei Xing <beilei.xing@intel.com>
> > ---
> > examples/flow_filtering/main.c | 12 +++++++++++-
> > 1 file changed, 11 insertions(+), 1 deletion(-)
> >
> > diff --git a/examples/flow_filtering/main.c
> > b/examples/flow_filtering/main.c index 4a07b63..1788f24 100644
> > --- a/examples/flow_filtering/main.c
> > +++ b/examples/flow_filtering/main.c
> > @@ -55,6 +55,7 @@
> > #include <rte_mbuf.h>
> > #include <rte_net.h>
> > #include <rte_flow.h>
> > +#include <rte_cycles.h>
> >
> > static volatile bool force_quit;
> >
> > @@ -119,13 +120,22 @@ main_loop(void)
> > rte_eth_dev_close(port_id);
> > }
> >
> > +#define CHECK_INTERVAL 1000 /* 100ms */
>
> This define is not used.
>
> > +#define MAX_REPEAT_TIME 90 /* 9s (90 * 100ms) in total */
> > +
> > static void
> > assert_link_status(void)
> > {
> > struct rte_eth_link link;
> > + uint8_t rep_cnt = MAX_REPEAT_TIME;
> >
> > memset(&link, 0, sizeof(link));
> > - rte_eth_link_get(port_id, &link);
> > + do {
> > + rte_eth_link_get(port_id, &link);
> > + if (link.link_status == ETH_LINK_UP)
> > + break;
> > + } while (--rep_cnt);
>
> I think you are missing the rte_delay_ms(CHECK_INTERVAL); Currently the
> code will work for 90 iterations but we can't grantee the duration.
Sorry for missing rte_delay_ms in this patch, will send v2 later, thanks.
>
> > +
> > if (link.link_status == ETH_LINK_DOWN)
> > rte_exit(EXIT_FAILURE, ":: error: link is still down\n"); }
> > --
> > 2.5.5
>
> Regards,
> Ori
@@ -55,6 +55,7 @@
#include <rte_mbuf.h>
#include <rte_net.h>
#include <rte_flow.h>
+#include <rte_cycles.h>
static volatile bool force_quit;
@@ -119,13 +120,22 @@ main_loop(void)
rte_eth_dev_close(port_id);
}
+#define CHECK_INTERVAL 1000 /* 100ms */
+#define MAX_REPEAT_TIME 90 /* 9s (90 * 100ms) in total */
+
static void
assert_link_status(void)
{
struct rte_eth_link link;
+ uint8_t rep_cnt = MAX_REPEAT_TIME;
memset(&link, 0, sizeof(link));
- rte_eth_link_get(port_id, &link);
+ do {
+ rte_eth_link_get(port_id, &link);
+ if (link.link_status == ETH_LINK_UP)
+ break;
+ } while (--rep_cnt);
+
if (link.link_status == ETH_LINK_DOWN)
rte_exit(EXIT_FAILURE, ":: error: link is still down\n");
}