From: Kalesh AP <kalesh-anakkur.pura...@broadcom.com>

Added code to handle error recovery events in testpmd.
This is an indication from the PMD that it is undergoing
an error recovery and recovered from the error condition.

Signed-off-by: Kalesh AP <kalesh-anakkur.pura...@broadcom.com>
Signed-off-by: Somnath Kotur <somnath.ko...@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khapa...@broadcom.com>
---
 app/test-pmd/parameters.c |  8 ++++++--
 app/test-pmd/testpmd.c    | 10 +++++++++-
 2 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c
index daf6a31..deea29f 100644
--- a/app/test-pmd/parameters.c
+++ b/app/test-pmd/parameters.c
@@ -175,9 +175,9 @@ usage(char* progname)
        printf("  --no-rmv-interrupt: disable device removal interrupt.\n");
        printf("  --bitrate-stats=N: set the logical core N to perform "
                "bit-rate calculation.\n");
-       printf("  --print-event 
<unknown|intr_lsc|queue_state|intr_reset|vf_mbox|macsec|intr_rmv|flow_aged|all>:
 "
+       printf("  --print-event 
<unknown|intr_lsc|queue_state|intr_reset|vf_mbox|macsec|intr_rmv|flow_aged|err_recovering|recovered|all>:
 "
               "enable print of designated event or all of them.\n");
-       printf("  --mask-event 
<unknown|intr_lsc|queue_state|intr_reset|vf_mbox|macsec|intr_rmv|flow_aged|all>:
 "
+       printf("  --mask-event 
<unknown|intr_lsc|queue_state|intr_reset|vf_mbox|macsec|intr_rmv|flow_aged|err_recovering|recovered|all>:
 "
               "disable print of designated event or all of them.\n");
        printf("  --flow-isolate-all: "
               "requests flow API isolated mode on all ports at initialization 
time.\n");
@@ -461,6 +461,10 @@ parse_event_printing_config(const char *optarg, int enable)
                mask = UINT32_C(1) << RTE_ETH_EVENT_DESTROY;
        else if (!strcmp(optarg, "flow_aged"))
                mask = UINT32_C(1) << RTE_ETH_EVENT_FLOW_AGED;
+       else if (!strcmp(optarg, "err_recovering"))
+               mask = UINT32_C(1) << RTE_ETH_EVENT_ERR_RECOVERING;
+       else if (!strcmp(optarg, "recovered"))
+               mask = UINT32_C(1) << RTE_ETH_EVENT_RECOVERED;
        else if (!strcmp(optarg, "all"))
                mask = ~UINT32_C(0);
        else {
diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index e1da961..7b64751 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -417,6 +417,8 @@ static const char * const eth_event_desc[] = {
        [RTE_ETH_EVENT_NEW] = "device probed",
        [RTE_ETH_EVENT_DESTROY] = "device released",
        [RTE_ETH_EVENT_FLOW_AGED] = "flow aged",
+       [RTE_ETH_EVENT_ERR_RECOVERING] = "device error, recovery in progress",
+       [RTE_ETH_EVENT_RECOVERED] = "device recovered",
        [RTE_ETH_EVENT_MAX] = NULL,
 };
 
@@ -431,7 +433,9 @@ uint32_t event_print_mask = (UINT32_C(1) << 
RTE_ETH_EVENT_UNKNOWN) |
                            (UINT32_C(1) << RTE_ETH_EVENT_IPSEC) |
                            (UINT32_C(1) << RTE_ETH_EVENT_MACSEC) |
                            (UINT32_C(1) << RTE_ETH_EVENT_INTR_RMV) |
-                           (UINT32_C(1) << RTE_ETH_EVENT_FLOW_AGED);
+                           (UINT32_C(1) << RTE_ETH_EVENT_FLOW_AGED) |
+                           (UINT32_C(1) << RTE_ETH_EVENT_ERR_RECOVERING) |
+                           (UINT32_C(1) << RTE_ETH_EVENT_RECOVERED);
 /*
  * Decide if all memory are locked for performance.
  */
@@ -3564,6 +3568,10 @@ eth_event_callback(portid_t port_id, enum 
rte_eth_event_type type, void *param,
                ports[port_id].port_status = RTE_PORT_CLOSED;
                printf("Port %u is closed\n", port_id);
                break;
+       case RTE_ETH_EVENT_RECOVERED:
+               /* for now, flush flows to avoid displaying stale entries */
+               port_flow_flush(port_id);
+               break;
        default:
                break;
        }
-- 
2.10.1

Reply via email to