[dpdk-dev,v2] 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>
---
v2 changes:
- Add rte_delay_ms(CHECK_INTERVAL) which is missed in v1.
examples/flow_filtering/main.c | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
Comments
Hi
> -----Original Message-----
> From: Beilei Xing [mailto:beilei.xing@intel.com]
> Sent: Wednesday, January 24, 2018 10:35 AM
> To: Ori Kam <orika@mellanox.com>
> Cc: dev@dpdk.org
> Subject: [PATCH v2] 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>
> ---
>
> v2 changes:
> - Add rte_delay_ms(CHECK_INTERVAL) which is missed in v1.
>
> examples/flow_filtering/main.c | 13 ++++++++++++-
> 1 file changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/examples/flow_filtering/main.c b/examples/flow_filtering/main.c
> index 4a07b63..85d5727 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,23 @@ main_loop(void)
> rte_eth_dev_close(port_id);
> }
>
> +#define CHECK_INTERVAL 1000 /* 100ms */
> +#define MAX_REPEAT_TIME 90 /* 9s (90 * 100ms) in total */
I know that in other examples there is use of
MAX_REPEAT_TIME but don't you think the name is incorrect,
It should be called:
MAX_REPEAT_TIMES or MAX_REPEAT_COUNT?
Since it doesn't represent time but iterations.
What do you think?
> +
> 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;
> + rte_delay_ms(CHECK_INTERVAL);
> + } while (--rep_cnt);
> +
> if (link.link_status == ETH_LINK_DOWN)
> rte_exit(EXIT_FAILURE, ":: error: link is still down\n"); }
> --
> 2.5.5
> -----Original Message-----
> From: Ori Kam [mailto:orika@mellanox.com]
> Sent: Wednesday, January 24, 2018 4:56 PM
> To: Xing, Beilei <beilei.xing@intel.com>
> Cc: dev@dpdk.org
> Subject: RE: [PATCH v2] examples/flow_filtering: add delay during updating
> link status
>
> Hi
>
>
> > -----Original Message-----
> > From: Beilei Xing [mailto:beilei.xing@intel.com]
> > Sent: Wednesday, January 24, 2018 10:35 AM
> > To: Ori Kam <orika@mellanox.com>
> > Cc: dev@dpdk.org
> > Subject: [PATCH v2] 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>
> > ---
> >
> > v2 changes:
> > - Add rte_delay_ms(CHECK_INTERVAL) which is missed in v1.
> >
> > examples/flow_filtering/main.c | 13 ++++++++++++-
> > 1 file changed, 12 insertions(+), 1 deletion(-)
> >
> > diff --git a/examples/flow_filtering/main.c
> > b/examples/flow_filtering/main.c index 4a07b63..85d5727 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,23 @@ main_loop(void)
> > rte_eth_dev_close(port_id);
> > }
> >
> > +#define CHECK_INTERVAL 1000 /* 100ms */
> > +#define MAX_REPEAT_TIME 90 /* 9s (90 * 100ms) in total */
>
> I know that in other examples there is use of MAX_REPEAT_TIME but don't
> you think the name is incorrect, It should be called:
> MAX_REPEAT_TIMES or MAX_REPEAT_COUNT?
> Since it doesn't represent time but iterations.
> What do you think?
>
Make sense, looks like MAX_REPEAT_TIMES should be more accurate than MAX_REPEAT_TIME.
Will update in next version.
> > +
> > 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;
> > + rte_delay_ms(CHECK_INTERVAL);
> > + } while (--rep_cnt);
> > +
> > if (link.link_status == ETH_LINK_DOWN)
> > rte_exit(EXIT_FAILURE, ":: error: link is still down\n"); }
> > --
> > 2.5.5
@@ -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,23 @@ 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;
+ rte_delay_ms(CHECK_INTERVAL);
+ } while (--rep_cnt);
+
if (link.link_status == ETH_LINK_DOWN)
rte_exit(EXIT_FAILURE, ":: error: link is still down\n");
}