-/*
- * BSD LICENSE
- *
- * Copyright (C) Cavium 2017.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Cavium nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2017 Cavium, Inc
*/
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
-#include <rte_atomic.h>
#include <rte_debug.h>
#include <rte_eal.h>
#include <rte_eventdev.h>
if (signum == SIGINT || signum == SIGTERM) {
printf("\nSignal %d received, preparing to exit...\n",
signum);
- /* request all lcores to exit from the main loop */
- *(int *)test->test_priv = true;
- rte_wmb();
- rte_eal_mp_wait_lcore();
-
- if (test->ops.eventdev_destroy)
- test->ops.eventdev_destroy(test, &opt);
-
- if (test->ops.ethdev_destroy)
- test->ops.ethdev_destroy(test, &opt);
-
- if (test->ops.mempool_destroy)
- test->ops.mempool_destroy(test, &opt);
-
- if (test->ops.test_destroy)
- test->ops.test_destroy(test, &opt);
-
- /* exit with the expected status */
- signal(signum, SIG_DFL);
- kill(getpid(), signum);
+ if (test != NULL) {
+ /* request all lcores to exit from the main loop */
+ *(int *)test->test_priv = true;
+ rte_wmb();
+ }
}
}
/* Parse the command line arguments */
ret = evt_options_parse(&opt, argc, argv);
if (ret) {
- evt_err("parsing on or more user options failed");
+ evt_err("parsing one or more user options failed");
goto error;
}
}
}
+ /* Test specific cryptodev setup */
+ if (test->ops.cryptodev_setup) {
+ if (test->ops.cryptodev_setup(test, &opt)) {
+ evt_err("%s: cryptodev setup failed", opt.test_name);
+ goto ethdev_destroy;
+ }
+ }
+
/* Test specific eventdev setup */
if (test->ops.eventdev_setup) {
if (test->ops.eventdev_setup(test, &opt)) {
evt_err("%s: eventdev setup failed", opt.test_name);
- goto ethdev_destroy;
+ goto cryptodev_destroy;
}
}
}
}
+ if (test->ops.ethdev_rx_stop)
+ test->ops.ethdev_rx_stop(test, &opt);
+
+ if (test->ops.cryptodev_destroy)
+ test->ops.cryptodev_destroy(test, &opt);
+
rte_eal_mp_wait_lcore();
- /* Print the test result */
- ret = test->ops.test_result(test, &opt);
+ if (test->ops.test_result)
+ test->ops.test_result(test, &opt);
+
+ if (test->ops.ethdev_destroy)
+ test->ops.ethdev_destroy(test, &opt);
+
+ if (test->ops.eventdev_destroy)
+ test->ops.eventdev_destroy(test, &opt);
+
+ if (test->ops.mempool_destroy)
+ test->ops.mempool_destroy(test, &opt);
+
+ if (test->ops.test_destroy)
+ test->ops.test_destroy(test, &opt);
+
nocap:
if (ret == EVT_TEST_SUCCESS) {
printf("Result: "CLGRN"%s"CLNRM"\n", "Success");
if (test->ops.eventdev_destroy)
test->ops.eventdev_destroy(test, &opt);
+cryptodev_destroy:
+ if (test->ops.cryptodev_destroy)
+ test->ops.cryptodev_destroy(test, &opt);
+
ethdev_destroy:
if (test->ops.ethdev_destroy)
test->ops.ethdev_destroy(test, &opt);