aboutsummaryrefslogtreecommitdiffstats
path: root/recipes-kernel/cryptodev/sdk_patches/0050-add-basic-optargs-support-for-async_speed-test.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-kernel/cryptodev/sdk_patches/0050-add-basic-optargs-support-for-async_speed-test.patch')
-rw-r--r--recipes-kernel/cryptodev/sdk_patches/0050-add-basic-optargs-support-for-async_speed-test.patch439
1 files changed, 439 insertions, 0 deletions
diff --git a/recipes-kernel/cryptodev/sdk_patches/0050-add-basic-optargs-support-for-async_speed-test.patch b/recipes-kernel/cryptodev/sdk_patches/0050-add-basic-optargs-support-for-async_speed-test.patch
new file mode 100644
index 00000000..f54286ae
--- /dev/null
+++ b/recipes-kernel/cryptodev/sdk_patches/0050-add-basic-optargs-support-for-async_speed-test.patch
@@ -0,0 +1,439 @@
+From 13cb1f2dcf8865b076a7e8290d8f864d91a2d7c7 Mon Sep 17 00:00:00 2001
+From: Cristian Stoica <cristian.stoica@nxp.com>
+Date: Mon, 24 Oct 2016 16:33:55 +0300
+Subject: [PATCH 050/104] add basic optargs support for async_speed test
+
+Signed-off-by: Cristian Stoica <cristian.stoica@nxp.com>
+---
+ tests/async_speed.c | 302 +++++++++++++++++++++++++++++++++++-----------------
+ 1 file changed, 202 insertions(+), 100 deletions(-)
+
+diff --git a/tests/async_speed.c b/tests/async_speed.c
+index 15ab80c..fff3414 100644
+--- a/tests/async_speed.c
++++ b/tests/async_speed.c
+@@ -27,9 +27,45 @@
+ #include <sys/types.h>
+ #include <signal.h>
+ #include <crypto/cryptodev.h>
++#include <stdbool.h>
++#include <unistd.h>
+
+ #ifdef ENABLE_ASYNC
+
++struct test_params {
++ bool tflag;
++ bool nflag;
++ int tvalue;
++ int nvalue;
++};
++
++const char usage_str[] = "Usage: %s [OPTION]... <cipher>|<hash>\n"
++ "Run benchmark test for cipher or hash\n\n"
++ " -t <secs>\t" "time to run each test (default 10 secs)\n"
++ " -n <bytes>\t" "size of the test buffer\n"
++ " -h\t\t" "show this help\n"
++;
++
++int run_null(int fdc, struct test_params tp);
++int run_aes_cbc(int fdc, struct test_params tp);
++int run_aes_xts(int fdc, struct test_params tp);
++int run_crc32c(int fdc, struct test_params tp);
++int run_sha1(int fdc, struct test_params tp);
++int run_sha256(int fdc, struct test_params tp);
++
++#define ALG_COUNT 6
++struct {
++ char *name;
++ int (*func)(int, struct test_params);
++} ciphers[ALG_COUNT] = {
++ {"null", run_null},
++ {"aes-cbc", run_aes_cbc},
++ {"aes-xts", run_aes_xts},
++ {"crc32c", run_crc32c},
++ {"sha1", run_sha1},
++ {"sha256", run_sha256},
++};
++
+ static double udifftimeval(struct timeval start, struct timeval end)
+ {
+ return (double)(end.tv_usec - start.tv_usec) +
+@@ -61,7 +97,7 @@ static void value2human(double bytes, double time, double* data, double* speed,c
+ }
+
+
+-int encrypt_data(struct session_op *sess, int fdc, int chunksize, int alignmask)
++int encrypt_data(int fdc, struct test_params tp, struct session_op *sess)
+ {
+ struct crypt_op cop;
+ char *buffer[64], iv[32];
+@@ -72,31 +108,33 @@ int encrypt_data(struct session_op *sess, int fdc, int chunksize, int alignmask)
+ double secs, ddata, dspeed;
+ char metric[16];
+ int rc, wqueue = 0, bufidx = 0;
++ int alignmask;
+
+ memset(iv, 0x23, 32);
+
+- printf("\tEncrypting in chunks of %d bytes: ", chunksize);
++ printf("\tEncrypting in chunks of %d bytes: ", tp.nvalue);
+ fflush(stdout);
+
++ alignmask = get_alignmask(fdc, sess);
+ for (rc = 0; rc < 64; rc++) {
+ if (alignmask) {
+- if (posix_memalign((void **)(buffer + rc), alignmask + 1, chunksize)) {
++ if (posix_memalign((void **)(buffer + rc), alignmask + 1, tp.nvalue)) {
+ printf("posix_memalign() failed!\n");
+ return 1;
+ }
+ } else {
+- if (!(buffer[rc] = malloc(chunksize))) {
++ if (!(buffer[rc] = malloc(tp.nvalue))) {
+ perror("malloc()");
+ return 1;
+ }
+ }
+- memset(buffer[rc], val++, chunksize);
++ memset(buffer[rc], val++, tp.nvalue);
+ }
+ pfd.fd = fdc;
+ pfd.events = POLLOUT | POLLIN;
+
+ must_finish = 0;
+- alarm(5);
++ alarm(tp.tvalue);
+
+ gettimeofday(&start, NULL);
+ do {
+@@ -111,7 +149,7 @@ int encrypt_data(struct session_op *sess, int fdc, int chunksize, int alignmask)
+ if (pfd.revents & POLLOUT) {
+ memset(&cop, 0, sizeof(cop));
+ cop.ses = sess->ses;
+- cop.len = chunksize;
++ cop.len = tp.nvalue;
+ cop.iv = (unsigned char *)iv;
+ cop.op = COP_ENCRYPT;
+ cop.src = cop.dst = (unsigned char *)buffer[bufidx];
+@@ -146,25 +184,75 @@ int encrypt_data(struct session_op *sess, int fdc, int chunksize, int alignmask)
+ return 0;
+ }
+
+-int main(void)
++void usage(char *cmd_name)
+ {
+- int fd, i, fdc = -1, alignmask = 0;
+- struct session_op sess;
+-#ifdef CIOCGSESSINFO
+- struct session_info_op siop;
+-#endif
+- char keybuf[32];
++ printf(usage_str, cmd_name);
++}
+
+- signal(SIGALRM, alarm_handler);
++int run_test(int id, struct test_params tp)
++{
++ int fd;
++ int fdc;
+
+- if ((fd = open("/dev/crypto", O_RDWR, 0)) < 0) {
++ fd = open("/dev/crypto", O_RDWR, 0);
++ if (fd < 0) {
+ perror("open()");
+- return 1;
++ return fd;
+ }
+ if (ioctl(fd, CRIOGET, &fdc)) {
+ perror("ioctl(CRIOGET)");
+- return 1;
++ return -EINVAL;
++ }
++
++ ciphers[id].func(fdc, tp);
++
++ close(fdc);
++ close(fd);
++}
++
++int get_alignmask(int fdc, struct session_op *sess)
++{
++ int alignmask;
++
++#ifdef CIOCGSESSINFO
++ struct session_info_op siop;
++
++ siop.ses = sess->ses;
++ if (ioctl(fdc, CIOCGSESSINFO, &siop)) {
++ perror("ioctl(CIOCGSESSINFO)");
++ return -EINVAL;
++ }
++ alignmask = siop.alignmask;
++#else
++ alignmask = 0;
++#endif
++
++ return alignmask;
++}
++
++void do_test_vectors(int fdc, struct test_params tp, struct session_op *sess)
++{
++ int i;
++
++ if (tp.nflag) {
++ encrypt_data(fdc, tp, sess);
++ } else {
++ for (i = 256; i <= (64 * 1024); i *= 2) {
++ tp.nvalue = i;
++ if (encrypt_data(fdc, tp, sess)) {
++ break;
++ }
++ }
+ }
++}
++
++
++int run_null(int fdc, struct test_params tp)
++{
++ struct session_op sess;
++ char keybuf[32];
++ int alignmask;
++ int i;
+
+ fprintf(stderr, "Testing NULL cipher: \n");
+ memset(&sess, 0, sizeof(sess));
+@@ -173,21 +261,19 @@ int main(void)
+ sess.key = (unsigned char *)keybuf;
+ if (ioctl(fdc, CIOCGSESSION, &sess)) {
+ perror("ioctl(CIOCGSESSION)");
+- return 1;
+- }
+-#ifdef CIOCGSESSINFO
+- siop.ses = sess.ses;
+- if (ioctl(fdc, CIOCGSESSINFO, &siop)) {
+- perror("ioctl(CIOCGSESSINFO)");
+- return 1;
++ return -EINVAL;
+ }
+- alignmask = siop.alignmask;
+-#endif
+
+- for (i = 256; i <= (64 * 4096); i *= 2) {
+- if (encrypt_data(&sess, fdc, i, alignmask))
+- break;
+- }
++ do_test_vectors(fdc, tp, &sess);
++ return 0;
++}
++
++int run_aes_cbc(int fdc, struct test_params tp)
++{
++ struct session_op sess;
++ char keybuf[32];
++ int alignmask;
++ int i;
+
+ fprintf(stderr, "\nTesting AES-128-CBC cipher: \n");
+ memset(&sess, 0, sizeof(sess));
+@@ -197,21 +283,17 @@ int main(void)
+ sess.key = (unsigned char *)keybuf;
+ if (ioctl(fdc, CIOCGSESSION, &sess)) {
+ perror("ioctl(CIOCGSESSION)");
+- return 1;
+- }
+-#ifdef CIOCGSESSINFO
+- siop.ses = sess.ses;
+- if (ioctl(fdc, CIOCGSESSINFO, &siop)) {
+- perror("ioctl(CIOCGSESSINFO)");
+- return 1;
++ return -EINVAL;
+ }
+- alignmask = siop.alignmask;
+-#endif
+
+- for (i = 256; i <= (64 * 1024); i *= 2) {
+- if (encrypt_data(&sess, fdc, i, alignmask))
+- break;
+- }
++ do_test_vectors(fdc, tp, &sess);
++ return 0;
++}
++
++int run_aes_xts(int fdc, struct test_params tp)
++{
++ struct session_op sess;
++ char keybuf[32];
+
+ fprintf(stderr, "\nTesting AES-256-XTS cipher: \n");
+ memset(&sess, 0, sizeof(sess));
+@@ -221,21 +303,16 @@ int main(void)
+ sess.key = (unsigned char *)keybuf;
+ if (ioctl(fdc, CIOCGSESSION, &sess)) {
+ perror("ioctl(CIOCGSESSION)");
+- return 1;
++ return -EINVAL;
+ }
+-#ifdef CIOCGSESSINFO
+- siop.ses = sess.ses;
+- if (ioctl(fdc, CIOCGSESSINFO, &siop)) {
+- perror("ioctl(CIOCGSESSION)");
+- return 1;
+- }
+- alignmask = siop.alignmask;
+-#endif
+
+- for (i = 256; i <= (64 * 1024); i *= 2) {
+- if (encrypt_data(&sess, fdc, i, alignmask))
+- break;
+- }
++ do_test_vectors(fdc, tp, &sess);
++ return 0;
++}
++
++int run_crc32c(int fdc, struct test_params tp)
++{
++ struct session_op sess;
+
+ fprintf(stderr, "\nTesting CRC32C hash: \n");
+ memset(&sess, 0, sizeof(sess));
+@@ -244,21 +321,14 @@ int main(void)
+ perror("ioctl(CIOCGSESSION)");
+ return 1;
+ }
+-#ifdef CIOCGSESSINFO
+- siop.ses = sess.ses;
+- if (ioctl(fdc, CIOCGSESSINFO, &siop)) {
+- perror("ioctl(CIOCGSESSION)");
+- return 1;
+- }
+- printf("requested hash CRYPTO_CRC32C, got %s with driver %s\n",
+- siop.hash_info.cra_name, siop.hash_info.cra_driver_name);
+- alignmask = siop.alignmask;
+-#endif
+
+- for (i = 256; i <= (64 * 1024); i *= 2) {
+- if (encrypt_data(&sess, fdc, i, alignmask))
+- break;
+- }
++ do_test_vectors(fdc, tp, &sess);
++ return 0;
++}
++
++int run_sha1(int fdc, struct test_params tp)
++{
++ struct session_op sess;
+
+ fprintf(stderr, "\nTesting SHA-1 hash: \n");
+ memset(&sess, 0, sizeof(sess));
+@@ -267,21 +337,14 @@ int main(void)
+ perror("ioctl(CIOCGSESSION)");
+ return 1;
+ }
+-#ifdef CIOCGSESSINFO
+- siop.ses = sess.ses;
+- if (ioctl(fdc, CIOCGSESSINFO, &siop)) {
+- perror("ioctl(CIOCGSESSION)");
+- return 1;
+- }
+- printf("requested hash CRYPTO_SHA1, got %s with driver %s\n",
+- siop.hash_info.cra_name, siop.hash_info.cra_driver_name);
+- alignmask = siop.alignmask;
+-#endif
+
+- for (i = 256; i <= (64 * 1024); i *= 2) {
+- if (encrypt_data(&sess, fdc, i, alignmask))
+- break;
+- }
++ do_test_vectors(fdc, tp, &sess);
++ return 0;
++}
++
++int run_sha256(int fdc, struct test_params tp)
++{
++ struct session_op sess;
+
+ fprintf(stderr, "\nTesting SHA2-256 hash: \n");
+ memset(&sess, 0, sizeof(sess));
+@@ -290,25 +353,64 @@ int main(void)
+ perror("ioctl(CIOCGSESSION)");
+ return 1;
+ }
+-#ifdef CIOCGSESSINFO
+- siop.ses = sess.ses;
+- if (ioctl(fdc, CIOCGSESSINFO, &siop)) {
+- perror("ioctl(CIOCGSESSION)");
+- return 1;
+- }
+- printf("requested hash CRYPTO_SHA2_256, got %s with driver %s\n",
+- siop.hash_info.cra_name, siop.hash_info.cra_driver_name);
+- alignmask = siop.alignmask;
+-#endif
+
+- for (i = 256; i <= (64 * 1024); i *= 2) {
+- if (encrypt_data(&sess, fdc, i, alignmask))
++ do_test_vectors(fdc, tp, &sess);
++ return 0;
++}
++
++int main(int argc, char **argv)
++{
++ int i;
++ int c;
++ int index;
++ bool alg_flag;
++ char *alg_name;
++ struct test_params tp;
++
++ tp.tflag = false;
++ tp.nflag = false;
++ alg_flag = false;
++ opterr = 0;
++ while ((c = getopt(argc, argv, "hn:t:")) != -1) {
++ switch (c) {
++ case 'n':
++ tp.nvalue = atoi(optarg);
++ tp.nflag = true;
++ break;
++ case 't':
++ tp.tvalue = atoi(optarg);
++ tp.tflag = true;
+ break;
++ case 'h': /* no break */
++ default:
++ usage(argv[0]);
++ exit(1);
++ }
++ }
++
++ /* the name of a specific test asked on the command line */
++ if (optind < argc) {
++ alg_name = argv[optind];
++ alg_flag = true;
++ }
++
++ /* default test time */
++ if (!tp.tflag) {
++ tp.tvalue = 5;
++ }
++
++ signal(SIGALRM, alarm_handler);
++
++ for (i = 0; i < ALG_COUNT; i++) {
++ if (alg_flag) {
++ if (strcmp(alg_name, ciphers[i].name) == 0) {
++ run_test(i, tp);
++ }
++ } else {
++ run_test(i, tp);
++ }
+ }
+
+-end:
+- close(fdc);
+- close(fd);
+ return 0;
+ }
+
+--
+2.10.2
+